SEワンタンの独学備忘録

IT関連の独学した内容や資格試験に対する取り組みの備忘録

【LPIC101】Linuxにおけるリンク LPICで学ぶLinux⑱


Linuxシステムにはファイルやディレクトリを別名で呼び出すリンクという仕組みがあります。
リンクにはハードリンクとシンボリックリンクの2種があります。

ざっくりとしたイメージはWindowsで言うところのショートカットに近いので、そことの違いを意識すると覚えやすいと思います。

ハードリンク

ハードリンクとinodeについて

ハードリンクを理解するにはinode番号について押さえておく必要があります。

Linuxでファイルを作成すると重複しないinode番号が付与されます。
inodeには所有者やサイズ、アクセス権限、作成日時、データ領域へのポインタなどの属性情報が格納されています。

inodeによってディスク上のデータであるファイルの実態が管理され、名前がつけられたファイルはその実態を参照していることになります。
f:id:wantanBlog:20200821234415p:plain

inode番号については本試験ではそこまで深く問われることはないでしょう。

ハードリンクでは一つのファイル実態を元にファイルとリンクを増やすことになります
なのでWindowsのショートカットとは少し勝手が違います。
f:id:wantanBlog:20200821235519p:plain

ハードリンクの特徴

試験的にも問われやすい特徴を押さえておきます。

・同じファイルの実体を指す全てのハードリンクは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  822 00:11 hardlink.txt
34340511 -rw-r--r--. 2 wantan group1 19  822 00:11 original.txt

ここで確認すべきはinode番号が同じになっている点と、またハードリンク数(所有者の前の数値)が2になっている点です。

シンボリックリンク

シンボリックリンク

Linuxにおけるリンクのもう一つはシンボリックリンクです。
こちらはハードリンクとは異なり、シンボリックはリンク元ファイルへのポインタになります。

つまりはイメージ的にはWindowsで言うところのショートカットとほぼ同じです。

f:id:wantanBlog:20200822015602p:plain

シンボリックリンクの特徴

特徴はハードリンクとの比較で覚えるのがよいでしょう。

・シンボリックリンクの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  822 00:11 original.txt
34340478 lrwxrwxrwx. 1 wantan group1 12  822 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  822 00:11 original.txt
lrwxrwxrwx. 1 wantan group1 12  822 02:02 slink.txt -> original.txt
-rw-r--r--. 1 wantan group1 19  822 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  822 00:11 original.txt
34340478 lrwxrwxrwx. 1 wantan group1 12  822 02:02 slink.txt -> original.txt
34340510 -rw-r--r--. 1 wantan group1 19  822 02:10 slink2.txt
34340513 lrwxrwxrwx. 1 wantan group1 12  822 02:13 slink3.txt -> original.txt


・前回(第十七回)
www.wantanblog.com

・次回(第十九回)
www.wantanblog.com