ファイル・ディレクトリ操作系のコマンド
概要
ディレクトリの作成 | mkdir |
ファイルの作成 | >> > touch truncate |
ディレクトリの削除 | rmdir |
削除 | rm |
移動 | mv |
コピー | cp |
ファイルモード(パーミッション)の変更 | chmod |
所有者の変更 | chown |
リンクの作成 | ln |
リンクの削除 | rm unlink |
ワーキングディレクトリの表示 | pwd |
ワーキングディレクトリの変更 | cd |
ディレクトリスタックの操作 | dirs pushd popd |
ファイルシステムの木構造を表示 | tree |
ディスクにおける使用量を表示 | du |
ディスク容量の統計を表示 | df |
ファイルの作成・削除・移動・コピー
作成
mkdir - Make Directory
空のディレクトリを作成する。
mkdir ディレクトリ [ディレクトリ2 ...]
オプション | 意味 |
---|---|
-m MODE --mode=MODE | ファイルモード(パーミッション)を755のような数値形式で指定する。 |
-p --parent | 親ディレクトリがない場合は作成する。 親ディレクトリは-mオプションの影響を受けない。 |
空ファイルの作成
「空のファイルを作成する」ためのコマンドはないため、空のファイルを作成できるコマンドをいくつか示す。
方法 | コマンド例 | ファイルが存在するとき | ファイルが存在しないとき |
---|---|---|---|
リダイレクト(追記) | >> ファイル名 echo -n >> ファイル名 | そのまま(空にならない) | 空ファイルが作成される |
リダイレクト(上書) | > ファイル名 echo -n > ファイル名 | 上書きされ空ファイルになる | 空ファイルが作成される |
truncate | truncate -s 0 ファイル名 | 上書きされ空ファイルになる | 空ファイルが作成される |
truncate (no-createオプション) | truncate -c -s 0 ファイル名 | 上書きされ空ファイルになる | 作成されない |
touch | touch ファイル名 | そのまま(空にならない) | 空ファイルが作成される |
リダイレクトの方法にecho -n
のあり・なしの2種類があるのは、環境によってはecho無しだとエラーになるためである。
削除
rmdir - Remove Directory
空のディレクトリを削除する。
rmdir ディレクトリ [ディレクトリ2 ...]
オプション | 意味 |
---|---|
--ignore-fail-on-non-empty | 空でないディレクトリを削除しようとした場合にメッセージを表示しない。 |
-p --parents | 親ディレクトリも辿って削除する。ただし、他のファイルがあるディレクトリは削除できない。rm dirA/dirB/dirC だと削除対象はdirCのみだが、rm -p dirA/dirB/dirC ではdirA、dirB、dirCが削除対象となる。 |
空でないディレクトリの削除
空でないディレクトリを配下のファイルごと削除するには次のrm -r
を使う。
rm - Remove
ファイル・ディレクトリを削除する。ただし、デフォルトではディレクトリを削除しない。
rm ファイル [ファイル2 ...]
オプション | 意味 |
---|---|
-f --force | ファイルを削除するときにプロンプトを表示しない。 ファイルが存在しない場合にメッセージを表示しない。 |
-i --interactive=always | 各ファイルを削除する前にプロンプトを表示する。 |
-I --interactive=once | ファイルが4個以上、または再帰削除の場合に、プロンプトを1回表示する。 |
-d --dir | 空のディレクトリを削除する。 |
-r -R --recursive | ディレクトリの中身とディレクトリを再帰的に削除する。 |
移動
mv - Move
ファイル、ディレクトリを移動する。宛先がある場合、上書きされる。
mv 移動対象 [移動対象2 ...] 移動先
mv -t 移動先 移動対象 [移動対象2 ...]
名前変更にも使う。
mv [-T] 変更するファイル 変更後の名前
オプション | 意味 |
---|---|
-b --backup[=CONTROL] | 宛先が存在する場合、バックアップを作成する。バックアップの取り方をCONTROLで指定できる。-b を指定したとき、または--backup でCONTROLを指定しなかったときはsimple として動作する。CONTROLの取り得る値 none バックアップしないsimple ~を末尾に付けたバックアップを1世代とる。numbered .~n~を末尾に付け、全ての世代をバックアップする。existing .~n~のバックアップがすでにあればnumbered、なければsimpleとして動作する。 |
-i --interactive | 上書きするときにプロンプトを表示する。 |
-n --no-clobber | ファイルを上書きしない。 |
-f --force | 上書きするときにプロンプトを表示しない。 |
コピー
cp - Copy
ファイル、ディレクトリをコピーする。宛先がある場合、上書きされる。
mv コピー対象 [コピー対象2 ...] コピー先
mv -t コピー先 コピー対象 [コピー対象2 ...]
オプション | 意味 |
---|---|
-b --backup[=CONTROL] | 宛先が存在する場合、バックアップを作成する。バックアップの取り方をCONTROLで指定できる。-b を指定したとき、または--backup でCONTROLを指定しなかったときはsimple として動作する。CONTROLの取り得る値 none バックアップしないsimple ~を末尾に付けたバックアップを1世代とる。numbered .~n~を末尾に付け、全ての世代をバックアップする。existing .~n~のバックアップがすでにあればnumbered、なければsimpleとして動作する。 |
-i --interactive | 上書きするときにプロンプトを表示する。 |
-n --no-clobber | ファイルを上書きしない。 |
-f --force | 宛先が存在するがオープンできない場合、削除してからのコピーを試みる。 |
-r --recursive | コピー対象がディレクトリである場合、ディレクトリの中身ごとを再帰的にコピーする。 |
--preserve[=ATTR_LIST] | コピーするときに属性情報を保存する。mode パーミッションownership 所有者、グループtimestamps タイムスタンプlinks ハードリンクcontext セキュリティコンテキストxattr 拡張属性all 全て |
-p | --preserve=mode,ownership,timestamps と同じ |
ファイルの属性
chmod - Change Mode
ファイルモード(パーミッション)を変更する。
chmod モード指定 変更対象 [変更対象2 ...]
モードは644のように数値で指定する方法、記号で指定する方法がある。
指定方法 | 詳細 | 例 |
---|---|---|
数値指定 | [操作][権限]の形で指定する。権限は3桁目がユーザ、2桁目がグループ、1桁目がその他。 操作 + (追加)、- (削除)、= (設定)権限 4 (読み取り)、2 (書き込み)、1 (実行) | 755 権限を755にする+10 グループに実行権限を追加する-077 グループ、全員から権限を削除する |
コマンド指定 | [対象][操作][権限]の形で指定する。複数指定するときは,で区切って書く。 対象 u (ユーザー)、g (グループ)、o (その他)、a (全員)操作 + (追加)、- (削除)、= (設定)権限 r (読み取り)、w (書き込み)、x (実行) | u=rwx,go=rx 権限を755にするg+x グループに実行権限を追加するgo-rwx グループ、全員から権限を削除する |
オプション | 意味 |
---|---|
--reference=FILE | 参照先のファイルモードを使う。 |
-R --recursive | 再帰的にディテクトリの中のモードを全て変える。 |
chown - Change Ownership
ファイルの所有者、グループを変える。
chown 所有者:所有グループ 変更対象 [変更対象2 ...]
オプション | 意味 |
---|---|
--reference=FILE | 指定したファイルの属性値(所有者とグループ)に変える。 |
-R --recursive | 再帰的にディテクトリの中の全てのファイルを変える。 |
--from=OWNER:GROUP | 現在の所有者がOWNER:GROUPの場合のみ変更する。 |
グループの変更
グループだけを変えるには所有者を記載せず:所有グループ
のようにコロンから始めるか、次のchgrp
を使う。
chgrp - Change Group Ownership
ファイルの所有グループを変える。
chgrp 所有グループ 変更対象 [変更対象2 ...]
オプション | 意味 |
---|---|
--reference=FILE | 指定したファイルの属性値(グループ)に変える。 |
-R --recursive | 再帰的にディテクトリの中の全てのファイルを変える。 |
リンク
ln - Link
リンクを作成する。-s
オプションを付けるとシンボリックリンクとなる。リンク名を省略した場合、またはリンク先にディレクトリを指定した場合は、作成するリンクの名前はリンク先と同じ名前が使われる。
ln リンク先 [リンク名]
オプション | 意味 |
---|---|
-b --backup[=CONTROL] | リンク名が存在する場合、バックアップを作成する。 CONTROL: none バックアップしないsimple ~を末尾に付ける。(1世代のみ)numbered ~n~を末尾に付けるexisting ~n~のバックアップがすでにあればnumbered、なければsimple |
-i --interactive | 上書きするときにプロンプトを表示する。 |
-n --no-clobber | ファイルを上書きしない。 |
-f --force | リンク名が存在する場合、上書きする。 |
-s --symbolic | シンボリックリンクを作る。 |
-r --relative | シンボリックリンクを作るとき、リンク先を現在位置からの相対パスとして扱う。 表下部の「相対パスでのシンボリックリンク」を参照。 |
-P --physical | シンボリックリンクへのハードリンクを作る。 |
相対パスでのシンボリックリンク
シンボリックリンクでは、リンク先の値は単なる文字列であり、存在しなくても良い。-r
オプションを使用すると、リンク先の文字列を相対パスとして解釈する。-r
オプションを指定することでシンボリックリンクのリンク先が変わる例を示す。
ln -s original/data.txt link/symlink
ln -sr original/data.txt link/symlinkR
ls -l link
total 0
lrwxrwxrwx 1 nna17 nna17 17 Mar 1 18:28 symlink -> original/data.txt
lrwxrwxrwx 1 nna17 nna17 20 Mar 1 18:29 symlinkR -> ../original/data.txt
リンクの違い
シンボリックリンクは「リンク先へのショートカット」であり、ハードリンクは「同じ実体の参照」である。
項目 | シンボリックリンク | ハードリンク |
---|---|---|
作成コマンド | ln -s リンク先 リンク名 | ln リンク先 リンク名 |
特徴 | リンク先のパス | 実体が同じ |
リンク先に指定できるもの | ファイルまたはディレクトリ | ファイル |
リンク先のファイルシステム | 制約なし | 同一ファイルシステム |
リンク先が喪失する可能性 | あり | なし |
ln -sr original/data.txt link/symlink
ln original/data.txt link/hardlink

上記の構成でリンクのinode番号を確認するとhardlinkはおなじであることが分かる。
ls -i1U original/* link/*
38433 original/data.txt
38433 link/hardlink
37897 link/symlink
同じファイルdata.txtに対して2種類のリンクを作成した。するとhardlinkはinode番号が同じであることが分かる。
このとき、data.txtを削除すると、symlinkではファイルを開けなくなるが、hardlinkではファイルを開くことができる。
rm original/data.txt
ls -i1U original/* link/*
38433 link/hardlink
37897 link/symlink
cat link/symlink
cat: link/symlink: No such file or directory
cat link/hardlink
This is original.

rm / unlink - Remove / Unlink
リンクを削除する。普通のファイルと同じくrmで削除できる。
rm リンク名
unlink リンク名
ディレクトリへのシンボリックリンクの削除
シンボリックリンクのリンク先ディレクトリを、シンボリックリンクから削除するのは避けた方が良い。ディレクトリdir
へリンクしたシンボリックリンクlinkToDir
がある構成で例を示す。
tree
.
├── dir
│ ├── file1
│ └── file2
└── linkToDir -> dir
このときコマンドによって削除されるアイテムの違いを以下に示す。○が削除されることを表す。
実行コマンド | dir | dir/file1 | dir/file2 | linkToDir |
---|---|---|---|---|
rm linkToDir | ○ | |||
rm -rf linkToDir | ○ | |||
rm -rf linkToDir/ | ○ | ○ | ||
rm dir | ||||
rm -rf dir | ○ | ○ | ○ | |
rm -rf dir/ | ○ | ○ | ○ |
まず、末尾に/
が付いていなければシンボリックリンクの削除と解釈されるため、-rf
をつけてもリンク先が削除されることはない。/
を付けるとdir/*
のように解釈されるのか、リンク先のディレクトリ配下が削除されるが、これはrm -rf dir/
の挙動とは異なる。このような挙動となるため、ディレクトリへのシンボリックリンクを削除するときは、素直にシンボリックリンクを削除する、リンク先へ移動してから削除したい項目を削除するという2段階に分けるのがよいだろう。
ディレクトリツリー
ディレクトリの移動や構成に関するコマンド
ワーキングディレクトリ(カレントワーキングディレクトリ)
pwd - Print Working Directory
標準出力へ現在のワーキングディレクトリを返す。
pwd
cd - Change Working Directory
ワーキングディレクトリを変更する。
cd ディレクトリ
dirs / pushd / popd - Directory Stack
ディレクトリをスタックに記録しながら移動する。
dirs
dirs
はディレクトリスタックを表示する。
dirs [表示オプション]
オプション | 意味 |
---|---|
+INDEX -INDEX | 指定されたインデックスを出力する。 |
-l | パスをフルパスで表示する。 |
-p | 行区切りで表示する。 |
-v | インデックス付きの行区切りで表示する。 |
-c | スタックを空にする。 |
デフォルトではスタックが空であるため、ワーキングディレクトリだけが表示される。
user@pc:~$ dirs
~
user@pc:~$ cd dir1
user@pc:~/dir1$ dirs
~/dir1
-v
オプションを付けるとディレクトリスタックのインデックスが表示されわかりやすくなる。
user@pc:~/dir1$ dirs -v
0 ~/dir1
pushd
pushd
はディレクトリをスタックへ記録しながら指定のディレクトリへ移動する。
pushd [-n] [ディレクトリ | +インデックス | -インデックス]
オプション | 意味 |
---|---|
-n | ディレクトリへ移動しない。 ディレクトリスタックの操作だけを行う。 |
user@pc:~$ pushd dir1/dir2
~/dir1/dir2 ~
user@pc:~/dir1/dir2$ dirs -v
0 ~/dir1/dir2
1 ~
user@pc:~/dir1/dir2$ pushd dir3/dir4
~/dir1/dir2/dir3/dir4 ~/dir1/dir2 ~/dir1
user@pc:~/dir1/dir2/dir3/dir4$ dirs -v
0 ~/dir1/dir2/dir3/dir4
1 ~/dir1/dir2
2 ~
スタックのローテート
pushd
はインデックスが指定された場合、そのインデックスが0の位置に来るようにスタックが回転される。
user@pc:~/dir1/dir2/dir3/dir4/dir5/dir6$ dirs -v
0 ~/dir1/dir2/dir3/dir4/dir5/dir6
1 ~/dir1/dir2/dir3/dir4/dir5
2 ~/dir1/dir2/dir3/dir4
3 ~/dir1/dir2/dir3
4 ~/dir1/dir2
5 ~/dir1
6 ~
user@pc:~/dir1/dir2/dir3/dir4/dir5/dir6$ pushd +3
~/dir1/dir2/dir3 ~/dir1/dir2 ~/dir1 ~ ~/dir1/dir2/dir3/dir4/dir5/dir6 ~/dir1/dir2/dir3/dir4/dir5 ~/dir1/dir2/dir3/dir4
user@pc:~/dir1/dir2/dir3$ dirs -v
0 ~/dir1/dir2/dir3
1 ~/dir1/dir2
2 ~/dir1
3 ~
4 ~/dir1/dir2/dir3/dir4/dir5/dir6
5 ~/dir1/dir2/dir3/dir4/dir5
6 ~/dir1/dir2/dir3/dir4$
popd
popd
はディレクトリをスタックから取り出して移動する。なお0は常にカレントディレクトリであるため、デフォルトの移動先は1である。
popd [+インデックス | -インデックス] [-n]
オプション | 意味 |
---|---|
-n | ディレクトリへ移動しない。 ディレクトリスタックの操作だけを行う。 |
user@pc:~/dir1/dir2/dir3/dir4$ dirs -v
0 ~/dir1/dir2/dir3/dir4
1 ~/dir1/dir2
2 ~
user@pc:~/dir1/dir2/dir3/dir4$ popd
~/dir1/dir2 ~
user@pc:~/dir1/dir2$ dirs -v
0 ~/dir1/dir2
1 ~
user@pc:~/dir1/dir2$ popd
~
user@pc:~$ dirs -v
0 ~
user@pc:~$ popd
-bash: popd: directory stack empty
ディレクトリスタックとcd
cdによるディレクトリ移動を行うとディレクトリスタックの0が変わる。これはディレクトリスタックの0がワーキングディレクトリであるからである。
user@pc:~/dir1/dir2$ dirs -v
0 ~/dir1/dir2
1 ~/dir1
2 ~
user@pc:~/dir1/dir2$ cd dir3/dir4
user@pc:~/dir1/dir2/dir3/dir4$ dirs -v
0 ~/dir1/dir2/dir3/dir4
1 ~/dir1
2 ~
ディレクトリツリーの表示
tree - List Tree-like Content
ディレクトリ構造を木構造フォーマットで表示する。ディレクトリが指定されなかった場合、.
(カレントディレクトリ)が使用される。
tree [オプション] [表示するディレクトリ]
分類 | オプション | 意味 |
---|---|---|
表示対象 | -a | .で始まる隠しファイルを表示 |
-P PATTERN | パターンに一致したファイルだけを表示 | |
-I PATTERN | パターンに一致したファイルは表示しない | |
-d | ディレクトリだけを表示 | |
表示形式 | -i | 木構造フォーマットを使用しない |
--noreport | 最後のレポート(ディレクトリ数とファイル数)を出力しない | |
-f | 名前ではなくパスで表示 | |
探索範囲 | -L 階層 | 探索する最大の深さ |
表示順序 | --dirsfirst | ディレクトリが先 |
-r | 逆順表示 | |
-t | 最終更新日時が新しい順 | |
-v | ファイル名の自然ソート順 |
tree
(out).
(out)└── dir1
(out) ├── dir2
(out) │ ├── afile2-1
(out) │ ├── dir3
(out) │ │ └── file3
(out) │ └── file2-2
(out) ├── file0.5.2
(out) ├── file1
(out) ├── file2.0.59
(out) ├── file2.0.9
(out) ├── file2.0.95
(out) ├── file4.1.14
(out) └── file4.1.9
(out)
(out)4 directories, 10 files
tree --dirsfirst -avf --noreport dir1
(out)dir1
(out)├── dir1/dir2
(out)│ ├── dir1/dir2/dir3
(out)│ │ └── dir1/dir2/dir3/file3
(out)│ ├── dir1/dir2/afile2-1
(out)│ └── dir1/dir2/file2-2
(out)├── dir1/.secret
(out)├── dir1/file0.5.2
(out)├── dir1/file1
(out)├── dir1/file2.0.9
(out)├── dir1/file2.0.59
(out)├── dir1/file2.0.95
(out)├── dir1/file4.1.9
(out)└── dir1/file4.1.14
また、各ファイル・ディレクトリで追加の情報を表示するオプションを示す。
オプション | 意味 |
---|---|
-p | パーミッションを表示 |
-s -h | サイズを表示(-h は単位付きサイズ) |
-u | 所有者を表示 |
-g | 所有グループを表示 |
-D | 最終更新日時を表示 |
ディスク関連
ディスクの使用量
du - Disk Usage
ディレクトリ配下にあるファイルの合計使用量を表示する。ファイルが指定された場合はそのファイルの使用量を示す。
du [ディレクトリまたはファイル ...]
デフォルトの単位はブロックであり、ブロックのサイズは以下の優先順位で決まる。
- オプション-Bまたは--block-sizeの指定値
- 環境変数
DU_BLOCK_SIZE
、BLOCK_SIZE
、BLOCKSIZE
の値 - 1024バイト、ただしPOSIX準拠(POSIXLY_CORRECT)では512バイト
オプション | 意味 |
---|---|
-h --human-readable | 単位付きの読みやすいサイズ表記にする |
-B --block-size=SIZE | ブロックサイズを指定する。 |
du bigfile
(out)6604 bigfile
ls -s bigfile # lsコマンドでブロックサイズ表示
(out)6604 bigfile
df - Disk Free
ディスクがどれだけ空いているか統計を表示する。ファイルが指定された場合、そのファイルがあるディスクを表示する。
df [ファイル ...]
df file1
(out)Filesystem 1K-blocks Used Available Use% Mounted on
(out)/dev/sdd 1055762868 1974708 1000084688 1% /
df -h file1
(out)Filesystem Size Used Avail Use% Mounted on
(out)/dev/sdd 1007G 1.9G 954G 1% /
ディスク管理コマンド
管理者向けのより高度なコマンドとして、パーティションの作成、ファイルシステムの作成、ディスクマウントなどのコマンドがあるが、本稿では省略する。