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

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

예를 들어 파일 경로 끝에 /를 남겨두면 어떤 일이 발생하는지 궁금합니다.

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

맥락이 정말 중요합니다. For 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

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

    CD 경로/somedir/

다음과 같이 인쇄됩니다.

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

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

관련 정보