그래서 최근에 물어봤죠이 문제, 그 결과 다음 명령을 실행하게 되었습니다.
$ 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
실제 크기를 가짐) 와 같은 좀 더 난해한 것들이 많이 있습니다 . 다시 말하지만, 목적은 단순히 표준화된 커널 인터페이스를 제공하는 것입니다. "장치"라는 개념은 매우 느슨합니다.