리눅스의 핵심 원칙 중 하나는 "모든 것이 파일이다"라는 것입니다. 이 철학은 하드웨어 구성 요소에도 확장되어 파일 시스템 내의 특수 파일로 표현됩니다. 이러한 리눅스 장치와 해당 파일을 이해하는 것은 시스템 관리에 매우 중요합니다. 모든 장치 파일의 전통적인 위치인 /dev 디렉터리를 탐색하는 것부터 시작하겠습니다.
/dev 에서 리눅스 장치 탐색하기
/dev 디렉터리의 파일을 나열하여 시스템이 다양한 리눅스 장치를 어떻게 표현하는지 확인할 수 있습니다.
$ ls -l /dev
brw-rw---- 1 root disk 8, 0 Dec 20 20:13 sda
crw-rw-rw- 1 root root 1, 3 Dec 20 20:13 null
srw-rw-rw- 1 root root 0 Dec 20 20:13 log
prw-r--r-- 1 root root 0 Dec 20 20:13 fdata
다음은 왼쪽에서 오른쪽으로 본 열에 대한 설명입니다.
- 권한
- 소유자
- 그룹
- 주 장치 번호
- 부 장치 번호
- 타임스탬프
- 장치 이름
리눅스 장치 유형 식별하기
ls -l 출력의 권한 문자열에 있는 첫 번째 문자는 파일 유형을 나타냅니다. 장치 파일의 경우, 특정 리눅스 장치 유형을 식별하는 데 도움이 되는 다음 중 하나를 보게 됩니다.
c- 문자 (character)b- 블록 (block)p- 파이프 (pipe)s- 소켓 (socket)
문자 장치 (Character Devices)
이러한 장치는 데이터를 한 번에 한 문자씩 전송합니다. 물리적으로 연결된 하드웨어가 아니라 필수적인 OS 기능을 제공하는 많은 가상 장치 (pseudo-devices) 가 문자 장치로 표현됩니다. 전형적인 예는 /dev/null입니다.
블록 장치 (Block Devices)
이러한 장치는 크고 고정된 크기의 블록 단위로 데이터를 전송합니다. 하드 드라이브 (/dev/sda), SSD 및 기타 대용량 저장 구성 요소와 같은 저장소 하드웨어는 블록 기반 데이터 액세스에 최적화되어 있으므로 일반적으로 블록 장치로 표현된다는 것을 알 수 있습니다.
파이프 장치 (Pipe Devices)
명명된 파이프 (Named pipes) 또는 FIFO(First-In, First-Out) 는 프로세스 간 통신을 허용합니다. 이들은 문자 장치처럼 작동하지만 출력을 물리적 장치가 아닌 다른 프로세스로 전달합니다.
소켓 장치 (Socket Devices)
소켓 장치 또한 프로세스 간 통신을 용이하게 합니다. 파이프와 달리 소켓은 더 다재다능하며 네트워크를 통해 심지어 여러 프로세스 간의 통신도 지원할 수 있습니다.
장치 번호 이해하기
각 리눅스 장치는 주 장치 번호와 부 장치 번호라는 두 가지 숫자로 고유하게 식별됩니다. 이 번호들은 쉼표로 구분되어 ls 출력에서 볼 수 있습니다. 번호가 8, 0인 장치의 경우:
주 번호 (8) 는 해당 장치를 담당하는 드라이버를 식별합니다. 이 경우 8 은 일반적으로 SCSI 디스크 드라이브에 사용됩니다. 부 번호 (0) 는 드라이버에게 그것이 장치의 어떤 특정 인스턴스인지를 알려줍니다. 여기서 0 은 첫 번째 드라이브 (a) 를 나타냅니다.