ファイル・ディレクトリ操作系のコマンド

概要

ディレクトリの作成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 > ファイル名
上書きされ空ファイルになる空ファイルが作成される
truncatetruncate -s 0 ファイル名上書きされ空ファイルになる空ファイルが作成される
truncate (no-createオプション)truncate -c -s 0 ファイル名上書きされ空ファイルになる作成されない
touchtouch ファイル名そのまま(空にならない)空ファイルが作成される

リダイレクトの方法に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で削除できる。

rm リンク名
unlink リンク名

ディレクトリへのシンボリックリンクの削除

シンボリックリンクのリンク先ディレクトリを、シンボリックリンクから削除するのは避けた方が良い。ディレクトリdirへリンクしたシンボリックリンクlinkToDirがある構成で例を示す。

tree
.
├── dir
│   ├── file1
│   └── file2
└── linkToDir -> dir

このときコマンドによって削除されるアイテムの違いを以下に示す。○が削除されることを表す。

実行コマンドdirdir/file1dir/file2linkToDir
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スタックを空にする。
dirsコマンドのオプション

デフォルトではスタックが空であるため、ワーキングディレクトリだけが表示される。

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ディレクトリへ移動しない。
ディレクトリスタックの操作だけを行う。
dirsコマンドのオプション
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ディレクトリへ移動しない。
ディレクトリスタックの操作だけを行う。
dirsコマンドのオプション
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 [ディレクトリまたはファイル ...]

デフォルトの単位はブロックであり、ブロックのサイズは以下の優先順位で決まる。

  1. オプション-Bまたは--block-sizeの指定値
  2. 環境変数DU_BLOCK_SIZEBLOCK_SIZEBLOCKSIZEの値
  3. 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% /

ディスク管理コマンド

管理者向けのより高度なコマンドとして、パーティションの作成、ファイルシステムの作成、ディスクマウントなどのコマンドがあるが、本稿では省略する。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です