목표
1. 파일의 구조
2. 일반 파일
3. 디렉토리 파일
4. 링크 파일
5. 디바이스 파일
1. 파일의 구조
- 리눅스 시스템에서 파일의 구조는 파일이름, Inode와 데이터 블럭으로 구분할 수 있다.

▷ 파일의 이름
- 파일을 접근하기 위해 사용한다.
- 접근하기 위해 사용되므로 당연히 파일의 이름은 유일한 것이어야 한다.
- 현재 디렉토리 밑에 존재하는 디렉토리와 같은 이름의 일반파일은 생성할 수 없다.
- 파일의 이름 생성시 규칙
- 최대 255자 까지 생성 가능
- 문자와 숫자 사용 가능, 대소문자 구별
- .(Dot), _(Underbar), -(Dash) 사용가능
- 특수문자 사용 안됨
- .(Dot)으로 시작하는 이름은 시스템의 환경파일들이므로 일반파일의 이름으로 권장하지 않는다.
- 공백이나 탭 사용은 권장하지 않는다.
▷ Inode
- 파일에 대한 속성정보와 데이터 블록을 가리키고 있는 포인터를 포함하고 있다.
- 숫자로 되어져 있으며 각 파일 시스템은 자신의 Inode 테이블을 가지고 있다.
- 새로운 파일 시스템이 만들어 지면 새로운 Inode번호를 할당 받는다.
- Inode의 정보
- 파일의 종류(File Type)
- 파일의 퍼미션모드(File Permission Mode)
- 파일의 소유자, 그룹(File Ownership, Groupship)
- 파일의 링크수(Hard Link Count)
- 파일의 마지막 접근 시간(Access Time), 수정시간(Modification Time)
- 파일의 크기(Bytes, 할당된 또는 사용중인 데이터블럭의 수)
- 두가지 형태의 포인터(Directe Pointers and Indirect Pointers)
▷ 데이터 블럭(Data Block)
- 디스크 공간에 대한 단위로서 데이터를 저장하는 역할을 가진다.
- 일반 파일, 디렉토리, 심볼릭 파일들은 데이터 블록을 사용한다.
- 디바이스 파일은 데이터 블럭에 데이터를 저장하지 않고 주 디바이스숫자 와 부 디바이스 숫자를 담고있다.
- 데이터 블럭의 내용
- 일반파일의 경우 파일의 내용이 들어 있다.
- 디렉토리인 경우 안에 포함된 파일과 디렉토리 이름이 들어 있다.
2. 일반 파일
- 리눅스에서 찾을 수 있는 거의 대부분의 파일 종류이다.
3. 디렉토리 파일
- 윈도우에서 폴더와 같은 역할이라고 생각하면 될 것 같다.
4. 링크 파일
- 명령어 옵션
-b, --backup : 대상 파일이 있다면 백업파일을 생성한다.
-f, --force : 링크를 생성할 대상 파일이 있더라도 강제적으로 새로운 링크를 생성한다.
-i, --interactive : 링크를 생성할 대상 파일이 있을 경우, 삭제 유무를 사용자에게 물어 본다.
-n, --no-dereference : 링크할 원본이 심볼릭 파일이면, 그 심볼릭 파일의 대상 파일을 추적하여 링크한다.
-s, --symbolic : 링크할 원본이 심볼릭 파일이면, 심볼릭 파일을 링크한다.
-S, --suffix backup-suffix : 링크를 생성할 대상 파일이 이미 있을 경우, 이전의 대상파일을 백업할 파일의 확장자를 지정한다.
-V, --version-control : 백업하는 방법을 지정한다. t, numbered-항상 번호로 된 백업파일을 만든다.
nil, existing-대상 파일이 있을 경우에만 백업파일을 만든다.
never, simple-간단한 백업을 만든다.
- 하드링크와 심볼릭 링크의 구조

▷ 하드링크 파일
- 하드링크는 기본적으로 사용되는 것이다.
- 하드링크는 파일명이 하나 더 만들어져 동일한 Inode 번호를 가르키게 된다.
- 같은 Inode 번호를 저장하고 있으므로 원본 파일을 지워도 원본파일의 파일명만 지워질 뿐 Inode가 지워지는 것이 아니기 때문에 링크 파일에 영향을 미치지 않는다.
- 원본 파일과 링크 파일의 권한은 항상 같다. Inode에 권한이 저장되어 있기 때문.
- 명령어 형식
# ln file1 file2

▷ 심볼릭링크, 소프트 링크
- 일반적으로 링크라고 하면 심볼릭 링크를 말한다.
- 심볼릭링크는 일반적으로 상대경로를 사용하지 않는다.
- # ls -l 명령어를 입력했을때 제일앞에 "l"이 있으면 심볼릭링크
- 여러 디렉토리에서 동일한 라이브러리를 요구할 경우, 하나의 파일을 여러 사람이 공통으로 사용할 경우 많이 쓴다.
- 모든 유저에게 모든 권한 (rwxrwxrwx=777)을 준다.
- 포인트 하는 정보가 들어 있을 뿐 원본파일은 아니다.
- cat으로 보여지는 정보가 많던 적던 동인한 size를 갖는다.
- 원본파일이 지워지게 되면 링크 파일에 영향을 미친다.
- 윈도우에서 바로가기 실행파일 같은거라고 생각하자. (파일이 용량이 크던 작던 바로가기 실행파일은 동일한 size!, 원본파일 지워지면 실행안되는 것)
- 명령어 형식
# ln -s file1 file2

※ 하드링크 & 심볼릭링크 차이점
- 두개의 파일의 Inode 번호가 동일한 것 - 하드링크
- # ls -li 했을때 하드링크는 링크 수 증가, 심볼릭링크는 파일명이 file3 -> file2 이런식
- 두개의 파일 사이즈가 동일한 것 - 하드링크
- 파일시스템을 넘어서 링크를 걸 수 있는것은 심볼릭링크, 불가능한것은 하드링크
5. 디바이스 파일
▷ 블럭 디바이스 파일
- 블럭 단위로 I/O 발생
- 디스크 디바이스 이면 I/O단위는 4K
▷ 캐릭터 디바이스 파일
- 바이트 단위로 I/O 발생
- 디스크 디바이스 이면 I/O 단위는 512Bytes
▷ Major Device 번호
- 장치의 종류
- 장치의 종류가 틀리면 Major Device 번호가 틀리다.
▷ Minor Device 번호
- 개별적인 장치의 종류 또는 동작 방법의 차이
- 개별적인 장치의 종류가 틀리면 Minor Device 번호가 틀리다.
- 또는 같은 장치라도 동작 방법이 틀리면 Minor Device 번호가 틀리다.