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 / 명령어 / tree - 디렉터리 구조를 트리 형태로 출력

Linux / 명령어 / tree - 디렉터리 구조를 트리 형태로 출력

Linux tree 명령어로 디렉터리와 파일 구조를 계층적으로 확인하는 방법을 설명합니다. 설치, 깊이 제한, 숨김 파일, 제외 패턴, 크기·권한 표시와 JSON 저장 방법까지 정리합니다.

Linux 강좌 / 파일과 디렉터리 관리 - 생성·복사·이동·삭제

Linux 강좌 / 파일과 디렉터리 관리 - 생성·복사·이동·삭제

실습 폴더에서 파일과 디렉터리를 만들고 복사·이동·삭제해 봅니다. 덮어쓰기와 삭제 전에 경로와 결과를 확인하는 습관도 익힙니다.

Linux / 명령어 / shred - 파일 데이터 덮어쓰기

Linux / 명령어 / shred - 파일 데이터 덮어쓰기

Linux shred 명령어로 파일이나 장치의 데이터를 덮어쓰는 방법과 한계를 설명합니다. SSD, 저널링·복사 방식 파일 시스템, 스냅샷 환경에서 완전 삭제를 보장할 수 없는 이유도 알아봅니다.

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

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

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

웹 서버용 리눅스 추천: Ubuntu, Debian, Rocky Linux 선택 기준

웹 서버용 리눅스 추천: Ubuntu, Debian, Rocky Linux 선택 기준

웹 서버용 Linux 배포판을 지원 기간, 패키지 생태계, 보안 정책과 운영 환경 기준으로 비교합니다. Ubuntu Server, Debian, Rocky Linux·AlmaLinux와 Amazon Linux 중 상황에 맞는 선택법을 정리합니다.

Linux / 명령어 / tail - 파일의 마지막 내용과 로그 실시간 확인

Linux / 명령어 / tail - 파일의 마지막 내용과 로그 실시간 확인

Linux tail 명령어로 파일의 마지막 행과 바이트를 확인하고 새로 추가되는 로그를 추적하는 방법을 설명합니다. -n, -f, -F 차이와 로그 로테이션, 필터링 및 여러 파일 모니터링 예제를 정리합니다.

Linux / 명령어 / parted - 파티션 표와 빈 공간 확인·관리

Linux / 명령어 / parted - 파티션 표와 빈 공간 확인·관리

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

Linux / 명령어 / tmux - 터미널 세션 분리·재접속

Linux / 명령어 / tmux - 터미널 세션 분리·재접속

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

Linux 강좌 / APT와 DNF로 패키지 설치·업데이트하기

Linux 강좌 / APT와 DNF로 패키지 설치·업데이트하기

Debian·Ubuntu의 APT와 Rocky Linux의 DNF로 패키지를 검색·설치·업데이트·제거하는 방법을 비교합니다. 저장소와 의존성, 업데이트 전 확인할 항목을 다룹니다.

Linux / 명령어 / fold - 긴 행을 지정한 너비로 나누기

Linux / 명령어 / fold - 긴 행을 지정한 너비로 나누기

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