ln -s の引数の順番を逆にして、壊れたリンクや意図しない場所へのリンクを作ってしまった
症状(よく出るエラー)
ln -s mylink /opt/app/real のつもりの逆順で実行すると、存在しない名前を指すリンクが黙って作られ、開こうとした時に No such file or directory。逆に既存名を潰そうとして ln: failed to create symbolic link: File exists が出ることもある。
原因
ln -s の正しい順番は「ln -s 実体 リンク名」で、cp や mv と同じ「元→先」の流れになっている。しかしシンボリックリンクは指す先が実在しなくても作れてしまうため、順番を逆にしてもその場ではエラーにならず、後でアクセスした時に初めて壊れていると分かる。この「作成時に検証されない」性質が、間違いの発覚を遅らせる。
直し方
「ln -s 本物 あだ名」(実体が先、リンク名が後)と覚え、作成直後に ls -l リンク名 で矢印の先が正しいか確認する習慣にする。間違えて作ったリンクは rm リンク名 で消してから ln -s /opt/app/real mylink と正しい順で作り直す。既存リンクの張り替えは ln -sfn 新実体 リンク名 で上書きできる。