【LinuC101】ハードリンクとシンボリックリンクの違いをls表示で確認する




はじめに

前回の記事では、
ハードリンクとシンボリックリンクの違いを「仕組み」から解説しました。

今回はその続きとして、
ハードリンクとシンボリックリンクの違いを、実際の表示結果から確認していきます。

ポイントになるのが ls -la コマンドです。

ls は単なるファイル一覧表示のコマンドですが、
リンクの種類・数・参照関係といった情報もまとめて確認できます。

この記事では ls -la の出力結果を使って、

  • ハードリンクとシンボリックリンクはどこが違って見えるのか

  • 表示結果から何が読み取れるのか

を、LinuC101で求められるレベルに絞って解説していきます。


今回使う ls の出力例

まずは、今回の題材となる実際の出力です。

下2行が今回の主役です。

-rwxrwxrwx 2 ... hardlink
lrwxrwxrwx 1 ... symlink -> ../test.txt

① 一番左の1文字で分かる「正体」

まず見るべきは、一番左の1文字です。

- → 通常ファイル(ハードリンク)
l → シンボリックリンク
  • - で始まっている hardlink

  • l で始まっている symlink

これだけで、

👉 「これはシンボリックリンクだな」
👉 「これは普通のファイル(=ハードリンク)」

と判断できます。

LinuC101では、
「ls の出力からリンクの種類を判別できるか」
が問われることもあるので、かなり重要なポイントです。


② リンク数を見るとハードリンクが分かる

次に注目するのが、パーミッションの次の数字です。

-rwxrwxrwx 2 ...
lrwxrwxrwx 1 ...

この数字は リンク数 を表しています。

  • hardlink → 2

  • symlink → 1

ハードリンクの場合

ハードリンクは、
同じ inode を指しているファイル名の数が表示されます。

今回の場合、

  • 元ファイル

  • hardlink

の2つが同じ inode を共有しているため、2 になっています。

シンボリックリンクの場合

シンボリックリンクは inode を共有しないため、
基本的に 1 のままです。

リンク数が増えるのはハードリンクだけ

これは試験でも実務でも超重要です。


③ ファイルサイズの違いが意味するもの

次はサイズ部分を見てみましょう。

hardlink    1
symlink    11

ここにも大きな違いがあります。

ハードリンクのサイズ

ハードリンクは実体そのものなので、
元ファイルと同じサイズになります。

シンボリックリンクのサイズ

一方、シンボリックリンクのサイズは、

../test.txt

という パス文字列の長さです。

つまり、

👉 シンボリックリンクの中身は
👉 「参照先パスを書いた文字列」

ということが、ls からも確認できます。


④ -> 表示は「参照先」を表している

symlink -> ../test.txt

この -> は、

  • このリンクが

  • どこを参照しているか

を示しています。

ここでは、
1つ上のディレクトリにある test.txt を参照している
という意味です。

この表示があるのは、シンボリックリンクだけです。


total 0 の意味もついでに理解しておく

total 0

これは、
このディレクトリ内のファイルが使用しているディスクブロックの合計
を表しています。

今回の例では、

  • 小さいファイル

  • 実体は別に存在しているリンク

しかないため、0 になっています。

「リンクだから 0」ではなく、
ディスク使用量がほぼない結果として 0
という点は押さえておきましょう。


LinuC101ではここまで分かればOK

試験対策としては、次の点を説明できれば十分です。

  • -l の違い

  • リンク数が増えるのはハードリンク

  • シンボリックリンクには -> が付く

  • サイズが「実体」か「パス文字列」かの違い

これが分かっていれば、
ls の出力問題で詰まることはほぼありません。


まとめ

  • ls の一番左でリンクの種類が分かる

  • リンク数はハードリンク理解のカギ

  • シンボリックリンクはパス文字列を持つ

  • ls は「リンクの正体」を見抜く最強のコマンド

前回の「仕組み編」と、
今回の「lsで確認編」をセットで理解できると、
ハードリンクとシンボリックリンクは一気にクリアになります。

コメント

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