ウェブサイト検索

Linux でファイルを使用しているユーザーを確認する方法


この記事では、Linux で特定のファイルを誰が使用しているかを調べる方法を説明します。これは、開いているファイルを使用しているシステム ユーザーまたはプロセスを知るのに役立ちます。

lsof コマンドを使用すると、誰かがファイルを使用しているかどうか、使用している場合は誰が使用しているかを知ることができます。開いているファイルを検索するときにカーネル メモリを読み取り、開いているすべてのファイルをリストするのに役立ちます。この場合、開いているファイルには、通常のファイル、ディレクトリ、ブロック特殊ファイル、文字特殊ファイル、ストリーム、ネットワーク ファイル、その他多くのファイルが含まれます。これは、Linux ではすべてがファイルであるためです。

Lsof は、ファイル システム上のファイルを誰が使用しているかを識別するためにファイル システム上で使用されます。 Linux ファイルシステムでlsof コマンド を実行すると、次の出力に示すように、そのファイルを使用しているプロセスの所有者とプロセス情報が出力で特定されます。

lsof /dev/null
COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
systemd   1480 tecmint    0r   CHR    1,3      0t0    6 /dev/null
sh        1501 tecmint    0r   CHR    1,3      0t0    6 /dev/null
sh        1501 tecmint    1w   CHR    1,3      0t0    6 /dev/null
dbus-daem 1530 tecmint    0u   CHR    1,3      0t0    6 /dev/null
xfce4-ses 1603 tecmint    0r   CHR    1,3      0t0    6 /dev/null
xfce4-ses 1603 tecmint    1w   CHR    1,3      0t0    6 /dev/null
at-spi-bu 1604 tecmint    0r   CHR    1,3      0t0    6 /dev/null
dbus-daem 1609 tecmint    0u   CHR    1,3      0t0    6 /dev/null
at-spi2-r 1611 tecmint    0u   CHR    1,3      0t0    6 /dev/null
xfconfd   1615 tecmint    0u   CHR    1,3      0t0    6 /dev/null
xfwm4     1624 tecmint    0r   CHR    1,3      0t0    6 /dev/null
xfwm4     1624 tecmint    1w   CHR    1,3      0t0    6 /dev/null
xfce4-pan 1628 tecmint    0r   CHR    1,3      0t0    6 /dev/null
xfce4-pan 1628 tecmint    1w   CHR    1,3      0t0    6 /dev/null
Thunar    1630 tecmint    0r   CHR    1,3      0t0    6 /dev/null
Thunar    1630 tecmint    1w   CHR    1,3      0t0    6 /dev/null
xfdesktop 1632 tecmint    0r   CHR    1,3      0t0    6 /dev/null
xfdesktop 1632 tecmint    1w   CHR    1,3      0t0    6 /dev/null
....

ユーザー固有の開いているファイルを一覧表示するには、次のコマンドを実行して、tecmint を実際のユーザー名に置き換えます。

lsof -u tecmint
COMMAND    PID    USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
systemd   1480 tecmint  cwd       DIR                8,3      4096          2 /
systemd   1480 tecmint  rtd       DIR                8,3      4096          2 /
systemd   1480 tecmint  txt       REG                8,3   1595792    3147496 /lib/systemd/systemd
systemd   1480 tecmint  mem       REG                8,3   1700792    3150525 /lib/x86_64-linux-gnu/libm-2.27.so
systemd   1480 tecmint  mem       REG                8,3    121016    3146329 /lib/x86_64-linux-gnu/libudev.so.1.6.9
systemd   1480 tecmint  mem       REG                8,3     84032    3150503 /lib/x86_64-linux-gnu/libgpg-error.so.0.22.0
systemd   1480 tecmint  mem       REG                8,3     43304    3150514 /lib/x86_64-linux-gnu/libjson-c.so.3.0.1
systemd   1480 tecmint  mem       REG                8,3     34872    2497970 /usr/lib/x86_64-linux-gnu/libargon2.so.0
systemd   1480 tecmint  mem       REG                8,3    432640    3150484 /lib/x86_64-linux-gnu/libdevmapper.so.1.02.1
systemd   1480 tecmint  mem       REG                8,3     18680    3150450 /lib/x86_64-linux-gnu/libattr.so.1.1.0
systemd   1480 tecmint  mem       REG                8,3     18712    3150465 /lib/x86_64-linux-gnu/libcap-ng.so.0.0.0
systemd   1480 tecmint  mem       REG                8,3     27112    3150489 /lib/x86_64-linux-gnu/libuuid.so.1.3.0
systemd   1480 tecmint  mem       REG                8,3     14560    3150485 /lib/x86_64-linux-gnu/libdl-2.27.so
...

lsof のもう 1 つの重要な用途は、特定のポートをリッスンしているプロセスを見つけることです。たとえば、次のコマンドを使用して、ポート 80 でリッスンしているプロセスを特定します。

sudo lsof -i TCP:80
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd    903   root    4u  IPv6  20222      0t0  TCP *:http (LISTEN)
httpd   1320 apache    4u  IPv6  20222      0t0  TCP *:http (LISTEN)
httpd   1481 apache    4u  IPv6  20222      0t0  TCP *:http (LISTEN)
httpd   1482 apache    4u  IPv6  20222      0t0  TCP *:http (LISTEN)
httpd   1493 apache    4u  IPv6  20222      0t0  TCP *:http (LISTEN)
httpd   1763 apache    4u  IPv6  20222      0t0  TCP *:http (LISTEN)
httpd   2027 apache    4u  IPv6  20222      0t0  TCP *:http (LISTEN)
httpd   2029 apache    4u  IPv6  20222      0t0  TCP *:http (LISTEN)
httpd   2044 apache    4u  IPv6  20222      0t0  TCP *:http (LISTEN)
httpd   3199 apache    4u  IPv6  20222      0t0  TCP *:http (LISTEN)
httpd   3201 apache    4u  IPv6  20222      0t0  TCP *:http (LISTEN)

: lsof は開いているファイルを検索する際にカーネル メモリを読み取るため、カーネル メモリが急激に変化すると、予測できない出力が発生する可能性があります。これは、lsof コマンドを使用する場合の大きな欠点の 1 つです。

詳細については、lsof のマニュアル ページを参照してください。

man lsof

それだけです!この記事では、Linux で特定のファイルを誰が使用しているかを知る方法を説明しました。開いているファイルを使用してプロセスの所有者とプロセス情報を特定する方法を示しました。ご質問やご意見がございましたら、以下のフィードバック フォームをご利用ください。