Home Linux File System
Post
Cancel

Linux File System

Linux 파일 시스템 구조

파일 시스템의 계층 구조

리눅스의 모든 파일과 디렉토리는 루트 디렉토리 (/)부터 시작해서 계층적으로 구성된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/
├── bin              # 기본 실행 파일 (ls, cp, grep 등)
├── sbin             # 관리자 실행 파일 (ifconfig, fdisk 등)
├── boot             # 부팅 관련 파일
├── dev              # 장치 파일 (/dev/null, /dev/sda 등)
├── etc              # 시스템 설정 파일
├── home             # 사용자 홈 디렉토리
├── lib              # 라이브러리 파일
├── media            # 외장 디스크 마운트 지점
├── mnt              # 일시적 파일 시스템 마운트
├── opt              # 선택적 소프트웨어
├── proc             # 프로세스 정보 (가상 파일시스템)
├── root             # root 사용자 홈 디렉토리
├── run              # 런타임 데이터
├── srv              # 서비스 데이터
├── sys              # 시스템 정보 (가상 파일시스템)
├── tmp              # 임시 파일
├── usr              # 사용자 프로그램과 데이터
└── var              # 변경되는 데이터 (로그, 캐시 등)

주요 디렉토리 설명

/bin - 기본 실행 파일

모든 사용자가 사용할 수 있는 기본 명령어들이 저장된다.

1
2
ls /bin
# bash cat cp grep ls mkdir mv rm touch ...

/sbin - 관리자 실행 파일

시스템 관리에 필요한 명령어들. 주로 root만 사용한다.

1
2
ls /sbin
# ifconfig shutdown reboot fdisk iptables ...

/etc - 시스템 설정 파일

거의 모든 시스템 설정이 여기에 저장된다. 가장 중요한 디렉토리 중 하나.

1
2
3
4
5
6
7
8
9
10
11
12
13
/etc/
├── passwd            # 사용자 계정 정보
├── shadow            # 사용자 비밀번호 (암호화)
├── group             # 그룹 정보
├── sudoers           # sudo 권한 설정
├── hostname          # 호스트 이름
├── fstab             # 파일 시스템 마운트 정보
├── ssh/              # SSH 설정
│   └── sshd_config
├── nginx/            # Nginx 설정
├── mysql/            # MySQL 설정
├── systemd/          # systemd 설정
└── cron.d/           # cron 작업 설정

예시: SSH 설정 파일 수정

1
2
3
sudo vi /etc/ssh/sshd_config
# SSH 포트 변경, 루트 접속 제한 등 설정
systemctl restart ssh  # 변경 적용

/home - 사용자 홈 디렉토리

각 사용자의 개인 디렉토리.

1
2
3
4
5
6
7
8
/home/
├── john/    # john 사용자의 홈 디렉토리
│   ├── .bashrc          # bash 설정
│   ├── .ssh/            # SSH 키 저장
│   ├── Desktop/
│   ├── Documents/
│   └── Downloads/
└── jane/    # jane 사용자의 홈 디렉토리

~는 현재 사용자의 홈 디렉토리를 가리킨다.

1
2
cd ~       # /home/john으로 이동
cd ~/app   # /home/john/app으로 이동

/root - root 사용자 홈

일반 사용자와 달리 root의 홈 디렉토리는 /root다.

1
2
3
# root 로그인
sudo su
cd ~  # /root으로 이동

/var - 변경되는 데이터

시스템이 실행되면서 계속 변경되는 데이터를 저장한다.

1
2
3
4
5
6
7
8
9
10
/var/
├── log/          # 시스템 로그
│   ├── syslog
│   ├── auth.log
│   ├── nginx/
│   └── mysql/
├── cache/        # 캐시 데이터
├── spool/        # 메일, 프린터 작업 대기열
├── tmp/          # 임시 파일
└── run/          # 런타임 데이터 (PID 파일 등)

로그 확인

1
2
3
4
5
6
7
8
9
# 시스템 로그 확인
tail -f /var/log/syslog

# Nginx 로그
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log

# 애플리케이션 로그
tail -f /var/log/myapp.log

/opt - 선택적 소프트웨어

사용자가 직접 설치한 서드파티 소프트웨어를 저장한다.

1
2
3
4
5
/opt/
├── nodejs/
├── mongodb/
├── custom-app/
└── tools/

패키지 매니저로 설치되지 않은 프로그램

1
2
3
4
# 자체 컴파일한 프로그램 설치
./configure
make
sudo make install --prefix=/opt/myapp

/usr - 사용자 프로그램

패키지 매니저로 설치된 프로그램들의 대부분이 여기에 저장된다.

1
2
3
4
5
6
7
8
9
10
11
12
/usr/
├── bin/          # 사용자 실행 파일 (python, node, git 등)
├── sbin/         # 관리자 실행 파일
├── local/        # 로컬 설치 프로그램
│   ├── bin/
│   ├── lib/
│   └── share/
├── share/        # 공유 데이터
│   ├── doc/      # 문서
│   ├── man/      # man 페이지
│   └── icons/
└── lib/          # 라이브러리

/tmp - 임시 파일

시스템이 자동으로 오래된 파일들을 삭제한다.

1
2
3
4
/tmp/
├── temp-script-12345
├── mysql-socket-xyz
└── ... (자동 정리됨)

/dev - 장치 파일

물리 장치나 가상 장치를 파일처럼 접근하게 해준다.

1
2
3
4
5
6
7
8
/dev/
├── null          # 모든 입력을 버림
├── zero          # 무한 0 바이트 스트림
├── random        # 난수 생성
├── sda           # 첫 번째 하드 디스크
├── sda1          # 첫 번째 파티션
├── tty           # 터미널
└── pts/          # 가상 터미널

흔한 사용

1
2
3
4
5
6
7
8
# 출력 무시
echo "hello" > /dev/null

# 무한 0 생성 (테스트용)
head -c 1000 /dev/zero > /tmp/largefile

# 난수 생성
head -c 16 /dev/random | od -An -tx1

/proc - 프로세스 정보 (가상 파일시스템)

실행 중인 프로세스와 시스템 정보를 파일로 표현한다.

1
2
3
4
5
6
7
8
9
10
/proc/
├── cpuinfo       # CPU 정보
├── meminfo       # 메모리 정보
├── loadavg       # 로드 평균
├── uptime        # 시스템 부팅 후 경과 시간
├── [PID]/        # 프로세스별 정보
│   ├── cmdline   # 실행 명령어
│   ├── status    # 프로세스 상태
│   └── fd/       # 열린 파일 디스크립터
└── net/          # 네트워크 정보

시스템 정보 확인

1
2
3
4
5
6
7
8
9
10
11
# CPU 개수 확인
cat /proc/cpuinfo | grep processor | wc -l

# 메모리 정보
cat /proc/meminfo

# 시스템 부팅 후 경과 시간
cat /proc/uptime

# 특정 프로세스의 명령어 확인
cat /proc/[PID]/cmdline

/sys - 시스템 정보 (가상 파일시스템)

하드웨어와 커널의 상태를 조회하고 설정한다.

1
2
3
4
5
/sys/
├── devices/      # 하드웨어 장치
├── class/        # 장치 클래스
├── block/        # 블록 장치
└── power/        # 전원 관리

경로 지정 방식

절대 경로 (Absolute Path)

루트 /부터 시작하는 완전한 경로.

1
2
3
/home/ubuntu/app
/etc/nginx/nginx.conf
/var/log/syslog

상대 경로 (Relative Path)

현재 디렉토리를 기준으로 한 경로.

1
2
3
4
5
# 현재 디렉토리: /home/ubuntu/app
cd config         # /home/ubuntu/app/config로 이동
cd ..             # /home/ubuntu로 이동
cd ../../         # /home으로 이동
cd ../other       # /home/ubuntu/other로 이동

축약 표현

1
2
3
4
~       # 현재 사용자의 홈 디렉토리 (/home/username)
.       # 현재 디렉토리
..      # 부모 디렉토리
-       # 이전 디렉토리

파일 시스템 마운트

디스크 파티션이나 외장 드라이브를 특정 디렉토리에 연결하는 과정을 마운트라고 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 현재 마운트 상태 확인
mount

# 마운트된 파일 시스템 용량 확인
df -h

# 특정 파일의 디스크 사용량 확인
du -sh /var/log

# USB 드라이브 마운트
sudo mount /dev/sdb1 /mnt/usb

# 마운트 해제
sudo umount /mnt/usb

참고

  • 파일 시스템 구조는 대부분의 리눅스 배포판에서 동일하다 (Filesystem Hierarchy Standard).
  • /etc와 /var/log는 시스템 관리할 때 가장 자주 방문하는 디렉토리다.
  • 서버 운영할 때는 각 디렉토리의 디스크 사용량을 주기적으로 모니터링해야 한다.
This post is licensed under CC BY 4.0 by the author.