Linux / 명령어 / pwd - 현재 작업 디렉터리 경로 확인

pwd는 현재 작업 디렉터리(Current Working Directory)의 경로를 출력하는 명령입니다. 터미널에서 지금 어느 디렉터리에 있는지 확인하거나, 셸 스크립트에서 상대 경로의 기준 위치를 점검할 때 사용합니다.

일반적으로 옵션 없이 실행하면 충분하지만, 심볼릭 링크가 포함된 경로에서는 논리적 경로를 보여주는 -L과 실제 파일 시스템 경로를 보여주는 -P의 차이를 알아두는 것이 중요합니다.

pwd 명령어란?

pwd는 print working directory의 약자입니다. 현재 셸이나 프로세스가 작업 기준으로 사용하는 디렉터리의 절대 경로를 출력합니다.

pwd

예를 들어 현재 위치가 사용자의 프로젝트 디렉터리라면 다음과 같이 출력될 수 있습니다.

/home/user/projects/web-app

현재 작업 디렉터리는 상대 경로를 해석하는 기준입니다. 같은 config/settings.ini라는 상대 경로도 어느 디렉터리에서 명령을 실행하느냐에 따라 다른 파일을 가리킵니다.

기본 문법과 사용법

pwd [옵션]

다른 경로를 인수로 받는 명령이 아니므로 보통 다음처럼 단독으로 실행합니다.

pwd
cd /var/log
pwd

두 번째 pwd는 이동이 성공했다면 /var/log를 출력합니다. cd가 실패하면 현재 작업 디렉터리는 바뀌지 않습니다.

-L과 -P의 차이

현재 위치까지 오는 경로에 심볼릭 링크가 포함되어 있으면 논리적 경로와 물리적 경로가 다를 수 있습니다.

옵션 동작
-L, --logical 셸이 기억하는 논리적 경로를 사용합니다. 이동할 때 사용한 심볼릭 링크 이름이 경로에 남을 수 있습니다.
-P, --physical 심볼릭 링크를 해석한 물리적 디렉터리 경로를 출력합니다.

-L로 논리적 경로 확인하기

다음처럼 /srv/current가 실제 배포 디렉터리를 가리키는 심볼릭 링크라고 가정하겠습니다.

cd /srv/current
pwd -L

셸이 논리적 위치를 정상적으로 관리한다면 다음처럼 사용자가 입력한 링크 경로가 유지될 수 있습니다.

/srv/current

-P로 실제 경로 확인하기

pwd -P

/srv/current가 /srv/releases/2026-09를 가리킨다면 물리적 경로는 다음과 같이 출력될 수 있습니다.

/srv/releases/2026-09

배포 링크가 실제로 어느 디렉터리를 가리키는지 확인하거나, 심볼릭 링크 이름에 의존하지 않는 경로가 필요할 때 -P가 유용합니다.

셸 내장 pwd와 외부 pwd

Bash를 비롯한 여러 셸은 pwd를 내장 명령으로 제공합니다. 시스템에는 GNU Coreutils의 외부 실행 파일도 함께 설치되어 있을 수 있습니다.

type -a pwd
command -V pwd

환경에 따라 다음처럼 셸 내장 명령과 외부 실행 파일이 모두 표시될 수 있습니다.

pwd is a shell builtin
pwd is /usr/bin/pwd

셸 내장 명령을 사용하는 이유

셸은 cd로 디렉터리를 이동할 때 자신의 작업 디렉터리와 논리적 경로를 직접 관리합니다. 따라서 내장 pwd는 별도의 프로세스를 시작하지 않고 그 정보를 출력할 수 있습니다.

-L과 -P는 일반적으로 내장 명령과 외부 명령 모두에서 사용할 수 있지만, 세부 옵션은 셸과 운영체제에 따라 다를 수 있습니다.

외부 명령을 명시적으로 실행하기

GNU Coreutils 실행 파일의 동작을 확인하려면 전체 경로를 지정할 수 있습니다. 실제 위치는 배포판에 따라 다를 수 있습니다.

/usr/bin/pwd
/usr/bin/pwd -P

이식성이 필요한 스크립트에서는 특정 절대 경로가 모든 시스템에 있다고 가정하지 않는 편이 좋습니다.

PWD와 OLDPWD 환경 변수

셸은 현재 위치와 이전 위치를 변수로 관리할 수 있습니다. 변수 이름은 대문자이므로 pwd 명령과 구분해야 합니다.

항목 의미
pwd 현재 작업 디렉터리를 출력하는 명령입니다.
PWD 셸이 기억하는 현재 작업 디렉터리의 논리적 경로입니다.
OLDPWD 일반적으로 바로 전에 있던 작업 디렉터리입니다. cd -에서 사용됩니다.
printf '%s\n' "$PWD"
printf '%s\n' "$OLDPWD"
pwd -L
pwd -P

PWD는 셸 변수이므로 사용자가 임의로 바꾸거나 비정상적인 상태가 되면 실제 위치와 맞지 않을 수 있습니다. 실제 파일 시스템 경로가 중요하면 pwd -P로 확인하세요.

셸 스크립트에서 활용하기

실행 위치 확인하기

스크립트가 특정 디렉터리에서 실행되는 것을 전제로 한다면 작업 전에 위치를 확인할 수 있습니다.

current_dir=$(pwd -P) || exit 1
printf '현재 작업 디렉터리: %s\n' "$current_dir"

명령 치환 결과를 사용할 때는 공백이 있는 경로가 한 단어로 유지되도록 변수를 큰따옴표로 묶습니다.

스크립트 파일 위치와 구분하기

pwd가 출력하는 것은 스크립트가 저장된 디렉터리가 아니라 스크립트를 실행한 프로세스의 현재 작업 디렉터리입니다.

cd /tmp
/opt/tools/backup.sh

이 경우 backup.sh 안에서 실행한 pwd는 일반적으로 /tmp를 출력합니다. 스크립트 자신의 위치가 필요하다면 셸 종류, 심볼릭 링크 처리와 호출 방식을 별도로 고려해야 합니다.

pwd와 관련 명령 비교

명령 용도
pwd 현재 작업 디렉터리의 경로를 출력합니다.
cd 현재 셸의 작업 디렉터리를 변경합니다.
realpath 지정한 파일명이나 경로를 정규화하여 절대 경로로 출력합니다.
dirname 경로 문자열에서 마지막 구성 요소를 제외한 부분을 출력합니다.
readlink 심볼릭 링크에 저장된 대상 문자열을 확인합니다.

자주 발생하는 문제

삭제되거나 접근할 수 없는 현재 디렉터리

현재 위치 또는 상위 디렉터리가 다른 프로세스에 의해 삭제되거나 접근 권한이 바뀌면 pwd가 경로를 결정하지 못하고 오류를 낼 수 있습니다. 접근 가능한 상위 디렉터리로 이동한 뒤 다시 확인하세요.

예상한 경로와 출력이 다름

심볼릭 링크를 통해 이동했다면 pwd -L과 pwd -P의 결과가 다를 수 있습니다. 어느 경로가 틀린 것이 아니라 논리적 이름과 물리적 위치라는 서로 다른 관점을 보여주는 것입니다.

스크립트에서 경로가 달라짐

cron, systemd, CI 작업과 컨테이너는 대화형 터미널과 다른 작업 디렉터리에서 프로그램을 시작할 수 있습니다. 상대 경로를 사용하기 전에 pwd로 실행 환경을 기록하거나, 명확한 절대 경로와 작업 디렉터리 설정을 사용하세요.

FAQ

pwd는 무엇의 약자인가요?

print working directory의 약자이며 현재 작업 디렉터리의 경로를 출력합니다.

pwd와 echo "$PWD"는 같은가요?

정상적인 셸 상태에서는 비슷한 논리적 경로가 나올 수 있지만 동일한 동작은 아닙니다. PWD는 셸 변수이고 pwd는 현재 위치를 출력하는 명령이며, pwd -P는 심볼릭 링크를 해석한 물리적 경로를 구할 수 있습니다.

pwd -L과 pwd -P 중 무엇을 사용해야 하나요?

사용자가 이동한 경로 이름을 유지하려면 -L, 심볼릭 링크를 해석한 실제 파일 시스템 경로가 필요하면 -P를 사용합니다.

pwd는 스크립트가 저장된 위치를 출력하나요?

아닙니다. 스크립트를 실행한 프로세스의 현재 작업 디렉터리를 출력합니다. 스크립트 파일의 위치와 현재 작업 디렉터리는 서로 다를 수 있습니다.

관련 글과 공식 문서

같은 카테고리의 다른 글
Linux / 명령어 / chmod - 파일·디렉터리 접근 권한 변경

Linux / 명령어 / chmod - 파일·디렉터리 접근 권한 변경

Linux chmod 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / cd - 디렉터리 이동

Linux / 명령어 / cd - 디렉터리 이동

Linux cd 명령어로 절대·상대 경로, 홈과 이전 디렉터리로 이동하는 방법을 설명합니다. 심볼릭 링크 처리, CDPATH, 스크립트와 sudo cd의 한계 및 오류 해결법도 정리합니다.

Linux / 리눅스 배포판 종류와 버전 확인하는 방법

Linux / 리눅스 배포판 종류와 버전 확인하는 방법

리눅스 배포판 종류와 버전을 /etc/os-release, hostnamectl, uname 명령으로 확인하는 방법을 설명합니다. 배포판 계열과 커널 버전의 차이, 스크립트 활용법과 컨테이너·WSL 환경의 주의점도 함께 정리합니다.

Linux / 명령어 / id - 사용자 ID와 그룹 정보 확인

Linux / 명령어 / id - 사용자 ID와 그룹 정보 확인

Linux id 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / env - 환경 변수 설정과 명령 실행

Linux / 명령어 / env - 환경 변수 설정과 명령 실행

Linux env 명령어로 환경 변수를 추가·제거하거나 깨끗한 환경에서 프로그램을 실행하는 방법을 설명합니다. env -i·-u·-C, shebang 활용과 printenv와의 차이를 다룹니다.

Linux / 명령어 / date - 현재 시각 표시와 출력 형식 지정

Linux / 명령어 / date - 현재 시각 표시와 출력 형식 지정

Linux date 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / journalctl - systemd 시스템·서비스 로그 조회

Linux / 명령어 / journalctl - systemd 시스템·서비스 로그 조회

Linux journalctl 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / nmap - 허가된 호스트의 포트와 서비스 조사

Linux / 명령어 / nmap - 허가된 호스트의 포트와 서비스 조사

Linux nmap 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux 강좌 / 파일 비교하기 - diff와 cmp의 차이와 실습

Linux 강좌 / 파일 비교하기 - diff와 cmp의 차이와 실습

diff와 cmp로 두 파일의 차이를 확인하고 unified diff를 읽는 법을 익힙니다. 내용이 다른 경우와 명령 실행 오류의 종료 상태도 구별합니다.

Linux / 명령어 / mktemp - 안전한 임시 파일과 디렉터리 생성

Linux / 명령어 / mktemp - 안전한 임시 파일과 디렉터리 생성

Linux mktemp 명령어로 예측하기 어려운 이름의 임시 파일과 디렉터리를 안전하게 만드는 방법을 설명합니다. 템플릿, TMPDIR, trap을 이용한 정리와 -u 옵션의 위험도 알아봅니다.