lsof

提供: セキュリティ
移動: 案内検索
スポンサーリンク

lsof とは、オープンファイルをリストするためのコマンドです。

読み方

lsof
えるえすおぶ

概要

lsofは、環境によっては、なかなか実行が終らない、重たいコマンドになってしまうことがあります。通信相手の多い環境で、IPアドレスからホスト名を逆引きしたり、開いているファイル数が多い、実行中のプロセスが多い、などの理由で、lsofコマンドの実行時間が長くなり、出力が大きくなる可能性がありますので、場合によっては、利用に注意する必要があります。

インストール

Ubuntu/Debianにインストールする場合

apt-get コマンドでインストールする場合です。

sudo apt-get install lsof

FreeBSDにインストールする場合

pkgコマンドでインストールする場合

sudo pkg install lsof

使い方

プロセスが開いているファイル

lsof -p プロセスID
ubuntu@c1:~$ lsof -p 709
COMMAND PID USER   FD      TYPE DEVICE SIZE/OFF NODE NAME
sshd    709 root  cwd   unknown                      /proc/709/cwd (readlink: Permission denied)
sshd    709 root  rtd   unknown                      /proc/709/root (readlink: Permission denied)
sshd    709 root  txt   unknown                      /proc/709/exe (readlink: Permission denied)
sshd    709 root NOFD                                /proc/709/fd (opendir: Permission denied)
ubuntu@c1:~$ sudo lsof -p 709
COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
sshd    709 root  cwd    DIR    8,1     4096 1187562 /
sshd    709 root  rtd    DIR    8,1     4096 1187562 /
sshd    709 root  txt    REG    8,1   527680 2622188 /usr/sbin/sshd
sshd    709 root  mem    REG    8,1    47040 1712027 /lib/i386-linux-gnu/libnss_files-2.15.so
sshd    709 root  mem    REG    8,1    42652 1712031 /lib/i386-linux-gnu/libnss_nis-2.15.so
sshd    709 root  mem    REG    8,1    30520 1712023 /lib/i386-linux-gnu/libnss_compat-2.15.so
sshd    709 root  mem    REG    8,1    83776 1712053 /lib/i386-linux-gnu/libresolv-2.15.so
sshd    709 root  mem    REG    8,1    13672 1712005 /lib/i386-linux-gnu/libkeyutils.so.1.4
sshd    709 root  mem    REG    8,1    30320 2757679 /usr/lib/i386-linux-gnu/libkrb5support.so.0.1
sshd    709 root  mem    REG    8,1   157284 2757675 /usr/lib/i386-linux-gnu/libk5crypto.so.3.1
sshd    709 root  mem    REG    8,1    13940 1711991 /lib/i386-linux-gnu/libdl-2.15.so
sshd    709 root  mem    REG    8,1    92016 1712021 /lib/i386-linux-gnu/libnsl-2.15.so
sshd    709 root  mem    REG    8,1  1734120 1711979 /lib/i386-linux-gnu/libc-2.15.so
sshd    709 root  mem    REG    8,1    13864 1711983 /lib/i386-linux-gnu/libcom_err.so.2.1
sshd    709 root  mem    REG    8,1   842684 2757677 /usr/lib/i386-linux-gnu/libkrb5.so.3.3
sshd    709 root  mem    REG    8,1   249660 2757671 /usr/lib/i386-linux-gnu/libgssapi_krb5.so.2.2
sshd    709 root  mem    REG    8,1    34316 1711985 /lib/i386-linux-gnu/libcrypt-2.15.so
sshd    709 root  mem    REG    8,1    83572 1712190 /lib/i386-linux-gnu/libz.so.1.2.3.4
sshd    709 root  mem    REG    8,1     9796 1712073 /lib/i386-linux-gnu/libutil-2.15.so
sshd    709 root  mem    REG    8,1  1734772 1711987 /lib/i386-linux-gnu/libcrypto.so.1.0.0
sshd    709 root  mem    REG    8,1   124663 1712049 /lib/i386-linux-gnu/libpthread-2.15.so
sshd    709 root  mem    REG    8,1   120748 1712057 /lib/i386-linux-gnu/libselinux.so.1
sshd    709 root  mem    REG    8,1    50760 1712035 /lib/i386-linux-gnu/libpam.so.0.83.0
sshd    709 root  mem    REG    8,1    35032 1712188 /lib/i386-linux-gnu/libwrap.so.0.7.6
sshd    709 root  mem    REG    8,1   134344 1711961 /lib/i386-linux-gnu/ld-2.15.so
sshd    709 root    0u   CHR    1,3      0t0 1187639 /dev/null
sshd    709 root    1u   CHR    1,3      0t0 1187639 /dev/null
sshd    709 root    2u   CHR    1,3      0t0 1187639 /dev/null
sshd    709 root    3r  IPv4  19019      0t0     TCP *:ssh (LISTEN)
sshd    709 root    4u  IPv6  19026      0t0     TCP *:ssh (LISTEN)

pgrepを併用する例です。

ubuntu@c1:~$ lsof -p `pgrep -n man`
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
man     11863 ubuntu  cwd    DIR    8,1     4096 2759486 /usr/share/man
man     11863 ubuntu  rtd    DIR    8,1     4096 1187562 /
man     11863 ubuntu  txt    REG    8,1   100984 2107512 /usr/bin/man
man     11863 ubuntu  mem    REG    8,1    83572 1712190 /lib/i386-linux-gnu/libz.so.1.2.3.4
man     11863 ubuntu  mem    REG    8,1    21912 2764465 /usr/lib/i386-linux-gnu/libgdbm.so.3.0.0
man     11863 ubuntu  mem    REG    8,1  1734120 1711979 /lib/i386-linux-gnu/libc-2.15.so
man     11863 ubuntu  mem    REG    8,1    46304 2764470 /usr/lib/i386-linux-gnu/libpipeline.so.1.2.1
man     11863 ubuntu  mem    REG    8,1   113540 2364377 /usr/lib/man-db/libman-2.6.1.so
man     11863 ubuntu  mem    REG    8,1    21720 2364378 /usr/lib/man-db/libmandb-2.6.1.so
man     11863 ubuntu  mem    REG    8,1   134344 1711961 /lib/i386-linux-gnu/ld-2.15.so
man     11863 ubuntu    0u   CHR  136,2      0t0       5 /dev/pts/2
man     11863 ubuntu    1u   CHR  136,2      0t0       5 /dev/pts/2
man     11863 ubuntu    2u   CHR  136,2      0t0       5 /dev/pts/2

ユーザーが開いているファイル

sudo lsof -u ユーザー名
ubuntu@c1:~$ sudo lsof -u syslog
COMMAND  PID   USER   FD   TYPE     DEVICE SIZE/OFF       NODE NAME
rsyslogd 156 syslog  cwd    DIR        8,1     4096    1187562 /
rsyslogd 156 syslog  rtd    DIR        8,1     4096    1187562 /
rsyslogd 156 syslog  txt    REG        8,1   388540    2622170 /usr/sbin/rsyslogd
rsyslogd 156 syslog  mem    REG        8,1    42652    1712031 /lib/i386-linux-gnu/libnss_nis-2.15.so
rsyslogd 156 syslog  mem    REG        8,1    92016    1712021 /lib/i386-linux-gnu/libnsl-2.15.so
rsyslogd 156 syslog  mem    REG        8,1    30520    1712023 /lib/i386-linux-gnu/libnss_compat-2.15.so
rsyslogd 156 syslog  mem    REG        8,1    22496    2760930 /usr/lib/rsyslog/imklog.so
rsyslogd 156 syslog  mem    REG        8,1   331860    2760940 /usr/lib/rsyslog/imuxsock.so
rsyslogd 156 syslog  mem    REG        8,1    47040    1712027 /lib/i386-linux-gnu/libnss_files-2.15.so
rsyslogd 156 syslog  mem    REG        8,1    22304    2760942 /usr/lib/rsyslog/lmnet.so
rsyslogd 156 syslog  mem    REG        8,1  1734120    1711979 /lib/i386-linux-gnu/libc-2.15.so
rsyslogd 156 syslog  mem    REG        8,1    30684    1712055 /lib/i386-linux-gnu/librt-2.15.so
rsyslogd 156 syslog  mem    REG        8,1    13940    1711991 /lib/i386-linux-gnu/libdl-2.15.so
rsyslogd 156 syslog  mem    REG        8,1   124663    1712049 /lib/i386-linux-gnu/libpthread-2.15.so
rsyslogd 156 syslog  mem    REG        8,1    83572    1712190 /lib/i386-linux-gnu/libz.so.1.2.3.4
rsyslogd 156 syslog  mem    REG        8,1   134344    1711961 /lib/i386-linux-gnu/ld-2.15.so
rsyslogd 156 syslog    0u  unix 0xef2c46c0      0t0      17046 /dev/log
rsyslogd 156 syslog    1w   REG        8,1    11210    1189965 /var/log/syslog
rsyslogd 156 syslog    2w   REG        8,1      981    1189966 /var/log/kern.log
rsyslogd 156 syslog    3r   REG       0,30        0 4026532032 /proc/kmsg
rsyslogd 156 syslog    4w   REG        8,1    56757    1189964 /var/log/auth.log

コマンドの開いているファイルを調べる

lsof -c コマンド
ubuntu@c1:~$ sudo lsof -c rsyslogd
COMMAND  PID   USER   FD   TYPE     DEVICE SIZE/OFF       NODE NAME
rsyslogd 156 syslog  cwd    DIR        8,1     4096    1187562 /
rsyslogd 156 syslog  rtd    DIR        8,1     4096    1187562 /
rsyslogd 156 syslog  txt    REG        8,1   388540    2622170 /usr/sbin/rsyslogd
rsyslogd 156 syslog  mem    REG        8,1    42652    1712031 /lib/i386-linux-gnu/libnss_nis-2.15.so
rsyslogd 156 syslog  mem    REG        8,1    92016    1712021 /lib/i386-linux-gnu/libnsl-2.15.so
rsyslogd 156 syslog  mem    REG        8,1    30520    1712023 /lib/i386-linux-gnu/libnss_compat-2.15.so
rsyslogd 156 syslog  mem    REG        8,1    22496    2760930 /usr/lib/rsyslog/imklog.so
rsyslogd 156 syslog  mem    REG        8,1   331860    2760940 /usr/lib/rsyslog/imuxsock.so
rsyslogd 156 syslog  mem    REG        8,1    47040    1712027 /lib/i386-linux-gnu/libnss_files-2.15.so
rsyslogd 156 syslog  mem    REG        8,1    22304    2760942 /usr/lib/rsyslog/lmnet.so
rsyslogd 156 syslog  mem    REG        8,1  1734120    1711979 /lib/i386-linux-gnu/libc-2.15.so
rsyslogd 156 syslog  mem    REG        8,1    30684    1712055 /lib/i386-linux-gnu/librt-2.15.so
rsyslogd 156 syslog  mem    REG        8,1    13940    1711991 /lib/i386-linux-gnu/libdl-2.15.so
rsyslogd 156 syslog  mem    REG        8,1   124663    1712049 /lib/i386-linux-gnu/libpthread-2.15.so
rsyslogd 156 syslog  mem    REG        8,1    83572    1712190 /lib/i386-linux-gnu/libz.so.1.2.3.4
rsyslogd 156 syslog  mem    REG        8,1   134344    1711961 /lib/i386-linux-gnu/ld-2.15.so
rsyslogd 156 syslog    0u  unix 0xef2c46c0      0t0      17046 /dev/log
rsyslogd 156 syslog    1w   REG        8,1    11210    1189965 /var/log/syslog
rsyslogd 156 syslog    2w   REG        8,1      981    1189966 /var/log/kern.log
rsyslogd 156 syslog    3r   REG       0,30        0 4026532032 /proc/kmsg
rsyslogd 156 syslog    4w   REG        8,1    57575    1189964 /var/log/auth.log

listenしているポート

ubuntu@c1:~$ sudo lsof -i
COMMAND     PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
dhclient3   671   root    7u  IPv4  18870      0t0  UDP *:bootpc
sshd        709   root    3r  IPv4  19019      0t0  TCP *:ssh (LISTEN)
sshd        709   root    4u  IPv6  19026      0t0  TCP *:ssh (LISTEN)
sshd       2019   root    3r  IPv4  33986      0t0  TCP c1:ssh->10.0.3.1:59588 (ESTABLISHED)
sshd       2031 ubuntu    3u  IPv4  33986      0t0  TCP c1:ssh->10.0.3.1:59588 (ESTABLISHED)
sshd      11284   root    3r  IPv4  47432      0t0  TCP c1:ssh->10.0.3.1:59649 (ESTABLISHED)
sshd      11296 ubuntu    3u  IPv4  47432      0t0  TCP c1:ssh->10.0.3.1:59649 (ESTABLISHED)

ポート番号やプロトコル名で開いているポートを調べられます。

sudo lsof -i :ssh
sudo lsof -i :22
sudo lsof -i :22,80
ubuntu@c1:~$ sudo lsof -i :ssh
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd      709   root    3r  IPv4  19019      0t0  TCP *:ssh (LISTEN)
sshd      709   root    4u  IPv6  19026      0t0  TCP *:ssh (LISTEN)
sshd     2019   root    3r  IPv4  33986      0t0  TCP c1:ssh->10.0.3.1:59588 (ESTABLISHED)
sshd     2031 ubuntu    3u  IPv4  33986      0t0  TCP c1:ssh->10.0.3.1:59588 (ESTABLISHED)
sshd    11284   root    3r  IPv4  47432      0t0  TCP c1:ssh->10.0.3.1:59649 (ESTABLISHED)
sshd    11296 ubuntu    3u  IPv4  47432      0t0  TCP c1:ssh->10.0.3.1:59649 (ESTABLISHED)

インターフェイスを指定する例です。

sudo lsof -i @10.0.3.2
sudo lsof -i @10.0.3.2:80

ファイルシステムごとに調べる

マウントしているパスを指定して調べることもできます。

lsof /mnt
ubuntu@c1:~$ lsof /proc
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF  NODE NAME
lsof    12519 ubuntu    3r   DIR   0,30        0     1 /proc
lsof    12519 ubuntu    6r   DIR   0,30        0 59097 /proc/12519/fd
 
foo@u1:~$ sudo lsof /dev |head
lsof: WARNING: can't stat() fuse.gvfs-fuse-daemon file system /home/kaoru/.gvfs
      Output information may be incomplete.
COMMAND     PID        USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
init          1        root    0u   CHR    1,3      0t0 4958 /dev/null
init          1        root    1u   CHR    1,3      0t0 4958 /dev/null
init          1        root    2u   CHR    1,3      0t0 4958 /dev/null
init          1        root   18u   CHR    5,2      0t0 5260 /dev/ptmx
init          1        root   21u   CHR    5,2      0t0 5260 /dev/ptmx
kdevtmpfs    10        root  cwd    DIR    0,5     4220    3 /
kdevtmpfs    10        root  rtd    DIR    0,5     4220    3 /
upstart-u   386        root    0u   CHR    1,3      0t0 4958 /dev/null
upstart-u   386        root    1u   CHR    1,3      0t0 4958 /dev/null

複数の条件で調べる方法

プロセスとユーザー名で調べる例です。

lsof -a -u ubuntu -c sshd

名前を逆引きしない

lsofは、IPアドレスから逆引きをします。大量にアドレスを調べる場合、lsofの遅く・重くなります。netstatのように、逆引きをやめることができます。

lsof -n

関連項目




スポンサーリンク