![디렉토리 경로 끝에 /를 포함하는 것과 생략하는 것의 차이점](https://linux55.com/image/35985/%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%20%EA%B2%BD%EB%A1%9C%20%EB%81%9D%EC%97%90%20%2F%EB%A5%BC%20%ED%8F%AC%ED%95%A8%ED%95%98%EB%8A%94%20%EA%B2%83%EA%B3%BC%20%EC%83%9D%EB%9E%B5%ED%95%98%EB%8A%94%20%EA%B2%83%EC%9D%98%20%EC%B0%A8%EC%9D%B4%EC%A0%90.png)
다음과 같이 파일 경로 끝에 /를 두면 어떻게 되는지 궁금합니다.
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
됩니다 .target
target/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/: 해당 파일이나 디렉터리가 없습니다.
아마도 해당 /
문자는 경로가 불완전하지만 여전히 계속됨을 의미하기 때문에 그 뒤에 아무것도 넣지 않으면 존재하지 않는 파일을 참조하는 것과 같습니다.