ファイル操作の試験オプション
101 試験のコマンド分野では、コマンド名そのものよりオプション1文字の意味が問われます。「属性を保ったまま複製するコマンドはどれか」という選択式、「ディレクトリを再帰的にコピーするオプションを答えよ」という穴埋め、「このコマンドを実行するとどうなるか」という結果予測の3通りです。暗記だけでは足りず、何が保たれて何が失われるかを理解している必要があります。
cp -a は3つの合成です
cp -a は必出です。-a は archive の頭文字で、-dR --preserve=all と同じ意味になります。分解すると、-d がシンボリックリンクをリンクのまま複製すること、-R が再帰的にたどること、--preserve=all がモード・所有者・タイムスタンプ・拡張属性を保つことです。「全部保つやつ」で止めずに3つの合成だと言えるようにしておくと、選択肢から -dR --preserve=all を選ぶ問題にそのまま答えられます。
| オプション | 意味 |
|---|---|
-a | -dR --preserve=all と同義。属性ごと丸ごと複製する |
-p | モード・所有者・タイムスタンプを保つ |
-r / -R | ディレクトリを再帰的にコピーする |
-d | シンボリックリンクを実体でなくリンクのまま複製する |
-i | 上書き前に確認する |
-u | コピー元が新しいときだけ上書きする |
-f | 上書きできないときに削除して作り直す |
-p と -a の違いもよく出ます。-p は属性を保ちますが再帰はしません。ディレクトリごと属性を保って複製するなら -a、あるいは -rp が要ります。
mv と rm と mkdir
mv は移動と改名を兼ねます。オプションは -i (上書き確認)、-f (確認せず上書き)、-u (新しいときだけ) が中心で、mv に -r はありません。ディレクトリの移動は同一ファイルシステム内なら中身を触らずに済むためです。
rm は -r で再帰削除、-f で存在しなくてもエラーにせず確認もしない、-i で1つずつ確認します。-r と -f を重ねた削除は取り返しがつきません。実行する前に、同じパスを ls -la で表示して対象が想定どおりかを目で確かめる手順を必ず挟んでください。
mkdir -p は途中の階層をまとめて作り、既に存在してもエラーになりません。この性質はスクリプトで重宝します。
touch と ls のオプション
touch は空ファイルを作るコマンドとして覚えられがちですが、本来はタイムスタンプを更新するコマンドです。
| オプション | 意味 |
|---|---|
-r <参照ファイル> | 参照ファイルと同じタイムスタンプにする |
-t [[CC]YY]MMDDhhmm[.ss] | 指定した日時にする |
-a | アクセス時刻だけ更新する |
-m | 更新時刻だけ更新する |
-c | ファイルが無いとき新規作成しない |
touch -r a.txt b.txt は「a.txt のタイムスタンプを b.txt に写す」向きです。順番を逆に覚えていると、意図しない側が書き換わります。
ls のオプション | 意味 |
|---|---|
-l | 詳細表示 |
-a | ドットで始まる隠しファイルも表示 |
-h | サイズを K / M など人が読める単位で表示 |
-i | inode 番号を表示 |
-R | サブディレクトリを再帰的に表示 |
-t | 更新時刻順に並べる |
-S | サイズ順に並べる |
-d | ディレクトリ自身の情報を表示する |
-h は単独では効かず ls -lh の形で使います。-i で出る inode 番号は、ln で作ったハードリンクが同じ番号になることから、同一性の判定に使えます。
なお file はファイルの中身を見て種類を推測します。拡張子ではなくマジックナンバーで判定するため、拡張子が無いファイルや偽の拡張子が付いたファイルでも正体が分かります。
よくある引っかけ
cp -a を「アーカイブを作る」と読ませて tar と混同させる選択肢が出ます。cp -a が作るのはアーカイブファイルではなく、属性を保った複製です。
cp の -r と -R は、GNU の cp ではどちらも再帰コピーとして働きます。「-r だけが正しい」という選択肢は誤りです。
ls -h を単独で使えばサイズが読みやすくなる、という選択肢も誤りです。サイズを出す -l や -s と併用しないと効果がありません。