본문으로 바로가기

리눅스 특수 파일과 장치

category 리눅스/Linux 일반 2013. 9. 11. 23:51

리눅스 시스템에 존재하는 /dev 디렉토리에 대한 전반적인 설명을 다룹니다.

/dev ?

리눅스 운영체제에서는 '장치 파일'을 위한 특별한 디렉토리인 /dev가 있다. 이 디렉토리는 노드(node)라고 불리는 요소를 포함하며, 각 노드는 시스템의 한 장치를 나타낸다.

노드는 실제 하드웨어 장치일 수도 있고 가상(pseudo)장치일 수도 있는데, 어느 쪽이든 그것을 파일 시스템의 일부로서 목록화한 목적은 프로그램이나 서비스와의 입출력 연동을 편리하게 하기 위함이다.

장치 타입

장치 파일명은 드라이버 타입에 따라 관례적으로 정해진 접두사와, 같은 타입의 장치가 두 개 이상 있을 경우에만 선택적으로 사용되는 숫자나 문자 한 개로 구성한다.

가장 일반적인 장치 타입의 장치 파일 접두사에는 다음과 같은 것이 있다.

  • cdrom : CD, DVD-ROM 드라이브
  • fd : 플로피 디스크 드라이브
  • hd : 하드 드라이브나 CD-ROM과 같이 IDE로 연결된 장치
  • md : 하드 드라이브와 같은 메타디스크와 RAID 장치
  • ram : RAM 디스크
  • sd : SCSI로 연결된 대용량 저장 장치
  • usb : USB로 연결된 장치

가상 장치

/dev 디렉토리에 있는 장치의 일부는 실제 하드웨어 장치에 대응되지는 않지만, 대신에 관리자와 개발자가 특정 자원의 입출력을 간편하게 할 수 있도록 해주기 때문에 가상장치(pseudo device)라고 부른다.

/dev/null

널(null) 디바이스

이 가상장치는 장치로 보내는 모든 데이터를 무시해버릴 목적으로 만들어 졌기에 '블랙홀(black hole)' 이라는 별명으로 불리기도 한다. 이 장치에 쓰기 작업을 하면 언제나 성공적으로 완료되며, 이 장치로부터 읽기 작업을 하면 아무 데이터도 넘어오지 않는다.

프로그램의 출력을 무시함으로써 화면상에 아무런 텍스트도 표시하지 않게 할 때 특히 유용하다.

cat shopping.txt > /dev/null

/dev/random

난수(random number) 발생기

/dev/urandom

난수 흐름을 발생시키는 스트림. /dev/random이 진짜 난수를 발생시키는 반면에 /dev/urandom은 의사난수(pseudorandom number)를 제공한다. 엔트로피 풀을 채우기 위한 목적으로 이 장치에 쓰기 작업을 할 수도 있다.

발생되는 데이터는 바이너리이기 때문에 /dev/random과 /dev/urandom으로부터 오는 숫자는 콘솔 터미널에 표시할 수 없다. 이 장치들은 대부분 신뢰성 있는 난수를 수집하려는 개발자에 의해 사용된다.

/dev/full

풀(full) 디바이스

이 가상장치는 항상 꽉찬 것으로 간주되기 때문에 이 장치에 쓰기를 하면 에러가 리턴되고, 읽기를 하면 널(null) 문자가 무한히 리턴된다.

/dev/full 장치의 목적은 프로그래머와 관리자에게 의도적인 에러를 유발하는 작업을 제공한다.

echo Hello! > /dev/full

  ~bash: echo: write error: No space left on device

/dev/zero

제로(zero) 디바이스

제로 가상장치는 널 디바이스와 아주 비슷해 쓰기를 했을 때는 항상 성공적인 리턴 코드를 제공한다. 하지만 읽기를 했을 때는 널 문자를 무한히 출력한다.

특정 크기의 파일을 생성하거나 저장 장치를 포맷하기 위해 쓰기 작업을 하는 프로그램에 입력 데이터를 공급하는 경우와 같이 /dev/zero 장치를 읽는 작업은 여러 가지로 매우 유용하다.