助け合いフォーラム

LPIC

LPIC Lv1-101(Ver5.0)
問題ID : 3701
問題を開く
ハードリンクとシンボリックリンクそれぞれの説明として正しいものはどれか。(3つ選択)

正解

ハードリンクはディスク容量を消費しない

ハードリンク先のファイルを編集すると、元ファイルも変更される

シンボリックリンクの元ファイルを削除しても、リンクは残る

解説

Linuxではファイル(ディレクトリはファイルの一種)を「ファイルの実体(データ本体)」と「inode」を使用して管理しています。inodeにはファイルの属性や、「ファイルの実体」にアクセスするためのアドレスなどのメタデータ(格納されているデータそのものに関する情報)が格納されています。

ハードリンクとは、ファイルの実体を直接参照するリンクのことです。同じ実体を参照するハードリンクは同じinode番号を持ち、複数作成してもコピーのようにディスク容量を消費しません。そのため、更新が無いファイルのバックアップ手段としてハードリンクが使用されることもあります。
また、ハードリンク先のファイルの中身を編集すると、元ファイルの中身も同じく変更されます。

シンボリックリンクとは、Windowsでのショートカットのようなもので、元ファイルの場所を指し示すリンクのことです。シンボリックリンクが持っている情報は「元ファイル(ディレクトリ)がどこにあるのか」というパス情報のみです。
シンボリックリンクの元ファイルを削除すると(他に同じinode番号を持つハードリンクが無ければ)、ファイルの実体は削除されますが、リンクは残ります。ただその場合、シンボリックリンクにアクセスすると、リンクしている元ファイルが無いためエラーになります。

したがって正解は
・ハードリンクはディスク容量を消費しない
・ハードリンク先のファイルを編集すると、元ファイルも変更される
・シンボリックリンクの元ファイルを削除しても、リンクは残る
です。

その他の選択肢については以下のとおりです。

・ハードリンクは異なるファイルシステムに作成できる
inode番号はファイルシステム毎に管理されるため、異なるファイルシステムへハードリンクを作成する事はできません。

・シンボリックリンクの元ファイルとリンクファイルのinode番号は同じである
シンボリックリンクはファイルの実体を指しませんので、inode番号は元ファイルと異なります。

参考

Linuxではファイル(ディレクトリはファイルの一種)を「ファイルの実体(データ本体)」と「inode」を使用して管理しています。inodeにはファイルの属性や、「ファイルの実体」にアクセスするためのアドレスなどのメタデータ(格納されているデータそのものに関する情報)が格納されています。
Linuxには、同じ「ファイルの実体」に対して複数の名前でアクセスできる、リンクという仕組みが2種類あります。それが「ハードリンク」と「シンボリックリンク」です。

【ハードリンク】
ハードリンクとは、ファイルの実体を直接参照するリンクのことです。ファイルを新規作成した場合は、ハードリンクが1つある状態です。
同じ実体を参照するハードリンクは複数作成できます。それらは同じinode番号を持つことになります。



上図のFile1とFile2は同じ実体を参照しています。ですのでFile1の中身を編集すると、File2の中身も同じく変更されます。

ハードリンクの数とinode番号は「ls -il」コマンドで確認することが出来ます。


ハードリンクを作成するにはlnコマンド(書式:ln 元ファイル リンクファイル)を利用します。
例)File1のハードリンクをFile2として作成する場合


File2はFile1のハードリンクのため、inode番号が同じです。ただこの時点で、どちらがリンクファイルであるかの区別は無くなります。
この状態でFile1を削除しても、File2が実体にリンクしているため実体は残ります(削除されません)。File2も削除し、ハードリンクが0になると、実体がはじめて削除されます。

ハードリンクの制限として以下の2点があります。
1. ディレクトリのハードリンクは作成できない
2. 異なるファイルシステム(パーティション)にハードリンクを作成できない

1の制限は循環ディレクトリの作成を防ぐためです。例えば、testという1ユーザーしか利用しない環境で「/home」を「/home/test」にハードリンクしてしまうと、「/home/test」の「/home」が「/home/test」に置き換えられるため、「/home/test/test/test/...」と無限に続く循環ディレクトリができてしまうことになります。

2の制限はinode番号が各ファイルシステム毎に別々に管理されているためです。異なるファイルシステムではinodeの利用状況が異なるため、全く同じinodeを割り当てて正しく参照できる保証がありません。

これらの制限はシンボリックリンクを使う事で解決できます。

【シンボリックリンク】
シンボリックリンクとは、Windowsでのショートカットのようなもので、元ファイルの場所を指し示すリンクの事です。
シンボリックリンクが持っている情報は「元ファイル(ディレクトリ)がどこにあるのか」というパス情報のみです。



上図のFile2はFile1への単なるショートカットです。
File1を削除すると(他に同じinode番号を持つハードリンクが無ければ)、ファイルの実体は削除されますが、File2は残ります。ただその場合、File2にアクセスすると、リンクしているFile1が無いためエラーになります。

シンボリックリンクを作成するにはlnコマンドに「-s」オプションを付加して作成します。(書式:ln -s 元ファイル リンクファイル)
例)File1のシンボリックリンクをFile2として作成する場合


File1とFile2ではinode番号が違う事が分かります。
また、File2にはシンボリックリンクを示す「l」がパーミッションの先頭に表示されています。ファイル名を示す欄では、File2はFile1のシンボリックであることが分かります。

上に戻る

問題選択肢の日本語について

公開日 2023/01/23

問題選択肢で、少し違和感があった日本語があるので共有させていただきます。

「ハードリンクとシンボリックリンクそれぞれの説明として正しいものはどれか。(3つ選択)」という問題で、
「ハードリンクはディスク使用量を節約できる」が正答の一つになっていますが、
ハードリンク作成は直接ディスク使用量の節約にはならないのではないかと思いました。
複数作成してもコピーのようにディスク容量を消費しないので、’バックアップやコピーを作成する場合と比較して’、
確かに使用量を節約できるといえるかもしれませんが、この問題分の範疇としては’ディスク容量を消費しない’くらいのニュアンスかと感じました。

初学者のため間違えた考え方をしていたら教えて頂けると幸いです。
それか実際の問題でこのような日本語の問題があるならこのままでもいいような気もしますが・・

2023/01/25 00:25

スタッフ様
こちらこそ対応ありがとうございます!


コメント

この返信に対して
コメントを記入できます

スタッフからの返信

s staff_meg

2023/01/24 09:34

ysatoagさん、 ご指摘の点を修正致しました。 ご報告、誠にありがとうございました。

この投稿に対して返信しませんか?