:pぴー.sendせんど(:pぴー, :pぴー)

mokoaki
mokoriso@gmail.com

2017/07/03

いまさらシンボリックリンクとハードリンク

シンボリックリンク

$ rm moko1.txt moko2.txt
$ echo 'aaaaa' > moko1.txt
$ ln -s moko1.txt moko2.txt
$ ls -li
16266507 -rw-r--r--  1 moko  staff  6  7  3 17:47 moko1.txt
16266508 lrwxr-xr-x  1 moko  staff  9  7  3 17:47 moko2.txt -> moko1.txt

シンボリックリンクとrm

moko1.txtは削除され、moko2.txt(シンボリックリンク)のみになる

$ rm moko1.txt

moko1.txtは残り、moko2.txt(シンボリックリンク)が削除される

$ rm moko2.txt

シンボリックリンクとrmで最後にスラッシュを付ける

エラー(Not a directory) 何も消えない

rm moko1.txt/

moko1.txtは削除され、moko2.txt(シンボリックリンク)のみになる 正直、直感的な動作ではない

$ rm moko2.txt/

moko1.txtは削除され、moko2.txt(シンボリックリンク)のみになる

unlink moko1.txt

moko1.txtは残り、moko2.txt(シンボリックリンク)が削除される

unlink moko2.txt

ハードリンク

$ rm moko1.txt moko2.txt
$ echo 'aaaaa' > moko1.txt
$ ln moko1.txt moko2.txt
$ ls -li
16266727 -rw-r--r--  2 sakamotohidetoshi  staff  6  7  3 17:53 moko1.txt
16266727 -rw-r--r--  2 sakamotohidetoshi  staff  6  7  3 17:53 moko2.txt

ハードリンクリンクとrm

moko1.txtは削除され、moko2.txtのみになる

$ rm moko1.txt

moko2.txtは削除され、moko1.txtのみになる

$ rm moko2.txt

ハードリンクリンクとrmで最後にスラッシュを付ける

エラー(Not a directory) 何も消えない

$ rm moko1.txt/

エラー(Not a directory) 何も消えない

$ rm moko2.txt/

moko1.txtは削除され、moko2.txtのみになる

$ unlink moko1.txt

moko2.txtは削除され、moko1.txtのみになる

$ unlink moko2.txt

まとめ

メモ

ファイルを消す前にシンボリックリンクが張られてないか気になる時にはこんな感じでイケるんじゃないかと思う Macだとイケそう

$ find / -type l -ls 2>/dev/null | grep moko1.txt
$ find ~ -type l -ls | grep moko1.txt
$ find . -type l -ls | grep moko1.txt

メモ2

シンボリックリンク ハードリンク
パスで参照 iノードで参照
操作ミスにてリンクだけが残ってしまう可能性 rmもunlinkも直感的な動作をするように思える
別のファイルシステムでもイケる 同一ファイルシステム内に限られる
ディレクトリでもイケる 基本ファイルのみ
元のファイルを移動したらもうダメ 元のファイルを移動してもイケる(iノードは変わらない)