助け合いフォーラム
LPIC Lv1-101(Ver5.0)
問題ID : 3701
問題を開く
ハードリンクとシンボリックリンクそれぞれの説明として正しいものはどれか。(3つ選択)
正解
ハードリンクはコピーに比べてディスク容量を消費しない
ハードリンク先のファイルを編集すると、元ファイルも変更される
シンボリックリンクの元ファイルを削除しても、リンクは残る
解説
Linuxではファイル(ディレクトリはファイルの一種)を「ファイルの実体(データ本体)」と「inode」を使用して管理しています。inodeにはファイルの属性や、「ファイルの実体」にアクセスするためのアドレスなどのメタデータ(格納されているデータそのものに関する情報)が格納されています。
ハードリンクとは、ファイルの実体を直接参照するリンクのことです。同じ実体を参照するハードリンクは同じinode番号を持ち、複数作成してもコピーのようにディスク容量を消費しません。そのため、更新が無いファイルのバックアップ手段としてハードリンクが使用されることもあります。
また、ハードリンク先のファイルの中身を編集すると、元ファイルの中身も同じく変更されます。
シンボリックリンクとは、Windowsでのショートカットのようなもので、元ファイルの場所を指し示すリンクのことです。シンボリックリンクが持っている情報は「元ファイル(ディレクトリ)がどこにあるのか」というパス情報のみです。
シンボリックリンクの元ファイルを削除すると(他に同じinode番号を持つハードリンクが無ければ)、ファイルの実体は削除されますが、リンクは残ります。ただその場合、シンボリックリンクにアクセスすると、リンクしている元ファイルが無いためエラーになります。
したがって正解は
・ハードリンクはコピーに比べてディスク容量を消費しない
・ハードリンク先のファイルを編集すると、元ファイルも変更される
・シンボリックリンクの元ファイルを削除しても、リンクは残る
です。
その他の選択肢については以下のとおりです。
・ハードリンクは異なるファイルシステムに作成できる
inode番号はファイルシステム毎に管理されるため、異なるファイルシステムへハードリンクを作成する事はできません。
・シンボリックリンクの元ファイルとリンクファイルの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のシンボリックであることが分かります。
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のシンボリックであることが分かります。
ハードリンクはディスク容量を消費しない?
h
harmo
投稿日 2024/06/21
最強WEB問題集 LPIC Lv1-101(Ver5.0) 問題ID : 3701において、
「ハードリンクはディスク容量を消費しない」という選択肢が正答に含まれていますが、ハードリンクのメタデータ(ハードリンク名や参照先iノード番号)の分だけディスク容量を消費するのではないでしょうか。
この投稿に対して返信しませんか?
h harmo
2024/06/22 18:48
回答ありがとうございます。 問題IDの異なる全く同じ問題が存在するのは盲点でした。 しかしリンク先でもこの問題は解決されていないようでした。 そこで以下の2点 ・0byteで無限の情報を保存できるわけがないため必ずディスク容量を消費するはずである ・ハードリンクを作成してみても1byteも消費していない から、固定サイズのメタデータ格納用ファイルが作られているのではないかと考え、次の実験をおこないました。 1.ファイル名255byteのハードリンクを作成 2.ハードリンクが存在するディレクトリのサイズを確認 3.以上繰り返し その結果、ディレクトリ初期サイズの4096byteを超えると新たに4096byteが確保され、以降現在のサイズを超えると4096byteずつ増加する、ということが分かりました。 したがって、問題ID15004及び3701は「ハードリンクはディスク容量を消費しない」は間違っていることが分かりました。