シンボリックリンクを使用しようとしています。私はいくつか読んで、次のコマンドを見つけました:
Creation -> ln -s {/path/to/file-name} {link-name}
Update -> ln -sfn {/path/to/file-name} {link-name}
Deletion -> rm {link-name}
作成と削除は正常に機能します。しかし、更新は機能しません。このコマンドを実行すると、シンボリックリンクは無効になります。
シンボリックリンクを更新/上書きすることは不可能であることをあちこちで読んだことがあります。だからネットには相反する情報があります。誰が正しいのですか?シンボリックリンクを更新/上書きできる場合、どうすればこれを達成できますか?
更新
これが私のディレクトリ構造です:
~/scripts/test/
~/scripts/test/remote_loc/
~/scripts/test/remote_loc/site1/
~/scripts/test/remote_loc/site1/stuff1.txt
~/scripts/test/remote_loc/site2/
~/scripts/test/remote_loc/site2/stuff2.txt
~/scripts/test/remote_loc/site2/
~/scripts/test/remote_loc/site3/stuff3.txt
~/scripts/test/
、私が実行するとき:
ln -s /remote_loc/site1 test_link
test_link
が作成され、私はls -l
それでも、壊れているようです(上記の質問で私が言ったこととは対照的です)。
複数のディレクトリレベルのリンクを実行するにはどうすればよいですか?
わかりました、私のエラーの場所を見つけました:最初の/
パス内。
つまり、私の質問のコマンドは次のようになります。
Creation -> ln -s {path/to/file-name} {link-name}
Update -> ln -sfn {path/to/file-name} {link-name}
の代わりに
Creation -> ln -s {/path/to/file-name} {link-name}
Update -> ln -sfn {/path/to/file-name} {link-name}
私のケースを考慮して。
-f
をln
と一緒に使用すると、すでに存在するリンクが上書きされるため、適切な権限がある限り、リンクは機能します...常に機能します。どのオペレーティングシステムを使用していますか?
あなたを引用:
作成と削除は正常に機能します。しかし、更新は機能しません。このコマンドを実行すると、シンボリックリンクは無効になります。
指定されたディレクトリ構造の問題:
〜/ scripts/test /〜/ scripts/test/remote_loc /〜/ scripts/test/remote_loc/site1 /〜/ scripts/test/remote_loc/site1/stuff1.txt〜/ scripts/test/remote_loc/site2 /〜/ scripts /test/remote_loc/site2/stuff2.txt〜/ scripts/test/remote_loc/site2 /〜/ scripts/test/remote_loc/site3/stuff3.txt
次のコマンドを使用します:
ln -s /remote_loc/site1 test_link
$ PWDまたは現在の作業ディレクトリに、/ remote_loc/site1の/またはルートの存在しないファイルを指すシンボリックリンクを作成することですか。
PWDが〜/ scripts /にある場合、これを使用する必要がありました。
ln -s remote_loc/site1 test_link
それ以外の場合は、次のような完全な絶対パスを使用できます。
ln -s /home/yourusername/remote_loc/site1 test_link
あなたを引用:
シンボリックリンクを更新/上書きすることはできないことを、あちこちで読みました。だからネットには相反する情報があります。誰が正しいのですか?シンボリックリンクを更新/上書きできる場合、どうすればこれを達成できますか?
「だれが正しいのか」という質問に答えるために、あなたが正確に何を読んだか、それがどのように理解されたかはわかりません。ただし、次の方法で解決する必要があります。
ディレクトリではないターゲットを持つシンボリックリンクを更新しています。
ln -sf:
-fまたは--force既存の宛先ファイルを削除します。これは、リンクのターゲットまたは宛先を更新するために使用されます。
例:
ln -sf /tmp/test /tmp/test.link; ls -go /tmp |grep test
-rw-r--r-- 1 0 Jun 8 17:19 test
lrwxrwxrwx 1 9 Jun 8 17:27 test.link -> /tmp/test
しかし、ご覧のとおり、ln
の引数に絶対パスが含まれている場合は、絶対パスが表示されます。現在の作業ディレクトリがリンクの親ディレクトリと異なる場合は、フルパスを指定する必要があります。
相対パス:
ln -sfr:
-rまたは--relativeは、リンクの場所を基準にしてシンボリックリンクを作成します。
例:
ln -sfr /tmp/test /tmp/test.link ; ls -go /tmp| grep test
-rw-r--r-- 1 0 Jun 8 17:19 test
lrwxrwxrwx 1 4 Jun 8 17:27 test.link -> test
ただし、ターゲットがディレクトリの場合、ディレクトリへのリンクの更新は機能しません。
例:
ln -sf /tmp/testdir /tmp/testdir.link ; ls -go /tmp |grep testdir
drwxr-xr-x 2 4096 Jun 8 17:48 testdir
lrwxrwxrwx 1 7 Jun 8 17:47 testdir.link -> testdir
ご覧のとおり、上記のln
の引数で指定された絶対パス名を-rオプションなしで使用しているにもかかわらず、シンボリックリンクはリンクに対して相対的です。
ディレクトリへのリンクを更新:
ln -sfrn:
-nまたは--no-dereferenceは、ディレクトリへのシンボリックリンクである場合、LINK_NAMEを通常のファイルとして扱います。
例:
ln -sfn /tmp/testdir /tmp/testdir.link; ls -go /tmp| grep testdir
drwxr-xr-x 2 4096 Jun 8 17:48 testdir
lrwxrwxrwx 1 12 Jun 8 17:48 testdir.link -> /tmp/testdir
対照的に:
ln -sfnr /tmp/testdir /tmp/testdir.link; ls -go /tmp| grep testdir
drwxr-xr-x 2 4096 Jun 8 17:48 testdir
lrwxrwxrwx 1 7 Jun 8 17:48 testdir.link -> testdir
$ touch test1 test2
$ ln -sf test2 test1
$ ls -l test[12]
lrwxrwxrwx 1 user01 user01 5 2012-05-17 14:41 test1 -> test2
-rw-r--r-- 1 user01 user01 0 2012-05-17 14:41 test2