Linux에서 "ln -sf"를 사용하는 이유는 무엇입니까?

Linux에서 "ln -sf"를 사용하는 이유는 무엇입니까?

질문이 2개 있습니다. 첫 번째는 -sf옵션을 위한 것이고 두 번째는 -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 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

관련 정보