리눅스/공통

리눅스 디렉터리 구조, 파일시스템 계층구조 표준(FHS - Filesystem Hierarchy Standard)

씨실과 날실 2020. 9. 9. 09:00

리눅스 디렉터리의 성격 - 단일한 가상 디렉터리

윈도는 물리적인 디스크별로, 논리적인 파티션별로 각각의 드라이브명을 부여합니다. 시스템 드라이브는 C:\라는 이름을 부여받습니다. 즉 통일된 디렉터리 구조를 지니지 못하고 드라이브별로 디렉터리가 구성됩니다.

그러나 리눅스는 가상의 디렉터리를 구성하여 루트(/) 디렉터리 또는 하위 디렉터리에 물리적 장치, 원격 장치 등을 가리지 않고 마운트하여 마치 하나의 로컬 디스크에서 작업하는 것처럼 구성됩니다. 즉 리눅스에서는 드라이브라는 개념은 없고 모든 장치가 디렉터리와 파일로 인식됩니다. 따라서 리눅스에서는 마운트/언마운트와 포인터라는 개념이 중요합니다.


디렉터리와 폴더의 차이

디렉터리와 폴더는 거의 유사한 개념으로 혼용되고 있지만 엄밀히 따지면 분명 상이한 개념입니다.


자세한 내용을 알고 싶으시다면 아래 링크를 참고하시기 바랍니다.




파일시스템 계층구조 표준(FHS) 개관

수많은 리눅스 배포판들이 존재하지만 디렉터리 구조는 큰 차이를 보이지 않아 각 디렉터리의 역할을 을 어느 정도 예측할 수 있는데 이는 파일시스템 계층구조 표준(FHS - Filesystem Hierarchy Standard)을 따르고 있기 때문입니다.

리눅스 사용자들은 처음에는 기본 명령을 익히는데 급급하지만 어느 정도 익숙해지게 되면 시스템을 자신의 필요나 기호에 맞게 커스터마이징을 시도하게 됩니다. 커스터마이징을 위해서는 자신이 수정해야 할 파일이 어디에 있는지 알아야 하는데 그러기 위해서는 리눅스의 디렉터리 구조를 파악할 필요가 있습니다.

만약 리눅스마다 각기 전혀 다른 디렉터리 구조를 가진다면 OS로 사용할 리눅스를 바꿀 때마다 구조를 처음부터 다시 익혀야 하는 불편이 생깁니다. 이를 막기 위해 만들어진 것이 바로 파일시스템 계층구조 표준(FHS - Filesystem Hierarchy Standard)입니다. 따라서 리눅스 사용자들은 어떤 리눅스를 사용하든 FHS를 알고 있다면 자신이 작업해야할 파일이 어디 있는지 어느 정도 예측할 수 있게 됩니다. 즉 FHS에 대한 이해는 리눅스의 중고급 사용자로 발돋움하기 위한 첫 걸음입니다.

여기서는 FHS를 상세하게 다루기는 힘들고 리눅스를 다루기 위해 반드시 알아야 할 실용적인 내용을 다루고자 합니다. 보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.


루트 파일 시스템은 다음과 같은 필수 디렉터리를 가집니다.

bin : 필수 명령 바이너리
boot : 부트 로더의 정적 파일
dev : 장치 파일
etc : 호스트 별 시스템 구성
lib : 필수 공유 라이브러리 및 커널 모듈
media : 이동식 미디어의 마운트 지점
mnt : 파일 시스템을 임시로 마운트하기 위한 마운트 지점
opt : 애드온 애플리케이션 소프트웨어 패키지
run : 실행 중인 프로세스와 관련된 데이터
sbin : 필수 시스템 바이너리
srv : 이 시스템에서 제공하는 서비스에 대한 데이터
tmp : 임시 파일
usr : 2 차 계층
var : 가변 데이터


또한 아래와 같은 부가 디렉터리를 가질 수 있습니다.

home : 사용자 홈 디렉토리 (선택 사항)
lib<qual> : 대체 형식 필수 공유 라이브러리 (선택 사항)
root : 루트 사용자의 홈 디렉토리 (선택 사항)


주요 디렉터리의 역할

/bin : 필수 사용자 명령 바이너리 (모든 사용자가 사용)

시스템 관리자 뿐만 아니라 리눅스의 모든 사용자가 공통적으로 사용할 수 있는 명령 바이너리들의 모음입니다. 여기에는 단일 사용자 모드와 같이 다른 파일 시스템이 마운되지 않은 경우에 사용되는 명령들도 포함하고 있으며, 또한 스크립트에 의해 간접적으로 사용되는 명령들도 포함합니다.

FHS의 규약상, /bin 디렉터리 안에는 하위 디렉터리가 존재하지 않아야 합니다.

리눅스 배포판에 따라 /bin 디렉터리는 다른 디렉터리의 심볼릭 링크일 수 있습니다.실제로 우분투의 경우 /bin은 /usr/bin의 심볼릭 링크입니다.


study@study-VirtualBox:~$ ls -l /bin
lrwxrwxrwx 1 root root 7  6월 29 13:27 /bin -> usr/bin
study@study-VirtualBox:~$ 


아래는 FHS에서 기술하고 있는 주요 명령에 대한 간단한 설명입니다.


cat : 파일을 표준 출력에 연결하는 유틸리티
chgrp : 파일 그룹 소유권을 변경하는 유틸리티
chmod : 파일 액세스 권한을 변경하는 유틸리티
chown : 파일 소유자 및 그룹을 변경하는 유틸리티
cp : 파일 및 디렉토리를 복사하는 유틸리티
date : 시스템 데이터 및 시간을 인쇄하거나 설정하는 유틸리티
dd : 파일 변환 및 복사 유틸리티
df : 파일 시스템 디스크 공간 사용량을보고하는 유틸리티
dmesg : 커널 메시지 버퍼를 인쇄하거나 제어하는 ​​유틸리티
echo : 텍스트 줄을 표시하는 유틸리티
false : 아무것도하지 않는 유틸리티
hostname : 시스템의 호스트 이름을 표시하거나 설정하는 유틸리티
kill : 프로세스에 신호를 보내는 유틸리티
ln : 파일 간 링크를 만드는 유틸리티
login : 시스템에서 세션을 시작하는 유틸리티
ls : 디렉토리 내용을 나열하는 유틸리티
mkdir : 디렉토리를 만드는 유틸리티
mknod : 블록 또는 문자 특수 파일을 만드는 유틸리티
more : 텍스트 페이지를 넘기는 유틸리티
mount : 파일 시스템을 마운트하는 유틸리티
mv : 파일 이동 / 이름 변경 유틸리티
ps : 프로세스 상태를보고하는 유틸리티
pwd : 현재 작업 디렉토리의 이름을 인쇄하는 유틸리티
rm : 파일 또는 디렉토리를 제거하는 유틸리티
rmdir : 빈 디렉토리를 제거하는 유틸리티
sed : `sed '스트림 편집기
sh : POSIX 호환 명령 셸
stty : 터미널 라인 설정을 변경하고 인쇄하는 유틸리티
su : 사용자 ID 변경 유틸리티
sync : 파일 시스템 버퍼를 플러시하는 유틸리티
true : 아무것도하지 않는 유틸리티, 성공적으로
umount : 파일 시스템을 마운트 해제하는 유틸리티
uname : 시스템 정보를 인쇄하는 유틸리티


다음 프로그램들은 하위 시스템이 섫치된 경우 /bin에 우치해야 합니다.

csh : C 셸 (선택 사항)
ed : `ed '편집기 (선택 사항)
tar : tar 아카이브 유틸리티 (옵션)
cpio : cpio 아카이브 유틸리티 (선택 사항)
gzip : GNU 압축 유틸리티 (선택 사항)
gunzip : GNU 압축 해제 유틸리티 (선택 사항)
zcat : GNU 압축 해제 유틸리티 (선택 사항)
netstat :     네트워크 통계 유틸리티 (선택 사항)
ping : ICMP 네트워크 테스트 유틸리티 (옵션)


/bin/csh 는 /bin/tcsh 또는 /usr/bin/tcsh에 대한 심볼릭 링크일 수 있습니다 .


/boot : 부트 로더의 정적 파일

이 디렉토리에는 부팅 프로세스에 필요한 정적 파일들이 포함됩니다.

부트 로더가 파일을 부팅 할 수 있도록 준비하는 데 필요한 프로그램은 /sbin에 있어야 하며. 부팅 시 불필요한 부팅 로더 관련 구성 파일은 /etc에 위치해야 합니다.

아래는 우분투 20.04의 /boot 디렉터리에 포함된 항목들의 모습입니다.

study@study-VirtualBox:~$ ls -F --group-directories-first /boot
efi/                         initrd.img.old@
grub/                        memtest86+.bin
System.map-5.4.0-39-generic  memtest86+.elf
System.map-5.4.0-42-generic  memtest86+_multiboot.bin
config-5.4.0-39-generic      vmlinuz@
config-5.4.0-42-generic      vmlinuz-5.4.0-39-generic
initrd.img@                  vmlinuz-5.4.0-42-generic
initrd.img-5.4.0-39-generic  vmlinuz.old@
initrd.img-5.4.0-42-generic
study@study-VirtualBox:~$ 

/dev : 장치 파일

/dev 디렉터리는 장치 파일이나 그외 특수 파일들을 모아 놓은 곳입니다.


/etc : 호스트 별 시스템 구성

/etc는 프로그램의 작동을 제어하는데 필요한 구성 파일들을 모아 놓은 디렉터리입니다. 이곳에 있는 파일들은 가능한 정적적이며 실행 가능한 바이너리 파일이 아니어야 합니다.

이곳에 주요 시스템 설정 파일이 있습니다. 그것들 중 여러분들이 자주 접하고 또 다루게 될 파일은 다음과 같습니다.

bash.bashrc / crontab / environment / fstab / sudoers

이외에도 시스템을 관리하는 다양한 구성 파일이 존재합니다. 시간 나시면 열어 보아 내용을 확인해보시는 것을 추천합니다. 리눅스 학습에 도움이 될 것입니다.


아래와 같은 파일들은  해당 파일과 관련된 패키지가 설치된 경우 /etc 디렉터리에 있어야 합니다.

csh.login : C쉘 로그인을 위한 시스템 전체 초기화 파일 (선택 사항)
exports : NFS 파일 시스템 액세스 제어 목록 (선택 사항)
fstab : 파일 시스템에 대한 정적 정보 (선택 사항)
ftpusers : FTP 데몬 사용자 액세스 제어 목록 (선택 사항)
gateways : 라우팅된 게이트웨이를 나열하는 파일 (선택 사항)
gettydefs : getty에서 사용하는 속도 및 터미널 설정 (선택 사항)
group : 사용자 그룹 파일 (선택 사항)
host.conf : 해석기 구성 파일 (선택 사항)
hosts : 호스트 이름에 대한 정적 정보 (선택 사항)
hosts.allow : TCP 래퍼 용 ​​호스트 액세스 파일 (선택 사항)
hosts.deny : TCP 래퍼 용 ​​호스트 액세스 파일 (선택 사항)
hosts.equiv : rlogin, rsh, rcp에 대한 신뢰할 수있는 호스트 목록 (선택 사항)
hosts.lpd : lpd의 신뢰할 수있는 호스트 목록 (선택 사항)
inetd.conf : inetd 용 구성 파일 (선택 사항)
inittab : init 용 구성 파일 (선택 사항)
issue :사전 로그인 메시지 및 식별 파일 (선택 사항)
ld.so.conf : 공유 라이브러리를 검색하기위한 추가 디렉토리 목록 (선택 사항)
motd : 오늘의 로그인 후 메시지 파일 (선택 사항)
mtab : 파일 시스템에 대한 동적 정보 (선택 사항)
mtools.conf : mtools 용 구성 파일 (선택 사항)
networks : 네트워크 이름에 대한 정적 정보 (선택 사항)
passwd : 비밀번호 파일 (선택 사항)
printcap : lpd 프린터 기능 데이터베이스 (선택 사항)
profile : sh 셸 로그인을위한 시스템 전체 초기화 파일 (선택 사항)
protocols : IP 프로토콜 목록 (선택 사항)
resolv.conf : 해석기 구성 파일 (선택 사항)
rpc : RPC 프로토콜 목록 (선택 사항)
securetty : 루트 로그인을위한 TTY 액세스 제어 (선택 사항)
services : 네트워크 서비스 용 포트 이름 (선택 사항)
shells : 유효한 로그인 셸의 경로 이름 (선택 사항)
syslog.conf : syslogd 용 구성 파일 (선택 사항)


mtab은 역사적인 이유로 /etc의 정적 특성에 대한 예외일 수 있습니다.


/home : 사용자 홈 디렉터리 (선택 사항)

사용자별 프로그램 구성 파일의 경우 '.(dot)'으로 시작하는 숨김 파일이 사용자별 /home 디렉터리(~/, eg : /home/study)에 저장되거나, 사용자별 /home 디렉터리에 역시 '.(dot)'으로 시작하는 숨김 디렉터리 안에 저장될 수 있습니다.

사용자 계정을 생성할 때 adduser를 사용하면 /etc/adduser.conf를 바탕으로 사용자의 홈 디렉터리를 자동으로 생성할 수 있습니다. useradd를 사용여 사용자 홈 디렉터리를 생성하려면 -d 옵션을 사용해 설정해주어야 합니다. 보다 자세한 내용은 각 명령어의 manpage를 참고하시기 바랍니다.


/lib : 필수 공유 라이브러리 및 커널 모듈

/lib는 시스템을 부팅하고 root 파일 시스템에서 명령을 실행하는데 필요한 공유 라이브러리 이미지들이 포함되어 있는 디렉터리입니다. 예를 들어 /bin이나 /sbin에  있는 명령을 실행하는데 필요한 각종 라이브러리들이 위치해 있습니다.


/lib <qual>: 대체 형식 필수 공유 라이브러리 (선택 사항)

별도의 라이브러리를 필요로 하는 하나 이상의 바이너리 포맷을 지원하는 시스템에 하나나 둘 이상의 별도 라이브러리 디렉터리가 있을 수 있습니다.


/media : 이동식 미디어의 탑재 지점

플로피 디스크, CD-ROM 및 Zip 디스크와 같은 이동식 미디어의 마운트 지점으로 사용되는 하위 디렉터리를 생성합니다.

floppy : 플로피 드라이브 (옵션)
cdrom : CD-ROM 드라이브 (옵션)
cdrecorder : CD 라이터 (옵션)
zip : Zip 드라이브 (옵션)


버추얼박스를 사용하는 경우, 이 디렉터리에 사용자별 디렉터리를 생성하고 그 하위에 각종 미디어 장치를 마운트합니다.


/mnt : 임시로 마운트된 파일 시스템의 마운트 지점

시스템 관리자가 필요에 따라 임시로 파일 시스템을 마운트할 수 있도록 예약된 디렉터리입이다.

FHS에서는 설치 프로그램에서 이 디렉터리를 사용하지 않도록 강력히 권고하고 있으며 대신에 사용되지 않는 임시 디렉터리를 사용하도록 규정하고 있습니다.


/opt : 애드온 애플리케이션 소프트웨어 패키지

애드온 애플리케이션 소프트웨어 패키지 설치용으로 예약되어 있습니다.

/opt에 패키지를 설치할 때는 보통 <package>나  <provider>를 이름으로 하는 하위 디렉터리를 생성하여 그 안에 각종 디렉터리와 파일들이 위치하게 됩니다..

이때 일반적으로 <package>는 소프트웨어 패키지를 설명하는 이름이며, <provider>는 패키지 공급자의 Linux Assigned Names and Numbers Authority 등록 이름입니다.

아래는 위 내용을 잘 설명해줄 수 있는 예시로, 리눅스용 XAMPP 설치 과정입니다.

How do I install XAMPP?

    Choose your flavor for your linux OS, the 32-bit or 64-bit version.
    Change the permissions to the installer
    chmod 755 xampp-linux-*-installer.run
    Run the installer
    sudo ./xampp-linux-*-installer.run

    That's all. XAMPP is now installed below the /opt/lampp directory.


/opt에 설치되어 실행되는 프로그램의 가변 파일은 보통 /var/opt 아래 계층에 저장됩니다.


/root : 루트 사용자의 홈 디렉토리 (선택 사항)

루트 계정의 홈 디렉토리는 로컬 환경 설정에 따라 시스템 관리자가 결정될 수 있지만 /root가 FHS에서 권장하는 기본 위치입니다


/run : 런타임 가변 데이터

이 디렉터리는 부팅된 이후 시스템 상태를 설명하는  시스템 정보 데이터를 포함합니다. 따라서 시스템 부팅 시 기존의 런타임 데이터는 자동으로 삭제되고 새로이 생성됩니다.

따라서 시스템을 백업할 때 이 디렉터리는 제외해도 무방합니다. 이에 대한 자세한 내용은 아래 링크를 참고 하시기 바랍니다.


이 디렉터리는 과거 /var/run의 역할을 이전받은 것입니다. 따라서 근래에 배포되는 리눅스에 있는 /var/run은 /run의 심볼릭 링크로 설정되어 있습니다.


/sbin : 시스템 바이너리

시스템 관리에 사용되는 각종 유틸리티와 그외 루트 계정 전용 명령들이 /sbin, /usr/sbin, 그리고 /usr/local/sbin 디렉터리에 있습니다.

/sbin에는 /bin에 포함된 바이너리 외에 시스템 부팅, 복원, 복구 및 복구에 필수적인 바이너리가 포함되어 있습니다.

/sbin은 /bin과 마찬가지로 하위 디렉터리가 존재하지 않습니다.

일반적으로 /sbin은 /usr/sbin의 심볼릭 링크로 설정되어 있습니다. 즉 실제 파일들은 /usr/sbin에 위치합니다.


아래와 같은 파일들은  해당 파일과 관련된 패키지가 설치된 경우 /sbin 디렉터리에 있어야 합니다.

fastboot : 디스크를 확인하지 않고 시스템 재부팅 (옵션)
fasthalt : 디스크를 확인하지 않고 시스템 중지 (선택 사항)
fdisk : 파티션 테이블 조작자 (선택 사항)
fsck : 파일 시스템 검사 및 복구 유틸리티 (선택 사항)
fsck.* : 특정 파일 시스템에 대한 파일 시스템 검사 및 복구 유틸리티 (선택 사항)
getty : 게티 프로그램 (선택 사항)
halt : 시스템 중지 명령 (선택 사항)
ifconfig : 네트워크 인터페이스 구성 (선택 사항)
init : 초기 프로세스 (선택 사항)
mkfs : 파일 시스템 구축 명령 (선택 사항)
mkfs.* : 특정 파일 시스템을 빌드하는 명령 (선택 사항)
mkswap : 스왑 영역을 설정하는 명령 (선택 사항)
reboot : 시스템 재부팅 명령 (선택 사항)
route : IP 라우팅 테이블 유틸리티 (옵션)
swapon : 페이징 및 스와핑 활성화 (선택 사항)
swapoff : 페이징 및 스와핑 비활성화 (선택 사항)
update : 주기적으로 파일 시스템 버퍼를 플러시하는 데몬 (선택 사항)


shutdown은 /bin/systemctl의 심볼릭 링크로 설정되어 있습니다.


/srv :시스템에서 제공하는 서비스 관련 데이터

시스템에서 제공하는 사이트 별 데이터를 포함합니다. 이 디렉터리는 사용자가 시스템에서 제공하는 각 서비스 관련 데이터를 손쉽게 찾을 수 있도록 만들기 위해 생성된 것입니다. 그러나 하위 디렉터리의 명명에 대한 합의는 아직 이루어지지 않아 일정한 규칙으로 정해진 바 없습니다.


/tmp : 임시 파일

/tmp 디렉터리는 임시 파일을 필요로 하는 프로그램을 위해 예약된 디렉터리입니다. 이 디렉터리는 이란적으로 시스템 부팅 시 안에 있는 하위 디렉터리와 파일들이 비워집니다.


/usr 계층

/usr는 읽기 전용 데이터들이 위치하는 공유 가능 디렉터리입니다. 즉 FHS를 준수하는 호스트 간 공유할 수 있어야 하며 기존 파일 정보가 재작성되지 않아야 합니다. 호스트별로 담긴 정보가 다른 파일이거나 정보가 바뀌는 가변 파일들은 다른 곳에 저장되어야 합니다.

대형 소프트웨어 패키지는 /usr 아래에 직접 하위 디렉터리를 생성하여 사용해서는 안됩니다.


/usr/ bin : 대부분의 사용자 명령

리눅스 계정 사용자들이 사용할 수 있는 실행 가능 명령의 기본 디렉터리입니다. 많은 리눅스 배포판에서 /bin이 /usr/bin으로 연결됩니다. /bin의 하위 디렉터리 생성 금지 원칙은 여기에도 그대로 적용됩니다.

perl : Practical Extraction and Report Language (선택 사항)
python : Python 해석 언어 (선택 사항)
tclsh : Tcl 인터프리터를 포함하는 간단한 쉘 (선택 사항)
wish : 간단한 Tcl / Tk 윈도우 셸 (선택 사항)
expert : interactive dialog용 프로그램 (선택 사항)


셸 인터프리터는 FHS에 의해 고정되어 있습니다. 그러나 Perl, Python, Tcl, expect용 인터프리터는 다양한 곳에 우치할 수 있으며 이 디렉터리에 있는 것은 해당 인터프리터를 위한 심볼릭 링크일 수 있습니다.


/usr/include : 표준 include 파일용 디렉토리.

시스템의 일반적 쓰임의 C언어용 include 파일이 모인 디렉터리입니다.

bsd : BSD 호환성 포함 파일 (선택 사항)


/usr/lib : 프로그래밍 및 패키지 용 라이브러리

/usr/lib는 각종 오브젝트 파일과 라이브러리를 포함합니다. 일부 시스템에서는 사용자나 쉘 스크립트가 직접 실행하지 않는 내부 바이너리가 포함될 수도 있습니다.


/usr/libexec : 다른 프로그램에서 실행하는 바이너리 (선택 사항)

/usr/libexec에는 사용자 또는 쉘 스크립트가 직접 실행하지 않는 내부 바이너리가 포함되어 있습니다.


/usr/lib <qual>: 대체 형식 라이브러리 (선택 사항)

대체 바이너리 형식을 위한 /usr/lib <qual>은 심볼릭 링크인 /usr/lib <qual>/sendmail 및 /usr/lib <qual>/X11이 엇다는 점외에는 /usr/lib와 동일한 역할을 수행합니다.

/usr/local : 로컬 계층

/usr/local 계층은 시스템 관리자가 로컬 소프트웨어를 설치할 때 사용합니다.

시스템 패키지를 업그레이드할 때 이 디렉터리에 있는 소프트웨어는 덮어쓰지 않아 버전을 그대로 유지할 수 있습니다.

따라서 로컬로 설치된 소프트웨어는 시스템 패키지 업그레이드 시 자동으로 업그레이드 할 것이 아니라면 /나 /usr이 아닌 /usr/local 내에 있어야합니다.

bin : 로컬 바이너리
etc : 로컬 바이너리에 대한 호스트별 시스템 구성
games : 로컬 게임 바이너리
include : 로컬 C 헤더 파일
lib : 로컬 라이브러리
man : 로컬 온라인 매뉴얼
sbin : 로컬 시스템 바이너리
share : 로컬 아키텍처 독립 계층
src : 로컬 소스 코드

/usr/local//lib <qual>

/lib <qual> 또는 /usr/lib <qual> 디렉터리가 있다면 그에 대응되는 디렉터리가 /usr/local에 있어야합니다.


/usr/share/color

/usr/share/color 디렉토리가 존재하는 경우 해당 디렉터리와 동일한 규칙이 적용되는 /usr/local/share /color 디렉토리도 있어야 합니다.


/usr/local/share : 로컬 아키텍처 독립적 계층

이 디렉토리의 내용에 대한 요구 사항은 / usr / share에 대한 요구 사항과 동일합니다.


/usr/etc는 허용되지 않습니다. 따라서 /usr 계층 이하에 설치된 프로그램이라 할지라도 구성파일은 /etc에 배치해야합니다.

/usr/local/etc는 /etc/local에 대한 심볼릭 링크일 수 있습니다.


/usr/sbin : 필수가 아닌 표준 시스템 바이너리

시스템 관리자가 독점적으로 사용하는 비필수 바이너리가 포함됩니다.

시스템 수리, 시스템 복구, /usr 마운트 등을 비롯하여 기타 필수 기능에 필요한 시스템 관리 프로그램들은 /sbin에 배치해야 합니다.

/sbin과 마찬가지로 하위 디렉터리가 없어야합니다.


/usr/share : 아키텍처 독립 데이터

/usr/share 계층은 모든 읽기 전용 아키텍처 독립 데이터 파일을 모아 놓은 것입니다.

이 계층은 주어진 OS의 모든 아키텍처 플랫폼간에 공유할 수 있도록 고안되었습니다. 예를 들어 i386, Alpha, PPC 플랫폼으로 이루어진 사이트는 마운트된 /usr/share 디렉토리를 유지할 수 있습니다.

그러나 /usr/share는 일반적으로 서로 다른 OS 또는 동일한 OS의 서로 다른 릴리스에서 공유할 수는 없습니다.

수정할 필요가없는 데이터를 포함하거나 요구하지 않는 모든 패키지는 /usr/share 또는  /usr/local/share에 저장해야 합니다. 이를 위해 보통은 /usr/share에 하위 디렉터리를 사용하지만 단일 파일을 사용하는 응용 프로그램의 경우에는 /usr/share/misc를 사용할 수 있습니다.

다음 디렉토리 또는 디렉터리에 대한 심볼릭링크는 /usr/share에 있어야 합니다.

man : 온라인 매뉴얼
misc : 기타 아키텍처에 독립적 인 데이터


color : 색상 관리 정보 (옵션)
dict : 단어 목록 (선택 사항)
doc : 기타 문서 (선택 사항)
games : /usr/games에 대한 정적 데이터 파일 (선택 사항)
info : GNU Info 시스템의 기본 디렉토리 (선택 사항)
locale : 로케일 정보 (선택 사항)
nls : 자국어 지원을위한 메시지 카탈로그 (선택 사항)
ppd : 프린터 정의 (선택 사항)
sgml : SGML 데이터 (선택 사항)
terminfo : terminfo 데이터베이스 용 디렉토리 (선택 사항)
tmac : groff와 함께 배포되지 않는 troff 매크로 (선택 사항)
xml : XML 데이터 (선택 사항)
zoneinfo : 시간대 정보 및 구성 (선택 사항)


/usr/src : 소스 코드 (선택 사항)

이 디렉터리는 프로그램의 소스코드를 다운받아 컴파일하여 빌드 설치할 때 사용하는 디렉터리입니다. 각 프로그램별로 하위 디렉터리를 생성해 그 안에서 작업합니다.



/var 계층 : 가변 데이터 디렉터리

/var에는 가변 데이터 파일이 있습니다. 여기에는 스풀 디렉터리 및 파일, 관리 및 로깅 데이터, 임시파일이 포함됩니다.

/var의 하위 디렉터리들 중 /var/log, /var/lock 및 /var/run 등은 다른 시스템과 공유할 수 없습니다. 이와 달리 /var/mail, /var/cache/man, /var/cache/fonts 및 /var/spool/news 등은 공유할 수 있습니다.

시스템 작동 중에 기록되는, /usr에 들어간 모든 것은 /var에 있어야 합니다. 이를 위해서
/usr를 읽기 전용으로 마운트하는 지점으로 /var를 사용합니다.

cache : 애플리케이션 캐시 데이터
lib : 가변 상태 정보
local : /usr/local에 대한 가변 데이터
lock : 잠금 파일
log : 로그 파일 및 디렉토리
opt : /opt에 대한 가변 데이터
run : 실행중인 프로세스와 관련된 데이터
spool : 응용 프로그램 스풀 데이터
tmp : 시스템 재부팅 사이에 보존되는 임시 파일




아래의 디렉터리는 역사적인 이유로 응용 플그램들이 임의로 사용하지 못하도록 '예약'됩니다.

    /var/backups
    /var/cron
    /var/msgs
    /var/preserve


아래와 같은 디렉터리들은  해당 디렉터리와 관련된 패키지가 설치된 경우 /var 디렉터리에 있어야 합니다.

account : 계정 로그 처리 (선택 사항)
crash : 시스템 크래시 덤프 (선택 사항)
games : 가변 게임 데이터 (선택 사항)
mail : 사용자 사서함 파일 (선택 사항)
yp : NIS (네트워크 정보 서비스) 데이터베이스 파일 (선택 사항)


/var/account : 계정 로그 처리 (선택 사항)

이 디렉터리에는 현재 활성 프로세스 계정 로그와 복합 프로세스 사용 데이터 (lastcomm 및 sa에 의해 일부 UNIX 계열 시스템에서 사용됨)가 저장됩니다.


/var/cache : 애플리케이션 캐시 데이터

/var/cache는 애플리케이션에서 캐시된 데이터를 저장하는데 사용됩니다. 캐시 파일은 응용 프로그램이 언제든지 재생성할 수 있으므로 언제든 삭제할 수 있습니다.

fonts : 로컬에서 생성 된 글꼴 (선택 사항)
man : 로컬 형식의 매뉴얼 페이지 (선택 사항)
www : WWW 프록시 또는 캐시 데이터 (선택 사항)
<package> : 패키지별 캐시 데이터 (선택 사항)


/var/crash : 시스템 크래시 덤프 (선택 사항)

시스템 크래시 덤프가 저장되는 디렉터리입니다.


/var/ games : 가변 게임 데이터 (선택 사항)

게임과 관련된 모든 가변 데이터는 여기에 배치해야 합니다. 반대로 도움말 텍스트, 레벨 설명 등과 같은 정적 데이터는 /usr/share/games 같은 다른 곳에 남아 있어야합니다.


/var/lib : 변수 상태 정보

이 계층은 응용 프로그램 또는 시스템과 관련된 상태 정보를 보유합니다. 상태 정보는 프로그램이 실행되는 동안 수정하는 데이터이며 특정 호스트와 관련이 있습니다.


<editor> : 백업 파일 및 상태 편집 (선택 사항)
<pkgtool> : 지원 파일 패키징 (선택 사항)
<package> : 패키지 및 하위 시스템에 대한 상태 데이터 (선택 사항)
color : 색상 관리 정보 (옵션)
hwclock : hwclock의 상태 디렉토리 (선택 사항)
xdm : X 디스플레이 관리자 변수 데이터 (선택 사항)


/var/lock : 파일 잠금

잠금 파일은 /var/lock디렉토리 구조 내에 저장되어야 합니다 .


/var/log : 로그 파일 및 디렉토리

이 디렉토리에는 각종 로그 파일이 포함되어 있습니다.

lastlog : 각 사용자의 마지막 로그인 기록
messages : syslogd의 시스템 메시지
wtmp : 모든 로그인 및 로그 아웃 기록


/var/mail : 사용자 메일 함 파일 (선택 사항)

메일 스풀은 /var/mail을 통해 액세스 할 수 있어야 하며 메일 스풀 파일은 <username> 형식을 취해야합니다. 그러나 메일 스풀을 이 위치로 물리적으로 이동할 필요는 없습니다. 그러나 프로그램과 헤더 파일은 /var/mail을 사용하도록 변경해야합니다.


/var/opt : /opt에 대한 가변 데이터

/opt에 있는 패키지의 가변 데이터는 /var/opt/<subdir>에 설치해야 합니다. 여기서 <subdir>는 애드온 소프트웨어 패키지의 정적 데이터가 저장되는 /opt의 하위 디렉터리 이름입니다.


/var/run : 런타임 가변 데이터

이 디렉터리는 과거 부팅 이후 시스템을 설명하는 시스템 정보 데이터 저장용으로 사용되었으나 이러한 역할은 /run.로 이전되었습니다 . 이제 이 디렉터리는 FHS의 과거 버전을 준수하는 시스템 및 소프트웨어와의 호환성을 보장하기 위해 남겨놓은 것입니다.


/var/spool : 응용 프로그램 스풀 데이터

/var/spool은 처리를 기다리는 데이터를 포함합니다. 즉 /var/spool의 데이터는 향후 사용자나 관리자 또는 프로그램이 수행 할 작업)을 나타냅니다. 따라서 처리가 완료된 이후에는 해당 스풀 데이터가 삭제되기도 합니다.

lpd : 프린터 스풀 디렉토리 (선택 사항)
mqueue : 보내는 메일 대기열 (선택 사항)
news : 뉴스 스풀 디렉토리 (선택 사항)
rwho : Rwhod 파일 (선택 사항)
uucp : UUCP 용 스풀 디렉터리 (선택 사항)


/var/tmp : 시스템 재부팅 동안에 보존되는 임시 파일

/var/ tmp 디렉터리는 시스템 재부팅 동안에 보존되는 임시 파일 또는 임시 디렉토리가 필요한 프로그램에서 사용할 수 있습니다. 따라서 /var/tmp에 저장되는 데이터는 /tmp에 있는 데이터보다 더 지속성을 가집니다.

/var/tmp에 있는 파일과 디렉토리는 시스템이 부팅될 때 삭제되지 않아야 합니다. /var/tmp에 저장된 데이터는 일반적으로 사이트별 방식으로 삭제되지만 /tmp보다 덜 빈번한 간격으로 삭제하는 것이 좋습니다.

/var/yp : NIS (네트워크 정보 서비스) 데이터베이스 파일 (선택 사항)


과거 Sun Yellow Pages (YP)로 알려진 NIS (Network Information Service)에 대한 가변 데이터는 이 디렉터리에 있어야합니다.

/var/yp는 NIS(YP) 데이터의 표준 디렉터리이며 NIS 문서 및 시스템에서 거의 독점적으로 사용됩니다.