LPIC-1 - 101試験 - 104:デバイス、Linuxファイルシステム、ファイルシステム階層標準 - 104.6 ハードリンクとシンボリックリンクを作成・変更する

Last Update : September 18 2014 21:34:21

     

a. リンク

Linux では、ファイルに対してリンクを作成することができます。リンク機能は、ファイルをコピーしたり移動したりせずに、別のディレクトリ にあるように扱うことができる機能です。
これは、Windows のショートカットや Macintosh のエイリアスのようなもので、1つのファイルに対して複数のリンクを設定することができます。
リンク自体にはそのファイルの情報は記録されておらず、ファイルの存在場所の情報が記録されています。 リンクを実行することで、リンク先のファイルを呼び出すことができます。
リンクには、 ハードリンク と シンボリックリンク の2種類があり、それぞれリンクの性質が違います。


b. ハードリンク

ハードリンクはファイルに複数の名前を割り当てる機能です。
複数のハードリンクがある場合、ハードリンクはファイルの実体そのものとして認識されるため、ファイルに対してはどのリンクも同じ扱いになります。
用途とメリットは、異なるディレクトリでも同一ファイルを管理する際、特にディスク容量を占有することなく作成できることです。 また、全てのハードリンクが削除されるまでファイルの本体は削除されません。 注意点としては、ハードリンクはiノード番号を共有することで実現しているので、異なるファイルシステムやディレクトリに対してはハードリンクを作成することができません。

ハードリンクのイメージ

DirB のファイルを削除
─────→

ハードリンクのイメージ

ハードリンクでは直接ファイル本体にリンクされています。
そのため同じファイルが2つあるように扱われます。
全てのリンクを削除するまで、ファイルは完全には削除されません。
ハードリンクは、リンクファイルを作成するごとにリンクカウントが増え、0になると実体ファイルも削除されます。

リンクカウントとは
ls -l で表示される結果の第2項目がファイルのリンクカウントでファイルのハードリンクの数を表す。


c. シンボリックリンク

シンボリックリンクは、ハードリンクと違って、ファイルの本体の位置情報だけを記録しているファイルで、ファイルの本体とは完全に区別されています。 シンボリックリンクは、ファイルだけでなくディレクトリに対しても作成することができます。 また、ハードリンクのような制限がなく、異なるファイルシステムをまたぐリンクも作成することが可能です。

ただし、シンボリックリンクは、ファイル本体とはまったく別ファイルのため、シンボリックリンクを残したままファイル本体を削除できてしまいます。 このため、本体が削除されたシンボリックリンクにアクセスするとエラーとなってしまいます。 ハードリンクは 「ls コマンド」 でリンク情報を確認することができますが、シンボリックリンクは確認することができないため、 自分でリンクを管理しておく必要があります。

>シンボリックリンクのイメージ

ファイル本体を削除
─────→

シンボリックリンクのイメージ

シンボリックリンクは、ファイル本体とは待ったく別ファイルとして扱われます。
シンボリックリンクには、ファイル本体の位置情報が記録されており、その情報からファイル本体へ接続を行います。 このため、ファイル本体がなくなった場合、参照先が見つからずエラーとなります。


c. リンクの操作

ファイルやディレクトリのリンクを作成するには、 ln コマンドを使います。

● ln コマンド構文
  ln [オプション] 元ファイル リンクファイル

● ln コマンドオプション
 -b 上書きや削除されることになるファイルにはバックアップを作成する
 -f リンク先に同名ファイルがあるときは削除
 -i リンク先に同名ファイルがあるときは問い合わせる
 -s シンボリック・リンクを作成する
 -v コピー前に各ファイルを表示する

● ハードリンクの作成
# ln test.txt testh.lnk
# ls -il
3145877 -rwxr-xr-x 2 root     root      226  4月  4 23:36 2013 test.txt
3145877 -rwxr-xr-x 2 root     root      226  4月  4 23:36 2013 testh.lnk

● シンボリックリンクの作成
# ln -s test.txt test.lnk
# ls -il
3145885 lrwxrwxrwx 1 root     root        8  4月  4 21:06 2013 test.lnk -> test.txt
3145877 -rwxr-xr-x 2 root     root      226  4月  4 23:36 2013 test.txt

● cp コマンドによる、シンボリックリンクの作成
# cp -s test.txt test2.lnk
# ls -il
3145886 lrwxrwxrwx 1 root     root        8  4月  4 23:10 2013 test2.lnk -> test.txt
3145877 -rwxr-xr-x 2 root     root      226  4月  4 23:36 2013 test.txt

● シンボリックリンクのコピー作成

cp コマンドを -d 又は -a を使って、コピー元にシンボリックリンクを指定することでコピーが作成できます。

# cp -d test.lnk test3.lnk
# ls -il
3145885 lrwxrwxrwx 1 root     root        8  4月  4 21:06 2013 test.lnk -> test.txt
3145877 -rwxr-xr-x 2 root     root      226  4月  4 23:36 2013 test.txt
3145894 lrwxrwxrwx 1 root     root        8  4月  4 23:18 2013 test3.lnk -> test.txt

# cp -a test.lnk test4.lnk
# ls -il
3145885 lrwxrwxrwx 1 root     root        8  4月  4 21:06 2013 test.lnk -> test.txt
3145877 -rwxr-xr-x 2 root     root      226  4月  4 23:36 2013 test.txt
3145894 lrwxrwxrwx 1 root     root        8  4月  4 23:18 2013 test3.lnk -> test.txt
3145895 lrwxrwxrwx 1 root     root        8  4月  4 21:06 2013 test4.lnk -> test.txt

-a オプションを使った場合は、更新日時などの属性情報をそのままコピーします。


z. 出題範囲概要

●主要な知識範囲
リンクを作成する
ハードリンクとソフトリンクを識別する
ファイルのコピーとリンクの違い
システム管理業務をサポートするためにリンクを使用する
●重要なファイル、用語、ユーティリティ
ln


  [ 例題 ] 
  1. 101:104.6 問01  ハードリンクとシンボリックリンク
  2. 101:104.6 問02  ハードリンク
  3. 101:104.6 問03  シンボリックリンク
  4. 101:104.6 問04  ハードリンク
  5. 101:104.6 問05  シンボリックリンクslinkを作成するコマンド
  6. 101:104.6 問06  シンボリックリンク


     

www.it-shikaku.jp