
예를 들어 파일 경로 끝에 /를 남겨두면 어떤 일이 발생하는지 궁금합니다.
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
맥락이 정말 중요합니다. 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/: 해당 파일이나 디렉터리가 없습니다.
문자는 경로가 완전하지 않지만 계속됨을 의미하기 때문에 /
경로 뒤에 아무것도 넣지 않으면 존재하지 않는 파일을 참조하는 것과 같습니다.