[1과목 3장 02절] FHS 디렉터리 계층 구조와 절대·상대 경로, ls·cd·cp·mv·rm·mkdir 등 파일 조작 명령어를 다룹니다.
🎯 이 강의 학습 목표
이 강은 1과목 3장 02절 디렉터리 및 파일 조작입니다. 이 강을 마치면 리눅스의 디렉터리가 왜 이렇게 생겼는지 설명하고 각 디렉터리의 용도를 짝지을 수 있으며, 절대 경로와 상대 경로를 구분하고, ls·cd·cp·mv·rm·mkdir의 주요 옵션을 정확히 쓸 수 있게 됩니다.
출제 형태는 "다음 중 리눅스 명령어와 가장 관계가 깊은 디렉터리는?"처럼 디렉터리와 용도를 매칭하는 문제, 그리고 옵션을 붙인 명령의 결과를 묻는 문제입니다. 디렉터리는 개수가 많지만 이름의 어원을 알면 훨씬 쉽게 정리됩니다.
💡 FHS — 리눅스 디렉터리 계층 표준
윈도우는 C:·D:처럼 드라이브 문자로 저장장치를 구분합니다. 리눅스는 다릅니다. 최상위 루트 / 하나에서 시작하는 단일 트리에 모든 것을 붙입니다. 디스크를 추가해도 새 문자가 생기는 것이 아니라 /data 같은 디렉터리에 마운트됩니다.
어느 디렉터리에 무엇을 두는지는 FHS(Filesystem Hierarchy Standard, 파일 시스템 계층 표준)로 정해져 있습니다. 배포판이 달라도 구조가 비슷한 이유가 이 표준 때문입니다.
| 디렉터리 | 어원 | 용도 |
|---|---|---|
/ | root | 최상위. 모든 경로의 출발점 |
/bin | binary | 모든 사용자가 쓰는 기본 명령어(ls·cp·cat) |
/sbin | system bin | 관리자용 명령어(fdisk·ifconfig·shutdown) |
/etc | et cetera | 시스템 설정 파일(passwd·fstab·hosts) |
/home | — | 일반 사용자의 홈 디렉터리 |
/root | — | root 계정의 홈 디렉터리(/와 혼동 주의) |
/var | variable | 계속 변하는 데이터 — 로그·메일·스풀·DB |
/usr | Unix System Resources | 사용자용 프로그램·라이브러리·문서. "user"가 아님 |
/lib | library | 공유 라이브러리와 커널 모듈(/lib/modules) |
/dev | device | 장치 파일(sda·tty·null) |
/proc | process | 커널·프로세스 정보. 메모리에만 존재 |
/sys | system | 장치·드라이버 정보 |
/tmp | tmp | 임시 파일. 누구나 쓰기 가능(스티키 비트) |
/boot | — | 커널 이미지와 부트로더 설정 |
/opt | optional | 부가 응용 프로그램(제3자 소프트웨어) |
/mnt / /media | mount / media | 임시 마운트 / 이동식 저장장치 자동 마운트 |
/srv | service | 서비스가 제공하는 데이터 |
헷갈리기 쉬운 쌍을 정리합니다. /bin과 /sbin은 누가 쓰는가로 갈립니다. /sbin은 관리자용이라 일반 사용자의 PATH에 없는 경우가 많고, 11강에서 su -를 써야 하는 이유가 여기 있었습니다. /root와 /는 이름만 비슷할 뿐 완전히 다릅니다. /usr는 "user"가 아니라 Unix System Resources의 약자로, 시스템 전체가 공유하는 프로그램이 들어갑니다.
최근 배포판에서는 /bin·/sbin·/lib이 /usr 아래로 통합되고 원래 자리는 심볼릭 링크만 남는 경우가 많습니다. 잠시 뒤 실습에서 직접 확인합니다.
💡 절대 경로와 상대 경로
파일 위치를 지정하는 방법은 두 가지입니다. 절대 경로는 /에서 시작해 전체 경로를 적습니다(/home/chung/work/a.txt). 어디서 실행하든 같은 곳을 가리킵니다. 상대 경로는 현재 디렉터리를 기준으로 적습니다(work/a.txt). 짧지만 위치에 따라 결과가 달라집니다.
| 기호 | 의미 |
|---|---|
. | 현재 디렉터리 |
.. | 상위(부모) 디렉터리 |
~ | 현재 사용자의 홈 디렉터리 (~lms는 lms의 홈) |
- | cd -에서 직전에 있던 디렉터리 |
/ | 맨 앞에 오면 루트, 중간이면 구분자 |
cd ..는 상위 디렉터리로 이동, cd ~ 또는 인자 없는 cd는 홈으로 이동, cd -는 직전 위치로 되돌아가기입니다. 현재 위치는 pwd(print working directory)로 확인합니다.
💡 ls — 출력의 모든 것을 읽는다
ls는 가장 많이 쓰는 명령이자 옵션 문제가 가장 자주 나오는 명령입니다.
| 옵션 | 의미 |
|---|---|
-l | 긴 형식(long) — 권한·링크 수·소유자·그룹·크기·시각 |
-a | 숨김 파일 포함(.으로 시작하는 파일). -A는 .·.. 제외 |
-i | inode 번호 표시 |
-R | 하위 디렉터리까지 재귀적으로 |
-h | 크기를 사람이 읽기 좋게(K·M·G). -l과 함께 써야 효과 |
-t / -S | 시간순 / 크기순 정렬 |
-r | 정렬 역순 |
-d | 디렉터리 자체의 정보(내용이 아니라) |
-F | 유형 기호 표시(/ 디렉터리, * 실행, @ 링크) |
가장 흔히 쓰는 조합이 ls -al(숨김 포함 상세)과 ls -lh(읽기 좋은 크기)입니다. 리눅스에서 이름이 .으로 시작하면 숨김 파일이며, .bashrc·.profile처럼 설정 파일이 대부분 여기 해당합니다. 윈도우처럼 별도의 숨김 속성이 있는 것이 아니라 이름 규칙이라는 점이 다릅니다.
💡 파일·디렉터리 조작 명령
| 명령 | 역할 | 핵심 옵션 |
|---|---|---|
pwd | 현재 디렉터리 출력 | — |
cd | 디렉터리 이동 | cd .. cd ~ cd - |
mkdir | 디렉터리 생성 | -p 중간 경로까지 한 번에, -m 권한 지정 |
rmdir | 디렉터리 삭제 | 빈 디렉터리만 삭제 가능 |
cp | 복사 | -r 디렉터리, -i 덮어쓰기 확인, -p 속성 보존, -a 보관용(=-dR --preserve=all) |
mv | 이동 + 이름 변경 | -i 확인, -f 강제 |
rm | 삭제 | -r 디렉터리, -f 강제, -i 확인 |
touch | 빈 파일 생성 / 시각 갱신 | -t 시각 지정 |
file | 파일 종류 판별 | — |
ln | 링크 생성 | -s 심볼릭 링크(17강에서 상세히) |
몇 가지를 더 설명합니다. mkdir -p는 a/b/c처럼 중간 디렉터리가 없어도 한 번에 만들어 줍니다. -p 없이 실행하면 "그런 파일이나 디렉터리가 없습니다" 오류가 납니다. rmdir은 빈 디렉터리만 지우므로, 내용이 있으면 rm -r을 써야 합니다.
mv는 이동과 이름 변경을 겸합니다. 리눅스에는 rename이 기본 명령으로 따로 있지 않고, 같은 디렉터리 안에서 mv old new를 하면 그것이 이름 변경입니다.
rm -rf는 가장 위험한 명령입니다. 확인도 묻지 않고 재귀적으로 지우며 휴지통이 없습니다. 특히 경로 앞에 실수로 /를 붙이거나 와일드카드를 잘못 쓰면 되돌릴 수 없습니다. 실행 전에 같은 대상으로 ls를 먼저 실행해 목록을 눈으로 확인하는 습관이 안전합니다.
cp의 -p는 소유자·권한·시각을 보존합니다. 백업할 때 -p 없이 복사하면 시각과 권한이 복사 시점 기준으로 바뀌어 버립니다.
💻 실습으로 확인하기
아래는 모두 실제 실행 결과입니다.
$ ls -l / | head -12
drwxr-xr-x 3 root root 4096 Dec 18 2025 Docker
lrwxrwxrwx 1 root root 7 Apr 22 2024 bin -> usr/bin
drwxr-xr-x 2 root root 4096 Apr 22 2024 boot
drwxr-xr-x 15 root root 3860 Sep 11 12:27 dev
drwxr-xr-x 90 root root 4096 Sep 12 19:47 etc
drwxr-xr-x 5 root root 4096 Sep 11 23:01 home
lrwxrwxrwx 1 root root 7 Apr 22 2024 lib -> usr/lib
drwx------ 2 root root 16384 Dec 18 2025 lost+found
dr-xr-xr-x 357 root root 0 Sep 11 12:27 proc
drwx------ 5 root root 4096 Dec 18 2025 root
lrwxrwxrwx 1 root root 8 Apr 22 2024 sbin -> usr/sbin
앞에서 표로 외운 디렉터리들이 실제로 보입니다. 세 가지를 짚겠습니다.
첫째, bin·lib·sbin의 첫 글자가 l입니다. 이것은 심볼릭 링크를 뜻하며 -> 뒤에 실제 대상이 표시됩니다. /bin이 usr/bin을 가리키고 있는데, 앞에서 말한 /usr 통합이 이 시스템에 적용되어 있음을 보여 줍니다. 둘째, /proc의 크기가 0입니다. 8강에서 배운 대로 디스크에 실체가 없는 가상 파일 시스템이기 때문입니다. 셋째, /root의 권한이 drwx------로 root만 접근 가능합니다. 반면 /home은 drwxr-xr-x로 열려 있습니다. 관리자 홈을 보호하는 설계가 권한에 드러납니다.
$ cd /tmp/lm12
$ mkdir -p deep/a/b/c
$ find deep -type d
deep
deep/a
deep/a/b
deep/a/b/c
mkdir -p로 네 단계를 한 번에 만들었습니다. find deep -type d는 deep 아래에서 디렉터리만(-type d) 찾아 출력합니다. -p가 중간 경로를 모두 생성했음이 확인됩니다.
$ ls -l
lrwxrwxrwx 1 chung chung 10 Sep 12 20:57 link_a -> work/a.txt
drwxr-xr-x 3 chung chung 4096 Sep 12 20:57 work
$ file work/a.txt link_a work
work/a.txt: ASCII text
link_a: symbolic link to work/a.txt
work: directory
ls -l의 맨 앞 한 글자가 파일 유형입니다. l은 심볼릭 링크, d는 디렉터리, -는 일반 파일입니다. file 명령은 같은 사실을 사람이 읽는 문장으로 알려 줍니다. 확장자로 종류를 판단하는 윈도우와 달리, 리눅스는 파일 내용을 검사해 종류를 판별한다는 점이 중요합니다. 확장자가 없는 a.txt 대신 a였어도 ASCII text로 나옵니다.
$ ls -li work/
647309 -rw-r--r-- 1 chung chung 12 Sep 12 20:57 a.txt
647323 -rw-r--r-- 1 chung chung 0 Sep 12 20:57 b.txt
647306 drwxr-xr-x 2 chung chung 4096 Sep 12 20:57 docs
-i를 붙이면 맨 앞에 inode 번호가 나옵니다. touch로 만든 b.txt의 크기가 0인 것도 확인됩니다. inode의 의미는 17강에서 다룹니다.
$ mkdir empty && rmdir empty
$ rmdir work
rmdir: failed to remove 'work': Directory not empty
rmdir은 빈 디렉터리만 지운다는 규칙이 오류 메시지로 확인됩니다. empty는 지워졌지만 파일이 들어 있는 work는 Directory not empty 오류가 났습니다. 이 경우 rm -r work를 써야 합니다.
⚠️ 시험에 나오는 함정
| 함정 | 정확한 사실 |
|---|---|
/usr는 user의 약자다 | Unix System Resources. 사용자 홈은 /home |
/root는 최상위 디렉터리다 | 최상위는 /. /root는 root의 홈 디렉터리 |
rmdir로 내용이 있는 디렉터리를 지운다 | 빈 디렉터리만. 아니면 rm -r |
cp로 디렉터리를 그냥 복사한다 | -r 필요 |
ls -h만 쓰면 크기가 보기 좋게 나온다 | -l과 함께 써야 효과(ls -lh) |
| 숨김 파일은 별도 속성이 있다 | 이름이 .으로 시작하면 숨김. ls -a로 확인 |
관리자 명령은 /bin에 있다 | 관리자용은 /sbin |
| 파일 종류는 확장자로 결정된다 | 리눅스는 내용으로 판별(file 명령) |
📝 핵심 요약 — 암기표
| 항목 | 핵심 |
|---|---|
| 구조 | / 하나에서 시작하는 단일 트리(드라이브 문자 없음) |
| 명령어 위치 | 일반 /bin · 관리자 /sbin |
| 설정 / 변동 데이터 | /etc / /var(로그·메일·스풀) |
| 장치 / 커널 정보 | /dev / /proc·/sys |
/usr | Unix System Resources — 프로그램·라이브러리·문서 |
| 경로 기호 | . 현재 · .. 상위 · ~ 홈 · cd - 직전 위치 |
ls 핵심 | -l 상세 · -a 숨김 · -i inode · -h(-l과 함께) · -t/-S 정렬 |
mkdir -p | 중간 경로까지 한 번에 생성 |
rmdir vs rm -r | 빈 디렉터리만 vs 내용까지 |
cp 옵션 | -r 디렉터리 · -p 속성 보존 · -i 확인 |
mv | 이동 + 이름 변경 겸용 |
| 파일 유형 첫 글자 | - 일반 · d 디렉터리 · l 심볼릭 링크 · b/c 장치 |
다음 13강에서는 파일 내용을 보는 cat·more·less·head·tail, 검색하는 find·grep·which, 도움말 man, 시스템 정보 명령을 다룹니다.
📋 실전 문제
1. 다음 중 리눅스 기본 명령어와 가장 관계가 깊은 디렉터리는?
① /bin ② /etc ③ /var ④ /opt
2. 디렉터리와 용도의 연결로 틀린 것은?
① /etc — 시스템 설정 파일이 위치한다.
② /var — 로그·메일 등 계속 변하는 데이터가 위치한다.
③ /root — 파일 시스템의 최상위 디렉터리이다.
④ /dev — 장치 파일이 위치한다.
3. work 디렉터리 안에 파일이 들어 있을 때, 이 디렉터리를 삭제하는 명령으로 알맞은 것은?
① rmdir work ② rm work
③ rm -r work ④ mv work /dev/null
4. 존재하지 않는 중간 디렉터리까지 한 번에 생성하는 명령은?
① mkdir a/b/c ② mkdir -p a/b/c
③ mkdir -r a/b/c ④ mkdir -m a/b/c
5. 파일의 소유자·권한·시각 등 속성을 보존하면서 복사하는 옵션은?
① cp -i ② cp -f ③ cp -p ④ cp -v
6. ls -l 출력의 맨 앞 한 글자가 l인 경우 그 파일의 유형은?
① 일반 파일 ② 디렉터리 ③ 심볼릭 링크 ④ 블록 장치
7. 숨김 파일을 포함하여 파일 목록을 상세 정보와 함께 출력하는 명령은?
① ls -h ② ls -al ③ ls -R ④ ls -d
8. 현재 디렉터리를 직전에 머물던 디렉터리로 되돌리는 명령은?
① cd .. ② cd ~ ③ cd - ④ cd /
✅ 정답과 해설
1. 정답 ①
/bin(binary)에 ls·cp·cat 같은 모든 사용자가 쓰는 기본 명령어가 들어 있습니다. ②의 /etc는 설정 파일, ③의 /var는 변동 데이터, ④의 /opt는 부가 응용 프로그램입니다. 관리자 전용 명령을 묻는다면 답은 /sbin입니다.
2. 정답 ③
최상위 디렉터리는 /이고, /root는 root 계정의 홈 디렉터리입니다. 이름이 비슷해 혼동을 노린 대표적 선지입니다. ①·②·④는 모두 옳습니다.
3. 정답 ③
내용이 있는 디렉터리는 rm -r로 지웁니다. ①의 rmdir은 빈 디렉터리만 지울 수 있어 Directory not empty 오류가 납니다. ②의 rm은 옵션 없이 디렉터리를 지울 수 없고, ④는 삭제 방법이 아닙니다.
4. 정답 ②
-p(parents)가 중간 경로를 필요한 만큼 만들어 줍니다. ①은 a와 a/b가 미리 있어야만 성공합니다. ③의 -r은 mkdir의 옵션이 아니며, ④의 -m은 권한을 지정하는 옵션입니다.
5. 정답 ③
-p(preserve)가 소유자·그룹·권한·시각을 유지합니다. 백업 용도에서 중요합니다. ①의 -i는 덮어쓰기 확인, ②의 -f는 강제, ④의 -v는 진행 내역 출력입니다. 디렉터리까지 통째로 보존하려면 -a를 씁니다.
6. 정답 ③
첫 글자 l은 심볼릭 링크입니다. -는 일반 파일, d는 디렉터리, b는 블록 장치, c는 문자 장치입니다. 심볼릭 링크는 ls -l에서 이름 -> 대상 형태로 표시됩니다.
7. 정답 ②
-a(숨김 포함)와 -l(상세)을 합친 ls -al입니다. ①의 -h는 -l과 함께 써야 의미가 있고, ③의 -R은 하위 디렉터리 재귀 출력, ④의 -d는 디렉터리 자체 정보만 봅니다.
8. 정답 ③
cd -가 직전 디렉터리로 되돌아갑니다. ①의 cd ..는 상위 디렉터리, ②의 cd ~는 홈 디렉터리(인자 없는 cd와 동일), ④의 cd /는 최상위로 이동합니다.
📚 참고 자료
관련 주제
- FHS
- 디렉터리 구조
- 절대경로
- 상대경로
- ls 옵션
- cp
- rm
- mkdir
- 자격증
- 자격증 강의
- 리눅스마스터 2급 완전정복
- 무료강의
- 무료 온라인 강의
- NUGUNA
- 누구나
📚 시리즈 전체 공유
리눅스마스터 2급 완전정복
이 강의가 속한 시리즈는 총 12강, 모두 무료입니다. 처음부터 배우려는 동료에게 시리즈 전체를 알려 주세요.
댓글
불러오는 중...
