![見出し画像](https://assets.st-note.com/production/uploads/images/77442063/rectangle_large_type_2_0bd79199033b91eee4cb4265c93069bb.png?width=800)
Photo by
matsuri365d
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コマンドの使い方を学んでみました。プロセスが使用しているファイルを表示するということだけ聞いているとなかなかピンと来ないですが、使ってみると使いそうな場面が思いつきますね。
この記事が気に入ったらサポートをしてみませんか?