はじめに
よく分からんコマンド調べてみようシリーズ。 経緯はこちら。
今回は /bin/ln
について。
/bin/ln
/bn/ln
はフォルダやファイルへのリンクを作成する。
リンクにはハードリンクとシンボリックリンクの二種類のリンクがあり、以下のリンク先で分かりやすく解説している。
こちら man ln
したときの DESCRIPTION の内容。
The ln utility creates a new directory entry (linked file) which has the same modes as the original file. It is useful for maintaining multiple copies of a file in many places at once without using up storage for the
copies''; instead, a link
points'' to the original copy. There are two types of links; hard links and symbolic links. How a link ``points'' to a file is one of the differences between a hard and symbolic link
同じ内容のファイルを大量にコピーするとストレージを無駄に食ってしまうので、そういうときはリンクして参照させるほうがよいと。 自分が ln を使うときはストレージの容量うんぬんは気にしたことがなくて、設定ファイルとか複数の場所で共有したいものをリンクさせて使っていた。
ちなみに /bin/ln
と /bin/link
は同じコマンド。
/bin/ln 実行してみる
さっきの記事とほぼ同じことを自分で手を動かしてやってみる。
まずは origin というファイルを作り、i ノード番号を確認する。
$ ls -li total 4 3149196 -rw-r--r-- 1 root root 21 Jan 15 08:36 origin
i ノード番号は 3149196 らしい。
ハードリンク作る
下記のコマンドでハードリンクを作る。
$ ln origin hard_link
ls で確認する。
$ ls -li total 8 3149196 -rw-r--r-- 2 root root 21 Jan 15 08:36 hard_link 3149196 -rw-r--r-- 2 root root 21 Jan 15 08:36 origin
おー、i ノード番号が同じになった。
シンボリックリンクを作る
$ ln -s origin sym_link
ls で確認する。
$ ls -li total 8 3149196 -rwx------ 2 root root 21 Jan 15 08:36 origin 3149197 lrwxrwxrwx 1 root root 6 Jan 15 08:54 sym_link -> origin
i ノード番号が異なり、リンク先が origin となっているリンクが作成されたのが分かる。
補足として、このとき以下のようにリンクの権限を変更しようとすると、リンク自体ではなくリンク先の権限が変更される。
$ chmod 700 sym_link $ ls -li total 8 3149196 -rwx------ 2 root root 21 Jan 15 08:36 origin 3149197 lrwxrwxrwx 1 root root 6 Jan 15 08:54 sym_link -> origin
リンクの削除について
リンクを削除するときに rm コマンドでやってしまいがち、というか rm 以外で消した記憶ない。 いちおう unlink というコマンドがあるらしいので、リンクを削除する場合は unlink コマンドを使う方がよさそう。
あと昔にリンク元がフォルダかそうでないかでリンクを削除する際にハマった記憶があるけど、何だったか忘れた。 思い出したら書く。