안녕하세요
뚱보 프로그래머입니다.
오늘은 파일시스템에 대해서 간략하게 적어보도록 하겠습니다.
1 디렉토리 개요
다중 사용자 모드를 지원하는 시스템은 각 계정 사용자별로 파일을 관리하거나 분산시킬 수 있는 구조를 지원한다. 개인용 서버 시스템에서 수많은 시스템 파일들과 사용자 파일들이 한 곳에 있다면 파일 관리가 어려울 것이다. 단일 사용자라도 파일을 분할하여 관리할 수 있는 구조가 필요하다.
그리고 거의 모든 운영체제에서 계층적 트리 구조로 파일 관리를 한다.
1] 최상위 디렉토리
리눅스에서 최상위 디렉토리는 root 디렉토리라고 하는데 "/"로 표시한다.
2] "." 과 ".." 디렉토리
이들은 sub 디렉토리에만 존재한다.
"."은 현재 디렉토리를 의미하고 ".."은 현재 디렉토리의 상위 디렉토리를 의미한다.
3] 현재 디렉토리의 확인
시스템에 로그인한 후에 사용자가 현재 어느 디렉토리를 사용 중인지를 알아보려면 "pwd" 명령어를 입력한다.
사용자의 홈 디렉토리로 이동하기 위해서는 cd ~ 를 사용해야 한다.
4] 디렉토리 생성과 삭제
1) 디렉토리 생성
mkdir 명령어를 사용한다.
[root @edu00 /home]#mkdir linux
한번에 여러개의 디렉토리를 만들고자 한다면 생성하고자 하는 디렉토리명을 한칸씩 띄어서 입력하면 된다.
[root @edu00 linux]#mkdir public_html doc tmp
2) 디렉토리 삭제
특정의 디렉토리를 삭제하기 위해서는 rm과 rmdir 명령어를 사용한다.
[root @edu00 linux]#rmdir doc
이 경우 해당 디렉토리가 비어있을 경우에만 유효하다.
[root @edu00 linux]#rm –rf tmp
tmp 디렉토리뿐만 아니라 해당 디렉토리 내의 모든 파일들까지 무조건 삭제한다.
3) 디렉토리 목록 확인
디렉토리 목록을 확인하는 명령은 "ls"이다. 현재 디렉토리나 지정된 디렉토리내에 파일의 목록을 list 시켜준다.
[root @edu00 linux]#ls
[root @edu00 linux]#ls -l
[root @edu00 linux]#man ls
5] 디렉토리의 이동
[root @edu00 linux]#cd ..
[root @edu00 linux]#cd /home
2. 경로(path)
경로명은 리눅스 파일시스템에서 파일(또는 디렉토리)의 위치를 나타낸다.
1] 절대 경로
리눅스 시스템에서 사용자들은 파일을 계층적인 디렉토리 구조안에 저장하게 된다. 그리고 그 파일을 다시 사용하기 위해 파일의 이름 뿐만 아니라 그 파일이 어떤 디렉토리 내에 있는지도 지정을 해주어야 한다.
최상위 root 디렉토리로부터의 경로를 의미한다
2] 상대 경로
현재 디렉토리를 중심으로 다른 디렉토리나 파일의 경로를 지정한다.
3. 홈 디렉토리
login을 하게 되면 각 계정 사용자별로 각각의 특정한 디렉토리가 지정되고 이를 홈 디렉토리라 한다.
일반 사용자들의 홈 디렉토리는 /home 디렉토리 아래에 사용자 계정명으로 생성된다.
일반 사용자의 홈 디렉토리는 /etc/skel 디렉토리와 /etc/default/useradd 파일에 의해 지정된다.
4 파일 입출력 방법
1) cat
cat은 표준 입력을 받아서 표준 출력을 해주는 명령어이다.
[root @edu00 linux]#cat > file1
I am a linuxer.
Linux is good.
^D
[root @edu00 linux]#cat test.txt namebook > newfile
[root @edu00 linux]#cat >> ~/.bashrc
umask 022
<Ctrl+D>
[root @edu00 linux]#cat > ~/.exrc
set nu
set tabstop=3
Ctrl+D
[root @edu00 linux]##cat > ~/.vimrc
set tabstop=3
set number
Ctrl+D
2) 파일과 디렉토리 복사
1] 파일 복사
[root @edu00 linux]#cp /etc/passwd /home/linux
2] 디렉토리 복사
[root @edu00 linux]# cp -r /home/linux /root
3) 파일과 디렉토리의 삭제
[root @edu00 /root]#rm –r /home/linux
[root @edu00 /root]#rm –rf /home/edu00
[root @edu00 /root]#rmdir /home/linux01
4) 파일과 디렉토리 이동 그리고 파일명의 변경
[root @edu00 linux]#mv test.txt text.txt
[root @edu00 linux]#mv text.txt /root
5 파일의 인덱스 노드 번호(i-node)와 link 파일
파일의 i-node는 파일에 고유한 index node number를 가리킨다.
그리고 기본적으로 링크의 효용은 디스크 공간의 절약에 있다.
1) File and i-node
하드디스크와 같은 파일시스템은 Boot Block, Super Block, I-node Block, Data Block으로 구분되어 있다. 일반적으로 파일 시스템의 종류에 따라 구체적으로는 다른 구조일 수 있지만 다음과 같은 구조에 의해서 자료를 저장하고 다시 접근할 수 있는 정보를 제공한다.
Boot Block은 시스템 부팅시에 참조할 정보들이 기록되어 있다.
Super Block은 전체 파일 시스템에 대한 정보를 담고 있다. 여기에는 파일시스템 size, magic number, mount 횟수, 블록그룹 번호, 블록 크기, 첫번째 inode 등의 정보가 저장된다.
Data Block은 파일의 정보 자체가 저장되는 곳이다.
inode란 파일에 대한 모든 정보를 저장하지만 파일 이름은 제외한다. 즉, Data Block에 위치한 파일들에 대한 개별적인 정보를 담고 있는 일종의 연결고리이다. inode는 실제의 데이타 파일들과 1:1로 대응을 이루며 파일의 크기와 생성일, 접근 권한과 같은 외적인 사항들을 저장해 놓은 별도의 파일이다.
리눅스 시스템상의 모든 파일들은 고유의 inode 번호를 가지고 있다. 여기에는 Data Block의 위치 정보, time stamp, 크기, 소유자, inode의 mode 등의 정보가 저장된다.
Directory block은 파일 이름과 inode number 등이 저장되는 공간이다.
Indirection block은 inode에 Data Block의 위치 정보를 저장할 공간이 부족할 때, 이 위치정보를 저장하기 위한 공간을 동적으로 할당하는데, 이 공간이 indirection block(간접블럭)이다.
[root @edu00 linux]#stat /etc/passwd
[root @edu00 linux]#ls -i
[root @edu00 linux]#ls -ii
2) link
링크는 하나의 파일이 복수개의 이름을 갖도록 설정하는 것으로 실질적으로 파일은 시스템에서 inode 번호로 인식이 되기 때문에 가능한 것이다.
1] Hard link
두 파일명은 같은 inode와 같은 Data Block들을 가리킨다. 원본 파일과 완전히 동일하고, 디스크 공간을 차지하지 않는다. 파일시스템을 넘어갈 수 없고, 디렉토리에 대한 하드링크를 만들 수 없다.
[root @edu00 linux]#pwd
/home/linux
[root @edu00 linux]#cp /etc/passwd passwd
[root @edu00 linux]#ln passwd hardlink
[root @edu00 linux]#stat passwd
[root @edu00 linux]#stat hardlink
[root @edu00 linux]#ls -il
[root @edu00 linux]#ln /home home (x)
[root @edu00 linux]#df -h
[root @edu00 linux]#ln /etc/passwd pass (x)
2] Symbolic link
symbolic link는 자신의 inode를 가지며 작은 양의 디스크 공간을 차지한다. symbolic link를 사용하면 2개의 서로 다른 파일들이 존재하게 된다. 실제 data를 가지는 원본 파일과 원본 파일의 이름만을 가지고 있는 링크 파일이 그것이다. symbolic link는 파일시스템을 넘어가거나 다른 컴퓨터로 넘어갈 수도 있으며, 디렉토리에 대한 symbolic link도 가능하다.
[root @edu00 linux]#ln -s passwd symbolic
[root @edu00 linux]#ls -il
[root @edu00 linux]#rm -f passwd
[root @edu00 linux]#ls -l
[root @edu00 linux]#cat hardlink
[root @edu00 linux]#cat symbolic (x)
[root @edu00 linux]#ln -s /usr/doc document
[root @edu00 linux]#ls -il
[root @edu00 linux]#cd document
[root @edu00 doc]#pwd
/usr/doc
[root @edu00 linux]#ls
[root @edu00 linux]#ls -l /bin | grep ^l
[root @edu00 linux]#ls -l /lib | grep ^l
[root @edu00 linux]#ls -l /etc/rc.d/rc3.d | grep ^l
6. Permission
리눅스는 다중 사용자 시스템이기 때문에 정보나 파일들이 다른 사용자들에게 노출될 수가 있다. 그러므로 리눅스 사용자들은 서로간에 자신들의 정보를 보호할 수 있는 방법이 필요하다.
1] 파일 퍼미션
파일과 디렉토리에 대한 접근 권한은 사용자(user), 그룹(group), 기타(other) 별로 나뉘게 된다. 사용자는 적어도 하나의 그룹에 속하게 되며 그룹에 속하지 않는 사용자들은 기타로 분류된다.
권한은 읽기(read), 쓰기(write), 실행(execute)이 있다. 파일이나 디렉토리에 접근을 하기 위해서는 각 권한에 대한 설정이 있어야 하며, 슈퍼유저(root)는 권한에 상관없이 접근이 가능하다.
[root @edu00 linux]#ls -l
-rw-rw-r-- 1 linux linux 38 Apr 10 17:41 test.txt
drwxrwxrwx 2 linux linux 4096 Apr 10 17:41 .test
여기서의 권한은 그 파일 자체에 대한 권한이 아닌 파일의 data에 대해서이다. 즉 파일의 data를 읽거나 수정할 수 있다. 하지만 그 파일명을 바꿀 수는 없다. 디렉토리에서 r은 디렉토리 안에 있는 파일들을 볼 수 있고 복사가 가능하다. 디렉토리에서 w는 디렉토리 안에 파일을 생성하거나 삭제가 가능하다.
디렉토리에서 x는 디렉토리 안에 있는 파일들을 access할 수 있다. 그리고 실행 파일에 대해서는 실행 가능하다.
2] 사용자 분류(ownership)
rwx가 3개가 있는데, 이것은 각각 user, group, other 사용자들에게 적용되는 권한이다.
[root @edu00 linux]#ls -l
-rw-rw-r-- 1 linux test 38 Apr 10 17:41 test.txt
drwxrwxrwx 2 linux test 4096 Apr 10 17:41 .test
처음 나오는 linux는 user가 되고 두번째 test는 group이 된다.
사용자가 파일에 접근할 때 id가 linux이면 처음 권한을 갖고, test라는 그룹에 속해 있으면 두번째 권한을 갖고, 이도 저도 아니면 3번째 권한을 가진다.
3] 권한 결정
-rwxrw-r-- 1 linux web 30 Apr 10 17:41 file
linux 사용자 : 파일의 소유자이기 때문에 처음 나오는 rwx 권한을 갖게 된다.
web 그룹에 속한 test 사용자 : 그룹에 속해 있기 때문에 rw 권한을 갖게 된다.
other 사용자 : r 권한만을 갖게 된다.
4] 퍼미션 변경
[root @edu00 linux]#ls -l
-rw-rw-r-- 1 linux web 38 Apr 10 17:41 file
[root @edu00 linux]#chmod g-w file
: 그룹의 권한에서 w를 없앤다.
-rw-r--r-- 1 linux web 38 Apr 10 17:41 file
[root @edu00 linux]#chmod o+w file
: other에게 w 권한을 추가한다.
-rw-r--rw- 1 linux web 38 Apr 10 17:41 file
[root @edu00 linux]#chmod a=r file
: 다른 권한은 없애고 r권한만 추가한다.
-r--r--r-- 1 linux web 38 Apr 10 17:41 file
: u는 user의 권한이며 g는 group의 권한, o는 other 사용자의 권한을 의미하고 a는 all의 약자로 user, group, other 사용자 모두를 의미한다.
권한을 없앨 때는 "-" 기호를 사용하며 권한을 부여할 때는 "+" 기호를 사용하고 "="는 기존의 퍼미션을 새로운 퍼미션으로 일치시킨다.
파일의 권한을 바꿀 수 있는 사용자는 그 파일의 소유자(user)와 root뿐이다.
1) mode bit (8진법 표현)
rwx : 111 --> 7
rw- : 110 --> 6
--x : 001 --> 1
2진수로 계산하여 8진법 표현: 2의 0승, 2의 1승, 2의 2승 ..
[root @edu00 linux]#chmod 755 file
-rwxr-xr-x 1 linux1 linux 38 Apr 10 17:41 file
2) umask
처음 생성되는 파일의 권한을 부여하는 것은 umask 값이다.
[root @edu00 linux]#umask
002
[root @edu00 linux]#mkdir aa
[root @edu00 linux]#touch bb
명령행에서 설정한 값은 umask 값을 변경하지만 현재 쉘에서만 적용하고 다음 로그인시에는 적용되지 않는다.
[root @edu00 linux]#umask 002
[root @edu00 linux]#umask
002
계속 적용하고자 한다면 다음과 같이 한다.
[root @edu00 linux]#vi /etc/bashrc
......
umask 022
.............
-----------
혹은
[root @edu00 linux]#cat >> ~/.bashrc
umask 022
^D
3) suid, sgid, sticky
suid(set effective user identifier)와 sgid(set effective group identifier)는 특별한 권한으로 4자리 퍼미션 표기를 통해 설정한다.
suid는 일반 사용자가 파일 소유자의 권한을 실행할 수 있도록 한다. 보안에 문제가 있기 때문에 사용시 주의를 요하며 절대 표기값 4000으로 설정한다.
sgid는 다른 그룹에게 소유 그룹의 실행 권한을 부여한다. 즉, 다른 그룹에 속한 사용자가 이 파일의 소유 그룹권한으로 실행하게 되며 절대 표기값은 2000이다.
예를 들어 passwd라는 명령어의 현재 퍼미션을 확인해보면,
[root @edu00 /root]#ls –l `which passwd`
-r-s—x--x 1 root root 13536 Jul 12 2000 /usr/bin/passwd
사용자(user) 접근 권한이 x 대신 s로 설정되어 있다. 본래 이 실행 파일은 root만이 실행할 수 있는 명령어이지만 setuid가 설정되어 있기 때문에 일반 사용자도 이 명령어를 실행할 수 있다. 즉, 일반 사용자가 이 명령어를 이용하여 자신의 패스워드를 변경할 때 패스워드 저장 파일인 /etc/passwd, /etc/shadow 파일에 그 내용이 기록이 된다. 하지만 본래 의미에서는 일반 사용자가 지정한 패스워드는 이 파일에 저장될 수 없다.
[root @edu00 /root]#ls –l /etc/passwd
-rw-r—r— 1 root root 1257 Jul 12 2000 /etc/passwd
[root @edu00 /root]#ls –l /etc/shadow
-rw-—--- 1 root root 997 Jul 12 2000 /etc/shadow
sticky bit은 모든 사용자가 쓸 수 있는 디렉토리에 적용하여 디렉토리 내에 있는 파일들은 임의대로 삭제할 수 없고 오직 소유자만 삭제 권한이 주어진다. 일반적으로 /tmp 디렉토리가 대표적이다.
5] 소유권 변경
[root @edu00 linux]#ls -l file
-rw-rw-r-- 1 linux web 38 Apr 10 17:41 file
[root @edu00 linux]#chown linux1 file
: user(owner)를 linux1로 변경한다
[root @edu00 linux]#ls -l file
-rw-rw-r-- 1 linux1 web 38 Apr 10 17:41 file
[root @edu00 linux]#chgrp linux2 file
: group의 소유권을 변경한다.
[root @edu00 linux]#ls -l file
-rw-rw-r-- 1 linux1 linux2 38 Apr 10 17:41 file
[root @edu00 linux]#chown .linux1 file
위의 과정을 한번에 할 수 있다.
[root @edu00 linux]#chown linux1.linux2 file
[root @edu00 linux]#chown linux2:linux1 file
7. 파일 검색 find
#find [경로] [수식]
1) 수식
1] 조건
-name filename
-type b : block device 파일
c : character device 파일
d : 디렉토리
f : 일반 파일
l : 심볼릭 링크 파일
p : named pipe
s : socket
-perm mode
-inum number(inode)
-user uname
-group gname
-size n[문자수]
-atime n // n일전 파일에 접근
-ctime n // n일전 파일의 상태 변경
-mtime n // n일전 파일의 내용 변경
-amin n
-cmin n
-mmin n
-links n
-empty // 파일 크기가 0
-uid n
-gid n
2] 작업
exec command ;까지의 문자열을 실행, {}은 현재 선택된 파일명으로 대체
-print()
-fprint file
-printf format
-prune 현재 디렉토리 아래로는 내려가지 않는다.
-ls 파일을 ls -dils 형태로 출력
-ok command -exec와 같지만 매번 사용자에게 실행여부를 질의
3] 예제
#find / -empty
#find / -name "*.mp3"
#find /home -uid 500
/home 디렉토리 하에서 소유자 UID가 500인 파일을 찾음
#find /tmp -type d
/tmp 디렉토리 하의 디렉토리를 찾음
#find /tmp -type f -exec chmod a+x {} \;
/tmp 디렉토리에서 일반적인 파일을 찾은 후에 퍼미션에 실행 퍼미션을 더함
#find . -name "*.[ch]" -type f -exec rm {} \;
확장자가 c나 h인 일반 파일을 찾아 삭제
#find / -user linux -type f -exec mv '{}' /dev/null \;
파일의 소유자가 linux인 일반파일을 /dev/null로
#find / \( -perm -04000 -o -name '*.o' \) -exec ls '{}' \;
8. 디렉토리 구조
1) 최상위 디렉토리(/)
최상위 디렉토리는 root 디렉토리라고 하며 하나의 시스템에 유일하게 하나가 존재한다. root 디렉토리는 root partition이 시작되는 위치이기 때문에 될 수 있는 데로 빈 상태로 유지하는 것이 좋다. root 디렉토리는 모든 디렉토리의 출발점인 동시에 다른 시스템과의 연결점이자 시작점이 된다.
2) /boot
환경 설정 파일을 제외한 부팅 과정에서 필요한 모든 구성 요소들이 위치한다. System.map과 kernel 압축 image 파일이 이곳에 위치한다.
3) /bin
시스템의 모든 사용자가 이용할 수 있는 일반적인 명령어 파일, 즉 실행파일들이 모여 있다. 이 디렉토리에는 많은 필수적인 프로그램들이 포함되어 있다. ls /bin을 해보면 이 안의 파일들을 볼 수 있으며, 예를 들어 ls, cp, mv, mkdir 등의 파일들이 존재한다. 이것들은 이들 명령어들의 실제 프로그램들이다. 따라서 cp 명령을 입력하면 /bin/cp 프로그램이 실행되는 것이다. ls –F를 해보면 /bin 디렉토리의 대부분의 파일들에서 *가 파일명 끝에 추가되어 있는 것을 볼 수 있다. 이는 이 파일들이 실행 가능한 파일임을 표시하는 것이다.
4) /dev
/dev 안의 파일들은 device driver들이다. 이것들은 디스크 드라이버, 모뎀, 메모리 등과 같은 시스템 디바이스나 자원들을 접근하는데 사용된다. 예를 들면 파일들로부터 정보를 읽어 볼 수 있는 방식과 같이 /dev/mouse를 access함으로써 마우스로부터 입력되는 정보를 읽어올 수 있다.
fd로 시작하는 파일 이름들은 플로피 장치들이다. fd0는 첫번째 플로피 디스크 드라이버이며, fd1는 두번째 플로피 디스크 드라이버이다.
5) /etc
시스템의 부팅, 셧다운 시에 필요한 파일들과 시스템 전반에 걸친 설정 파일들 및 초기화 스크립트 파일들이 있다. 시스템에 어떤 문제가 있거나 시스템 전체 환경에 대한 설정을 변경하기 위해서는 환경 설정을 위해서 필요한 파일들이 있는 이 디렉토리에 대해 잘 알아야 한다. 또한 web server 프로그램이나 sendmail 프로그램, bind 프로그램 등의 서비스 구현을 위한 환경 설정 파일들이 이곳에 있다.
6) /home
일반 계정 사용자들의 HOME 디렉토리가 위치한다. 사용자의 계정으로 로그인하였을 경우 처음으로 위치하게 되는 디렉토리이다. 예를 들어 /home/bar는 사용자 bar의 홈 디렉토리이다. 시스템이 새로 설치되면 이 디렉토리는 비어있게 된다.
7) /lib
부팅과 시스템 운영에 필요한 공유 라이브러리(Shared Library)가 위치하며 커널 모듈(Kernel Module)과 사용자 인증 모듈이 위치한다. 공유 라이브러리란 Windows 95/98의 DLL(Dynamic Link Library)과 같이 여러 프로그램들에 의해서 사용되는 기능을 별도의 프로그램으로 분리시켜 놓은 것이다.
커널 모듈도 공유 라이브러리와 같이 커널 안에 자체적으로 포함되지 않고 독립적인 형태로 분리되어 있으면서 부팅시에 커널에 동적으로 연결되어서 전체적인 커널을 유기적으로 구성하게 되는 별도의 파일(Object File)들이다.
사용자 인증 모듈은 사용자 보안을 설정하는 부분으로 /etc/pam.d 이하의 디렉토리를 구성하는 모듈들이 위치하고 있다.
8) /var
내용이 수시로 변경될 수 있는 변수를 담고 있는 파일들이 위치한다. 예를 들면 부팅 중의 시스템 확인 과정은 부팅 때마다 달라질 수 있으므로 부팅 과정을 기록하는 파일들은 이 디렉토리에 위치하게 된다.
/tmp 디렉토리가 파일 자체에 대한 임시 디렉토리인데 반해서 /var 디렉토리는 변경될 수 있는 자료를 포함하고 있는 파일들을 위한 디렉토리이다. 시스템 로그를 비롯한 가변적인 파일들이 기록되는 곳이다.
/var/log/messages
/var/spool
/var/spool/mail
9) /usr
루트 디렉토리와 함께 중요한 시스템 디렉토리 계층을 구성한다. 이 디렉토리에는 공유 가능한 대부분의 프로그램들이 설치되며 네트워크를 이용해서 여러 개의 시스템을 연결할 경우, 이 디렉토리를 공유해서 설치된 프로그램들을 활용할 수 있다. 따라서 /usr 디렉토리는 읽기 전용으로 mount되어야 하며, 가변 자료들은 /var 디렉토리로 심볼릭 링크시켜서 사용하게 된다.
/usr 디렉토리는 다른 시스템과 연결될 경우 시스템 운영과 연관되기 때문에 내부적으로 루트 디렉토리와 유사한 구조를 갖게 된다.
10) /proc
프로세스와 커널의 내부적인 정보를 제공하기 위한 가상 파일 시스템을 위한 디렉토리이다. 이 디렉토리의 내용들은 시스템에서 운영되고 있는 다양한 프로세스들에 관한 내용과 프로그램들에 대한 정보를 포함하고 있다. 이 디렉토리에서 볼 수 있는 정보는 실제 드라이브에 저장되어 있는 내용이 아니라 메모리상에 저장되어 있는 것이다.
11) /sbin
시스템 관리를 위한 전반적인 실행 유틸리티를 포함하고 있으며, 이 디렉토리에 있는 명령어어들은 일반 사용자들은 실행할 수 없다.
12) /lost+found
시스템이 비정상적으로 종료되었을 때 램상에 있는 작업들이 정상적으로 언마운트되지 못하여 이 디렉토리에 저장된다. 파일 시스템의 이상 유무를 진단하고 복구하는 프로그램인 fsck(File System Check)에 의해 사용되는 디렉토리이며 링크 디렉토리로 사용된다. 손상된 파일이나 디렉토리를 /lost+found 디렉토리로 연결한 뒤에 오류를 수정하게 되며, 평상시에는 null 파일 링크에 의해서 비어있는 상태로 존재하게 된다. 리눅스의 파일 시스템인 ext2에 의한 fsck.ext2(File System Check.extended 2) 프로그램이 이 디렉토리를 이용한다.
13) /misc
시스테 아키텍쳐와 무관한 프로그램들과 자료들이 위치한다. 레드햇 리눅스는 이 디렉토리를 구성하지 않는다.
14) /mnt
루트 파일시스템에 연결된 파일시스템들의 마운트 디렉토리이다. 마운트하지 않은 상태에서는 빈 디렉토리로 존재하지만 마운트하게 되면 해당 파일시스템의 내용이 포함된다.
15) /opt
Add-On 소프트웨어 패키지가 설치된다. 레드햇 리눅스는 이 디렉토리를 구성하지 않는다.
16) /tmp
프로세스 진행 중 발생하는 임시 파일들이 저장되는 작업 디렉토리이다. 따라서 이 디렉토리의 파일들은 수시로 생성되고 삭제되므로 중요한 자료일 경우, 이 디렉토리에 보관해서는 안된다.
/tmp 디렉토리는 모든 사용자에 대해서 읽기와 쓰기 작업이 허용되는 퍼미션을 설정하고 있으며, sticky bit이라는 특별한 설정에 의해서 파일의 소유자만이 자신의 소유로 되어 있는 파일을 지울 수 있도록 설정되어 있다.
9. 파일 시스템 종류
1] 파일 시스템 개요
리눅스에서 기본적으로 사용되는 파일 시스템은 ext2(Extended 2) 파일시스템이다. 초기에 리눅스는 Minix라는 교육용 OS의 파일시스템을 사용했지만, 여러 차례의 변화를 거쳐 ext2 파일시스템을 사용하게 되었다.
이 외에도 CD-ROM에서 사용하는 iso9660, 윈도우에서 사용하는 FAT과 VFAT, 그리고 minix, NFS, sysv 등 여러 종류의 파일 시스템을 지원하며, 이러한 파일시스템 형식으로 만들어진 파일이나 디렉토리를 인식할 수 있다.
리눅스 커널이 지원하는 파일 시스템 중 리눅스의 root 파티션으로 사용할 수 있는 것은 몇 종류가 있지만, 기본적으로는 ext2가 사용된다. 최근에는 캐시(cache)에 저장된 데이터를 실제로 디스크에 기록할 때 시스템이 다운되면 파일시스템이 깨지는 ext2의 약점을 보완한 journaling 파일 시스템이나 TUX2 같은 새로운 개념의 파일 시스템들이 등장하여 보다 더 안정적인 파일시스템이 제공될 예정이다. 또한 커널 버전 2.4에서는 journaling 파일 시스템인 ReiserFS가 제공되고 있다.
리눅스 파일 시스템은 모든 파일들이 /(root 디렉토리) 아래에 tree 구조로 연결되어 있다. 모든 디렉토리나 장치들도 모두 이 아래에서 찾아 낼 수 있다. 또한 파일 시스템에 접근하기 위해 mount 라는 명령어로 root 디렉토리 아래의 한 디렉토리로서 접근이 가능한 상태로 만든 후 사용할 수 있다.
2] ext2 파일 시스템의 특징
255자까지 파일 이름을 생성할 수 있으며, 필요하다면 1,012자까지도 가능하며 확장자 개념은 필요하지 않다. 다만 .xxx 파일 이름을 짓는 경우는 파일 이름으로 그 파일을 분류하거나 특성을 나타내기 위한 것이 대부분이다.
파일 이름 중 .으로 시작하는 파일 이름은 Hidden 파일로 일반적으로 환경을 설정하는 용도로 사용되고 있으며 명령행에서 ls –a 명령으로 확인이 가능하다. 또한 이 명령으로 나타나는 리스트에 .과 ..이 포함되는데, .은 현재 디렉토리를 나타내고 ..은 상위 디렉토리를 나타낸다.
ext2 파일 시스템의 크기는 원래 소스코드에 의하면 2GB까지로 제한되어 있지만 최근 VFS(Virtual File System)의 사용으로 4TB까지도 가능하며 이로 인해 파티션을 여러 개로 나누지 않고도 큰 사이즈의 디스크 사용이 가능하다.
3] ReiserFS
ReiserFS는 디스크에 있는 index가 갱신되기 전에 정전을 비롯한 시스템 이상으로 비정상적인 종료를 하더라도 index 관련 정보가 log로 남아 index의 재작성 및 복구를 용이하게 할 수 있는 journaling 파일 시스템의 종류 중 하나이다.
이러한 journaling 파일 시스템의 종류 중 리눅스 시스템에서 가장 안정적으로 작동하는 것이 바로 ReiserFS인데, 이 파일 시스템은 복구 능력이 좋은 반면에 복구를 위해 불필요한 로그를 생성하느라 시스템 overhead와 I/O 작업이 많아진다.
반면에 현재 리눅스 파일 시스템의 표준인 ext2의 경우는 복구 능력이 떨어지지만 성능을 우선시하여 설계된 파일 시스템이다.
10. /etc 상세분석
리눅스에서 대부분의 소프트웨어의 설정은 /etc 디렉토리에서 이루어지고 있다. 소프트웨어는 자기의 설정 파일을 유지하며, 그 내용을 참조하여 지정한 방식으로 동작하기 때문에 소프트웨어의 설치나 서비스의 제공은 이 설정 파일을 올바로 수정하는 것에 성패가 달려 있다. /etc 하위의 디렉토리와 파일을 무작위로 설명하고자 한다.
1] CORBA/
CORBA(Common Object Request Broker Architecture)에 관련된 파일을 저장한다.
2] DIR_COLORS
파일목록을 나타내주는 ls 명령어의 출력을 컬러화 하기 위한 설정 파일이다. 배포판이나 쉘에 따라서 처음부터 디렉토리가 파란색, 링크가 하늘색 등으로 표시되기도 한다. DIR_COLORS의 내용은 컬러화 할 수 있는 터미널의 지정, 파일의 종류에 의한 색의 설정, 파일의 확장자에 의한 색의 설정이다. 이 부분을 수정하면 ls의 표시를 좋아하는 배색으로 변경할 수 있다. 파일의 종류와 표시색, 속성(굵은 글씨 등)을 나란히 지정하게 되어 있다.
예를 들면 보통의 파일 표시를 노란색 문자와 검은 배경으로 하면
FILE 33:40
와 같이 지정한다. DIR_COLORS의 변경을 반영시키는데 DIR_COLORS를 인수로 지정해 dircolors 명령어를 실행하면 된다. 단, dircolors 명령어는 컬러 표시설정의 명령어를 출력할 뿐이기 때문에 실제로는 다음과 같이 입력한다.
# eval `dircolors /etc/DIR_COLORS`
“ls--color”로 하면 원하는 표시색으로 리스트를 표시할 수 있다. 매번 옵션을 붙이기 싫다면 쉘 기동 시에 읽어들인 파일(~/.bashrc 등)에 alias ls=’ls--color’로 지정한다.
3] HOSTNAME
FQDN(Fully Qualified Domain Name) 형식으로 호스트명이 쓰여져 있는 파일
4] Muttrc
메일 소프트웨어 Mutt의 설정파일이며 Mutt는 동작이 재빠른 텍스트 베이스의 메일 소프트웨어이다. 메일 일람을 쓰레드 표시하거나 메일에 파일을 첨부할 수도 있는 등 기능은 충분하고, 텔넷 등에서 리모트 로그인하고 사용할 수 있는 텍스트 베이스이므로 장점도 있다.
대부분의 형식이 명령어 아웃된 형태로 준비되어 있기 때문에 자신의 환경에 맞게 바꿀 수 있다.
5] TextConfig
콘솔화면의 해상도나 폰트, 커서형태 등을 변경한 SVGATextMode 명령어가 참조한 설정 파일이다. MS-DOS 시대에 사용된 Hi-Text나 V-Text와 동등한 기능을 실현한다.
6] X11/
X Window System의 설정 파일군을 저장하는 디렉토리이며, X Window System의 각종 설정 파일이 들어있다. 또 X Window System의 설정 파일을 시작으로 그래픽 로그인 화면의 설정과 로그인 인증 방법 등이 기술된 파일들이 들어있다. 많은 윈도우 매니저의 설정 파일 등도 보존되어 있다.
7] adjtime
하드웨어 클럭을 설정하는 hwclock이 사용하는 파일로, 시각을 보다 정확히 맞추기 위한 파라미터가 기술되어 있다. 하드웨어 클록은 부정확하기 때문에 오차를 적게 하기 위해 사용되는 것이다.
만약 다음과 같은 내용이 파일에 기록되어 있다면
0.000000 1017884970 0.000000
먼저 1행째는 3개의 파라미터가 기술되어 있고 의미는 다음과 같다.
첫번째 파라미터는 하루에 빗나간 시각(부동 소수점 10진)을 의미하고 두번째 파라미터는 전 회에 시계를 맞춘 시각(1970년 1월 1일 0시 0분 0초 UTC에서의 경과 초수)을 의미하고 세번째 파라미터는 제로(0)을 의미하는데, 이것은 clock 명령어와의 호환성을 위해 준비되어 있기 때문에 이전에는 시각을 맞출 때 끝 수가 버려진 초수를 넣었다.
1017884970
이 행은 1행째의 두번째 파라미터와 같이 1970년 1월 1일 0시 0분 0초 UTC(Universial Time Coordinated:세계 협정 시)부터의 경과 초수가 있다.
LOCAL
이 행은 하드웨어 로그가 UTC인지 로컬 타임(LOCAL)인지를 나타내는 문자열이 있다.
여기에 있는 수치는 hwclock 명령어가 설정하기 때문에 시스템 관리자는 설정할 필요는 없다. 다만 adjtime을 사용해 시각을 정확히 유지한다면 타임서버에서 정확한 시간을 취득한다는 것은 확실하다.
8] aliases, aliases.db
메일 계정의 별명을 정의하는 데이터베이스 파일이다. 주의할 점은 sendmail은 aliases가 아닌, 이것을 토대로 만들어진 바이너리 파일인 aliases.db를 참조하고 있다는 것이다. 따라서 aliases를 바꿔 쓰고 aliases.db 파일을 갱신하지 않으면 설정에 반영되지 않는다. aliases.db 파일의 갱신에는 newaliases 명령어를 사용한다. 루트 사용자가 되어 인수 없이 실행하면 된다.
# newaliases
/etc/aliases: 14 aliases, longest 10 bytes, 152 bytes total
9] amd.conf, amd.net
파일 시스템을 자동으로 마운트하는 amd 데몬 설정 파일이다. 레드헷 이외에는 동등한 기능을 가진 automount로 되어 있다.
10] anacrontab
24시간 가동하지 않는 시스템을 위한 cron이며 anacrontab은 anacron의 설정 파일이며 cron과 유사한 명령어이다. 연속으로 동작하고 있지 않은 시스템용의 cron이라고 생각하면 될 것이다. anacrontab의 서식은 반복 주기(일 단위), 실행할 때의 지연 시간(분 단위), 이름, 명령어를 한 행에 쓰게 되어 있다. cron용의 설정을 유용하고, 실행빈도가 하루, 일주일, 한 달의 명령어를 같은 빈도로 반복하도록 설정하고 있다. anacrontab 명령어는 앞 회에 기동한 일시를 기록하고 있고 이번 회의 기동 시간과의 차이를 보인 결과를 anacrontab에 기록되는 반복 주기와 비교한다. 반복 주기가 짧은 경우 그 행에 쓰여진 지연 시간(분)만 기다린 후 명령어를 실행한다.
예를 들어 지난 회 anacrontab을 기동한 것이 3일 전이라면 5분 후,
# run-parts /etc/cron.daily
가 실행된다. run-parts는 디렉토리 이하의 스크립트를 순차적으로 실행하는 명령어이다.
anacron 명령어는 시스템이 기동될 때 실행하도록 해 두면 될 것이다.
11] at.deny, at.allow
특정한 시간에 특정한 명령을 지정해 실행하기 위한 at 명령어가 있다. at은 다양한 방법으로 시간의 지정이 가능하다. at.allow와 at.deny는 at을 이용할 사용자를 지정하기 위한 설정 파일이다. at는 다음과 같은 순서로 사용자의 퍼미션을 확인한다.
/etc/at.allow가 있으면 거기에 쓰여있는 사용자만이 at 명령어를 이용하는 것이 가능하다.
/etc/at.allow가 없이 /etc/at.deny가 있으면 at.deny에 쓰여있지 않은 사용자만이 at 이용이 가능하다. 그리고 수퍼 사용자는 어떤 경우라도 이용이 가능하다. 빈 /etc/at.deny만 있으면 모든 사용자가 at를 이용할 수 있다.
12] auto.master
파일 시스템을 자동으로 마운트하는 automount 데몬 설정 파일이다. 프롬프트에서 automount를 실행할 수도 있지만 제어 스크립트가 /etc/rc.d/init.d/autofs로서 준비되어 있기 때문에 이것을 이용하든지 ntsysv 명령어를 준비해 실행하면 된다.
auto.master는 마운트 포인트(/misc), 맵 파일 이름(auto.misc)을 기술하고 옵션으로 자동 언마운트까지의 시간 등을 지정할 수 있다.
다음의 예를 보자.
# $Id: auto.master,v 1.2 1997/10/06 21:52:03 hpa Exp $
# Sample auto.master file
# Format of this file:
# mountpoint map options
# For details of the format look at autofs(8).
# /misc /etc/auto.misc --timeout=60
오토 마운트에서 마운트하는 파일 시스템은 /misc 이하에 배치되고 디바이스로서는 /etc/auto.misc에 지정한 CD-ROM과 플로피 디스크를 이용할 수 있다. 60초간 엑세스되면 자동적으로 언마운트되도록 되어있다.
13] auto.misc
automount 데몬이 이용하는 맵 파일이며, auto.misc는 자동 마운트 하고싶은 디바이스의 키, 파일 타입 등의 옵션, 그리고 디바이스 파일명을 한 행씩 기술한다. 각각의 디바이스는 auto.master에서 지정한 마운트 포인트하의 서브디렉토리로서 액세스할 수 있다.
다음의 예를 보자
# $Id: auto.misc,v 1.2 1997/10/06 21:52:04 hpa Exp $
# This is an automounter map and it has the following format
# key [ -mount-options-separated-by-comma ] location
# Details may be found in the autofs(5) manpage
cdrom -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
# the following entries are samples to pique your imagination
#linux -ro,soft,intr ftp.example.org:/pub/linux
#boot -fstype=ext2 :/dev/hda1
#floppy -fstype=auto :/dev/fd0
#floppy -fstype=ext2 :/dev/fd0
#e2floppy -fstype=ext2 :/dev/fd0
#jaz -fstype=ext2 :/dev/sdc1
#removable -fstype=ext2 :/dev/hdd
/dev/cdrom(일반적으로 /dev/hdc)로 표시되는 드라이브에 CD-ROM을 넣는다. 명령어 라인에서
$ls /misc/cdrom
으로 해서 자동적으로 CD-ROM이 마운트되고 리스트가 표시된다. 하나하나 mount/umount를 할 필요가 없기 때문에 편리하게 사용할 수 있다.
이 외에 네트워크로 접속되지 않은 유닉스 머신 디렉토리나 Windows 파티션도 NFS나 SMB 파일시스템을 이용해서 자동 마운트시킬 수 있다
14] bashrc
bash 기동시에 실행되는 설정파일(~/.bashrc)의 템플릿이며, 사용자가 로그인한 후 실행시킨 명령어들에 대한 쉘 관련 파일이다. 이 파일은 리눅스의 표준 쉘인 bash 기동 시에 모든 사용자 공통 설정항목을 기록하기 위한 파일이다. bash가 자동적으로 읽어 들이는 것이 아니라 각 사용자의 ~/.bashrc에서 처음 읽어 들여 설정된다. propfile이 로그인할 때만 실행되는 것에 비해 ~/.bashrc는 쉘이 기동할 때마다 실행된다.
15] cdrecrod.conf
cdrecord 명령어의 설정 파일
16] charsets/
Mutt의 character set 정의파일을 저장하는 디렉토리이며 사용자가 파일을 수정할 필요는 없다.
17] codepages/
윈도우와 파일/프린터를 공유하기 위한 데몬인 Samba 설정 파일군이며 Samba에서 이용하는 각국어에 대응하는 코드 페이지 데이터를 저장하는 디렉토리이다.
18] conf.linuxconf
linuxconf의 모듈을 기술한 파일로 리눅스 통합 설정 툴인 linuxconf가 참조하는 설정 파일이다. linuxconf 인스톨 후의 모듈 등이 기술되어 있지만 특별히 설정할 필요는 없다.
19] conf.modules, modules.conf
modprobe가 이용하는 loadable module 설정 파일이며, 하드웨어 디바이스 드라이버나 파일 시스템용 드라이버 등을 필요에 맞게 커널에 넣을 수 있다. 이 기능은 커널 모듈의 on demand loading이라고 불린다. RPM 패키지에는 modutils라는 패키지가 제공되는데, 여기에는 depmod, modprobe, insmod 등의 명령어에 의해 실현되고 있다. conf.modules/modules.conf는 depmod, modprobe 명령어의 설정 파일이다. 일반적으로 이 파일에는 각양 각색의 설정을 할 수 있지만 실제로는 alias를 지정해 사용하고 있는 하드웨어용 드라이버를 자동적으로 넣는 것이 가장 많이 쓰인다.
20] cron.d/
crontab 명령어의 설정 파일을 저장하는 디렉토리이다.
21] cron.daily/
하루에 1회 자동 실행시키고 싶은 스크립트를 저장하는 디렉토리
22] cron.hourly/
1시간에 1회 자동 실행시키고 싶은 스크립트를 저장하는 디렉토리
23] cron.monthly/
1개월에 1회 자동 실행시키고 싶은 스크립트를 저장하는 디렉토리
24] cron.weekly
1주일에 1회 자동 실행시키고 싶은 스크립트를 저장하는 디렉토리
25] crontab
crontab 명령어의 설정 파일이며, 주기적으로 같은 프로그램을 몇 회 실행하고 싶을 때는 crontab 명령어를 이용한다. cron.d, cron.hourly, cron.daily, cron.weekly, cron.monthly의 각 디렉토리내의 파일과 crontab 파일은 crontab 명령어에 관련된 설정 파일이다. crontab 파일 서식은 일시, 사용자, 명령어를 공백으로 구분해서 한 행에 쓰게 되어 있다. 날짜는 분/시/일/월/요일 5개의 탭으로 구분해서 순서대로 나열해 가는 방법으로 지정한다. 구체적인 수치로 지정하는 것 외에 “,”(콤마)로 구분해 복수의 숫자를 나열하기도 하고 “/”로 증가값을 지정할 수도 있다. 또 임의를 나타내는 “*”도 사용할 수 있다.
26] csh.cshrc
C 쉘 기동시에 실행되는 설정파일(~/.cshrc)의 디렉토리이며, c 쉘 관련 설정 파일들이 있다. 만일 시스템이 c 쉘을 사용하고 있다면 이 파일을 읽어서 환경을 설정하고 명령을 실행한다.
csh는 기동될 때마다 ~/.cshrc를 실행하고 로그인할 때는 ~/.login을 실행하게 되어 있다.
27] csh.login
C 쉘 로그인시에 실행되는 설정 파일(~/.login)의 디렉토리이며, c 쉘 관련 로그인 설정 파일들이 위치한다. 일반적으로 로그인 계정의 홈 디렉토리에 이 파일이 히든 파일로 존재하지만 만약 존재하지 않는다면 /etc 아래에서 로그인시 읽어들이게 된다.
28] default/useradd
신규 사용자용 디폴트 설정을 기술한 파일을 저장하는 디렉토리이며 useradd 명령어로 등록하는 사용자 계정에 대한 기본값 설정이 기술된 useradd 파일이 있다. useradd 파일은 다음과 같은 내용으로 되어 있다.
(1) GROUP
사용자가 표준으로 속한 그룹 ID를 지정한다. 단, useradd 명령어는 사용자 ID와 그룹 ID을 같게 하기 위해 레드햇이 방법을 변경하고 있기 때문에 이 수치는 레드햇계 배포판에서는 「-n」옵션을 붙인 경우만 유효하다.
(2) HOME
홈 디렉토리를 만드는 디렉토리를 지정한다. 사용자의 홈디렉토리는 보통 /home의 아래에 작성하기 때문에 변경할 필요는 없다.
(3) INACTIVE
패스워드의 유효기간 후에 계정을 무효화하는 기간을 하루 단위로 지정한다. -1은 account를 무효로 하지 않고, 0은 패스워드의 유효기간과 함께 account를 무효로 하는 지정이다.
(4) EXPIRE
패스워드의 유효기간을 INACTIVE와 마찬가지로 하루 단위로 지정한다.
(5) SHELL
사용자가 표준으로 사용하는 쉘을 full path로 지정한다. 보통은 /bin/bash이지만 /etc/shells에 지정되어 있는 쉘을 지정하여 사용할 수 있다. 패스워드의 유효기간과 패스워드의 유효기간의 account 잠금(lock)은 다음에 기술할 shadow 파일에 쓰여있다.
(6) SKEL
사용자의 홈 디렉토리에 공통적으로 복사할 내용을 가지고 있는 디렉토리를 지정한다. 보통은 /etc/skel디렉토리에 있는 파일이 사용자의 홈 디렉토리에 복사된다. 이 디렉토리에는 .bash_profile나 .Xdefaults 등이 포함되어 있다.
29] dhcpc/
DHCP 클라이언트 데몬 dhcpcd가 네트웍 정보를 보존하는 디렉토리
30] dumpdates
BSD 유래의 백업 툴 dump는 파일 시스템(한 개의 파티션) 안의 파일을 테이프 등의 디바이스에 백업한다. 백업을 작성하면 dumpdates에 덤프레벨과 일시, 그리고 시각 등이 기록된다.
예를 들어 dumpdates에,
/dev/hda6 3 Sun Aug 27 20:39:01 2002
로 기록되어 있으면 파일시스템 /dev/hda6이 최후로 백업된 것은 8월 27일로 덤프레벨은 3이라는 의미이다. 덤프 레벨은 0-9의 숫자에서 dump 명령어 실행시에 인수로 지정한다. 덤프 명령어는 인수로 지정된 덤프레벨보다 작은 덤프레벨의 백업 기록이 dumpdates 파일 중에 발견되면 거기에 기록된 일시 이후에 갱신된 파일을 백업하고 발견되지 않으면 파일시스템 전체를 백업한다. 이러한 방식으로 백업을 계속 유지한다.
다만 리눅스용 덤프 명령어는 ext2에서만 대응하기 때문에 주의해야 하고 덤프 명령어로 한 백업은 resotre 명령어로 복구한다.
31] enscript.cfg
텍스트 파일을 PostScript로 변환하는 enscript의 설정 파일
32] esd.conf
Enlightened Sound Daemon 설정 파일
33] exports
nfs(Network File System) 서버의 설정 파일
34] fb.modes
디스플레이 프레임 버퍼 디바이스의 데이터베이스 파일이다. 프레임 버퍼 advice를 설정한 fbset 명령어가 참조한 프레임 버퍼의 모드가 기술되어 있다. 각 해상도에 있어서 도트 수나 주파수 등이 기술되어 있다. fb.modes는 X Window System이 참조하는 것은 아니기 때문에 보통의 사용자에게는 그다지 관련이 없다. 레드햇 리눅스만 존재한다.
35] fdprm
플로피 디스크의 파라미터가 정의된 파일로 파라미터는 setfdprm 명령어가 참조한다. 특별한 드라이브를 사용하고 있지 않다면 변경할 필요는 없다.
36] filesystems
mount 명령어로 파일 시스템의 형식을 지정하지 않은 경우나 파일 시스템의 타입에 auto를 지정한 경우로 파일 시스템이 자동으로 인식할 수 없었던 경우, 이 파일에 기술되어 있는 파일 시스템의 형식에서 마운트해 보려고 시도해본다. 파라미터의 지정 방법은 단순히 파일 시스템이 나열되어 있을 뿐이며 “nodev”를 붙인 파일 시스템의 형식은 제외된다. 보통 사용된 파일 시스템은 자동인식 되기 때문에 파일 시스템들에 새로운 파일 시스템을 더 할 필요는 거의 없을 것이다.
37] fnrc
font rendering 라이브러리 fnlib의 설정 파일
38] fstab
파일 시스템과 마운트 포인트를 기술하는 파일이며 /etc/rc.d/rc 파일 안의 mount –a 명령에 의해 마운팅되는 파일 시스템과 스왑 영역의 목록이다.
fstab은 파일 시스템을 구성하는 파티션이나 removable 디스크 등의 디렉토리상에 있어서 마운트 포인트가 기록되어 있는 파일이다. 일종의 파일 시스템의 설계도라고 할 수 있다.
기동시에는 fstab에 기록되어 있는 순서대로 파티션이 마운트되어 한 개의 디렉토리 트리가 만들어지기 때문에 fstab의 앞 행은 반드시 “/”(루트) 파티션을 기술한다.
39] ftpaccess
FTP 서버의 설정파일
40] ftpconversions
FTP 서버에서 압축/아카이브 전송시의 명령어와 확장자의 설정파일
41] ftpgroups
FTP 서버에서의 그룹명과 실제 그룹명의 대응 및 패스워드를 정의한다.
42] ftphosts
FTP 서버에 엑세스를 허가/금지하는 호스트를 설정하는 파일
43] ftpusers
FTP 엑세스를 금지하는 사용자를 설정하는 파일
44] gated.conf.sample
동적 경로설정 데몬 gated의 설정 파일 견본으로 같은 데몬에 routed가 있지만 routed가 RIP(Routing Information Protocol)만을 사용하는 것에 비해 gated는 OSPF(Open Shortest Path First Protocol)등에도 대응된다. 그 gated의 설정을 하는 파일이 gated.conf로 gated.conf.sample은 그 예이다.
인터넷에 접속하고 있는 경우, 부주의하게 routed나 gated를 동작시키면 프로바이더의 네트워크 등에 악영향을 미칠수 있다.
45] gettydefs
getty가 이용되는 시리얼 설정 일람
46] gnome/
GTK+의 국제화 대응 캐릭터세트 정의파일을 저장하는 디렉토리
47] gpm-root.conf
gpm-root의 설정 파일이며, 콘솔화면으로의 마우스 기능을 설정한다. cut & paste와 마우스 서버(gpm)의 디폴트 마우스 핸들러의 설정 파일이며 X Window System이 일반적으로 사용되어지는 환경에서는 설정할 필요는 없다.
48] group, group-
group 파일은 사용자 그룹을 정의하고 있는 파일이다. 그룹은 파일의 읽고 쓰는 속성과 실행속성으로 이용되는 것이다. 사용자 리스트에 열거되어 있는 사용자가 그 그룹에 속해있게 된다. 현재에는 shadow 패스워드가 일반적으로 사용되기 때문에 암호화되어 있는 것을 나타내는 x만이 있다. group-파일은 group 파일의 백업으로 수정 전의 내용이 보존되어 있다. 그룹 패스워드는 newgrp로 그룹 ID를 변경할 경우에 필요하게 된다.
49] gshadow, gshadow-
암호화된 그룹 패스워드를 기술한 파일이며 gshadow-는 백업파일이다. 이 파일은 보안을 위해 관리자 이외는 참조할 수 없도록 해 둔다.
50] gtk/
The GIMP ToolKit(GTK+)의 국제화 대응 캐릭터셋트 정의 파일을 저장
51] host.conf, nsswitch.conf
host.conf 파일은 libc5라고 하는 표준 C 라이브러리로 사용되어지는 설정파일이지만 현재 거의 모든 디스트리뷰션이 libc5를 대신해 glibc2를 채용하고 있다. glibc에서는 host.conf가 맡고 있는 역할이 nsswitch.conf라는 파일로 옮겨지고 있다. 호환성을 위해 설정 변경은 두개의 파일에서 행해주는 편이 좋다.
nsswitch.conf에서는 시스템 데이터베이스와 NSS(Name Service Switch)를 설정한다. 예전의 유닉스계 시스템 데이터베이스는 로컬 머신에 있는 passwd 등의 파일을 이용하고 있었지만 NIS(Network Information Service) 등을 이용하고 시스템 데이터베이스를 서버로 일원관리하는 경우도 많았다. 이러한 경우에 시스템 데이터베이스의 정보원으로 참조할 우선 순위를 nsswitch.conf로 설정한다. 또 이름을 해결하기 위한 네임 서비스의 참조 순서도 이 파일로 설정한다.
52] hosts
로컬에서 이름을 해결하기 위한 호스트명과 IP Address 정의 파일이며, 소규모의 LAN에서 DNS 서버를 거치지 않고 hosts 파일에 IP address와 호스트명을 열거하여 좀 더 빠른 네임서비스를 받을 때 사용되는 설정 파일이다. hosts 파일을 이용해서 이름을 해결하는 데는 다음에 말할 host.conf나 nsswitch.conf 에서 DNS를 참조하기 전에 hosts 파일을 참조하도록 설정할 필요가 있다. hosts 파일에 의한 이름을 해결하는데 대한 결점은 모든 시스템이 최신정보를 기술한 hosts 파일을 갖지 않으면 안 된다는 것이다. 즉 호스트명이나 IP Address의 변경이 있는 경우에는 모든 시스템의 hosts 파일을 갱신해야한다. 어느 정도의 대수가 연결된 LAN에서는 DNS 서버와 동시에 이용한다.
53] hosts.allow
tcp_wrappers(tcpd)에 의한 액세스 제어의 설정 파일이다. inetd에서 기동된 네트웍 서버 데몬으로의 액세스 제어에 사용된다. hosts.allow에는 접속을 허가한 호스트를, hosts.deny에는 거부한 호스트를 각각의 서비스에 기술한다.
hosts.deny에는
ALL : ALL
을 기술해 두고 접속을 허가한 서비스, 호스트를 hosts.allow에 추가하면 된다.
예를 들어 hosts.allow에
ALL : 127.0.0.1, 192.168.3
이라고 기술해 두면 모든 서비스는 localhost(127.0.0.1)로, IP 어드레스가 192.168.3.0~192.168.3.255의 호스트만을 이용할 수 있게 된다.
54] hosts.deny
inetd 경유에서 기동된 서버의 엑세스 제어파일
55] httpd/
웹 서버 Apache의 설정 파일 등을 저장하는 디렉토리이며, 이 디렉토리 아래에 conf, logs, modules라는 디렉토리가 만들어진다. conf 디렉토리에는 Apache의 설정 파일 httpd.conf, srm.conf, access.conf 파일이 있으며 logs 디렉토리에는 /var/log/httpd 디렉토리로 심볼릭 링크로 Apache의 기능확장 모듈이 들어있다.
56] identd.conf
개인 인증에 사용되는 identd의 설정 파일이며 indentification 프로토콜에 의한 유저 정보 문의에 맞는 데몬 identd의 설정을 저장한다.
57] im_palette-small.pal
화상 이미지 묘사 라이브러리 imlib의 팔레트 설정 파일
58] im_palette-tiny.pal
화상 이미지 묘사 라이브러리 imlib의 팔레트 설정 파일
59] im_palette.pal
화상 이미지 묘사 라이브러리 imlib의 팔레트 설정 파일
60] imrc
화상 이미지 묘사 라이브러리 imlib의 팔레트 설정 파일
61] inetd.conf
인터넷 슈퍼 서버 inetd의 설정 파일이며 커널 버전 2.2.17에서 확장된 xinetd로 바뀌었다.
62] info-dir
GNU 프로젝트에서는 많은 문서를 GNU texinfo 형식으로 배포하고 있다. 리눅스 배포판에는 텍스트 베이스의texinfo 리더 info가 포함되어 있어
$info ls
와 같이 해서 문서를 읽을 수 있다.
info는 texinfo의 하이퍼텍스트에 대응하고 있는데, 인수없이 기동하면 디폴트 파일로서 각종 문서로의 링크를 가진 info-dir 파일이 열린다.
63] initlog.conf
init가 출력하는 로그에 관한 설정 파일
64] inittab
시스템 시동시 init 데몬이 참조하는 설정 파일이다. init가 시작할 때 getty의 목록 파일이다.
시스템 기동시에 init이 실행된다고 했는데 실제로 init이 실행되는 것은 모두 기동 시로 국한되지 않는다. shutdown 명령어에서 호출되기도 하고 사용자가 직접 실행할 수도 있다. Init은 실행 시에 /etc/inittab이라는 설정 파일을 참조한다. 이 inittab에는 run 레벨에 맞게 실행해야 하는 스크립트 파일이 기술되어 있다.
이 중, run 레벨 관련 스크립트 파일은 /etc/rc.d 이하에 있다. 따라서 init, inittab과 rc.d는 뗄래야 뗄 수 없는 관계이다. 단, 이 inittab과 rc.d 이하 스크립트 파일의 구성은 배포판마다 다르다.
65] inputrc
bash 등이 이용하는 행 입력 컬러 라이브러리 Readline의 설정 파일
66] ioctl.save
single user mode에서 이용하는 콘솔 디바이스 설정(init이 작성한다.)
67] irda/
적외선 통신을 하기 위한 irda-utils 패키지의 초기화 스크립트 저장 디렉토리
68] isapnp.gone
ISA 플러그&플레이로 인식할 수 없는 리소스를 기술하는 파일이며 plug & play ISA 카드 설정 툴이다. 보통 isapnptools로 사용되는 파일이며 isapnptools에서는 지정한 리소스를 피해서 리소스를 할당한다. Isapnp.gone에 기술한 파리미터는 COM 포트나 병렬 포트 등의 표준적인 소스나 plug & play에 대응하지 않은 ISA 카드의 리소스 등을 기술한다. 그러나 대부분의 경우 isapnp.gone에 기술할 필요는 없을 것이다.
69] isdn/
ISDN 카드 지원 설정 파일을 저장
70] issue
로그인 프롬프트 이전에 출력되는 getty 출력문서 파일이다. 로컬에서 로그인할 때 표시되는 메시지를 저장한다.
71] issue.net
원격에서 텔넷으로 로그인할 때 프롬프트의 앞에 표시되는 메시지를 저장한다. 일반적으로 디스트리뷰션명, 커널 버전, 호스트명 등이 저장되어 있다.
73] krb5.conf
Kerberos의 설정 파일
74] ld.so.cache
공유 라이브러리를 검색할 때 이용되는 캐시파일이다. 이 파일은 바이너리 파일이기 때문에 사용자가 편집할 수 없다. 이 파일과 ld.so.conf 파일들은 동적 링크(dynamic link)된 라이브러리를 읽어들이기 위해 사용되는 파일이다. 리눅스의 바이너리 파일에 따라 실행할 때 동적 라이브러리를 읽어들일 필요가 있다. 동적 링크 프로그램은 라이브러리를 내부에 가진 프로그램과 비교해 프로그램의 크기를 작게 할 수 있다.
75] ld.so.conf
공유 라이브러리를 저장하는 디렉토리를 기술하는 파일이며, 동적 라이브러리를 검색할 디렉토리를 기술하고 있다. 일반적으로 /usr/lib/sconv나 /usr/X11R6/lib 등이 포함되어 있다. 이 파일은 특수한 라이브러리를 필요로 하지 않는 한 변경할 필요는 없다.
76] ldap.conf
LDAP(Lightweight Directory Access Protocol)을 NSS(Name Service Switch)로 이용하기 위한 클라이언트 모듈 nss_ldap의 설정 파일이다. nss_ldap을 도입하면 nsswitch.conf내에서 지정할 서비스명에 files나 nis 등을 더해 ldap을 지정할 수 있게 된다.
77] lilo.conf
lilo 설정 파일
78] linux-terminfo
사용되고 있는 콘솔에 관한 데이터가 저장
79] lmhosts
Samba가 NetBIOS명 해결에 이용하는 호스트명과 IP Address 정의 파일
80] localtime
시스템의 timezone이 쓰여져 있는 바이너리 파일
81] login.defs
login 명령에 사용되는 설정 파일이다. 로그인시의 패스워드 유효기간이나 패스워드 길이 그리고 일반 사용자의 id의 범위를 지정한 파일이다.
82] logrotate.conf
커널이나 데몬의 가동 상황을 기록한 로그는 방치해두면 한없이 늘어나게 된다. 하지만 로그를 하지 않은 것은 상당히 위험한 일이다. 이것을 해결한 것이 바로 logrotate 유틸리티이다.
logrotate는 logrotate.conf에서 설정하는 내용에 따라 로그 파일을 분할해 옛 로그를 압축/삭제한다.
웹 서버 데몬인 apache 등 RPM 파일에서 데몬 패키지를 인스톨하면 logrotate의 설정 파일이 logrotate.d 디렉토리에 인스톨된다. 레드햇 계열의 배포판은 logrotate.d 디렉토리 이하에 인스톨된 파일을 logrotate.conf에서 호출해 각각의 데몬 로그를 처리할 수 있도록 하고 있다.
/var/log 디렉토리를 보면 로그는 1주마다 분할되고 옛 로그에는 파일명 끝에 .1, .2 등의 숫자가 기입되어 4주간 보존되고 있는 것을 알수 있다.
83] logrotate.d/
RPM 패키지에서 인스톨한 데몬을 위한 logrotate 설정 파일을 저장
84] ltrace.conf
라이브러리 trace의 설정 파일
85] lvs.cfg
레드햇 클러스터링 서비스의 데몬 콘솔 설정 파일
86] lynx.cfg
텍스트 베이스 웹브라우저 Lynx의 설정 파일
87] mail/
Sendmail이 이용한 데이터베이스 파일 등을 저장한다.
88] mail.rc
메일 명령어의 설정 파일
89] mailcap
metamail 설정 파일(멀티미디어 메일의 처리)
90] mailcap.vga
metamail 설정 파일(멀티미디어 메일의 처리)
91] man.config
man 명령어의 설정 파일
92] mc.global
파일 매니저 GNU Midnight Commander의 설정 파일
93] mesa.conf
OpenGL호환 3D 라이브러리 Mesa의 설정 파일
94] mgetty+sendfax/
mgetty+sendfax 패키지의 설정 파일을 저장하는 디렉토리
95] midi/
MIDI 플레이어의 palymidi 등이 이용하는 음색파일 저장 디렉토리
96] mime-magic
파일내용에서 MIME 형식을 판정하기 위한 정의파일
97] mime-magic.dat
mime-magic에서 만들어진 데이터베이스 파일
98] mime.types
웹 서버 Apache가 이용하는 MIME 정의 파일
99] minicom.users
시리얼 통신 프로그램 minicom의 유저 설정 파일
100] motd
로그인할 때 화면에 출력하는 메시지를 기술하는 파일이며 일면 “Message Of The Day”의 약자로 바른 사용자명과 패스워드를 입력해 로그인에 성공한 후 화면에 출력되는 메시지가 포함되어 있다. RedHat 계열에는 아무 내용도 쓰여있지 않다.
101] mtab
마운트되어 있는 파일 시스템의 일람이 쓰여져 있는 파일이며 /etc/rc/rc.d와 mount나 umount 명령에 의해 설정되며, 마운팅된 파일시스템의 목록이 필요할 때 사용된다.
102] mtftpd.conf
리모트 부트 데몬 pxe에서 이용하는 MTFTP 서버의 설정 파일
103] mtools.conf
도스의 디스크를 읽고 쓰는 툴 패키지 mtools의 설정 파일이다. 일반적으로 리눅스는 도스나 윈도우에서 사용되는 FAT 파일 시스템을 지원하고 있다. 그러나 FAT 파일시스템의 플로피 디스크를 읽고 쓰는데 하나하나 마운트한다거나 언마운트하는 것은 의외로 귀찮은 일이다.
mtools는 마운트하지 않고 FAT이나 VFAT 파일시스템의 디스크를 사용하는 툴이다. mcopy나 mdel. Mdir 등 도스에서 익숙한 명령어에 “m”이 붙은 툴이 여러 개 준비되어 있다.
예를 들면,
#mcopy /etc/issue a:issue
와 같이 하면 /etc/issue 파일을 FAT 파일시스템의 플로피 디스크에 복사할 수 있다.
이 예는 플로피 디스크를 지정하는데 a:로 하고 있다. 이것은 mtools.conf 파일에서 드라이브 a를 /dev/fd0로 설정했기 때문이다. 이 외에도 하드 디스크의 FAT 파티션을 임의의 드라이브로 할당할 수도 있다.
104] named.boot
DNS 서버 BIND4의 설정 파일
105] named.conf
DNS 서버 BIND8의 설정 파일
106] news/
NetNews 서버 INN의 설정 파일을 저장
107] nmh/
MH를 베이스로 한 메일 툴 nmh의 설정 파일을 저장
108] nscd.conf
네임 서비스 참조 캐시 데몬 nscd의 설정 파일이며 nscd는 NIS+나 DNS 등의 네임 서비스에서 참조한 정보를 캐시하는 데몬이다. 네트워크를 사이에 둔 데이터 참조를 줄일 수 있기 때문에 특히 NIS+에서는 퍼포먼스 향상이 이루어질 것이다.
109] nsswitch.conf
시스템 데이터베이스와 네임 서비스 스위치의 설정 파일
110] ntp/
Network Time Protocol(NTP)을 이용하기 위한 xntp3 패키지가 데이터를 저장한다. NTP(Network Time Protocol)를 사용하면 네트워크를 사이에 두고 시스템의 시간을 맞출 수 있다. 리눅스에서 NTP르 이용할 경우, xntp3이라는 패키지가 많이 사용되었다. xntp3에는 xntpd라는 NTP 서버 데몬이 포함되어 있어 다른 NTP 서버와 협조 동작하는 것으로 시계의 작동 시기를 일치시킬 수 있다. ntp 디렉토리는 xntpd가 동작할 때 반드시 데이터를 넣을 디렉토리로, ntp.conf는 xntpd의 설정 파일이다.
리눅스 시스템의 시간을 맞추는 것이 목적이면 xntpd를 기동해 NTP 서버로 할 필요는 없다. xntpd3 패키지에는 ntpdate라는 NTP 클라이언트 소프트웨어도 준비되어 있기 때문에, NTP 서버의 이름을 인수로 해서 이것을 실행하면 시간을 설정할 수 있다.
다음은 ntpdate를 실행시켰을 때의 결과물이다.
linux1:~ # ntpdate timeserver.ascii.co.jp
12 Apr 17:08:33 ntpdate[5225]: can't find host timeserver.ascii.co.jp
12 Apr 17:08:33 ntpdate[5225]: no servers can be used, exiting
111] ntp.conf
Network Time Protocol 서버 xntpd의 설정 파일
112] nwserv.conf
mars(Netware 에뮬레이터) 설정 파일
113] nwserv.stations
mars용 Netware 스테이션 설정 파일
114] openldap/
Open LDAP(Lightweight Directory Access Protocol) 설정 파일
115] pam.d/
pam.d 디렉토리에는 PAM(Pluggable Authentication Modules: 장착식 인증 모듈)의 설정 파일이 있다. 주로 사용자 인증과 서비스로의 액세스 인증에 PAM을 사용하고 있다. PAM의 장점은 모듈화 되어 있기 때문에 인증 순서가 완전히 캡슐화 된다는 것이다. 이것에 의해 프로그래머는 간단한 순서로 안전한 인증 절차를 내장할 수 있다. login과 su 명령어도 PAM을 사용해 인증되고 있다.
pam.d 디렉토리에 있는 설정 파일에는 인증에 필요한 모듈이 순서대로 기술되어 있다. 여기에 기재된 순서와 모듈에 의해 인증된다.
PAM은 특히 고기능으로 설정 파일을 변경하기 때문에 사용자가 로그인할 수 있는 시간대를 지정하기도 하고, 디스크의 용량을 제한하는 quota와 같은 기능이 실현될 수 있기 때문에 부주의하게 변경해 버리면 로그인할 수 없게 되기도 하고, 보안 취약점이 생길 가능성이 있기 때문에 반드시 주의할 필요가 있다.
116] paper.config
용지 크기의 정의 파일
117] passwd, passwd-
passwd에는 사용자마다 사용자명(로그인명), 암호화된 패스워드, 사용자 ID, 그룹ID, full name(또는 comment), 홈 디렉토리, 표준 쉘이 순서대로 쓰여져 있다. 현재는 섀도우 패스워드가 사용되기 때문에 암호화된 패스워드란에는 암호화를 나타내는 x만이 있다. 현재는 사용자 정보만이 있는 파일이다. 이 파일은 텍스트 파일로 구성되어 있기 때문에 텍스트 에디터로 편집할 수도 있지만 부주의하게 변경해 버리면 사용자가 로그인을 할 수 없게 되어 버리는 등의 문제가 발생하기 때문에 주의가 필요하다. 되도록 passwd 명령어를 사용하고 직접 편집하는 경우는 vi를 사용한다.
passwd- 파일은 group- 파일과 같은 백업이다.
118] pbm2ppa.conf
portable bitmap 이미지 파일을 HP 프린터로 사용하는 PPA 파일로 변환하는 툴의 설정 파일
119] pcmcia/
pcmcia(PC 카드)의 설정 파일을 저장하는 디렉토리이며, 이 디렉토리에는 config라는 파일이 있어 여기에 각 PC 카드와 드라이버의 대응이 기술되어 있다. 확장자 opts 파일에는 PC 카드의 설정을 기술한다. PC 카드의 설정은 각 PC 카드마다 다르다.
120] phhttpd.conf
HTTP 엑셀러레이터 phhttpd의 설정 파일
121] pine.conf
메일/뉴스 리더 pine의 설정 파일
122] pine.conf.fixed
메일/뉴스 리더 pine의 설정 파일
123] pnm2ppa.conf
portable anymap 이미지 파일을 HP의 프린터에서 쓰는 PPA 파일로 변환하는 툴의 설정 파일
124] ppp/
PPP 데몬의 설정 파일을 저장하는 디렉토리
125] printcap
/etc/termcap 파일과 유사하며 프린터를 사용할 때(lpr) 쓰인다. 사용자가 파일을 직접 편집하기에는 어려움이 있으며, printtool 명령을 이용해서 프린터를 설정하면 이 파일에 설정이 저장된다.
126] profile
Bourne shell(/bin/sh 혹은 bash)에 의해 로그인할 때 실행되는 파일이다. 이 파일은 시스템 로그인시에 환경 변수를 설정하는 파일이다.
127] profile.d/
로그인할 때 profile에서 불려나와 실행된 스크립트의 저장 디렉토리이며 시스템이 지원하는 쉘로 짜여진 스크립트들이 있으며 변수 관련 파일들이 있다.
128] protocols
프로토콜 설정 파일로서 변경이 불가능하다.
129] pwdb.conf
유저 패스워드 데이터베이스 라이브러리(libpwdb)의 설정 파일이다. libpwdb는 애플리케이션이 유용하게 유저 정보를 취득하기 위한 라이브러리이다. PAM은 그 라이브러리를 사용해 유저 정보를 취득하고 있다. pwdb.conf에서는 유저나 그룹 정보를 취득하기 위한 데이터베이스의 집합을 기술한다. 이러한 경우를 제외하고는 이 설정 파일을 변경할 필요는 없다.
130] pxe.conf
remote boot 데몬 pxe의 설정 파일이며 PXE(Preboot eXecution Environment) 서버 패키지가 포함되어 있다. PXE란 컴퓨터의 기종, OS의 인스톨, 진단 등을 리모트에서 행할 수 있도록 하는 기술이다. PXE에 준거한 BIOS ROM 탑재의 네트워크 카드가 있으면 OS를 인스톨하고 있지 않은 시스템에서도 네트워크로 부팅할 수 있다.
PXE 서버 데몬의 설정은 pxe.conf 파일에서 한다. 또 부트 이미지를 전송하는 것에 필요한 MTFTP 데몬의 설정은 mtftpd.conf에서 한다. MTFTPD 데몬 대신 TFTPD 데몬을 이용할 수도 있다.
131] rc.d/
/etc/rc.d/* 파일은 시스템이 부트되면 자동적으로 데몬 등을 실행하는 스크립트 파일을 저장하는 디렉토리이다. 이것은 update, crond, xinetd 같은 프로그램을 백그라운드로 실행시키며, 파일 시스템 마운트, 스왑 영역 활성, 그리고 이와 유사한 다른 작업들을 한다. /etc/rc.d/rc.sysinit, /etc/rc.d/rc.local 파일과 /etc/rc.d/rc 파일, 그리고 /etc/rc.d/rc.# 파일을 포함하기도 한다.
132] redhat-release
디스트리뷰션의 릴리즈명이며 /etc/rc.d/rc.local 파일에 의해 issue와 issue.net에 전송된다.
133] resolv.conf
naming service 수단의 우선 순위 등 리졸버의 설정 파일이며 표준 C 라이브러리는 DNS 등을 이용해 IP Address와 호스트명을 변환할 방법을 가지고 있다. 이것을 리졸버(Name Resolver)라고 하고 네트워크 애플리케이션은 리졸버의 기능에 의해 이름을 해결할 수 있다.
134] rmt@
/sbin/rmt의 심볼릭 링크파일이며, 리모트 백업시 사용된다. Rmt는 리모트 자기 테잎 프로토콜 모듈인데 rdump 명령어 등으로 리모트 백업이 실행되었을 때 호출된다.
135] rpc
RPC(Remote Procedure Call) 서버명과 번호의 대응이 기술된 파일이며 리모트 프로시져는 네트워크 상의 다른 시스템에 액세스하기 때문에 분산 컴퓨팅 환경에서 사용되는 시스템이다.
136] rpm/
RPM 패키지에서 이용하는 디렉토리
137] rpm2html.config
RPM 리포지터리에서 HTML 데이터베이스를 작성하는 rpm2html 설정파일
138] rpmlint/
RPM 파일의 에러 체크를 하는 rpmlint의 설정 파일
139] screenrc
화면관리 프로그램, 스크린의 설정 파일 템플릿, VT100/ANSI 단말 에뮬레이션 기능을 가진 화면관리 프로그램, 스크린의 설정 파일의 모형이다. 보통 사용자의 홈 디렉토리에 .screenrc라는 파일로 재지정된다. 스크린은 백스크롤과 윈도우 사이에서의 cut & paste 등 풍부한 기능을 가지지만 그다지 사용되지 않는다.
140] securetty
터미널 보안을 위해 사용하는 것으로 root 계정은 이 파일에 열거된 터미널로 로그인할 수 있다. 보통 가상 콘솔들이 열거되어 있으며 모뎀이나 네트워크로 시스템에 접근하여 슈퍼유저의 권한을 얻는 것을 막을 수 있다. 최근에는 pts/0, pts/1…와 같이 터미널 명칭이 변경되었다.
141] security/
PAM(Pluggable Authentication Modules)에서 이용하는 모듈을 저장
142] sendmail.cf
Sendmail의 동작 설정 파일
143] sendmail.cw
Sendmail에서 호스트별명을 이용하는 경우 별명을 정의한는 파일
144] sendmail.mc
sendmail.cf파일을 만들기 위한 매크로 정의 파일로 매크로 프로세서 m4로 이용한다.
145] services
네트워크 서비스명으로 사용하는 포트, 프로토콜의 대응을 정의하는 파일이며 인터넷 서비스의 서비스명과 포트번호, 프로토콜 종류의 대응을 정의하는 파일이다. RPM 패키지로 네트웍 프로그램을 인스톨할 경우 해당 포트번호와 프로토콜이 인스톨 시에 추가되기 때문에 일반적으로 직접 수정할 필요는 없다. 1023보다 작은 포트번호를 이용할 때 root 권한이 필요하게 되므로 스스로 서비스를 추가할 경우에는 주의해야 한다.
146] shadow, shadow-
각 사용자의 새도우 패스워드에 관한 정보를 기술하는 파일이며, shadow-는 백업이다.
147] shells
로그인 쉘로서 설정 가능한 shell의 목록으로 chsh 명령으로 사용자 로그인 shell을 변경하며 이 파일의 목록에 있는 shell만 변경이 가능하다. 이 파일에는 시스템이 지원하는 쉘이 절대 경로로 지정되어 있다.
148] skel/
히든 파일의 템플릿을 저장하는 디렉토리이며, 유저 계정을 추가하고 싶을 때, skel 디렉토리 이하의 파일들이 유저의 홈 디렉토리 이하에 자동적으로 복사된다. 만약 .bash_profle 등을 시스템에 맞게 변경해두고 이 디렉토리에 복사해두면 될 것이다.
149] slip/
SLIP(Serial Line Internet Protocol) 로그인을 위한 설정 파일 저장
150] smb.conf
Samba의 설정 파일
151] smbpasswd
Samba의 패스워드 파일로 Samba를 이용하는 유저명과 부호화된 패스워드가 기술되어 있다.
152] smbusers
리눅스 유저명과 Samba 유저명을 대응시키는 설정 파일
153] smrsh/
Sendmail용 제한 쉘로 이용할 수 있는 프로그램을 저장하는 파일로, 일반적으로 Sendmail은 셸의 명령어를 호출해 실행할 때가 있는데, 보통 셸을 이용하게 되면 security hole이 되기 쉽다. 이 때문에 Sendmail에서 이용하기 위한 제한 쉘 smrsh를 이용한다. smrsh 디렉토리에는 smrsh에서 이용하는 명령어를 복사하든지 심볼릭 링크를 붙인다. smrsh는 이 디렉토리에 있는 명령어밖에 실행할 수 없기 때문에 security를 확보할 수 있다.
다음은 /etc/smrsh 파일의 예이다.
" Press ? for keyboard shortcuts
" Sorted by name (.bak,~,.swp,.o,.info,.aux,.log,.dvi,.bbl,.blg,.brf,.cb,.ind,.idx,.ilg,.inx,.out,.toc at end
"= /etc/smrsh/
../
wrapper
154] snmp/
SNMP(Simple Network Management Protocol)에 대응하는 패키지 ucd-snmp에서 이용하는 디렉토리이며 SNMP 데몬의 설정 파일 snmpd.conf가 놓여 있다.
155] sound/
GNOME의 이벤트에 나누어 붙인 사운드파일의 설정 파일을 저장
156] squid/
웹 캐시 프록시 Squid의 설정 파일을 저장하는 디렉토리이며 squid의 설정은 여기에 있는 squid.conf에서 한다. 초기 상태에서 localhost, 즉 리눅스 머신 자체에서만 이용할 수 있게 되어 있다.
squid는 비교적 설정도 간단하고 도입 효과도 큰 서버 애플리케이션이다.
다음은 squid.conf 파일의 일부를 예시한 것이다.
45: http_port 3128
포트 번호 8080 등도 자주 사용된다.
…
585: ftp_user nana@linuxone.co.kr
FTP 서버에 넣는 메일 어드레스를 설정한다.
…
1153: acl all src 0.0.0.0/0.0.0.0
1154: acl manager proto cache_object
1155: acl localhost src 127.0.0.1/255.255.255.255
1156: acl mynetwork src 192.168.3.0/255.255.255.0
mynetwork라는 이름으로 LAN을 등록(이 행을 추가한다)
…
1195: http_access allow localhost
1196: http_access allow mynetwork
mynetwork에서의 엑세스를 허가한다.(이 행을 추가한다.)
1197: http_access deny all
157] sysconfig/
시스템 부팅시에 참조된 디바이스 등의 설정 파일들이 위치하며 인증 관련, 하드웨어 관련, 네트워크 관련, 로케일 관련 파일들이 있다. 특히 네트워크 관련 파일들은 시스템 부팅시에 설정을 읽어들이는데 여기에 설정된 호스트 네임은 시스템 부팅후 시스템의 호스트 네임으로 설정이 된다.
amd
apm-scripts
apmd – 전원 관리에 관한 설정 정보(apmd로의 옵션 지정)
arpwatch
authconfig
cbq
clock – 시각에 대한 설정
console – 콘솔에 대한 정의 파일(키맵 등)
desktop
dhcpd
firewall
gnome
gpm
harddisks
hwconf – 하드웨어 전반의 정의(I/O 콘트롤로 칩이나 비디오 칩 등)
i18n – 나라 정보, 사용하는 언어 정보
identd
init – init 실행시 각종 설정
irda
kde
keyboard – 키보드 형식 지정
kudzu
mouse
msec
named
network – 호스트명. IP Forward 등
network-scripts/ - 네트웍 디바이스. 네트워크의 재기동시의 각종 설정
networking
ntpd
pcmcia – pcmcia 드라이버로의 옵션 정보
radvd
rawdevices
rhn
samba
sendmail – 메일 데몬의 큐잉 시간 등
squid
syslog
tux
ups
vncservers
xinetd 등의 파일들이 있다.
158] sysctl.conf
/proc/sys 디렉토리와 연관된 부분으로 시스템 튜닝과 관련된 설정 파일이다.
159] syslog.conf
syslog 데몬의 설정 파일
160] termcap
단말의 특성을 정의하는 데이터베이스 파일이며 터미널의 기능 데이터베이스이다. 이것은 문서 파일로서 ESCAPE 문자들로서 터미널을 제어할 때 사용된다. 단 현재의 리눅스에서는 terminfo가 사용되고 있고, termcap은 호환성을 유지하기 위해 남아있다.
유닉스나 리눅스에서는 여러 가지 단말이 사용되어 왔다. 현재의 PC는 그래픽을 표시할 수 있어서 당연하지만 이전에는 캐릭터 단말을 유닉스 머신에 연결해 사용하는 것이 일반적이었다. X Windows System에서 동작하는 xterm이나 kterm 등은 단말 에뮬레이터라 불린다.
일반적으로 유닉스계나 리눅스 프로그램은 특정 단말에 의존한 코딩은 되어있지 않다. 화면 제어를 실제로 행하는 것은 화면 조작 라이브러리인 것이다. 화면 조작 라이브러리는 환경변수 TERM에 설정된 단말의 종류를 토대로 termcap 또는 terminfo 데이터베이스를 조사해 그 단말 고유의 ESCAPE SEQUENCE를 매핑한다.
최근에는 termcap 대신 terminfo가 사용되고 있다. Terminfo는 termcap과 비슷한 서식의 소스 파일을 시스템이 처리하기 쉬운 바이너리 데이터베이스 파일로 변환해 사용한다. 데이터베이스 파일은 엔트리마다 독립된 파일로 되어 있어, /usr/share/terminfo 디렉토리 이하에 있는 이름 앞 문자의 서브디렉토리에 들어 있다.
Terminfo 데이터베이스는 바이너리 파일이므로 텍스트 뷰어로 볼 수 없다. 컴파일 끝의 파일은 infocmp 명령어로 소스로 변환할 수 있기 때문에 내용을 변경하고 싶을 때는 변환한 소스를 바꿔써, tic 명령어로 다시 컴파일하게 된다.
161] up2date.conf
up2date 설정 파일
162] uucp/
UUCP(Unix to Unix CoPy)의 설정 파일을 저장하는 디렉토리
163] vfontcap@
Vflib에서 사용하는 트루타입 폰트의 설정 파일
164] vga
SVGALIB가 이용하는 키맵과 비디오 설정 파일을 저장하는 디렉토리
165] wgetrc
HTTP/FTP 대응 파일 다운로드 툴 wget의 설정 파일이다. 명령어 라인에서 작동하고 다운로드하고 싶은 파일의 URL을 인수로 지정한다. 프록시 서버에도 대응하고 FTP의 passive 모드를 이용할 수도 있기 때문에 firewall의 안쪽에서도 사용할 수도 있다.
전송에 실패했을 때 재시도시킬 수도 있고 서버가 대응하고 있으면 도중까지 다운로드한 파일을 연결해서 다운로드할 수도 있다.
프록시 서버의 이용여부, 프록시 서버의 지정, 재시도의 횟수 등은 명령어 라인 옵션에서도 지정할 수 있지만 wgetrc 파일에 설정해두면 좋다.
이 툴의 결점은 명령어 라인 옵션의 복잡성과 웹브라우저와의 연계가 고려되지 않았다는 점이다. 하지만 이런 문제를 해결하기 위해 GUI를 이용할수도 있다.
166] xinetd.conf, xinetd.d/
리눅스는 각각의 네트웍 서버 데몬을 동작시킬 수가 있다. 이들 데몬은 기동되면 외부에서 접속요구가 있기까지 sleep상태로 대기한다. 그러나 수많은 데몬을 기동하면 대기중에도 메모리 등의 자원을 소비한다. 그래서 inetd(인터넷 수퍼 서버)를 이용한다. 레드햇에서는 xinetd(eXtended inetd)를 사용한다. 이 데몬은 접속요청를 감시하는데, 외부에서 접속을 요청받으면 대응할 서버 데몬을 기동한다. 이것에 의해 xinetd에서 기동되는 네트웍 서버 데몬은 항상 기동해둘 필요가 없어지는 것이다. 접속요청에 대응해 어느 데몬을 기동하면 되는 것인지, 또 어떻게 기동하면 되는지를 지정하는 것이 xinetd.conf이다.
167] /etc/getty (/sbin/getty)
이 프로그램은 터미널로 누군가가 login하기를 기다린다. 명령어 init에 의해 자동적으로 실행되며, login 가능한 터미널 라인이나 가상 콘솔 당 한번씩 실행된다. 또한 사용자의 패스워드를 기다리며 login을 실행하며 기본적으로 run level 3에서 실행되는 프로세스이다.
168] /etc/update (혹은 /sbin/update)
/etc/rc.d/inittab 파일에 의해 백그라운드로 실행되는 프로그램의 하나로 매 30초 마다 버퍼 캐시에 있는 쓰여지지 않은 데이터를 하드로 저장한다. 이는 전원의 단절이나, 커널의 이상 등을 대비하여 매 30초마다 데이터를 저장함으로써 데이터 손실의 위험 부담을 줄이는 것이다.
11. /proc 상세분석
현재 실행중인 프로세스등에 대한 정보를 담고 있는 파일들이 위치해 있으며 실행 중인 프로세스들에 대한 정보를 사용자가 원할 때 확인할 수 있다. 이 디렉토리의 파일 시스템은 실제로 존재하지 않는 가상 파일 시스템이며 커널이 메모리 상에 구현해 놓은 것으로 디스크상에는 존재하지 않는다. 즉, 실행중인 커널에 대한 정보를 포함하고 있는 일종의 가상의 파일시스템이다.
[root @edu00 /roor]#cat /proc/file_name - 파일의 내용을 자세히 확인
어떤 시스템의 경우에는 커널과 통신하기 위해서 /proc 파일 시스템을 요구하기 때문에 반드시 마운트해야 한다.
1) /proc/1
프로세스 번호 1번인 init process에 대한 정보가 있는 디렉토리로, 각 프로세스는 자신만의 디렉토리를 /proc 아래에 갖게 되는데, 자신의 프로세스 식별 번호(process identification number)가 그 디렉토리의 이름이 된다.
2) /proc/*
예를 들어 123과 2345가 * 부분에 있다면 이는 프로세스 식별 번호를 의미하여 하위의 디렉토리에는 해당 프로세스에 대한 정보가 저장되어 있다.
3) /proc/asound
시스템에 설치된 사운드카드에 대한 정보를 보여준다.
4) /proc/cpuinfo
프로세서의 정보가 들어 있다. cpu의 타입, 모델, 제조회사, 성능 등에 관한 정보를 알려준다.
#cat /proc/cpuinfo라고 명령을 내리면 CPU에 대한 내용을 볼 수 있다.
5) /proc/devices
현재 커널에 설정되어 있는 장치의 목록을 볼 수 있다. 각각의 장치에 대한 major 넘버와 minor 넘버가 설정되어 있으며 해당 장치가 로도되어있는지 확인이 가능하다.
6) /proc/dma
현재 어느 DMA 채널이 사용 중인지를 알려준다.
7) /proc/filesystems
어떤 파일시스템이 커널에 설정되어 있는지 알 수 있다.
8) /proc/ide
IDE 인터페이스와 이것과 연결된 IDE-device들에 대한 정보를 보여준다.
9) /proc/interrupts
현재 어느 인터럽트(IRQ)가 얼마나 많이 사용 중인지 알 수 있다.
10) /proc/ioports
현재 어느 I/O 포트가 사용 중인지에 대한 정보를 갖고 있다.
11) /proc/kcore
시스템에 장착된 실제 메모리의 이미지(즉, 실제 메모리의 내용을 그대로 본뜬 것)로, 이 파일의 크기는 실제 메모리의 크기와 정확히 일치하는 것처럼 보인다. 그러나 이 파일은 프로그램이 필요로 하는 부분의 이미지만 그때 그때 만들어 내도록 되어 있어서, 실제로 메모리를 그만큼 차지하고 있는 것은 아니다.
(/proc 디렉토리의 내용을 다른 곳에 복사하지만 않는다면, /proc 안의 내용은 아무런 디스크 공간을 차지 하지 않는다는 점을 기억하자)
12) /proc/kmsg
커널이 출력하는 메시지들로 syslog 파일에도 기록된다.
13) /proc/ksyms
커널이 사용하는 심볼들의 표를 보여준다. 이 파일명은 동시에 명령어로도 같은 정보를 얻을 수 있다.
14) /proc/loadavg
시스템의 평균부하량(load average)을 보여주는 것으로, 지금 시스템이 해야 하는 일들이 얼마나 많은지 알려주는 세가지 지표를 볼 수 있다.
15) /proc/meminfo
메모리 사용량에 대한 정보를 보여주는 것으로, 실제 메모리와 가상 메모리를 모두 다룬다.
16) /porc/modules
현재 어떤 커널 모듈이 사용되고 있는지를 보여준다. 또한 모듈 관련 명령어중 lsmod 명령으로 같은 정보를 얻을 수 있다.
17) /proc/partitions
이 파일은 분할 영역에 대한 정보를 보여준다.
18) /proc/pci
PCI 버스와 설치된 PCI 카드들, 그리고 주변 장치연결(PCI) 버스를 사용하는 다른 devices들에 대한 정보를 표시한다.
19) /proc/scsi
SCSI 인터페이스와 이것과 연결된 SCSI-devices들에 대한 정보를 보여준다.
20) /proc/net
네트워크 프로토콜들의 상태에 대한 정보가 들어 있다.
21) /proc/self
이곳은 이 디렉토리를 들여다보는 프로그램 자신의 프로세스 디렉토리로 링크가 되어있다. 즉, 서로 다른 두 프로세스가 /proc 을 본다면 그들은 서로 다른 링크를 보게 되는 것이다. 이렇게 하면 프로그램들이 자신의 프로세스 디렉토리가 어디인지를 쉽게 알 수가 있다.
22) /proc/stat
이곳에는 시스템의 상태에 관한 다양한 정보가 있다. 즉, 부팅 후 page fault가 몇 번 일어났는가 하는 것들을 알아 볼 수가 있다.
23) /proc/uptime
시스템이 얼마나 오랫동안 살아 있었는지 보여준다. uptime and idle time
24) /proc/version
커널의 버젼을 알려준다. host, date 등
25) /proc/subdirectory*
/proc/scsi :
/proc/ide :
/proc/net : network activity
/proc/sys : kernel configuration parameters
26) /proc/sys
커널에서 CONFIG_SYSCTL이 활성화되었다면 실행중인 시스템에서 파라미터를 수정할 수 있다.
수정 값은 일시적이고 시스템 종료시에 저장되지 않는다.
[root @edu00 /root]#echo "1" > /proc/sys/net/ipv4/ip_forward
IP forwarding 가능
[root @edu00 /root]#echo "8192" > /proc/sys/fs/file-max
: 파일 핸들 수를 2배로 한다.
[root @edu00 /root]#echo "60 70 80" > /proc/sys/vm/buffermem
부팅시에 /etc/rc.d/rc.sysinit은 #sysctl -p /etc/sysctl.conf를 호출한다.
sysctl은 /etc/sysctl.conf를 세팅한다.
[root @edu00 /root]#sysctl -p /etc/sysctl.conf
[root @edu00 /root]#sysctl -a
[root @edu00 /root]#sysctl -A
[root @edu00 /root]#vi /etc/sysctl.conf
# Disables IPv4 packet forwarding
net.ipv4.ip_forward = 0
# Enables source route verification
# This drops packets that come in over interfaces they shouldn't;
# for example, a machine on an external net claiming to be one on yourlocal network
net.ipv4.conf.all.rp_filter = 1
# Disables automatic defragmentation
net.ipv4.ip_always_defrag = 0
# Enables the magic-sysrq key
kernel.sysrq = 1
# Disables stop-a on the sparc
kernel.stop-a = 0
12. /usr 상세분석
1) /usr/X11R6
X Window 시스템을 설치하였다면 이 디렉토리에 설치가 된다. X Window 시스템은 방대하며, 많은 그래픽 유틸리티와 프로그램들이 그래픽 윈도우로 출력되는 강력한 그래픽 사용자 환경이다. 이 디렉토리에는 X Window 실행 파일, 사양 파일, 자원 파일들을 포함하고 있다.
2) /usr/bin
시스템이 소유하고 있는 소프트웨어를 담기 위한 warehouse이다. /bin과 같은 곳에는 없는 유용한 실행 파일들을 가지고 있다.
3) /usr/etc
유틸리티와 파일들이 있다. 일반적으로 /usr/etc에 있는 파일들은 /etc/에 있는 것만큼 필요한 것은 아니다.
4) /usr/include
C 컴파일러를 위한 include 파일을 포함한다. 이 파일은 데이터 구조 이름과 서브 루틴, 상수 같은 C로 작성된 프로그램에서 사용되는 내용을 담고 있다. /usr/include/sys 에 있는 파일들은 리눅스 시스템 레벨의 프로그래밍을 할 때 사용된다. 만약 C 프로그래밍 언어에 익숙하다면 여기에 printf() 함수가 선언되어 있는 stdio.h같은 헤더 파일을 찾을 수 있을 것이다.
5) /usr/lib
/lib에서 찾을 수 있는 sub와 static 같은 라이브러리를 포함하고 있다. 프로그램을 컴파일할 때 프로그램은 /usr/lib에 있는 파일들과 링크되며 이 라이브러리 안에 실행 코드가 필요할 때 /lib을 찾는다. 또한 많은 프로그램들이 /usr/lib 안에 사양 파일들을 저장한다.
6) /usr/local
/usr에 포함된 것과 유사하고 시스템에 반드시 필요한 것은 아니지만 매우 유용한 프로그램들을 설치하는데 사용한다. /usr/local은 일반적으로 사용자가 설치하는 프로그램들이 위치하며 시스템의 특성을 결정짓는 소프트웨어들이 있을 수 있다.
7) /usr/man
이 디렉토리는 실제적인 man page를 포함하고 있다.
8) /usr/src
시스템에 있는 다양한 프로그램의 컴파일되지 않은 소스 코드를 포함하고 있다. 여기에는 /usr/src/linux, 혹은 /usr/src/linux-2.4 디렉토리가 있으며 리눅스 커널 소스 코드를 포함하고 있다.
또한 /usr/src/redhat 디렉토리는 사용자 정의 가능한 rpm 소스와 패키지를 저장하고 패키지를 build하기 위한 디렉토리가 지정되어 있다.
9) /usr/dict
사전 파일 디렉토리이다.
10) /usr/doc
프로그램의 문서와 관련된 파일들이 저장되는 디렉토리이다.
11) /usr/games
게임 프로그램들이 위치하고 있다.
12) /usr/info
GNU info 파일들을 위한 디렉토리이다.
13) /usr/sbin
소프트웨어 관련 시스템 명령어들이 위치한다.
14) /usr/share
아키텍쳐 독립적인 자료들이 있는 디렉토리이며 여러 공유 파일들이 위치한다.
13. /dev 디렉토리 상세분석
1) /dev/console
시스템의 콘솔이며, 모니터가 시스템에 직접 연결되어 있음을 의미한다.
2) /dev/ttyS? 와 /dev/cua?
직렬 포트를 access한다. 예를 들면, /dev/ttyS0는 도스 상의 COM1을 의미하며, /dev/cua는 callout 장치로써 모뎀을 직접 access할 때 사용된다.
3) hd 디바이스
하드 디스크를 access한다. /dev/hda는 첫번째 하드 디스크 전체를 의미하며, hda1은 /dev/hda의 첫번째 파티션을 의미한다.
4) sd 디바이스
SCSI 하드 디스크 드라이브나 테이프 드라이브 같은 SCSI 장치들을 의미한다. 만약 SCSI 하드 디스크를 가지고 있다면 /dev/hda를 접근하는 대신 /dev/sda를 access해야 한다.
5) lp 디바이스
병렬 포트를 말하며 /dev/lp1은 도스의 LPT1과 같다.
6) /dev/null
black hole로 사용되는 것으로서 어떠한 데이터를 이 장치에 보내면 모두 없어지게 된다. 예를 들면, 화면에 아무것도 출력되지 않기를 바랄 경우 /dev/null로 출력을 보내면 된다.
6) /dev/tty 디바이스
시스템에 있는 가상 콘솔(Virtual Console: VC)이다. /dev/tty1은 첫번째 VC이며, /dev/tty2는 두번째이다. 가상 콘솔은 한 화면이 여러 개의 가상 터미널을 갖는 것이다.
각각의 터미널은 [alt]+[F1], [alt]+[F2] 등을 이용해서 전환이 가능하며, 같은 사용자나 다른 사용자로 로그인이 가능하다.
7) /dev/pty, /dev/pts 디바이스
원격 login 세션에서 사용되는 pseudo-terminal들이다. 예를 들어, 사용중인 컴퓨터가 네트워크에 연결되어 있고, telnet으로 로그인하려고 할 때 /dev/pty 디바이스를 사용한다.
사용자가 명령 프롬프트에서 w나 who를 입력하면 TTY 필드에 보이는 장치명이 pts/0, pts/1, pts/2 등이 있는데 이를 가상 터미널이라 한다.
간략하지 않네요...
화이팅!