既存のシンボリックリンクディレクトリへのシンボリックリンクを作成するときにln -sが失敗するように指示しないのはなぜですか?

既存のシンボリックリンクディレクトリへのシンボリックリンクを作成するときにln -sが失敗するように指示しないのはなぜですか?

ランタイム(他のLinux Ubuntuバージョン):

>ln -s dir_1 symlink_dir
>ln -s dir_2 symlink_dir

失敗したと言わずに失敗します。ただし、ファイルに対して同じ操作を実行するか、オプションにvを追加すると、失敗したというメッセージが表示されます。

>ln -s file_1 symlinkg_file
>ln -s file_2 symlinkg_file

または

>ln -sv dir_1 symlink_dir
>ln -sv dir_2 symlink_dir

エラーメッセージで失敗します。

ln: failed to create symbolic link

これは私にとって非常に奇妙な行動のように見えますか?理由がありますか?

答え1

2回目のプロセスではln失敗しないので

symlink_dir/dir_2 -> dir_2

シンボリックリンク

何かを作る:

ls -l symlink_dir/dir_2

そこに(おそらく壊れた)シンボリックリンクが表示されます。

lnこれは、ターゲットがディレクトリ(またはディレクトリへのシンボリックリンク)の場合に機能する方法です。

3番目のジョブはすでに内部ジョブ(別名)を持っているlnため失敗する可能性があります。dir_2symlink_dirdir_2

答え2

必要に応じて2番目のコマンドが失敗する-nことを指定します。ln

$ ln -ns realdir symdir
$ ln -ns realdir symdir
ln: creating symbolic link `symdir' to `realdir': File exists

もちろん、これは-v結果とは何の関係もありません。

答え3

オプションを使用すると、何が起こっているのかを確認し、ln必要な動作を実装できます。次のエイリアスを使用してくださいln

alias ln='\ln -vsn'

lnオプション:

   -v, --verbose
          print name of each linked file
   -s, --symbolic
          make symbolic links instead of hard links
   -n, --no-dereference
          treat destination that is a symlink to a directory as if it were a normal file

関連情報