UNIX 시스템이 /dev/* [duplicate]에 그렇게 많은 [0바이트] 드라이브를 요구하는 이유는 무엇입니까?

UNIX 시스템이 /dev/* [duplicate]에 그렇게 많은 [0바이트] 드라이브를 요구하는 이유는 무엇입니까?

그래서 최근에 물어봤죠이 문제, 그 결과 다음 명령을 실행하게 되었습니다.

$ du -sk /dev/*

다음과 같이 약 353개의 개별 항목이 출력됩니다.

0/개발/sdt
0 /dev/표준 오류
0 /dev/표준 입력
0 /dev/표준 출력
0 /dev/시스템 추적
0/개발자/tty
0 /dev/tty.Bluetooth 수신 포트
0 /dev/tty.블루투스 모뎀
0 /dev/ttyp0
0 /dev/ttyp1

누군가 이 디렉토리가 무엇인지 자세히 설명해 주실 수 있나요? 왜 모두 0바이트인가요?

답변1

그들은장치 노드:

Unix 계열 운영 체제에서 장치 파일이나 특수 파일은 장치 드라이버에 대한 인터페이스이며 일반 파일처럼 파일 시스템에 나타납니다. [...] 이를 통해 소프트웨어는 표준 입출력 시스템 호출을 사용하여 장치 드라이버와 상호 작용할 수 있으며, 이는 많은 작업을 단순화하고 사용자 공간 I/O 메커니즘을 통합합니다.

즉, 일반 디렉토리로 구성될 수는 있지만 일반 파일은 아닙니다. 역사적으로 이는 일부 커널 정보를 사용하여 디스크에 생성된 실제 노드였습니다. 최신 Linux 시스템에서는 특수한 메모리 내 파일 시스템으로 대체되었습니다.개발자 파일 시스템/proc, 메모리 내 procf 및 /sys메모리 내 sysf 와 매우 유사합니다 . 그렇기 때문에 0바이트로 나열됩니다. 이는 커널에 대한 직접적인 인터페이스입니다.

그것이 무엇인지에 관해서는 Wikipedia 기사에 "명명 규칙"에 대한 섹션이 있지만 이는 구속력이 있거나 보편적이지 않습니다(사용자 공간에서 이름을 바꿀 수 있습니다. 예를 들어 RedHat/Fedora에서 파생된 udev 설치가 이를 수행합니다). 날짜 왼쪽의 두 열 ls -l("크기"임)에 표시된 주/부 숫자에서 또 다른 단서를 얻을 수 있습니다. 이 숫자는 /sys/dev/block또는 의 항목 에 해당합니다 /sys/dev/char.

이러한 장치의 대부분은 다음과 같습니다.가상하드웨어의 특정 부분과 거의 또는 전혀 관련이 없을 수 있습니다. 예를 들어 tty장치는 ctrl-alt-F[N]을 사용하여 탐색하는 가상 터미널입니다. pt장치(디렉토리가 있음)는 GUI 에뮬레이터에 사용되는 의사 터미널입니다. 공유 메모리 세그먼트( shm실제 크기를 가짐) 와 같은 좀 더 난해한 것들이 많이 있습니다 . 다시 말하지만, 목적은 단순히 표준화된 커널 인터페이스를 제공하는 것입니다. "장치"라는 개념은 매우 느슨합니다.

관련 정보