리눅스의 파일 시스템은
운영체제 관련 파일, 사용자 패키지(Package), 사용자가 만든 파일 등을 관리하는 것입니다
리눅스의 파일은 가장 최상위인 루트(root)부터 그 하위로 만들어지며
루트 파일 시스템은 오직 한 개만 존재합니다
리눅스의 파일 종류를 살펴보면 다음과 같습니다
종류 | 내용 |
루트 파일 |
· 하드디스크 상에서 적어도 하나의 파일 시스템이 존재 · 시스템 프로그램과 디렉터리들이 포함됨 |
일반 파일 | 컴퓨터가 수행 가능한 프로그램 파일이나 원시 프로그램 파일, 텍스트 파일, 데이터 파일 등 |
디렉터리 파일 |
· 다른 파일과 디렉터리들에 관한 정보를 저장하는 논리적인 단위 · 파일명인 문자열과 inode 번호를 연결하는 부분 |
특수 파일 |
· 주변 장치에 연결된 파일로 하나 이상의 특수 파일을 가지고 있어야함 · ttyXX의 파일들은 사용자 터미널(Terminal)을 의미 |
리눅스 파일 시스템의 구조를 살펴보면 다음과 같습니다
구조 | 내용 |
부트 블록 (Boot Block) |
· 파일 시스템으로부터 리눅스 커널을 적재시키기 위한 프로그램 · 컴퓨터 시스템을 부팅하기 위한 부팅에 관련된 이미지를 가짐 · 주기억장치에 모두 올라가면 init 프로세스 가동 · init 프로세스의 프로세스ID는 1 |
슈퍼 블록 (Super Block) |
· 슈퍼 블록이 보유하고 있는 정보 1) 파일 시스템의 크기, 블록 수 등 이용 가능한 빈 블록 리스트 2) 빈 블록 리스트에서 그 다음의 빈 블록을 가리키는 인덱스 3) inode 목록의 크기, 파일 시스템에 있는 빈 inode의 수와 목록 4) 빈 inode 목록에서 그 다음의 빈 inode의 수와 목록 5) 빈 블록과 빈 inode 목록들에 대한 lock 필드 6) 슈퍼 블록들이 수정되었는지 나타내는 플래그(flag) 7) 파일 시스템 이름과 파일 시스템 디스크의 이름 |
아이노드 (inode) |
· 리눅스 커널이 현재 사용하는 자료구조(파일 정보)를 유지하는 구조체 · 기능 1) 할당 및 적용 : 파일 구성 블록에 대한 물리적 위치 정보 2) 파일 생성 : 파일이 생성되면 해당하는 inode가 i-list에 만들어지며 그 inode의 inode number와 파일 이름, 디렉터리가 등록됨 3) 파일 링크 : 기존 파일과 링크할 경우 디렉터리에 그 파일에 대한 새로운 이름이 등록되고 inode number는 본래 있던 파일의 inode number가 복사됨 4) 파일 삭제 : 파일에 대한 inode의 파일 링크 수가 하나 감소하고 디렉터리 엔트리에서 해당 파일의 inode number가 0으로 변경됨
· 블록 관리(Block Management) 방법 1) Single Indirect Block : inode block을 가리키며 실제 데이터 블록을 가리키는 포인터들로 구성 2) Double Indirect Block : 인덱스 블록이 2개의 레이어로 구성되며 첫 번째 인덱스 블록은 두 번째 인덱스 블록을 가리키는 포인터, 두 번째 인덱스 블록은 실제 데이터 블록을 가리키는 포인터로 구성 3) Triple Indirect Block : 인덱스 블록이 3개의 레이어로 구성되며 첫 번째 인덱스 블록은 다른 인덱스 블록을 가리키는 포인터, 세 번째 층 인덱스 블록은 실제 블록을 가리키는 포인터들로 구성
· 가지고 있는 정보 1) 파일 소유자의 사용자ID 2) 파일 소유자의 그룹ID 3) 파일 크기 4) 파일이 생성된 시간 5) 최근 파일이 사용된 시간 6) 최근 파일이 변경된 시간 7) 파일이 링크된 수 8) 접근 모드 9) 데이터 블록 주소 |
데이터 블록 (Data Block) |
· 실제 데이터가 저장되어 있는 파일 형태 |
inode는 파일 링크(Link)정보를 가지고 있는데
파일 링크는 심볼릭 링크(Symbolic Link)와 하드 링크(Hard Link)가 있습니다
심볼릭 링크는 윈도우의 바로가기와 비슷한 기능으로
링크 정보만 가지고 있는 새로운 inode가 만들어지고 inode는 원래 파일의 포인터 정보만을 가집니다
하드 링크는 원본 파일을 복사해서 동일한 inode를 만드는 것으로
원본 파일을 삭제하거나 이동해도 하드 링크는 존재합니다
이제 리눅스 파일 시스템을 생성하는 방법을 알아보겠습니다
파일 시스템을 생성하기 위해서는 하드 디스크를 초기화하고
필요하면 파티션(Partition)을 수행하여 하드 디스크를 분할해야 합니다
이 때 파티션을 수행하는 리눅스 명령어는 fdisk인데 fdisk의 옵션을 살펴보면 다음과 같습니다
옵션 | 설명 |
-l | 현재 파일 시스템 목록 확인 |
-v | 버전 정보 확인 |
-s 장치명 | 입력 장치 크기를 출력 |
-d | 파티션 삭제 |
-n | 새로운 파티션 생성 |
-p | 현재 파티션 설정 상태 확인 |
하드 디스크를 파티션했으면 해당 파티션에 파일 시스템을 생성해야 합니다
파일 시스템을 생성하기 위해서는 mkfs[옵션][장치이름] 명령어를 사용하는데 옵션을 살펴보면 다음과 같습니다
옵션 | 설명 |
-V | 실행되는 파일 시스템의 특정 명령어 등 모든 정보를 출력 |
-t | 파일 시스템 형식 선택 |
-c | Bad Block 검사 및 리스트를 초기화 |
-l | 파일로부터 초기 Bad Block을 읽음 |
-v | 현재 진행사항 출력 |
mkfs 외에도 mke2fs도 있는데 ext2, ext3, ext4 파일 시스템을 생성하는 명령입니다
mke2fs -j 는 저널링 파일 시스템을 ex3으로 생성하는 것입니다
이제 파일 시스템의 무결성을 검사하는 명령어인 fsck에 대해 알아보겠습니다
파일 시스템에는 상위 디렉터리, 하위 디렉터리
그리고 파일 간의 링크 정보(심볼릭 정보) 등을 가지고 있어야 하는데
이러한 정보에 오류가 발생되면 파일 시스템의 구조를 파악할 수 없게 됩니다
그럴 때 이용하는 명령어가 fsck입니다
fsck는 기본적으로 부팅단계에서 자동적으로 실행하게 되고 필요에 따라 직접 실행할 수도 있습니다
fsck의 옵션은 다음과 같습니다
옵션 | 설명 |
-s | 대화형 모드에서 여러 파일 시스템을 점검할 때 fsck 동작을 직렬화함 |
-t | 검사를 수행할 파일 시스템을 지정 |
-A | /etc/fstab 파일에 기술된 파일 시스템을 모두 검사 |
-N | 검사는 수행하지 않고 수행될 내용을 출력 |
-P | 병렬처리를 수행하여 루트 파일 시스템을 점검 |
-R | 루트 파일 시스템은 제외 |
-V | 명령을 포함하여 세부 내역을 출력 |
-a | 무결성 검사 후에 자동검사 수행 |
-r | 대화형 모드를 수행하며 오류를 수정 |
-n | 오류를 수정하지 않고 표준 출력으로 출력 |
-y | 특정 파일 시스템에 대해서 오류를 자동 수정 |
리눅스에서는 특정 디렉터리를 연결할 경우 mount명령을 사용합니다
옵션 | 설명 | |
-v | 자세한 정보 출력 | |
-f | 마운트를 할 수 있는지 점검 | |
-n | /etc/mtab 파일에 쓰기 작업을 하지 않고 마운트 | |
-r | 읽기만 가능하도록 마운트 | |
-w | 읽기 및 쓰기 모드로 마운트 | |
-t 파일 시스템 유형 | 파일 시스템 유형으로 지정 | |
-o 옵션 | default | 일반적인 파일 시스템 |
auto | 부팅 시 자동으로 마운트 | |
exec | 실행 파일이 실행되도록 허용 | |
suid | setuid와 setgid를 허용 | |
ro | 읽기전용 파일 시스템 | |
rw | 읽고 쓰기가 가능한 파일 시스템 | |
user | 일반 사용자도 마운트 할 수 있는 파일 시스템 | |
nouser | root만 마운트 할 수 있는 파일 시스템 | |
noauto | 부팅 시 자동으로 마운트 하지 않음 | |
noexec | 실행 파일이 실행되지 못함 | |
nosuid | setuid와 setgid를 허용하지 않음 | |
usrquota | 개별 사용자의 쿼터 설정이 가능한 파일 시스템 | |
grpquota | 그룹별 쿼리 설정이 가능한 파일 시스템 |
반대로 마운트를 해제하려면 umount 명령어를 사용하는데 옵션을 살펴보면 다음과 같습니다
옵션 | 설명 |
-n | /etc/mtab 파일을 변경하지 않고 마운트를 해제 |
-v | 정보 출력 |
-a | /etc/mtab 파일에 지정된 파일 시스템을 모두 해제 |
-t 파일 시스템 | 지정된 파일 시스템을 해제 |
끝으로 mount를 수행할 때 참조하는 파일인 fstab 파일의 필드를 살펴보고 마치겠습니다
파일 시스템 장치(레이블 명) |
마운트 포인터(디렉토리 명) |
파일 시스템 형식(ext2, ext3 등) |
옵션(Read Only 및 Read Write) |
덤프(0, 1) |
파일 점검 옵션(0, 1) |
이번 학습은 여기까지 하겠습니다
그럼 이만-_-
'Security' 카테고리의 다른 글
[Security] 윈도우(Window) 시스템 (0) | 2020.03.11 |
---|---|
[Security] 리눅스 부팅(Booting) 및 인증과 권한 관리 (0) | 2020.03.08 |
[Security] 리눅스(Linux) (0) | 2020.03.08 |
[Security] 장치 관리 (0) | 2020.03.08 |
[Security] 입출력 처리 (0) | 2020.03.07 |