lsコマンドで表示される左から2番目の数値【ハードリンク数】

ハードリンク数

ls -alと入力して表示される左から2つ目の数値は、ハードリンクの数。

$ ls -al
drwxrwxr-x  2 vagrant vagrant 4096 1月 13 05:03 .
drwxr-xr-x 11 vagrant vagrant 4096 1月 13 05:03 ..
-rw-rw-r--  1 vagrant vagrant    0 1月 13 05:03 a.txt
-rw-rw-r--  1 vagrant vagrant    0 1月 13 05:03 b.txt
  • 2フィールド目の「2」「11」「1」「1」という数値はハードリンクの数を表している。
  • .はカレントディレクトリを指す。
  • ..はカレントディレクトリの一つ上のディレクトリを指す。

ディレクトリを作ると → ハードリンク数が増える

mkdir cと入力して、cというディレクトリを作る。

$ mkdir c
$ ls -al
drwxrwxr-x  3 vagrant vagrant 4096 1月 13 05:05 .
drwxr-xr-x 11 vagrant vagrant 4096 1月 13 05:03 ..
-rw-rw-r--  1 vagrant vagrant    0 1月 13 05:03 a.txt
-rw-rw-r--  1 vagrant vagrant    0 1月 13 05:03 b.txt
drwxrwxr-x  2 vagrant vagrant 4096 1月 13 05:05 c

 

すると、cディレクトリは作ったばかりなのに、すでに「2」のハードリンク数が設定されている。

この理由はカレントディレクトリをcに移動してls -alしてみると分かる。

$ cd c
$ ls -al
drwxrwxr-x 2 vagrant vagrant 4096 1月 13 05:05 .
drwxrwxr-x 3 vagrant vagrant 4096 1月 13 05:05 ..

 

このように、すべてのディレクトリには

  • .
  • ..

という2つの記号が自動生成されるわけだけど、実はこの2つのファイルこそがハードリンク。

つまり、そのディレクトリ直下にディレクトリを作れば作るほど、そのディレクトリのハードリンクの数は増えていくことになる。

$ mkdir d
$ mkdir e
$ mkdir f
$ mkdir g
$ ls -al
drwxrwxr-x  7 vagrant vagrant 4096 1月 13 06:02 . ←ディレクトリを増やした分、ハードリンクの数も増えている
drwxr-xr-x 11 vagrant vagrant 4096 1月 13 05:03 ..
-rw-rw-r--  1 vagrant vagrant    0 1月 13 05:03 a.txt
-rw-rw-r--  1 vagrant vagrant    0 1月 13 05:03 b.txt
drwxrwxr-x  2 vagrant vagrant 4096 1月 13 05:05 c
drwxrwxr-x  2 vagrant vagrant 4096 1月 13 06:02 d
drwxrwxr-x  2 vagrant vagrant 4096 1月 13 06:02 e
drwxrwxr-x  2 vagrant vagrant 4096 1月 13 06:02 f
drwxrwxr-x  2 vagrant vagrant 4096 1月 13 06:02 g

本来、ハードリンクはディレクトリには設定できないはず(ファイルにのみ設定できる)だけど、おそらくこれはLinuxの根本的な仕様なんだと思います。

ハードリンクの探し方

ハードリンクの場所はiノード番号で探すことができる。

参考シンボリックリンクとハードリンクの違い

 

iノード番号はlsコマンドにiオプションをつけると表示させることができ(1番目のフィールドの値)、

$ ls -ali
256568 drwxrwxr-x  7 vagrant vagrant 4096 1月 13 06:02 .
67696  drwxr-xr-x 11 vagrant vagrant 4096 1月 13 05:03 ..
256604 -rw-rw-r--  1 vagrant vagrant    0 1月 13 05:03 a.txt
256606 -rw-rw-r--  1 vagrant vagrant    0 1月 13 05:03 b.txt
259335 drwxrwxr-x  2 vagrant vagrant 4096 1月 13 05:05 c
259349 drwxrwxr-x  2 vagrant vagrant 4096 1月 13 06:02 d
259350 drwxrwxr-x  2 vagrant vagrant 4096 1月 13 06:02 e
259351 drwxrwxr-x  2 vagrant vagrant 4096 1月 13 06:02 f
259352 drwxrwxr-x  2 vagrant vagrant 4096 1月 13 06:02 g

 

以下のコマンドで、該当するハードリンクをすべて表示させることができる。

find 検索パス -inum inode番号

 

 

おわり

Linux
スポンサーリンク
この記事を書いた人
penpen

1991生まれ。WEBエンジニア。

技術スタック:TypeScript/Next.js/Express/Docker/AWS

フォローする
フォローする

コメント

タイトルとURLをコピーしました