나의 즐겨찾기 | 블로그홈 | 바로가기 바로가기 | 로그인
이제 더위는 가고 젤 좋아하는 가을이 온당!!!
블로그  |  사진갤러리  |  동영상갤러리 방명록  |   즐겨찾기 추가
thisrule (thisrule1)
프로필     
 인기도 :
 이 블로그 점수주기
전체 글보기(69)
예준사진 목록
지우사진 목록
리눅스 팁 목록
기본폴더
예준 사진
지우 사진
가족사진
리눅스 팁
가요
설문
오늘 전체
방문자 49 34634
구독자 0 4
댓글 0 10
참조글 0 17
HanRSS 로 구독하기Fish 로 구독하기
2009 11월
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
최근 댓글 전체보기
압축파일에 대한 글 올..
윗글 출처 : 커피닉스..
열심히 하겠습니다
열심히 하겠습니다
열심히 하겠습니다
최근 참조글 전체보기
Cheap fioric..
리눅스의 마스코트는 왜..
다녀간 블로거 더보기
- wonnychung
- 윤노털
- ritzcarltn
- 나에게로
- 팍스벅
 즐겨찾기
 즐겨찾기 글모음
개설일 : 2004/08/23
 

파일시스템(filesystem)이란 운영체제가 파티션 또는 디스크에 파일들이 연속되게 하기 위해 사용하는 방법들이고 자료 구조이다. 즉, 파일들이 디스크상에서 구성되는 방식이다."

즉, 디스크 위에 데이터를 어떻게 써야할 지에 대한 규칙들이라 할 수 있습니다. 고로, 파일시스템이 없다면, 빈 디스크에 정보를 어떻게 저장할 것인지를 알 수가 없습니다. 여기서 디스크라고 말했지만, 엄밀히 말하면 Random Access가 가능한 저장장치를 말하는 것으로 테잎 디바이스 같은 Sequence Access로 저장되는 경우는 해당되지 않습니다.

파일시스템에는 여러종류가 있으며, 각각의 파일시스템은 나름대로의 특성과 한계를 가지고 있습니다. MS-DOS같은 경우에는 파일 이름이 8자 이내이고, 3자리의 확장자를 가져야 한다라든가 하는 것 말입니다.
여기서는 리눅스에서 사용하고 있는 파일시스템에 대해 간단히 알아보고, 파일 및 디렉토리와 관련된 명령들을 익혀 보도록 하겠습니다. 

[파일시스템의 구조]

파일시스템의 종류에 따라 구체적으로는 다른 구조일 수 있지만, 대체적으로 다음과 같은 구조에 의해서 자료를 저장하고, 다시 접근할 수 있는 방법을 제공합니다.

구조

설 명

Super Block

파일시스템의 전체적인 정보를 포함.
- 파일시스템 Size, 매직넘버, 마운트 횟수, 블록그룹번호, 블록 크기, 첫 번째 inode 등

inode

파일에 대한 모든 정보 (단, 파일 이름은 제외)
- Data Block의 위치 정보, 타임스탬프, 크기, 소유자, inode의 모드등

data block

파일에서 데이터를 저장하는 공간

directory block

파일 이름 & inode번호

indirection block

inode에 Data Block의 위치 정보를 저장할 공간이 부족할 때, 이 위치정보를 저장하기 위한 공간을 동적으로 할당하는데, 이 공간이 indirection block(간접블럭)이다.

 

리눅스 파일시스템

리눅스도 사용하는 파일 시스템이 있습니다. 바로 ext2 (Extended2)라는 파일 시스템입니다.

초기의 리눅스는 타넨바움 교수가 교육용으로 제작한 Minix라는 OS의 파일시스템을 사용했지만, 여러가지 제약 때문에 여러차례의 변화를 거쳐 지금의 ext2를 사용하게 되었습니다. 

이 외에도 CD-ROM에서 사용하는 iso9660, 윈도우에서 사용하는 FAT, minix, NFS, sysv, ... 와 같은 여러 종류의 파일 시스템을 지원하며, 이러한 파일시스템 형식으로 작성된 파일이나 디렉토리들을 인식할 수 있습니다. (지원하는 파일시스템의 종류는 fdisk 실행 후, l 명령으로 확인할 수 있습니다.)

리눅스 커널이 지원하고 있는 파일시스템 중 리눅스의 루트 파티션으로 사용할 수 있는 것은 몇몇 종류가 있지만, 기본적으로는 ext2가 사용됩니다. 최근에는 캐시(cache)에 저장된 데이터를 실제로 디스크에 기록할 때 시스템이 다운되면 파일시스템이 깨지는 ext2의 약점을 보완한, 저널링 파일시스템이나 TUX2 같은 새로운 개념의 파일 시스템들이 등장하여, 보다더 안정된 파일시스템이 제공될 예정입니다. 비공식 패치에서는 이미 저널링 파일시스템인 'ReiserFS'가 제공되고 있기도 합니다

파일시스템은 리눅스를 인스톨하면서 생성되므로, 리눅스를 설치 하셨다면, 이미 디스크나, 파티션 위에 데이터들을 기록할 수 있는 준비를 마친샘입니다. (mkfs 명령으로 만들어 줄 수도 있습니다.)

리눅스 파일시스템은 모든 파일들이 /(루트 디렉토리) 아래에 트리구조로 연결되어 있습니다. 모든 디렉토리나 장치들도 모두 이 아래에서 찾아 낼 수 있습니다. 필요한 파일시스템에 접근하려면 마운트라는 명령으로 루트 디렉토리 아래의 한 디렉토리로서 접근 가능한 상태로 만든 후 사용할 수 있습니다.

[ext2fs의 특징]

- 255자까지 파일 이름으로 사용할 수 있지만, 필요하다면, 1012자까지도 가능합니다.
- 확장자같은 개념은 필요하지 않습니다.
다만, '.xxx' 형태로 파일 이름을 짓는 경우는 파일 이름으로 그 파일을 분류하거나, 특성을 나타내기 위한 것이 대부분 입니다.
- 파일 이름 중에서 "." 으로 시작하는 이름을 가진 파일들은 Hidden 파일로 'ls' 명령에 '-a' 옵션을 붙여야 볼 수 있습니다.
'ls -a' 명령으로 나타나는 list에는 반드시 '.'와 '..'이 포함되어 있는데, 전자는 현재 디렉토리를, 후자는 부모 디렉토리를 나타냅니다.
- ext2 파일시스템의 크기는 원래 소스코드에 의하면 2 GB까지로 제한 되어 있지만, 최근 VFS(Virtual File System)의 사용으로, 4 TB까지도 가능합니다. 그래서, 파티션을 여러개로 쪼개지 않고도 큰 사이즈의 디스크 사용이 가능해 졌습니다.

디렉토리별 상세 내용

 

그럼, 중요한 디렉토리들에 대한 자세한 내용을 살펴 보도록 하겠습니다.

▶ /

루트 디렉토리로 파일 시스템 계층 구조의 시작점입니다. 따라서 빈 상태로 유지하는 것이 바람직합니다.

 

▶ /boot

환경 설정 파일을 제외한 부팅 과정에서 필요한 모든 구성 요소들이 포함되어 있습니다.

 

▶ /bin

실행 파일들이 모두 모여 있습니다. 이 디렉토리에는 많은 필수적인 프로그램들이 포함되어 있습니다. "ls /bin"을 해 보면 이 안의 파일들을 볼 수 있으며 cp, ls, mv 같은 몇 개의 명령어들은 알아 볼 수 있을 것입니다. 이것들은 이들 명령어들의 실제 프로그램들입니다. 따라서 "cp"명령을 입력하면, /bin/cp 프로그램이 실행되는 것입니다.
"ls -F"를 사용하면, /bin의 대부분의 파일들에서 "*"가 파일명 끝에 추가되어 있는 것을 볼 수 있습니다. 이것은 이 파일이 실행 가능한 파일임을 표시하는 것입니다.

 

▶ /dev

/dev 안의 파일들은 디바이스 드라이버들입니다. 이것들은 디스크 드라이버, 모뎀, 메모리 등과 같은 시스템 디바이스나 자원들을 접근하는데 사용됩니다. 예를 들면, 파일들로부터 정보를 읽어 볼  수 있는 것과 같이, /dev/mouse를 access함으로써 마우스로부터 입력되는 정보를 읽어 올 수 있습니다. fd로 시작하는 파일 이름들은 플로피 장치들입니다. fd0는 첫 번째의 플로피 디스크 드라이브이며, fd1은 두 번째입니다. 이 이외의 것들은 보통 플로피 디스크의 특정 형태를 표시합니다. 예를 들면, fd0H1440은 첫 번째 드라이브(A: 드라이브)의 고밀도 3.5인치 디스켓을 말합니다.

/dev/console
시스템의 콘솔이며, 모니터가 시스템에 직접 연결되어 있음을 말합니다.

/dev/ttyS? 와 /dev/cua?
직렬 포트를 액세싱합니다. 예를 들면, /dev/ttyS0는 도스 상의 "COM1"을 뜻하며, /dev/cua는 "callout"장치로써, 이것은 모뎀을 직접 액세스할 때 사용됩니다.

hd로 시작하는 디바이스 이름
하드 디스크를 액세스합니다. /dev/hda는 첫 번째 하드 디스크 전체를 뜻하며, hda1은 /dev/hda의 첫 번째 파티션을 의미합니다.

sd로 시작하는 디바이스 이름
SCSI 하드 디스크 드라이브나 테이프 드라이브 같은 SCSI 장치들을 의미합니다. 만약 SCSI 하드 디스크를 가지고 있다면, /dev/hda를 접근하는 대신에 /dev/sda를 액세스해야 합니다.

lp로 시작하는 디바이스 이름
병렬 포트를 말하며, /dev/lp1은 도스의 "LPT1"과 같습니다.

/dev/null
"black hole"로써 사용되는 것으로서 어떠한 데이터를 이 장치에 보내면 모두 없어지게 됩니다. 예를 들면, 화면에 아무 것도 출력되지 않기를 바랄 경우, /dev/null로 출력을 보내면 됩니다.

/dev/tty로 시작하는 디바이스 이름
시스템에 있는 "가상 콘솔 : Virtual Console(VC)"입니다. /dev/tty1은 첫 번째 VC이며, /dev/tty2는 두 번째입니다. 가상 콘솔은 한 화면이 여러 개의 가상 터미널을 갖는 것입니다. 각각의 터머널은 [alt]+[F1], [alt]+[F2] 등을 누름으로서 전환할 수 있으며, 같은 사용자나 다른 사용자로 login할 수 있습니다.

/dev/pty로 시작하는 디바이스 이름
이것들은 원격 login 세션에서 사용되는 "pseudo-terminal"들입니다. 예를 들어, 사용 중인 컴퓨터가 네트워크에 연결되어 있고, telnet으로 login하려고 할 때, /dev/pty 디바이스를 사용합니다.

 

▶ /etc

시스템의 부팅, 셧다운 시에 필요한 파일들과 시스템의 전반에 걸친 설정 파일들 및 초기 스크립트 파일들이 있습니다. 시스템의 전반에 걸친 설정 파일들 및 초기 스크립트 파일들이 있습니다. 시스템에 어떠한 문제가 발생한다거나, 시스템 전체 환경에 관한 설정을 바꾸기 위해서는 이들 디렉토리 내에 포함되어 있는 파일들에 대해서 잘 알아야 합니다.

/etc/rc.d/rc
/bin/sh shell이 시스템이 부트되면, 자동적으로 실행되는 스크립트입니다. 이것은 update, crond, inetd 같은 프로그램을 백그라운드로 실행시키며, 파일 시스템 마운팅, 스왑 영역 활성, 그리고 이런 유사한 다른 작업들을 합니다. /etc/rc.d/rc.local과 /etc/rc.d/rc.# 파일이 포함되기도 합니다.

/etc/passwd
사용자에 대한 정보를 포함하고 있는 문서 파일입니다.

/etc/fdprm
플로피 디스크 파라메터 표입니다.

/etc/fstab
이 파일은 /etc/rc.d/rc 파일 안의 mount -a 명령에 의해 마운팅되는 파일 시스템과 스왑 영역의 목록입니다.

/etc/getty (혹은 /sbin/getty)
이 프로그램은 터미널로 누군가가 login하기를 기다립니다. 명령어 init에 의해 자동적으로 실행되며, login 가능한 터미널 라인이나 가상 콘솔 당 한번씩 실행됩니다. 또한, 사용자의 패스워드를 기다리며, login을 실행합니다.

/etc/gettydefs 혹은 /etc/gettytab
getty가 터미널 라인의 속도, 패러티 검사 등을 어떻게 사용할 것인가를 설정합니다.

/etc/group
/etc/passwd와 유사하며, 사용자 대신에 그룹을 설정합니다.

/etc/init (혹은 /sbin/init)
이 프로그램은 부팅 시에 커널에 의해 첫 번째 프로세스로 실행됩니다. init가 실행된 후에 커널 부팅이 완료됩니다. init는 /etc/rc.d/rc와 getty 등을 실행합니다.

/etc/inittab
init가 시작할 때의 getty의 목록 파일입니다.

/etc/issue
로그인 프롬프트 이전에 출력되는 getty 출력 문서 파일입니다. /etc/issue.net 파일은 remote 로그인 시 프롬프트에 출력됩니다.

/etc/mtab
이 파일은 마운팅된 파일 시스템을 포함하고 있습니다. /etc/rc/rc.d와 mount나 unmount 명령에 의한 셋업이며, 마운팅된 파일 시스템의 목록이 필요할 때 사용됩니다.

/etc/shadow
시스템의 shadow패스워드를 포함하는 파일입니다.

/etc/login.defs
login 명령에 사용되는 설정 파일입니다.

/etc/printcap
/etc/termcap과 유사하며, 프린터를 사용할 때(lpr) 쓰입니다.

/etc/profile
Bourne shell(/bin/sh 혹은 bash)에 의해 로그인 할 때 실행되는 파일입니다.

/etc/securetty
터미널 보안을 위해 사용하는 것으로 root는 이 파일에 열거된 터미널로 로그인 할 수 있습니다. 보통 가상 콘솔들이 열거되어 있으며, 모뎀이나 네트워크로 시스템에 접근하여 수퍼 유저의 권한을 얻는 것을 막을 수 있습니다.

/etc/shells
shell의 목록으로 chsh 명령으로 사용자 로그인 shell을 바꿀 때, 이 파일의 목록에 있는 shell만 바꿀 수 있도록 합니다.

/etc/termcap
터미널의 기능 데이터베이스입니다. 이것은 문서 파일로서 ESCAPE 문자들로서 터미널을 제어할 때 사용됩니다.

/etc/update (혹은 /sbin/update)
/etc/rc.d/rc 에 의해 백그라운드로 실행되는 프로그램의 하나로 매 30초 마다 버퍼 캐시에 있는 하드로 쓰여지지 않은 데이터를 저장합니다. 이러한 것은 전원의 단절이나, 커널의 이상 등을 대비하여 매 30초 마다 데이터를 저장함으로써 데이터 손실의 위험부담을 줄이는 것입니다.

/etc/utmp (혹은 /var/run/utmp)
각각의 터미널에 로그인한 사용자나, 로그인에 관한 정보가 기록되어 있는 이진 파일입니다. 사용자가 로그인하면 login은 누가 로그인을 하고 언제 로그 아웃을 하였는가에 대한 정보를 기록합니다.

/etc/wtmp (혹은 /var/log/wtmp)
/etc/utmp와 유사하며, 단지 존재하는 정보를 덮어 쓰지 않고 계속 추가합니다. /etc/ftpusers, /etc/rpc, /etc/exports 네트워크에 관한 파일들입니다.

 

▶ /home

사용자의 홈 디렉토리로써 login 하였을 경우, 처음으로 위치하게 되는 디렉토리입니다. 예를 들어, /home/foo는 사용자 "foo"의 홈 디렉토리입니다. 시스템이 새로 설치되면, 이 디렉토리 안에 아무 것도 포함되어 있지 않습니다.

 

▶ /lib

부팅과 시스템 운영에 필요한 공유 라이브러리(Shared Library)와 커널 모듈(Kernel Module)이 위치합니다. 공유 라이브러리란 windows 95/98의 DLL(Dynamic Link Library)과 같이 여러 가지 프로그램들에 의해서 사용되는 기능을 별도의 프로그램으로 분리시켜 놓은 것입니다. 커널 모듈도 공유 라이브러리와 같이 커널 안에 자체적으로 포함되지 않고 독립적인 형태로 분리되어 있으면서 부팅 시에 커널에 동적으로 연결되어서 전체적인 커널을 유기적으로 구성하게 되는 별도의 파일(Object File)들입니다.

 

▶ /lost+found

파일 시스템의 이상 유무를 진단하고 복구하는 프로그램인 fsck(File System Check)에 의해서 사용되는 디렉토리입니다. 손상된 파일이나 디렉토리를 /lost+found디렉토리로 연결한 뒤에 오류를 수정하게 되며, 평상시에는 null 파일 링크에 의해서 비어있는 상태로 존재합니다. 리눅스의 파일 시스템인 ext2에 의한 fsck.ext2(File System Check.extended2) 프로그램도 이 디렉토리를 사용합니다.

 

▶ /misc

시스템 아키텍처와 무관한 프로그램들과 자료들이 위치합니다. 레드햇 리눅스는 이 디렉토리를 구성하지 않습니다.

 

▶ /mnt

루트 파일 시스템에 연결된 파일 시스템들의 마운트 디렉토리입니다. 마운트하지 않은 상태에서는 빈 디렉토리로 존재하지만 마운트시키게 되면 해당 파일 시스템의 내용이 그대로 포함됩니다.

 

▶ /opt

Add-On 소프트웨어 패키지가 설치됩니다. 레드햇 리눅스는 이 디렉토리를 구성하지 않습니다.

 

▶ /proc

가상 파일 시스템입니다. 이 디렉토리의 내용들은 시스템에서 운영되고 있는 다양한 프로세서들에 관한 내용과 프로그램에 대한 정보를 포함하고 있습니다. 이 디렉토리에서 볼 수 있는 것은 실제 드라이브에 저장되어 있는 내용이 아니며, 메모리 상에 저장되어 있는 것입니다.

 

▶ /root

시스템 관리자인 root의 홈 디렉토리입니다.

 

▶ /sbin

시스템 관리를 위한 전반적인 실행 유틸리티를 담고 있습니다. 이 디렉토리에 있는 명령어들은 일반 사용자는 실행할 수 없습니다.

 

▶ /tmp

프로세스 진행 중 발생하는 임시 파일들이 저장되는 작업 디렉토리입니다. 따라서 이 디렉토리의 파일들은 수시로 생성되고 삭제되므로 중요한 자료일 경우, 이 디렉토리에 보관해서는 안됩니다. /tmp 디렉토리는 모든 사용자에 대해서 읽기와 쓰기 작업이 허용되며, 스티키 비트(sticky bit)라는 특별한 설정에 의해서 파일의 소유자만이 자신의 소유로 되어 있는 파일을 지울 수 있도록 되어 있습니다.

 

▶ /usr

루트 디렉토리와 함께 중요한 시스템 디렉토리 계층을 구성합니다. /usr 디렉토리에는 공유 가능한 대부분의 프로그램들이 설치되며 네트워크를 이용해서 여러 개의 시스템을 연결할 경우, 이 디렉토리를 공유해서 설치된 프로그램들을 활용할 수 있게 됩니다. 따라서 /usr 디렉토리는 읽기 전용으로 마운트되어야 하며, 가변 자료들은 /var 디렉토리로 심볼릭 링크시켜서 사용하게 됩니다. /usr 디렉토리는 다른 시스템과 연결될 경우, 시스템 운영과 연관되기 떄문에 내부적으로 전체 루트 디렉토리와 유사한 구조를 갖게 됩니다.

/usr/X11R6
X윈도우 시스템을 설치하였다면 이 디렉토리에 설치가 됩니다. X윈도우 시스템은 방대하며, 많은 그래픽 유틸리티와 프로그램들이 그래픽 윈도우로 출력되는 강력한 그래픽 사용자 환경입니다. 이 디렉토리에는 X윈도우 실행 파일, 사양 파일, 자원 파일들을 포함하고 있습니다. X11R6은 X의 버전과 릴리즈 번호를 뜻합니다.

/usr/bin
시스템이 소유하고 있는 소프트웨어를 담기 위한 warehouse입니다. /bin과 같은 곳에는 없는 유용한 실행 파일들을 가지고 있습니다.

/usr/etc
유틸리티와 파일들이 있습니다. 일반적으로 /usr/etc 에 있는 파일들은 /etc 에 있는 것만큼 반드시 필요로 한 것들은 아닙니다.

/usr/include
C 컴파일러를 위한 include 파일을 포함합니다. 이 파일은 데이터 구조 이름과 서브루틴, 상수 같은 C로 작성된 프로그램에서 사용되는 내용을 담고 있습니다. /usr/include/sys 에 있는 파일들은 리눅스 시스템 레벨의 프로그래밍을 할 때 사용됩니다. 만약, C프로그래밍 언어에 익숙하다면, 여기에 printf() 함수가 선언되어 있는 stdio.h 같은 헤더 파일을 찾을 수 있을 것입니다.

/usr/lib
/lib에서 찾을 수 있는 "stub"와 "static"와 같은 라이브러리를 포함하고 있습니다. 프로그램을 컴파일할 때, 프로그램은 /usr/lib에 있는 파일들과 link되며 이 라이브러리 안에 실행 코드가 필요로 할 때, /lib를 찾습니다. 또한, 많은 프로그램들이 /usr/lib 안에 사양 파일을 저장합니다.

/usr/local
/usr 에 포함된 것과 매우 유사하고, 시스템에 반드시 필요로 하는 것은 아니지만, 매우 유용한 것들을 포함하는 데 사용합니다. /usr/local 에 있는 프로그램들은 시스템의 특성의 결정 짓는 소프트웨어들이 있을 수 있습니다.

/usr/man
이 디렉토리는 실제적인 man page를 포함하고 있습니다.

/usr/src
시스템에 있는 다양한 프로그램의 컴파일 되지 않은 소스 코드를 포함하고 있습니다. 여기서 가장 중요한 것은 /usr/src/linux 이며, 이것은 리눅스 커널의 소스 코드를 포함하고 있습니다.

/usr/dict
사전 파일 디렉토리입니다.

/usr/doc
프로그램의 문서와 관련한 파일들이 저장되는 곳입니다.

/usr/games
게임 프로그램들이 위치하고 있습니다.

/usr/info
GNU info파일을 위한 디렉토리입니다.

/usr/sbin
시스템 명령어들이 위치합니다.

/usr/share
아키텍처 독립적인 자료들의 디렉토리입니다.

 

▶ /var

내용이 수시로 변경될 수 있는 변수를 담고 있는 파일들이 위치합니다. 예를 들면, 부팅 중의 시스템 확인 과정은 부팅 때마다 달라질 수 있으므로 부팅 과정을 기록하는 파일은 이 디렉토리에 위치하게 됩니다. /tmp 디렉토리가 파일 자체에 대한 임시 디렉토리인데 반해서 /var 디렉토리는 변경될 수 있는 자료를 포함하고 있는 파일들을 위한 디렉토리입니다.

/var/adm
시스템 관리적인 문제의 파일, 로그 파일, 커널 크래쉬 덤프를 기록한 파일들을 포함합니다.

/var/spool
스풀 파일들이 위치합니다.

댓글쓰기

댓글쓰기 입력폼

포스트 목록 닫기

목록보기