はじめに#
Linuxを使いこなすうえで、ファイルとディレクトリの操作は最も基本的かつ重要なスキルです。GUIのファイルマネージャでは「ドラッグ&ドロップ」で済む操作も、コマンドラインでは専用のコマンドを使って実行します。
本記事では、Linuxでファイル操作を行う際に必須となる基本コマンド(ls、cd、pwd、mkdir、touch、cp、mv、rm)を体系的に解説します。各コマンドの基本的な使い方から実践的なオプションの活用、ワイルドカードによる効率的なファイル指定まで、現場で使えるスキルを身につけられる内容となっています。
本記事で紹介するコマンドは、Ubuntu 24.04 LTS、AlmaLinux 9、Debian 12など、主要なLinuxディストリビューションで共通して使用できます。
動作確認環境#
本記事のコマンドは以下の環境で動作確認しています。
| 項目 |
内容 |
| OS |
Ubuntu 24.04 LTS |
| シェル |
bash 5.3 |
| カーネル |
Linux 6.8 |
WSL2やVirtualBox上のLinux環境でも同様に動作します。
現在地を知る - pwd#
pwdコマンドの基本#
pwd(print working directory)は、現在作業しているディレクトリの絶対パスを表示するコマンドです。ターミナルで作業中に「今どこにいるのか」を確認したいときに使用します。
実行結果の例:
pwdコマンドのオプション#
| オプション |
説明 |
| -L |
シンボリックリンクを含むパスを表示(デフォルト) |
| -P |
シンボリックリンクを解決した物理的なパスを表示 |
シンボリックリンクを含むディレクトリにいる場合、-Pオプションで実際の物理パスを確認できます。
1
2
3
4
5
6
7
8
9
10
|
# シンボリックリンクのディレクトリに移動
cd /var/lock
# 論理パスを表示(シンボリックリンクのまま)
pwd -L
# 出力: /var/lock
# 物理パスを表示(シンボリックリンクを解決)
pwd -P
# 出力: /run/lock
|
ディレクトリを移動する - cd#
cdコマンドの基本#
cd(change directory)は、現在の作業ディレクトリを変更するコマンドです。ファイルシステム内を移動するために最も頻繁に使用するコマンドの一つです。
1
2
3
4
5
6
|
# 指定したディレクトリに移動
cd /var/log
# 確認
pwd
# 出力: /var/log
|
絶対パスと相対パス#
ディレクトリを指定する方法には「絶対パス」と「相対パス」の2種類があります。
| 種類 |
説明 |
例 |
| 絶対パス |
ルートディレクトリ(/)からの完全なパス |
/home/user/documents |
| 相対パス |
現在のディレクトリを基準としたパス |
./documents, ../backup |
相対パスでは、以下の特殊な記号を使用します。
| 記号 |
意味 |
| . |
現在のディレクトリ |
| .. |
親ディレクトリ(1つ上の階層) |
| ~ |
ホームディレクトリ |
| - |
直前にいたディレクトリ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# 現在地を確認
pwd
# 出力: /home/user
# 絶対パスで移動
cd /var/log
pwd
# 出力: /var/log
# 相対パスで親ディレクトリに移動
cd ..
pwd
# 出力: /var
# ホームディレクトリに戻る
cd ~
pwd
# 出力: /home/user
# 引数なしのcdもホームディレクトリに移動
cd
pwd
# 出力: /home/user
|
直前のディレクトリに戻る#
cd -を使用すると、直前にいたディレクトリに戻れます。2つのディレクトリ間を行き来する際に便利です。
1
2
3
4
5
6
7
8
9
10
11
12
|
cd /var/log
pwd
# 出力: /var/log
cd /etc
pwd
# 出力: /etc
cd -
# 出力: /var/log
pwd
# 出力: /var/log
|
cdコマンドの実践的なテクニック#
Tab補完を活用する#
長いディレクトリ名を入力する際は、Tab補完を活用しましょう。パスの一部を入力してTabキーを押すと、候補が自動補完されます。
1
2
3
|
# 「doc」まで入力してTabキーを押す
cd ~/doc[Tab]
# → cd ~/documents/ に補完される
|
複数階層を一度に移動する#
複数の階層を一度に指定できます。
1
2
3
4
5
|
# 3階層上に移動
cd ../../..
# 複数階層下に一度に移動
cd project/src/components
|
ファイル・ディレクトリを一覧表示する - ls#
lsコマンドの基本#
ls(list)は、ディレクトリ内のファイルやサブディレクトリを一覧表示するコマンドです。
1
2
3
4
5
|
# 現在のディレクトリの内容を表示
ls
# 指定したディレクトリの内容を表示
ls /var/log
|
実行結果の例:
1
|
Desktop Documents Downloads Pictures Videos
|
主要なオプション一覧#
lsコマンドには多数のオプションがありますが、実務でよく使用するものを以下にまとめます。
| オプション |
説明 |
| -l |
詳細情報を表示(ロングフォーマット) |
| -a |
隠しファイル(.で始まるファイル)も表示 |
| -h |
ファイルサイズを人間が読みやすい形式で表示 |
| -R |
ディレクトリを再帰的に表示 |
| -t |
更新日時順にソート |
| -r |
逆順にソート |
| -S |
ファイルサイズ順にソート |
| -d |
ディレクトリ自体の情報を表示 |
| -i |
inode番号を表示 |
| -F |
ファイルタイプを示す記号を付加 |
詳細表示(-l オプション)#
-lオプションを使用すると、ファイルの詳細情報が表示されます。
実行結果の例:
1
2
3
4
5
|
total 32
drwxr-xr-x 2 user user 4096 Jan 5 10:30 Desktop
drwxr-xr-x 3 user user 4096 Jan 6 14:20 Documents
-rw-r--r-- 1 user user 8192 Jan 7 09:15 notes.txt
-rwxr-xr-x 1 user user 512 Jan 4 16:45 script.sh
|
各列の意味は以下のとおりです。
graph LR
A["drwxr-xr-x"] --> B["ファイルタイプと<br>パーミッション"]
C["2"] --> D["ハードリンク数"]
E["user"] --> F["所有者"]
G["user"] --> H["所有グループ"]
I["4096"] --> J["ファイルサイズ<br>(バイト)"]
K["Jan 5 10:30"] --> L["最終更新日時"]
M["Desktop"] --> N["ファイル名"]
| 項目 |
説明 |
| ファイルタイプ |
d=ディレクトリ, -=通常ファイル, l=シンボリックリンク |
| パーミッション |
所有者/グループ/その他のrwx権限(各3文字) |
| ハードリンク数 |
そのファイルへのハードリンクの数 |
| 所有者 |
ファイルを所有するユーザー名 |
| 所有グループ |
ファイルを所有するグループ名 |
| ファイルサイズ |
バイト単位のサイズ |
| 最終更新日時 |
最後に変更された日時 |
| ファイル名 |
ファイルまたはディレクトリの名前 |
隠しファイルの表示(-a オプション)#
Linuxでは、ドット(.)で始まるファイルは「隠しファイル」として扱われ、通常のlsでは表示されません。-aオプションで表示できます。
実行結果の例:
1
|
. .. .bashrc .config .profile Desktop Documents
|
.は現在のディレクトリ、..は親ディレクトリを表します。
人間が読みやすいサイズ表示(-h オプション)#
-hオプションを-lと組み合わせると、ファイルサイズがK、M、Gなどの単位で表示されます。
実行結果の例:
1
2
3
4
5
|
total 32K
drwxr-xr-x 2 user user 4.0K Jan 5 10:30 Desktop
drwxr-xr-x 3 user user 4.0K Jan 6 14:20 Documents
-rw-r--r-- 1 user user 8.0K Jan 7 09:15 notes.txt
-rwxr-xr-x 1 user user 512 Jan 4 16:45 script.sh
|
よく使うオプションの組み合わせ#
実務では複数のオプションを組み合わせて使用することが多いです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# 隠しファイルを含む詳細表示(人間が読みやすいサイズ)
ls -lah
# 更新日時順に並べ替えて詳細表示(新しい順)
ls -lt
# 更新日時順に並べ替えて詳細表示(古い順)
ls -ltr
# ファイルサイズ順に並べ替えて詳細表示(大きい順)
ls -lS
# 再帰的にすべてのサブディレクトリも表示
ls -lR
# ファイルタイプを識別しやすく表示
ls -F
# ディレクトリには「/」、実行可能ファイルには「*」が付く
|
lsのエイリアス設定#
頻繁に使用するオプションの組み合わせは、エイリアス(別名)を設定しておくと便利です。多くのディストリビューションでは、以下のエイリアスがデフォルトで設定されています。
1
2
3
4
|
# ~/.bashrcに追加するエイリアスの例
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
|
ディレクトリを作成する - mkdir#
mkdirコマンドの基本#
mkdir(make directory)は、新しいディレクトリを作成するコマンドです。
1
2
3
4
5
|
# 現在のディレクトリにprojectディレクトリを作成
mkdir project
# 絶対パスで指定して作成
mkdir /home/user/documents/reports
|
主要なオプション#
| オプション |
説明 |
| -p |
親ディレクトリも含めて再帰的に作成 |
| -m |
作成時にパーミッションを指定 |
| -v |
作成したディレクトリを表示 |
親ディレクトリを含めて作成(-p オプション)#
-pオプションを使用すると、中間のディレクトリが存在しない場合も含めて一度に作成できます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
# 親ディレクトリが存在しない場合はエラー
mkdir project/src/components
# mkdir: cannot create directory 'project/src/components': No such file or directory
# -pオプションで親ディレクトリも含めて作成
mkdir -p project/src/components
# 確認
ls -R project
# project:
# src
#
# project/src:
# components
#
# project/src/components:
|
パーミッションを指定して作成(-m オプション)#
ディレクトリ作成時にパーミッションを指定できます。
1
2
3
4
5
6
|
# 所有者のみフルアクセス(700)のディレクトリを作成
mkdir -m 700 private
# 確認
ls -ld private
# drwx------ 2 user user 4096 Jan 7 15:00 private
|
複数のディレクトリを一度に作成#
複数のディレクトリ名を指定して一度に作成することもできます。
1
2
3
4
5
6
7
8
9
|
# 複数のディレクトリを一度に作成
mkdir dir1 dir2 dir3
# ブレース展開を使用した効率的な作成
mkdir -p project/{src,test,docs,build}
# 確認
ls project
# build docs src test
|
空のファイルを作成する - touch#
touchコマンドの基本#
touchコマンドは、主に空のファイルを新規作成するために使用します。本来はファイルのタイムスタンプを更新するコマンドですが、指定したファイルが存在しない場合は空のファイルが作成されます。
1
2
3
4
5
6
|
# 空のファイルを作成
touch newfile.txt
# 確認
ls -l newfile.txt
# -rw-r--r-- 1 user user 0 Jan 7 15:30 newfile.txt
|
touchコマンドのオプション#
| オプション |
説明 |
| -a |
アクセス時刻のみ更新 |
| -m |
更新時刻のみ更新 |
| -c |
ファイルが存在しない場合は作成しない |
| -d |
指定した日時にタイムスタンプを設定 |
| -r |
参照ファイルと同じタイムスタンプを設定 |
タイムスタンプの更新#
既存ファイルに対してtouchを実行すると、タイムスタンプが現在時刻に更新されます。
1
2
3
4
5
6
7
8
9
10
|
# 現在のタイムスタンプを確認
ls -l notes.txt
# -rw-r--r-- 1 user user 1024 Jan 5 10:00 notes.txt
# タイムスタンプを更新
touch notes.txt
# タイムスタンプが更新されたことを確認
ls -l notes.txt
# -rw-r--r-- 1 user user 1024 Jan 7 15:35 notes.txt
|
複数のファイルを一度に作成#
1
2
3
4
5
6
7
8
9
|
# 複数の空ファイルを一度に作成
touch file1.txt file2.txt file3.txt
# ブレース展開を使用
touch test_{a,b,c}.log
# 連番ファイルを作成
touch data_{01..05}.csv
# data_01.csv, data_02.csv, data_03.csv, data_04.csv, data_05.csvが作成される
|
ファイル・ディレクトリをコピーする - cp#
cpコマンドの基本#
cp(copy)は、ファイルやディレクトリをコピーするコマンドです。
1
2
3
4
5
6
7
8
|
# ファイルをコピー(同じディレクトリ内)
cp original.txt copy.txt
# ファイルを別のディレクトリにコピー
cp original.txt /home/user/backup/
# ファイルを別のディレクトリに別名でコピー
cp original.txt /home/user/backup/original_backup.txt
|
主要なオプション#
| オプション |
説明 |
| -r, -R |
ディレクトリを再帰的にコピー |
| -i |
上書き前に確認を求める |
| -f |
強制的に上書き |
| -n |
既存ファイルを上書きしない |
| -p |
パーミッション、所有者、タイムスタンプを保持 |
| -a |
-pdr と同等(アーカイブモード) |
| -v |
コピーしたファイルを表示 |
| -u |
コピー先より新しい場合のみコピー |
ディレクトリのコピー(-r オプション)#
ディレクトリをコピーする場合は、-r(recursive)オプションが必要です。
1
2
3
4
5
6
7
|
# ディレクトリをコピー
cp -r project project_backup
# 確認
ls -l
# drwxr-xr-x 4 user user 4096 Jan 7 16:00 project
# drwxr-xr-x 4 user user 4096 Jan 7 16:00 project_backup
|
上書き確認(-i オプション)#
-iオプションを使用すると、コピー先にファイルが存在する場合に確認を求められます。
1
2
|
cp -i original.txt copy.txt
# cp: overwrite 'copy.txt'? y
|
属性を保持してコピー(-a オプション)#
バックアップなど、ファイルの属性(パーミッション、所有者、タイムスタンプ)を保持したい場合は-aオプションを使用します。
1
2
3
4
5
|
# アーカイブモードでコピー(属性を保持)
cp -a /var/www/html /backup/html_backup
# 詳細表示付き
cp -av project project_backup
|
複数ファイルを一度にコピー#
複数のファイルをディレクトリにコピーできます。
1
2
3
4
5
|
# 複数ファイルをディレクトリにコピー
cp file1.txt file2.txt file3.txt /home/user/backup/
# ワイルドカードを使用
cp *.txt /home/user/backup/
|
ファイル・ディレクトリを移動・名前変更する - mv#
mvコマンドの基本#
mv(move)は、ファイルやディレクトリの移動、または名前変更を行うコマンドです。
1
2
3
4
5
6
7
8
|
# ファイル名を変更
mv oldname.txt newname.txt
# ファイルを別のディレクトリに移動
mv document.txt /home/user/documents/
# ファイルを別のディレクトリに別名で移動
mv document.txt /home/user/documents/report.txt
|
主要なオプション#
| オプション |
説明 |
| -i |
上書き前に確認を求める |
| -f |
強制的に上書き |
| -n |
既存ファイルを上書きしない |
| -v |
移動したファイルを表示 |
| -u |
移動先より新しい場合のみ移動 |
ディレクトリの移動と名前変更#
ディレクトリの移動や名前変更も同様に行えます。cpとは異なり、-rオプションは不要です。
1
2
3
4
5
|
# ディレクトリ名を変更
mv old_project new_project
# ディレクトリを別の場所に移動
mv project /home/user/workspace/
|
上書き確認(-i オプション)#
1
2
3
|
# 同名ファイルがある場合に確認
mv -i newfile.txt /home/user/backup/
# mv: overwrite '/home/user/backup/newfile.txt'? y
|
複数ファイルの移動#
1
2
3
4
5
|
# 複数ファイルをディレクトリに移動
mv file1.txt file2.txt file3.txt /home/user/archive/
# ワイルドカードを使用
mv *.log /var/log/archive/
|
ファイル・ディレクトリを削除する - rm#
rmコマンドの基本#
rm(remove)は、ファイルを削除するコマンドです。Linuxのコマンドラインでは、削除したファイルはゴミ箱に移動せず完全に削除されるため、使用には十分注意が必要です。
1
2
3
4
5
|
# ファイルを削除
rm unwanted.txt
# 複数ファイルを削除
rm file1.txt file2.txt file3.txt
|
主要なオプション#
| オプション |
説明 |
| -r, -R |
ディレクトリを再帰的に削除 |
| -i |
削除前に確認を求める |
| -f |
強制的に削除(確認なし、エラー無視) |
| -v |
削除したファイルを表示 |
| -d |
空のディレクトリを削除 |
ディレクトリの削除(-r オプション)#
ディレクトリとその中身を削除するには、-rオプションを使用します。
1
2
3
4
5
6
7
8
|
# ディレクトリを再帰的に削除
rm -r old_project
# 確認付きで削除
rm -ri old_project
# rm: descend into directory 'old_project'? y
# rm: remove regular file 'old_project/file.txt'? y
# rm: remove directory 'old_project'? y
|
強制削除(-f オプション)と危険性#
-fオプションは、確認なしで強制的に削除を実行します。便利ですが危険なため、使用には細心の注意が必要です。
1
2
3
4
5
|
# 強制削除(確認なし)
rm -f file.txt
# ディレクトリを強制的に削除
rm -rf old_directory
|
rmコマンドの危険なパターン#
以下のコマンドは絶対に実行してはいけません。システム全体が破壊されます。
1
2
3
4
|
# 絶対に実行してはいけないコマンド例
rm -rf /
rm -rf /*
rm -rf ~/*
|
安全な運用のためのベストプラクティス:
- 削除前に
lsで対象を確認する
-iオプションで確認を有効にする
- 重要なデータは事前にバックアップする
rm -rfを使う際は対象パスを必ず確認する
1
2
3
4
5
6
7
8
9
|
# 安全な削除パターン
# まず対象を確認
ls old_project
# 確認付きで削除
rm -ri old_project
# または、詳細表示で削除
rm -rv old_project
|
空ディレクトリの削除 - rmdir#
空のディレクトリを削除する場合は、rmdirコマンドも使用できます。ディレクトリが空でない場合はエラーになるため、誤削除防止に役立ちます。
1
2
3
4
5
6
7
8
9
10
|
# 空ディレクトリを削除
rmdir empty_directory
# ディレクトリが空でない場合はエラー
rmdir non_empty_directory
# rmdir: failed to remove 'non_empty_directory': Directory not empty
# 親ディレクトリも含めて削除(-p)
rmdir -p a/b/c
# a/b/c、a/b、aを順番に削除(すべて空の場合)
|
ワイルドカードの活用#
ワイルドカードとは#
ワイルドカード(グロブパターン)は、複数のファイルやディレクトリを一括で指定するための特殊文字です。シェルがコマンド実行前にパターンを展開し、マッチするファイル名に置き換えます。
主なワイルドカード#
| パターン |
説明 |
マッチ例 |
| * |
0文字以上の任意の文字列 |
*.txt → file.txt, notes.txt |
| ? |
任意の1文字 |
file?.txt → file1.txt, fileA.txt |
| [abc] |
角括弧内の任意の1文字 |
file[123].txt → file1.txt, file2.txt |
| [a-z] |
範囲内の任意の1文字 |
file[a-c].txt → filea.txt, fileb.txt |
| [!abc] |
角括弧内以外の1文字 |
file[!12].txt → file3.txt, fileA.txt |
| {a,b,c} |
カンマ区切りの選択肢(ブレース展開) |
{cat,dog}.txt → cat.txt, dog.txt |
ワイルドカードの実践例#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# すべてのテキストファイルを一覧表示
ls *.txt
# 特定のパターンに一致するファイルをコピー
cp report_202[0-9].pdf /backup/
# 拡張子が3文字のすべてのファイルを表示
ls *.???
# file1.txt、file2.txt、file3.txtを一括コピー
cp file[1-3].txt /backup/
# .logまたは.txtファイルをすべて削除
rm *.log *.txt
# ブレース展開で複数パターンを指定
ls {*.jpg,*.png,*.gif}
|
ワイルドカード使用時の注意点#
ワイルドカードを使用する際は、意図しないファイルにマッチしないよう注意が必要です。
1
2
3
4
5
6
|
# まずlsで対象を確認
ls *.tmp
# temp.tmp cache.tmp data.tmp
# 確認後に削除
rm *.tmp
|
隠しファイルとワイルドカード#
*は隠しファイル(ドットで始まるファイル)にはマッチしません。隠しファイルを含める場合は明示的に指定します。
1
2
3
4
5
6
7
|
# 通常のファイルのみ表示
ls *
# 隠しファイルを含めるパターン
ls .[!.]* *
# または
ls -a
|
コマンドの組み合わせ実践例#
プロジェクト構造の一括作成#
新しいプロジェクトのディレクトリ構造を一括で作成する例です。
1
2
3
4
5
6
7
8
|
# プロジェクトディレクトリ構造を作成
mkdir -p myproject/{src,test,docs,build,config}
touch myproject/README.md
touch myproject/src/{main,util,config}.js
touch myproject/test/{main,util,config}.test.js
# 構造を確認
ls -R myproject
|
バックアップ作業#
ファイルのバックアップを作成する実践的な例です。
1
2
3
4
5
6
7
8
9
|
# バックアップディレクトリを作成
mkdir -p ~/backup/$(date +%Y%m%d)
# 設定ファイルをバックアップ
cp -a ~/.bashrc ~/backup/$(date +%Y%m%d)/
cp -a ~/.profile ~/backup/$(date +%Y%m%d)/
# 確認
ls -la ~/backup/$(date +%Y%m%d)/
|
ログファイルの整理#
古いログファイルを整理するパターンです。
1
2
3
4
5
|
# アーカイブディレクトリを作成
mkdir -p /var/log/archive
# 7日以上前のログファイルを移動(findコマンドとの組み合わせ)
find /var/log -name "*.log" -mtime +7 -exec mv {} /var/log/archive/ \;
|
コマンド一覧まとめ#
本記事で解説したコマンドの一覧です。
| コマンド |
機能 |
主要オプション |
| pwd |
現在のディレクトリを表示 |
-P(物理パス) |
| cd |
ディレクトリを移動 |
-(直前に戻る) |
| ls |
ファイル一覧を表示 |
-l, -a, -h, -R, -t |
| mkdir |
ディレクトリを作成 |
-p, -m, -v |
| touch |
空ファイル作成/タイムスタンプ更新 |
-c, -d, -r |
| cp |
ファイル/ディレクトリをコピー |
-r, -i, -a, -v |
| mv |
ファイル/ディレクトリを移動/名前変更 |
-i, -f, -v |
| rm |
ファイル/ディレクトリを削除 |
-r, -i, -f, -v |
| rmdir |
空ディレクトリを削除 |
-p |
まとめ#
本記事では、Linuxでのファイル操作に必須となる基本コマンド(pwd、cd、ls、mkdir、touch、cp、mv、rm)について解説しました。
これらのコマンドは、日々のLinux作業で最も頻繁に使用するものです。以下のポイントを押さえておきましょう。
- pwdで現在地を確認し、cdでディレクトリを移動する
- lsの各種オプションを使いこなして、ファイル情報を効率的に確認する
- mkdir -pで複数階層のディレクトリを一度に作成できる
- cp -rとcp -aの違いを理解し、適切にファイルをコピーする
- mvはファイルの移動と名前変更の両方に使用する
- rmは取り消し不可能なため、削除前に必ず対象を確認する
- ワイルドカードを活用して、複数ファイルを効率的に操作する
次のステップとして、ファイル内容の閲覧(cat、less、head、tail)やテキスト検索(grep)を学ぶと、より効率的にLinuxを操作できるようになります。
参考リンク#