けけずんセルフハッキング

エンジニアっぽい雰囲気を醸しだしているかのようなブログです!

/bin/ln でリンクを作る

はじめに

よく分からんコマンド調べてみようシリーズ。 経緯はこちら。

kkznch.hatenablog.com

今回は /bin/ln について。

/bin/ln

/bn/ln はフォルダやファイルへのリンクを作成する。 リンクにはハードリンクとシンボリックリンクの二種類のリンクがあり、以下のリンク先で分かりやすく解説している。

qiita.com

こちら 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 linkpoints'' 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 コマンドを使う方がよさそう。

あと昔にリンク元がフォルダかそうでないかでリンクを削除する際にハマった記憶があるけど、何だったか忘れた。 思い出したら書く。