리눅스 파일 종류
리눅스에서는 모든것을 파일 단위로 인식하며, 심지어 하드웨어도 파일로 인식합니다.
리눅스에는 크게 다음과 같은 유형의 파일들이 있습니다.


일반 파일
일반 파일은 보통의 파일들을 말합니다. 텍스트 파일, 이미지 파일, 문서, C나 Java 소스 파일 등이 있습니다.
ls -F 명령어를 통해 일반 파일 확인이 가능합니다.



디렉터리 파일
디렉터리 파일은 특수 파일로 서로 연관되어 있는 파일들을 하나의 그룹으로 만들어 저장하여 구분하는 공간을 의미합니다. 하나의 디렉터리에는 적어도 두 개의 엔트리를 포함하고 있는데, 현재 디렉터리를 의미하는 '.' 과 상위(부모) 디렉터리를 의미하는 '..' 이 있습니다.
디렉터리에는 디렉터리에 담긴 실제 파일들의 내용을 담는것이 아닌 파일들의 I-node에 대한 포인터만 저장하기 때문에 파일명과 파일의 I-node 번호를 매핑하는 리스트로만 구성되어 있습니다.





링크 파일
리눅스와 유닉스 운영체제는 윈도우즈와는 다른 개념인 링크를 사용합니다.
리눅스/유닉스의 파일은 파일명I-node, 데이터 블록 세 가지 요소가 뭉쳐 하나의 파일을 이루는데 실제 데이터는 데이터 블록에 저장되며 I-node가 실제 데이터에 대한 정보를 담고 있고 파일명을 통해 해당 I-node를 참조할 수 있습니다.

따라서 여러개의 파일처럼 보이더라도 해당 파일들이 하나의 I-node를 참조하고 있다면 실제 내용은 같은 파일을 가리키고 있는 것입니다.
이것을 하드링크라 하며, 실제 같은 데이터를 가리키므로 둘 중 하나를 삭제하더라도 실제 데이터가 지워지게 됩니다.

반대로 심볼릭 링크라는 개념이 있으며, 심볼릭 링크 파일을 생성하게 되면 링크파일이 원본파일의 I-node를 공유하는 것이 아니고 원본 파일명에 대해 포인터를 가지게 됩니다. 이는 윈도우즈에서 바로가기와 비슷한 개념입니다.
또한 심볼릭 링크 파일을 삭제하더라도 원본 파일의 I-node를 지우는 것이 아니기 때문에 실제 데이터에는 아무런 영향을 끼치지 않게 됩니다.



디바이스 파일
리눅스 시스템에서는 HDD, 마우스, 네트워크 카드, 키보드 등의 장치들 또한 하나의 파일로 처리합니다.
이러한 장치 파일들을 디바이스 파일이라 하며, 디바이스 파일에는 블록 디바이스 파일(Block Device File)과 캐릭터 디바이스 파일(Character Device File)이 있습니다.

ls -al /dev/ 를 통해 /dev 하위의 디바이스 파일들을 볼 수 있습니다.
파일 정보의 맨 앞의 d와 c가 보이는데 d는 디렉터리이며 c는 캐릭터 디바이스 파일을 의미합니다.
블록 디바이스는 b로 표기됩니다.





캐릭터 디바이스 파일(Character Device File)
캐릭터 디바이스 파일은 터미널, 프린터, 키보드 등의 문자 기반 장치 파일입니다.
캐릭터 디바이스 파일은 시스템의 I/O 버퍼를 사용하지 않으며 바이트 단위 입출력을 사용합니다.
하드웨어에서 바이트 단위로 입출력만 수행하고 그 밖의 작업은 수행하지 않기 때문에 입출력 성능을 향상시키기 위해서는 응용 프로그램에서의 조작이 필요합니다.




블록 디바이스 파일(Block Device File)
블록 디바이스 파일은 하드디스크, CD/DVD 등의 저장 장치 파일들입니다.
캐릭터 디바이스 파일과는 다르게 수 바이트 크기의 블록 단위로 입출력을 수행합니다.




파이프(Pipe) 파일
파이프 파일은 특정 프로그램의 출력을 중간 파일을 거치지 않고 다른 파일의 입력으로 바로 보내는 파일을 의미합니다.
파이프는 파이프 기호(|) 를 기준으로 왼쪽 명령의 출력을 파이프 오른쪽 명령의 입력으로 보냅니다. (파이프 기호는 Shift 누른 상태로 \를 눌러 사용합니다.)



마치 데이터를 통로를 통해 곧바로 보내는 것과 같습니다. 파이프 라인은 하나 이상의 파이프로 구성될 수 있으며, 파이프에서의 데이터는 FIFO 방식으로 처리됩니다. 위의 그림에서는 cat 명령어의 출력이 sort의 입력으로 가고, 정렬된 sort의 출력값이 more의 입력으로 들어갑니다.



소켓(Socket) 파일
소켓은 네트워크 입출력을 담당하는 API로서 특정 컴퓨터 사이의 정보를 전달하는 통로 역할을 수행합니다.
즉 물리적인 네트워크로 연결된 두 컴퓨터가 데이터를 송수신할 때 사용할 수 있는 논리적인 소프트웨어 장치 파일입니다.


참고글
블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

,