리눅스는 여러 커널 장치 인터페이스를 장치 노드라는 특수 파일 시스템 객체로 노출합니다. 장치 노드는 보통 /dev 아래에 유용한 심볼릭 링크 및 통신 엔드포인트와 함께 나타납니다. 장치 노드를 열면 애플리케이션은 일반 파일에 저장된 바이트가 아니라 커널 드라이버에 연결됩니다.
장치 · 레슨 1
/dev 디렉터리
리눅스가 `/dev` 아래의 노드를 통해 장치 인터페이스와 의사 장치를 노출하는 방식을 알아봅니다.
`/dev` 살펴보기
장치를 역참조하거나 읽지 않고 디렉터리 목록을 표시합니다.
$ ls -l /dev
항목은 물리 저장 장치, 터미널, 입력 인터페이스, 논리 장치 또는 커널이 제공하는 의사 장치를 나타낼 수 있습니다. 모든 하드웨어 구성 요소에 사용자에게 보이는 노드가 필요한 것은 아니며, 장치 하나가 여러 링크나 인터페이스로 표현될 수도 있습니다.
긴 목록의 첫 번째 문자는 파일 시스템 객체 유형을 나타냅니다. 문자 장치 노드와 블록 장치 노드는 각각 c와 b로 표시됩니다. 이후 수업에서 이러한 유형과 주 번호 및 부 번호를 살펴봅니다.
프로그램이 /dev 아래의 장치 노드를 열면 어떻게 됩니까?
의사 장치
일부 노드는 물리 하드웨어에 대응하지 않으면서 커널 서비스를 제공합니다. /dev/null은 기록된 데이터를 받아 버립니다.
$ command > /dev/null
그 밖의 익숙한 예로는 0 바이트를 생성하는 /dev/zero와 커널 난수 하위 시스템을 통해 난수 바이트를 제공하는 /dev/urandom이 있습니다. 각 장치에는 고유한 의미가 있으므로 파일 이름만 보고 동작을 추정하지 마십시오.
/dev/null은 기록된 데이터를 어떻게 처리합니까?
동적 장치 관리
최신 리눅스 시스템에서는 커널이 지원하는 devtmpfs가 장치가 나타날 때 기본 장치 노드를 채울 수 있습니다. udev 같은 사용자 공간 장치 관리자는 이벤트를 처리하고, 권한과 소유권을 적용하며, 유용한 심볼릭 링크 또는 정책 기반 이름을 만듭니다. 정확한 역할 분담은 시스템마다 다릅니다.
/dev/disk/by-id/ 또는 /dev/disk/by-uuid/ 아래의 항목 같은 안정적인 링크는 하드웨어 구성이나 검색 순서가 바뀌면 달라질 수 있는 /dev/sda 같은 감지 순서 기반 이름보다 설정에서 더 안전할 수 있습니다.
관리자가 설정에서 /dev/sda보다 /dev/disk/by-id/...를 선호할 수 있는 이유는 무엇입니까?
안전하게 상호 작용하기
표준 도구로 장치 노드를 열 수 있다고 해서 임의의 읽기와 쓰기가 안전한 것은 아닙니다. 읽기는 민감한 입력이나 저장 내용을 노출할 수 있고, 디스크, 터미널 또는 펌웨어 인터페이스에 쓰면 데이터가 손상되거나 사용자가 방해받을 수 있습니다. 이런 이유로 장치 노드 권한, 그룹, ACL, 기능 및 서비스 중개가 접근을 제한합니다.
먼저 읽기 전용 검색 도구를 사용하고, 정확한 노드와 장치 식별자를 확인한 뒤, 장치별 문서를 따르십시오. 중요한 시스템에서 익숙하지 않은 /dev 항목으로 데이터를 리디렉션하는 실험은 절대 하지 마십시오.
익숙하지 않은 장치 노드에 임의의 데이터를 쓰지 말아야 하는 이유는 무엇입니까?
제어된 환경에서 리눅스 하드웨어 장치 살펴보기를 이용해 읽기 전용 검사를 연습해 보십시오.
레슨 완료
/dev 디렉터리 완료
이제 /dev를 커널과 연결되는 실시간 인터페이스의 집합으로 설명할 수 있습니다.
장치 노드와 일반 파일을 구분합니다.
/dev/null같은 의사 장치를 식별합니다.동적 노드 및 영구 링크를 장치 관리와 연결합니다.
직접 장치 접근을 인터페이스별이며 잠재적으로 파괴적인 작업으로 취급합니다.