Docker를 공부하다가 Linux File Hierarchy Structure(FHS)를 찾아보았는데, 헷갈리고 잘 몰랐던 내용들이 많아 이 기회에 간략하게나마 정리를 해보았습니다.
※ 혼자 공부하며 정리한 내용이니 잘못된 내용이 있거나 궁금한 내용이 있으면 언제든 댓글 달아주세요!!
Linux File Hierarchy Structure
- Linux 파일 계층 구조 또는 FHS(파일 시스템 계층 구조 표준)는 Unix 계열 운영 체제에서 디렉토리 구조와 디렉토리 내용을 정의
- Linux Foundation에서 관리
- FHS에서는 심지어 다른 물리적 머신이나 가상 머신에 저장이 되어 있더라도 모든 파일과 디렉토리는 root 디렉토리 밑에 존재
위의 사진을 바탕으로 디렉토리 하나씩 간략하게 얘기해 보겠습니다. 글이 잘 이해가 안가면 AWS EC2 Ubuntu를 생성해서 직접 디렉토리를 확인해 보거나 Ubuntu를 설치해서 구조를 확인해 보면 더욱더 이해가 됩니다!!
/ (Root)
- 전체 파일 시스템 계층의 기본 계층
- 모든 파일과 디렉토리는 루트 디렉토리로부터 시작
- 루트 사용자만이 이 티렉토리 아래에 write할 권한 존재
- 위의 사진에서 보이는 /root는 루트 사용자의 홈 디렉토리이며 /와 다름
/bin
- 모든 유저가 단일 사용자 모드에서 사용할 수 있어야 하는 필수 명령 바이너리
- 일반적인 Linux 명령어는 이 디렉토리 아래에 위치
- 시스템의 모든 사용자가 사용하는 명령도 위치
- ex) ps, ls, ping, grep, cp
/boot
- boot loader 파일로 리눅스가 부팅될 때 필요한 파일
- Kernel initrd, vmlinux, grub 파일 등이 위치
/dev
- 필수 장치 파일
- 터미널 장치, USB 또는 시스템에 연결된 모든 장치가 포함
▶ dev/tty: 현재 콘솔을 나타내는 파일 시스템 객체
# cat hello.txt와 동일
cp hello.txt /dev/ptty
ex)
/etc
- 호스트 별 시스템 전체 구성 파일
- 모든 프로그램에 필요한 구성 파일을 포함
- 개별 프로그램을 시작/중지 하는데 사용되는 시작 및 종료 셸 스크립트도 포함
- apache나 nginx 설치하면 설정 파일도 /etc 안에 존재
-> 직접 설치해서 확인하면 더 쉽게 이해할 수 있습니다.
ex)
/home
- 모든 사용자가 개인 파일을 저장할 수 있는 홈 디렉토리
- 저장된 파일, 개인 설정 등을 포함
/lib
- 필수 공유 라이브러리와 커널 모듈
- /bin 및 /sbin의 바이너리에 필수적인 라이브러리
- 시스템을 부팅하고 루트 파일 시스템에서 명령을 실행하는데 필요한 공유 라이브러리
- /usr/lib와 symlink되어 있지만 /bin 및 /sbin에서 필요한 공유라이브러리만 /lib에 위치
/media
- USB, CD-ROM과 같은 이동식 미디어의 마운트 지점
- 이동식 장치의 임시 마운트 디렉토리
/mnt
- 임시로 마운트된 파일 시스템
- 시스템 관리자가 파일 시스템을 마운트 할 수 있는 임시 마운트 디렉토리
☆ /dev vs /media vs /mnt
- /dev: 물리적 장치 또는 시스템 구성요소에 해당하는 특수 파일을 포함, 운영체제에 필수적이며 제거 불가
- /media: 일반적으로 USB, sd-card, CD-ROM같은 이동식 미디어를 마운트 하는데 사용되는 일반 디렉토리
- /mnt: 일반적으로 짧은 시간동안 다른 파일 시스템을 마운트하는데 사용되는 일반 디렉토리
→ /dev를 통해서는 어떤 장치들이 연결되어 있구나를 확인 가능하고 /media를 통해서는 usb나 sd-card에 어떤 내용들이 들어있는지 하위 디렉토리 파일들을 볼 수 있습니다.
-> 직접 usb를 컴퓨터에 연결시켜서 확인해보면 이해가 더 잘됩니다!!
/opt
- 선택적 응용 프로그램 소프트웨어 패키지
- 개별 공급업체의 add-on 애플리케이션이 포함
- 추가 가능 애플리케이션은 /opt 하위 디렉토리에 설치
- ex) chrom, chrom-remote-desktop 설치 파일
/sbin
- /bin 파일과 마찬가지로 /sbin도 바이너리 실행 파일을 포함
- 시스템 유지 관리 목적으로 시스템 관리자가 사용
- ex) iptables, 재부팅, ifconfig, swapon
/srv
- service의 줄임말으로 서버별 서비스 관련 데이터를 포함
- ex) 웹 서버용 데이터 및 스크립트 등 시스템에서 제공하는 사이트별 데이터
/tmp
- 시스템 및 사용자가 생성한 임시 파일이 포함된 디렉토리
- 이 디렉토리에 있는 파일은 시스템이 재부팅될 때 삭제 됨
/usr
- bin, sbin, lib, include, local, share, docs 그리고 소스코드가 포함된 secondary hierarchy
- usr/src: Linux 커널 소스, 헤더 파일 및 문서 위치
- usr/lib: 프로그램 및 패키지를 사용하기 위한 라이브러리 위치, /lib와 symlink되어 있는데 /lib는 /bin 또는 /sbin에서 필요한 라이브러리만 있고 그렇지 않은 라이브러리는 다 usr/lib에 있다고 생각
- usr/bin: /bin 파일과 symlink되어 있고 /bin에 있는 명령을 제외한 기본적인 명령어가 있다고 생각
- usr/sbin: /bin과 마찬가지로 /sbin과 symlink되어 있고 /sbin에 있는 명령을 제외한 시스템 관리를 위한 명령어
- usr/include: C 프로그램에서 포함되는 헤더 파일들이 위치
- usr/local: 소프트웨어를 로컬로 설치할 때 시스템 관리자가 사용하기 위한 것으로 시스템 소프트웨어가 업데이트 될 때 덮어쓰여지지 않도록 안전해야함. 밑의 사진을 보면 aws ssm plugin을 설치되있는 것을 확인할 수 있음.
/proc
- 시스템 프로세스에 대한 정보를 포함
- 프로세스 및 커널 정보를 파일로 제공하는 가상 파일 시스템
- 일반적으로 시스템에 의해 즉시 자동으로 생성되고 채워짐
/var
- 가변 데이터 파일을 포함
- spool 디렉토리와 파일 관리 및 로깅 데이터, 임시 및 임시 파일이 포함
- /var/log, /var/lock, /var/run 등등 일부는 다른 시스템 간에 공유할 수 없음.
- /usr를 읽기 전용으로 마운트 할 수 있음.
- 시스템 작동 중에 기록되는 /usr로 이동한 모든 항목은 /var에 위치해야함
이렇게 Linux 파일 시스템 계층 구조에 대해서 얘기를 해보았습니다. 많이 써서 익숙했던 폴더들도 있고 자주 사용하였는데 왜 여기에 저장되어 있을까 의문이 들던 디렉토리들에 대한 궁금증도 조금 해결되었습니다.
스스로 혼자 정리한거라 잘못된 내용이 있으면 글을 남겨 주면 감사하겠습니다
참고한 자료
https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch05.html#purpose31
https://www.geeksforgeeks.org/linux-file-hierarchy-structure/
https://unix.stackexchange.com/questions/309706/what-is-the-difference-between-dev-media-and-mnt
https://unix.stackexchange.com/questions/74646/difference-between-lib-lib32-lib64-libx32-and-libexec
'CS' 카테고리의 다른 글
[NETWORK] ARP란? (0) | 2023.05.13 |
---|---|
[Database] SQL vs NoSQL (0) | 2021.12.07 |
[Database] Indexing이란? (0) | 2021.12.07 |