第4章 ファイルシステム内での移動
Linuxのファイルシステムには、コンピュータ上のすべての情報が保存されてるんだ。
| ディレクトリ | 説明 |
|---|---|
| /bin | ls、sort、date、chmod みたいな、よく使うLinuxユーザーコマンドが入ってる。 |
| /boot | 起動可能なLinuxカーネル、初期RAMディスク、ブートローダーの設定ファイル (GRUB) が入ってる。 |
| /dev | システム内のデバイスへのアクセスポイントを表すファイルが入ってる。ターミナル (tty*)、ハードディスク (hd* や sd*)、RAM (ram*)、CD-ROM (cd*) などが含まれるよ。ユーザーはこれらのデバイスファイルから直接アクセスできるけど、普通はアプリが実際のデバイス名を隠してくれてるんだ。 |
| /etc | 管理用の設定ファイルが入ってる。ほとんどがテキストファイルで、適切な権限があればテキストエディタで編集できるよ。 |
| /home | ログインアカウントを持つ一般ユーザーごとのディレクトリが入ってる(rootユーザーだけは例外で、/root を使うよ)。 |
| /media | 自動マウントされるデバイス(特にリムーバブルメディア)の標準的な場所。メディアにボリューム名があれば、普通はその名前がマウントポイントになるんだ。 |
| /lib | /bin や /sbin にあるアプリがシステムを起動するのに必要な共有ライブラリが入ってる。 |
| /mnt | /media が標準になる前は、いろんなデバイスのマウントポイントとしてよく使われてた。今でも一部のシステムではハードディスクのパーティションやリモートファイルシステムのマウントに使われるし、一時的にマウントする場所として使ってる人も多いよ。 |
| /misc | リクエストに応じてファイルシステムを自動マウントするのに使われることがあるディレクトリ。 |
| /opt | 追加のアプリケーションソフトウェアを保存するためのディレクトリ構造。 |
| /proc | システムリソースに関する情報が入ってる。 |
| /root | rootユーザーのホームディレクトリ。セキュリティ上の理由で /home にはないんだ。 |
| /sbin | 管理用コマンドやデーモンが入ってる。 |
| /sys | ストレージのチューニングや cgroups 管理のためのパラメータが入ってる。 |
| /tmp | アプリケーションが使う一時ファイルが入ってる。 |
| /usr | ユーザー向けのドキュメント、ゲーム、画像ファイル (X11)、ライブラリ (lib)、その他起動に必須じゃないコマンドやファイルが入ってる。インストール後は基本的に変更されない場所で、理論上は読み取り専用でマウントすることもできるよ。 |
| /var | アプリケーションが使うデータディレクトリ。FTPサーバー (/var/ftp) や Webサーバー (/var/www) の共有ファイルを置いたりする。システムログ (/var/log) やスプールファイル (/var/spool、メールや印刷ジョブなど) もここ。頻繁に更新される場所だから、サーバーでは独立したファイルシステムとして作成されることが多いよ。 |
4.1 基本的なファイルシステムコマンドを使う
cd 、pwd 、mkdir 、rmdir 、ls 、touch といったコマンドだね。
4.2 メタ文字と演算子を使う
いくつかの特殊な文字は「メタ文字」や「演算子」って呼ばれてるよ。
4.2.1 ファイルマッチングメタ文字を使う
| メタ文字 | 説明 |
|---|---|
| * | 任意の数の文字にマッチする。 |
| ? | 任意の1文字にマッチする。 |
| […] | 括弧内のいずれかの文字にマッチする。ハイフンで範囲(文字や数字)を指定することもできるよ。 |
例えば ls [a-g]* って打つと、aからgで始まるファイルやディレクトリを表示してくれるんだ。
4.2.2 ファイルリダイレクトメタ文字を使う
| メタ文字 | 説明 |
|---|---|
| < | ファイルの内容をコマンドに流し込む。デフォルトの動作だから省略できることも多いよ。例えば less bigfile は less < bigfile と同じだね。 |
| > | コマンドの標準出力をファイルに書き出す。ファイルが既にある場合は上書きされちゃうから注意。 |
| 2> | 標準エラー(エラーメッセージ)をファイルに書き出す。 |
| &> | 標準出力と標準エラーの両方をファイルに書き出す。 |
| » | コマンドの出力をファイルの末尾に追記する。 |
例えばこんな感じ:
| |
これは、chmodのマニュアルを整形して、余計なバックスペースを削除してから /tmp/chmod に保存するコマンドだよ。
| |
これは ~/hello ファイルの最後に “Hello World!” を追記するんだ。
リダイレクトのもう一つの形に here text (または here document) があるよ。
| |
これは ed エディタを使って /etc/resolv.conf に DNS サーバーの IP を追加する例だね。2つの resendit の間にある内容が実行されるんだ。
4.2.3 括弧展開を使う
大括弧 {} を使うと、ファイル名やディレクトリ名をまとめて展開できるから便利だよ。
| |
これで memo1 から memo5 までの5つのファイルが一気に作れる。
| |
これは9つのファイルができるね。
| |
これなら a1 から f5 まで、全部で30個のファイルができるよ。
4.3 ファイルとディレクトリをリストアップする
普通、ls は ls --color=auto というエイリアス(別名)が設定されてるんだ。確認するにはこう打ってみて:
| |
ls -la を使えば、詳細情報 (-l) と隠しファイルを含むすべてのファイル (-a) が見れるよ。
| 列 | ファイル | ディレクトリ |
|---|---|---|
| 1 | 権限 | 権限 |
| 2 | リンク数 | リンク数 |
| 3 | 所有者 | 所有者 |
| 4 | グループ | グループ |
| 5 | バイトサイズ | ディレクトリ情報自体のサイズ(中身の合計じゃないよ) |
| 6 | 最終更新日時 | 最終更新日時 |
| 7 | ファイル名 | ディレクトリ名 |
メモ:
- 日時のフォーマットは
LANG変数によって変わることがあるよ。 - 権限に
sがついてる (-rwsr-sr-x) ことがあるけど、これは誰でも実行できるけど実行時の権限はそのファイルの所有者やグループになるって意味なんだ。 - ディレクトリの権限の最後に
tがある (drwxrwxr-t) のは「スティッキービット」。他のユーザーもファイルを置けるけど、自分が置いたファイル以外は消せない設定だよ。 - ディレクトリに Set GID を設定すると、その中で作られたファイルは全部そのディレクトリと同じグループになるんだ。大文字の
SやTが出ている場合は、実行権限がない状態でそれらが設定されてることを意味するよ。 - 権限の最後にプラス記号 (-rw-rw-r-+) があるなら ACL などの拡張属性がある証拠。ドット (.) なら SELinux が設定されてるってことだね。
cd ~yexca で yexca のホームへ、cd - で一つ前にいたディレクトリ ($OLDPWD) に戻れるよ。ちなみに `cd .` は今のディレクトリ ($PWD) のことだね。
ls コマンドの便利なオプション:
-t 更新順に並べる; -F 種類がわかる記号(/ や *)を付ける; --hide=yexca 特定のファイルを表示しない; -S サイズ順に並べる; -d ディレクトリの中身じゃなくてディレクトリ自体の情報を表示する。
4.4 ファイルの権限と所有権を理解する
ls -l の最初の列について。
1文字目はファイルタイプ:
| 文字 | タイプ |
|---|---|
| - | ファイル |
| d | ディレクトリ |
| l | シンボリックリンク |
| b | ブロックデバイス |
| c | キャラクタデバイス |
| s | ソケット |
| p | 名前付きパイプ |
その後の9文字が権限。3文字ずつ区切って、ユーザー (u)、グループ (g)、その他 (o) の順になってるよ。
ファイルとディレクトリで意味がちょっと違うんだ。
| 権限 | ファイル | ディレクトリ |
|---|---|---|
| Read | 中身を見る | 中のファイル一覧を見る |
| Write | 中身を書き換える、削除、名前変更 | ファイルの追加や削除 |
| Execute | プログラムとして実行する | そのディレクトリに移動する、中を検索する、メタデータ(サイズなど)にアクセスする |
権限は ls -ld で確認できるよ。
Fedora や RHEL では、ユーザーを作るとそのユーザーと同じ名前のグループも作られるんだ。これは「ユーザー専用グループ」っていう仕組みだね。
4.4.1 chmod (数値) で権限を変える
r = 4, w = 2, x = 1 で計算するよ。
| |
これで ~/myfile とその中身全部 (-R) を 755 (rwxr-xr-x) にできる。
4.4.2 chmod (文字) で権限を変える
| |
| |
こんなふうに直感的に指定もできるよ。
4.4.3 umask でデフォルト権限を設定する
新しく作る時のデフォルト権限は、一般ユーザーならファイルは rw-rw-r–、ディレクトリは rwxrwxr-x。rootだとファイル rw-r–r–、ディレクトリ rwxr-xr-x になる。これは umask の値で決まるんだ。
例えば umask が 0002 なら、ディレクトリの最大権限 (777) から引いて 775 になるイメージだね(ファイルの場合は 666 から引いて 664。実行権限はデフォルトでオフになるよ)。
- 一時的に変えるなら
umask 000みたいに打つ。 - ずっと変えたいなら
.bashrcに書いておこう。
4.4.4 ファイルの所有権を変える
これは root ユーザーしかできないよ。
| |
これで所有者とグループを一気に変えられる。-R で中身もまとめて変えれるよ。
4.5 ファイルを移動・コピー・削除する
使うのは mv, cp, rm, rmdir だね。
mv に -i をつける(またはエイリアスにする)と、上書きする前に確認してくれるから安心。-b を使えば、上書きする前にバックアップを作ってくれるよ。
cp で -a を使うと、日付やタイムスタンプを維持したままコピーできるんだ。
何があっても強制的に実行したい時は -f を使うけど、慎重にね! (例えば rm -rf /* とか絶対やっちゃダメだよ)。