Devin.KR
로그인

리눅스 cd 명령어 사용법 - 디렉토리 이동과 cd - 활용법

개발자 조회 1

이 명령어를 언제 쓰는가

cd는 셸의 현재 작업 디렉토리를 바꾼다. 로그를 보러 /var/log로 갔다가, 설정을 고치러 /etc/nginx로 갔다가, 다시 아까 자리로 돌아오는 일이 하루에도 수십 번이다. 이 왕복을 cd -pushd로 줄이는 게 실무에서의 cd다.

cd/bin에 있는 프로그램이 아니라 셸 내장 명령이다. 별도 프로세스가 현재 디렉토리를 바꿔봐야 부모 셸에는 반영되지 않기 때문에, 내장일 수밖에 없다. 이 사실을 알면 "스크립트에서 cd 했는데 왜 원래 자리인가" 같은 혼란이 사라진다.

기본 형식

cd [디렉토리]

디렉토리를 생략하면 홈 디렉토리($HOME)로 간다. 상대 경로는 현재 위치 기준, /로 시작하면 절대 경로다.

자주 쓰는 옵션

cd는 옵션보다 인자로 쓰는 특수 경로가 핵심이다.

인자의미예시
(생략)홈 디렉토리로 이동cd
-바로 직전 디렉토리로 이동(토글)cd -
..상위 디렉토리cd ../..
~내 홈. ~user는 해당 계정의 홈cd ~deploy
-P심볼릭 링크를 실제 경로로 풀어서 이동cd -P /var/log
$OLDPWD직전 디렉토리 경로가 담긴 변수ls $OLDPWD

실전 예제

1) 설정을 고치고 로그를 보고 다시 돌아온다 — 두 자리를 왕복할 때는 경로를 다시 칠 필요가 없다.

cd /etc/nginx
cd /var/log/nginx
cd -          # 다시 /etc/nginx
cd -          # 다시 /var/log/nginx

2) 세 곳 이상을 오갈 때는 디렉토리 스택을 쓴다cd -는 두 곳 토글만 되기 때문에 배포 작업처럼 여러 경로를 도는 상황에는 부족하다.

pushd /etc/nginx
pushd /var/www/html
dirs -v        # 스택 확인
popd           # 직전 자리로 복귀

3) 스크립트에서는 이동 실패를 반드시 잡는다 — 디렉토리가 없는데도 그대로 진행하면 엉뚱한 위치에서 다음 명령이 돈다.

cd /opt/app/releases || exit 1
tar xzf release.tar.gz

4) 스크립트 자기 위치 기준으로 이동한다 — cron에서 실행되면 현재 디렉토리가 홈이나 /라서 상대 경로가 깨진다.

cd "$(dirname "$0")" || exit 1
./deploy.sh

5) 심볼릭 링크로 배포된 디렉토리에서 실제 경로 확인 — 무중단 배포에서 current가 링크인 경우가 흔하다.

cd /opt/app/current
pwd        # /opt/app/current  (논리 경로)
pwd -P     # /opt/app/releases/20260825T0910  (실제 경로)

함정과 주의점

스크립트 안의 cd는 스크립트 프로세스에만 적용된다. ./go.sh 안에서 cd /opt를 해도 스크립트가 끝나면 원래 셸은 제자리다. 호출한 셸의 위치까지 바꾸려면 source go.sh 또는 . go.sh로 실행해야 한다.

공백이 들어간 경로는 반드시 따옴표로 감싼다. cd /opt/my app은 인자가 두 개로 쪼개져 실패한다. cd "/opt/my app" 또는 cd /opt/my\ app로 쓴다. 변수도 마찬가지로 cd "$DIR"처럼 항상 큰따옴표를 씌운다.

심볼릭 링크 위에서의 cd ..는 직관과 다를 수 있다. 기본 동작(논리 모드)에서는 링크를 따라온 경로 기준으로 한 단계 올라가고, cd -P로 들어갔다면 실제 파일시스템 기준으로 올라간다. 배포 스크립트에서 상대 경로로 올라가야 한다면 링크를 풀어놓고(cd -P) 작업하는 편이 안전하다.

현재 있는 디렉토리가 삭제되면 셸이 유령 상태가 된다. 다른 세션이 그 디렉토리를 지워도 내장 pwd는 캐시된 옛 경로를 태연히 출력하지만, ls는 빈 결과를 주고 새 파일은 만들 수 없으며 /bin/pwd는 에러를 낸다. cd .cd "$PWD"는 이미 없는 경로를 다시 찾아가는 것이라 둘 다 실패한다. 살아 있는 절대 경로로 다시 들어가야 한다.

함께 보면 좋은 명령어

  • pwd — 지금 어디인지 확인한다. 특히 pwd -P로 링크가 풀린 실제 경로를 본다.
  • pushd / popd — 세 곳 이상을 오갈 때 디렉토리 스택으로 관리한다.
  • dirname — 스크립트 경로에서 디렉토리만 잘라내 cd의 인자로 넘길 때 쓴다.