見出し画像

Linuxのlsofコマンドを知る

いままではあまり使ったことのないコマンドだったのですが、最近知ったのでメモをしておきます。

lsofコマンドはファイルを特定のポート番号を待ち受けているかどうか、指定ファイルは誰が読み込んでいるのかを調べときに使ったりします。ですが本来の用途はプロセスのファイル使用状態を知るために使用します。Linuxではネットワークインターフェースもファイルと同様に扱われるため、このコマンドでネットワークの状況を見ることにも使えます。

使用の流れ

今回はhttpdのサーバをpython3のワンライナーで実行し、その状態でどのような状態になっているかを調べてみました。ワンライナーは以下のように実行し、8000番ポートを使用しています。

$ python3 -m http.server 8000

プロセス一覧を調べる(実行例)

$ ps aux | grep python
root      1270  0.2  1.1  55728 17240 pts/0    S+   07:42   0:00 python3 -m http.server 8000
root      1302  0.0  0.0  14224   928 pts/1    S+   07:43   0:00 grep --color=auto python

ネットワーク内 IPアドレス検索(実行例)


$ arp -a
? (10.0.1.39) at 06:fe:59:59:48:59 [ether] on ens3
? (10.0.0.41) at 02:42:0a:00:00:29 [ether] on ens3
? (10.0.0.1) at 02:42:ce:ff:26:36 [ether] on ens3

使われてるポート検索(実行例)

$ nmap 127.0.0.1 -sTU

Starting Nmap 7.01 ( https://nmap.org ) at 2022-04-29 07:47 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00012s latency).
Not shown: 1994 closed ports
PORT     STATE         SERVICE
22/tcp   open          ssh
111/tcp  open          rpcbind
8000/tcp open          http-alt
68/udp   open|filtered dhcpc
111/udp  open          rpcbind
123/udp  open          ntp

ポート番号を指定して使用中のプロセスを調べる(実行例)


$ lsof -i:8000 -P
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python3 1270 root    3u  IPv4  17565      0t0  TCP *:8000 (LISTEN)

プロセスIDを指定して使用中のファイルの状況を調べる(使用例)

$ lsof -p 1270
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
python3 1270 root  cwd    DIR  253,1     4096  3538945 /root
python3 1270 root  rtd    DIR  253,1     4096        2 /
python3 1270 root  txt    REG  253,1  4460304 10617465 /usr/bin/python3.5
python3 1270 root  mem    REG  253,1    47600  9834858 /lib/x86_64-linux-gnu/libnss_files-2.23.so
python3 1270 root  mem    REG  253,1   137400  9830935 /lib/x86_64-linux-gnu/liblzma.so.5.0.0
python3 1270 root  mem    REG  253,1    37616 10618676 /usr/lib/python3.5/lib-dynload/_lzma.cpython-35m-x86_64-linux-gnu.so
python3 1270 root  mem    REG  253,1    66800  9830813 /lib/x86_64-linux-gnu/libbz2.so.1.0.4
python3 1270 root  mem    REG  253,1    22000 10618706 /usr/lib/python3.5/lib-dynload/_bz2.cpython-35m-x86_64-linux-gnu.so
python3 1270 root  mem    REG  253,1   426624  9830534 /lib/x86_64-linux-gnu/libssl.so.1.0.0
python3 1270 root  mem    REG  253,1   118744 10617756 /usr/lib/python3.5/lib-dynload/_ssl.cpython-35m-x86_64-linux-gnu.so
python3 1270 root  mem    REG  253,1  2365984  9830533 /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
python3 1270 root  mem    REG  253,1    29488 10617755 /usr/lib/python3.5/lib-dynload/_hashlib.cpython-35m-x86_64-linux-gnu.so
python3 1270 root  mem    REG  253,1  2981280 10620333 /usr/lib/locale/locale-archive
python3 1270 root  mem    REG  253,1  1088952  9834849 /lib/x86_64-linux-gnu/libm-2.23.so
python3 1270 root  mem    REG  253,1   104864  9830526 /lib/x86_64-linux-gnu/libz.so.1.2.8
python3 1270 root  mem    REG  253,1   166032  9830880 /lib/x86_64-linux-gnu/libexpat.so.1.6.0
python3 1270 root  mem    REG  253,1    10656  9834844 /lib/x86_64-linux-gnu/libutil-2.23.so
python3 1270 root  mem    REG  253,1    14608  9834843 /lib/x86_64-linux-gnu/libdl-2.23.so
python3 1270 root  mem    REG  253,1  1868984  9834845 /lib/x86_64-linux-gnu/libc-2.23.so
python3 1270 root  mem    REG  253,1   138696  9834846 /lib/x86_64-linux-gnu/libpthread-2.23.so
python3 1270 root  mem    REG  253,1   162632  9834856 /lib/x86_64-linux-gnu/ld-2.23.so
python3 1270 root  mem    REG  253,1    26258 10617046 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache
python3 1270 root    0u   CHR  136,0      0t0        3 /dev/pts/0
python3 1270 root    1u   CHR  136,0      0t0        3 /dev/pts/0
python3 1270 root    2u   CHR  136,0      0t0        3 /dev/pts/0
python3 1270 root    3u  IPv4  17565      0t0      TCP *:8000 (LISTEN)

おわりに

lsofコマンドの使い方を学んでみました。プロセスが使用しているファイルを表示するということだけ聞いているとなかなかピンと来ないですが、使ってみると使いそうな場面が思いつきますね。

この記事が気に入ったらサポートをしてみませんか?