Linux の基礎知識

【Linuxの基礎知識】リンクとiノードについて理解を深めよう!

2020年4月12日

Linuxではファイルを作成した際に、それを直接参照するのではなく、リンクと呼ばれるファイルを生成し、リンクを通して間接的にデータを参照することがあります。また、その仕組みをある程度把握するためには、iノードと呼ばれるデータ概念を理解するのが近道となります。ここでは主に、「リンク」、「iノード」に焦点を絞って解説していきます。

リンクのメカニズム

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

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

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

2つのリンクの種類

  • ハードリンク
  • シンボリックリンク

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

ハードリンク

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

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

シンボリックリンク

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

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

リンクの設定(ln)

リンクの設定をするには、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 testLink01

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

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

シンボリックリンクの設定

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

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

# ln -s test02.txt testLink02

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

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

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

iノードとは

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

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

iノードの属性情報

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

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

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

リンク処理とiノードの関係

ここまでの解説で、リンクとiノードについてはある程度ご理解いただけたかと思います。では、今度は「ハードリンク」と「シンボリックリンク」それぞれのリンクが、どのようにiノードと結びついているのかを説明していきます。

ハードリンクとiノードの関係

前述した「リンクの設定(ln)・ハードリンクの設定」の続きからいきます。

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

# ls -li

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

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

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

シンボリックリンクとiノードの関係

前述した「リンクの設定(ln)・シンボリックリンクの設定」の続きからいきます。

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

# ls -il

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

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

まとめ

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

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

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

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

よく読まれている記事

1

独立前は、誰もが不安でいっぱい。近い将来、フリーランスとして独立を考えている方が独立初期に躓かないために「独立前にやるべきことチェックリスト」をご紹介します。 当記事は前編となる「お金まわり編」。全て ...

2

ゲームなどのエンタメ分野での導入が進んでいるVR。言葉自体は耳にしたことがあっても、その意味を詳しく知らないという人も多いのではないでしょうか。また、次世代の新たな技術をビジネスに積極的に活用していく ...

3

フリーランスの確定申告には、青色申告と白色申告の2種類があります。いったいどちらの申告方法を選ぶべきなのでしょうか。 この記事では、青色申告と白色申告、それぞれのメリット・デメリットを把握することでベ ...

4

フリーランスの仕事場は、自宅をはじめとし、カフェや図書館、コワーキングスペースなど自由に選べます。しかし全ての場所で100%集中ができるどうかは、人それぞれです。どのような環境が自身の仕事場として快適 ...

5

フリーランスのITエンジニアとして、一番難しいのは「自己管理」と言えるでしょう。 自分の体調管理はもとより、仕事のスケジュール等すべて自分で管理します。もちろんフリーランスに有給休暇等ありませんから休 ...

-Linux の基礎知識

Copyright© Beエンジニア , 2020 All Rights Reserved.