ubuntu下lsof工具使用手册--一切皆文件

lsof(list open files)是一个查看当前系统文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,该文件描述符提供了大量关于这个应用程序本身的信息。

查看系统信息时,需要给予管理员权限,在前面加上sudo既可以了

如sudo lsof -i :27017,这个端口时mongodb使用的端口。

<span style="font-size:14px;">[email protected]:~/文档/maketest$ sudo lsof -i :27017
COMMAND  PID    USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
mongod  6941 mongodb    6u  IPv4 2607706      0t0  TCP localhost:27017 (LISTEN)</span>

lsof打开的文件可以是:

  1. 普通文件
  2. 目录
  3. 网络文件系统的文件
  4. 字符或设备文件
  5. (函数)共享库
  6. 管道,命名管道
  7. 符号链接
  8. 网络文件(例如:NFS file、网络socket,unix域名socket)
  9. 还有其它类型的文件,等等

3.1. 命令参数

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

3.2. 使用实例

实例1:无任何参数

<span style="font-size:14px;">$lsof| more
COMMAND     PID      USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
init          1      root  cwd       DIR              253,0     4096          2 /
init          1      root  rtd       DIR              253,0     4096          2 /
init          1      root  txt       REG              253,0   150352    1310795 /sbin/init
init          1      root  mem       REG              253,0    65928    5505054 /lib64/libnss_files-2.12.so
init          1      root  mem       REG              253,0  1918016    5521405 /lib64/libc-2.12.so
init          1      root  mem       REG              253,0    93224    5521440 /lib64/libgcc_s-4.4.6-20120305.so.1
init          1      root  mem       REG              253,0    47064    5521407 /lib64/librt-2.12.so
init          1      root  mem       REG              253,0   145720    5521406 /lib64/libpthread-2.12.so
...</span>

说明:

lsof输出各列信息的意义如下:

  • COMMAND:进程的名称
  • PID:进程标识符
  • PPID:父进程标识符(需要指定-R参数)
  • USER:进程所有者
  • PGID:进程所属组
  • FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等:
    <span style="font-size:14px;">(1)cwd:表示current work dirctory,即:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改
    (2)txt :该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序
    (3)lnn:library references (AIX);
    (4)er:FD information error (see NAME column);
    (5)jld:jail directory (FreeBSD);
    (6)ltx:shared library text (code and data);
    (7)mxx :hex memory-mapped type number xx.
    (8)m86:DOS Merge mapped file;
    (9)mem:memory-mapped file;
    (10)mmap:memory-mapped device;
    (11)pd:parent directory;
    (12)rtd:root directory;
    (13)tr:kernel trace file (OpenBSD);
    (14)v86  VP/ix mapped file;
    (15)0:表示标准输出
    (16)1:表示标准输入
    (17)2:表示标准错误
    一般在标准输出、标准错误、标准输入后还跟着文件状态模式:r、w、u等
    (1)u:表示该文件被打开并处于读取/写入模式
    (2)r:表示该文件被打开并处于只读模式
    (3)w:表示该文件被打开并处于
    (4)空格:表示该文件的状态模式为unknow,且没有锁定
    (5)-:表示该文件的状态模式为unknow,且被锁定
    同时在文件状态模式后面,还跟着相关的锁
    (1)N:for a Solaris NFS lock of unknown type;
    (2)r:for read lock on part of the file;
    (3)R:for a read lock on the entire file;
    (4)w:for a write lock on part of the file;(文件的部分写锁)
    (5)W:for a write lock on the entire file;(整个文件的写锁)
    (6)u:for a read and write lock of any length;
    (7)U:for a lock of unknown type;
    (8)x:for an SCO OpenServer Xenix lock on part      of the file;
    (9)X:for an SCO OpenServer Xenix lock on the      entire file;
    (10)space:if there is no lock.</span>
  • TYPE:文件类型,如DIR、REG等,常见的文件类型:
    <span style="font-size:14px;">(1)DIR:表示目录
    (2)CHR:表示字符类型
    (3)BLK:块设备类型
    (4)UNIX: UNIX 域套接字
    (5)FIFO:先进先出 (FIFO) 队列
    (6)IPv4:网际协议 (IP) 套接字</span>
  • DEVICE:指定磁盘的名称
  • SIZE:文件的大小
  • NODE:索引节点(文件在磁盘上的标识)
  • NAME:打开文件的确切名称

实例2:查找某个文件相关的进程

<span style="font-size:14px;">$lsof /bin/bash
COMMAND     PID USER  FD   TYPE DEVICE SIZE/OFF    NODE NAME
mysqld_sa  2169 root txt    REG  253,0   938736 4587562 /bin/bash
ksmtuned   2334 root txt    REG  253,0   938736 4587562 /bin/bash
bash      20121 root txt    REG  253,0   938736 4587562 /bin/bash</span>

实例3:列出某个用户打开的文件信息

<span style="font-size:14px;">  $lsof -u username

-u 选项,u是user的缩写</span>

实例4:列出某个程序进程所打开的文件信息

<span style="font-size:14px;">$lsof -c mysql</span>

-c 选项将会列出所有以mysql这个进程开头的程序的文件,其实你也可以写成 lsof | grep mysql, 但是第一种方法明显比第二种方法要少打几个字符;

实例5:列出某个用户以及某个进程所打开的文件信息

<span style="font-size:14px;">$lsof  -u test -c mysql</span>

实例6:通过某个进程号显示该进程打开的文件

<span style="font-size:14px;">$lsof -p 11968</span>

实例7:列出所有的网络连接

<span style="font-size:14px;">$lsof -i</span>

实例8:列出所有tcp 网络连接信息

<span style="font-size:14px;">$lsof -i tcp

$lsof -n -i tcp
COMMAND     PID  USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
svnserve  11552 weber    3u  IPv4 3799399      0t0  TCP *:svn (LISTEN)
redis-ser 25501 weber    4u  IPv4  113150      0t0  TCP 127.0.0.1:6379 (LISTEN)</span>

实例9:列出谁在使用某个端口

<span style="font-size:14px;">$lsof -i :27017</span>

实例10:列出某个用户的所有活跃的网络端口

<span style="font-size:14px;">$lsof -a -u test -i</span>

实例11:根据文件描述列出对应的文件信息

<span style="font-size:14px;">$lsof -d description(like 2)</span>

示例:

<span style="font-size:14px;">$lsof -d 3 | grep PARSER1
tail      6499 tde    3r   REG    253,3   4514722     417798 /opt/applog/open/log/HOSTPARSER1_ERROR_141217.log.001</span>

说明:0表示标准输入,1表示标准输出,2表示标准错误,从而可知:所以大多数应用程序所打开的文件的 FD 都是从 3 开始

实例12:列出被进程号为1234的进程所打开的所有IPV4 network files

<span style="font-size:14px;">$lsof -i 4 -a -p 1234</span>

实例13:列出目前连接主机nf5260i5-td上端口为:20,21,80相关的所有文件信息,且每隔3秒重复执行

<span style="font-size:14px;">lsof -i @nf5260i5-td:20,21,80 -r 3</span>

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-07 19:59:30

ubuntu下lsof工具使用手册--一切皆文件的相关文章

Ubuntu 下查看中文man手册方法

转载自:http://blog.chinaunix.net/uid-24830506-id-3266493.html Ubuntu 中文man手册安装方法 分类: LINUX Ubuntu 下查看中文man手册方法: 1,打开终端,输入以下命令安装中文 man 手册 sudo apt-get install manpages-zh 2,查看man 手册安装到哪里 dpkg -L manpages-zh | less 查看到安装在/usr/share/man/zh_CN 3,设一个中文man别名

( 转)Ubuntu下创建、重命名、删除文件及文件夹,强制清空回收站方法

Ubuntu下创建.重命名.删除文件及文件夹,强制清空回收站方法 mkdir 目录名 ——创建一个目录 rmdir 空目录名 ——删除一个空目录 rm 文件名 文件名 ——删除一个文件或多个文件 rm -rf 非空目录名 ——删除一个非空目录下的一切 touch 文件名 ——创建一个空文件 重命名文件(夹) / 移动文件(夹)到指定文件夹echWeb-技术社区5].O"?8H.I执行格式: mv source destination 举例: mv file1 file2 表示将文件 file1,

Ubuntu下用命令行快速打开各类型文件(转)

nautilus /media/pm/文档/book/system/必读nautilus /media/pm/文档/book/android/ndk 内核/framerwork/android waitReadxdg-open /media/pm/文档/book/system/必读/深入理解linux内核.pdf ubuntu 下一个神奇的命令--以窗口形式打开某个文件夹 今天意外的发现的一个命令 nautilus /media/ 会以窗口的形式打开某个目录,以后写脚本可以用到. Ubuntu下

ubuntu 下截图工具的使用

我个人觉得,ubuntu自带的截图工具功能就不错.具体使用如下: 在ubuntu下的系统设置中找到硬盘区的"键盘"处,进入该设置界面如下: 选择标签"快捷键",进入新设置界面如下所示: 之后,你就可以看到有"截图"字样,选择该操作,进入相关界面进行设置即可.里面的快捷键可以自由设置.

Ubuntu下安装man中文手册

安装步骤 1.先安装所需要的依赖包: automake 工具 sudo apt-get install autoconf automake libtool git 工具 sudo apt-get install git 2.下载中文man安装包: sudo mkdir /usr/local/zhman cd /usr/local/zhman git clone https://github.com/lidaobing/manpages-zh.git 3.安装操作步骤如下: cd manpages

Ubuntu下SVN命令行递归添加目录文件(免去一个一个的添加 --force)

由于在Linux下一直没有找到好的svn工具(类似于TortiseSVN的).当然eSVN这些也不错,但就是使用上觉得还不是非常习惯.最终还是选择了svn原始的命令行工具来进行版本控制操作. 命令行的有些指令使用起来还是比较方便的.如svn checkout.svn commit这些命令基本上使不使用图形界面关系也不是很大.唯一比较麻烦的命令的就是svn add,因为新增加的文件会分步在不同的目录中,有些目录中的文件已经存在于受控的svn资料夹,而有些文件所在的目录都是新增的.简单的输入svn

解决ubuntu下,QQ重启后出现个人文件夹已被占用的问题

首先,是wine QQ的安转教程:Wine安装最新版QQ(8.9.2)的简单教程 - Powered by Discuz! 里面作者也提到了关于重启后出现个人文件夹被占用的情况. 如下: 这里,如果不替换riched20的话则安装好QQ后无法输入用户名,不停用txplatform.exe则WineQQ无法完整退出,导致关掉重开后提示QQ文件被占用,禁用ntoskrnl.exe是为了规避可能出现QQ无法启动的bug.前面的*号可以省略,不过我觉得比较好看,还是加上去了. 我按照上面的设置后,发现还

ubuntu下修改进入root用户和修改文件权限

(1)进入root用户 su root 密码:设置的root密码 (2)修改文件权限 sudo chmod +777  file (3)执行shell ./shellfile (4)编写shell 第一行:普通用户  #!/bin/sh,root用户  #!/bin/bash

Ubuntu下安装MySQL

在Linux下安装MySQL有三种方式:第一种以rpm的二进制文件分个安装,第二种是自己编译源码后安装,最后一种是以二进制tar.gz文件来安装. 这三种中,由于最后一种是统一的整体文件,个人感觉最简单,故本文将采用此方式来进行安装: 首先到mysql的下载中心上下载最新的tar.gz包: 1.在浏览器中输入http://www.mysql.com/downloads/,进入mysql的下载中心,在这里有使用mysql开发的一些工具,包括mysql的驱动,数据库以及图形开发工具MySQL Wor