今日はlnコマンドについて語ります
1 |
ln [option] <リンク元のファイル> <リンク名> |
スポンサードサーチ
リンクとは
Linuxではファイルに別名を付けることが可能です。この機能をリンクと言い、別名を付けることをリンクを張ると言います。
リンクには二種類あります
・ハードリンク
・シンボリックリンク
現在はシンボリックリンクが多く使われるので、こちらを覚えておきましょう。ハードリンクはそこまで使われませんが一応解説しておきます
スポンサードサーチ
ハードリンク
次の例はfile1というファイルに対して、file2という名前でハードリンクを作成します。
1 2 3 4 5 6 |
$ echo file 123 >> file1 $ cat file1 123 $ ln file1 file2 $ cat file2 123 |
これにより、別のコマンドからファイル名として、file2を指定するとfile1にアクセスします。windowsでいうショートカット的な雰囲気ですが若干違います。
ハードリンクで追加したファイル名は、どっちかが本物でどちらかがリンクではないです。どっちかというと一つのファイルに複数の名前を付けていると思っていただいてください。

スポンサードサーチ
ハードリンクの削除
rmコマンドでハードリンクを作成したファイルを削除しても、指定したファイルだけが残り、ファイルの実体は残ったままとなります。
1 2 3 4 5 |
$ rm file $ ls file2 # cat file2 123 |
uaハードリンクを持つファイルは、全てのハードリンクがなくなったときに削除されます。
1 2 3 |
$ rm file2 $ ls $ #ここで全て削除される |
ハードリンクは複数の名前を付ける機能です。その複数の名前がすべて削除された時に、ファイル自体も削除される仕組みとなっています。
シンボリックリンク
ハードリンクは、ディレクトリに対して作成不可であったり、異なるディスク間での作成はできない等のいくつかの制限が存在します。
一方でシンボリックリンクはハードリンクのような制限がないため、こちらが頻繁に使用されます。ln コマンドに -s オプションを付けるとシンボリックリンク作成が可能です。
1 2 |
$ echo 123 > file1 $ ln -s file1 file2 |
こうすることで、シンボリックリンクを作成できました。リンク先を確認するには-lを指定することでどこにリンクされているかわかります。
1 2 3 |
$ ls -l -rw-r--r-- 1 initial initial 4 May 20 14:30 file1 lrwxrwxrwx 1 initial initial 5 May 20 14:32 file2 -> file1 |
コマンドでファイル名の代わりにシンボリックリンクを見ると、そのリンク先のファイルにアクセスします。
1 2 |
$ cat file2 123 |
このように、シンボリックリンクは、リンク先のパス名が書かれたショートカットのような特殊ファイルです。リンク先がファイルの実体であり、本物のファイルです。
シンボリックリンクの削除
シンボリックリンクを削除するにはrmコマンドで削除できます。この時、リンク先のファイルには何も影響を与えません。
1 2 3 |
$ rm file2 $ ls file1 #元のファイルは残っている |
逆に、file1を削除してしまうと、リンク先を削除することになるので、シンボリックリンクはリンク先を失い、リンクが破壊されたという状態になります。
1 2 3 4 |
$ls -l lrwxrwxrwx 1 initial initial 5 May 20 14:32 file2 -> file1 $cat file2 cat: file2: No such file or directory |
私の場合はls- lでの表示の際 file2 ->file1が赤字で表示されました。
スポンサードサーチ
まとめ
今回はシンボリックリンクについてまとめました。.vimrcの設定などで私の場合は応用した経緯があります。暗記までする必要はありませんが、このようなコマンドがあったと頭の片隅には入れておきましょう
コメントを残す