求教lsof的正确用法。

sh/bash/dash/ksh/zsh等Shell脚本
回复
wgj
帖子: 294
注册时间: 2007-06-02 20:00

求教lsof的正确用法。

#1

帖子 wgj » 2014-06-24 10:31

lsof(list open files)是一个列出当前系统打开文件的工具。网上是这么说的。但是这个工具好像不太正常。
例如我的主目录下有一个tmp.lsof文件。我通过双击使用gedit打开,但是执行lsof tmp.lsof什么输出都没有。
而lsof -p “gedit的进程号”也看不到这个文件。但是可以看到gedit正在使用我的主目录。 :em20
彻底搞糊涂了。
求高人指点。
头像
astolia
论坛版主
帖子: 6703
注册时间: 2008-09-18 13:11

Re: 求教lsof的正确用法。

#2

帖子 astolia » 2014-06-24 18:10

你没有理解到“打开文件”的意思。

如果你学过C编程,就会知道读写一个文件时,需要进行以下步骤
1、打开文件(通过fopen()函数)
2、读写数据
3、关闭文件(通过fclose()函数)

之所以你看不到gedit打开的文件,是因为gedit实际上已经走完了以上三步,只是把第二步读出的数据显示出来而已。
此时文件已经关闭,所以lsof的结果中就没有

打开的文件会有一个文件号,可以用 ls -l /proc/进程ID/fd/* 看到某个进程打开的文件的文件号以及文件路径

你的主目录是gedit的工作目录,就是你在命令行下用pwd命令列出来的东西。
wgj
帖子: 294
注册时间: 2007-06-02 20:00

Re: 求教lsof的正确用法。

#3

帖子 wgj » 2014-06-24 18:28

多谢大神,学习了。
P.S.话说这样要是用gedit读U盘的文件好坑啊。正读着文件。任务一多一不小心弹出了就Game Over了。 :em06
P.S.2 刚刚在windows下也试了试。记事本好像也是这熊德行。
回复