Linuxでの「ln -sf」の意味は何ですか?


21

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削除されます。

なぜこうなった?


3
-f--force)を表します。削除用ではありません!
パンディア

3
terdonの答えに理由を追加するには...使用法の1つは、手動でライブラリを更新するときです。2つのステップで行う場合-最初にrmで古いリンクを削除し、次にln -sで新しいリンクを作成します-ライブラリは操作間で機能しません... lnコマンドでライブラリが必要な場合、これは大きな問題になります働く。したがって、ln -sfを使用すると、リンクが切断されることなく、古いリンクが新しいリンクに置き換えられます。
バードコッペルード

回答:


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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.