詳細にファイル一覧を表示すると、多くの情報が表示されます。ls -li コマンドによる inode 情報の以前の例を見てみましょう。
pete@icebox:~$ ls -li
140 drwxr-xr-x 2 pete pete 6 Jan 20 20:13 Desktop
141 drwxr-xr-x 2 pete pete 6 Jan 20 20:01 Documents
以前、この出力の 3 番目のフィールドは省略していました。このフィールドがリンクカウントです。
Linux におけるリンクカウント
Linux におけるリンクカウントは、ファイルが持つハードリンクの総数です。これが何を意味するかを理解するには、まずリンクとは何かを議論する必要があります。Linux には、シンボリックリンク(symlink)とハードリンクの 2 種類のリンクがあります。
シンボリックリンクの理解
Windows オペレーティングシステムにはショートカットがありますが、これは基本的に他のファイルを参照するエイリアスです。Linux では、これに相当するものがシンボリックリンク、またはソフトリンク、symlink と呼ばれます。シンボリックリンクは、名前によって別のファイルやディレクトリを指す特殊な種類のファイルです。
これを実際に見るために、いくつかのファイルを作成し、その後シンボリックリンクを作成します。
pete@icebox:~/Desktop$ echo 'myfile' > myfile
pete@icebox:~/Desktop$ echo 'myfile2' > myfile2
pete@icebox:~/Desktop$ echo 'myfile3' > myfile3
pete@icebox:~/Desktop$ ln -s myfile myfilelink
pete@icebox:~/Desktop$ ls -li
total 12
151 -rw-rw-r-- 1 pete pete 7 Jan 21 21:36 myfile
93401 -rw-rw-r-- 1 pete pete 8 Jan 21 21:36 myfile2
93402 -rw-rw-r-- 1 pete pete 8 Jan 21 21:36 myfile3
93403 lrwxrwxrwx 1 pete pete 6 Jan 21 21:39 myfilelink -> myfile
ここで、myfile を指す myfilelink という名前のシンボリックリンクを作成しました。ls を使用して ls symlink を表示すると、パーミッション文字列の先頭の l と、ターゲットを指す -> 記号によって明確に識別されます。シンボリックリンクは独自の inode 番号 (93403) を持つことに注意してください。シンボリックリンクは inode ではなくファイル名を指すため、異なるファイルシステムをまたぐことができます。
ハードリンクの理解
もう一方のリンクの種類はハードリンクです。ハードリンクは、元のファイルと同じ inode を直接指す別のファイルエントリを作成します。
myfile2 のハードリンクを作成してみましょう。
pete@icebox:~/Desktop$ ln myfile2 myhardlink
pete@icebox:~/Desktop$ ls -li
total 16
151 -rw-rw-r-- 1 pete pete 7 Jan 21 21:36 myfile
93401 -rw-rw-r-- 2 pete pete 8 Jan 21 21:36 myfile2
93402 -rw-rw-r-- 1 pete pete 8 Jan 21 21:36 myfile3
93403 lrwxrwxrwx 1 pete pete 6 Jan 21 21:39 myfilelink -> myfile
93401 -rw-rw-r-- 2 pete pete 8 Jan 21 21:36 myhardlink
myhardlink が myfile2 と全く同じ inode 番号 (93401) を共有していることに注目してください。両方のファイルのリンクカウントも 2 に増加しています。これは、2 つのファイルエントリが同じ inode を指しているためです。myfile2 の内容を変更すると、その変更は myhardlink に反映され、その逆も同様です。myfile2 を削除しても、リンクカウントがゼロになるまで、そのファイルデータは myhardlink を通じてアクセス可能です。ハードリンクは単一のファイルシステム内で一意である inode を指すため、異なるファイルシステムをまたぐことはできません。
シンボリックリンクとハードリンクの作成
どちらの種類のリンクも ln コマンドを使用して作成できます。構文は簡単です。
シンボリックリンクを作成するには、-s フラグを使用します。
ln -s /path/to/original /path/to/link
ハードリンクを作成するには、-s フラグを省略します。
ln /path/to/original /path/to/link
これらの異なるファイルタイプを管理および識別するには、ls symlinks または一般的な ls links コマンドに -l オプションを付けて使用することが不可欠です。