題 為什麼要創建這樣的鏈接:ln -nsf?


這是做什麼的?

ln -nsf

我知道 ln -s 創建一個符號鏈接,而不是一個硬鏈接,這意味著你可以刪除它,它不會刪除它所鏈接的想法。但其他事情意味著什麼呢? (-nf)

更新: 好吧...所以我記得你可以從命令行找到這些東西。這是我從打字中發現的 ln --help

-f, --force                 remove existing destination files
-n, --no-dereference        treat destination that is a symlink to a
                            directory as if it were a normal file

但這對我來說仍然不是很清楚這是什麼意思。為什麼我要創建這樣的soft / sym鏈接?


32
2017-12-10 02:04


起源


即使你不使用 -s 您可以刪除鏈接而不刪除原始文件。硬鏈接會增加文件的鏈接數,因此當您只刪除其中一個鏈接時,它不會被刪除。 - Amok
這不是硬鏈接和符號鏈接之間的區別。硬鏈接指向磁盤上的相同字節(inode)。軟鏈接指向另一個文件 按文件名。 - Greg Hewgill
還有手冊頁。即跑男人。或者是男人,要了解那個幫助系統。您也可以在線獲取手冊頁... - Peter Cordes


答案:


從BSD手冊頁:

 -f    If the target file already exists, then unlink it so that the link
           may occur.  (The -f option overrides any previous -i options.)

 -n    If the target_file or target_dir is a symbolic link, do not follow
           it.  This is most useful with the -f option, to replace a symlink
           which may point to a directory.

39
2017-12-10 02:06





-n 選項(連同 -f) 軍隊 ln 更新指向目錄的符號鏈接。那是什麼意思?

假設你有2個目錄

  • FOO
  • 酒吧

和現有的符號鏈接

  • 巴茲 - >吧

現在你想要更新 巴茲 指向 FOO 代替。如果你這樣做

ln -sf foo baz

你會得到的

  • baz / foo - > foo
  • baz - > bar(不變),因此
  • bar / foo - > foo

如果你添加 -n

ln -sfn foo baz

你得到你想要的。

  • 巴茲 - > foo

這就是“無解除引用”的含義:不解析現有鏈接並將新鏈接放在該目錄中,而只是更新它。


18
2018-04-04 07:33



迄今為止最有幫助的答案。 - kobejohn


以下是ln的所有選項。你會在這裡找到-n和-f。

 -F    If the target file already exists and is a directory, then remove
       it so that the link may occur.
       The -F option should be used with either -f or -i options.  If
       none is specified, -f is implied.
       The -F option is a no-op unless -s option is specified.

 -h    If the target_file or target_dir is a symbolic link, do not
       follow it.  This is most useful with the -f option, to replace 
       a symlink which may point to a directory.

 -f    If the target file already exists, then unlink it so that the
       link may occur.  (The -f option overrides any previous -i options.)

 -i    Cause ln to write a prompt to standard error if the target file
       exists.  If the response from the standard input begins with the
       character `y' or `Y', then unlink the target file so that the link
       may occur.  Otherwise, do not attempt the link.  (The -i option
       overrides any previous -f options.)

 -n    Same as -h, for compatibility with other ln implementations.

 -s    Create a symbolic link.

 -v    Cause ln to be verbose, showing files as they are processed.

2
2017-12-10 02:06





你可以輸入“man ln”來找到這樣的東西:

   -f, --force
          remove existing destination files

   -n, --no-dereference
          treat destination that is a symlink to a directory as if it were
          a normal file

0
2017-12-10 02:06



我仍然不明白這意味著什麼 - Andrew


-f, - force               刪除現有目標文件

-n, - no-dereference               將目標作為目錄的符號鏈接處理,就好像它是普通文件一樣


0
2017-12-10 02:06





-F 如果您的命令的目標是現有文件,則應將其刪除並替換為新鏈接。 (請注意,在受Unix影響的系統中,“file”可以包含目錄,鏈接,管道等)

-n 修改-f,說如果你指定的目標是現有的符號鏈接,它應該  被刪除。


-5
2017-12-10 03:02



你的描述 -n 是錯的。 -f 本身不會將符號鏈接替換為目錄。將符號鏈接替換為目錄時, -n 需要將現有的符號鏈接視為普通文件而不是目錄。 - Brian