web-dev-qa-db-ja.com

シンボリックリンクRedHatLinuxを上書きできません

シンボリックリンクを作成しました:

Sudo ln -s /some/dir new_dir

ここで、新しい場所を指すようにシンボリックリンクを上書きしたいのですが、上書きされません。私が試してみました:

Sudo ln -f -s /other/dir new_dir

私はいつでもSudo rm new_dirですが、可能であればそれに応じて上書きしてもらいたいと思います。何か案は?

38
Chuck Burgess
ln -sfn /other/dir new_dir

私のために働きます。 -n宛先シンボリックリンクを逆参照しません。

61
ire_and_curses

作成してから移動できます。

Sudo ln -f -s /other/dir __new_dir
Sudo mv -Tf __new_dir new_dir

編集:-Tfがありません。ディレクトリを通常のファイルとして扱い、上書きを要求しません。

このようにして、上書きします。

9
redent84

Mikeytown2sコメントからのリンクが壊れているので、なぜ redent84s answer が優れているのかを説明します。

一方

ln -sfn newDir currentDir

straceでわかるように、アトミック操作ではありません

$ strace ln -snf newDir currentDir 2>&1 | grep link
unlink("currentDir")         = 0
symlink("newDir", "currentDir") = 0

これは、そのシンボリックリンクを指すWebサーバールートがある場合に重要です。マイクロ秒のタイムスパンであっても、シンボリックリンクが削除されて再度作成されるときにエラーが発生する可能性があります。

エラーを防ぐには、代わりに次を使用してください。

$ ln -s newDir tmpCurrentDir && mv -Tf tmpCurrentDir currentDir

これにより一時リンクが作成され、その後アトミック操作でcurrentDirを上書き

1
Mischa