삽질의 현장/- 리눅스

[Surro] :: 3. 리눅스 파일 시스템

shovelman 2013. 11. 1. 11:30

1. 파일

- 정규 파일 (regular file) : 텍스트 파일, 바이너리 파일.

- 디렉토리 (directory) : 일련의 디렉토리 항(entry)들을 가진 파일.

> 각 항은 디렉토리에 있는 파일 이름과 inode 번호로 구성되어 있음.

- 특수 파일 : 장치(device) 파일, 파이프 파일 등.

> 장치 파일 : 주변장치(디스크, 프린터 등)를 파일 시스템 내의 파일 이름으로 접근함.

 

* 블록 장치 : 블럭 형식으로 데이터를 옮기기 위한 장치, 하드디스크 CD-ROM 처럼 주소체계를 가지고 있어서 랜덤으로 접근할 수 있는 장치.

* 블록 장치 파일 : 시스템과 장치 간의 데이터 이동이 블록 단위로 수행됨. 임의 접근 가능.

* 문자 장치 : 한번에 하나의 문자를 전달하기 위한 장치, virtual terminal, serial modem과 같은 것들이 포함됨.

* 문자 장치 파일 : 터미널 이동이 임의 길이의 문자(파이트)열로 수행됨. 임의 접근이 가능 or 불가능.

- 장치 파일은 주장치 번호(장치의 유형) , 부장치 번호(장치의 유닛 - 같은 유형의 여러 장치를 구분)를 가진다.

 

+파이프 파일 : 한 프로그램의 출력을 중간 파일 없이 다른 파일의 입력으로 바로 보내는 유닉스 메커니즘.

 

2. 파일의 소유권

- 리눅스에서는 모든 파일과 디렉터리에 대한 접근 권한을 지정하여 권한 부여가 가능하다.

- 권한 부여는 보안 관리상 꼭 필요한 기능.

 

- 파일 사용자 : 소유자(u), 파일의 그룹에 속하는 사용자(g), 그 외 사용자(o)

- 처음 비트가 파일이면 '-', 디렉터리이면 'd'로 표시..

- 파일의 소유권은 수퍼 사용자 또는 소유자가 변경 가능. > chmod

- 허가권의 유형 : 읽기(r), 쓰기(w), 수행하기(x).

 

 

<상대모드>

 

 <절대 모드>

 

<모드 값의 예, 상태> 

 

 

3. 파티션

: 디스크 공간의 분할.

> 디스크의 공간을 나누고 각 공간 사용이 다른 공간을 간섭하지 않도록 함.

> 다른 OS를 설치하기 위해서 각 OS를 다른 파티션에 설치함.

 

- 각 디스크는 대응하는 장치 파일(device file)이 있다.

ex)

- IDE 디스크 : /dev/hd● ( ● = a ~ z)

- SCSI 디스크 : /deb/sd●

- 개수가 다를 때 : 1개 > /dev/hda, 2개 > /dev/hda, /dev/hdb.

- 디스크 파티션을 나누면 : /dev/hda > /dev/hda1, /dev/hda2.

 

4. 파일 시스템

- 파일을 저장, 삭제, 읽기 등의 파일 관리 기능을 제공.

- 파일에 대한 접근 제어. (보호)

 

ex)

ext2 : 리눅스 기본 파일 시스템.

ext3 : ext2에 저널링 (journaling) 기능이 추가된 파일 시스템.      

 

- 일반적으로 생성하는 파티션

 

- / : 루트 파티션. 단일사용자 모드로 수행하기 위해 필요한 핵심 시스템 파일이 저장됨. 핵심 기능들이 보호되도록 다른 파일 시스템과 분리해 놓는다.

 

      - /boot : 리눅스 커널 이미지, 맵 파일 등을 저장함.

 

- /usr : 사용자 도구, X 윈도 들의 시스템, 주로 유틸리티(서비스 프로그램)들이 저장됨.

+X 윈도 시스템 : GUI환경의 구현을 위한 소프트웨어와 네트워크 프로토콜.

 

- /var : Spool 디렉토리 (메일, 프린트 등으로 가는 파일을 임시저장)와 로그 파일을 저장함. 부주의하여 매우 큰 파일이 생길 수 있으므로 별도의 파티션으로 분리함.

 

- /tmp : 사용자 응용 프로그램에서 임시 파일을 저장하는 곳으로 사용함. 시스템의 안정성을 높이기 위해 파티션을 분리할 필요가 있음. (동적이기 때문에 -writing 큰 임시 파일이 생길 수 있다.)

    :/tmp 디렉토리는 누구나 읽고 쓸 수 있는 특성 때문에 공격자들이 공격툴을 런칭하는 곳으로 사용됨.

 

- /home : 사용자 홈 디렉토리.

 

- /swap : 가상 메모리를 저장함.

 

- 파티션 만들기 : fdisk, parted

- 파티션 보기 : df, cat /etc/fstab

/etc/fstab : 모든 파티션 정보를 가지고 있음, 부트 과정에서 자동으로 마운트될 수 있음.

 

4-1. 루트 파티션의 구성

 

 

- / (root) : 루트 디렉토리는 최상위 디렉토리이며, 모든 디렉토리는 /(root)를 기준으로 생성됨. /는 모든 디렉토리의 출발점이자 다른 파티션의 연결점.

 

- /bin : 시스템을 사용하기 위한 기본적인 명령어가 존재하며 싱글 모드로 부팅할 때 사용하는 명령어와 시스템을 복구할 때 사용하는 필수 명령어 등이 존재한다. (ls, mount, rm ....)

 

- /boot : 부팅에 필요한 커널과 부팅할 때 필요한핵심 파일이 들어있다.

> 시스템을 초기화하는 데 필요한 파일들이 위치함.

 

- /dev : 장치 파일이 위치한다.

 

- /etc : 시스템 시작 파일을 포함한 시스템 환경설정에 필요한 설정파일 (시스템의 모양과 동작을 결정하는)이 존재한다.

 

- /home : 사용자의 홈 디렉토리가 생성되는 곳이다. (ftp, mysql, tomcat 등 별도의 공간을 요구하는 서비스를 위한 데릭토리로 사용할 수 도 있다.)

 

- /lib : 중요한 동적/ 공유 라이브러리와 커널 모듈들이 위치함.

+라이브러리 : 다양한 위치의 콘텐츠를 한 데 뫃아놓은 가상 폴더.

 

- /media : 외장하드, 플로피, CD, DVD와 같은 외부장치가 자동으로 마운트되는 위치.

 

- /mnt : CD - ROM과 플로피 장치 등 일시적인 마운트를 하기 위한 마운트 포인트를 제공한다. 일반적으로 해당 디렉토리는 비어 있으며 CD-ROM 이나 플로피를 마운트한 후 해당 디렉토리로 이동할 경우 해당 매체의 내용을 볼 수 있다.

 

- /opt : add-on 패키지가 설치되는 디렉토리.

 

- /root : 시스템 관리자인 수퍼유저의 홈 디렉토리.

 

- /proc : 실제로 존재하지 않는 일종의 환영이다. 이 파일 시스템은 커널이 메모리 상에 만들어 놓은 것으로 디스크에는 존재하지 않는다. 

     >커널이 프로세스에게 정보를 전달할 수 있도록 만들어진 가상 파일 시스템.

 

- /sbin : 관리자(수퍼유저)가 사용하는 시스템 운영에 필요한 명령어가 존재하는 디렉토리.

 

- /srv : HTTP(/srv/www/) or FTP와 같은 서비스들의 데이터 디렉토리가 위치함.

 

- /sys : 커널 과정에서 시스템에 대한 정보를 획득하거나 설정할 수 있는 가상 파일 시스템.

 

- /tmp : 임시 파일을 저장하는 디렉토리. 수시로 파일이 생성되고 삭제됨. 시스템을 재구동 하는 경우, 존재하는 파일은 모두 삭제가 된다. > 파일을 저장하는 용도로 사용할 수 없다.

 

- /usr : 대부분의 유틸리티, 응용프로그램 및 설정 파일, 라이브러리 등이 위치

> 거의 모든 응용프로그램이 이 곳에 위치하여 일부 설정 파일도 들어 있다.

 

- /var : 빠르게 갱신되거나 변화되는 가변 데이터들이 위치함.

ex) 시스템 운영할 때 발생되는 로그(log), 메일 송/수신할 때 임시로 저장되는 스풀(spool), 프린터로 전송하기 위해 임시로 저장하는 프린트 스풀 데이터, 아파치(apache) 웹서버 관련 자료(/var/www), MySQL의 데이터 베이스, FTP의 최상위 디렉토리 등이 그 대표적인 예.

 

5. 파일 시스템 만들기

: 파티션을 만들고 나면, 각 파티션에 파일 시스템을 만들어야한다. > format을 한다.

- ext2 파일 시스템을 만드려면 : mke2fs /dev/hdb3

- ext3 파일 시스템을 만드려면 : mkfs.etc3 /deb/hdb3

      - swap 파일 시스템을 만드려면 : mkswap /dev/hdb2

 

6. 마운트 (Mount)

: 루트 파티션 밑의 한 서브 디렉토리에 파티션을 연결하는 것.

: 루트파티션부터 찾아갈 수 있게 됨

* 즉, 여러가지 하드웨어장치들을 사용하려면 리눅스서버에 인식을 시켜야 되는데 이를 가능하게 해주는 것.

 

 

 

<참조 : 구글링, 리눅스 파일 시스템 기초>