ln -nsf와 같은 링크를 만드는 이유는 무엇입니까?


41

이것은 무엇을 하는가?

ln -nsf

나는 ln -s하드 링크가 아니라 기호 링크를 생성한다는 것을 알고 있습니다. 즉, 링크를 삭제할 수 있으며 링크가 연결된 생각을 삭제하지 않습니다. 그러나 다른 것은 무엇을 의미합니까? (-nf)

업데이트 : 알겠습니다 ... 그래서 명령 줄 에서이 내용을 찾을 수 있다는 것을 기억했습니다. 다음은 입력을 통해 얻은 내용입니다 ln --help.

-f, --force                 remove existing destination files
-n, --no-dereference        treat destination that is a symlink to a
                            directory as if it were a normal file

그러나 이것의 의미가 무엇인지 여전히 명확하지 않습니다. 왜 이렇게 소프트 / 심볼 링크를 만들고 싶습니까?


1
사용하지 않더라도 -s원본 파일을 삭제하지 않고 링크를 삭제할 수 있습니다. 하드 링크는 파일의 링크 수를 늘리므로 링크 중 하나만 삭제할 때 파일이 삭제되지 않습니다.
Amok

그것은 하드 링크와 심볼릭 링크의 차이점이 아닙니다. 하드 링크는 디스크에서 동일한 바이트 (inode)를 가리 킵니다. 소프트 링크 는 filename 으로 다른 파일 가리 킵니다 .
Greg Hewgill

매뉴얼 페이지도 있습니다. 즉, man ln을 실행하십시오. 또는 사람 남자, 그 도움 시스템에 대해 배우십시오. 온라인으로 맨 페이지를 얻을 수 있습니다 ...
Peter Cordes

답변:


43

BSD 매뉴얼 페이지에서 :

 -f    If the target file already exists, then unlink it so that the link
           may occur.  (The -f option overrides any previous -i options.)

 -n    If the target_file or target_dir is a symbolic link, do not follow
           it.  This is most useful with the -f option, to replace a symlink
           which may point to a directory.

31

-n옵션 (함께 -f) 힘이 ln디렉토리에 대한 심볼릭 링크를 업데이트합니다. 그게 무슨 뜻이야?

2 개의 디렉토리가 있다고 가정

기존의 심볼릭 링크

  • 바즈-> 바

이제 대신 foo 를 가리 키도록 baz 를 업데이트하려고합니다 . 네가 방금하면

ln -sf foo baz

당신은 얻을 것이다

  • baz / foo-> foo
  • baz-> bar (변경되지 않음)
  • 바 / foo-> foo

추가하면 -n

ln -sfn foo baz

당신이 원하는 것을 얻습니다.

  • 바즈-> 푸

그것은 '참조 해제되지 않음'의 의미입니다. 기존 링크를 확인하지 않고 새 링크를 해당 디렉토리에 배치하는 대신 업데이트하십시오.


2
가장 유용한 답변입니다.
kobejohn

1

ln의 모든 옵션은 다음과 같습니다. 여기에 -n과 -f가 있습니다.

 -F    If the target file already exists and is a directory, then remove
       it so that the link may occur.
       The -F option should be used with either -f or -i options.  If
       none is specified, -f is implied.
       The -F option is a no-op unless -s option is specified.

 -h    If the target_file or target_dir is a symbolic link, do not
       follow it.  This is most useful with the -f option, to replace 
       a symlink which may point to a directory.

 -f    If the target file already exists, then unlink it so that the
       link may occur.  (The -f option overrides any previous -i options.)

 -i    Cause ln to write a prompt to standard error if the target file
       exists.  If the response from the standard input begins with the
       character `y' or `Y', then unlink the target file so that the link
       may occur.  Otherwise, do not attempt the link.  (The -i option
       overrides any previous -f options.)

 -n    Same as -h, for compatibility with other ln implementations.

 -s    Create a symbolic link.

 -v    Cause ln to be verbose, showing files as they are processed.

-1

"man ln"을 입력하여 다음을 찾을 수 있습니다.

   -f, --force
          remove existing destination files

   -n, --no-dereference
          treat destination that is a symlink to a directory as if it were
          a normal file

20
나는 아직도 그것이 무엇을 의미하는지 정확히 이해하지 못한다
Andrew

-1

-f, --force 기존 대상 파일 제거

-n, --no-dereference는 디렉토리에 대한 심볼릭 링크 인 대상을 마치 일반 파일 인 것처럼 처리합니다.


-5

-f 는 명령의 대상이 기존 파일 인 경우 제거하고 새 링크로 교체해야한다고 말합니다. (유닉스에 영향을받는 시스템에서 "파일"에는 디렉토리, 링크, 파이프 등이 포함될 수 있습니다.)

-n 수정 -f, 사용자가 지정하는 대상이 기존의 심볼릭 링크의 경우는해야한다고 말을 하지 제거 할 수.


3
설명 -n이 잘못되었습니다. -f그 자체로는 디렉토리에 대한 심볼릭 링크를 대체하지 않습니다. 디렉토리로 심볼릭 링크를 교체 할 때 -n기존 심볼릭 링크를 디렉토리 대신 일반 파일처럼 취급해야합니다.
Brian
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.