next up previous contents
Next: ディレクトリ操作 Up: ファイル操作 Previous: ファイルモードの変更 chmod


リンク ln (経済的コピー)

この命令は,リンクlnです。 リンクにはハードリンクとシンボリックリンクがあります。 リンクは1つのファイルをそのままの名前と 別の名前で利用するときにリンクを使用します。 本体は1つなのですが,入口が複数あるようなものです。 リンクを張って 複数の名前を付けると1つのファイルを消しても本体は消えません。 リンク自体は 初心者は余り利用しない命令です。 しかし, あなたがファイルを誤って消すクセがあるならば利用しない手はないのです。

ハードリンクは,次のように作成します。

ln sourcefile destfile
これは, sourcefiledestfile にリンクするということになります。 どうなったの確かめましょう。
% ln testfile.m test.file
% ls -li test*
61889 -rw-rw-rw-  2 ken engng      0 Nov 16 22:21 test.file
61889 -rw-rw-rw-  2 ken engng      0 Nov 16 22:21 testfile.m

となりましたね。 この ls で表示されるのはファイルのリストです。

-iを付けたために今までと違って頭に数値がついています。 この数値は iノードといって, ハードディスクの中のファイルの場所を示す数値です。 この2つのファイルの iノードは同じ値を持っていますので, 同じ場所に書かれた1つのファイルです。 1つのファイルにアクセスするための2つの入口があり 別の名前を持っているわけです。

また,3番目の数値は 2 となっています。 つまり,このファイルには入口が合わせて2つあるというわけです。 どっちが主でどっちが副という区別はありません。

それでは,これは確かめるため test.file だけに文字を書いてみましょう。

% echo Quick sliver fox is jumping over the lazy brown dog. > test.file
% ls -l test*
-rw-rw-rw- 2 ken engng      42 Nov 16 22:22 test.file
-rw-rw-rw- 2 ken engng      42 Nov 16 22:22 testfile.m

書き込んでいない testfile.m のサイズが, 書き込んだ test.fileと同じ 42 バイトとなりました。1つのファイルで ある証拠です。
% cat testfile.m

とすれば,先ほど test.fileに書き込んだ文字が出てきます。

この i ノードは1つのファイルシステムで管理されていますので, ファイルシステムを越えてハードリンクすることはできません。 異なるハードディスクや, パーティションを越えてハードリンクすることはできません。 このときは ハードリンクとは使い方が違いますが, シンボリックリンクを使うわけです。 この,もう1つのシンボリックリンクは次のように作成します。

ln -s sourcefile destfile
このように ln -s として使用します。すると,
-rw-rw-rw- 2 ken   engng     42 Nov 16 22:41 test.file
lrwxrwxrwx 1 ken   engng     42 Nov 16 22:47 test.file2 -> testfile.m
-rw-rw-rw- 2 ken   engng     42 Nov 16 22:41 testfile.m
となったはずです。 ちゃんと, ->という記号で test.file2testfile.mにリンクしているよ という指示が出ています。 test.file2はモードを見てわかるようにリンクファイルで, testfile.mとは違っています。単に testfile.mを見よという意味し かありません。たった10バイトです。 しかし, testfile.mには何も表示されません。 シンボリックリンクされている側ではわからないのです。

この時, test.file2を消去しても問題はありません。 しかし, testfile.mを消去すると, test.file2は残って行き場のない幽霊ファイルとなります。 消す前にシンボリックリンクされているかどうかを確かめる方法は単純ではあり ません。


Kishimoto Ken
平成20年3月1日