리눅스 파일 구조 (ubuntu)
시스템 부팅 및 복구에 필수적인 명령어 실행 파일이 들어있다. ls, grep, apt의 기본 명령어부터, git같은 설치 패키지 명령어까지 들어있다.
리눅스 파일 구조 (ubuntu)
| 디렉토리 | 설명 |
|---|---|
/ | 루트 디렉토리. 모든 경로의 시작 |
/bin | 필수 실행 파일 (ls, cp, mv, bash 등) |
/sbin | 시스템 관리자용 명령어 (ifconfig, reboot 등) |
/boot | 부팅에 필요한 파일 (커널, grub 등) |
/dev | 장치 파일 (하드디스크, USB, 터미널 등) |
/etc | 설정 파일 (passwd, hosts, ssh/ 등) |
/home | 일반 사용자 디렉토리 |
/lib | 기본 시스템 라이브러리 (/bin, /sbin에서 사용하는 .so 파일) |
/media | 외부 장치 마운트 위치 (USB, CD 등) |
/mnt | 임시 마운트 지점 |
/opt | 추가 소프트웨어 설치 위치 |
/proc | 가상 파일 시스템, 커널/프로세스 정보 (/proc/cpuinfo, /proc/1234) |
/root | root 사용자 홈 디렉토리 |
/run | 시스템이 부팅된 후 일시적 데이터 저장 (PID, lock, socket 등) |
/tmp | 임시 파일 저장소 (재부팅 시 삭제) |
/usr | 사용자용 프로그램 및 라이브러리 (/usr/bin, /usr/lib) |
/var | 로그/메일/캐시 등 변경되는 데이터 (/var/log, /var/tmp) |
/bin
- 시스템 부팅 및 복구에 필수적인 명령어 실행 파일이 들어있다.

ls,grep,apt의 기본 명령어부터,git같은 설치 패키지 명령어까지 들어있다.- 원래는
git,python등의 사용자용 일반 명령어는/usr/bin이라는 디렉토리에 위치해있다. 하지만 현재 결과는 기본 명령어부터 사용자용 일반 명령어도 있음을 확인할 수 있다. - 이유는 최신 리눅스 배포판은
/usr/bin과/bin의 구분을 명시하지 않기 때문이다.
위 명령어 결과와 같이
/bin디렉토리가/usr/bin을 가리키는 심볼릭 링크임을 확인할 수 있다. 즉,/bin과usr/bin의 기능적 차이는 없다./bin디렉토리에는 모두 컴파일된 바이너리 파일(ELF 포맷)으로 되어있다. (ELF포맷은 리눅스 실행파일 포맷이다.)- 해당 파일을 직접 실행하여 명령어를 수행한다. ex)
/bin/ls->ls명령어가 실행됨 /bin을 PATH에 넣었기 때문에ls만 쳐도/bin/ls가 실행됨cd는bash의 빌트인 명령어 이므로/bin디렉토리에 없음
/sbin
기존의
/bin디렉토리와 별 차이가 없어보이지만,/sbin디렉토리에는ifconfig,fsck,reboot,mount,iptables와 같은 시스템 관리에 필요한 명령어 실행 파일이 들어있다.
/sbin디렉토리 또한,/usr/sbin디렉토리의 심볼릭 링크이다. 즉,/sbin과/usr/sbin의 차이는 없다.
/boot
리눅스 시스템이 부팅할 때 필요한 핵심 파일이 들어있는 디렉토리.
vmlinuz: 압축된 리눅스 커널 이미지initrd: 초기 드라이버 이미지grub/:GRUB부트 로더 설정 파일 및 모듈config-<커널버전>: 커널 컴파일 당시 설정 옵션 기록System.map-<커널버전>: 커널 심볼 테이블
- 해당 리눅스(우분투)는 AWS의 EC2이므로 위
/boot디렉토리에서 주요 파일들은 aws관련 파일에 대한 심볼릭 링크로 설정되어있다. (EC2는 가상화 환경이므로 일반적인 boot파일과는 호환 안됨 -> AWS전용 버전 파일로 대체됨)
부팅에서 /boot가 쓰이는 방식
- 전원이 켜지면 BIOS는 부트로더(GRUB)를 실행
- 부터로더는
/boot디렉토리에 있는vmlinuz,initrd파일 로드 - 커널이 메모리에 올라가며 OS 부팅됨
/dev
- 디바이스 파일이 들어있는 디렉토리이다.

리눅스에서는 모든 하드웨어 장치를 파일처럼 다루기에
cpu,disk와 같은 디렉토리에 존재한다./sda: 하드디스크/tty: 현재 터미널 세션 (tty2, tty4같이 숫자가 붙어있으면 여러 개의 세션이 존재)/null: 없음을 의미하는 장치 (쓰레기통 역할), 어떠한 데이터든/dev/null로 보내면 사라짐/zero: 0으로 채워진 무한 스트림, 필요한 만큼 0값을 뽑아내서 사용할 수 있다. (메모리를 초기화할 때 사용)/random,/urandom: 랜덤 데이터 생성 장치/pts/: 가상 터미널 (ssh 접속용)/dev/null,/dev/zero,/dev/random같은 파일은 얼핏 보면/bin디렉토리에 들어가야하는 프로그램처럼 보이지만, 실제로는 파일처럼 읽고 쓰는 대상이다.- 즉, 파일을 읽고 쓰는 가상의 장치의 역할이므로
/dev디렉토리에 위치해 있다.
/etc
- 시스템 설정 파일을 담는 디렉토리
- 리눅스 운영체제, 패키지, 네트워크, 사용자 등의 설정값을 저장한다.

- 대표 디렉토리들은 다음과 같다.
/etc/passwd: 사용자 계정 정보/etc/systemd/: 시스템 부팅 관리/etc/ssh/: SSH 서버 설정 파일
- 이외에도
apt,python3과 같은 패키지 설정 파일도 존재한다.
/lib, /lib32, /lib64, /libx32
- 필수 라이브러리 파일이 들어있는 디렉토리이다.
/bin,/sbin에 있는 실행파일이 실행하는 프로그램이 돌아가기 위한 라이브러리가 들어있다./lib: 전통적 32비트용 (최근에는 64비트 라이브러리도 사용함)/lib32: 64비트 리눅스에서 32비트 프로그램 실행용/lib64: 64비트 프로그램 전용/libx32: 64비트 CPU용 특수 32비트 ABI프로그램 전용
- 위 네 디렉토리 모두
/usr의 라이브러리 디렉토리의 심볼릭 링크이다.
/media
- 외부 저장 장치를 마운트하는 표준 디렉토리이다.
- USB, 외장 하드디스크 등을 꽂으면 자동으로
/media밑에 마운트된다.
/mnt
- 수동으로 장치 혹은 파일시스템을 임시로 마운트하는 디렉토리이다.
/media와 차이점은/media는 자동으로 외부장치가 마운트되지만,/mnt는 사용자가 수동으로 마운트를 진행해야한다는 점이다.
/opt
optional의 약자로, 외부 소프트웨어를 넣는 디렉토리이다.- 패키지(apt, yum)으로 설치되는 것이 아닌 프로그램이 해당된다.
/proc
- 프로세스 정보와, 커널 내부의 정보를 파일처럼 보여주는 가상 파일 디렉토리이다.
- 실제 파일이 아닌, 커널이 메모리 안에서 실시간으로 만들어줌
/proc/cpuinfo: CPU정보/proc/meminfo: 메모리 사용량 정보/proc/uptime: 시스템 부팅 후 지난 시간/proc/version: 커널 버전/proc/[pid]/: pid의 id를 가진 프로세스의 상세 정보- 커널이 실시간으로 만드는 디렉토리이기에 실시간으로 디렉토리와 파일이 변경됨을 확인할 수 있다.
/root
- root 사용자만 접근할 수 있는 홈 디렉토리
/run
- 부팅 이후 시스템이 운영되는 동안 필요한 임시 데이터를 저장함
- 메모리에 있는 파일 시스템에 저장된다. (디스크에 저장 X)
- 리부팅하면 전부 사라짐
- PID파일, 소켓 파일, 네트워크 상태 정보 같은 것들이 들어간다.
docker.sock라는 소켓파일을 통해, 도커 컨테이너와 호스트가 통신할 수 있도록 한다.
/tmp
/usr
- 위에서 언급했듯이,
/bin/,/sbin,/sbin/,/lib의 심볼릭 링크가 가리키는 디렉토리들이/usr에 모여있다. /usr/include: C/C++ 헤더파일/usr/local: 사용자가 직접 설치한 프로그램/라이브러리 (패키지 매니저랑 별개)/usr/src: 커널 소스 저장
/var
- 내용이 계속 변하는 파일들이 저장되는 디렉토리
- 시스템 로그 파일, 오래 보존되는 임시 파일, 캐시 데이터, 프로그램 자체 데이터베이스 등이 이에 해당한다.
- 많은 파일들이 이곳에 몰리므로 주기적으로 모니터링하고 정리가 필요하다.
/var/log: 시스템의 로그 파일이 저장된다./var/tmp: 오래 저장되는 임시 파일이 저장된다./var/spool: 대기중인 작업 파일이 저장된다./var/lib: 프로그램 자체 데이터베이스가 저장된다. (mysql 데이터 파일)/var/cache: 프로그램 캐시 데이터/var/run:/run의 심볼릭 링크- 다음은
/var/log의 구조이다.
- auth관련한 로그들이 쌓여있는 것을 확인할 수 있다.
logrotate라는 리눅스 표준 로그 관리 도구가 이를 관리한다.- 시간이 지나 로그 파일의 용량이 커지면 자동으로 숫자를 붙여 백업하고 gz로 압축하여 디스크 공간을 절약한다.
- 숫자가 클 수록 오래된 로그이다.
원문: Velog
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.










