디렉토리가 있고 후자가 전자에 대한 심볼릭 링크라고 가정 /dir1
합니다 /dir2/linked
.
합계를 cd
실행 하면 출력이 표시됩니다 . 그렇게 하면 옷을 입을 것이다 . 이 동작은 이전에 있었던 개념과 일치합니다 . 그러나 내가 이해하는 바에 따르면 모든 디렉토리의 상위 디렉토리()는 디렉토리 inode에 저장됩니다(예: 물리적으로 디스크에 있음). 분명히 true이므로 inode의 상위 디렉토리는 다음과 같아야 합니다.linked
pwd
/dir2/linked
cd ..
/dir2
/dir2/linked
..
/dir2/linked
/dir1
/
상황을 더욱 복잡하게 만들기 위해 내부적으로 /dir2/linked
및 의 출력이 다릅니다! "물리적" 경로를 존중하면서 심볼릭 링크 경로를 존중하는 것 같습니다. 에서 언급했듯이ls ..
cd .. ; ls .
cd
ls
이 문제, cd -P
하지만 이 사용 사례가 존재합니다.
man pwd
"물리적" 및 "논리적" 작업 디렉터리가 언급되어 있지만 이 시점에서 여전히 몇 가지 질문이 있습니다.
PWD
이 동작은 에 설명된 대로 항상 환경 변수에 의해 제공됩니까man pwd
?- 기본값
cd
과ls
둘 다 쉘 명령(예: 프로그램이 아님)인 경우 왜 다르게 동작합니까? - 전형적인가요?프로그램
PWD
(쉘 명령 아님) 물리적 경로 대신 사용할 수 있습니까 ? 구현에 따라 다르다는 것을 알고 있지만 경험상 어떤 규칙이 있습니까?
답변1
bash
디렉토리에 들어가기 위해 심볼릭 링크를 사용할 때, 심볼릭 링크에 대해 "학습"하고 이 정보를 추적하십시오.
예제에서 다음을 수행하여 이를 확인할 수 있습니다.
$ cd /dir2
$ cd linked
$ pwd
/dir2/linked
$ PWD='' bash -c pwd
/dir1
빈 변수로 bash를 시작해야 합니다 PWD
. 그렇지 않으면 해당 트릭을 사용하여 "가짜" 경로를 표시합니다.
알아채다ls
예별도의 프로그램이므로 bash는 현재 디렉토리에 어떻게 도달했는지 알 수 없으므로 ls ..
그냥 표시됩니다.진짜팔로우하는 심볼릭 링크에 관계없이 상위 디렉터리입니다.
대부분의 프로그램은 환경 변수에 의존하지 않습니다 CWD
. 프로그램을 시작하는 방법은 다양하기 때문에 bash 셸을 통한 방법은 그 중 하나일 뿐이므로 CWD
올바른 값을 포함할 것으로 기대하는 것은 신뢰할 수 없습니다( CWD
실행하기 전에 잘못된 값을 설정해 보십시오 bash -c pwd
. 정신 상태를 확인하려면 그것을 참조하십시오).