Linuxで "ln -sf"を使用するのはなぜですか?

Linuxで "ln -sf"を使用するのはなぜですか?

質問が2つあります。 1つ目は-sfオプション用で、2つ目は-fオプションをより具体的に使用するためのものです。

ln-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 commandman 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

関連情報