首要问题:
报价给您:
创建和删除工作正常。但是更新不起作用。执行此命令后,符号链接将无效。
给定目录结构的问题:
〜/ 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上的/或root以外的不存在文件。
如果您的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
unlink
代替rm
。这样一来,unlink
您就不会冒险因意外使用错误的开关而丢失源目录中的任何文件。