linux之netstat与lsof

Netstat :命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。

lsof(list open files):是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。

执行netstat后,其输出结果为:

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State      
tcp        0      0 localhost.localdomain:35236 localhost.loc:etlservicemgr ESTABLISHED
tcp        0      0 localhost.loc:etlservicemgr localhost.localdomain:35236 ESTABLISHED
tcp        0     52 smartstorage.yoyoyws.co:ssh localhost:gmrupdateserv     ESTABLISHED
udp        0      0 localhost:42460             localhost:42460             ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ]         DGRAM                    9081   @/org/kernel/udev/udevd
unix  2      [ ]         DGRAM                    13199  @/org/freedesktop/hal/udev_event
unix  17     [ ]         DGRAM                    12185  /dev/log
unix  3      [ ]         STREAM     CONNECTED     19904  @/tmp/dbus-oAVgNbk3sa

一个是Active Internet connections,称为有源TCP连接,其中"Recv-Q"和"Send-Q"指%0A的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。

另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。
Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。

常见参数

-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态

-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。

提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到

lsof输出信息含义 
在终端下输入lsof即可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。 

用普通用户输入lsof命令为:

[lxl@smartstorage ~]$ lsof
COMMAND    PID      USER   FD      TYPE DEVICE SIZE/OFF     NODE NAME
init         1      root  cwd   unknown                          /proc/1/cwd (readlink: Permission denied)
init         1      root  rtd   unknown                          /proc/1/root (readlink: Permission denied)
init         1      root  txt   unknown                          /proc/1/exe (readlink: Permission denied)
init         1      root NOFD                                    /proc/1/fd (opendir: Permission denied)
kthreadd     2      root  cwd   unknown                          /proc/2/cwd (readlink: Permission denied)
kthreadd     2      root  rtd   unknown                          /proc/2/root (readlink: Permission denied)
kthreadd     2      root  txt   unknown                          /proc/2/exe (readlink: Permission denied)
kthreadd     2      root NOFD                                    /proc/2/fd (opendir: Permission denied)
migration    3      root  cwd   unknown                          /proc/3/cwd (readlink: Permission denied)
migration    3      root  rtd   unknown                          /proc/3/root (readlink: Permission denied)

lsof [options] filename 
常用的参数列表:  
lsof  filename 显示打开指定文件的所有进程 
lsof -a 表示两个参数都必须满足时才显示结果 
lsof -c string   显示COMMAND列中包含指定字符的进程所有打开的文件 
lsof -u username  显示所属user进程打开的文件 
lsof -g gid 显示归属gid的进程情况 
lsof +d /DIR/ 显示目录下被进程打开的文件 
lsof +D /DIR/ 同上,但是会搜索目录下的所有目录,时间相对较长 
lsof -d FD 显示指定文件描述符的进程 
lsof -n 不将IP转换为hostname,缺省是不加上-n参数 
lsof -i 用以显示符合条件的进程情况 
lsof -i[46] [protocol][@hostname|hostaddr][:service|port] 
            46 --> IPv4 or IPv6 
            protocol --> TCP or UDP 
            hostname --> Internet host name 
            hostaddr --> IPv4地址 
            service --> /etc/service中的 service name (可以不只一个) 
            port --> 端口号 (可以不只一个)

 

posted @ 2013-02-26 09:41  毛毛细雨  阅读(1124)  评论(0编辑  收藏  举报