디렉토리 경로 끝에 /를 포함하는 것과 생략하는 것의 차이점

디렉토리 경로 끝에 /를 포함하는 것과 생략하는 것의 차이점

다음과 같이 파일 경로 끝에 /를 두면 어떻게 되는지 궁금합니다.

root /var/www/website.com/

다음과 같이 생략합니다.

root /var/www/website.com

이 문제는 어떻게 처리되거나 차이점이 무엇입니까?

답변1

디렉토리 이름 뒤의 슬래시는 일부 프로그램에서는 중요하지만 다른 프로그램에서는 중요하지 않습니다. 예를 들어:

  • git에서 /파일 이름 뒤에 오는 것은 단일 파일(의)이 아닌 디렉터리만 의미합니다 man 5 gitignore.

    패턴이 슬래시로 끝나는 경우 아래 설명된 목적을 위해 제거되지만 디렉터리와 일치하는 항목만 찾습니다. 즉, foo/는 foo 디렉토리 및 그 아래 경로와 일치하지만 일반 파일이나 기호 링크 foo와는 일치하지 않습니다(이는 git의 pathspec이 일반적으로 작동하는 방식과 일치합니다).

  • ls에 ( 에서위키피디아):

    디렉토리를 가리키는 심볼릭 링크에 대한 디렉토리 목록을 요청하면
    링크 자체만 표시됩니다.
    연결된 디렉터리 목록을 가져오려면 경로에 뒤에
    오는 디렉터리 구분 기호("/", 슬래시)가 포함되어야 합니다.

  • 그러나 지금은 기억나지 않는 일부 다른 프로그램(주로 내가 본 Emacs 매크로)은 일반 파일 대신 디렉토리만 필요하며 두 가지를 모두 허용하고 dir필요한 경우 참조를 dir/추가합니다 ./dir

nginx가 어떻게 작동하는지 모르겠지만 한번 살펴보세요무루의 대답.

답변2

일반적으로 뒤에 슬래시가 없는 경로는 모호합니다. 이는 파일일 수도 있고 디렉터리일 수도 있습니다. 슬래시가 있는 경로는 디렉터리만 될 수 있습니다. 대부분의 쉘은 탭 완성을 사용할 때 자동으로 후행 슬래시를 제공합니다.

이는 항상 후행 슬래시를 사용해야 한다는 의미는 아니며 실제로 일부 프로그램에서는 이를 허용하지 않습니다. 다른 사람들이 말했듯이 상황에 따라 다릅니다. 각 프로그램마다 이에 대한 해석이 다릅니다.

후행 슬래시가 큰 차이를 만드는 예는 입니다 rsync.

디렉토리 source및 가 주어지면 target이 명령은 rsync -a source target모든 내용을 에 복사합니다 target/source. 하지만 뒤에 슬래시가 있으면 하위 디렉터리를 만들지 않고 rsync -a source/ target콘텐츠가 직접 복사 source됩니다 .targettarget/source

나는 종종 이 동작으로 인해 혼란스러워하기 때문에 암시적인 하위 디렉터리 생성에 의존하기보다는 직접 작성하는 것을 선호합니다. 때로는 하위 디렉터리가 이미 존재하기 /.때문에 원치 않는 하위 디렉터리가 생성되지 않도록 하기 위해 후행을 사용하기도 합니다..

답변3

맥락이 중요합니다. 의 경우 위치를 nginx지정할 때 디렉터리라는 것을 알면 root아무런 차이가 없습니다 . nginx그러나 다른 곳에도 영향을 미칠 수 있으므로이중 슬래시는 URL에 문제를 일으킬 수 있습니다.(즉, blah/$request_uri재정의 또는 프록시 시 유사한 작업을 수행하는 경우)

일반적으로 *nix 플랫폼의 경우 이는 아무런 차이가 없습니다. 몇 가지 예외가 있습니다:

  • rsync동작은 소스 디렉터리 경로에 슬래시가 있는지 여부에 따라 다릅니다.rsync가 후행 슬래시를 처리하는 방법에 대한 좋은 예.
  • 뒤에 슬래시를 추가하면 응용 프로그램이 실수로 파일을 생성하는 대신 디렉터리를 찾고 있음을 알 수 있습니다.

    cp blah non-existent-directory
    cp blah non-existent-directory2/
    
  • 위와 유사하게 globbing에서는 디렉토리로만 강제 확장하는 데 사용할 수 있습니다.

    $ printf "%s\n" * | wc -l
    26
    $ printf "%s\n" */ | wc -l
    20
    

    이 예를 양해해 주시기 바랍니다. 이는 상당히 표준적인 Ubuntu 설치의 루트에서 수행되므로 이 예에서는 이상한 이름이 손상되지 않습니다.

답변4

쉘에 입력하는 경우:

    CD 경로/somedir

현재 디렉토리를 다음으로 이동합니다.경로/디렉토리.
하지만 다음을 입력하면:

    CD 경로/somedir/

다음과 같이 인쇄됩니다.

    bash: cd: path/somedir/: 해당 파일이나 디렉터리가 없습니다.

아마도 해당 /문자는 경로가 불완전하지만 여전히 계속됨을 의미하기 때문에 그 뒤에 아무것도 넣지 않으면 존재하지 않는 파일을 참조하는 것과 같습니다.

관련 정보