Linuxシステムにはファイルやディレクトリを別名で呼び出すリンクという仕組みがあります。
リンクにはハードリンクとシンボリックリンクの2種があります。
ざっくりとしたイメージはWindowsで言うところのショートカットに近いので、そことの違いを意識すると覚えやすいと思います。
ハードリンク
ハードリンクとinodeについて
ハードリンクを理解するにはinode番号について押さえておく必要があります。
Linuxでファイルを作成すると重複しないinode番号が付与されます。
inodeには所有者やサイズ、アクセス権限、作成日時、データ領域へのポインタなどの属性情報が格納されています。
inodeによってディスク上のデータであるファイルの実態が管理され、名前がつけられたファイルはその実態を参照していることになります。
inode番号については本試験ではそこまで深く問われることはないでしょう。
ハードリンクでは一つのファイル実態を元にファイルとリンクを増やすことになります。
なのでWindowsのショートカットとは少し勝手が違います。
ハードリンクの特徴
試験的にも問われやすい特徴を押さえておきます。・同じファイルの実体を指す全てのハードリンクはinode番号が同じ
・リンク元のファイルが移動、削除されても、ファイルの実体にはアクセスできる。
・異なるファイルシステム上のリンクはできない。
・ディレクトリのリンクは生成できない。
ハードリンクの生成
ハードリンクの生成はlnコマンドにより行います。
コマンドは以下の形式です。
ln [元ファイル] [リンク名]
・実行例
[wantan@localhost links]$ ln original.txt hardlink.txt [wantan@localhost links]$ ll -i 合計 8 34340511 -rw-r--r--. 2 wantan group1 19 8月 22 00:11 hardlink.txt 34340511 -rw-r--r--. 2 wantan group1 19 8月 22 00:11 original.txt
ここで確認すべきはinode番号が同じになっている点と、またハードリンク数(所有者の前の数値)が2になっている点です。
シンボリックリンク
シンボリックリンク
Linuxにおけるリンクのもう一つはシンボリックリンクです。
こちらはハードリンクとは異なり、シンボリックはリンク元ファイルへのポインタになります。
つまりはイメージ的にはWindowsで言うところのショートカットとほぼ同じです。
シンボリックリンクの特徴
特徴はハードリンクとの比較で覚えるのがよいでしょう。・シンボリックリンクのinodeは元ファイルと異なる。
・リンク元のファイルが移動、削除されると、リンク元のファイルの実体にアクセスできない(リンク自体の削除はされない)。
・異なるファイルシステム上のリンクを作成できる。
・ディレクトリのリンクも作成できる。
シンボリックリンクの生成
シンボリックリンクもlnコマンドに「-s」オプションを付与して生成します。
生成したリンクファイルの状態について、こちらもハードリンクと比較しておくと分かりやすいです。
[wantan@localhost links]$ ln -s original.txt slink.txt [wantan@localhost links]$ ll -i 合計 4 34340511 -rw-r--r--. 1 wantan group1 19 8月 22 00:11 original.txt 34340478 lrwxrwxrwx. 1 wantan group1 12 8月 22 02:02 slink.txt -> original.txt
■シンボリックリンクのコピー
ハードリンクのコピーはリンクの扱い自体が実態ファイルと変わらないので、通常のファイルコピーとほぼ変わりません。
シンボリックリンクのコピーは注意すべき点があり、そのままコピーするとリンクではなく実態ファイルの方がコピーされることになります。
・cpコマンドそのまま実行
以下の通り、コピーにより生成した「slink2.txt」ファイルはリンクではないことがわかります。
[wantan@localhost links]$ cp slink.txt slink2.txt [wantan@localhost links]$ ll 合計 8 -rw-r--r--. 1 wantan group1 19 8月 22 00:11 original.txt lrwxrwxrwx. 1 wantan group1 12 8月 22 02:02 slink.txt -> original.txt -rw-r--r--. 1 wantan group1 19 8月 22 02:10 slink2.txt
・「-d」オプションを付与
リンク自体をコピーするにはcpコマンドに「-d」オプションを付与します。
オプションありでコピーした「slink3.txt」ファイルは「original.txt」ファイルへのシンボリックリンクとしてコピーされていることがわかります。
[wantan@localhost links]$ cp -d slink.txt slink3.txt [wantan@localhost links]$ ll -i 合計 8 34340511 -rw-r--r--. 1 wantan group1 19 8月 22 00:11 original.txt 34340478 lrwxrwxrwx. 1 wantan group1 12 8月 22 02:02 slink.txt -> original.txt 34340510 -rw-r--r--. 1 wantan group1 19 8月 22 02:10 slink2.txt 34340513 lrwxrwxrwx. 1 wantan group1 12 8月 22 02:13 slink3.txt -> original.txt
・前回(第十七回)
www.wantanblog.com
・次回(第十九回)
www.wantanblog.com