[Linux] 리눅스 디렉토리 구조 완벽 정리: FHS(파일 시스템 계층구조) 표준과 주요 디렉토리 역할
리눅스 디렉토리 구조 완벽 정리: FHS(파일 시스템 계층구조) 표준과 주요 디렉토리 역할 리눅스는 Unix의 파일 시스템 계층 구조(FHS: Filesystem Hierarchy Standard)를 기반으로 설계되었습니다.
💻 리눅스 디렉토리 구조 완벽 정리: FHS(파일 시스템 계층구조) 표준과 주요 디렉토리 역할
리눅스는 Unix의 파일 시스템 계층 구조(FHS: Filesystem Hierarchy Standard)를 기반으로 설계되었습니다. 이 표준 덕분에 대부분의 리눅스 배포판에서 비슷한 디렉토리 구조를 유지하며, 루트 디렉토리(/)를 최상위로 트리 형태로 뻗어 나갑니다.
리눅스는모든 것을 파일로 관리하는 철학을 가지고 있습니다. 일반 파일, 디렉토리, 링크, 장치 파일 등 모든 리소스가 파일 형태로 표현되며, 이들을 효율적으로 관리하기 위해 계층적 구조를 사용합니다. 터미널에서man hier명령어를 입력하면 시스템의 디렉토리 구조에 대한 상세 정보를 확인할 수 있습니다.
🔎 한눈에 보는 요약

- /bin, /sbin**: 실행 파일 저장소 — bin은 일반 사용자 명령어, sbin은 시스템 관리자 명령어**
- /etc**: 시스템 설정 파일의 중앙 저장소 — 네트워크, 사용자, 보안 등 핵심 설정 관리**
- /dev**: 하드웨어 장치를 파일로 표현 — /dev/null, /dev/zero 등 특수 파일 포함**
- /home, /root**: 사용자 홈 디렉토리 — 개인 파일과 설정 저장**
- /var, /tmp**: 동적 데이터 저장 — 로그, 임시 파일, 캐시 관리**
📂 루트 디렉토리와 기본 구조
**리눅스 파일 시스템의 최상위에 위치하는****루트 디렉토리(/)는 모든 하위 디렉토리와 파일의 정보를 담고 있습니다.**이곳에서 시작하여 트리 형태로 뻗어 나가는 구조가 바로 리눅스의 계층적 파일 시스템입니다.

**⚠️****주의:루트 디렉토리를 삭제하는 명령어rm -rf /**는 절대 사용하지 마세요. 이 명령어는 시스템 전체를 파괴합니다.
🔧 실행 파일 디렉토리: /bin과 /sbin
/bin 디렉토리 — 기본 사용자 명령어
**/bin 디렉토리는 ls, cp, mv, cat, chmod, mkdir 등 기본적인 쉘 명령어의 실행 파일을 저장합니다.**이 디렉토리의 명령어들은 사용자별 제한 없이 모두가 사용할 수 있으며, 시스템 부팅 후 기본적으로 필요한 필수 명령어만 포함됩니다.
/sbin 디렉토리 — 시스템 관리자 명령어
/sbin은 systemctl, reboot, ifconfig 등 시스템 관리자용 명령어를 저장합니다.****/bin과 달리 root 권한이 필요한 명령어들을 포함하므로, 일반 사용자는 직접 실행할 수 없습니다.
OS별 bin/sbin 관리 방식의 차이
**리눅스 배포판마다 /bin과 /sbin을 다루는 방식이 다릅니다.****CentOS는 디렉토리 구조 단순화를 위해 /bin과 /sbin을 /usr/bin과 /usr/sbin의 심볼릭 링크로 통합했습니다.**반면 macOS는 전통적인 방식대로 /bin과 /sbin을 분리하여 관리하며, brew 패키지 관리자로 설치된 파일들은 /usr/local/bin에 심볼릭 링크 형태로 저장됩니다.
PATH 환경 변수와의 관계
💡**/bin과 /sbin은 실행 파일들의 집합이고, PATH는 이 파일들에 접근할 수 있도록 하는 환경 변수입니다.**시스템은 PATH에 등록된 6개의 bin/sbin 디렉토리(bin, sbin, usr/bin, usr/sbin, usr/local/bin, usr/local/sbin)를 검색하여 명령어를 실행합니다.
brew나 yum 같은 패키지 관리자로 설치한 프로그램은 자동으로 이 디렉토리 중 하나에 파일이나 심볼릭 링크로 저장되어, 어디서든 명령어를 바로 실행할 수 있게 됩니다. 반면 별도의 인스톨러로 설치하면 PATH에 등록되지 않아 실행이 안 될 수 있으므로, 심볼릭 링크를 생성하거나 PATH를 추가해야 합니다.
⚙️ 시스템 설정 파일: /etc 디렉토리
**/etc 디렉토리는 시스템의 대부분 설정 파일이 존재하는 중앙 저장소입니다.**네트워크 설정, 사용자 정보, 암호 파일, 보안 설정, SSH 설정 등 시스템 운영에 필수적인 설정들이 모두 여기에 관리됩니다.
예를 들어 nginx나 Apache 같은 웹 서버를 설정할 때는 /etc/nginx/nginx.conf나 /etc/httpd/conf/httpd.conf 파일을 수정합니다. 또한 사용자를 추가하거나 삭제할 때 /etc/passwd와 /etc/shadow 파일이 자동으로 변경되어 시스템이 사용자를 관리하게 됩니다.
💡 /etc 이름의 유래: 초기 Unix에서는 부팅 설정은 /boot에, 장치 설정은 /dev에 저장했지만, 시간이 지나며 기타 설정 파일들을 보관할 별도의 디렉토리가 필요해져 “etcetera(기타)“라는 의미의 /etc를 만들게 되었습니다.
💾 하드웨어 장치 파일: /dev 디렉토리
**/dev 디렉토리는 하드웨어 장치와 관련된 특수 파일이 존재하는 곳입니다.**이 파일들은 물리적으로 디스크에 있는 것이 아닌 가상 파일이며, 시스템이 하드웨어와 통신하기 위한 인터페이스 역할을 합니다.
자주 사용되는 특수 파일들을 살펴보겠습니다:
- /dev/null**: 항상 비어있으며, 이곳으로 전송된 모든 데이터는 버려집니다. 불필요한 출력을 제거할 때 사용합니다.**
- /dev/zero**: 0의 무한 시퀀스를 포함하는 파일로, 파일 초기화나 테스트에 활용됩니다.**
- /dev/random**: 무작위 값의 무한 시퀀스를 생성하는 파일로, 암호화나 난수 생성에 사용됩니다.**
실제 사용 예시:
📚 라이브러리 파일: /lib 디렉토리
**/lib 디렉토리는 시스템 부팅과 /bin, /sbin의 바이너리 파일 실행에 필요한 공유 라이브러리를 보유합니다.**또한 /lib/modules에는 커널 모듈 파일들이 저장되어 있습니다.
라이브러리 구조는 디렉토리 계층과 일치합니다. /usr/bin과 /usr/sbin에는 /usr/lib이 있고, /usr/local/bin에는 /usr/local/lib이 존재하며, 각 디렉토리의 실행 파일들은 해당 라이브러리를 참조합니다. 대부분의 라이브러리는 심볼릭 링크로 연결되어 있어 버전 관리가 용이합니다.
👤 사용자 디렉토리: /home과 /root
/home 디렉토리 — 일반 사용자 홈
**/home 디렉토리는 개별 사용자의 홈 디렉토리를 관리합니다.**새로운 사용자를 생성할 때 /home/userA, /home/userB 등과 같이 사용자명과 동일한 디렉토리가 자동으로 생성됩니다.
각 사용자는 기본적으로 자신의 홈 디렉토리에만 접근할 수 있도록 권한이 제한됩니다. 필요시chmod와chown명령어를 사용하여 접근 권한을 변경할 수 있습니다.
/root 디렉토리 — 관리자 홈
**/root는 root 계정(시스템 관리자)의 홈 디렉토리입니다.**일반 사용자의 홈 디렉토리와 달리 /home 디렉토리 밖에 별도로 관리되며, root 사용자만 접근할 수 있습니다.
📁 사용자 프로그램 디렉토리: /usr
**/usr 디렉토리는 일반 사용자들을 위한 프로그램과 라이브러리가 저장되는 곳입니다.**시스템 관리자가 아닌 일반 사용자들이 필요로 하는 유틸리티와 응용 프로그램들이 여기에 집중되어 있습니다.
/usr의 주요 하위 디렉토리
- /usr/bin**: 응용 프로그램의 실행 파일이 위치합니다. /bin보다 더 많은 사용자 명령어를 포함합니다.**
- /usr/sbin**:```html**