Linux の基礎知識

【Linuxの基礎知識】リンクとiノードを理解してファイル管理をマスターしよう

ITエンジニア基礎スキル

🟢 Linux の基礎知識
📌 サーバー運用の基盤となるOSの仕組みを理解する
├─【Linuxの基礎知識】Linuxとは?基本概要と仕組みをわかりやすく解説!
├─【Linuxの基礎知識】インストールからログインまでの完全マニュアル
├─【Linuxの基礎知識】カーネルの役割と起動プロセスをわかりやすく解説!
├─【Linuxの基礎知識】ファイルシステムを極める!ディレクトリ構造とその関連性を解説
├─【Linuxの基礎知識】ディレクトリとファイル操作を完全マスター!初心者向けガイド
├─【Linuxの基礎知識】初心者向け!Linux管理に役立つ基本コマンド完全ガイド
├─【Linuxの基礎知識】ユーザー管理を極める!アクセス権との連携で強固なシステム構築
├─【Linuxの基礎知識】リンクとiノードについて理解を深めよう!
├─【Linuxの基礎知識】LVMとは? LVMを理解しよう!
├─【Linuxの基礎知識】再起動時に入れ替わるデバイス名「sdX」を固定したい
├─【Linuxの基礎知識】過去事例から学ぶ!システムセキュリティの基本
├─【Linuxの基礎知識】ディスク管理の完全ガイド!初心者から実践までを徹底解説
├─【Linuxの基礎知識】ネットワーク設定とトラブルシューティングを徹底解説!
├─【Linuxの基礎知識】リソース監視ツールの使い方を徹底解説!
├─【Linuxの基礎知識】パッケージ管理の応用テクニックをマスター!
├─【Linuxの基礎知識】仮想化とコンテナの基本を学ぶ!仕組みと違いを解説!
├─【Linuxの基礎知識】バックアップとリストア!スナップショット活用も紹介!
└─RAIDとディスク管理を徹底解説!

リンクとは、あるファイルへの参照を目的とした、「ショートカット」のようなものです。

私たちも普段デスクトップなどにショートカットを作成し、ファイルを実行したり、フォルダに移動したりすることがあると思います。それに似た操作を、Linux上でも簡単に行うことが出来ます。

リンクには主に下記の2つの種類が存在します。

2つのリンクの種類

  • ハードリンク
  • シンボリックリンク(ソフトリンク)

リンクを使用すると複雑な階層にあるファイルを実行できるので、作業時間を軽減出来たり、バッチ処理などのフローを簡略化できたりします。

ハードリンクとの違い

特徴ハードリンクシンボリックリンク
(ソフトリンク)
リンク対象同じiノード番号を共有(実体)パス情報を参照(リンクファイルが実体)
異なるファイルシステム作成不可作成可能
元ファイル削除時の影響他のリンクは影響を受けないリンク切れ状態になる
ディレクトリへのリンク作成不可作成可能

ハードリンクとは?

ハードリンクとは、対象となるファイルと同じ「iノード番号」をリンクに設定し、あたかも実態がそこにあるかのように振舞います。( iノードについての説明は後述します。)

ハードリンクの特徴として、別の場所にあるiノードを参照するため、もとのファイルを移動させてもデッドリンクになることはありません。また、ディレクトリのハードリンクは作成することができません。

ハードリンクとは?

  • ハードリンクは、iノード番号を共有することで同一のファイルを複数の場所から参照できるようにする仕組みです。
  • 特徴:
    • ハードリンクを作成しても、新しいファイルは作成されません。
    • 元のファイルが削除されても、他のハードリンクからアクセス可能です。

ln original-file hardlink-file

ハードリンクを削除するとどうなる?

Linuxのファイルシステムでは、ファイルはiノードと呼ばれるメタデータに紐づけられて管理されています。ハードリンクを削除しても、他にそのiノードを参照するリンクが残っている限り、ファイルデータ自体は削除されません。

  • ハードリンクの削除:
    ハードリンクを削除しても、そのiノードを参照する他のリンクが存在する場合、データは引き続き利用可能です。この場合、 hardlink-file は削除されますが、 original-file を通じてデータにアクセスできます。

    ln original-file hardlink-file
    rm hardlink-file

  • すべてのリンクが削除された場合:
    ファイルに紐づくすべてのリンクが削除されると、そのiノードに保存されたデータもファイルシステムから削除されます。

    ln original-file hardlink-file
    rm original-file
    rm hardlink-file

この時点でiノードを参照するリンクがなくなるため、データは削除されます。

要点まとめ

  • ハードリンクを削除しても他のリンクがあればデータは削除されない。
  • すべてのリンクが削除された場合にのみ、データが完全に削除される。

シンボリックリンクの使い方

シンボリックリンクはiノードではなく、もとのファイルのパスを参照します。私たちが普段使う「ショートカット」と同じような概念となります。

シンボリックリンクはハードリンクと異なり、もとのファイルを移動させたり削除するとデッドリンクとなってしまいます。また、ディレクトリのリンクを作成することが可能です。

ハードリンク」があるのだから「ソフトリンク」もあるんじゃないのか?と思いますよね。
答えとしては、「Linuxにおける「ソフトリンク」は、「シンボリックリンク」と同じものを指します。」が正解です。

「ソフトリンク」は「シンボリックリンク」の別称であり、どちらも同じ概念を指します。
用語は文脈や好みによって使い分けられますが、Linux公式ドキュメントや多くの資料では「シンボリックリンク」が一般的です。

シンボリックリンクの使い方

  • シンボリックリンク(ソフトリンク)は、特定のファイルやディレクトリへのパス情報を格納する特殊なファイルです。
  • 特徴:
    • 元のファイルが削除されると、リンクが切れる(リンク切れ状態)。
    • 異なるファイルシステム間でも作成可能。

ln -s target-file symbolic-link

リンクの書式

リンクの設定をするには、lnコマンドを使用します。

コマンドの書式

ln[オプション] ファイル名 リンク名

コマンドの主なオプション

  • -s(--symbolic):ハードリンクの代わりにシンボリックリンクを作成する
  • -f(--force):リンクファイルと同じ名前のファイルがあっても強制的に上書きする
  • -i(--interactive):上書き前に確認する
  • -L(--logical):対象がシンボリックリンクの場合リンクを巡る
  • -P(--physical):シンボリックリンク自体へのハードリンクを作成する
  • -r(--relative):相対パスのシンボリックリンクを作成する
  • -T(--no-target-directory):リンク先を常に通常ファイルとして扱う
  • -t(--target-directory):指定したディレクトリにリンクを作成する
  • -v(--verbose):経過を表示する

カレントディレクトリに「test01.txt」というテキストファイルを作成し、そのリンク「testLink01」を作成していきます。

下記のコマンドを実行します。

# ln test01.txt testLink0

「test01.txt」のハードリンクである「testLink01」が作成されました。

「ls」コマンドでカレントディレクトリを表示すると「testLink01」が出来ているのが分かります。作成されたリンクを「cat」コマンドで参照すると、もとの「test01.txt」と同じ内容が表示されます。

カレントディレクトリに「test02.txt」というテキストファイルを作成し、そのシンボリックリンク「testLing02」を作成していきます。

下記のコマンドを実行します。

# ln -s test02.txt testLink02

コマンドオプション「-s」を付与することにより、シンボリックリンクが作成できました。

「ls」コマンドでカレントディレクトリを表示すると「testLink02」の「シンボリックリンク」が出来ているのが分かります。作成されたリンクを「cat」コマンドで参照すると、もとの「test02.txt」と同じ内容が表示されます。

シンボリックリンクの主な用途は、深い階層にあるログファイル等を、自分の扱いやすいディレクトリへリンクする場合や、アプリケーションのバージョンアップなどで、カレントディレクトリを切り替える場合に使用します。

Linuxのファイルシステムは、リンクとiノードの仕組みによって効率的なファイル管理を実現しています。これらはファイルシステムの基礎を理解する上で欠かせない要素です。このセクションでは、iノードの役割やリンクの種類とその用途について詳しく解説します。

iノードとはなにか?

「iノード(inode)」とは、主にUNIX系で扱われる、ファイルやディレクトリの属性情報が書いてあるデータのことです。

Linux上のあるディレクトリに「hoge.txt」というファイルを作成し、そのテキストに「ああああ」と記述したとします。ファイルの中身の情報とは別に、「属性情報」と呼ばれるデータが別の場所で管理され、この属性情報のことをiノードと呼んでいます。

iノードの属性情報

  • ファイル種別
  • ファイルサイズ
  • アクセス権
  • 所有者情報
  • リンク
  • ブロック番号

「iノード」にはiノード番号と呼ばれる番号が振り分けられ、このiノード番号と作成したファイルは結び付けられます。

例えば、「hoge.txt」を作成した際に作られたiノードの番号が12だった場合、[12 : hoge.txt]というようにそれぞれの情報が紐づけられます。

iノードはファイルのメタデータを格納し、データそのものは別のデータブロックに保存されます。この分離構造により、効率的なファイルアクセスが可能になります。たとえば、iノードに格納されたポインタを使用してデータブロックを迅速に参照する仕組みが採用されています。

iノード番号とその役割

  • iノードは、各ファイルやディレクトリに一意に割り当てられる番号を持っています。この番号を「iノード番号」と呼び、ファイルシステム内でファイルを特定するために使用されます。
  • iノードには以下の情報が格納されています:
    • ファイルのサイズ
    • 作成日時、更新日時
    • アクセス権限
    • データブロックへのポインタ(実際のデータ位置)

Linuxのファイルシステムでは、リンクとiノードが密接に結びついており、ファイルの参照や管理に重要な役割を果たしています。このセクションでは、ハードリンクとシンボリックリンクがiノードとどのように関連しているのかを詳しく解説します。

iノードとハードリンクの結びつき

ハードリンクは、同じiノード番号を共有することで、1つのファイルに複数の名前を付けることを可能にします。これにより、1つの実体データに対して複数の参照を作成できます。

iノードとハードリンクの結びつき

  • 動作の仕組み:
    • ファイルに新しいハードリンクを作成すると、そのリンクは元のファイルと同じiノード番号を共有します。
    • ハードリンクの数は、iノードの「リンクカウント」に記録されており、すべてのリンクが削除されるとiノード自体とデータがファイルシステムから削除されます。
  • 特徴:
    • ハードリンクを削除しても、他のリンクが存在する限りデータは保持されます。
    • ハードリンクは同じファイルシステム内でのみ作成可能です。

ハードリンクとの関係性

前述した「リンクのメカニズム・ハードリンクの設定」の続きからいきます。

カレントディレクトリには、「test01.txt」と「testLink01」が作成されています。下記のコマンドを実行してみます。

# ls -li

コマンドオプション「-il」を付与することにより、iノード番号を表示させることができます。

ここでは第一カラム「33575008」がiノード番号となり、もとのファイルとリンクが一緒のiノード番号を参照していることが分かるかと思います。

第三カラム「2」は、そのiノードを参照している数となります。リンクを削除すると、ここの値は「1」になります。

シンボリックリンクがiノードと異なる点

シンボリックリンク(ソフトリンク)は、iノード番号を共有せず、リンク先のファイルやディレクトリへのパス情報を持つ特別なファイルとして作成されます。この違いにより、ハードリンクとは異なる動作をします。

  • 動作の仕組み:
    • シンボリックリンクはリンク先のパスを保持するファイルであり、元のファイルやディレクトリのiノードとは独立しています。
    • リンク先のファイルが削除されると、リンクは「リンク切れ状態」となり機能しなくなります。
  • 特徴:
    • 異なるファイルシステム間でも作成可能です。
    • ディレクトリにもリンクを作成できるため、柔軟性が高いです。

シンボリックリンクとの関係性

前述した「リンクのメカニズム・シンボリックリンクの設定」の続きからいきます。

カレントディレクトリには、「test02.txt」と「testLink02」が作成されています。下記のコマンドを実行してみます。

# ls -il

ハードリンクとは違い、それぞれiノード番号が異なっています。リンクが作成された時点で新たなiノードが作られ、その番号が割り当てられています。

また、第二カラムの「lrwxrwxrwx」はファイルの種別を表しており、1文字目が「l」になっています。これは、このファイルがシンボリックリンクということを表しています。

リンクとiノードの仕組みについて、読者からよく寄せられる質問にお答えします。ハードリンクとシンボリックリンクの使い分けや、iノード番号が同じファイルの管理について詳しく解説します。

ハードリンクとシンボリックリンクはどちらを使うべき?

ハードリンクとシンボリックリンクの選択は、利用する場面や目的によって異なります。それぞれの特徴を理解し、適切に使い分けましょう。

  • ハードリンクを使うべき場合:
    • 同じデータを複数の名前で参照したい場合。
    • 元のファイルを削除しても他のリンクを通じてデータを保持したい場合。
    • 同じファイルシステム内でデータを管理する必要がある場合。
  • シンボリックリンクを使うべき場合:
    • 異なるファイルシステム間でリンクを作成する必要がある場合。
    • ディレクトリへのリンクを作成したい場合。
    • 元のファイルが移動または削除された場合でも、リンクを修正して再利用したい場合。

要点まとめ

  • データの永続性を重視するならハードリンク。
  • 柔軟性を求めるならシンボリックリンクが適しています。

iノード番号が同じファイルはどう管理される?

Linuxファイルシステムでは、iノード番号が同じファイルは、実際には同一のiノードを共有するリンクです。この特性を理解することで、効率的なファイル管理が可能になります。

  • 動作の仕組み:
    • 同じiノード番号を持つファイルは、ファイルシステム上で同じデータを参照しています。
    • ハードリンクを削除しても、他のリンクが残っている限りデータは維持されます。
  • 管理の注意点:
    • ls -i コマンドを使用してiノード番号を確認できます。
    • 不要なリンクを削除しても、必要なリンクが残っていればデータは削除されません。

要点まとめ

  • iノード番号が同じ場合、リンクをすべて削除するまではデータは保持されます。
  • ファイルシステムの動作を正確に理解し、リンクの管理を適切に行いましょう。

この記事では、リンクとiノードについて解説してきました。

  • ハードリンク
    ディレクトリのハードリンクは作成できない。
    また、元のファイルを移動 or 削除してもデッドリンクとならない。
  • シンボリックリンク
    ディレクトリのハードリンクは作成可能。
    元のディレクトリ、ファイルを移動 or 削除するとデッドリンクとなってしまう。

上記の特性から、更新頻度の低い設定ファイルなどは、ハードリンクで管理を行い、更新頻度の高いログファイルなどは、シンボリックリンクで管理するのがよいでしょう

実際のサーバー構築において、ハードリンクを使用する場面は、ほとんどありません。


この記事を読んだら、次は 「【Linuxの基礎知識】LVMとは?LVMを理解しよう!」 を読むのがおすすめです!

よく読まれている記事

1

IT入門シリーズ 🟢 STEP 1: ITの基礎を知る(ITとは何か?) 📌 IT初心者が最初に学ぶべき基本知識。ITの概念、ネットワーク、OS、クラウドの仕組みを学ぶ ...

2

「私たちが日々利用しているスマートフォンやインターネット、そしてスーパーコンピュータやクラウドサービス――これらの多くがLinuxの力で動いていることをご存じですか?無料で使えるだけでなく、高い柔軟性 ...

3

この記事は、Linuxについて勉強している初心者の方向けに「Shellスクリプト」について解説します。最後まで読んで頂けましたら、Shellスクリプトはどのような役割を担っているのか?を理解出来るよう ...

-Linux の基礎知識