실제로 심볼릭 링크 위치에 있는지 명령줄에서 어떻게 알 수 있나요?

실제로 심볼릭 링크 위치에 있는지 명령줄에서 어떻게 알 수 있나요?

폴더가 있다고 가정해 보겠습니다.

cd /home/cpm135/public_html

그리고 심볼릭 링크를 생성합니다

ln -s /var/lib/class .

나중에 나는 해당 디렉토리에 있습니다.

cd /home/cpm135/public_html/class

그것은 pwd나에게 말해줄 것이다/home/cpm135/public_html/class

내가 거기 "정말로" 있다는 것을 알 수 있는 방법이 있나요 /var/lib/class? 감사해요

답변1

pwd명령 구성 방법 에 따라 기본적으로 표시될 수 있습니다.논리pwd -L심볼릭 링크 위치를 표시하는 작업 디렉터리( 의 출력 ), 또는물리적작업 디렉토리(output 기준 pwd -P)는 기호 링크를 무시하고 "실제" 디렉토리를 표시합니다.

완전한 정보를 얻으려면 다음을 수행하십시오.

file "$(pwd -L)"

심볼릭 링크 내에서 이것은 반환됩니다

/path/of/symlink: symbolic link to /path/of/real/directory

답변2

이는 pwd실제로 내장된 쉘입니다. 셸과 해당 구성에 따라 결과가 다를 수 있습니다. 보다 이식성이 뛰어난 솔루션을 위해서는 /bin/pwd.man 페이지 스니펫을 사용해야 합니다.

NAME
       pwd - print name of current/working directory

SYNOPSIS
       pwd [OPTION]...

DESCRIPTION
       Print the full filename of the current working directory.

       -L, --logical
              use PWD from environment, even if it contains symlinks

       -P, --physical
              avoid all symlinks

       --help display this help and exit

       --version
              output version information and exit

       If no option is specified, -P is assumed.

       NOTE:  your  shell  may  have  its  own  version of pwd, which usually supersedes the version described here.  Please refer to your shell's documentation for
       details about the options it supports.

일반적으로 전체 표준 경로를 사용하여 파일/디렉토리를 확인할 수 있습니다 readlink -f. readlink -f .작동 원리는 와 유사합니다 pwd -P.

답변3

당신은 정말로 그렇습니다 /home/cpm135/public_html/class. 이것은 "내 현재 작업 디렉토리는 무엇입니까?"라는 질문에 대한 유일한 정답입니다.

당신이 언급할 때 당신이 어디에 있는지가 중요한 것이 아닙니다 /var/lib/class.거기까지 가기 위해 어떤 길을 택했나요?.

을 실행하면 /bin/pwd. 및 .. 디렉토리(상단에 나열된 디렉토리 ls -la)를 보고 ..의 어느 디렉토리가 ..와 동일한지 알아낸 다음 .. 및 . 예배 규칙서. 이 모든 작업을 완료하면 현재 작업 디렉터리가 무엇인지 알 수 있습니다.

pwd내장 셸을 실행하면 이 프로세스를 따르지 않습니다(필요한 경우 일부 작업을 수행할 수도 있음). 대신 여기까지 오기 위해 선택한 경로를 기억합니다. 따라서 명령을 실행할 때 cd마다 쉘은 해당 명령을 현재 위치에 대한 경로의 일부로 기억하고 지금까지 실행한 모든 명령을 기반으로 계산된 내용을 pwd인쇄합니다 cd. 이는 실제 명령이 아닐 수도 있습니다. 작업 디렉토리.

ln -s . fooa를 실행하고 foo와 함께 있으면 cd상황이 정말 이상해집니다 /bin/pwd. 이는 여전히 같은 디렉토리에 있다고 말하지만 쉘 내장은 그러한 디렉토리가 전혀 존재하지 않더라도 pwd그렇다고 말할 것입니다 . /foo/foo/foo/foo/foo/foo(즉, 당신은 아마도할 수 있는 cd들어가세요. )

혼란의 또 다른 원인은 디렉토리 이름이 변경된 경우입니다. /bin/pwd그러면 변경 사항이 즉시 적용되지만 내장된 기능은 pwd이전 디렉터리 이름이 중요하지 않다는 것을 알려주기 전까지는 적용되지 않습니다.

답변4

기본적으로 현재 작업 디렉터리의 실제 경로를 표시할 수 있는지 묻는 것입니다. 글쎄, 파이썬과 os.getcwd()함수를 사용하여

아래에 보이는 것은 내 홈 디렉터리의 "VirtualBox VMs" 디렉터리에 대한 간단한 테스트입니다. 실제로는 다른 하드 드라이브에 있는 다른 디렉터리에 대한 심볼릭 링크입니다 /mnt/HDD.

bash-4.3$ file "$(pwd)"
/home/xieerqi/VirtualBox VMs: symbolic link to /mnt/HDD/VirtualBox VMs/
bash-4.3$ python -c 'import os; print os.getcwd()'
/mnt/HDD/VirtualBox VMs

보시다시피 Python은 os.getcwd()심볼릭 링크 경로가 아닌 디렉터리의 실제 경로를 확인합니다.

관련 정보