ACCESSfuser 和 lsof

FUSER

fuser功能
fuser
可以来得出近年来哪位程序在利用磁盘上的某部文件、挂载点、甚至网络端口,并交给程序进程的详细新闻.

fuser展现应用指定文件或者文件系统的历程ID.默认意况下每个文件名背后跟一个字母代表访问类型。

走访类型如下:
c 代表当前目录
e 将此文件作为程序的可进行对象使用

f 打开的文本。默认不出示。
F 打开的文书,用于写操作。默认不展现。

r 根目录。
m 映射文件或者共享库。

s
将此文件作为共享库(或其他可装载对象)使用
当指定的文件没有被访问,或者出现谬误的时候,fuser会重回非零。
为了查看使用tcp和udp套接字的进程,需要-n选项并点名名称空间。默认IpV4和IpV6都会展示。套接字可以是地面的要么是长距离的端口,和长距离的地方。所有的域是可选的,但是其前方的’,’必须存在。如下:
[lcl_port][,[rmt_host][,[rmt_port]]]
对于ip地址和port,名称和数字代表都足以动用。
fuser只把PID输出到正规输出,其他的都输出到正式错误输出。
常用选项
-a 突显所有命令行中指定的文书,默认情况下被访问的文本才会被展现。
-c 和-m一样,用于POSIX兼容。
-k 杀掉访问文件的过程。倘若没有点名-signal就会发送SIGKILL信号。
-i 杀掉进程在此以前询问用户,即便没有-k这一个选项会被忽视。
-l 列出装有已知的信号名称。
-m name
指定一个挂载文件系统上的公文或者被挂载的块设备(名称name)。这样所有访问这一个文件或者文件系统的长河都会被列出来。假设指定的是一个目录会自动转换成”name/”,并接纳具有挂载在非凡目录下边的文件系统。
-n space
指定一个见仁见智的命名空间(space).这里匡助不同的上空文件(文件名,此处默认)、tcp(本地tcp端口)、udp(本地udp端口)。对于端口,
可以指定端口号或者名称,倘若不会引起歧义那么可以应用简易表示的情势,例如:name/space
(即形如:80/tcp之类的代表)。
-s 静默格局,这时候-u,-v会被忽略。-a不可以和-s一起利用。
-signal
使用指定的信号,而不是用SIGKILL来杀掉进程。可以透过名称或者号码来表示信号(例如-HUP,-1),这多少个选项要和-k一起行使,否则会被忽略。
-u 在各样PID前面添加进程拥有者的用户名称。
-v
详细形式。输出似ps命令的出口,包含PID,USER,COMMAND等很多域,淌倘诺基本访问的那么PID为kernel.
-V 输出版本号。
-4
使用IPV4套接字,不可能和-6联合行使,只在-n的tcp和udp的命名存在时不被忽略。
-6
使用IPV6套接字,不能和-4同步使用,只在-n的tcp和udp的命名存在时不被忽略。

  • 重置所有的选项,把信号设置为SIGKILL. 

行使示例

显示应用某个文件的过程音讯
$ fuser -um /dev/sda2
/dev/sda2: 6378c(quietheart) 6534c(quietheart) 6628(quietheart)
6653c(quietheart) 7429c(quietheart) 7549c(quietheart)
7608c(quietheart)
那一个命令在umount的时候很有用,可以找到还有哪些用到这些设备了。

杀死打开readme文件的次序

$fuser
-m -k -i readme
此间,会在kill以前询问是不是确定。最好增长-v以便了然将要杀那么些进程。

查看这个程序行使tcp的80端口
$fuser -v -n tcp 80

$fuser
-v 80/tcp
fuser不同信号的施用
用 -l参数可以列出fuser所知的信号
# fuser -l
HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM
TERM
STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO
PWR SYS
UNUSED
fuser可以发送它已知的信号给访问的指定文件进程而代替-k参数默认发送的SIGKILL,例如:只是挂起经过,那么发送HUP信号就可以了
# fuser -v /root/install.log
用户 进程号 权限 命令
/root/install.log: root 3347 f…. tail
# fuser -k -SIGHUP /root/install.log
/root/install.log: 3347
# fuser -v /root/install.log

一,为何要采纳fuser?
   先说
fuser的作用,
  
fuser能识别出正在对某个文件或端口访问的过程
  
我们想转手,还有哪些命令具备那多少个效果?
  
没错,是lsof,
   我们后面讲过,
lsof可以找出正在对点名文件访问的经过,
  
那么它们两者之间有何区别?
  
fuser有一个特地的用法在于它可以一遍杀死那一个正在访问指定文件的历程
   

二,怎么样使用fuser?
 
  
1,怎么样用fuser得到正在采用指定文件的历程?
     用法: fuser
文件
    
表达:它会把正在选拔当前文件的进程id列出

     [root@localhost
lhd]# umount /
     umount: /:
device is busy.
           (In some
cases useful info about processes that use
            the
device is found by lsof(8) or fuser(1))
     [root@localhost
lhd]# fuser /
     
/:                       1rc     2rc     3rc     4rc     5rc     6rc    
7rc    80rc    82rc    84rc    85rc   153rc   157rc   158rc

                               160rc   165rc   168rc  203rc   204rc  
205rc   253rc   441rc   444rc   516rc   521rc   524rc   582rc  
583rc

                               584rc   633rc  1052rc  1392rc  1394rc 
1417rc  1597rc  1609rc  1617rc  1620rc  1683rc  1744rc  1783r 
1785rc

                               1788rc  1806r  1808r  1810rc  1811rc 
1812rc  1813rc  1814rc  1815rc  1848rc  1886rc  1899rc  1900rc 
2001rc

                               ……太多不一一列出

      说明:
     
那个经过号前面的rc是什么意思?
     
      c
将此文件作为当前目录使用。
      e
将此文件作为程序的可实施对象使用。
      r
将此文件作为根目录使用。
      s
将此文件作为共享库(或其他可装载对象)使用

  
2,如何列出过程的详细音信,而不只是过程id?
     用
-v参数即可
     表明: -v: 
含义是:verbose output,详细的输出信息
     例子:

     [root@dev ~]#
fuser /var/log
    
/var/log:             4196c
     [root@dev ~]#
fuser -v /var/log
     

                          USER        PID ACCESS COMMAND
    
/var/log:            root       4196 ..c.. bash

   
3,咋样列出过程所属的用户?
     用
-u参数即可
     表明: -u:
含义:display user IDs,突显用户id
    
     例子:
     [root@dev ~]#
fuser -u /var/log
    
/var/log:             4196c(root)
     表明: -n:
含义:得到正在访问某一端口的历程号,然后可以用kill命令杀死。

     [root@dev ~]#
fuser -un tcp 25
     
25/tcp:             4196(root)
    
4,咋样杀死所有正在访问指定文件的经过?
     用
-k参数即可
     说明: -k:含义:
kill processes accessing the named file

     例子:

     [root@localhost
lhd]# fuser -v /root/install.log

                          用户     进程号 权限   命令
    
/root/install.log:   root       3185 f…. tail
     [root@localhost
lhd]# fuser -k /root/install.log
    
/root/install.log:    3185
     [root@localhost
lhd]# fuser -v /root/install.log

     表达:
-k参数可以杀死所有的正在访问指定文件的经过,所以用来杀进程时分外有利
     表达之二:
fuser如何杀死的过程?
            
它发送的是其一信号:SIGKILL

三,多学一些知识

   
1,fuser能够列出它所知的信号:
     用
-l参数即可
    
     例子:
     [root@dev ~]#
fuser -l
     HUP INT QUIT ILL
TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM
     STKFLT CHLD CONT
STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
     UNUSED

   
2,fuser可以发送它已知的信号给访问的指定文件进程而代表-k参数默认发送的SIGKILL
     
例如:只是挂起经过,那么发送HUP信号就足以了
    
      例子:
     
[root@localhost lhd]# fuser -v /root/install.log

                           用户     进程号 权限   命令
     
/root/install.log:   root       3347 f…. tail
     
[root@localhost lhd]# fuser -k -SIGHUP /root/install.log
     
/root/install.log:    3347
     
[root@localhost lhd]# fuser -v /root/install.log

LSOF

lsof 拥有更多的意义
# lsof -i 看系统中有哪些开放的端口,哪些过程、用户在应用它们,比
netstat -lptu 的出口详细。

# lsof -i 4  查看IPv4类型的经过
COMMAND    PID        USER   FD   TYPE DEVICE SIZE NODE NAME
exim4     2213 Debian-exim    4u  IPv4   4844       TCP *:smtp
(LISTEN)
dhclient3 2306        root    4u  IPv4   4555       UDP *:bootpc

# lsof -i 6  查看IPv6类型的长河
COMMAND  PID        USER   FD   TYPE DEVICE SIZE NODE NAME
exim4   2213 Debian-exim    3u  IPv6   4820       TCP *:smtp (LISTEN)

# lsof -i @192.168.1.2  查看与某个具体的IP相关联的进程
COMMAND  PID USER   FD   TYPE DEVICE SIZE NODE NAME
amule   3620 root   16u  IPv4  11925       TCP
192.168.1.2:42556->77.247.178.244:4242 (ESTABLISHED)
amule   3620 root   28u  IPv4  11952       TCP
192.168.1.2:49915->118-166-47-24.dynamic.hinet.net:5140
(ESTABLISHED)

# lsof -p 5670 查看PID为5670的历程打开的文书。

相关文章