Linux File Syetem에 대한 새로운 포스팅

http://jiming.tistory.com/359




# File Systme

: 보조기억장치를 관리하는 소프트웨어


---------------------------------------------------------------------------------------------

cf. 

# Memory Management System 

: 주기억장치 관리 소프트웨어


# File System 및 Memory Management System의 역할

: 자원을 최대한 아껴서 사용하기 위해 각각의 policy가지고 내/외부 단편화를 관리


# File System과 Memory Management System

: 둘다 기억장치를 관리하는 소프트웨어임

: 차이점? File System은 "Naming"이라는 특성을 사용하여 관리를 수행 

---------------------------------------------------------------------------------------------


# 디스크의 구조




# File System이 저장하는 정보

- meta data : 파일의 속성정보, 데이터블록의 인덱스 정보 등

- user data : 사용자가 실제 저장하려는 데이터


# 디스크의 전체 용량

; 헤드의 갯수, 트랙/실린더의 갯수, 각 트랙마다 존재하는 섹터의 갯수 등에 따라 용량등의 디스크의 물리적 특성이 결정


# 디스크 접근 시간

- seek time : 헤드를 요청한 데이터가 존재하는 트랙 위치까지 이동하는 데 걸리는 시간

- rotation latency : 요청한 섹터가 헤드 알래로 위치될 때까지 걸리는 시간

- transmission time : 헤드가 섹터의 내용을 일거나 쓰는 시간


# 디스크의 논리구조와 디스크 I/O

- 파일 시스템에서 디스크는 논리적 구조를 가짐

- 논리적 구조는 disk block의 집합으로 표현됨(각 블록은 논리적인 번호를 가짐)

- 일반적으로 디스크 블록의 크기는 페이지 프레임의 크기와 같음(보통 4KB)

- 또 디스크 I/O의 병목현상으로 최근에는 디스크 블록의 크기를 더 크게 함.

- 디스크블록의 크기가 4KB, 섹터의 크기가 512byte 일때. 하나의 디스크 블록에 8개의 섹터가 대응되므로 한번에 8개의 섹터가 읽혀짐

    (블록 디바이스 드라이버의 read_ahead 변수과 관련이 있음)

  => 블록의 번호와 해당되는 섹터들의 매핑의 관리는 디스크 디바이스 드라이버 or 디스크 컨트롤러가 담당함


# 디스크블록 할당방법

- used / free 

- 연속 할당(sequential allocation)

  : 연속할당기법을 사용하여 파일에게 디스크를 할당해 주었다면 파일의 크기가 커져 디스크의 용량이 모자를때 데이터 전체가 다른 연속된 공간으로

이동해야함.

- 불연속 할당(non-sequential allocation)

  : 각각의 파일에 대한 디스크 블록들의 위치정보를 저장해야함. -> 블록체인기법, 인덱스블록기법, FAT 등등


- 블록체인기법 : 각 블록에 포인터를 두어 다음 블록의 위치를 기록. 

파일의 끝을 읽으려는 경우 처음부터 찾아가야한다는 단점이 있음 

중간의 블록이 유실된 경우 나머지 데이터까지 모두 영향을 받음

-  인덱스 블록 기법 : 블록들에 대한 위치정보를 저장하기 위해 인덱스 블록을 따로 두는 방법

인덱스 블록이 유실되면 나머지 전체 데이터가 영향을 받음

또 인덱스 블록을 위한 별도의 공간과 인덱스 블록의 용량의 한계에대한 방법이 필요

파일마다 하나의 인덱스 블록이 존재

- FAT(File Allocation Table) : 같은 파일에 존재하는 블록들의 위치를 FAT이라는 자료구조에 저장

파일 시스템이 관리하는 공간 내에 전역적으로 존재하는 FAT 구조를 사용하여 데이터에 접근

파일 시스템 전체적으로 하나의 FAT이 존재

FF : 파일의 끝 / 0 : free 상태

FAT 구조의 유실은 파일시스템 내의 모든 파일에 영향을 미치므로 대부분의 FAT구조 파일시스템은 중복으로 FAT구조를 관리


# FAT File System


그림출처. http://www.recovermyfiles.com/fat-recovery.php



# FAT File System의 metadata


그림 출처. http://www.differencebetween.info/difference-between-fat32-and-ntfs



- FAT table

- directory entry

- super block



# msdos file system의 Directory Entry

: msdos의 file system은 대표적인 FAT방식의 file system임


- 각 파일마다 디렉터리 엔트리를 가짐

- 디렉터리 엔트리가 모여 디렉토리를 구성

- 리눅스에서 디렉터리는 하나의 파일로 취급(자신이 포함하는 파일들의 이름을 데이터로 가지는 특수한 파일)


struct msdos_dir_entry {


_u8    name[MSDOS_NAME];       /* name and extension 11 */

_u8    attr;                               /* attribute bits */

_u8    lcase;                             /* Case for base and extension */

_u8    ctime_cs;                        /* Creation time, centiseconds(0~199) */

_le16  ctime;                            /* Creation time */

_le16  cdate;                            /* Creation date */

_le16  adate;                            /* Last access date */

_le16  starthi;                           /* High 16 bits of cluster in FAT32 */

_le16  time,date,start;                 /* time, date and first cluster */ 

_le32  size;                              /* file size (in bytes) */

};



# CWD와 디렉터리 계층 구조

- CWD : Current Working Directory

- 리눅스는 사용자 태스크의 CWD를 항상 task_struct 구조체에 유지, 상대경로 -> 절대경로

- '/(root)' 디렉터리 엔트리를 먼저 읽어 해당 데이터 블록을 찾아, 디렉터리 엔트리를 읽어가며 접근을 원하는 파일의 경로로 찾아감

- '/(root)'의 디렉터리 엔트리의 번호는 관리하는 공간의 맨 앞부분에 위치한 'super block'이라는 곳에 저장


# msdos file system의 super block

- sector의 크기

- cluster(sector가 여러개 모여 구성)의 크기

- FAT 테이블의 위치 및 크기

- 파일시스템의 전역 정보

- '/'의 위치 (root_cluster변수)

=> 파일의 전체적인 정보와 '/'의 위치를 저장


struct msdos_sb_info {


unsigned short sec_per_clus;    /*  sectors/cluster   */

unsigned short cluster_bits;    /*  log2(cluster_size)  */

unsigned int cluster_size;    /*  cluster size  */

unsigned char fats, fat_bits;    /*  number of FATs, FAT bits (12 or 16)  */

unsigned short fat_start;    

unsigned long fat_length;    /*  FAT start & length (sec.)  */

unsigned long dir_start;    

unsigned short dir_entries;    /*  root dir start & entries  */

unsigned long data_start;    /*  first data sector  */

unsigned long max_cluster;    /*  maximum cluster number  */

unsigned long root_cluster;    /*  first cluster of the root directory  */

unsigned long fsinfo_sector;    /*  sector number of FAT32 fsinfo  */

struct mutex fat_lock;    

struct mutex nfs_build_inode_lock; 

struct mutex s_lock;    

unsigned int prev_free;    /*  previously allocated cluster number  */

unsigned int free_clusters;    /*  -1 if undefined  */

unsigned int free_clus_valid;    /*  is free)clusters valid?  */

...

}


# inode 구조

: 파일이나 디렉토리의 모든 정보를 가지고 있는 자료구조


- 리눅스의 디폴트 파일시스템인 ext4 등, ext 계열의 파일시스템에서 사용

- 128 byte

- 하나의 파일에 하나의 inode 할당

- 파일의 이름을 제외한 모든 정보를 저장

- inode number를 가지고 처리

- inode table에서 해당 파일이나 디렉터리의 정보를 찾을 수 있음

- file name은 inode numver와 함께 디렉터리 안에 저장

- file system을 생성 할 때만 inode 갯수를 지정할 수 있으며, 이 갯수는 즉 최대 file의 갯수와 같음



- i_blocks : 해당 파일이 가지고있는 데이터 블록의 갯수 저장

- i_mode : 해당 inode가 관리하는 파일의 속성 및 접근제어 정보 저장

- i_links_count : 해당 inode가 가리키는 파일 수(또는 링크 수)

- i_uid, i_gid : 파일을생성한 소유자의 id 및 group id

- i_atike, i_ctime, i_mtime : 파일의 접근시간, 생성시간, 수정시간


# i_mode 변수

: 해당 inode가 관리하는 파일의 속성 및 접근제어 정보를 저장하는 변수


- 16bit로 구성


- 상위 4bit : 파일의 유형

S_IFREG 정규파일

S_IFDIR 디렉터리

S_IFCHR 문자 장치 파일

S_IFBLK 블록 장치 파일

S_IFLNK 링크 파일

S_IFFIFO 파이프 

S_IFSOCK 소켓

...


- 다음 3bit 

u bit : setuid(set user id), 파일이 수행될 때 수행시킨 태스크의 소유자 권한이 아닌, 파일을 생성한 사용자의 권한으로 동작할 수 있게함

g bit : setgid(set group id)

s bit : sticky bit, 태스크가 메모리에서 쫒겨날 때, swap 공간에 유지되도록 할 때, 디렉터리에 대한 접근 제어에 사용


- 다음 9bit : 파일 접근 제어. 사용자 / 그룹 / 기타 사용자


# i_block[15]

: inode 하단부에 존재하며, 파일에 속한 디스크 블록들의 위치를 관리


- 총 15개의 엔트리로 구성

- 12개의 direct block : 실제 파일의 내용을 담고있는 디스크의 데이터 블록을 가리키는 포인터

- 3개의 indirect block 

single indirect block :  단일 간접블럭, 하나의 인덱스 블럭을 가짐

double indirect block : 이중 간접블럭, 2단계의 인덱스 블럭을 가짐

triple indirect block :  삼중 간접블럭, 3단계의 인덱스 블럭을 가짐


* 하나의 인덱스 블럭은 4KB. 1024개의 포인터(4byte*1024=4096)를 가짐

즉 데이터블럭의 크기가 4KB라고 가정하였을 때, single indirect block으로 지원가능한 파일의 크기는 1024개 * 4KB = 4MB임.

double indirect block : 1024 * 1024 * 4KB = 4GB

triple indirect block : 1024 * 1024 * 1024 * 4KB = 4TB


=> inode가 지원할 수 있는 최대 파일사이즈는 48KB + 4MB + 4GB + 4TB

but, 리눅스가 지원하는 실제 파일사이즈는  4GB(or 2GB)

: inode가 4TB정도의 파일을 지원할 수 있다고 하더라도, 

  리눅스 커널 내부의 파일 관련 함수들이 사용하는 변수나 인자들이 아직 32bit로 구현되어 있기때문


# Ext2 file system의 디렉터리 엔트리

: 파일의 속성정보와 inode의 연결정보를 저장


#define EXT2_NAME_LEN 255


struct ext2_dir_entry {


_le32    inode;         /*  inode number  */

_le16    rec_len;       /*  directory entry length  */

_le16    name_len;    /*  name length  */

char     name[];        /*  file name  */

}


=> EXT2 파일시스템의 디렉터리 엔트리는 FAT 방식과는 다르게 간단한 정보만 유지하고 실제 데이터 블록 인덱싱등의 세부적인 정보는

    inode 번호를 가지고 찾을 수 있는 inode 자료구조에 저장




# Ext2 File System, more 


* Ext3, 4 : Ext2를 기반으로 저널링 기능을 추가하여 신뢰도 및 속도를 향상 (Ext 2와 호환됨)

* IDE방식의 디스크 : hd(hda, hdb, hdc...), SCSI방식의 디스크 : sd

* 파티션 : 시스템에 장착한 디스크를 논리적인 영역으로 분할한 개념. 리눅스에서는 각 디스크마다 최대 64개의 파티션을 제공할 수 있음

              (hda1, hda2, hda3, hdb1, hdb2, hdc1, hdc2, hdc3 ...)

- 파티션에 파일시스템 만들기 : mke2fs, mkfs.XXX ...

- 파티션 당 파일시스템이 만들어짐


# Ext2 File System Layout





- 파티션에 Ext2 파일시스템을 만들면 여러개의 block group으로 구성

- block group : 접근성을 위함. 

  관련 inode와 disk block들을 인접한 실린더에 유지하여 seek time을 줄이기위해 인접한 실린더를 block group으로 지정


- '/'는 inode번호 '2'를 가짐

- 최초에 실행되는 inode 번호는 '11'


# Block Group X

 Super Block

 - 파일 시스템의 전체적인 정보를 저장

 - 파일 시스템의 크기, 마운트 정보, 데이터 블럭의 갯수, inode 갯수, 블럭그룹 번호, 블록의 크기, 그룹당 블룩 수, 슈퍼블록의 수정여부 정보

 Group Descriptor

 - 해당 파일 시스템 내의 모든 Block Group들의 정보를 저장

 - Block Bitmap의 블럭 번호, Inode Bitmap의 블럭 번호, 첫번째 Inode Table Block의 블럭 번호, 그룹안에 있는 빈 블럭 갯수, 그룹안에 있는 inode의 갯수, 그룹안에있는 빈 디렉토리 갯수 

* 크기가 일정하지 않아 Block Bitmap의 위치에 영향을 미치므로 그 위치 정보도 저장

 Block Bitmap

 - 데이터 블록 내에서 빈 공간을 관리하기 위해 사용

 - Block 사용 현황을 bit로 표현 (Super Block, Group Descriptor Block, inode table block 등등)

 - 한 블럭그룹 내의 각각의 블럭은 Block Bitmap의 각각의 bit에 대응

 - 사용중인 block은 Block Bitmap의 해당되는 인덱스의 값이 1로, 사용중이지 않으면 0으로 표현

 Inode Bitmap

 - inode table 내에서 빈 공간을 관리하기 위해 사용

 - Inode 사용 현황을 bit로 표현

- 한 블럭그룹내의 각각의 inode는 Inode Bitmap의 각각의 bit에 대응

- 사용중인 inode는 Inode Bitmap의 해당되는 인덱스의 값이 1로, 사용중이지 않으면 0으로 표현

 Inode Table

 - 파일/디렉터리 관리를 위한 inode들이 저장

 - 파일 시스템 구축 시 계산된 값으로 결정. 고정된 값을 가짐

 - 인접하는 연속된 블럭으로 구성. 각 블럭은 미리 정의된 inode 갯수를 포함

 - Inode Table의 첫 번째 블럭번호를 Group Descriptor에 저장

 - 모든 inode의 크기는 128byte

 - 1024byte의 inode table block은 8개의 inode를 가질 수 있음

 - 4096byte의 inode table block은 32개의 inode를 가질 수 있음 

 Data Blocks

 - 파일에서 데이터를 저장하는 블럭

 - inode에 포함되어 있으며, inode는 몇개의 데이터 블럭을 포함




# Ext 3, 4 File System

: 신뢰성 및 성능향상을 위해 Ext2에 여러 기술을 접목시켜 업그레이드 한 파일시스템


- 목적 : 특정 파일로 인해 발생한 문제가 파일시스템 전체에 영향을 주는 것을 막고, 성능 향상을 도모하자

- Ext2를 기반으로 하여 Ext2 file system과 호환이 가능



# Ext3의 특징

1. Hash 기반의 HTree 도입 

: 빠른 디렉터리 탐색을 도모

  ext2는 단순 linked list로 구현, 한 디렉터리에 파일이 많이 존재할수록 검색 시간이 효율적이지 못하였던 것을 개선


2. fault tolerant를 위해 강력한 저널링(journaling)기능 지원

: 디스크에서 별도의 공간을 차지함


* 저널링 모드

- Journal : 파일시스템에 데이터를 쓰기 전, 모든 데이터를 저널에 기록하고, 추후에 실제 파일시스템에 데이터를 복사

느린 속도, 안전성이 높음

- Ordered : meta data에 한하여 Jounal을 사용. user data는 실제 파일시스템에 저장. Journal에 쓰여진 meta data는 쓰기 순서를 보장

일반적으로 사용됨

- Writeback : Ordered와 비슷하지만 쓰기 순서를 보장하지는 않음.

속도면에서의 향상, 안정성이 떨어짐


* 저널링기능 사용

: 파일시스템을 마운트 할 때 -J 옵션을 이용. 커널내의 JBD(Journaling Block Device)와 유기적으로 동작


3. online-resizing

: LVM(logical volume manager)를 지원하여 파일시스템이 관리하고있는 용량을 동적으로 늘릴 수 있는 기법을 도입

 시스템의 가용시간을 향상



# Ext4의 특징

1. 선할당(preallocation)기법, 지연할당(Delayed allocation)기법의 도입

- 선할당 기법 : 파일시스템의 일관성과 속도를 향상

파일 생성 시 미리 일정 개수의 블록을 할당해주어 물리적으로 연속된 블록을 할당하여 성능을 향상

- 지연할당 기법 : 단편화 방지

우선 자유 블록 카운트만 먼저 갱신하고, 실제 할당은 뒤로 미루는 방식


2. extent기반 데이터 블럭 유지

: 대용량 파일의 메타데이터를 줄일 수 있음. 

디스크상에 연속적인 블럭을 할당하였다고 하더라도 각 데이터 블럭을 가리키기 위해 해당 파일의 inode에 존재하는 총 15개의 직접/간접 블록들을 이용하여 블록마다 하나씩 지정해야함. 

  ex. 500번부터 50개의 block을 사용할 때, 기존에는 500,501,502,503,504...의 데이터를 모두 저장

이때 extent기반의 데이터 블록 유지방법은 "(500,50)"이라는 정보만을 저장함으로써 metadata의 크기를 절약 할 수 있음

또한 데이터 블록을 인덱싱하는데 걸리는 시간도 절약


3. Journaling checksum

: ext3의 Journaling 기능의 성능을 향상


4. 대용량 파일 시스템과 큰 크기의 파일 지원


5. 온라인 단편화 제거 지원


......





참고.

- 리눅스 커널 내부 구조(책)

- http://cafe.naver.com/securitycommunity/127




--------------------------------------------------------------------------------------------------------------------------------------------------------------------

[펌] 

리눅스 파일 시스템

 http://egloos.zum.com/nix102guri/v/392605


1.2 파일 시스템의 종류

리눅스는 다양한 파일 시스템을 지원한다. ext2, ext3, minix, xiats, umsdos, hpfs OS/2, isofs, CD-ROM, msdos, nfs, sysv 등이 있다. 이 파일 시스템들은 각각 다음과 같은 특징을 가지고 있다.

◎ minix
과거 미닉스에서 사용되어졌던 파일 시스템으로 리눅스 파일 시스템 대부분의 기능을 제공하는 파일 시스템이다.

◎ xiafs
미닉스의 제한이 이었던 파일 이름과 파일 시스템에 대한 제한을 보안한 미닉스 파일 시스템의 수정 버전이다. 이 파일 시스템에는 추가된 새로운 기능은 없다. 한때 ext2와 함께 사용되었던 파일 시스템이었으나 현재는 많이 사용되지 않는다.

◎ msdos
도스의 FAT파일 시스템과 호환을 지원하는 파일 시스템이다. 또한 msdos와 OS/2와 윈도NT FAT파일 시스템과도 호환된다

◎ hpfs OS/2
OS/2의 파일 시스템이다. 하지만 현재는 읽기 전용인 파일 시스템으로 파일 시스템에 대한 읽기만이 가능하다.

◎ isofs CD-ROM
ISO기준을 따르는 표준 CD-ROM의 파일 시스템이다. isofs CD-ROM은 CD-ROM에 좀더 긴 파일명을 사용할 수 있도록 확장된 록 브릿지가 기본으로 지원된다.

◎ umsdos
MS-DOS 파일 시스템을 리눅스 상에서도 긴 파일명과 소유자, 접근 허가, 링크와 장치 파일 등을 사용할 수 있도록 확장한 파일 시스템이다. umsdos는 일반적으로 DOS 파일 시스쳄이 마치 리눅스 파일 시스템인 것처럼 보이도록 하는 기능을 제공하므로 따로 리눅스를 위한 파티션은 필요하지 않는다.

◎ nfs
네트워크 파일 시스템이다. 네트워크 상의 많은 컴퓨터들이 각각의 시스템에 가진 파일들을 서로 쉽게 공유하기 위해 제공되는 상호간의 파일 시스템 공유 파일시스템이다.

◎ sysv
System V/386, Xenix 그리고 Coherent 파일 시스템이다.

◎ ext
리눅스 초기에 사용되던 파일 시스템으로 호환성이 없던 ext2의 구 버전이다. 지금은 대부분 하지 않는다.

◎ ext2
리눅스는 미닉스 파일시스템을 처음으로 사용했다. 그러나 여러가지 제약 조건과 성능이 뛰어나지 못하였다. 이를 보안 하기 위해 EXT(Extened File System)이 제시 되었다. 이 파일 시스템은 리눅스 전용으로 설계되어 1992년 4월에 소개 되었다. 또한 1993년에는 2차 확장 파일 시스템인 EXT2가 ext의 여러가지 문제점을 보안하여 나왔다.


2. 디렉토리 구조

리눅스의 기본 디렉토리 구조는 트리 구조를 하고 있다. 그리고 디렉토리 구조는 기본구조를 제외하고 사용자의 설정에 따라 달라질 수 있다. 리눅스의 디렉토리 구조는 파일 시스템 표준안 (FSSTND, Linux File System Standard)을 기반으로 하는 것이 바람직하다. 파일 시스템 표준안은 리눅스상에서 어떻게 파일 시스템을 구성할 것인지에 대한 표준안을 제정하기 위해서 만들어진 문서이다. 표준안을 무조건 따르라는 강제력은 없지만 파일의 위치가 일관된게 유지되어 프로그램 작성, 포딩은 물론 시스템 관리도 쉬워지는 이점이 있기에 배포판들은 이 표준안을 지키고 있다.

2.1 디렉토리 기능 및 내용

대부분의 리눅스는 FHS(Filesystem Hierarchy Standard) 표준 파일 시스템 계층을 사용하고 같은 목적의 파일들은 같은 장소에 일관되게 모아 관리하므로 시스템에 자원이나 프로그램들을 쉽게 찾을 수 있다.

◎ /
루트 디렉토리라고 부르는 리눅스 시스템에서 가장 최상위 디렉토리며 디렉토리 구조의 시작이다. 시스템관리자의 홈인 /root와는 다르다. / 디렉토리 아래에 /bin, /etc, /boot, /mnt, /usr, /lib, /home, /dev, /proc, /var, /sbin, /tmp, /root, /lost+found 등의 디렉토리가 존재한다.

◎ /bin
binaries의 약어로 이진 파일들이며 리눅스에서 가장 기본이 되는 명령어들이 모여 있는 디렉토리이다. 디렉토리의 파일들을 보면 대부분이 실행 파일임을 알 수 있다. 또한 이곳에는 부팅에 필요한 명령어들이 위치하여 부팅후에 시스템의 계정 사용자들이 사용할 수 있는 일반적인 명령어들도 위치 하고 있다.

◎ /etc
이 디렉토리는 리눅스 시스템에 관한 각종 환경 설정에 연관된 파일들과 디렉토리들을 가진 디렉토리이다. 대부분의 이 디렉토리의 파일들은 시스템 관리자에 의해 관리되는 파일들이다. 웹 서버 환경 설정, 시스템 계정 사용자 정보, 패스 워드 관리, 시스템의 파일 시스템 관리 파일, 여러가지 시스템 보안에 관련된 파일들, 시스템 초기화 설정 파일, TCP/IP 설정 파일 등 시스쳄 전반에 걸친 거의 모든 환경 설정 파일들이 모두 이 디렉토리에 있다.

◎ /etc/rc.d
시스템의 부팅과 시스템 실행 레벨 변경시에 실행되는 스크립트들이 저장되어 있는 디렉토리이다. 리눅스의 6가지 실행 레벨로 각각의 해당 디렉토리가 있다.

◎ /etc/shadow
파일에서 패스워드 부분만을 따로 저장하는 파일이다. 이 파일에 패스워드는 암호화 되어 셰도우 패스워드 형태로 저장되어 있으며 시스템 관리자만이 접근할 수 있기 때문에 크래킹 등에 대한 우려가 상대적으로 적다.

◎ /etc/group
시스템의 그룹에 대한 정보를 저장하고 있는 파일이다.

◎ /etc/inittab
init를 설정하는 파일이다.

◎ /etc/issue, /etc/issue.net
getty에 의해서 로그인을 위한 프롬프트가 뜨기 전에 출력되는 메시지를 설정하는 파일이다. 리눅스 시스템으로 접속할 경우 가장 처음으로 볼 수 있는 메시지이다. 보통 시스템에 대한 설명과 각종 환영 메시지를 전달하기 위해서 사용된다. issue 파일의 내용은 보통 시스템의 터미널에서 볼 수 있다. 그리고 /etc/issue.net 파일의 내용은 리모트상에서 시스템으로 접속할 경우 볼 수 있다.

◎ /etc/motd
'Message of the day'의 약자로 시스템으로의 접속에 성공할 경우 쉘이 뜨기 전에 출력되는 메세지를 설정하는 파일이다.

◎ /etc/profile, /etc/csh.login, /etc/csh.cshrc
시스템이 시작될 때 사용자가 로그인을 할 때 본쉘이나 C쉘에 의해서 실행되는 스크립트 파일이다. 일반적으로 사용자들에 대한 기본 환경 설정에 사용된다.

◎ /etc/securetty
시스템 관리자가 시스템에 로그인할 수 있는 안전한 터미널에 대한 정보가 저장되어 있다. 일반적으로 가상콘솔이 설정되어 있다. 이것은 네트워크를 통해 시스템으로 침입해 시스템 관리자의 권한을 획득하는 크랙킹을 막기 위해서이다.

◎ /ete/shell
시스템에서 안정적으로 사용할 수 있는 쉘에 대한 정보를 저장하고 있는 파일이다. 만약 chsh명령을 사용해 사용중인 쉘을 바꾸려면 이 파일에 저장되어 있는 쉘중에 선택해야한다. 또한 ftp데몬의 경우 사용자의 쉘을 검사하여 /etc/shell에 저장되어 있지 않은 쉘을 사용한다면 로그인을 허용하지 않는다.

◎ /boot
리눅스 커널이 저장되어 있는 디렉토리로서 각종 리눅스 boot에 필요한 booting지원 파일들이 저장되어 있는 디렉토리이다.

◎ /mnt
외부 장치인 플로피 디스크, 시디롬, 삼바등을 마운트하기 위해서 제공되는 디렉토리이다. 임시로 사용되는 디렉토리이므로 프로그램들은 /mnt에 어떤 파일 시스템이 마운트 되었는지 자동으로 인식하지 않는다. 또한 /mnt는 보통 여러 개의 하위 디렉토리로 나누어 사용되고, 평소에는 각 디렉토리들은 비어 있다.

◎ /usr
시스템에 사용되는 각종 프로그램들이 설치되는 디렉토리이다. 프로그램과 관련된 명령어 미치 라이브러리들이 이 디렉토리에 위치 하게 된다. 또한 X 시스템관련 파일들과 리눅스 커널 소스, 각종 C언어 과련 해더 파일 등도 이 디렉토리 안에 저장되어 있다.

◎ /usr/bin
리눅스 시스템에서 사용되는 각종 프로그램들이 저장되어 있으며 /bin 디텍토리에 없는 다양한 실행 파일들이 저장되어 있는 디렉토리이다.

◎ /usr/X11R6
X 윈도우 시스템에 사용되는 모든 파일들이 이 디렉토리 안에 저장된다. 이 디렉토리는 X 윈도우 시스템의 개발과 설치를 좀더 쉽게 하기 위해서 전체 시스템 디렉토리 구조에 통합되지 않고 독자적인 구조를 가진다.

◎ /usr/etc
/etc 디렉토리에는 각종 환경 설정 파일들이 있듯이 이곳에도 여러 가지 시스템 환경 설정 파일들이 저장되어 있다./usr/etc의 파일들은 /etc디렉토리 안의 파일들과 달리 꼭 팔요한 파일들은 아니다.

◎ /usr/sbin
시스템 관리자를 위한 명령어들이 저장되는 디렉토리이다. 보통 이 디렉토리의 명령어들은 루트 파일 시스템에는 필요가 없는 서버 프로그램들이 저장된다.

◎ /usr/include
C언어 관련 해더 파일드이 저장되어 있는 디렉토리이다.

◎ /usr/lib
각종 라이브러리들이 저장되어 있는 디렉토리이다. 만약 사용자가 직접 작성한 프로그램을 컴파일한다면 해당 프로그램은 /usr/lib 디렉토리의 파일에 link된다. 또한 이 라이브러리 안에 실행 코드가 필요하다면 /lib 디렉토리를 참조한다.

◎ /usr/local
시스템의 특정적인 프로그램들이 저장되는 디렉토리이다.특정적인이란 시스템 관리자에 의해서 따로 설치되는 프로그램들을 말한다.

◎ /usr/man
man페이지의 실제 내용들이 저장되어 있는 디렉토리이다. 디렉토리를 살펴보면 man1, man2, man3, 등과 같이 여러개의 디렉토리들로 나누어져 있는 모습을 볼수 있다.man1 디렉토리는 섹션 1의 man 페이지 소스를 위한 디렉토리를 말한다.

◎ /usr/src
시스템에서 사용하는 각종 프로그램들의 컴파일되지 않은 소스 파일들이 저장되어 있다./usr/src/linux 디렉토리가 바로 리눅스의 커널소스를 저장하고 있는 디렉토리이기 때문이다.

◎ /usr/X386
/usr/X11R6 디렉토리와 유사한 티렉토리로 X11 Release 5를 위한 디렉토리이다.

◎ /usr/info 
GNU info문서들을 저장하고 있는 디렉토리이다.

◎ /usr/doc
각종 문서들이 저장되어 있는 디렉토리이다

◎ /lib
프로그램들의 각종 라이브러리들이 존재한다. 대부분 공유 라이브러리로 더 편하게 사용할 수 있으며,파일의 크기를 줄여서 실행할 때 불러 사용하게 된다. /lib/modules 디렉토리에는 커널로 로딩 사능한 커널 모듈들이 저장되어 있다.

◎ /home
시스템 계정 사용자들의 홈 디렉토리와 ftp,www,등과 같은 서비스 디렉토리들이 저장된다. 이곳의 디렉토리와 파일들은 시스템에서 상용되지 않는다. 단지 리모트상에서 시스템으로 접속하는 사용자들을 위한 공간이다.

◎ /dev
디렉토리에는 시스템의 각종 디바이스들에 접근하기 위한 디바이스 드라이버들이 자장되어 있는 디렉토리이다. 이 디렉토리는 물리적인 용량은 갖지 않는 가상 디렉토리이다. 대표적으로는 하드 드라이브,플로피, 씨디롬 그리고 루프팩장치 등이 존재한다. 리눅스 시스템은 윈도우와 달리 각종 디바이스 장치들을 하나의 파일로 취급한다. 따라서 시스템은 각각의 장치들로부터의 정보를 /dev 디렉토리에 존해하는 해당 장치 파일로 부터 가지고 온다.

◎ /dev/console
시스템의 콘솔이다.

◎ /dev/hda
시스템의 하드 디스크이다. 여기서 /dev/hda는 첫 번째 하드 디스크를 의미하는 것이다./dev/hda1은 첫번째 하드 디스크의 첫번째파티션,/dev/hda2 두 번째 파티션등을 의미한다.만약 시스템에 여러 개의 하드 디스크가 부착되어 있다면 /dev/hdb,/dev/hdc 등의 파일도 /dev/hdb1,/dev/hdb2등과 같은형식으로 저장되어 있다.

◎ /dev/lp
시스템의 병렬 포트 장치들이다.

◎ /dev/null
이 디렉토리는 블랙홀이라고도 부르는 특별한 장치이다. 이 장치로 데이터 등을 보내면 모두 폐기되므로 주의해야 할 것이다.

◎ /dev/pty
시스템으로의 원격 접속을 위한 'pesudo-terminal'들이다. 만약 시스템 계정 사용자드이 원격지에서 시스템으로 텔넷등을 이용하여 시스쳄에 접속을 시도한다면 이들은 /dev/pty 디바이스들을 사용하게 되는 것이다.

◎ /dev/sda
SCSI 장치들이다. 만약 시스템에 스카시 하드 디스크를 장착했다면 시스템은 /dev/sda파일에서 정보를 얻어 장치에 접근할 것이다.

◎ /dev/ttyS,/dev/cuaS
/dev/ttyS은 직렬포트 장치들이고, /dev/cauS는 Callout. 장치이다.

◎ /dev/tty
시스템의 가상콘솔들이다. 이 가상 콘솔의 기능은 하나의 화면에 여러 개의 콘솔들을 만든다. 만약 사용자가 시스템 앞에 앉을 수 있다면,Alt + F1, Alt + F2등을 이용하여 리눅스에 제공한 여러개의 가상 콘솔을 직접 볼수 있을 것이다.

◎/proc
시스템의 각종 프로세서, 프로그램 정보 그리고 하드웨어적인 정보들이 저장된다. 이 티렉토리는 가상 파일 시스템으로 가상 파일 /dev와 마찬가지로 하드 디스크상에 물리적인 용량을 갖지 않는다. 즉 디렉토리에 존재하는 파일들은 실제 하드 디스크에 저장되지 않고 커널에 의해 메모리에 적재 된다. 디렉토리 안의 파일들은 현재의 시스템 설정을 보여 주는 것이다.

◎ /proc/1
프로세스 번호가 1인 프로세스에 대한 정보를 저장하는 디렉토리이다. 다른 프로세스들도 자신의 고유한 프로세스 번호의 디렉토리를 가진다는 것을 의미한다.

◎ /proc/cpuinfo
프로세서의정보를 저장하고 있는 파일이다. cpu의 타입, 모델, 제조회사, 각종 성능 등의 정보를 제공하여 준다.

◎ /proc/devices
현재 시스템 커널에 설정되어 있는 장치들에 대한 정보를 저장하고 있다.파일등의 정보로 모든 시스템의 장치 목록에 대한 정보를 얻을 수 있다.

◎ /proc/dma
현재 시스템에서 사용하고 있는 DMA 채널에 대한 정보를 저장하고 있다.

◎ /proc/filesystem
시스템에 설정되어 있는 파일 시스템에 대한 정보를 저장하고 잇는 파일이다.

◎ /proc/interrupts
현재 사용중인 인터럽트와 인터럽트의 사용량에 대한 정보를 저장하고 있는 파일이다.

◎ /proc/ioports
현재 사용중인 I/O 포트에 대한 정보를 저장하고 있는 파일이다.

◎ /proc/kcore
현재 시스템에서 사용중인 메로리의 실제 이미지이다. 이 파일은 실제 메모리의 내용을 모두 가진 것처럼 보이지만 프로그램이 필요로 하는 부분의 이미지만을 필요할 때 만들어 제공한다.

◎ /proc/kmsg
커널에 의해서 출력되는 메시지들을 저장하고 있는 파일이다.이것은 또한 syslog파일에도 저장된다.

◎ /proc/loadavg
현재 시스템의 평균 부하량(Load Average)에 대한 정보를 저장하고 있는 파일이다.이 파일을 통해서 시스템이 현재 수행해야 하는 일이 얼마나 많은지를 알려주는 3가지 지표에 대한 정보를 얻을 수 있다.

◎ /proc/ksyms
시스템 커널이 사용하고 있는 심볼들에 대한 정보를 저장하고 있는 파일이다.

◎ /proc/meminfo
현재 시스템이 사용중인 메모리의 사용량을 저장하고 있는 파일이다./proc/meminfo에서 실제 메모리는 물론 가상 메모리에 대한 정보도 얻으 수 있다.

◎ /proc/self
이 디렉토리를 보고 있는 프로그램 자시의 프로세스 디렉토리로 링크도어 있다. 만약 서로 다른 2개의 프로세스가 /proc 디렉토리를 보고 있다면 두 프로세스는 서로 다른 링크를 보게 된다. 이를 통해서 프로그램들이 자신의 프로세스 디렉토리를 쉽게 찾을 수 있다.

◎ /proc/stat
시스템의 현재 상태에 대한 다양한 정보를 저장하고 있는 파일이다.

◎ /proc/uptime
시스템이 얼마나 오래 동작했는지에 대한 정보를 저장하고 있는 파일이다.

◎ /proc/version
시스템이 현재 사용중인 커널 버전에 대한 정보를 저장하고 있는 파일이다.

◎ var
시스템에서 사용되는 동적인 파일들이 저장된다. 각종 시스템 로그 파일, 사용자 로그인에 대한 보안기록,메일서버를 운영한다면 사용자들에게 전송된 메일들을 임시로 저장한다.

◎ /var/cache
포멧된 메뉴얼 페이지들이 잠시 대기(Cache)하기 위한 디렉토리이다.

◎ /var/lib
시스테이 동작하면서 계속 수정되고 변경되는 파일들을 위한 디렉토리이다.

◎ /var/local
/usr/local 디렉토리에 설치된 프로그램들의 각종 데이터들이 저장되는 디렉토리이다.

◎ /var/lock
잠금 파일들이 저장되는 디렉토리이다.프로그램들이 특정한 장치나 파일들을 프로그램 자신이 독점적으로 사용하려 할 때 /var/lock 디렉토리에 잠금 파일을 만들어 사용하게 된다. 그렇기 때문에 다른 프로그램들은 장치나 파일을 사용하기 전에 우선 이 디렉토리의 내용을 조사하여 해당 장치나 파일들이 사용중인지 확인하게 된다.

◎ /var/log
프로그램들의 로그 파일들이 저장되는 디렉토리이다. 이 디렉토리에 wtmp파일은 login 파일과 messages파일은 syslog의 로그 파일이다.wtmp는 시스쳄의 모든 사용자 로그인과 로그 아웃에 대한 정보르 저장하고 있는 파일이고,messages는 커널과 시스템의 모든 출력 메세지를 저장하고 있는 파일이다./var/log 안의 파일들은 시스템의 사용량에 따라 그 크기가 무한대로 증가할 있으므로 정기적으로 파이들을 삭제하는 등 디렉토리 관리가 필요하다

◎ /var/run
시스템의 현재 정보들을 저장하고 있는 디렉토리이다./var/run/xinetd.pid 파일의 경우 현재 사용중인 xinetd 데몬의 프로세스 번호를 저장하고 있다.

◎ /var/spool
메일이나 뉴스, 프린터 큐 등고 같은 시스템상에서 대기 상태에 있는 작업들을 위한 디렉토리이다. 각각의 대기 작업들은 모두 /var/spool 아래 고유의 디렉토리에 위치하게 된다. 예를 들어 시스템의 계정 사용자들의 메일은 /var/spool/mail 에 저장된다.

◎ /var/tmp
/tmp에 저장된 임시 파일들중에 오래 보관되어야 할 임시 파일들이 저장되는 디렉토리이다.

◎ /tmp
이름에도 알 수 있듯이 임시 파일들을 위한 디렉토리이다.

◎ /root
시스템 관리자의 홈 디렉토리이다

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

'System > Linux Kernel' 카테고리의 다른 글

Device Tree, 리눅스 커널 4.0  (0) 2015.08.29
메모리관리  (0) 2015.08.18
인터럽트 / 트랩  (0) 2015.08.16
VFS, Virtual File System  (0) 2015.08.16
리눅스 부팅과정과 런레벨  (0) 2015.08.13

+ Recent posts