[ Introduction ]
리눅스의 디렉토리 구조는 전체적으로 트리(Tree) 구조를 하고 있으며, 명령어의 성격과 내용 및 사용 권한 등에 따라 디렉토리로 구분되고 있다. 리눅스 파일 시스템 구조는 기본적인 구조를 제외하고는 사용자의 설정에 따라 달라질 수 있다. 하지만 리눅스의 디렉토리 구조는 파일 시스템 표준안(FSSTND, Linux File System Standard)*을 기반으로 하는 것이 바람직하다. 이것은 리눅스상에서 어떻게 파일 시스템을 구성할 것인지에 대한 표준안을 제정하기 위해서 만들어진 문서이다. 이 표준안을 무조건 따르라는 강제역은 없지만 리눅스 파일 시스템 표준안을 따라 파일 시스템을 구성할 경우 파일들의 위치가 일관되게 유지되어 프로그램 작성, 포팅은 물론 시스템 관리도 쉬워지는 이점이 있기 때문에 대부분의 배포판들이 이 표준안을 지키고 있다.
1. < / > : 모든 디렉토리의 출발점이자 다른 파티션의 연결점
일반적으로 루트 디렉토리라고 부르는 리눅스 시스템에서 가장 최상위 디렉토리이며 디렉토리 구조의 시작이다. 일반적으로 데이터를 저장하지 않는다. 시스템 관리자의 홈 디렉토리인 /root 디렉토리와는 별개이며 다른 것이다. ‘/’ 디렉토리를 제외한 디렉토리인 /bin, /etc, /boot, /mnt, /usr, /lib, /home, /dev, /proc, /var, /sbin, /tmp, /root, /lost+found는 ‘/’ 디렉토리 안에 존재한다.
In Windows, (C:\)
2. < /bin > : "binary" 기본 명령어가 위치하는 디렉토리, 가장 필수적인 실행파일들이 있는 곳
리눅스에서 가장 기본이 되는 명령어들이 모여 있는 디렉토리이다. 해당 디렉토리 안을 들여다보면 대부분의 파일들이 녹색으로 구성된 파일이 실행 파일임을 알 수 있다. 특히 이곳에는 부팅에 필요한 명령어들이 위치하며 부팅 후에 시스템의 계정 사용자들이 사용할 수 있는 일반적인 명령어들도 위치하고 있다. (예: cat, chmod, chown, cp, date, echo, kill, ln, ls, mkdir, more, mount, mv, ps, pwd, rm, su, vi 등등) 즉 $ cp hello.txt good.txt 는 $ /bin/cp hello.txt good.txt 와 같은 의미이다.
In Windows,(C:\windows\commands) + 곳곳에 산재
3. < /boot > : 부팅에 필요한 커널과 파일 그리고 LILO 같은 파일이 들어있는 디렉토리
시스템 부팅에 관련된 모든 파일을 담고 있다. 커널에 대한 link, 기타 초기화 파일들이 있다. 특히 커널 이미지인 vmlinuz- 가 위치하고 있는데 LILO가 아닌 다른 부트로더 프로그램들 모두가 공통적으로 vmlinuz를 이용해 시스템을 부팅하므로 이 디렉토리가 매우 중요하다고 할 수 있다. 이 디렉토리의 파일들은 직접 편집할 수 없으며 커널 컴파일 등의 과정으로부터 생성된다.
< /boot/grub > 는 부트매니저 grub의 설정이 들어 있다. 이 곳의 menu.lst 파일을 조작하면 부팅설정 변경이 가능하다.
4. < /dev > : "devices" 리눅스에서 사용하는 장치를 쓸 때 필요한 특수파일이 위치하는 디렉토리
시스템의 각종 디바이스들에 접근하기 위한 디바이스 드라이버들이 저장되어 있는 디렉토리이며 물리적인 용량을 갖지 않는 가상 디렉토리이다. 리눅스는 입출력을 파일로 대신하는 구조로 이루어져 있다. 플로피나 하드드라이브는 MS 윈도우에서 드라이브명(a:, c:)을 할당 받지만 리눅스에서는 단지 단순한 파일로 대체된다. 따라서 시스템은 각각의 장치로부터의 정보를 /dev 디렉토리에 존재하는 해당 장치 파일로부터 가지고 온다.
크게 블록장치(block device)와 문자장치(character device)로 나뉠 수 있다. 블록장치란 HDD와 같은 주변 장치를 말하는데, 데이터가 블록 단위로 읽고 쓰여지며 랜덤하게 액세스할 수 있다. 반면 문자장치는 입출력이 한 바이트 단위로 이루어지며 데이터가 순차적으로 읽고 쓰여진다. 장치를 새로 만들때에는 mknod 명령을 이용하면 되며 /bin에 위치해 있다.
* 플로피 디스크 디바이스: fd0, 첫 번째 FDD의 디바이스로 두 번째의 경우는 0 대신 1을, 세 번째의 경우는 2를 써준다.
* IDE 하드 디스크 디바이스*: hda, hda1, 마지막 부분의 hda에서 'a'는 위치를 나타내는 것으로, 'a'는 primary master, 'b'는 primary slave, 'c'는 secondary master, 'd'는 secondary slave를 의미한다. 그리고 그 뒤 숫자가 없을 경우에는 전체를 의미, 숫자를 달 경우에는 파티션을 의미한다. (요즘은 거의 sda로 대체되고 있음)
* SCSI 하드 디스크 디바이스*: sda, sda1, IDE 하드 디스크 디바이스와 같으나 h 대신 s를 쓴다.
* CD-ROM 디바이스: cdrom
* 블록단위입출력장치: hda, hdb, hdc, hdd 등(SCSI 장치는 sda, sdb, sda1, ...)
* 콘솔장치: tty1, tty2, tty3, ...
* 프린터: lp, lp0, lp1 ...
* 포트: ttys0, ttys1, ttys2, ttys3 ...
5. < /etc > : 응용프로그램과 서버프로그램의 환경설정파일이 존재하는 디렉토리
리눅스에서 없어서는 안 될 디렉토리이며, 리눅스 시스템에 관한 각종 환경 설정에 연관된 파일들과 디렉토리들을 가진 디렉토리이다. 이 디렉토리에 있는 대부분의 파일들은 시스템 관리자에 의해서 관리되는 파일들이다. 여기 파일들을 조작해 프로그램 설정을 변경할 수 있다. 시스템을 백업하고자 할 때는 꼭 이 디렉토리를 가장 먼저 백업해야 한다. 웹 서버 환경 설정, 시스템 계정 사용자 정보, 패스 워드 관리, 시스템의 파일 시스템 관리 파일, 여러가지 시스템 보안에 관련된 파일들, 시스템 초기화 설정 파일, TCP/IP 설정 파일 등 시스템 전반에 걸친 거의 모든 환경 설정 파일들이 모두 저장되어 있다. (여기를 자주 들려야 리눅스 실력이 향상됩니다.)
* /etc/profile - 윈도우의 autoexec.bat에 해당. 여기서 프롬프트를 변경하거나 시작 프로그램을 추가할 수 있다. bash나 csh, tcsh 사용자가 로그인할 때 기본으로 읽어들여 초기화시키는 파일이다. 그러므로 모든 사용자에게 공통으로 적용할 쉘 관련 사항이 있다면 이 파일을 수정하면 된다. 각 사용자들은 자신의 홈 디렉토리에 개별 설정 파일이 있으므로 역시 원하는 대로 설정할 수 있다.
* /etc/fstab - 시스템 부팅시 처리되는 마운트와 관련한 사항들이 기록되어 있다. 파일 시스템의 마운팅 여부를 설정한다. 하드나 파티션을 추가한 경우 이 곳의 설정을 변경한다.
/dev/hda1 / ext2 defaults 1 1
/dev/hdb5 /home ext2 defaults 1 2
/dev/hdb2 /public ext2 defaults 1 2
/dev/hda2 /public2 ext2 defaults 1 2
첫 번째 항목은 마운트 될 디바이스가 적혀 있다. 두 번째 항목은 마운트 시킬 마운트 포인트가 적혀 있다. 세 번째 항목은 해당 디바이스의 파일 시스템 타입이 적혀 있다. ext2는 리눅스에서 사용하는 파일 시스템이며, msdos와 vfat는 각각 msdos와 windows에서 사용하는 파일 시스템이고, iso9660은 CD-ROM에서 지원되는 파일 시스템이다.
* /etc/group - 사용자 그룹이 정의되어 있으며 다음과 같은 형식으로 쓰여져 있다.
Group Name:Password:GID:Member
* /etc/issue - 시스템에 로그인할 때 나타나는 'login:'위에 나타나는 메시지. 만약 로그인할 때 나타나는 메시지를 바꾸고 싶으면 /etc/rc.d/rc.local 파일의 맨 아래 부분에 # 로 시작되는 주석을 참고하자.
* /etc/motd - 'message of the day'의 약자로 로그인 직후의 메세지를 담고 있다. 관리자가 공지를 띄우는데 유용한 파일
* /etc/passwd - 사용자들의 계정 정보와 패스워드, 홈 디렉토리에 대한 정보를 담고 있으며 다음과 같은 형식으로 쓰여져 있다.
user ID:passwd(암호화상태):UID:GID:사용자 정보:홈디렉토리:로그인쉘
* /etc/shadow - 사용자들의 패스워드 파일
* /etc/init.d와 rcx.d - MS윈도우의 config.sys에 해당. 하지만 파일이 하나가 아니고 한 디렉토리가 꽉 찬다. 리눅스 시작시 시동해야 할 데몬이나 스크립트들이 모여 있다.
In Windows, Registry
6. < /home > : 일반 사용자의 홈 디렉토리
시스템 계정 사용자들의 홈 디렉토리와 ftp, www 등과 같은 서비스 디렉토리들이 저장된다. 이곳의 디렉토리와 파일들은 시스템에서 사용되지 않는다. 사용자들을 위한 공간으로 사용자의 개인설정 파일과 바탕화면, 문서 등이 저장된다.
In Winodws, C:\windows\profiles, c:\MyDocuments
7. < /lib > : 부팅과 시스템 운영에 필요한 공유라이브러리와 커널모듈이 들어 있음
8. < /mnt > : 임시용 마운트용 디렉토리
외부 장치인 플로피 디스크, CD-ROM, Samba 등을 마운트하기 위해서 제공되는 디렉토리이다. 이 디렉토리는 임시로 사용되므로 프로그램은 /mnt 디렉토리에 어떠한 파일 시스템이 마운트되었는지 자동으로 인식하지 않는다. 또한 /mnt는 보통 여러 개의 하위 디렉토리로 나누어 사용하며, 평소에는 각 디렉토리는 비어 있는 상태이다.
9. < /proc > : 프로세스와 시스템 정보를 담은 가상 파일 시스템
실제 파일이 아니라 메모리에서 실행되고 있는 프로세스를 보여주는 곳이다. Process란 실제 메모리에서 실행되는 프로그램이라 생각하면 된다. 디렉토리내에 파일명으로 존재하는 디렉토리는 커널정보를, 숫자로 존재하는 디렉토리는 현재 실행되는 프로세스의 정보를 담고 있다. 하나의 프로그램이 구동되면 해당 프로세스의 PID 번호 디렉토리를 생성하여 프로세스의 진행상황을 추적, 관리할 수 있음 우리가 흔히 사용하는 ps 프로그램이 여기에서 프로세스 정보 등을 참조한다.
10. < /root > : 시스템 관리자인 root의 홈디렉토리
11. < /sbin > : "safe binary"시스템 관리용 실행 파일들이 있는 곳
시스템 관리자가 사용하는 실행 명령어들이 들어 있다. fdisk, mkfs, init, halt 등 시스템 관련 파일이 위치한다. 잘못 조작할 경우 전체 시스템에 이상을 초래할 수도 있다.
12. < /tmp > : 임시 파일 생성용 디렉토리
프로세스 진행과정에서 발생하는 임시파일을 저장하는 디렉토리. 시스템 재구동시 모두 삭제되므로 중요한 파일을 넣어두면 안된다. 디렉토리내 파일을 임의 삭제하면 안된다.
13. < /usr > : 다양한 응용프로그램이 설치되는 곳
시스템에 필수적인 요소는 아니지만 사용자에게는 아주 중요한 디렉토리이다. 거의 모든 응용프로그램이 이 곳에 위치하며 일부 설정 파일도 들어 있다. 라이브러리도 존재하고 컴파일 환경도 위치하고 X Window가 여기 있다. (MS윈도우의 /Program Files해당)
* /usr/X11R6 - /usr/X11, /usr/X386 이 모두 /usr/X11R6 의 심볼릭 링크이다. /usr/X11R6/lib/X11 에는 X-윈도와 관련한 여러가지 파일 및 디렉토리가 있다.
* /usr/bin - /bin 에서 짐작되듯이, 대부분의 사용자 실행 명령어들이 담겨 있다. gcc나 perl등의 개발도구도 여기에 담겨 있다.
* /usr/doc - 역시 doc에서 유추할 수 있듯이 각종 리눅스에 관한 문서들이 담겨 있다. 책 사는 데 돈이 아까우신 분들은 이 디렉토리를 이용하면 좋을 것이다. 최신버젼의 문서를 보길 원한다면 kldp.org(Korea Linux Documentation Project)를 방문하면 많은 도움이 될 것이다.
* /usr/include - C, C++ 프로그램의 헤더 파일들이 담겨 있다.
* /usr/info - 여기에는 여러가지 GNU 프로그램들(gcc, make, autoconf...)의 info 파일들이 담겨 있다. 이 디렉토리를 이용하는 방법은 단순히 'info 프로그램 - ex) info gcc -'라고 치면 된다. 상당히 유용하므로 기본적으로 알아두자.
* /usr/local - 새로운 프로그램들이 설치되는 곳으로 프로그램 관리를 용이하게 할 수 있도록 되어 있다. make install로 프로그램 설치시 기본 디렉토리가 대부분 /usr/local 로 되어 있는 이유가 바로 그것이다. MS 윈도우에 있는 'Program Files'라는 디렉토리와 유사하다고 보면 된다.
* /usr/man - info 와 비슷한 역할을 한다. 메뉴얼 페이지가 담겨 있는 것으로 역시 'man 프로그램'을 쳐서 이용할 수 있다. 모르는 명령어들은 꼭 한 번씩 man으로 확인하는 습관을 갖길...
* /usr/src - 프로그램 소스들이 보관되어 있는 것으로 리눅스 커널이 위치하고 있는 곳이다.
12. < /var> : 시스템 운영 중에 생성되는 각종 임시 파일들이 있는 곳
내용이 자주 변경되는 가변자료가 저장되는 디렉토리. 시스템 운영 시 발생되는 log, 메일 송수신시 임시로 저장되는 spool, 프린트 spool, 웹서버 자료(/var/www) 등
[파일 시스템 표준안(FSSTND)]
1993년 8월, 리눅스의 파일 및 디렉토리의 구조를 다듬고자 표준 파일시스템 구조를 개발하는 움직임이 일었다. 그래서 탄생한 것이 1994년 2월 14일에 발표된 FSSTND(Filesystem Standard) 이다. 같은 해 10월 9일, 이듬해 3월 28일에 수정안이 발표되었다. 허나 1996년 초 리눅스 뿐 아니라 Unix에 기원을 두고 있는 다른 시스템에도 적용 가능하도록 범위를 확장하는 의미에서 이름이 Filesystem Hierarchy Standard (FHS)로 변경되었다.
[IDE(Integrated Device Electronics)/SCSI(Small Computer System Interface)]
메인보드와 저장장치(하드)를 연결하는 인터페이스
요즘 말하는 IDE는 EIDE를 지칭한다. 구 IDE에서 인식할 수 있는 하드 용량이 너무 작아서 개선시킨 인터페이스이다. 일반적인 하드를 연결시키는 가장 대중적인 인터페이스이다. SCSI는 IDE에 비해서 전송속도가 빠르고, 장치의 연결과 분리가 쉽고, 장비간의 호환성이 높다는 장점이 있고, 전용 호스트 어댑터가 입출력 데이터 전송을 처리하고 있기 때문에 입출력 데이터 처리를 프로세서가 직접 처리하는 IDE 방식에 비해 상당히 독립적으로 작동하기 때문에 프로세서의 점유율이 낮은 이점이 있다. SCSI 하드는 일반 IDE하드의 최고 분당회전수가 7,200RPM인데 반해 10,000, 15,000RPM의 고속으로 돌아가기 때문에 속도면에서는 유리하지만 소음과 비용문제에서 부담이 된다. 따라서 SCSI제품은 데이터베이스 서버, RAID, 오디오 및 비디오 편집 시스템 등 고급 시스템에서 많이 사용된다.
[ References ]