장치 파일

장치 파일(device file) 또는 특수 파일(special file)은 유닉스 계열 운영 체제에서 마치 흔한 파일처럼 보이는 파일 시스템 안에 보이는 장치 드라이버의 인터페이스이다. 소프트웨어가 표준 입출력 시스템 호출을 사용하여 장치 드라이버와 상호 작용할 수 있게 해 준다.

장치 파일들은 프린터와 같은 주변 기기를 위한 단순한 인터페이스를 제공하기도 한다. 그러나 디스크 파티션과 같이 그러한 장치들의 리소스에 접근하는 데에만 사용될 수 있다. 장치 파일은 시스템 리소스에 접근할 때에도 유용하다.

유닉스 특수 파일 

유닉스 계열 운영 체제에서 두 가지 종류의 일반적인 장치 노드가 존재한다. 바로 문자 특수 파일(character special file)과 블록 특수 파일(block special file)이다. 이 둘의 다른 점은 운영 체제와 하드웨어가 처리하는 데이터 읽기/쓰기 방식이다. 이 두 노드 모두 장치 특수 파일(device special file)이라 불린다.

문자 장치 
문자 특수 장치(character special file) 또는 문자 장치(character device)는 버퍼링되지 않은, 직접 접근을 하드웨어 장치에 제공한다.

블록 장치 
블록 특수 파일(block special file) 또는 블록 장치(block device)는 버퍼링된 접근을 하드웨어 장치에 제공하며, 이들의 세부 사항에 따라 어느 정도의 추상화를 제공한다.

의사 장치 
 /dev/null
 /dev/zero
 /dev/full
 /dev/random, /dev/urandom

노드 생성 
노드들은 mknod라는 시스템 호출을 통해 만들어진다. 노드를 만드는 명령 줄 프로그램 또한 mknod이다. 노드들은 일반적인 파일 시스템의 시스템 호출(rename, unlink)과 명령어(mv, rm)을 통해 이동하거나 삭제할 수 있다.

일부 유닉스 버전들은 makedev나 MAKEDEV라는 스크립트를 포함하고 있으며, 디렉터리 /dev에 있는 필요한 모든 장치를 만들어준다.

명명 규칙 
다음의 두문자들은 장치 종류의 식별을 위하여 /dev 계층의 일부 장치 이름에 사용할 수 있다.:

 lp: 라인 프린터 (lp 비교)
 pt: 의사 단말 (가상 터미널)
 tty: 터미널

리눅스 기반 운영 체제에서 일반적으로 쓰이는 두문자들이 더 존재한다:

 fb: 프레임 버퍼
 fd: (플랫폼) 플로피 디스크.
 hd: (클래식) IDE 드라이버. (이전에는 ATA 하드 디스크 드라이브, ATAPI 광 디스크 드라이브 등에 사용됨)
 hda: 첫 ATA 채널의 마스터 장치.
 hdb: 첫 ATA 채널의 슬레이브 장치.
 hdc: 2차 ATA 채널의 마스터 장치.
 hdc1: 이 디스크의 첫 파티션 (예)
 hdc5: 확장 파티션의 첫 논리 드라이브 (예)
 hdd: 2차 ATA 채널의 슬레이드 장치
 parport, pp: 병렬 포트
 SCSI 드라이버 (libATA, 즉 현대의 PATA/SATA 드라이버에도 사용), USB, IEEE 1394 등.
 sd: 대용량 스토리지 드라이버
 sda: 1차 등록 장치
 sda4: 디스크의 마지막 파티션 (예)
 sda6: 확장 파티션의 2차 논리 드라이브 (예)
 sdb, sdc 등: 2차, 3차 등록 장치
 ses: 인클로저 드라이버
 sg: 일반 SCSI 계층
 sr: 롬 드라이버 (데이터 지향 광 디스크 드라이브. scd는 2차 별칭임.)
 st: 자기 테이프 드라이버
 tty: 터미널
 ttyS: (플랫폼) 직렬 포트 드라이버
 ttyUSB: USB 직렬 변환기, 모뎀 등.

devfs 
devfs는 장치 파일 시스템이나 유닉스 계열 운영 체제의 특정한 구현체이며, 장치 파일들을 대표하는데 사용된다. 기반이 되는 구현 구조는 운영 체제에 따라 다양하다.

물리적으로 구현된 파일 시스템(예: 하드 드라이브)에서 이러한 특수 파일들을 관리하는 것은 편리성이 떨어지며, 여하튼 커널의 보조를 받아야 하기 때문에 물리적으로 저장되지 않는 특수 목적의 논리 파일 시스템이라는 개념이 등장하였다.

MS-DOS 장치 파일 
몇 가지 장치 파일은 아래에 나열되어 있다:

각주 

 
리눅스 커널 인터페이스