# 第二章 ファイル・ディレクトリの操作と管理
練習問題2.6
カレントディレクトリにあるファイルlinuxtestのシンボリックリンクlinuctest.linkを作成するコマンドを選択してください。
A. ln linuctest linuctest.lnk
B. ln linuctest.lnk linuctest
C. ln -s linuctest linuctest.lnk
D. ln -s linuctest.lnk linuctest
(解答)C
(解説)
lnコマンドは、オプションなしの場合はハードリンクを作成し、-sオプションを付けるとシンボリックリンク作成します。したがって、-sオプションのない選択肢AとBは不正解です。lnコマンドは、リンク元(実体)、リンク先(リンクファイル)の順に指定します。
ハードリンク
linuxでは、ファイルをディスクに保存すると、重複しないiノード番号が割り当てられます。すべてのファイルには対応するiノードが存在し、iノードにはディスク上のファイルに関する属性情報が格納されています。ディレクトリは特殊なファイルの形態であり、所属するファイル名と所属するファイル名とiノードを関連づけています。ファイルの実体(ディスク上に保存されているデータ)が1つでも、その実体を参照するファイルが複数あれば、それぞれのファイル名で同一の実体を参照することができます。これがハードリンクです。
ハードリンクでは、元のファイルと、リンクとして作成したファイルの区別がつけられません。どちらもiノード番号が同じだからです。ファイルをコピーした場合は、いずれかを変更しても他方に影響はありませんが、ハードリンクの場合は、いずれのハードリンクファイルに変更を加えても、同一の実体に対して変更を加えることになります。
ハードリンクが複数作成されている場合、そのすべてを作成するまでは、ファイルの実態は削除されません。リンクが作成されている数は、lsコマンドで確認することができます。
特徴としては、ハードリンクは元のファイルが存在しているファイルシステムと異なるファイルシステム上に作成することはできません。他には、ディレクトリにハードリンクを作成することはできません。
シンボリックリンク
シンボリックリンクはリンク元の場所をさし示します。シンボリックリンク自身が持っているのは、リンク元へのポインタです。そのためシンボリックリンクを残したまま、リンク元のファイルを蚊駆除することも可能です。この場合、シンボリックリンクにアクセスすると、実体ファイルが見つけられずエラーになります。ハードリンクと違うことは、別のファイルシステムにもリンクを作成することができるのと、ディレクトリのリンクも作成することができます。