为什么在 Linux 中使用“ln -sf”?

为什么在 Linux 中使用“ln -sf”?

我有 2 个问题。第一个用于-sf选项,第二个用于-f选项的更具体用法。

ln通过谷歌搜索,我找到了 command 、 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已移除。

为什么会发生这种情况?

答案1

首先,要查找命令选项的作用,您可以使用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

答案2

By default, each destination (name of new link) should not already exist.
  [...]   

--backup[=CONTROL]
              make a backup of each existing destination file
  [...]

 -f, --force
              remove existing destination files

您必须仔细阅读才能理解其中的含义man ln。如果没有上下文,“删除”有点误导。

带着-i你的疑问:

ln: replace 'q2'? y

删除、覆盖、替换...


POSIX ( man 1p ln) 有:

-f
    Force existing destination pathnames to be removed to allow the link.

这是一个非常好的补充“...允许链接”。


info ln有:

通常“ln”不会替换现有文件。使用“--force”(“-f”)选项代替无条件地替换它们,“--interactive”(“-i”)选项有条件地替换它们,“--backup”(“-b”)选项改名他们。

“--backup”示例:使用现有的qli -> qqq

ln -sb ttt qli

09:10 qli -> ttt
08:47 qli~ -> qqq

相关内容