본문 바로가기

별걸다하는 IT/리눅스 유닉스

[리눅스/유닉스]파일 종류(file types)-일반파일, 디렉터리파일, 특수파일, 장치파일 등

[리눅스/유닉스 목차]


파일 종류 File Types

유닉스 리눅스는 모든 것을 다 파일로 다뤄요! 그러므로 파일은 중요한 개념입니다. 유닉스 시스템에 있는 파일들은 대게 일반 파일 (regular file) 아니면 디렉터리 파일(directory file)이예요. 근데 이 외에도 추가적으로 다른 파일 유형들이 있습니다. 오늘은 파일 종류들과 그 특징들에 대해서 알아볼게요


개략적으로 먼저 보고 가자면 파일은 크게 이렇게 세가지로 나눌 수 있어요.

이제 하나하나씩 자세하게 살펴볼까요?


1. 일반 파일, 정규 파일 Regular File

The most common file, which contains data of some form. 

리눅스 유닉스에서 어떤 형태의 데이터를 저장하는 가장 흔한 파일이예요. 우리가 알고 있는 각종 텍스트 파일, 실행 파일, 이미지 파일 등등 리눅스에서 사용하는 대부분의 파일이 일반 파일에 해당됩니다. 이미지나 실행파일의 경우 바이너리 파일입니다. 컴퓨터가 이해하고 실행시키려면 바이너리 형태로 저장되어야겠죠? 텍스트 파일, 바이너리 파일 둘 다 일반파일에 속한다는거!


2. 디렉터리(?) 디렉토리(?)ㅎㅎㅎ Directory File!

그냥 우리가 아는 폴더인데요. 리눅스에서는 디렉터리도 파일로 취급합니다. 

A file that contains the names of other files and pointers to information on these files.

즉 디렉터리 파일은 다른 파일들의 목록을 가지고 있거나 그 파일들의 정보를(주소를) 가리키는 포인터들을 가지는 파일입니다.

Any process that has read permission for a directory file can read the contents of the directory, but only the kernel can write directly to a directory file.

디렉터리 파일 읽는 권한이 있다면 그 디렉터리 안 파일 내용또한 읽을 수 있습니다. 다만 디렉터리 파일에 직접적으로 쓰는 건 커널만 할 수 있어요.


3. 블록 특수 파일, 블록 장치 파일 Block special file 

디바이스 파일은 뭐냐! 

보통 파일을 읽거나 쓰는걸 요청하면 이 요청은 커널에 전달되서 파일스트림 드라이버에 의해 처리됩니다. 그리고 디스크 어딘가에 쓰여지고 저장되겠죠? 근데 이게 장치 파일이면 다르게 행동해요. 일단 요청이 그 장치의 드라이버에 의해서 처리됩니다. 이렇게 장치의 드라이버에 의해서 처리되는 블록 특수 파일이나 문자 특수 파일을 디바이스 파일이라고 하고 우리가 보통 사용하는 파일은 일반 파일이라고 합니다. 디바이스 파일은 어떤 드라이버에 의해서 사용되는지 구분하기 위한 연관 번호를 가지고 있어요.


블록 특수 파일은 일반 파일 과정이랑 좀 유사하고 문자 특수 파일은 파이프처럼 행동합니다. 

Block devices usually behave a lot like ordinary files: they are an array of bytes, and the value that is read at a given location is the value that was last written there.

블록 특수 파일은 우리가 아는 일반 파일처럼, 바이트 배열로 구성되어 있고, 수정하거나 가장 마지막에 저장된 그 주소에서 값들을 읽어오고, 캐시도 가능하고, 데이터를 쓸 때 버퍼에 놨다가 가져오는 것도 그렇고... 여러모로 많이 비슷해요. 

애초에 이 블록 특수 파일이라는 이름 자체의 유래가 한 블록 단위로 데이터를 쓰고 읽는다 해서 블록 파일입니다. (우리가 아는 일반 파일도 이렇게 행동합니다)


A type of file providing buffered I/O access in fixed-size units to devices such as disk drives.

블록특수파일은 장치에 고정 크기 단위로 I/O 버퍼 접근을 제공하는 파일 유형입니다. 

참고로 FreeBSD는 이 파일을 지원하지 않습니다. FreeBSD는 문자 특수 인터페이스로 모든 장치에 접근해요.


4. 캐릭터 특수 파일, 캐릭터 장치 파일 Character special file 

A type of file providing unbuffered I/O access in variable-sized units to devices.

일단 요 문장에서 차이가 확 보이죠? 이 파일은 버퍼를 지원하지 않아요 그리고 고정 단위로 접근하지 않습니다.

이 캐릭터 장치 파일은 파이프나 시리얼 포트처럼 행동해요. 데이터를 쓰거나 읽는 게 즉시 일어납니다. 막 통신되는것처럼 바로바로 행해지는 거죠. 블록특수파일처럼 한 블록 단위로 하는게 아니라 내가 한 바이트만 쳐도 그게 바로 모니터에 출력된다던지, 소리로 변환된다던지,, 바로바로 일어나요. 그래서 캐릭터라는 이름이 붙은겁니다. 이렇게 문자 하나(영문자 하나는 1바이트 입니다)만 보내도 개별적으로 처리가 된다는 의미에서 '캐릭터 특수 파일'이라는 이름이 유래됐어요. 

대표적인 예로 키보드, 마우스 입출력이 있어요 ㅎㅎ 


장치파일은 블록 특수 파일 아니면 캐릭터 특수 파일인데 대부분 장치파일들은 /dev 폴더 안에 위치하게 됩니다.


5. FIFO

프로세스간의 통신에 쓰이는 파이프로 이름이 있는 파이프 파일을 FIFO라고 합니다. 그냥 파이프라고 부르기도 해요. 나중에 자세히 따로 빼서 살펴볼겁니당


6. 소켓 파일 Socket

네트워크의 입출력을 담당하는 API(Application Program Interface)로 두 호스트 컴퓨터 사이의 정보를 전달합니다. 

네트워크 통신에 필요한 파일인거죠. 나중에 Network programming 파트에서 애도 자세하게 다뤄질거예요.


7. 심벌릭 링크 Symbolic link

A type of file that points to another file -다른 파일을 가리키는 타입의 파일

심벌릭 링크는 원본 파일을 대신해 다른 이름으로 파일명을 지정한 것으로 윈도우의 바로가기 파일과 비슷하다고 생각하면 됩니다.


단일 사용자 시스템 기준일 경우, 파일 종류별로 리눅스 시스템에서 차지하는 비율은 다음과 같습니다.

이렇게 파일 종류들을 훑어보았어요. 파일의 종류가 궁금하다면 file 명령어를 사용해서 확인해볼 수 있답니다. 


문제

2016년 3회 리눅스마스터 기출

다음 중 리눅스시스템에서 일반적으로 분류하는 3가지 종류에 해당하는 파일로 틀린 것은?

1. 일반 파일

2. 디렉터리 파일

3. 백업 파일

4. 특수 파일


답: 3