본문으로 바로가기
TaeyoungKim.dev

리눅스 절대경로·상대경로: cd가 다른 폴더로 가는 이유와 pwd 확인법

리눅스작성 약 5분 읽기TaeyoungKim
LinkedInX

터미널에서 cd logs를 쳤는데 폴더가 없다고 한다. 분명 어제는 됐는데, 오늘은 왜 안 될까? 이런 순간에는 cd를 더 빠르게 다시 입력하기보다 먼저 pwd를 한 번 치는 편이 낫다. 폴더가 갑자기 사라진 게 아니라 내가 다른 자리에서 찾고 있었을 가능성이 크기 때문이다.

경로는 이름뿐 아니라 '어디에서 출발해 찾는가'도 중요하다. pwd와 cd로 그 차이를 따라가 보자. 길 찾기의 첫 단계는 뛰는 게 아니라 지도를 펴는 일이다.

pwd는 무엇을 보여 주고, 상대경로는 어디서 시작할까?

현재 작업 디렉터리는 명령을 해석하는 출발점이다

셸은 작업 중인 디렉터리를 하나 기억한다. pwd는 그 위치를 출력한다. 아래처럼 나온다면 지금 서 있는 곳은 /home/user/project다. 여기서 user는 예시 계정 이름이므로 자신의 환경에서는 실제 사용자명으로 바꿔 읽으면 된다.

bash
$ pwd
/home/user/project

Linux의 경로는 /를 맨 위로 하는 트리에서 읽는다. 맨 앞의 /는 단순한 장식이 아니라 루트에서 출발하라는 표시다. 반대로 logs처럼 /로 시작하지 않는 경로는 현재 작업 디렉터리에서 출발한다.

도식의 두 화살표는 같은 이름의 경로라도 출발점에 따라 다른 위치를 가리킬 수 있음을 보여 준다. 작은 디렉터리 트리에서 현재 위치와 두 경로를 함께 읽어 보자.

text
/
└── home
    └── user
        └── project       ← 현재 위치: /home/user/project
            └── logs

따라서 지금 logs는 /home/user/project/logs다. 현재 위치가 /home/user로 바뀌면 같은 logs도 /home/user/logs를 가리킨다.

cd logs와 cd /logs는 출발점부터 다르다

cd logs는 지금 위치 아래의 logs로 이동한다. cd /logs는 현재 위치를 무시하고 루트 / 바로 아래의 logs를 찾는다.

현재 위치입력해석되는 대상
/home/user/projectcd logs/home/user/project/logs
/home/user/projectcd ./logs/home/user/project/logs
/home/user/projectcd /logs/logs

앞에 붙은 ./는 “현재 디렉터리에서”라는 뜻이다. 이 예제에서는 cd logs와 cd ./logs가 같다. 반면 cd /logs는 전혀 다른 폴더를 가리킨다. /logs가 없다면 No such file or directory 오류가 난다. 절대경로는 무조건 성공하는 경로가 아니라, 출발점이 고정된 경로다.

cd가 실패했을 때 현재 위치는 어떻게 될까?

한 폴더를 끝까지 따라가 본다

앞에서 본 project/logs를 그대로 따라가 보자. project에서 cd logs를 실행하면 그 아래 logs로 이동한다. cd -는 직전 위치인 project로 돌아오며, 돌아간 경로도 출력한다.

bash
pwd
cd logs
pwd
cd -
pwd

실행 결과의 경로 끝부분은 다음과 같았다. 임시 폴더의 앞부분은 실행할 때마다 달라 생략했다.

text
.../project
.../project/logs
.../project
.../project

이어서 cd /logs가 실패한 뒤 pwd를 확인하니 여전히 .../project였다. 실패한 이동을 성공한 줄 알고 다음 명령을 실행하는 것이 더 위험하다.

실제 배포 스크립트라면 다음처럼 이동 성공 여부를 확인한다.

bash
cd "$target_dir" || exit 1

target_dir은 앞에서 정해 둔 경로라는 전제다. 이동이 실패하면 스크립트를 멈춘다. 대화형 터미널에 그대로 붙여 넣으면 exit가 터미널 세션을 끝낼 수 있으니, 직접 탐색할 때는 cd 다음에 pwd를 확인하자.

.., ~, -는 서로 다른 주소다

세 표기를 모두 “이전으로”라고 뭉뚱그리면 금방 길을 잃는다.

입력의미/home/user/project/logs에서의 예
cd ..현재 경로의 부모로 이동/home/user/project
cd ~ 또는 인수 없는 cd현재 사용자의 홈으로 이동홈이 /home/user라면 그곳
cd -직전 작업 디렉터리로 이동바로 앞 이동 이력에 따라 달라짐

..는 파일시스템 위치 관계이고, -는 셸이 기억하는 직전 작업 위치다. ~는 셸이 홈 디렉터리 경로로 펼치는 표기다. 세 가지가 우연히 같은 결과를 낼 수도 있지만 같은 명령은 아니다. 특히 cd -를 연달아 두 번 실행하면 두 위치를 오갈 수 있다.

경로 오류를 만났을 때 무엇부터 확인할까?

No such file or directory를 만나면 권한을 올리기 전에 다음 순서로 좁혀 보자.

  1. pwd로 현재 작업 디렉터리를 확인한다.
  2. 입력한 경로가 /로 시작하는지 확인한다. 시작하면 루트부터, 아니면 현재 위치부터 해석된다.
  3. ls 또는 ls -ld로 이동하려는 대상 디렉터리가 실제로 있는지 확인한다.
  4. 공백이 들어간 이름은 cd "project files"처럼 한 인수로 묶는다.
  5. 스크립트에서는 cd의 실패를 확인한 뒤에만 후속 작업을 실행한다.

sudo를 먼저 붙이는 것은 보통 잘못된 출발점이다. 경로가 존재하지 않는 오류는 관리자 권한으로 해결되지 않는다. 반대로 경로는 있는데 Permission denied가 나온다면 그때는 현재 사용자와 디렉터리 탐색 권한을 확인해야 한다. 오류 메시지가 다르면 질문도 달라져야 한다.

핵심 요약

pwd는 지금 서 있는 곳을 알려 준다. cd logs는 그곳에서, cd /logs는 루트에서 출발한다. cd가 실패했다면 위치가 바뀌었다고 가정하지 말고 다시 pwd를 확인한다. 스크립트라면 이동 실패 시 중단해 다음 명령이 잘못된 폴더에서 실행되지 않게 한다. 경로를 읽는 습관이 잡히면 다음에 권한 오류를 만나도 “어디서부터 확인할까?”가 먼저 보인다.

작성자

TaeyoungKim

기초 개념을 구현과 검증, 실제 운영 판단까지 연결해 기록합니다.

#Linux#리눅스 절대경로#리눅스 상대경로#cd 명령어#pwd 명령어

함께 읽으면 좋은 글