루트 폴더의 cd ..


44

cd ..루트 폴더에 입력 한 오류가 발생하거나 경고하지 않는 이유는 무엇 입니까?

나는 기대할 것이다 :

/$ cd ..
-bash: cd: ..: No such file or directory

대신에 나는 떠났다 /. 물론, 이것은 이후 인 ..존재를 수행 /하고, 단순히 /처럼 .. 왜 그런지 궁금합니다.


6
아니 대답하지만, 여기가 dotfile (들)의 기원을 논의 좋은 관련된 읽기, G +에서 롭 파이크 없습니다.
bsd

답변:


53

Open Group에 따르면 (POSIX 표준에 해당) :

각 디렉토리에는 정확히 하나의 상위 디렉토리가 있으며 첫 번째 디렉토리에서 이름으로 점으로 표시됩니다 . [...] 파일 이름의 dot-dot 가 루트 디렉토리를 기준으로하는 것은 구현 정의입니다. 버전 7에서는 루트 디렉토리 자체를 나타냅니다. 이것은 POSIX.1-2008에 언급 된 동작입니다. 일부 네트워크 시스템에서 /../hostname/ 구성 은 다른 호스트의 루트 디렉토리를 참조하는 데 사용되며 POSIX.1은이 동작을 허용합니다.

(출처)


29

/디렉토리 에도 실제로 유효한 디렉토리 항목 있기 때문에 오류가 발생하지 않지만 ..다른 디렉토리와 달리 디렉토리 자체를 가리 키므로 다음과 동일하게 작동합니다 ..

$ ls -lid / /. /..
128 drwxr-xr-x 22 root root 4096 Apr 15 11:26 /
128 drwxr-xr-x 22 root root 4096 Apr 15 11:26 /.
128 drwxr-xr-x 22 root root 4096 Apr 15 11:26 /..
$

첫 번째 열은 알려줍니다으로 ., ..그리고 /모두 같은 아이 노드 번호를 가지고 있고, 따라서 같은 파일 시스템 항목입니다.

그래서 심지어 당신을 경우 cd ..내부의 /당신이 그냥있어 /.


13
문제는 요청 이유.. 디렉토리 항목이 있습니다.
Nick Matteo

3
내 마음에 오는 유일한 이유는에 /대한 유효한 항목을 포함하여 다른 폴더와 동일 하게 취급하려는 것 입니다 ... 그렇지 않으면 /시스템의 다른 모든 폴더와 비교하여 다르게 취급 해야합니다.
Dohn Joe

15

제거하면 커널과 C 라이브러리에서 특수한 처리 코드를 작성해야하기 때문에 존재합니다. 지금은 항상 '.'이 있다고 가정 할 수 있습니다. 그리고 당신이가는 디렉토리에 '..'.

현재 필요한 유일한 특수 코드는 파일 시스템 마운트 코드에 있으며, 여기서 루트 디렉토리는 항상 루트 디렉토리가 아니기 때문에 코드가 마운트 포인트를 포함하는 디렉토리를 가리 키기 위해 '..'의 inode 값을 재정의합니다.


결국, 트리 구조의 '부모 추천'은 특별한 경우를 처리 할 수 ​​없습니다. 그렇지 않습니까? 근본은 정의에 따라 특별해야하며, 다른 경우에 특별한 경우 나 혼란을 야기 할 수있는 모든 마스크 시도입니다.
musiphil

@musiphil 유닉스에서 특별한 경우는 mount명령과 관련 특수 파일에 섞여 있습니다 /etc/fstab.
luser droog

1

무엇 을 실제로 확인하는 또 다른 방법 은 다음 .과 같습니다.../

$ readlink -f ..
/home

$ readlink -f /.
/

$ readlink -f /..
/

당신이 볼 수 있듯이, ...지적한다 /.


1

'..'이 /에있는 또 다른 이유는 존재하지 않는 경우 또 다른 특별한 경우를 생성하기 때문입니다. 루트 디렉토리는 다른 모든 디렉토리보다 하나의 하드 링크가 적습니다 (모든 디렉토리 노드에는 n + 2 링크가 있으며 여기서 n은 내부의 직접 서브 디렉토리 수). 이로 인해 디렉토리 스캔 최적화에 의존하는 다양한 프로그램이 중단됩니다.


0

그렇지 않으면 ../../../../폴더에서 루트로 이동하기 위해 스팸 을 보낼 수 없기 때문에 거기에있는 것이 좋습니다 . 그것이 ..루트에 허용하지 않으면 작업 디렉토리 아래의 폴더 수를 세고 붙어 있습니다.


10
무슨 일이야 cd /?
Bach

@Bach 때로는 키보드 매싱이 더 재미 있습니다. 게다가, 많은 경우에 당신이 경우에 사용이되는 루트로 이동하려고하지 않는 ../것이 좋습니다. 또한 /몇 가지 이유로 할 수없는 PHP에서 많은 파일 작업을 수행 합니다.
Skylar Ittner

2
단점은 실수로 너무 많은 숫자를 입력하고 실수 ../없이 의도하지 않은 파일을 조작 (또는 제거)한다는 것입니다.
jamesdlin

4
../파일 시스템이 허용하는 경우에도 필요 이상으로 반복 하고 의도 한대로 작동하기를 원하는 것은 (휴면) 논리 오류처럼 보입니다.
musiphil

명령 사이에 @musiphil 타이핑 공백-논리 오류입니다 ( tail -f | grep 사이의 모든 공백 이 필수라고 가정). 대부분의 유닉스 사람들은 고통을 겪습니다. '../ ..'를 입력하면 Windows 민속 문제처럼 보입니다 (기본적으로 cmd는 X : \ Windows에서 시작하고 처음부터 ..를 스팸으로 보내야 함). 더 큰 문제가있을 때 작은 문제를 해결하는 이유는 무엇입니까? (spaces)
kagali-san
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.