我们可以使用lsof命令来了解是否有人正在使用文件,如果有人,则是谁在使用。 它在搜索打开文件时读取内核内存,并帮助您列出所有打开的文件。 在这种情况下,打开的文件可以是常规文件,目录,块特殊文件,字符特殊文件,流,网络文件等等 - 因为在Linux中,一切都是文件。
Lsof用于文件系统,以识别谁正在使用该文件系统上的所有文件。 您可以在Linux文件系统上运行lsof命令,输出使用该文件标识进程的所有者和进程信息,如以下输出所示。
linuxidc@linuxidc:~/linuxidc.com$ lsof /dev/null
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 2263 linuxidc 0r CHR 1,3 0t0 6 /dev/null
dbus-daem 2293 linuxidc 0u CHR 1,3 0t0 6 /dev/null
gnome-ses 2297 linuxidc 0r CHR 1,3 0t0 6 /dev/null
at-spi-bu 2396 linuxidc 0r CHR 1,3 0t0 6 /dev/null
dbus-daem 2401 linuxidc 0u CHR 1,3 0t0 6 /dev/null
at-spi2-r 2404 linuxidc 0u CHR 1,3 0t0 6 /dev/null
gnome-she 2421 linuxidc 0r CHR 1,3 0t0 6 /dev/null
gvfsd 2427 linuxidc 0r CHR 1,3 0t0 6 /dev/null
gvfsd-fus 2432 linuxidc 0r CHR 1,3 0t0 6 /dev/null
pulseaudi 2444 linuxidc 0r CHR 1,3 0t0 6 /dev/null
pulseaudi 2444 linuxidc 1w CHR 1,3 0t0 6 /dev/null
pulseaudi 2444 linuxidc 2w CHR 1,3 0t0 6 /dev/null
ibus-daem 2457 linuxidc 0r CHR 1,3 0t0 6 /dev/null
ibus-dcon 2461 linuxidc 0r CHR 1,3 0t0 6 /dev/null
......
要列出特定的用户已打开文件,请运行以下命令,将实际用户名替换linuxidc。
linuxidc@linuxidc:~/linuxidc.com$ lsof -u linuxidc -t
lsof的另一个重要用途是找出侦听特定端口的进程。 例如,使用以下命令标识侦听端口80的进程。
linuxidc@linuxidc:~/linuxidc.com$ sudo lsof -i TCP:80
[sudo] linuxidc 的密码:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 948 root 6u IPv4 42296 0t0 TCP *:http (LISTEN)
nginx 948 root 7u IPv6 42297 0t0 TCP *:http (LISTEN)
nginx 949 www-data 6u IPv4 42296 0t0 TCP *:http (LISTEN)
nginx 949 www-data 7u IPv6 42297 0t0 TCP *:http (LISTEN)
注意:由于lsof在搜索打开文件时读取内核内存,因此内核内存的快速更改可能会导致不可预测的输出。 这是使用lsof命令的主要缺点之一。
有关更多信息,请查看lsof手册页:
linuxidc@linuxidc:~/linuxidc.com$ man lsof
就这样! 在本文中,我们已经解释了如何知道谁在Linux中使用特定文件。 我们已经展示了如何使用打开的文件识别进程的所有者和进程信息。 如果您有任何问题或意见,请使用下面的留言与我们联系。
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx