在Linux中'ln -sf'是什么意思?


21

我有两个问题。第一个是为了-sf选项,第二个是选项的更具体用法-f

通过谷歌搜索,我找出了command ln,option 的描述-s-f

(从http://linux.about.com/od/commands/l/blcmdl1_ln.htm复制)

-s, --symbolic : make symbolic links instead of hard links
-f, --force : remove existing destination files

我个人理解这些选项。但是,如何同时使用此选项-s-f选项?-s用于创建链接文件,-f并用于删除链接文件。我不了解这种情况,以及为什么使用此合并选项。

为了进一步了解ln命令,我举了一些例子。

$ touch foo     # create sample file
$ ln -s foo bar # make link to file
$ vim bar       # check how link file works: foo file opened
$ ln -f bar     # remove link file 

下一条命令之前一切正常

$ ln -s foo foobar
$ ln -f foo     # remove original file

通过-f选项的描述,该最后一条命令不起作用,但可以起作用!foo已移除。

为什么会这样呢?


3
-f代表--force); 不删除!
潘迪2015年

3
为terdon的答案添加一个理由...一种用法是在手动更新库时。如果分两个步骤进行操作-首先rm删除旧链接,然后ln -s创建一个新链接-在两次操作之间该库将无法工作...如果ln命令需要该库,这将成为一个大问题去工作。因此,使用ln -sf,旧链接将替换为新链接,而不会断开链接。
Baard Kopperud 2015年

Answers:


42

首先,要查找命令的选项,可以使用man command。因此,如果运行man ln,您将看到:

   -f, --force
          remove existing destination files

   -s, --symbolic
          make symbolic links instead of hard links

现在,-s如你所说,是为了使链接象征性的,而不是硬。的-f,但是,是不是要删除链接。如果存在目标文件,它将覆盖目标文件。为了显示:

 $ ls -l
total 0
-rw-r--r-- 1 terdon terdon 0 Mar 26 13:18 bar
-rw-r--r-- 1 terdon terdon 0 Mar 26 13:18 foo

$ ln -s foo bar  ## fails because the target exists
ln: failed to create symbolic link bar’: File exists

$ ln -sf foo bar   ## Works because bar is removed and replaced with the link
$ ls -l
total 0
lrwxrwxrwx 1 terdon terdon 3 Mar 26 13:19 bar -> foo
-rw-r--r-- 1 terdon terdon 0 Mar 26 13:18 foo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.