我在用着
ln -f -s / var / www / html / releases / build1390 app-current
用新的目的地更新符号链接“app-current”。 但是,这不起作用,链接“应用程序当前”保持原来的目的地,但是,我没有得到任何错误…
我宁愿不删除链接并重新创build它,只需更新现有链接的目标。 那可能吗?
这对我strace ln -f -s /var/www/html/releases/build1390 app-current
, strace ln -f -s /var/www/html/releases/build1390 app-current
什么?
哦,因为它是一个目录,你需要添加-n
没有取消引用,这应该解决这个问题。 -f
实际上更加方便,因为添加-f只是导致它无法链接。 虽然我想在正常加载的系统上可能会发生几百毫秒的速度。
例如,如果arf已经指向/ home:
strace With -n
:
strace ln -n -f -s / arf ... symlink("/", "arf") = -1 EEXIST (File exists) unlink("arf") = 0 symlink("/", "arf") = 0
strace没有-n
:
strace ln -f -s / arf ... write(2, "ln: "..., 4ln: ) = 4 write(2, "`arf/': cannot overwrite director"..., 34`arf/': cannot overwrite directory) = 34 write(2, "\n"..., 1) = 1
因此,如果没有-n
arf被取消引用,那么就把它看作是arf,就好像它实际上是/
。 在你的特定例子中,如果没有错误,我认为你可能已经在/var/www/html/releases/build1390 app-current
创build了一个新的符号链接,并且希望清除它。
如果是符号链接,可以使用-n
或--no-dereference
来防止目标被解引用。 您还可以使用-T
或--no-target-directory
来确保目标文件将始终被视为常规文件。
这些产生稍微不同的行为,如以下示例所示。 假设src
是一个文件, dirlink
是一个目录的符号链接,而dir
是一个实际的目录。
使用-n
:
ln -sfn src dirlink
覆盖dirlink
并将其链接到src
ln -sfn src dir
创build链接dir/src -> src
使用-T
:
ln -sfT src dirlink
覆盖dirlink
并将其链接到src
ln -sfT src dir
产生一个错误信息: ln: 'dir': cannot overwrite directory