Computer >> 컴퓨터 >  >> 프로그래밍 >> Bash 프로그래밍

리눅스 파일 시스템 완벽 가이드: /bin, /sbin, /usr/bin 등 핵심 디렉터리 총정리

리눅스를 사용하다 보면 특정 명령어가 왜 /bin에 있고, 어떤 것은 /sbin 또는 /usr/bin에 있는지 궁금해진 적이 있을 겁니다.

예를 들어 less 명령어는 /usr/bin 디렉터리에 위치합니다. 왜 /bin이나 /sbin, /usr/sbin이 아닐까요? 이 디렉터리들 사이에는 어떤 차이가 있을까요?

이 글에서는 리눅스 파일 시스템의 구조를 살펴보고, 각 최상위 디렉터리가 지닌 의미와 역할을 하나씩 이해해 보겠습니다.

리눅스 파일 시스템 완벽 가이드: /bin, /sbin, /usr/bin 등 핵심 디렉터리 총정리

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의 차이는 리눅스를 깊이 이해하는 데 꼭 필요한 기본 지식이니 꼭 기억해 두세요.