4.10. リンク -lnコマンド-
4.10. リンク -lnコマンド-
【コマンド説明】ln:link
lnコマンドはファイルやディレクトリにリンクを張ります。lnコマンドの使い方は以下の通りです。
# ln [オプション] リンク元(実体) リンク先(別名)
リンクにはハードリンクとシンボリックリンクの2種類があります。
- ハードリンク
リンク先のファイルはリンク元のファイルとデータを共有します。iノード番号が同じになります。そのため、片方のリンクを間違えて削除してしまったとしても、もう一方のファイルが残っていればデータは消えません。注意点としてはパーティションをまたがってのハードリンクは仕様上不可能です。また、ディレクトリにハードリンクを用いることはできません。
- シンボリックリンク
lnに“-s”というオプションを指定した場合、シンボリックリンクというリンクが作成されます。このリンクは、実体を持たずにオリジナルファイルの位置を示すファイルになっています。パーティションをまたがっても利用できるため、使い勝手はハードリンクよりも上ですが、オリジナルファイルが消えてしまう(もしくは移動したりファイル名を変更したりする)と、リンク先から実体を参照することができません。コマンド実行時の注意点として、ファイルの指定に相対パスを用いる時、シンボリックリンクは相対パスの基準がカレントディレクトリではないことに気をつけましょう。例えばカレントディレクトリが/home/user1のとき「$ln -s test1/link test2/link」を実行すると、/home/user1/test2/link は/home/user1/test2/test1/link というファイルへのシンボリックリンクになります。
【動画説明】
それではハードリンクとシンボリックリンクを作成してみましょう。リンクを作成するファイルは/etc/redhat-releaseというOSのヴァージョンが記載されたファイルをコピーして使用します。オプションを何もつけなかった場合はハードリンクが作成されて、“-s”というオプションを指定した場合はシンボリックリンクが作成されます。
$ cd
$ cat /etc/redhat-release >> /home/user1/redhat
$ ln /home/user1/redhat /home/user1/redhat.hard
$ ln –s /home/user1/redhat /home/user1/redhat.sym
$ ls -l
ハードリンク(redhat.hard)とシンボリックリンク(redhat.sym)が作成できているのが確認できると思います。それぞれのファイルの中身を確認しましょう。
$ cat /home/user1/redhat
$ cat /home/user1/redhat.hard
$ cat /home/user1/redhat.sym
オリジナルのファイルを削除してリンク先ファイルを確認してみましょう。
$ rm /home/user1/redhat
$ cat /home/user1/redhat.hard
$ cat /home/user1/redhat.sym
【問題】
1. /etc/hostsを自分のアカウントのホームディレクトリにコピーしましょう。~/hostsとしてコピーできたらリンクを作成しましょう。~/hostsにアクセスすると~/hosts.linkを参照する様にリンクを作成して下さい。このとき~/hostsと~/hosts.linkのiノード番号が同じになるようにして下さい。
ヒント: ls –s コマンドを使うとiノード番号が確認できます。
2. /linkディレクトリにアクセスすると/tmpディレクトリを参照するようにリンクを作成してみましょう。