Linuxシステムでは、ファイルやディレクトリの管理に不可欠な多くのコマンドが用意されています。ここでは、ファイルの作成、削除、表示、リンク作成、コピー、移動(リネーム)など、基本的なファイル操作コマンドについて解説します。
ファイルの作成と更新
touchコマンドは、新しいファイルの作成や、既存ファイルの最終アクセス時刻および更新時刻の変更に使用されます。
touch new_file.txt
touchコマンドには、時刻の更新のみを対象とするオプションがあります。
-a: 最終アクセス時刻のみを変更します。-m: 最終更新時刻のみを変更します。-c: ファイルが存在しない場合に新規作成せず、時刻のみを変更します。-d: 指定した時刻に変更します。-r <参照ファイル>: 指定した参照ファイルと同じ時刻に設定します。-t <[[CC]YY]MMDDhhmm[.ss]>: 指定した時刻(年、月、日、時、分、秒)に変更します。
ファイルの削除
rmコマンドは、ファイルやディレクトリを削除するために使用されます。ディレクトリ削除コマンドrmdirは空のディレクトリしか削除できませんが、rmはディレクトリとその内容を再帰的に削除できるため、一般的にrmがよく使われます。
rm -rf deleted_file.txt
注意: -f (force) オプションを付けると、確認なしで強制的に削除されます。このオプションの使用は慎重に行ってください。
-f: 確認なしで強制的に削除します。-r: ディレクトリとその内容を再帰的に削除します。-i: 削除前に確認を求めます。-v: 削除プロセスを詳細に表示します。
ファイル情報の表示
statコマンド
statコマンドは、ファイルに関する詳細な情報(パーミッション、所有者、グループ、サイズ、最終アクセス時刻、最終更新時刻、最終変更時刻など)を表示します。
stat example.log
出力例:
File: `example.log'
Size: 120 Blocks: 24 IO Block: 4096 regular file
Device: 801h/2049d Inode: 131078 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ user) Gid: ( 1000/ user)
Access: 2023-10-27 10:30:00.123456789 +0900
Modify: 2023-10-27 10:35:15.987654321 +0900
Change: 2023-10-27 10:35:15.987654321 +0900
catコマンド
catコマンドは、ファイルの内容を標準出力に表示します。短いファイルの内容確認に適しています。
cat config.ini
-A: すべての非表示文字を表示します (-vETと同等)。-E: 各行の末尾に $ を表示します。-n: 行番号を表示します。-T: タブ文字を ^I として表示します。-v: 表示されない特殊文字を表示します。
moreコマンド
moreコマンドは、catコマンドと同様にファイルの内容を表示しますが、画面サイズに合わせてページごとに表示するため、大きなファイルを扱う際に便利です。
more large_log_file.log
+n: n行目から表示を開始します。-n: 一度にn行表示します。+/pattern: 指定したパターンが表示される位置から開始します。-c: 画面をクリアしてから表示します。-p: ページをめくる際に画面をクリアします。- スペースキー: 次のページを表示します。
b: 前のページに戻ります。- Enterキー: 1行ずつ下にスクロールします。
q: 終了します。
head および tail コマンド
headコマンドはファイルの先頭部分を、tailコマンドはファイルの末尾部分を表示します。デフォルトではそれぞれ10行を表示します。
tail data.csv
tail -n 20 data.csv # 最後の20行を表示
tail -f application.log # ファイルの末尾を監視し、追記された内容を表示
-n <行数>: 表示する行数を指定します。-f: ファイルの末尾を監視し、新しく追加された内容をリアルタイムで表示し続けます。ログファイルの監視などに便利です。-v: 複数のファイルを表示する際に、ファイル名を表示します。-c <バイト数>: 指定したバイト数で表示します。負数を指定すると、末尾の指定バイト数を除いた内容を表示します。
シンボリックリンク(ソフトリンク)の作成
lnコマンドの-sオプションを使用すると、シンボリックリンク(Windowsのショートカットに相当)を作成できます。
ln -s original_file.txt link_to_file.txt
シンボリックリンクと元のファイルの関係:
- シンボリックリンクと元のファイルは異なるinode番号とブロックを持ちます。
- どちらかを変更しても、もう一方も同期して更新されます。
- 元のファイルを削除すると、シンボリックリンクは無効になります。
- シンボリックリンク自体は実際のデータを保持せず、元のファイルのinode番号などの情報のみを格納します。
ls -lコマンドで、シンボリックリンクはlで始まり、矢印で元のファイルを示します。
ls -l
出力例:
total 0
lrwxrwxrwx. 1 user user 15 Oct 27 11:00 link_to_file.txt -> original_file.txt
-rw-r--r--. 1 user user 50 Oct 27 10:55 original_file.txt
ファイルのコピー
cpコマンドは、ファイルやディレクトリをコピーします。
cp source_file.txt destination_file.txt
cp source_file.txt /path/to/directory/
-r: ディレクトリを再帰的にコピーします。-p: 所有者、パーミッション、タイムスタンプなどの元のファイルの属性を保持します。-f: ターゲットファイルが存在する場合、確認なしで上書きします。-s: シンボリックリンクを作成します (ln -sと同様)。-i: ターゲットファイルが存在する場合、上書き前に確認を求めます。-d: ソースがシンボリックリンクの場合、リンク自体をコピーします。-a:-dprオプションをまとめて指定したような動作をします (アーカイブモード)。-v: コピープロセスを詳細に表示します。
コピー先のパスがディレクトリの場合、ファイルはそのディレクトリ内にコピーされます。コピー先のパスがファイル名の場合、ファイルはその名前でコピーされます。
ファイルの移動とリネーム
mvコマンドは、ファイルやディレクトリを移動したり、名前を変更(リネーム)したりするために使用されます。
mv old_name.txt new_name.txt # リネーム
mv file.txt /new/directory/ # ファイルを移動
-f: ターゲットファイルが存在する場合、確認なしで上書きします。-b: 上書きする前に、ターゲットファイルのバックアップを作成します。-i: ターゲットファイルが存在する場合、上書き前に確認を求めます。-v: 移動またはリネームのプロセスを詳細に表示します。-t <ターゲットディレクトリ>: 複数のファイルを指定したディレクトリにまとめて移動します。
同一ディレクトリ内でのmvはリネームとなり、異なるディレクトリへのmvは移動となります。
ファイルタイプの確認
fileコマンドは、ファイルの種類やエンコーディングを識別します。
file script.sh # ファイルのタイプを表示
file -b script.sh # ファイルタイプのみを表示(ファイル名なし)
file -i script.sh # MIMEタイプを表示
file symlink_to_file.sh # シンボリックリンクの場合、リンク先のファイルタイプを表示