여기서 모순은 다음과 같습니다.심볼릭 링크프로세스 ../
디렉토리2방법:
- 현재 경로를 다음과 같이 처리합니다.결과 프린터
pwd
- 현재 경로를 다음과 같이 처리합니다.절대 경로
예를 들어 설명하겠습니다(매우 이해하기 쉽습니다).
다음 디렉터리 계층 구조를 고려하세요.
/tmp/
|__a/
| |__b/
|
|__sb=./a/b/ -> /tmp/a/b/ # the name `sb' means symbol b;
# `sb' is generated by:
# [/tmp/]$ ln -s ./a/b/ sb
_
[/tmp/]$ cd sb # `pwd' says we are now in /tmp/ # let's change to /tmp/a/b/ [/tmp/sb/]$ cd ../ # Now we are in /tmp/a/b/ # But what is /tmp/a/b/'s parent dir? [/tmp/]$ # See? We didn't come back to /tmp/a/ BUT /tmp/
이는 현재상위 디렉토리오른쪽에서 두번째에요인쇄기
pwd
.추가하자심볼릭 링크디렉토리를 입력하십시오
/tmp/a/b/
:/tmp/ |__a/ | |__b/ | |__sa=../ -> /tmp/a/ # [/tmp/a/b/]$ ln -s ../ sa | |__sb=./a/b/ -> /tmp/a/b/
이번엔 현실로 돌아오겠습니다상위 디렉토리의
/tmp/a/b/
:[/tmp/]$ cd sb # change to /tmp/a/b/ [/tmp/sb/]$ cd sa # sa=../ # /tmp/sb/=/tmp/a/b/ # ^ or ^ [/tmp/sb/sa/]$ ls --classify b/ # ??? # We are now in /tmp/a/ because there is a b/ here!
그렇다면 왜 이번에는 참조를 선택했습니까?절대 경로결정상위 디렉토리?
그것이 포함되면 모순이 발생 ../
하지만 상대 경로가 포함되면 같은 일이 일어날 것이라고 생각합니다.
위의 모든 작업은 CentOS 7.9에서 테스트되었습니다.
답변1
[/tmp/sb/]$ cd ../ # Now we are in /tmp/a/b/ # But what is /tmp/a/b/'s parent dir? [/tmp/]$ # See? We didn't come back to /tmp/a/ BUT /tmp/ ```
이는 편의를 위해 쉘이 해당 위치에 도달하는 데 사용한 경로를 기억하기 때문입니다.
긴 경로를 홈 디렉토리의 짧은 심볼릭 링크에 연결하고 긴 경로에 대해 다시 생각할 필요 cd thelink
없이 바로 이동할 수 있기 때문에 도움이 됩니다. cd ..
또는 다중 사용자 시스템에서는 시스템 관리자가 대신 이를 수행할 수 있으며 사용자는 필요하지도 않습니다.알다올바른 길.
pwd -P
그러나 or 를 사용하면 cd -P
쉘은 이를 무시합니다.
[/tmp]$ mkdir -p a/b; ln -s ./a/b sb
/tmp$ cd sb
[/tmp/sb]$ pwd -P
/tmp/a/b
[/tmp/sb]$ cd -P ..
/tmp/a$
[/tmp/sb/]$ cd sa # sa=../ # /tmp/sb/=/tmp/a/b/ # ^ or ^ [/tmp/sb/sa/]$ ls --classify b/ # ??? # We are now in /tmp/a/ because there is a b/ here!
여기서 ...
심볼릭 링크는 쉘이 무엇을 생각하는지 전혀 모르는 커널에 의해 해결됩니다. 쉘은 여전히 사용자가 선택한 경로를 표시하고( sb
다음 sa
) cd ..
돌아올 수 있도록 합니다 /tmp/sb
. .-P
마찬가지로 외부 유틸리티를 실행하면 pwd
선택한 경로를 모르기 때문에 "물리적" 경로가 표시됩니다.
[/tmp/sb/sa]$ pwd
/tmp/sb/sa
[/tmp/sb/sa]$ pwd -P
/tmp/a
[/tmp/sb/sa]$ /bin/pwd
/tmp/a
그런데, 디렉토리 변경을 사용하면 프롬프트에 표시된 경로에 대한 심볼릭 링크가 cd -P
확인됩니다 .pwd
[/tmp]$ cd -P sb/sa
[/tmp/a]$