리눅스를 사용하다 보면 특정 명령어가 왜 /bin에 있고, 어떤 것은 /sbin 또는 /usr/bin에 있는지 궁금해진 적이 있을 겁니다.
예를 들어 less 명령어는 /usr/bin 디렉터리에 위치합니다. 왜 /bin이나 /sbin, /usr/sbin이 아닐까요? 이 디렉터리들 사이에는 어떤 차이가 있을까요?
이 글에서는 리눅스 파일 시스템의 구조를 살펴보고, 각 최상위 디렉터리가 지닌 의미와 역할을 하나씩 이해해 보겠습니다.
1. / — 루트(Root) 디렉터리
- 모든 파일과 디렉터리의 시작점입니다. 리눅스의 전체 파일 시스템은 루트(/)에서 출발하는 트리 구조로 되어 있습니다.
- 이 디렉터리 아래에 직접 파일을 생성할 수 있는 권한은 오직 root 사용자에게만 있습니다.
- 주의할 점은,
/root는 root 사용자의 홈 디렉터리일 뿐 루트 디렉터리(/)와는 전혀 다른 경로라는 사실입니다.
2. /bin — 사용자 바이너리(User Binaries)
- 실행 가능한 바이너리(실행 파일)들이 저장되어 있습니다.
- 단일 사용자 모드(single-user mode)에서도 반드시 필요한 기본적인 리눅스 명령어들이 이곳에 위치합니다.
- 시스템의 모든 사용자가 공통으로 사용하는 명령어가 모여 있습니다.
- 예:
ps,ls,ping,grep,cp
3. /sbin — 시스템 바이너리(System Binaries)
/bin과 마찬가지로 실행 가능한 바이너리를 담고 있습니다.- 다만 이 디렉터리의 명령어들은 일반적으로 시스템 관리자가 시스템 유지·보수 목적으로 사용하는 도구들입니다.
- 예:
iptables,reboot,fdisk,ifconfig,swapon
4. /etc — 설정 파일(Configuration Files)
- 각종 프로그램에 필요한 설정(configuration) 파일들이 모여 있습니다.
- 개별 프로그램을 시작하거나 중지하는 데 쓰이는 부팅/종료 셸 스크립트도 이곳에 포함됩니다.
- 예:
/etc/resolv.conf,/etc/logrotate.conf
5. /dev — 장치 파일(Device Files)
- 장치(device) 파일들이 위치하는 곳입니다.
- 터미널 장치, USB, 그리고 시스템에 연결된 모든 하드웨어 장치가 여기에 표현됩니다.
- 예:
/dev/tty1(터미널),/dev/usbmon0(USB 모니터)
6. /proc — 프로세스 정보(Process Information)
- 시스템 프로세스에 대한 정보를 담고 있습니다.
- 가상 파일 시스템(pseudo filesystem)으로, 현재 실행 중인 프로세스 정보를 제공합니다. 예를 들어
/proc/{pid}디렉터리에는 해당 PID를 가진 프로세스의 상세 정보가 들어 있습니다. - 또한 시스템 자원에 관한 텍스트 정보도 확인할 수 있습니다. 예:
/proc/uptime
7. /var — 가변 파일(Variable Files)
- 'var'는 variable(변하는 것)에서 온 이름으로, 크기가 계속 커질 수 있는 파일들이 저장됩니다.
- 대표적인 예는 다음과 같습니다:
- 시스템 로그 파일 (
/var/log) - 패키지 및 데이터베이스 파일 (
/var/lib) - 메일 (
/var/mail) - 인쇄 대기열 (
/var/spool) - 잠금(lock) 파일 (
/var/lock) - 재부팅 후에도 유지되어야 하는 임시 파일 (
/var/tmp)
- 시스템 로그 파일 (
8. /tmp — 임시 파일(Temporary Files)
- 시스템과 사용자가 생성한 임시 파일을 보관하는 디렉터리입니다.
- 이 디렉터리 안의 파일들은 시스템이 재부팅되면 삭제됩니다.
9. /usr — 사용자 프로그램(User Programs)
- 2차 수준(second-level) 프로그램들의 바이너리, 라이브러리, 문서, 소스 코드가 포함됩니다.
- /usr/bin: 사용자 프로그램용 바이너리가 위치합니다. 찾는 실행 파일이
/bin에 없다면 이곳을 확인하세요. 예:at,awk,cc,less,scp - /usr/sbin: 시스템 관리자용 바이너리가 위치합니다.
/sbin에 없는 시스템 명령어는 이곳에서 찾아볼 수 있습니다. 예:atd,cron,sshd,useradd,userdel - /usr/lib:
/usr/bin과/usr/sbin에서 사용하는 라이브러리가 들어 있습니다. - /usr/local: 소스 코드로 직접 설치한 사용자 프로그램이 놓이는 곳입니다. 예를 들어 Apache를 소스로 빌드해 설치하면
/usr/local/apache2아래에 생성됩니다.
10. /home — 홈 디렉터리(Home Directories)
- 모든 사용자가 개인 파일을 저장하는 홈 디렉터리가 위치합니다.
- 예:
/home/john,/home/nikita
11. /boot — 부트 로더 파일(Boot Loader Files)
- 부팅과 관련된 파일들이 포함됩니다.
- 커널 이미지(vmlinuz), 초기 RAM 디스크(initrd), GRUB 부트 로더 설정 파일들이 이곳에 위치합니다.
- 예:
vmlinuz-2.6.32-24-generic,initrd.img-2.6.32-24-generic
12. /lib — 시스템 라이브러리(System Libraries)
/bin과/sbin에 있는 바이너리들이 실행될 때 필요한 라이브러리 파일들을 지원합니다.- 라이브러리 파일명은 보통
ld*또는lib*.so.*형식을 따릅니다. - 예:
ld-2.11.1.so,libncurses.so.5.7
13. /opt — 추가 애플리케이션(Optional Add-on Applications)
- 'opt'는 optional(선택 사항)을 의미합니다.
- 각 벤더(공급업체)에서 배포하는 추가(add-on) 애플리케이션이 설치됩니다.
- 외부 애플리케이션은
/opt또는 그 하위 디렉터리(예:/opt/{앱이름})에 설치하는 것이 규칙입니다.
14. /mnt — 마운트 디렉터리(Mount Directory)
- 시스템 관리자가 파일 시스템을 일시적으로 마운트할 때 사용하는 임시 마운트 지점입니다.
15. /media — 이동식 미디어(Removable Media Devices)
- USB, CD-ROM 같은 이동식 저장 장치를 자동으로 마운트하는 임시 디렉터리입니다.
- 예: CD-ROM은
/media/cdrom, 플로피 드라이브는/media/floppy, CD 라이터는/media/cdrecorder
16. /srv — 서비스 데이터(Service Data)
- 'srv'는 service(서비스)의 약자입니다.
- 서버가 제공하는 서비스와 관련된 데이터가 저장됩니다.
- 예: CVS 서버 데이터는
/srv/cvs에 위치합니다.
마무리
각 디렉터리의 용도를 정확히 알면 시스템 관리, 문제 해결, 스크립트 작성 시 어느 위치에 어떤 파일을 두어야 하는지 명확해집니다. 특히 /bin과 /usr/bin, /sbin과 /usr/sbin의 차이는 리눅스를 깊이 이해하는 데 꼭 필요한 기본 지식이니 꼭 기억해 두세요.