파일의 구성 요소 및 종류


리눅스에서는 모든 처리 과정을 파일 단위로 구성되며, 계층적인 구조의 특성을 지니기때문에 리눅스에서의 파일이라는 개념은 '파일 이름', 'I-node', '데이터 블록'의 세 가지 요소를 모두 충족해야만 파일로서 존재의 가치를 가지게 된다.



1. 파일 이름

 파일의 이름은 사용자가 파일을 접근하고 구분하며, 조작하는데 사용하기 위해서 필요하다.


2. I-node

 'I-node'는 'Index node'라고도 하며, 파일을 기술하는 디스크 상의 데이터 구조로서 파일의 데이터 블록이 디스크 상의 어느 주소에 위치하고 있는가에 대한 정보를 기록하기 위해 사용되어진다. 하나의 파일을 생성하면 하나의 I-node가 생성되어지고 I-node 번호가 부여되며, 해당 파일 정보를 통해 I-node 번호를 알 수 있다. 또한, I-node 정보 중 link에는 해당 I-node를 참조하는(가리키는) 파일의 개수가 저장되어 있다. 일반적으로 파일을 만들면 I-node의 link가 0인 위치에 I-node를 생성하고 정보를 저장한 뒤 link를 1로 만들게 된다. 이러한 I-node번호와 link의 개수를 확인하기 위해서 'ls' 명령의 '-i'옵션을 사용한다.

 파일 생성 시 먼저 파일의 데이터를 저장하기 위한 디스크 내의 공간을 확보하고, 파일이 저장될 주소에 대한 정보를 기록하기 위해 I-node는 0부터 시작하는 정수의 형태로 고유의 식별 번호를 가지게 된다. 리눅스에서 파일이 생성될때 각각 I-node와 데이터 블록을 갖게 된다.

 파일을 삭제하면 파일 이름과 실제 data를 연결하는 다리(I-node)가 끊어진거여서 바로 HDD복원을 한다면 쉽게 할수 있다.


I-node 확인 명령 : ls -il

파일시스템에서의 I-node 확인 명령 : df -i (df : 디스크 용량 확인)


I-node에 저장된 정보

-파일의 종류

-파일의 소유권 (사용자(소유자), 그룹)

-파일의 액세스 모드

-파일의 타임스탬프 (파일 갱신일)


3. 데이터 블록

 디스크 장치에 파일을 저장할 때 실제 데이터는 특별한 구분 없이 디스크에 차례로 저장되는 부분을 데이터 블록이라고 한다. 데이터 블록에서 파일을 저장할 때 어떠한 파일인지 구분하지 않기 때문에 파일들을 구분할 수 있는 부가적인 정보가 필요하며, 바로 이것을 리눅스에서는 I-node를 이용해서 해결한다.



파일의 종류


리눅스 시스템에서는 하드웨어도 하나의 파일로 인식하므로 파일의 종류는 다양하다.


1. 일반 파일

 리눅스에서 대부분 차지하는 것은 일반 파일이며, 정보를 저장하는 역할을 한다.


파일의 종류 확인 명령 : ls -l

                          ls -F


2. 디렉터리 파일

 디렉터리 파일은 리눅스와 같이 컴퓨터 파일시스템에서의 디렉터리와 특수 파일로 서로 연관되어 있는 파일들을하나의 그룹으로 만들어 저장하도록 구분되어 있는 공간을 의미한다. 디렉터리는 I-node에 대한 포인터만 저장하기 때문에 파일의 이름과 그 파일의 I-node 번호를 매핑하는 항목의 리스트로만 구성되어 있다.


3. 링크 파일

 리눅스에서는 파일시스템에 링크라는 개념을 도입하여 여러 개의 이름이 하나의 I-node에 연결되므로 실제 파일이나 디렉터리 혹은 또 다른 링크를 가리키도록 연결해 준다. 링크를 추가한다는 것은 단순하게 디렉터리 엔트리를 만드는 것을 의미하며, 심볼릭 링크와 하드 링크로 구분된다.


3.1 심볼릭 링크(Symbolic Link)

 리눅스에서의 일반적인 링크라 함은 심볼릭 링크(symbolic link)를 지칭하며, 다른 표현으로는 소프트 링크(soft link)라고도 한다. 원본 파일은 그대로 둔 채 사용하기 위해서 그 파일을 가리키는 기능을 수행하며(윈도우에서 바로 가기 기능), 심볼릭 링크 파일을 삭제해도 원본 파일에는 아무런 영향을 미치지 않는다.


3.2 하드 링크(Hard Link)

 하드 링크(hard link)는 원본 파일을 복사한 다음 사본을 만드는 과정을 의미하며, 심볼릭 링크와 마찬가지로 링크로 접근하거나 원본에서 파일의 내용을 수정하였다면 원본과 하드 링크된 파일이 모두 수정되어 항상 같은 파일의 내용을 유지하게 된다. 즉, 하드 링크는 동일한 I-node를 갖는 .파일을 생성하는 것으로 파일의 실제 I-node의 정보를 공유하기 때문에 동일한 파일이 여러 곳에 존재하는 것처럼 보이게 된다.


-하드 링크 파일은 복사가 아니며 원래 파일 데이터에 대한 또 다른 접근 경로이다.

-하드 링크는 데이터를 복사한 것이 아니라 이미 존재하는 데이터의 위치만 I-node를 통해 가리키고 있어서 별도의 데이터 저장을 안하며, 심볼릭 링크는 자신이 가리키고 있는 파일의 위치를 데이터로 저장하기 때문에 야간의 용량(보통 4KB)를 차지한다.

-파일이 지워지면 쓸모 없어지는 심볼릭 링크와는 다르게 하드 링크는 1개라도 남아 있는 경우 실제 데이터가 남는다.

-하드 링크는 데이터가 있는 위치를 직접 가리키고 있기 때문에 심볼릭 링크에 비해 약간 빠르다.


하드 링크 : ln [링크원본파일] [링크파일명]

심볼릭 링크 : ln [링크원본] [링크파일]


하드 링크와 심볼릭 링크의 링크

 하드 링크에 심볼릭 링크 걸림

 심볼릭 링크에 하드 링크는 안걸리고 하드링크 처럼  i-node는 공유하지만 심볼릭 링크가 하나 더 생김

 디렉터리 링크에 하드 링크는 안걸린다.

 디렉터리 링크에 심볼릭 링크는 걸린다.

 폴더나 디렉터리는 실제 디스크에는 없고 가상으로 사용하므로 하드 링크는 안걸리지만 심볼릭링크는 걸린다.

 


4. 디바이스 파일

 디바이스 파일(Device File)이란 리눅스 시스템에서 HDD, FDD, 프린터, 마우스, 키보드, 사운드 어댑터, 그래픽 어댑터, 네트워크 어댑터등을 하나의 파일로 처리하는 것을 말한다. 디바이스 파일에는 블록 디바이스 파일(Block Device File)과 캐릭터 디바이스 파일(Character Device File)이 있다.


4.1 캐릭터 디바이스 파일(Character Device File)

 주로 터미널, 프린트, 플로터들과 보조 기억장치 등을 설치할 때 사용되며, 시스템의 I/O 버퍼를 사용하지 않고 바이트 단위로 데이터를 입출력한다.


4.2 블록 디바이스 파일(Block Device File)

 리눅스 시스템에서 HDD, FDD, 테이프 드라이브, 광자기 드라이브와 같은 보조 기억장치들을 설치할 때 사용되며, 수 십 혹은 수 백 바이트 크기인 블록 단위로 데이터를 입출력한다.


5. 파이프 파일

 파이프 파일은 한 프로그램의 출력을 중간 파일없이 다른 파일의 입력으로 바로 보내는 파일을 의미하며, 파이프는 파이프(|) 기호 왼쪽 명령어의 출력을 오른쪽 명령어의 입력으로 보낸다. 또한, 파이프 라인은 하나 이상의 파이프로 구성되며, 파이프에서의 데이터는 선입선출 방식인 FIFO(First-In First-Out) 방식으로 다루어진다.


6. 소켓 파일

 네트워크의 입출력을 담당하는 API(Application Program Interface)로 두 호스트 컴퓨터 사이의 정보 전달한다. 물리적으로 연결된 네트워크 상에서의 데이터 송수신에 사용할 수 있는 소프트웨어적인 장치를 의미한다.

-네트워크 상에서의 소켓에 의해 두 컴퓨터가 연결되는 과정

 1단계 : 소켓 생성

 2단계 : IP 주소와 포트 번호 할당

 3단계 : 연결 요청 가능한 상태로 설정

 4단계 : 연결 요청에 대한 수락


출처 : http://blog.naver.com/yhsczhs_2/220527120598


'리눅스 ( Linux ) > 리눅스' 카테고리의 다른 글

Raid 구성  (0) 2017.04.12
가상머신의 이해  (0) 2017.01.15
쉘이란?  (0) 2017.01.15
커널이란?  (0) 2017.01.15
리눅스의 특징  (0) 2017.01.15
복사했습니다!