![심볼릭 링크를 통해 cd할 때 pwd가 실제 경로 대신 심볼릭 링크를 표시하는 이유는 무엇입니까?](https://linux55.com/image/63169/%EC%8B%AC%EB%B3%BC%EB%A6%AD%20%EB%A7%81%ED%81%AC%EB%A5%BC%20%ED%86%B5%ED%95%B4%20cd%ED%95%A0%20%EB%95%8C%20pwd%EA%B0%80%20%EC%8B%A4%EC%A0%9C%20%EA%B2%BD%EB%A1%9C%20%EB%8C%80%EC%8B%A0%20%EC%8B%AC%EB%B3%BC%EB%A6%AD%20%EB%A7%81%ED%81%AC%EB%A5%BC%20%ED%91%9C%EC%8B%9C%ED%95%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
ln -s 1 2
디렉토리 안의 디렉토리를 가리키는 소프트링크()를 생성하고 test
()를 이용하여 소프트링크를 열어 cd 2
현재 경로를 표시했습니다 pwd
. 표시된 경로는 ~/test/2
, 가 아닙니다 ~/test/1
.
단축키를 사용하면 실제 디렉토리로 이동하는 Windows와 같은 운영 체제에서는 그렇지 않습니다. 이 소프트 링크가 Linux에서 어떻게 작동하는지 약간 혼란스럽습니다. 이것은 에서와 같은 단축키가 아닌가요 Windows
? 왜 경로가 아닌가 ~/test/1
?
$ mkdir test
$ cd test
$ mkdir 1
$ ln -s 1 2
$ cd 2
$ pwd
/home/dazz/test/2
답변1
이것은 현재 위치에 어떻게 도달했는지 기억하는 쉘의 기능입니다.
이미 realpath
설치되어 있는 경우 다음을 수행할 수 있습니다.
$ realpath
/home/dazz/test/1
Python이 있는 경우 누락되었습니다.
$ python -c "import os; print(os.path.realpath('.'))"
/home/dazz/test/1
또는 readlink(coreutils에서):
$ readlink -f .
/home/dazz/test/1
또는 /bin/pwd
(쉘 내장이 아님 pwd
):
$ /bin/pwd
/home/dazz/test/1
답변2
대비 pwd
및 /bin/pwd
.
pwd
, 이는 쉘이 사용자가 어디에 있다고 생각하는지 알려주는 내장 명령입니다. 따라서 심볼릭 링크 "소프트 링크"를 실제 디렉토리로 처리합니다.
/bin/pwd
필요한 경우 파일 시스템 트리를 탐색하여 실제 위치를 알려줄 수 있는 외부 프로그램입니다 /
. 위쪽으로 이동할 때는 심볼릭 링크가 존재하지 않기 때문에 심볼릭 링크를 고려하지 않습니다...
답변3
다른 답변은 이미 /bin/pwd
shells 작업에 대해 다루었습니다 builtin pwd
.
언급한 Windows 스타일 심볼릭 링크를 따르려면 다음을 사용하십시오 cd -P
. 그에 따라 PWD 변수가 변경됩니다.
기본적으로 사용 하려면 다음 줄을 또는 -P
에 추가하면 됩니다 ..bashrc
.zshrc
set -P
다른 인클로저는 다를 수 있습니다.