Linux入門:コマンド操作のきほん
Linuxの「すべてはファイル」という考え方
種類が増えるたびに、専用の道具を覚えたくない
ディスクの中の文書、キーボードやディスプレイなどの装置、動いているプログラムの状態、メモリの使用量。種類が違うものを扱うたびに専用のコマンドを覚えるとしたら、いくつあっても足りません。
Linux はこれを 1 つのやり方に寄せました。あらゆるものを / から始まるパスで指し、ファイルとして読み書きします。これが「すべてはファイル」という考え方です。おかげで、覚えるコマンドはごく少なくて済みます。
ツリーの頂点は / で、その下は役割ごとに場所が決まっています。設定は /etc、ログのように増えていくデータは /var、利用者の作業場所は /home、装置は /dev、動いているプログラムの情報は /proc です。
ディスクに存在しないものまで読める
ターミナル
cat /proc/loadavg
# 0.31 0.24 0.19 1/412 8123/proc の下にあるものは、ディスクのどこにも保存されていません。読もうとした瞬間にカーネルがその場で中身を作って返す、仮想のファイルです。サイズが 0 と表示されても中身は読めます。サーバーの混み具合を知りたいときに、専用のコマンドではなくファイルを読めば済むのはこの仕組みのおかげです。
/dev/null はその逆で、書き込まれたものを捨てるためだけに用意された窓口です。ここも「ファイルに見えるもの」の一員です。
中身が何かは、名前では分からない
ls -l の行頭 1 文字を見ると、それがどの種類なのかが分かります。
| 記号 | 種別 |
|---|---|
- | 通常ファイル |
d | ディレクトリ |
l | シンボリックリンク |
c | 装置(キャラクタデバイス) |
ターミナル
ls -l /dev/null /etc/hostname
# crw-rw-rw- 1 root root 1, 3 Aug 26 10:00 /dev/null
# -rw-r--r-- 1 root root 12 Aug 26 10:00 /etc/hostname/dev/null は先頭が c なので装置、/etc/hostname は - なので普通のファイルです。同じ ls の 1 行で、両者が並んで見えているところが「すべてはファイル」の実物です。
もう一段踏み込んで、中身そのものが何なのかを知りたいときは file を使います。
ターミナル
file /etc/hostname
# /etc/hostname: ASCII textLinux は拡張子で種類を決めていません。.txt が付いていても中身が画像ということはありますし、拡張子が無くても実行できます。名前ではなく中身を見て判断してくれるのが file の役目です。