디렉토리 구조와 경로
Windows에서 파일을 찾을 때 C:\Users\홍길동\Documents처럼 드라이브 문자부터 시작했다면, 리눅스는 조금 다릅니다. 리눅스에는 드라이브 문자가 없습니다. 모든 것이 /(루트)라는 단 하나의 시작점에서 뻗어나가는 나무 구조로 이루어져 있습니다.
리눅스 디렉토리 트리
터미널에서 tree / 명령을 실행하면 거대한 디렉토리 트리가 펼쳐집니다. 처음 보면 복잡하게 느껴지지만, 핵심 디렉토리 몇 개만 알아두면 충분합니다.
/
├── bin → 기본 실행 파일 (ls, cp, mv 등)
├── boot → 부트로더와 커널
├── dev → 장치 파일 (하드디스크, USB 등)
├── etc → 시스템 전체 설정 파일
├── home → 사용자 홈 디렉토리
│ └── ubuntu/
├── lib → 공유 라이브러리
├── proc → 실행 중인 프로세스 정보 (가상 파일시스템)
├── root → root 사용자의 홈 디렉토리
├── tmp → 임시 파일 (재부팅하면 삭제)
├── usr → 사용자 프로그램과 데이터
│ ├── bin/ → 추가 실행 파일
│ └── lib/ → 추가 라이브러리
└── var → 자주 변하는 데이터 (로그, 캐시)
└── log/ → 시스템 로그
각 디렉토리의 역할을 정리하면 다음과 같습니다.
| 디렉토리 | 역할 | 예시 |
|---|---|---|
/etc |
설정 파일 모음 | /etc/hosts, /etc/passwd |
/home |
사용자 개인 공간 | /home/ubuntu |
/var/log |
로그 파일 저장 | /var/log/syslog |
/usr/bin |
설치된 프로그램 | /usr/bin/python3 |
/tmp |
임시 작업 공간 | 스크립트 임시 파일 저장 |
Bash 스크립트를 작성할 때 가장 자주 접하는 곳은 /etc(설정 읽기), /var/log(로그 분석), /tmp(임시 파일)입니다. 이 세 곳만 기억해도 실전에서 크게 도움이 됩니다.
절대 경로 vs 상대 경로
경로를 표현하는 방법은 두 가지입니다. 어디서 출발하느냐의 차이입니다.
절대 경로는 루트(/)에서 시작합니다. 현재 위치가 어디든 항상 같은 파일을 가리킵니다.
/home/ubuntu/scripts/backup.sh/etc/nginx/nginx.conf/var/log/syslog
상대 경로는 현재 위치를 기준으로 합니다. pwd 명령으로 현재 위치를 확인할 수 있습니다.
# 현재 위치: /home/ubuntuscripts/backup.sh # /home/ubuntu/scripts/backup.sh와 동일../guest/memo.txt # /home/guest/memo.txt와 동일
Bash 스크립트에서는 절대 경로를 쓰는 것이 안전합니다. 스크립트가 어디서 실행되든 의도한 파일을 정확히 가리킬 수 있기 때문입니다.
특수 경로 기호
리눅스에는 자주 사용하는 위치를 간단하게 표현하는 특수 기호들이 있습니다.
| 기호 | 의미 | 예시 |
|---|---|---|
. |
현재 디렉토리 | ./script.sh (현재 디렉토리의 script.sh 실행) |
.. |
부모 디렉토리 | cd .. (한 단계 위로 이동) |
~ |
현재 사용자의 홈 디렉토리 | cd ~ (홈으로 이동) |
- |
바로 이전 디렉토리 | cd - (직전 위치로 복귀) |
-는 특히 편리합니다. 두 디렉토리 사이를 왔다 갔다 할 때 아주 유용합니다.
cd /etc/nginx # /etc/nginx로 이동cd /var/log # /var/log로 이동cd - # 다시 /etc/nginx로 복귀
# 출력 결과
/etc/nginx
실제로 확인해봅시다.
# 현재 위치 확인pwd
/home/ubuntu
# 홈 디렉토리로 이동한 뒤 절대 경로와 상대 경로 비교cd /home/ubuntuls ./ # 현재 디렉토리 내용ls ../ # 부모 디렉토리(/home) 내용ls ~/scripts # 홈 디렉토리의 scripts 폴더
경로 개념은 단순해 보여도 Bash 스크립트 작성의 기초입니다. 다음 절에서는 이 경로를 활용해 파일을 탐색하는 명령어들을 살펴봅니다.