-
파일의 구조
일반 파일(Regualr File)
디렉토리 파일(Directory File)
링크 파일(Link File)
- 심볼릭 링크(Symbolic Link) # ln -s file1 file2
- 하드 링크(Hard Link) # ln file1 file2
장치 파일(Device File)
- 블럭 장치 파일(Block Device File)
- 캐릭터 장치 파일(Character Device File)
소켓 파일(Socket File)
도어 파일(Door File)
파이프 파일(Pipe File)
파일과 디렉토리의 내용들을 다루기 위해서는 위와 같은 기본적인 명령어에 익숙해져야 한다.
리눅스 시스템에서 파일의 구조(File Structure) 파일이름, Inode (Index Node)와 데이터 블럭(Data block)로 구분할 수
있다. 파일의 이름은 유일해야 하고 대소문자는 다른 문자로 인식하게 된다. Inode는 파일의 속성정보와 데이터 블럭을 포
인트하는 정보가 들어 있으며 ls 명령어에 -l 옵션을 사용하여 대부분의 정보를 확인 할 수 있다. 데이터 블록안에는 실제
파일에 저장되는 내용이 들어가게 된다. 일반파일, 디렉토리, 심볼릭링크 파일들은 모두 하나이상의 데이터 종류를 저장한
다. 하지만 디바이스 파일은 데이터를 저장하지 않는다. 대신에 디바이스 파일은 디바이스 제어접근(Access)을 제공한다.
일반 파일 (Regular File)
리눅스에서는 모든 것을 파일로 다룬다. 일반 파일, 디렉토리 파일, 링크 파일등이 있다.
파일의 종류에 관한 정보는 ls 명령어의 -l 옵션을 사용하여 출력되는 화면에 첫 번째 문자에서 확인이 가능하다.
또한 file 명령어에 파일의 이름을 인자로 받아서 파일의 종류를 확인 할 수도 있다.
문자 파일 종류 - 일반 파일 (Regular File) d 디렉토리 파일 (Directory File) b 블록 디바이스 파일 (Block Device File, (예) /dev/sha, /dev/hda, /dev/fd0) c 문자 디바이스 파일 (character Device File. 입출력 장치) l 심볼릭 링크 (Symbolic Link File) 퍼미션 제일 앞에 있는 문자로 구분이 가능하다
[참고] 자주 사용되는 기본 명령어 디렉토리에 관련된 기본 명령어 : ls, pwd, mkdir, cd, mv 등
파일과 관련된 기본 명령어 : cat, more, cp, rm, head, tail 등
파일과 디렉토리 검색에 관련한 기본 명령어 : grep, find 등(1) 파일의 이름
리눅스 시스템에서 파일의 이름은 파일을 접근하기 위해 사용한다. 파일은 Inode와 함께 파일의 구성요소로서 같은 디렉토리 안에서 파일의 이름은 유일한 것이어야 한다. 예를 들어 현재 디렉토리 밑에 존재하는 디렉토리와 같은 이름은 일반파일을 생성 할 수는 없다.
파일/디렉터리 이름 생성 시 규칙
파일과 디렉터리 이름에는 /을 사용할 수 없음
파일과 디렉터리 이름에는 알파벳, 숫자, 붙임표(-), 밑줄(_), 마침표(.)만 사용가능
파일과 디렉터리 이름에는 공백 문자, *와 같은 특수문자 사용 불가
파일과 디렉터리의 이름은 대소문자를 구별(다른 문자로 취급)
파일과 디렉터리 이름이 .(마침표)로 시작하면 숨김 파일로 간주
(2) Inode
Inode는 파일에 대한 정보를 담고 있는 부분이다. 일반적으로 Inode에는 크게 두가지 부분을 포함하고 있다.
첫 번째는 파일에 대한 속성정보(Ownership, Groupship, File Permission Mode등)와 데이터 블록을 가리키고 있는 포인
터(Direct/Indirect Pointer)이다. Inode는 숫자로 되어져 있으며 각 파일 시스템은 자신의 Inode 테이블(Inode Tables)을
가지고 있다. 파일이 새로운 파일시스템이 만들어지는 경우 파일시스템 안에서는 새로운 Inode 번호을 할당 받게 된다.
쉽게 말하자면 윈도우의 바탕화면의 파일을 실행 시킬때
이 파일 자체가 프로그램이냐?
그럴때도 있지만 대부분이 그렇지 않다.
바탕화면의 원본파일을 실행시키면 컴퓨터는 원본 파일이 가르키는 파일의 데이터로 찾아간다
그 역할을 도와주는것이 Inode 라는 개념으로 일종의 연결 통로라고 생각하면 쉽다
A라는 파일을 실행하면 A와 연결되어있는 연결통로(inode)를 따라가면 파일의 데이터가 나와서 쉽게 실행된다
예를 들면 파일의 크기, 파일의 권한, 소유자명 등에 대한 정보들이 보관되어있다.
[참고] Inode의 정보
• 파일의 종류(File Type)
• 파일의 퍼미션모드(File Permission Mode)
• 파일의 소유자, 그룹(File Ownership, Groupship)
• 파일의 링크수(Hard Link Count)
• 파일의 마지막 접근 시간(Access Time), 수정시간(Modification Time)
• 파일의 크기(Bytes, 할당된 또는 사용중인 데이터블럭의 수)
• 두가지 형태의 포인터(Directe Pointers and Indirect Pointers)
(3) Data Block
데이터블럭은 디스크 공간에 대한 단위(Units of Disk Space)로서 데이터를 저장하는 역할을 가진다. 일반파일, 디렉토리,
심볼릭 파일들은 데이터 블록을 사용하지만 일반파일과 다른 구조를 가지고 있는 디바이스 파일은 데이터블럭에 데이터
를 저장하지 않고 주 디바이스 숫자(Major Device Number)와 부 디바이스 숫자(Minor Device Number)를 담고 있다.
[참고] Data Block의 내용
• 일반파일의 경우 파일의 내용이 들어 있다.
• 디렉토리인 경우 안에 포함된 파일과 디렉토리이름이 들어 있다.
일반파일은 리눅스에서 찾을 수 있는 거의 대부분의 파일종류이다.
데이터 블록에 들어가는 데이터는 많은 형태는
ASCII (American Standard Code for Information Interchange) 텍스트, 바이너리 데이터, 이미지 데이터, 데이터베이스
데이터, 애플리케이션 데이터 등이 있다.
일반파일을 만드는 방법 또한 많다.
예를 들어 vi 편집기를 사용 할 수도 있고, 컴파일을 통해 바이너리를 생성 할 수도 있고,
touch 명령어를 통해 빈 파일을 생성 할 수도 있다.
링크 파일(Link File)
- 하드 링크 파일(Hard Link) #ln file1 file2
- 심볼릭 링크 파일(Symbolic Link File) #ln -s file1 file2
하드 링크(Hard Link) #ln file1 file2
(원본) (대상)
원본 파일이 사용하고 있는 inode를 같이 사용 하는 파일이다.
그렇기 때문에 원본 파일이 변경되거나 사라지더라도 하드 링크 파일은 원본 데이터를 찾아간다
하드 링크는 똑같은 파일크기로 원본 파일이 수정 될 경우,
하드 링크된 파일도 원본과 동일하게 변경되며 항상 같은 내용을 유지 할 수 있다. 원본이 삭제 되어도
원본과 동일한 내용을 가지고 있으므로 자원을 공유하되 데이터를 안전하게 관리하고자 할 때 유용하게 사용할 수 있다.
a.txt란 파일을 hi root라는 정보를 넣고 생성
a.txt 파일을 대상으로
하드 링크로 b.txt파일을 생성 후
원본인 a.txt 파일을 삭제하고
하드 링크 파일인 b.txt를 실행했을때
원본파일에 영향을 받지 않는 다는 것을 알 수 있다.
심볼릭 링크(Symbolic Link) #ln -s file1 file2
(원본) (대상)
윈도우의 바로가기라고 생각하면 된다
원본 파일이 지워지게 되면 링크 파일에 영향을 미치게 됨
일반적으로 링크라고 하면 심볼릭 링크를 말하는것이다.
심볼릭 링크는 불필요한 파일의 복사를 하지 않아도 된다.
하나의 파일을 여러 사람이 공통으로 사용 할 경우 많이 씀
모든 유저에게 모든 권한( rwxrwxrwx=777)을 준다.
포인트 하는 정보가 들어 있을 뿐, 원본 파일은 아니다
[참고] 심볼릭 링크 -> 윈도우의 바탕화면 아이콘
"아이콘".lnk
a.txt란 파일을 hi linux라는 정보를 넣고 생성
심볼릭 링크로 a.txt를 대상으로 b.txt 생성
a.txt란 원본을 지우고 b.txt를 실행해 보지만
그런 파일이 없다고 나온다
원본파일에 영향을 받는다는것을 알 수 있다.
# man ln
옵션 설명 -b --backup 대상 파일이 있다면 백업파일을 생성한다 -f --force 링크를 생성할 대상 파일이 있더라도 강제적으로 새로운 링크를 생성한다. -i , --e 링크를 생성할 대상 파일이 있을 경우, 삭제 유무를 사용자에게 물어 본다. -n --no-dereference 링크할 원본이 심볼릭 파일이면, 그 심볼릭 파일의 대상 파일을 추적하여 링크한다. -s --symbolic 링크할 원본이 심볼릭 파일이면, 심볼릭 파일을 링크 한다. -S --suffix backup-suffix 링크를 생성할 대상 파일이 이미 있을 경우, 이전의 대상 파일을 백업할 파일의 확장자를 지정한다. -V --version-control
{numbered existing,simple}백업하는 방법을 지정한다.
t .numbered : 항상 번호로 된 백업파일을 만든다
nill, existing : 대상 파일이 있을 경우에만 백업 파일을 만든다.
never, simple : 간단한 백업을 만든다하드링크와 심볼릭 링크의 차이
하드 링크
파일 시스템을 넘어서 링크를 걸 수 없다
디렉토리에 링크를 걸 수 없다
Inode 번호가 동일
하드링크 수가 링크 파일의 수와 동일하게 올라감
원본 파일의 파일크기가 링크파일의 크기와 동일
심볼릭 링크
파일 시스템을 넘어서 링크 가능
디렉토리를 파일에 링크 할 수 있음
Inode 번호가 다름
상대경로를 사용하지 않음
링크 파일의 크기가 변하지 않는다
하드 링크 수가 변하지 않는다
(실무 예) 웹서버(WAS 서버)에서 웹소스 디렉토리 마이그레이션 하는 작업
----- DAUM Web Server ----- ----- Web Client -----
httpd(80) <---------------- http://www.daum.net:80
/was/index.html
작업: /was ---> /zeus
# ln -s /was /zeus
(실무 예) 관리 디렉토리 통합
FTP : /etc/vsftpd
DNS : /var/named
WEB : /var/www/html
test 디렉토리 안으로 링크를 걸어서
간편하게 이동하는 것을 볼 수 있다.
디바이스 파일 (Device Link File)
디바이스 파일(장치 파일, Device File)
- 블럭 디바이스 파일(Block Device File)
- 캐릭터 디바이스 파일(Character Device File) = Raw Device File
블럭 디바이스 파일
블럭 단위로 I/O 발생
디스크 디바이스(Disk Device)이면 I/O 단위는 4K(4096 Bytes)
대표적인 장치
하드 디스크
테이프 장치
플로피 디스크
광 자기 디스크
캐릭터 디바이스 파일
바이트 단위로 I/O 발생
디스크 디바이스(Disk Device)이면 I/0 단위는 512 Bytes(1 Sector = 512 bytes)
대표적인 장치
단말기
프린터
플로터 및 기억장치
Block Device와 Character Device의 가장 큰 차이점은 Application의 I/O 요구가 있을 시
데이터를 File System에서 읽어오느냐 Character Device(Raw device)에서 읽어오느냐의 차이인데
File System에서 읽어올 경우 운영체제의 File System Cache에 Buffering을 사용하고
Character Device에서 읽어 올 경우에는 파일시스템이 없기 때문에
당연히 파일, 디렉토리, 억세스 컨트롤 등을 Application에서 직접관리 해야한다.
'Linux' 카테고리의 다른 글
tracert, traceroute란? (사용 방법과 목적) (0) 2023.04.18 Linux - 리눅스 디렉터리 종류와 특징 (0) 2022.11.30 SW/리눅스Linux : Shutdown 종료하는 방법, 예제, 명령어 (0) 2022.11.23 Linux 파일 과 디렉터리의 소유와 허가권 (0) 2022.11.15 Linux(리눅스) Runlevel(런 레벨), vi 에디터 , (0) 2022.11.09