首页 > 系统相关 >linux lsof神器

linux lsof神器

时间:2023-09-13 21:22:53浏览次数:45  
标签:文件 查看 神器 file linux 进程 打开 lsof

转自:https://baijiahao.baidu.com/s?id=1599953889210092246&wfr=spider&for=pc lsof(list open files)是一个查看当前系统文件的工具。在linux环境下,任何事物都以文件的形式存在,用户通过文件不仅可以访问常规数据,还可以访问网络连接和硬件;如传输控制协议 (TCP) 和用户数据报协议 (UDP)套接字等,系统在后台都为该应用程序分配了一个文件描述符,该文件描述符提供了大量关于此应用程序的信息。本期,ISEC实验室的刘老师为大家详解lsof的用法。  

一、命令参数

-a:列出打开文件存在的进程; -c<进程名>:列出指定进程所打开的文件; -g:列出GID号进程详情; -d<文件号>:列出占用该文件号的进程; +d<目录>:列出目录下被打开的文件; +D<目录>:递归列出目录下被打开的文件; -n<目录>:列出使用NFS的文件; -i<条件>:列出符合条件的进程(4、6、协议、:端口、 @ip ); -p<进程号>:列出指定进程号所打开的文件; -u:列出UID号进程详情; -h:显示帮助信息; -v:显示版本信息。 二、实例讲解  

1、lsof输出各列信息的意义

,如下: COMMAND:进程的名称; PID:进程标识符; PPID:父进程标识符(需要指定-R参数); USER:进程所有者; PGID:进程所属组; FD:文件描述符,应用程序通过文件描述符识别该文件。  

2、文件描述符列表:

①. cwd:表示current work dirctory,即:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改; ②. txt:该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序; ③. lnn:library references (AIX); ④. er:FD information error (see NAME column); ⑤. jld:jail directory (FreeBSD); ⑥. ltx:shared library text (code and data); ⑦. mxx :hex memory-mapped type number xx. ⑧. m86:DOS Merge mapped file; ⑨. mem:memory-mapped file; ⑩. mmap:memory-mapped device; . pd:parent directory; . rtd:root directory; . tr:kernel trace file (OpenBSD); . v86 VP/ix mapped file; . 0:表示标准输出; . 1:表示标准输入; . 2:表示标准错误。  

3、一般在标准输出、标准错误、标准输入后,还跟着文件状态模式:

  ①.u:表示该文件被打开并处于读取/写入模式; ②.r:表示该文件被打开并处于只读模式; ③.w:表示该文件被打开并处于只写模式; ④.空格:表示该文件的状态模式为unknow,且没有锁定; ⑤.-:表示该文件的状态模式为unknow,且被锁定。  

4、同时在文件状态模式后面,还跟着相关的锁:

①. N:for a Solaris NFS lock of unknown type; ②. r:for read lock on part of the file; ③. R:for a read lock on the entire file; ④. w:for a write lock on part of the file;(文件的部分写锁) ⑤. W:for a write lock on the entire file;(整个文件的写锁) ⑥. u:for a read and write lock of any length; ⑦. U:for a lock of unknown type; ⑧. x:for an SCO OpenServer Xenix lock on part of the file; ⑨. X:for an SCO OpenServer Xenix lock on the entire file; ⑩. space:if there is no lock。  

5、文件类型

①. DIR:表示目录; ②. CHR:表示字符类型; ③. BLK:块设备类型; ④. UNIX:UNIX 域套接字; ⑤. FIFO:先进先出 (FIFO) 队列; ⑥. IPv4:网际协议 (IP) 套接字; ⑦. DEVICE:指定磁盘的名称; ⑧. SIZE:文件的大小; ⑨. NODE:索引节点(文件在磁盘上的标识); ⑩. NAME:打开文件的确切名称。

三、可打开文件

①. 普通文件; ②. 目录; ③. 网络文件系统的文件; ④. 字符或设备文件; ⑤. (函数)共享库; ⑥. 管道,命名管道; ⑦. 符号链接; ⑧. 网络文件(例如:NFS file、网络socket,unix域名socket); ⑨. 其它类型的文件等。    

四、常规用法

lsof 常被用来查找应用程序打开的文件名称和数目,系统管理员可能想尝试找出某个特定应用程序将日志数据记录到何处,或者正在跟踪某个问题。接下来,我们来看看是如何操作的:  

(1)、查看由登陆用户启动而非系统启动的进程:

命令: lsof /dev/pts0   a. /dev/pts是远程登陆(telnet,ssh等)后创建的控制台设备文件所在的目录; b. 第一个用户登陆,console的设备文件为/dev/pts/0,第二个为/dev/pts/1,以此类推; c. 通过查看/dev/pts下的进程,我们将可以了解到由登陆用户启动而非系统启动的进程有哪些。  

(2)、查看文件,设备被哪些进程占用:

命令:lsof /dev/tty1   a. /dev/tty就是当前进程的控制终端的设备特殊文件; b. 通过查看/dev/tty下文件可以知道文件、设备的进程占用情况。  

(3)、指定进程号,可以查看该进程打开的文件:

命令:lsof -p 27358   a. 通过加入参数-p,我们可以指定一个PID,然后查看该进程下打开的文件。 b. 本例我们查看的是nginx下打开的相关文件。  

(1)、查看指定程序打开的文件

命令:lsof -c sshd   通过参数-c可以列出指定进程所打开的文件情况,以上是我们打开sshd下被打开文件的情况。  

(2)、查看指定用户打开的文件

命令:lsof -u root | more     通过参数-u查看root用户下存在的文件情况,由于root下显示内容较多,可以利用more来限制,进行分页查看。  

(3)、查看指定目录下被打开的文件

命令:lsof +D /home/ 或lsof +d /home/     参数+D为递归列出/home/下被打开的文件,参数+d为列出/home/下被打开的文件。   3、网络篇

(1)、查看所有网络连接

命令:lsof -i 和 lsof [email protected]     通过参数-i查看网络连接的情况,包括连接的ip、端口等;以及一些服务的连接情况,例如:sshd等。也可以通过指定ip查看该ip的网络连接情况。  

(2)、查看端口连接情况

命令:lsof -i :22   通过参数-i:端口可以查看端口的占用情况,-i参数还有查看协议,ip的连接情况等。   4、综合篇

(1)、查看指定进程打开的网络连接

命令:lsof -i -a -p 1535     使用了参数-i、-a、-p等,-i查看网络连接情况,-a查看存在的进程,-p指定进程。  

(2)、查看指定状态的网络连接

命令:lsof -n -P -i TCP -s TCP:ESTABLISHED     参数解释: -n:no host names, -P:no port names,-i TCP指定协议,-s指定协议状态;通过多个参数我们可以清晰的查看网络连接情况、协议连接情况等。  

五、恢复被删除的日志

Linux的系统日志默认保存在/var/log下   当Linux系统被入侵后,很多入侵者经常会删除系统中的各种日志,包括Web的access和error日志、last日志、messages日志、secure日志等,阻碍应急响应和取证调查,比如rm -rf /var/log。   遇到这种情况,不要关闭或者重启服务器系统,也不要关闭或重启相关服务或者进程,如:恢复apache的访问日志/var/log/httpd/access_log时,不能关闭或者重启服务器系统,也不能重启httpd服务。   假设我们要恢复被删除的messages日志和secure日志: 1.首先通过losf命令找到使用messages文件的进程的PID和messages文件的FD(文件描述符);   从上面命令输出可以看到,这个打开/var/log/messages文件的进程的PID是815,文件/var/log/messages的FD(文件描述符)是4,状态为deleted,标记被删除,但其实该文件并没有从磁盘中删除。   2.如果删除的文件还存在操作的进程,数据将可能被找回,可以在/proc/815/fd/4找到被删除的/var/log/messages文件;   3.恢复被删除的/var/log/secure文件;   在Linux系统中删除了一个文件,只要进程还在对文件进行操作,就可能还存在一个inode的引用:/proc/进程号/fd/文件描述符,只要知道当前打开文件的进程pid和文件描述符fd,即可利用lsof命令还原出被删除的文件。 六、总 结 Linux大量使用了文件,作为系统管理员,lsof 允许用户对核心内存进行查看,以找出系统当前如何使用这些文件。lsof的简单用法可以告诉用户哪些进程打开了哪些文件,以及哪些文件由哪些进程打开。   在收集关于应用程序工作情况的信息时,或在进行某些可能损坏数据的操作前,要确保文件未被使用,这一点特别重要。lsof 更高级的用法可以帮助用户查找删除的文件,并获得关于网络连接的信息。lsof 是一个功能强大的工具,它几乎可以用于任何地方。

标签:文件,查看,神器,file,linux,进程,打开,lsof
From: https://www.cnblogs.com/gered/p/17700816.html

相关文章

  • Linux性能测试之unixbench
    原文链接:Linux性能测试之unixbench大家好,昨天为大家带来了一篇关于在Linux下性能测试的文章《性能测试之LTP》,今天继续为大家推荐系列工具之unixbench,本工具用于Linux中cpu系统的测试,详情请查看百度,这里不多赘述,本文主要用于演示如何使用此工具。本文使用unixbench5.1.3版,工具的获......
  • 软件测试|Python数据可视化神器——pyecharts教程(八)
    Pyecharts绘制热力图当涉及可视化数据时,热力图是一种强大的工具,它可以帮助我们直观地了解数据集中的模式和趋势。在本文中,我们将学习如何使用Python中的Pyecharts库创建热力图,以便将数据转化为可视化的形式。什么是热力图?热力图是一种用于显示数据密度的二维图表,其中颜色的变化......
  • linux 中实现按照行交叉合并两个文件
     001、方法1[root@pc1test01]#lsa.txtb.txt[root@pc1test01]#cata.txt123456[root@pc1test01]#catb.txtabcdef[root@pc1test01]#paste-d"_"a.txtb.txt12_ab34_cd56_ef[root@pc1test01]#paste-d"_"a.txtb......
  • Linux内核之堆溢出的利用
    前言用户进程会通过malloc等函数进行动态内存分配相应的内核也有一套动态的内存分配机制。内核中的内存分配有两种类型的计算机并且使用不同的方法管理物理内存UMA计算机:每个处理器访问内存的速度一直NUMA计算机:每个处理器访问自己的本地内存速度较快,但是访问其他处理器的本地内存......
  • 等保2.0安全计算环境-三级通用Linux测评
    一、身份鉴别a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换;1、应核查用户在登陆时是否采用了身份鉴别措施;用户登录服务器需要使用账户+账户口令。2、应核查用户列表确认用户身份标识是否具有唯一性;(more/etc/passwd)//查看命......
  • Linux实现查看文件内容的5种方式
    除了使用vi/vim编辑器查看文件内容和使用cat命令将文件所有内容展示到终端上以外,还有多种方式。1、more:分屏显示文件内容。   点击q键退出。    more与cat类似,只不过如果文件内容超过了当前终端一个屏幕能显示的大小,此时more命令就会在终端只显示一个屏幕的文件内容......
  • linux常用命令
    1.pwd我在那里2.whoami我是谁3.clear清屏4.ctrl+c强制停止5.ipaddr查看地址6.ping是否联通网站7.systemctlstart|stop|restart|enabled进程network|网络连接|firewalld|防火墙8.cd进入目录cd..回到上一层目录cd-原路返回来时的目录cd/进入根目录9.......
  • linux中创建用户组
    1.打开终端并以root用户身份登录到Linux系统。2.运行以下命令以创建一个用户组:sudogroupaddgroup_name将“group_name”替换为你想要创建的用户组的名称。3.配置/etc/sudoers文件:sudovisudo4.在文件中找到Userprivilegespecification部分,或者##......
  • Linux手动安装jre
    ......
  • linux if命令
    关于文件属性的判断式-a如果文件存在-b如果文件存在,且该文件是区域设备文件-c当file存在并且是字符设备文件时返回真-d当pathname存在并且是一个目录时返回真-e当pathname指定的文件或目录存在时返回真-f当file存在并且是普通文件时返回真-g当由pathname指定的文件......