Linux _ 3. 파일 및 디렉토리 구조 (1)

KOREA IT LINUX 과정
리눅스 네번째 시간 (1)
<< 파일 유형 >>
1. 파일 구조
- 리눅스 시스템의 파일 구조는 'filename', 'inode(index node)', 'Data Block' 로 구성

- 파일 이름은 중복되어서는 안됨
- 대소문자를 구분함
- inode는 파일의 속성 정보와 데이터 블럭을 포인트하는 주소정보를 갖고 있음
- 'ls -l'명령어를 이용하여 확인 가능



- 'Data Block'에는 실제 파일의 데이터가 저장되어 있음
- 파일 유형 : 일반 파일, 디렉토리 파일, 링크 파일, 장치 파일 등
→ 장치 파일 : 데이터를 저장하지 않고 장치접근을 관리하기 위한 제어 접근 기능 제공
- 'ls -l' 명령어 사용의 다양한 예
→ 'ls -l /etc/issue'
→ 'ls -ld' : 'd'로 출력되면 디렉토리 파일
→ 'ls -ld /bin' : 'l'로 출력되면 심볼릭 링크 파일
→ 'ls -l /dev/sda' : 'b'로 출력되면 블록 장치 파일
→ 'ls -l /dev/tty' : 'c'로 출력되면 캐릭터 장치 파일
2. 파일 유형 확인
- 'file' 명령어를 이용하여 각각의 파일 유형 확인 가능
→ 일반 파일 유형 확인 : 'cat' 명령어 활용하면 내용 확인까지 가능
→ 'strings'명령어 이용하면 내용 확인 가능 / 이상한 기호 없이 확인 가능
→ 디렉토리 파일 유형 확인
→ 링크 파일 유형 확인
→ 장치 파일 유형 확인
<< 파일 구조 >>
1. 파일 이름
- 파일에 접근하기 위해 사용하며, 같은 디렉토리 안에서 파일 이름이 중복되면 안됨
- 파일 이름 설정 규칙 존재
→ 최대 255글자 까지만 사용 가능
→ 문자와 숫자를 사용할 수 있으며 대소문자 구분 가능
→ .(Dot), _(Underbar), -(Dash)와 같은 특수문자 사용 가능
→ .(Dot)으로 시작하는 파일은 숨긴 파일이며, 시스템 환경 파일로 사용
→ 파일 이름에 공백 또는 탭 사용을 권장하지 않음
2. inode
- inode 에는 파일에 대한 메타 정보 저장되어 있으며 각각의 고유한 inode 번호 할당
- 'df -i' 명령어 실행 시, inode의 용량 확인 가능


→ 파일 종류(File Type)
→ 파일 퍼미션 모드(File Perission Mode)
→ 파일 하드링크 수(Hard Link Count)
→ 파일 소유자 및 그룹(File Ownership, Groupship)
→ 파일 크기(Bytes, 할당된 또는 사용중인 데이터 블럭 수)
→ 마지막 접근 시간(Access Time), 수정 시간(Modification Time, Changed Time)
3. Data Block
- 일반 파일 : 파일의 내용 저장 (ex. ASCII TEXT, 바이너리 데이터, 이미지 데이터 등)

- 디렉토리 파일 : 디렉토리 안에 있는 파일 이름과 디렉토리 이름 저장
- 장치 파일 : 장치의 주-디바이스 번호와 부-디바이스 번호 저장
→ 주-디바이스 번호 : 8 / 부-디바이스 번호 : 0
- 파일 안에 데이터 있는 것도 아님!
- 디렉토리 안에 파일들이 있는 것도 아님!
- 데이터는 데이터 블록에 저장되는 것임!
- 사실은 다 분산되어서 저장되는 것이고, 출력되었을 때 이쁘게 나올 뿐!
<< 디렉토리 파일 >>
- 실습 전 초기 설정

- 일반 파일 확인해보기 : Data Block 에 저장되어있는 정보

- inode에는 'ls-ld test' 명령어를 사용했을 때 나온 결과값이 저장 됨
→ 'ls -i' 에서 test의 번호와 'ls -ai test'로 확인한 'Data Block'과 첫 번째 것과 동일
- HardLink 수 확인
→ 4개의 파일이 존재하고 있는 것 확인 가능
- 해당 파일들의 구조

<< 링크 파일 >>
1. 하트 링크 파일
- 하드링크 파일은 원본 파일과 같은 데이터 사용
- 하드링크 파일과 원본 파일의 inode 번호 동일 / 원본 및 사본의 개념 없음
- 하드링크 파일은 'ln' 명령어를 이용하여 원본파일을 통해서 생성
- 디렉토리는 하드링크 파일을 생성할 수 없음
- 원본 파일 'file1'에 대한 하드 링크 파일 'file11' 생성
→ 'echo' 명령어 활용하여 'file1' 생성
→ 'ln' 명령어 활용하여 하드링크 파일 생성
→ 원본 파일 'file1'과 하드 링크 파일 'file11'의 하드링크 수가 2인지 확인
→ 'file1'과 'file11'은 파일 명만 다르고 메타정보 모두 동일함
→ 'file1'과 'file11'의 한 쪽에만 작성하여도 모두 작성되는 건 확인
→ 그렇다고 하나 삭제했다고해서 다른 복사한 원본 파일이 지워지지는 않음

2. 심볼릭 링크 파일
- 심볼릭 링크 파일은 원본 파일에 링크하여 데이터를 사용
- 심볼릭 링크 파일과 원본 파일의 inode 번호가 다름
- 원본 파일을 삭제하면 심볼릭 링크 파일은 'ls'명령어로 확인은 가능, but 존재 X
- 심볼릭 링크 파일은 'ln'명령어어세ㅓ '-s'옵션을 이용하여 원본 파일을 통해 생성

- 원본 파일 'file2'에 대한 심볼릭 링크 파일 'fil22' 생성
→ 'echo' 명령어 활용하여 'file2'생성
→ 'ln -s' 명령어 활용하여 심볼릭 링크 파일 생성
→ 원본 파일 'file2'과 심볼릭 링크 파일 'file22'의 inode 번호 달라진 것 확인
→ 'file22'의 시작이 'l'인 것을 통해 심볼릭 링크 파일인 것을 알 수 있음
→ 두 파일의 내용은 동일 함 확인
→ 'file2'와 'file22'의 한 쪽에만 작성하여도 모두 작성되는 건 확인
→ 원본 파일인 'file2'를 삭제해도 심볼릭 링크 파일인 'file22'는 삭제되지 않음
→ 하지만 'file22'의 내용을 확인하였을 때 확이할 수 없다고 뜸
- 하드 링크와의 차이점
→ inode번호가 다르며, 서로 다른 파일임
→ 하드 링크 파일은 둘 다 원본의 형태
→ 심볼릭 링크 파일은 원본 파일 삭제 시, 연결된 파일이 의미가 없어짐 (형태는 존재)
→ 심볼릭 링크 파일은 파일과 디렉토리 모두 활용 가능

- 바로가기 만드는 것으로 이해하면 됨!


<< 장치 파일 >>
- 장치 파일은 블록 장치 파일과 캐릭터 장치 파일이 있음
1. 블록 장치 파일
- 블록 단위로 | / O를 발생시킴
- 'ls -l'명령어를 실행하면 맨 좌측 첫 번째 문자가 'b'로 시작하는 것
- 블록단위로 | / O를 발생시킴

2. 캐릭터 장치 파일
- 캐릭터 단위로 | / O를 발생시킴
- 'ls -l'명령어를 실행하면 맨 좌측 첫 번째 문자가 'c'로 시작하는 것
