리눅스 디렉토리 구조
Linux는 Unix의 파일 시스템 계층 구조(FHS: Filesystem Hierarchy Standard)를 기반으로 사용한다. FHS 덕분에 대부분의 Linux 배포한에서 데이터가 비슷한 디렉토리 구조로 표현 되며, 최상위 계층인 루트 디렉토리(/
)를 시작으로 트리 형태로 뻗어 나간다.man hier
명령어를 치면 디렉토리 구조에 대한 정보를 터미널에서 확인할 수 있다.
루트 디렉토리 (/)
루트 디렉토리는 Linux 파일 시스템의 최상위에 위치한 디렉토리이다. bin
, lib
등의 모든 하위 계층의 정보를 담고 있다.
rm 명령어를 통해 디렉토리를 지울 때 rm -rf / 는 사용하지 않도록 주의하자.
/bin 디렉토리
/bin 디렉토리는 ls
, cp
, mv
등 기본 내장이 된 쉘 명령의 실행 파일을 갖고 있는 디렉토리이다. 사용자별 제한 없이 함께 사용할 수 있는 디렉토리이다.
/sbin 디렉토리
/sbin 디렉토리는 /bin처럼 명령어를 저장하고 있는 디렉토리이다. 다른 점은 시스템 관리자용 명령어를 저장하고 있어 root 권한이 필요하다는 점이다.
/bin과 /sbin은 운영체제 별로 구별하는 방식이 차이가 있다.
CentOS는 디렉토리 구조 단순화를 위해 bin과 sbin을 심볼릭 링크로 공유하였다. (한쪽에서 변경되거나 삭제되면 다른 한쪽도 동일하게 적용)
MacOS는 bin과 sbin을 모두 분리하여 사용한다. 맥에서 패키지 관리자인 brew를 사용하면 Cellar라는 별도의 디렉토리에 저장되며, usr/local/bin에 심볼릭 링크 형태로 관리된다. (그 이유는 밑에 usr 디렉토리에서 정리했다.)
/bin과 /sbin은 명령어를 실행시켜주는 디렉토리이고, PATH는 환경 변수이다. java -version
과 같이 명령어 입력이 사용가능 한 것은 brew나 yum과 같은 패키지 관리자로 설치한 파일들이 PATH 설정에 남게 되어 커맨드 실행이 가능하게 되는 것이다.
/dev 디렉토리
/dev 디렉토리는 하드웨어 장치와 관련된 특수 파일이 존재하는 디렉토리이다. 물리적으로 디스크에 있는 것이 아닌 가상 파일이라고 보면 된다.
// 모든 파일 또는 문자열을 제거하기 위해 보내는 파일
echo dummy > /dev/null
// 오류 출력을 제외하고 문자열 탐색
grep -i "test" ./* 2>/dev/null
// 0의 무한 시퀀스를 포함하는 파일
/dev/zero
// 무작위 값의 무한 시퀀스
/dev/random
- /dev/null 파일은 항상 비어있으며, 해당 경로로 전송된 데이터는 버려진다. 출력을 사용하지 않는 경우 이용한다.
/etc 디렉토리
/etc 디렉토리에는 암호 파일 및 네트워크 파일과 같은 관리 시스템의 핵심 구성 파일이 있다. 예를 들어 ssh나, hosts 파일 등이 etc 디렉토리에서 관리되고 있다. 시스템의 대부분 설정파일이 존재하는 디렉토리라고 보면 된다.
/usr 디렉토리
/usr 디렉토리는 시스템 관리자가 아닌 일반 사용자들이 사용하는 디렉토리다. 하위에는 /bin, /sbin , /local 등이 있다.
/usr/bin 디렉토리는 일반 사용자에게 기본적으로 필요한 유틸리티성 디렉토리이다.
/usr/local/bin 은 아까 brew와 같은 패키지매니저에서 저장하는 디렉토리라고 했었다. 그 이유는 /usr/bin에 저장되어 있다면 추후 설치되는 업데이트 등에 의해 삭제될 수 있기 때문이다. /usr/local/bin 디렉토리는 일반 사용자들을 위한 디렉토리 공간이라고 보면 된다.
/home 디렉토리
/home 디렉토리는 사용자 개인의 디렉토리가 들어가 있다. 즉, 개별 사용자에 대한 구성 파일이 포함되어 있다.
Linux에서 사용자를 생성할 때 /home/userA , /home/userB 등과 같이 여러 사용자를 생성해서 구분한다. (각 사용자는 자기의 홈 디렉토리만 접근할 수 있도록 하는 것이 원칙이다.)
/lib 디렉토리
/lib 디렉토리는 시스템 부팅과 /bin과 /sbin 디렉토리에 있는 바이너리 파일들을 실행해주는 공유 라이브러리를 보유하고 있다.
/usr/bin, /usr/sbin에는 /usr/lib 디렉토리가 있고, /usr/local/bin 에는 /usr/local/lib 가 존재하며 디렉토리에 맞게 존재하고 있다.
/var 디렉토리
variable을 뜻하는 /var 디렉토리는 로깅, 사용자 추적, 캐시 등의 시스템 프로그램이 만들고 관리하는 기타 파일 들의 정보들을 저장하는 디렉토리이다.
/opt 디렉토리
/opt 디렉토리는 외부 응용프로그램을 설치 및 저장할 때 사용된다. 예를 들면 맥에서 hombrew를 설치하면 해당 경로에 존재한다.
일반적인 관행으로는 opt에 프로그램을 유지하고, 모든 사용자가 실행할 수 있도록 바이너리 파일을 /bin에 심볼릭 링크하는 것이다.
/tmp 디렉토리
해당 디렉토리는 임시 파일을 저장하는 용도로 사용한다. 임시라는 의미에 걸맞게 시스템이 다시 시작되면 /tmp 디렉토리의 포함 항목이 삭제된다는 점을 주의하자.
REFERENCE
http://coffeenix.net/doc/kuls/file_system-4.html