ㅏ질문5년 전 이 명령에 대해서는 lsof
캠을 사용하여 모든 프로세스를 모니터링하지 않을 것이라고 주장했습니다. 그러나 testcam을 실행하는 동안 명령을 실행하면 다음과 같은 결과가 나타납니다.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
firefox-b 3077 lax mem CHR 81,0 808 /dev/video0
firefox-b 3077 lax 143u CHR 81,0 0t0 808 /dev/video0
무슨 뜻이에요 DEVICE
81,0
? 블록 81,0이 표시되고 있는데 왜 모니터링되지 않는지 잘 모르겠습니다.
답변1
lsof /dev/video0
열려 있는 프로세스 만 /dev/video0
나열됩니다. 관리자가 다음 명령을 실행한다고 가정합니다.
mknod /somewhere/else c 81 0
그러면 프로그램은 장치 파일을 통해 카메라 장치를 사용할 수 있습니다 /somewhere/else
. 이 액세스는 보이지 않지만 lsof /dev/video0
보이는 경우 에는 사용할 수 없습니다 lsof /somewhere/else
.
루트만 장치 노드를 만들 수 있습니다. 일반 시스템에서는 /dev/video0
이것이 웹캠용 유일한 장치 파일입니다. 그래서실제로,lsof /dev/video0
웹캠에 액세스하는 모든 프로세스가 실제로 나열됩니다.
답변2
DEVICE
81,0
블록을 전혀 참조하지 않습니다. 이 블록과 함께 TYPE
CHR
사용하면 해당 장치가 메이저 번호 81과 마이너 번호 0을 갖는 문자 장치임을 나타냅니다.
에서 /proc/devices
문자 장치 메이저 번호 81이 하위 시스템과 연관되어 있음을 알 수 있습니다 video4linux
. 부 번호는 적합하다고 판단되는 대로 각 하위 시스템에 의해 할당됩니다. 이 경우 부 번호는 /dev/video0
생성된 장치 이름 에 직접 반영됩니다 udev
.
전통적으로 UNIX 계열 시스템에서는 사람에게 친숙한 장치 이름보다는 기계 친화적인 장치 번호를 장치의 기본 내부 식별자로 사용했습니다. 전체 /dev
디렉토리 트리와 해당 장치 노드는 기본적으로 커널의 파일 시스템 드라이버가 장치 이름을 장치 번호로 변환할 수 있게 해주는 하나의 큰 조회 테이블입니다. 마치 파일에서 포트 번호( 또는 와 같은) 대신 /etc/services
포트 이름을 사용할 수 있는 것과 같습니다. 각각 22 또는 123과 같은 장치 노드에는 권한이 있을 수 있으며 이는 장치 드라이버에 대한 부적절한 액세스를 제한하는 데에도 유용합니다.ssh
ntp
일반 사용자로 실행 하면 lsof
자신의 프로세스에 대한 정보만 출력될 수 있습니다. 일반 사용자는 다른 사용자의 비즈니스를 엿볼 수 없습니다. 다른 사용자의 프로세스가 무엇을 하고 있는지 보려면 루트 권한이 필요합니다.