ㅏ質問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
これはWebカメラ用の唯一のデバイスファイルです。だから実際、lsof /dev/video0
Webカメラにアクセスするすべてのプロセスが実際に一覧表示されます。
答え2
DEVICE
81,0
ブロックをまったく参照しません。このブロックとともにTYPE
CHR
使用すると、そのデバイスがメジャー番号81とマイナー番号0の文字デバイスであることを示します。
では、/proc/devices
文字デバイスのメジャー番号81がサブシステムに関連付けられていることがわかりますvideo4linux
。マイナー番号は、適切であると判断されるように各サブシステムによって割り当てられます。この場合、マイナー番号は/dev/video0
生成されたデバイス名に直接反映されますudev
。
伝統的に、UNIXシリーズシステムでは、人に馴染みのあるデバイス名ではなく、機械に優しいデバイス番号をデバイスのデフォルトの内部識別子として使用していました。フル/dev
ディレクトリツリーとそのデバイスノードは、デフォルトでカーネルのファイルシステムドライバがデバイス名をデバイス番号に変換できるようにする1つの大きなルックアップテーブルです。まるでファイル内のポート番号(またはなど)の代わりに/etc/services
ポート名を使用できるのと同じです。それぞれ22または123などのデバイスノードには権限があり、デバイスドライバへの不適切なアクセスを制限するのにも役立ちます。ssh
ntp
一般ユーザーとして実行すると、lsof
自分のプロセスに関する情報のみを出力できます。一般ユーザーは他のユーザーのビジネスを垣間見ることはできません。他のユーザーのプロセスが何をしているかを見るには、root権限が必要です。