아래의 거의 모든 파일 /dev
은 장치 파일 입니다. 일반 파일을 읽고 쓰는 것이 디스크 나 다른 파일 시스템에 데이터를 저장하는 반면, 장치 파일에 액세스하는 것은 커널의 드라이버와 통신하며, 일반적으로 하드웨어 (하드웨어 장치, 따라서 이름)와 통신합니다.
장치 파일에는 두 가지 유형이 있습니다 : 블록 장치 ( b
의 출력에서 첫 번째 문자로 ls -l
표시됨) 및 문자 장치 (로 c
표시됨). 블록과 문자 장치의 차이점은 완전히 보편적 인 것은 아닙니다. 블록 장치는 크기가 큰 고정 크기 파일처럼 동작하는 디스크와 같은 것입니다. 특정 오프셋에서 바이트를 쓴 다음 나중에 해당 오프셋에서 장치에서 읽을 경우 해당 바이트를 다시 가져옵니다. 문자 장치는 바이트 작성이 즉각적인 영향을 미치며 (예 : 직렬 회선에서 방출 됨) 바이트를 읽는 것도 즉각적인 영향을 미칩니다 (예 : 직렬 포트에서 읽음).
장치 파일의 의미는 이름이 아닌 번호로 결정됩니다 (이름은 응용 프로그램에 중요하지만 커널에는 중요하지 않음). 숫자는 실제로 두 개의 숫자입니다. 주 숫자는이 장치를 담당하는 드라이버를 나타내고 부 숫자는 드라이버가 여러 장치를 구동 할 수있게합니다 ¹. 이 숫자는 ls -l
목록에 표시되며 일반적으로 파일 크기를 찾습니다. 예 : brw-rw---- 1 root disk 8, 0 Jul 12 15:54 /dev/sda
→이 장치는 메이저 8, 마이너 0입니다.
아래의 일부 장치 파일 /dev
이 하드웨어 장치와 일치하지 않습니다. 모든 유닉스 시스템에 존재하는 것은 /dev/null
; 쓰기는 효과가 없으며, 읽은 데이터는 전혀 반환되지 않습니다. 명령의 출력을 무시 >/dev/null
하거나 ( </dev/null
) 입력없이 명령을 실행 하려는 경우 쉘 스크립트에서 편리합니다 . 다른 일반적인 예는 /dev/zero
(null 바이트 ad infinitum/dev/urandom
반환 ) (임의 바이트 ad infinitum 반환 )입니다.
일부 장치 파일은 액세스하는 프로세스에 따라 의미가 있습니다. 예를 들어, /dev/stdin
현재 프로세스의 표준 입력을 지정합니다. 에서 열기는 프로세스의 표준 입력으로 열린 원래 파일을 여는 것과 거의 동일한 효과를 갖습니다. 다소 비슷하게 /dev/tty
프로세스가 연결된 터미널을 지정합니다. 오늘날 리눅스에서는 /dev/stdin
친구들이 문자 장치로 구현되는 것이 아니라 모든 파일 디스크립터를 참조 할 수있는보다 일반적인 메커니즘에 대한 상징적 링크로 사용됩니다 (전통적인 방법에서는 0, 1 및 2 만 반대). 예를 들어 /dev/stdin
에 대한 심볼릭 링크가 /proc/self/fd/0
있습니다. 보기 는 / dev는 FD / PROC / 자기 / FD 관련 / 않는 방법 /? .
아래에 여러 가지 심볼릭 링크가 /dev
있습니다. 장치 파일이 한 이름에서 다른 이름으로 이동되었지만 일부 응용 프로그램은 여전히 이전 이름을 사용합니다. 예를 들어 Linux /dev/scd0
에서 심볼릭 링크입니다 /dev/sr0
. 둘 다 첫 번째 CD 장치를 지정합니다. 심볼릭 링크에 대한 또 다른 이유는 조직 : 리눅스에서, 여러 장소에서 하드 디스크와 파티션을 찾을 수 있습니다 : /dev/sda
와 /dev/sda1
친구들 (임의의 문자로 지정된 각 디스크 및 파티션 파티션 레이아웃에 따라), /dev/disk/by-id/*
(디스크는 지정 고유 일련 번호) /dev/disk/by-label/*
(파일 시스템이있는 파티션, 사람이 선택한 레이블로 지정); 그리고 더. 일반 장치 이름이 여러 이름 중 하나 일 수있는 경우에도 심볼릭 링크가 사용됩니다. 예를 들어/dev/dvd
에 대한 심볼릭 링크 /dev/sr0
이거나 /dev/sr1
두 개의 CD 리더가 있고 두 번째 CD 리더가 기본 DVD 리더 인 경우에 대한 링크 일 수 있습니다 .
마지막으로, 아래 /dev
에서 찾을 수있는 몇 가지 다른 파일이 있습니다 . 모든 시스템에서 동일한 것을 찾을 수는 없습니다. 대부분의 유니 세에서 프로그램은 로그 메시지를 생성하는 데 사용 /dev/log
하는 소켓 입니다. /dev/MAKEDEV
에 항목을 작성하는 스크립트입니다 /dev
. 최신 Linux 시스템에서 항목은 udev 에 /dev/
의해 자동으로 작성 되어 사용 되지 않습니다 .MAKEDEV
¹ 이것은 Linux에서는 더 이상 사실이 아니지만이 세부 사항은 장치 드라이버 작성자에게만 중요합니다.