Devin.KR
로그인

리눅스 pwd 명령어 사용법 - 현재 경로 확인과 pwd -P 차이

개발자 조회 1

이 명령어를 언제 쓰는가

pwd는 지금 셸이 서 있는 디렉토리의 절대 경로를 출력한다. 짧고 단순하지만 실무에서 rm이나 tar처럼 되돌릴 수 없는 명령을 치기 직전에 위치를 확인하는 용도로 쓴다. "어느 서버의 어느 디렉토리인지" 헷갈린 상태에서 친 명령이 사고로 이어지기 때문이다.

또 하나의 실전 용도는 심볼릭 링크가 걸린 배포 경로에서 실제 경로를 확인하는 것이다. /opt/app/current가 어느 릴리스를 가리키는지 pwd -P 한 번이면 끝난다.

기본 형식

pwd [-L | -P]

인자는 없다. -L(기본)은 셸이 기억하는 논리 경로를, -P는 심볼릭 링크를 모두 푼 물리 경로를 출력한다.

자주 쓰는 옵션

옵션의미예시
(없음)현재 디렉토리 절대 경로 출력pwd
-P심볼릭 링크를 풀어 실제 경로 출력pwd -P
-L논리 경로 출력(대부분 셸의 기본값)pwd -L

실전 예제

1) 위험한 명령 전 위치 확인 — 삭제·압축해제 직전에 습관으로 친다.

pwd
ls -la
rm -rf ./tmp_build

2) 배포 링크가 가리키는 실제 릴리스 확인 — 무중단 배포에서 현재 서비스 중인 버전을 찾을 때.

cd /opt/app/current
pwd      # /opt/app/current
pwd -P   # /opt/app/releases/20260825T0910

3) 스크립트에서 절대 경로 만들기 — 상대 경로로 넘어온 값을 절대 경로로 고정해 두면 이후 cd가 섞여도 안전하다.

BASE="$(cd "$(dirname "$0")" && pwd -P)"
echo "$BASE/config.yml"

4) 프롬프트가 짧게 잘려 나올 때 — 프롬프트에는 ~/app처럼 축약돼 보여도 실제 경로가 다른 경우가 있다. 헷갈리면 pwd가 정답이다.

pwd
# /home/deploy/app

함정과 주의점

셸 내장 pwd/bin/pwd는 기본 동작이 다르다. bash 내장은 논리 경로(-L)를 기본으로 하고, 외부 실행 파일 /bin/pwd는 물리 경로를 준다. 스크립트에서 결과가 달라 보이면 어느 쪽이 실행됐는지 type pwd로 확인한다.

현재 디렉토리가 삭제되면 내장 pwd는 거짓말을 한다. 다른 세션이 그 디렉토리를 지워도 셸 내장 pwd$PWD에 캐시된 옛 경로를 그대로, 종료 코드 0으로 출력한다. 반면 /bin/pwd는 실제로 getcwd()를 호출하므로 pwd: .: No such file or directory(GNU에서는 pwd: error retrieving current directory: getcwd: cannot access parent directories)로 실패한다. 즉 "지금 위치가 살아 있는지"를 확인하려면 내장이 아니라 /bin/pwdcd .를 써야 한다. 빠져나올 때는 절대 경로로 cd한다.

$PWD 변수는 셸이 관리하는 값이라 항상 논리 경로다. 링크를 풀어야 하는 비교(예: 두 경로가 같은 디렉토리인지 확인)에는 $PWD 대신 pwd -Preadlink -f를 쓴다.

함께 보면 좋은 명령어

  • cd — 위치를 옮긴다. pwd는 그 결과를 확인하는 짝이다.
  • readlink -f — 임의의 경로(현재 위치가 아니어도)에 대해 링크를 모두 푼 절대 경로를 얻는다.
  • dirname / basename — 경로 문자열에서 디렉토리와 파일명을 잘라낼 때 함께 쓴다.