모든 디렉토리는 루트(Root, /)디렉토리를 기반으로 bin, boot, dev 등의 디렉토리를 생성한다.
/ | 루트 디렉토리 |
---|---|
/bin (binary) | 기본적인 실행명령 |
/boot | LILO 등 부팅에 관련된 파일 |
/dev (device) | 장치 파일 모음 |
/etc | 시스템 설정파일 |
/home | 사용자 홈 디렉토리 |
/lib (library) | c 라이브러리 |
/mnt (MouNT) | 임시 마운트용 디렉토리 |
/proc (process) | 시스템 정보를 가진 가상 디렉토리 |
/root | 루트 사용자의 홈 디렉토리 |
/sbin (system b..) | 시스템 관리용 실행파일 |
/tmp (Temporary) | 임시파일 디렉토리 |
/usr (user) | 애플리케이션이 설치되어 있는 디렉토리 |
/var (variable) | 시스템에서 운영되는 임시파일, 로그파일을 가지고 있음 |
한대의 강력한 시스템을 준비해서 /usr에 필요한 소프트웨어나 파일을 놓고, 복수의 시스템이 원격 /usr을 마운트해서 사용
/usr을 거울로 비춘 것처럼 bin, sbin, lib, share 등의 디렉터리가 줄지어 있다.
어느 한가지 스타일로 통일되지 않은 이유는 각각의 장단점이 있기 때문
1. 리눅스에서는 일반적으로 /usr/local 밑에 bin이나 lib 디렉터리가 하나 있어 모든 패키지가 그곳에 배치 => PATH 설정이 편리, but 다른 패키지의 파일을 실수로 지워버릴 가능성이 있어 삭제가 번거로워짐
2. 운영체제에 따라 /usr/local/패키지명 밑에 패키지별로 bin이나 lib 디렉터리를 배치하는 경우
3. 최근에는 /opt/패키지명으로 같은 목적으로 사용하는 경우
=> 2,3은 설치하면 패키지 관리는 편해지지만 개별 디렉터리에 PATH를 걸지 않으면 안된다.
자주 바뀌는 파일을 저장하기 위해 사용
주로 서버의 프로세스가 쓰는 로그파일이 저장됨
로그파일
프로그램에서 발생하는 이벤트가 기록되는 파일
ex) 메일 서버의 경우 메일을 수신하거나 송신할 때 로그를 남김
사용자 메일(/var/spool/mail)이나 프린트 입력(/var/spool/cups)이 일시적으로 저장
실행중인 서버 프로세스 ID가 저장된 PID 파일이 저장됨
서버를 만들 때는 기동시에 이 디렉터리에다 프로세스 ID 기록
종료할 때는 제거해주는 것이 매너
inetd라는 서버의 경우, 기동 시 /var/run/inetd.pid에 프로세스 ID 기록
# cat /var/run/inetd.pid
76
이를 응용해 inetd에 HUP 시그널을 보내 설정 파일을 다시 읽도록 할 수 있음
# kill -HUP `cat /var/run/inetd.pid`
역따옴표 사용 시 해당 부분을 먼저 실행한 출력값이 그 자리에 들어감
즉, 이 경우는 'kill -HUP 76'을 실행한 것
최근에는 /var/run이 /run으로 이동하고, /var/run은 /run에 대한 심볼릭 링크가 됨
/run이 새롭게 추가된 이유: 운영체제 재부팅 시 사라져도 좋은 디렉터리를 /var에서부터 분리하기 위함
• 각 시스템의 설정 파일이 보관됨
• 옛날에는 이름 그대로 etc(기타 등등)의 의미로 사용됨
• 디바이스 파일이 보관됨
• devfs, udev가 등장한 이유
/ | 디렉토리 |
---|---|
/dev/fd | 폴로피 디스크 |
/dev/had | 마스터 IDE 하드 디스크 |
/dev/sda | SCSI 및 SATA 하드 디스크 |
/dev/cdrom | CD ROM 드라이버 |
/dev/mouse | 마우스 |
/dev/hdb | 슬레이브 IDE 하드 디스크 |
실행중인 리눅스 정보를 가지는 디렉토리로, CPU 및 메모리 사용량, 파티션 정보, 입출력 DMA등과 같은 정보와 현재 리눅스 운영체제의 정보도 가지고 있다.
• 일반적으로 프로세스 파일 시스템(Process File System, procfs)이 탑재됨
• 프로세스 파일 시스템은 말 그대로 프로세스를 파일 시스템에 표현한 것
• 프로세스 파일 시스템은 원래는 디버깅을 위해 만들어짐
• 디렉터리 내에 이름이 숫자만으로 된 디렉터리 외의 다른 파일들 존재
• 프로세스 파일 시스템을 통해 커널에 뭔가 지정할 수도 있음
/ | 디렉토리 |
---|---|
/proc/buddyinfo | 버디 할당자 정보 |
/proc/cmdline | 시스템 부팅 중 커널에 제출된 명령 내용 |
/proc/cpuinfo | 시스템 CPU 정보 |
/proc/devices | 디바이스들의 목록 |
/proc/diskstats | 디스크의 상태 및 파티션 정보 |
/proc/dma | DMA 채널 |
/proc/filesystems | 파일시스템 목록 |
/proc/interrupts | 인더럽트에 대한 통계 |
/proc/iomem | 할당된 메모리 영역 |
/proc/ioport | 입출력 포트 정보 |
/proc/kallsyms | 심볼들의 목록 |
/proc/loadavg | CPU부하와 관련된 정보 |
/proc/locks | 잠금 파일 |
/proc/mdstat | RAID 시스템의 정보를 제공 |
/proc/meminfo | 시스템 메모리 정보 |
/proc/modules | 사용중인 모듈들 |
/proc/partitions | 파티션 정보 |
/proc/slabinfo | 슬랩 할당기 통계정보 |
/proc/swaps | 스왑 파티션에 대한 정보 |
/proc/uptime | 시스템이 부팅된 이후의 시간 |
• procfs에 프로세스와 관계 없는 정보들이 탑재되기 시작하며, 시스템 관련 정보를 별도로 제공하기 위해 sysfs라는 파일 시스템 추가됨(버전 2.6-)
• sysfs를 탑재하는 디렉터리가 /sys
• 시스템에 존재하는 디바이스, 디바이스 드라이버 정보를 얻을 수 있음
• 유닉스의 전통적인 방식으로는, 커널 프로그램을 루트 디렉터리에 보관
• 최근에 리눅스는 커널 프로그램을 /boot에 보관
• 리눅스 커널은 vmlinuz라는 파일에 담겨 있음
• 슈퍼 사용자의 홈 디렉터리
• 임시로 파일을 만들고 싶을 때 사용하는 디렉터리
• /tmp는 리부팅하면 삭제될 수 있으나, /var/tmp는 리부팅해도 삭제되지 않음
• 일반 사용자의 홈 디렉터리는 셸에서 환경변수 #HOME으로 접근 가능
• 위치는 보통 '/home/사용자명'이지만, 꼭 그런 것만은 아님
• 따라서 프로그램에서 홈 디렉터리 엑세스 하는 경우는 /home이라고 가정하여 하드코딩하는 것이 아니라, 전용 API 사용해야