BSD ファイルシステムなど、多くの UNIX 系ファイルシステムでは、 ファイルの実体に対して「唯一のファイル名」は附属しない。 ファイル名(パス名)はファイルの実体へ至る道筋(パス)を指定するもので あり、道筋は複数あっても構わない。
ファイルへのパス(道筋)を階層的に提供するメカニズムが 「ディレクトリ」であるが、その 実体は「パス名とファイルの実体(i-node 番号)の対応づけ」 が書かれた単なるファイルである。
% echo hello tmp1 > tmp1
% cat tmp1
% mkdir dir
% ln tmp1 dir/tmp2
% cat dir/tmp2
% ls -l
% ls -l dir
% ls -l # tmp1 のリンクカウントを確認
% rm dir/tmp2
% ls -l # tmp1 のリンクカウントを確認
このように rm でパス名を消してもファイルの実体が消えるとは限らない。
パスを消す(俗にファイルを消す)ためのシステムコールが unlink と名付けられて
いる理由もここにある。man 2 unlink の概要を理解せよ。
% rm -r dir
% mkdir dir
% ls -l
% mkdir dir/subdir1
% ls -l
% mkdir dir/subdir2
% ls -l
リンクカウントのこのようなふるまいの理由を考えてみよ。
man chmod を読んで、ファイルに設定できるモードにはどんなものがあるか 調べよ。モードの情報は合わせて何ビットになるか?
cat コマンドやテキストエディタでは、ASCII や JIS コード等で 書かれたテキストファイル しか見ることはできない。コードによらずにファイルの中身を吟味する ためには od コマンドを用いる。
オンラインマニュアルを参照しつつ、 自ら実例を試して od コマンドを理解せよ。 特に以下のオプションについての理解は必須である。
% od -tx1z
% od -tx2z
% od -to2z
% od -tu2z
% od -j 0x0100 -N 0x0200
hope01% cd /mnt/floppy hope01% ls -li 3 drwxr-xr-x 2 root wheel 512 1 28 12:13 dirA 4 drwxr-xr-x 3 root wheel 512 1 28 12:12 dirB hope01% ls -li dirA 7 -rw-r--r-- 2 root wheel 5 1 28 12:12 hoge hope01% cat dirA/hoge hoge hope01% ls -li dirB 5 drwxr-xr-x 2 root wheel 512 1 28 12:12 dirC 6 -rw-r--r-- 1 root wheel 6 1 28 12:12 file hope01% cat dirB/file Hello hope01% ls -li dirB/dirC 7 -rw-r--r-- 2 root wheel 5 1 28 12:12 file hope01% cat dirB/dirC/file hoge
抽象化を経ないファイルシステムの裸の姿はディスクイメージと呼ばれる。 ディスクイメージは /dev/fd0 を読めば見ることができる。 テキストデータではないので、less やエディタではなく、od を使う。
od /dev/fd0 としたときに permission denied と 言われる人は申し出ること。
フロッピーディスクの内容と同じものが /edu/f/os/ufs_image/floppy_image にも置いてある。
また、以下の情報も必要である。
なお、ディスクイメージの中の全ての情報を理解する必要はない。上の「ユーザから 見た構造」がどのようにディスクイメージの中に表現されているかわかれば良い。
演習が終ったら、 ★ Unmount してから ★ フロッピーを抜くこと。
ディスクイメージ /edu/f/os/ufs_image/学籍番号 を解析し、 すべてのディレクトリとファイルの名前とそれらの階層構造、 すべてのファイルの内容を答えよ。
注意:
ディレクトリ内の d_reclen(length of this record) の値が大きい ときには、レコードのお尻のほうに、かつて存在したが今は削除されてい るレコードの残骸が見えることがあので、注意すること。