Linux基础命令-uptime查看系统负载 Linux基础命令-top实时显示系统状态 Linux基础命令-ps查看进程状态 文件目录 前言 一 命令的介绍 二 语法及参数 2.1 使用help查看命令的语法信息 2.2 常用参
文件目录
lsof命令是个比较常用到的系统监控命令,不管是用来查看文件的进程,或者是查看进程打开的文件都是能很好用的一个工具,那么一起来学习一下。
lsof命令来自于英文词组“list opened files”的缩写,主要功能是用来查看文件的进程信息,此命令能够能好的帮助用户了解相关服务的运行状态,是个非常不错的系统监控工具。
小提示:只有root用户可以使用这个命令或获取超级权限的普通用户才能使用。
NAME lsof - list open filesSYNOPSIS lsof [ -?abChlnNOPRtUvVX ] [ -A A ] [ -c c ] [ +c c ] [ +|-d d ] [ +|-D D ] [ +|-e s ] [ +|-f [cfgGn] ] [ -F [f] ] [ -g [s] ] [ -i [i] ] [ -k k ] [ -K k ] [ +|-L [l] ] [ +|-m m ] [ +|-M ] [ -o [o] ] [ -p s ] [ +|-r [t[m]] ] [ -s [p:s] ] [ -S [t] ] [ -T [t] ] [ -u s ] [ +|-w ] [ -x [fl] ] [ -z [z] ] [ -Z [Z] ] [ -- ] [names]
语法:lsof 【参数】
-a | 列出打开(二进制文件)存在的进程 |
-c<进程名> | 列出指定进程所打开的文件 |
-g | 列出GID号 进程的详情 |
-d<文件号> | 列出占用该文件号(FD)的进程 |
+d<目录> | 列出目录下打开的文件 |
+D<目录> | 递归列出目录下打开的文件 |
-n<目录> | 列出使用NFS的文件 |
-i <条件> | 列出符合条件的进程 |
-p<进程号> | 列出指定进程号所打开的文件 |
-u | 列出UID号进程详情 |
-h | 显示帮助信息 |
-v | 显示版本信息 |
lsof显示打开的文件及其其它内容解读
图上对应的内容以表格形式展现:
状态栏 | 含义 |
COMMAND | 进程的名称 |
PID | 进程的标识符号 |
USER | 进程的所有者 |
FD | 文件描述符 |
TYPE | 文件类型 |
DEVICE | 指定磁盘的名称 |
SIZE/OFF | 文件的大小 |
node | 文件的索引 |
NAME | 打开文件的位置 |
[root@localhost ~]# lsof -a /usr/bin/vimCOMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEvim 10065 root txt REG 253,0 2337208 102492147 /usr/bin/vimvim 11403 host txt REG 253,0 2337208 102492147 /usr/bin/vim
[root@localhost ~]# lsof -c systemd | headCOMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEsystemd 1 root cwd DIR 253,0 224 64 /systemd 1 root rtd DIR 253,0 224 64 /systemd 1 root txt REG 253,0 1632960 2630 /usr/lib/systemd/systemdsystemd 1 root mem REG 253,0 20064 78153 /usr/lib64/libuuid.so.1.3.0systemd 1 root mem REG 253,0 265576 222563 /usr/lib64/libblkid.so.1.1.0systemd 1 root mem REG 253,0 90248 1780 /usr/lib64/libz.so.1.2.7systemd 1 root mem REG 253,0 157424 1788 /usr/lib64/liblzma.so.5.2.2systemd 1 root mem REG 253,0 23968 78215 /usr/lib64/libcap-ng.so.0.0.0systemd 1 root mem REG 253,0 19896 78205 /usr/lib64/libattr.so.1.1.0
可以先用netstat查看服务,再用这个查看端口号进程。
[root@VM-12-17-Centos ~]# netstat -antup |grep Mysqltcp6 0 0 :::3306 :::* LISTEN 3609/mysqld [root@VM-12-17-centos ~]# lsof -i :3306COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEmysqld 3609 mysql 29u IPv6 62681253 0t0 TCP *:mysql (LISTEN)
由于显示的内容实在太多,加上wc -l显示一共有多少行
[root@localhost ~]# lsof -d mem |wc -l7388
若要查看进程号打开的文件信息,可以先用ps搜索指定的指令信息,复制进程号后到这里使用-p参数查看进程号存在的文件。
[root@localhost ~]# ps aux | grep vimroot 10065 0.0 0.1 149752 5448 pts/2 S+ 19:19 0:00 vim a.shhost 11403 0.0 0.1 149568 5204 pts/3 S+ 20:05 0:00 vim 1.txtroot 11642 0.0 0.0 112824 968 pts/1 R+ 20:15 0:00 grep --color=auto vim[root@localhost ~]# lsof -p 10065 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEvim 10065 root cwd DIR 253,0 4096 67144897 /rootvim 10065 root rtd DIR 253,0 224 64 /vim 10065 root txt REG 253,0 2337208 102492147 /usr/bin/vim
lsof -u参数后接UID号和用户名都是显示一样的内容。
[root@localhost ~]# lsof -u 1000COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEbash 11312 host cwd DIR 253,0 145 101340405 /home/hostbash 11312 host rtd DIR 253,0 224 64 /bash 11312 host txt REG 253,0 964536 100664820 /usr/bin/bash
[root@localhost ~]# lsof -u hostCOMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEbash 11312 host cwd DIR 253,0 145 101340405 /home/hostbash 11312 host rtd DIR 253,0 224 64 /
[root@localhost ~]# lsof +d /home/host COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEbash 11312 host cwd DIR 253,0 145 101340405 /home/hostvim 11403 host cwd DIR 253,0 145 101340405 /home/hostvim 11403 host 3u REG 253,0 12288 101364386 /home/host/.1.txt.swp
[root@localhost ~]# lsof +D /rootCOMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEgnome-ses 1945 root cwd DIR 253,0 4096 67144897 /rootdbus-laun 1954 root cwd DIR 253,0 4096 67144897 /rootdbus-daem 1955 root cwd DIR 253,0 4096 67144897 /rootimsetting 1984 root cwd DIR 253,0 4096 67144897 /root
[root@localhost ~]# lsof -hlsof 4.87 latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/ latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ latest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man usage: [-?abhKlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-f[gG]] [+|-e s] [-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]] [-p s][+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [-Z [Z]] [--] [names]
此命令的恢复原理是当打开一个文件,这个文件就一直是打开状态的,并且有存在于磁盘、内存当中的;直接删除文件,但进程是还在持续运行中的,在这个过程中可以尝试使用文件描述符做文件的恢复。
思路步骤
#测试环境centos7.6[root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) [root@localhost ~]# mkdir test #创建文件[root@localhost ~]# cd test[root@localhost test]# cp /etc/passwd ./#在另外一个窗口打开文件[root@localhost test]# vim passwd#原窗口继续 删除文件[root@localhost test]# rm -f passwd[root@localhost test]# lsof | grep passwd #看到文件描述符为10r的信息cupsd 6758 root 10r REG 253,0 2576 17470125 /etc/passwdvim 13101 root 4u REG 253,0 12288 51866124 /root/test/.passwd.swp#在proc目录下查找PID 6758并且文件描述符为10的文件[root@localhost test]# head -5 /proc/6758/fd/10root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologin#将文件导入一个新文件[root@localhost test]# cat !$ > passwd.txtcat /proc/6758/fd/10 > passwd.txt[root@localhost test]# wc -l < passwd.txt #显示行数51 [root@localhost test]# md5sum /etc/passwd passwd.txt #inode与源文件一致,恢复成功b1a03b88bac575860f616d09756f78d0 /etc/passwdb1a03b88bac575860f616d09756f78d0 passwd.txt
在文件的进程还存在的情况下,文件恢复需要知道文件名或相关信息才有很大的把握可以进行恢复。
这个命令要记的参数是挺多的,用来监控进程打开的文件信息,亦可通过这个命令来了解相关服务的运行状态等,若觉得以上内容还不错的,可以点赞支持一下!
来源地址:https://blog.csdn.net/rhn_111/article/details/129145025
--结束END--
本文标题: Linux基础命令-lsof查看进程打开的文件
本文链接: https://lsjlt.com/news/397600.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0