web-dev-qa-db-ja.com

間違った場所を指すシンボリックリンクを修正するにはどうすればよいですか?

ここのハード/ソフトリンクと少し混乱しています。私はOSXを使用しており、フォルダ「4」とそれを指す2つのリンクがあります。

drwxr-xr-x  4 imm  staff  136 14 Jun 21:24 4
lrwxr-xr-x  1 imm  staff    1 14 Jun 16:56 4.0 -> 4
lrwxr-xr-x  1 507  wheel    1 14 Jun 16:56 Current -> 4

フォルダ内の「現在」をたどると、完全に異なる場所(すべてのものをコピーしたパス)に移動します。 「Current」が新しい場所のフォルダ「4」を指すようにしたいのですが。

どうすればこれを達成できますか?

5
Hedge

リンクを削除して再作成する必要があります。あなたはこれを行うことができます

rm Current

そしてそれを再作成します:

ln -s /path/to/the/new/location Current

絶対パスを使用できます(簡単にするため)。

リンクを移動するときにパスを移動する場合は、相対パスを使用できます。相対パスが保存され、アクセスしようとしたときにのみリンクの現在の場所から解決されることに注意してください。

編集:あなたはハードリンクについて言及しているので、ここでそれらを紹介します。

ハードリンクは、ファイルを指すという点でシンボリックリンクに似ていますが、現在のファイルシステムに制限されていますが、より高速です。ハードリンクは、ファイルシステム内の別の場所ではなく、ディスク上の特定のiノードを指します。相対的なハードリンクを持つことはできません。

基本的なファイルシステムは、ファイルごとに1つずつ、ディスク上の場所へのハードリンクのコレクションと見なすことができます。追加のハードリンクを作成すると、同じファイルへの追加のポインターが作成されるだけです。システムは必要なファイルがディスク上のどこにあるかを正確に認識しているため(シンボリックリンクを解決してから、新しいファイルを検索して解決する必要がある)、かなり高速ですが、このため、iノードのみに制限されています。現在のファイルシステム。

ファイルシステムは、特定のiノードを指すハードリンクの数を自動的に追跡し、その数が0に達するとiノードを削除するだけです。

12
Darth Android

あなたはこれを行うことができます:

ln -nfs /path/to/the/new/location Current

ここで、「Current」は現在のシンボリックリンクです。 -nおよび-fオプションは、元の「現在」のリンクを解除して削除し、新しいものを作成できるようにします(ソフトリンクの場合は-s)。

質問は回答され、元の問題はかなり前に解決されたと思いますが、別の削除手順を実行せずにシンボリックリンクを再ポイントするプロセスは再び私を悩ませ、解決策をGoogleで検索するとこのQ&Aが投げ出されました。それが答えを探している他の誰かに役立つことを願っています!

7
Kevin Teljeur