linux常用命令杂记(一)--Lsof

lsof的用法

lsof全名list opened files,也就是列举系统中已经被打开的文件。linux环境中,任何事物都是文件,设备是文件,目录是文件,甚至sockets也是文件。所以,用好lsof命令,对日常的linux管理非常有帮助。

lsof是linux最常用的命令之一,通常的输出格式为:
#lsof +d /usr/local/
#lsof -i :22 知道22端口现在运行什么程序
等等
查看相应用法可以查看man帮助查找对应选项:man lsof

常见包括如下几个字段:

1、COMMAND默认以9个字符长度显示命令名称。可使用+c参数指定显示的宽度,若+c后跟的参数为零,则显示命令的全名(-c)

2、PID 进程的ID号(-p )

3、TID 如果是一个线程,显示线程 ID

4、USER 命令的执行UID或系统中登陆的用户名称。(-u)

5、FD 是文件描述符 File Descriptor number(-d)

6、TYPE 类型

7、DEVICE 使用character special、block special表示的设备号

8、SIZE/OFF 文件的大小,如果不能用大小表示的,会留空。

9、NODE 本地文件的inode id

10、挂载点和文件的全路径(链接会被解析为实际路径),或者连接双方的地址和端口、状态等

使用样例:

lsof urfile 显示这个文件(ufile)被哪个程序调用

lsof -c systemd 显示systemd 进程使用了哪些文件

lsof -p pid 使用 pid 显示进程使用了哪些文件

lsof -i:22 显示22端口被哪些ip使用

lsof +d /root 显示 root 下被打开的文件,不递归

lsof +D /root 同上,递归

lsof -u username 显示用户打开的文件

lsof的其他用法

1.使用lsof 还可以恢复之前删除的部分文件(内存中的进程还在)

详细操作请移步:https://blog.csdn.net/dutsoft/article/details/51248761

lsof恢复删除的内容的原理还是对删除后,依然存留在内存中的进程的恢复。这就需要追溯到linux的储存机制上了。对于许多应用程序,尤其是日志文件和数据库,这种恢复删除文件的方法非常有用。

Linux文件的存储机制和存储结构:

        一个文件在文件系统中的存放分为两个部分:数据部分和指针部分,指针位于文件系统的meta-data中,数据被删除后,这个指针就从meta-data中清除了,而数据部分存储在磁盘中,数据对应的指针从meta-data中清除后,文件数据部分占用的空间就可以被覆盖并写入新的内容,之所以出现删除abc.txt文件后,空间还没释放,就是因为python进程还在一直向这个文件写入内容,导致虽然删除了abc.txt文件,但文件对应的指针部分由于进程锁定,并未从meta-data中清除,而由于指针并未被删除,那么系统内核就认为文件并未被删除,因此通过df命令查询空间并未释放。          

      在文件系统处理文件需要的信息都存放在索引节点(inode)中,如果在删除文件的时候索引节点的引用计数不为0(表示文件正在被使用),则不会在磁盘中真正的删除文件,从而保证正在使用此文件的进程能够正常的处理文件。

      首先我们一起来看一下内核中关于文件系统的一些关键数据结构的关联,当一个进程打开一个文件后,便会在内核中创建一个file对象,这个对象主要描述了进程如何与文件进行交互。file对象中将指向一个dentry结构(目录项),目录项中描述了目录项名称,父目录项信息,子目录项信息等。而dentry中的d_inode所指向的inode节点中则包含了实际的文件存储在磁盘上的信息。

       当多个进程打开同一个文件时,内核中变会创建相应的file对象,但是他们都公用同一个dentry,只不过每一次打开文件dentry的引用计数d_count加1。并且对于打开的同一个文件而言,inode也是唯一的,inode的引用计数i_count一般为文件硬链接的数目。

     Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。

原文地址:http://blog.51cto.com/13873689/2150844

时间: 2024-08-09 09:02:41

linux常用命令杂记(一)--Lsof的相关文章

Linux常用命令39:lsof命令

lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口.因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监

linux常用命令 、查看日志、web排查

linux常用命令 ps aux|grep xxx (比如 ps aux|grep tomcat ps aux|grep tomcat-portalvip ps aux|grep nginx 等) rpm -qa|grep xxx (查找系统有没有安装 比如 rpm -qa|grep mysql rpm -qa|grep MySQL rpm -qa|grep jdk 等) 强制卸载 rpm -e 上一步查找结果的内容 --nodeps 查看端口是否被占用 netstat -an|grep 端口

Linux常用命令收集

Linux常用命令:if.for.which.ps.grep.netstat.lsof.head.tail.sed.awk.cut.sort.uniq.dos2unix.find.xargs.kill) 一.linux查看占用内存/cpu最高的进程情况(注明:可以使用一下命令查使用内存最多的10个进程) 1.查看占用cpu最高的进程 ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head 2.查看占用内存最高的进程 ps aux|head -1

linux常用命令技巧

原文地址 这篇文章来源于Quroa的一个问答<What are some time-saving tips that every Linux user should know?>-- Linux用户有哪些应该知道的提高效率的技巧.我觉得挺好的,总结得比较好,把其转过来,并加了一些自己的理解. 首先,我想告诉大家,在Unix/Linux下,最有效率技巧的不是操作图形界面,而是命令行操作,因为命令行意味着自动化.如果你看过<你可能不知道的Shell>以及<28个Unix/Linu

linux常用命令的介绍

本文主要介绍Linux常用命令工具,比如用户创建,删除,文件管理,常见的网络命令等 如何创建账号: 1. 创建用户 useradd -m username -m 表示会在/home 路径下添加创建用户的文件夹,username 为你的用户名,可天换成你喜欢的用户名 2. 创建密码 passwd username 之后会出现一个交互狂,让你输入密码和确认密码 3. 删除帐号 userdel -r username -r 代表着会删除/home 目录下该帐号的文件夹,如果要保留文件夹,则不需要加上-

Linux常用命令大全2

Linux命令是对Linux系统进行管理的命令.对于Linux系统来说,无论是中央处理器.内存.驱动.键盘.鼠标,还是用户等都是文件,Linux命令是它正常运行的核心.接下来,就来看看xp系统下载编辑为各位带来的Linux常用命令大全吧! Linux常用命令大全100条: 1,echo “aa” > test.txt 和 echo “bb” >> test.txt //>将原文件清空,并且内容写入到文件中,>>将内容放到文件的尾部 2,chmod go+w -R /ho

【Linux】Linux 常用命令汇总

查看软件xxx安装内容:dpkg -L xxx 查找软件库中的软件:apt-cache search 正则表达式 查找软件库中的软件:aptitude search 软件包 查找文件属于哪个包:dpkg -S filename 查找文件属于哪个包:apt-file search filename 查询软件xxx依赖哪些包:apt-cache depends xxx 查询软件xxx被哪些包依赖:apt-cache rdepends xxx 增加一个光盘源:sudo apt-cdrom add 系统

Linux常用命令(echo、date、ls、cd、history、cat)

一.linux常用命令有很多今天我们来总结一下常用的入门命令: 1.linux下关机命令:poweroff.init 0.halt.shutdown -h now 2.linux下重启命令:reboot.init 6.shutdown -r now 3.shutdown命令: 格式:shutdown  options TIME 其中options有以下几个: -r:执行重启 -c:取消shutdown命令 -h:执行关机 其中TIME有以下几个: now:表示现在 +m:相对时间表示法,从命令提

linux常用命令详解

linux常用命令 cut命令 例如:cut -d\| -f1,4 xx.txt -d 表示字段分隔符 -f 表示要显示的字段域,如果域之间,(逗号)隔开表示显示对应的单个域,如果用-隔开表示显示连续的域 sort命令 例如:sort -t\| -k2 xx.txt -n 按数值排序 -r 降序 -t 字段分隔符 -k 以哪个字段为关键字进行排序 -u 去重 -f 排序时不区分大小写 uniq命令 注意:使用uniq命令时,一定要先进行排序 -c 显示文件中行重复的次数 -d 只显示重复的行 -