免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1643 | 回复: 2
打印 上一主题 下一主题

[系统管理] fuser使用中的疑问 [复制链接]

论坛徽章:
5
程序设计版块每日发帖之星
日期:2016-04-15 06:20:00每日论坛发贴之星
日期:2016-04-15 06:20:0015-16赛季CBA联赛之八一
日期:2016-07-08 09:20:28操作系统版块每日发帖之星
日期:2016-08-03 06:20:002016科比退役纪念章
日期:2016-10-30 13:59:12
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-07-31 14:30 |只看该作者 |倒序浏览
当使用fuser的命令时,我使用:
fuser -mvk /mnt

1.如果/mnt是被挂载的目录,那么执行上面的命令可以kill掉所有的跟/mnt相关的进程
2.如果/mnt不是被挂载的目录,那么执行上面的命令就会把系统的所有进程都kill掉,如果有图形界面的话,就会退回到登录界面。

请问为了确保fuser能够杀掉挂载目录的相关进程,而同时如果另一个目录没有挂载,当使用fuser的时候不会对系统产生任何影响,是否应该使用 fuser -kv 目录名 ?或者fuser后面跟其它什么参数?

论坛徽章:
9
操作系统版块每日发帖之星
日期:2016-01-08 06:20:00操作系统版块每日发帖之星
日期:2016-01-28 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-17 17:50:32操作系统版块每日发帖之星
日期:2016-08-01 06:20:0015-16赛季CBA联赛之广东
日期:2016-08-01 16:01:57操作系统版块每日发帖之星
日期:2016-08-04 06:20:00IT运维版块每日发帖之星
日期:2016-08-07 06:20:00操作系统版块每日发帖之星
日期:2016-08-07 06:20:0015-16赛季CBA联赛之福建
日期:2017-03-07 17:14:27
2 [报告]
发表于 2016-08-01 09:39 |只看该作者
fuser -v    再根据实际情况杀你要杀的PID

求职 : Linux运维
论坛徽章:
203
拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:092015小元宵徽章
日期:2015-03-06 15:58:182015年亚洲杯之约旦
日期:2015-04-05 20:08:292015年亚洲杯之澳大利亚
日期:2015-04-09 09:25:552015年亚洲杯之约旦
日期:2015-04-10 17:34:102015年亚洲杯之巴勒斯坦
日期:2015-04-10 17:35:342015年亚洲杯之日本
日期:2015-04-16 16:28:552015年亚洲杯纪念徽章
日期:2015-04-27 23:29:17操作系统版块每日发帖之星
日期:2015-06-06 22:20:00操作系统版块每日发帖之星
日期:2015-06-09 22:20:00
3 [报告]
发表于 2016-08-02 00:12 |只看该作者
fuser命令学习
fuser:使用文件或者套节字来表示识别进程。我常用的他的两个功能:查看我需要的进程和我要杀死我查到的进程。
比如当你想umount光驱的时候,结果系统提示你设备正在使用或者正忙,可是你又找不到到底谁使用了他。这个时候fuser可派上用场了。
[root@lancy sbin]# eject
umount: /media/cdrom: device is busy
umount: /media/cdrom: device is busy
eject: unmount of `/media/cdrom' failed
[root@lancy sbin]# fuser /mnt/cdrom
/mnt/cdrom: 4561c 5382c
[root@lancy sbin]# ps -ef |egrep '(4561|5382)' |grep -v grep
root 4561 4227 0 20:13 pts/1 00:00:00 bash
root 5382 4561 0 21:42 pts/1 00:00:00 vim Autorun.inf
示例中,我想弹出光驱,系统告诉我设备忙着,于是采用fuser命令,参数是你文件或scoket,fuser将查出那些使用了他。
4561c,5382c表示目前用两个进程在占用着/mnt/cdrom,分别是4561,5382,进程ID后的字母表示占用资源的方式,有下面几种表示:
c 当前路径(current directory.)我的理解是表示这个资源的占用是以文件目录方式,也就是进进入了需要释放的资源的路径,这是最常用的资源占用方式。
e 正在运行可执行文件(executable being run.),比如运行了光盘上的某个程序
f 打开文件( open file),缺省模式下f忽略。所以上面的例子中,虽然是开打了光盘上的Autorun.inf文件,但是给出的标识是c,而不是f。
r root目录(root directory).没有明白什么意思,难道是说进入了/root这个特定目录?
m mmap文件或者共享库( mmap’ed file or shared library).这应该是说某个进程使用了你要释放的资源的某个共享文件。
其他字母见文章最后的表格

在查找的同时,你还可定指定一些参数,比如
-k 杀死这些正在访问这些文件的进程。除非使用-signal修改信号,否则将发送SIGKILL信号。
-i 交互模式
-l 列出所有已知的信号名称。
-n 空间,选择不同的名字空间,可是file,udp,tcp。默认是file,也就是文件。
-signal 指定发送的信号,而不是缺省的SIGKILL
-4 仅查询IPV4套接字
-6 仅查询IPV6套接字
- 重置所有的选项,将信息设回SIGKILL
再看下面的例子
[root@lancy sbin]# 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的威力:
[root@lancy sbin]# fuser -k /mnt/cdrom
/mnt/cdrom: 4561c 5382c
kill 5382: 没有那个进程
No automatic removal. Please use umount /media/cdrom

[root@lancy sbin]# eject

套节字方式的使用:
[root@lancy sbin]# fuser -4 -n tcp 3306
here: 3306
3306/tcp: 5595

[root@lancy sbin]# ps -ef |grep 5595 |grep -v grep
mysql 5595 5563 0 22:24 pts/0 00:00:00 /usr/libexec/mysqld --defaults-file=/etc/my.cnf --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-locking --socket=/var/lib/mysql/mysql.sock

[root@lancy sbin]# fuser -4 -n tcp 80
here: 80
80/tcp: 5685 5688 5689 5690 5691 5692 5693 5694 5695

List Open Files: lsof and fuser
The function of these commands is very similar. The goal is to determine what processes have certain files open. lsof is freeware and thus freely compilable under all Unixes. It is available by default under Linux only.
The main difference between lsof and fuser is that lsof takes both files/filesystems and PIDs as arguments whereas fuser only accepts files/filesystems.
lsof:
lsof stands for list open files. It lists information about files that are currently open by processes.
In the absence of any options, lsof lists all open files belonging to all active processes
To list all open files for login name ``abe'', or user ID 1234 you would use the -u option. To list files being used by process 456, process 123, or process 789, you would use the -p flag. Putting these criteria together, we would have a command that looks like this:
lsof -p 456,123,789 -u 1234,abe
The command to list all open files on device /dev/hd4, would look like this:
lsof /dev/hd4
To find the process that has /u/abe/foo open, use:
lsof /u/abe/foo
fuser:
fuser is more widely available (under AIX, HP-UX, IRIX, Linux, Solaris, Tru64 UNIX, and others) and can only be run as root. It displays the process ID numbers of processes using the specified files or file systems. In the default display mode, each file name is followed by a letter denoting the type of access (these codes differ from vendor to vendor):
a        if the process is using the file as its trace file in /proc (IRIX)
c        if the process is using the file as its current directory
e        if the process is using the file as the executable being run
f        if the process is using the file as an open file (Linux)
m        if the process is using the file as a mmaped or shared lib (Linux)
o        if the process is using the file as an open file (IRIX, Solaris, Tru64 UNIX))
p        if the process is using the file as the parent of its current directory (Tru64 UNIX)
r        if the process is using the file as root directory
s        if the process is using the file as a shared lib (AIX)
t        if the process is using the file as its text file (Solaris)
y        if the process is using the file as its controlling terminal (IRIX)
Here is an example of fuser running under Linux:
linux# /usr/sbin/fuser /
/: 1r 1c 2r 2c 3r 3c 4r 4c
252r 252c 275r 275c 286r 286c 300r 314r 328r 328c 342r
342c 356r 356c 374r 374c 385r 385c 396r 396c 411r 411c
412r 412c 413r 413c 414r 414c 415r 415c 416r 416c 417r
417c 418r 418c 419r 419c 420r 420c 455r 470r 470c 485r
485c 500r 500c 538r 538c 539r 539c 540r 540c 541r 541c
542r 542c 543r 543c 544r 544c 546r 546c 548r 548c 551r
551c 556r 569r 591r 597r 610r 612r 614r 614c 618r 626r
628r 636r 646r 7090r 7090c 7092r 7243r 7288r 7288c 7290r 7303r


fuser 和 lsof 可以用于系统安全检查。
用fuser查看哪些用户和进程在某些地方作什么:
fuser -cu /root 简略显示

fuser -muv /mnt3 分列显示
root@steven ~]# fuser -muv !$
fuser -muv /root
                     用户     进程号 权限   命令
/root:               root          1 .rce. (root)init
                     root          2 .rc.. (root)kthreadd
                     root          3 .rc.. (root)migration/0
                     root          4 .rc.. (root)ksoftirqd/0
                     root          5 .rc.. (root)stopper/0
   
                     root       1742 .rc.. (root)flush-8:16
                     root       1743 .rc.. (root)flush-8:0
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP