"ls .."가 심볼릭 링크 디렉토리에있을 때 실제 상위 컨텐츠를 표시하는 이유는 무엇입니까?


2
$ cd ~
$ ln -s /real/folder symbolic_link

$ cd symbolic_link
$ cd ..
$ ls -l
symbolic_link -> /real/folder/

$ cd symbolic_link
$ ls -l ..
folder

다시 말해, 왜 cd .. ~과 다르다. ls .. 심볼릭 링크 된 디렉토리 안에있을 때?

답변:


3

쉘은 현재 작업중인 디렉토리로 연결되는 심볼릭 링크를 추적합니다. cd 내장 쉘입니다. help cd 주 (예 : bash ) :

옵션 :
-L 심볼릭 링크가 강제로 수행되도록합니다. 인스턴스를 처리 한 후 DIR의 심볼릭 링크를 해결합니다. ..
-P 심볼릭 링크를 따르지 않고 물리적 디렉토리 구조를 사용합니다. 인스턴스를 처리하기 전에 DIR의 심볼릭 링크를 해결합니다. ..
[...]
기본값은 다음과 같이 심볼릭 링크를 따르는 것입니다. -L 지정되었습니다.

당신은 시도 할 수 있습니다 cd -P .. 차이점을 확인하십시오. 또 다른 예는 pwd -Lpwd -P (동안 pwd 또한 내장 쉘입니다.)

기본 동작은 다음과 같이 변경할 수 있습니다. set -Pset +P. 만나다 help set 자세한 사항은.

반면에 ls 쉘의 추적 기능이 도움이되지 않는 별도의 실행 파일입니다. 그러나 당신은이 트릭과 심볼릭 링크를 따라갈 수 있습니다 :

(cd -L .. && ls -l)

기본적으로 우리는 cd 심볼릭 링크를 기준으로 현재 작업 디렉토리를 변경합니다 (그리고 나는 명시 적으로 디폴트를 사용했습니다 -L 옵션), 다음 호출 ls -l. 그만큼 && 오퍼레이터 수단 ls 다음 경우에만 실행됩니다. cd 성공합니다. 괄호 () 내부에있는 모든 것을 하나의 서브 쉘에서 처리하도록하십시오. 이것은 속임수입니다 : cd 명령이이 서브 쉘에만 영향을 주며 메인 쉘에는 아무 것도 변경되지 않습니다. cd 뒤로.


쉘 내장 명령과 리눅스 도구의 차이점을 이해해 주셔서 감사합니다!
daVe
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.