Linux系统之fuser命令的基本使用
- 一、fuser命令介绍
- 二、fuser命令使用帮助
- 2.1 help帮助信息
- 2.1 基本语法
- ①通用选项
- ②文件/设备相关选项
- ③网络相关选项
- ④进程操作选项
- ⑤其他选项
- 三、fuser命令的基本使用
- 3.1 查找挂载点的进程
- 3.2 查看指定设备进程信息
- 3.3 查找监听特定端口的进程
- 3.4 查找使用特定文件的进程
- 四、注意事项
一、fuser命令介绍
fuser
是一个在类 Unix 系统中非常有用的命令行工具,它可以帮助用户找出哪些进程正在使用指定的文件、文件系统或网络端口。这对于需要确定某个资源被哪个进程占用的情况特别有用,比如当你尝试卸载一个挂载点但系统提示设备忙时。对于阻塞特别设备,此命令列出了使用该设备上任何文件的进程。
二、fuser命令使用帮助
2.1 help帮助信息
命令行下的help帮助信息
[root@openEuler-test ~]# fuser --help
fuser: Invalid option --help
Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]
[-k [-i] [-SIGNAL]] NAME...
fuser -l
fuser -V
Show which processes use the named files, sockets, or filesystems.
-a,--all display unused files too
-i,--interactive ask before killing (ignored without -k)
-I,--inode use always inodes to compare files
-k,--kill kill processes accessing the named file
-l,--list-signals list available signal names
-m,--mount show all processes using the named filesystems or
block device
-M,--ismountpoint fulfill request only if NAME is a mount point
-n,--namespace SPACE search in this name space (file, udp, or tcp)
-s,--silent silent operation
-SIGNAL send this signal instead of SIGKILL
-u,--user display user IDs
-v,--verbose verbose output
-w,--writeonly kill only processes with write access
-V,--version display version information
-4,--ipv4 search IPv4 sockets only
-6,--ipv6 search IPv6 sockets only
udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]
2.1 基本语法
fuser [-<选项>] <文件/目录/端口号>
①通用选项
-a
,--all
: 显示命令行中指定的所有文件,包括那些当前没有被任何进程使用的文件。-s
,--silent
: 静默模式。如果没有进程使用指定的文件或端口,则不显示任何输出。-u
,--user
: 在输出中显示每个进程对应的用户名。-v
,--verbose
: 详细模式。提供更详细的输出信息。-V
,--version
: 显示fuser
命令的版本信息。
②文件/设备相关选项
-I
,--inode
: 总是使用 inode 号来比较文件,而不是路径名。-m
,--mount
: 显示所有正在使用指定挂载点或块设备的进程。-M
,--ismountpoint
: 只有当指定的名称是一个挂载点时才执行请求。-w
,--writeonly
: 只杀死具有写权限的进程。
③网络相关选项
-n
,--namespace SPACE
: 指定搜索的名字空间(可以是file
、udp
或tcp
)。-4
,--ipv4
: 仅搜索 IPv4 套接字。-6
,--ipv6
: 仅搜索 IPv6 套接字。
④进程操作选项
-k
,--kill
: 杀死访问指定文件或端口的所有进程。-i
,--interactive
: 在杀死进程之前询问用户(只有与-k
一起使用时有效)。-SIGNAL
: 发送这个信号代替默认的 SIGKILL 信号(只有与-k
一起使用时有效)。
⑤其他选项
-l
,--list-signals
: 列出可用的信号名称。NAME...
: 要检查的一个或多个文件名、目录名或网络端口号。
三、fuser命令的基本使用
3.1 查找挂载点的进程
查询当前的文件系统
[root@openEuler-test ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/openeuler-root ext4 69G 2.3G 63G 4% /
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 3.7G 0 3.7G 0% /dev/shm
tmpfs tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup
tmpfs tmpfs 1.5G 8.8M 1.5G 1% /run
tmpfs tmpfs 3.7G 0 3.7G 0% /tmp
/dev/mapper/openeuler-home ext4 512G 30M 486G 1% /home
/dev/sda2 ext4 974M 175M 732M 20% /boot
执行以下命令,这将列出所有正在使用/home 的进程 ID。
[root@openEuler-test ~]# fuser -mv /home
USER PID ACCESS COMMAND
/home: root kernel mount /home
3.2 查看指定设备进程信息
查看指定设备上的进程信息,包括进程的用户、进程ID、对设备的访问方式和命令,此处显示了/dev/mapper/openeuler-home设备上正在使用的进程信息。
[root@openEuler-test ~]# fuser -mv /dev/mapper/openeuler-home
USER PID ACCESS COMMAND
/dev/dm-2: root kernel mount /home
3.3 查找监听特定端口的进程
显示出所有正在监听 TCP 端口 80 的进程。
[root@openEuler-test ~]# fuser -n tcp 80
80/tcp: 1944 21789 21790 21797
3.4 查找使用特定文件的进程
在当前终端,监控日志文件。
tail -f /var/log/messages
新建一个终端,执行以下命令,列出所有正在使用/var/log/messages 的进程 ID。
[root@openEuler-test ~]# fuser -v /var/log/messages
USER PID ACCESS COMMAND
/var/log/messages: root 1071 F.... rsyslogd
root 25183 f.... tail
四、注意事项
- 谨慎使用
-k
选项:在使用-k
杀死进程之前,请确保你了解这些进程的功能及其对系统的影响。 - 结合
-i
选项确认操作:使用-i
选项可以在杀死进程前要求用户确认,以防止误操作。 - 仔细检查目标文件或端口:确保指定正确的文件、目录或网络端口号,避免影响不相关的资源。
- 理解命令输出:熟悉
fuser
的输出格式,以便正确解读哪些进程正在使用指定的资源。 - 利用
-u
查看用户名:使用-u
选项可以显示每个进程对应的用户名,帮助更好地识别和管理进程。 - 选择合适的命名空间:通过
-n
选项选择正确的命名空间(如file
,tcp
,udp
)来精确查找相关资源。 - 注意权限问题:运行
fuser
可能需要足够的权限,特别是在处理系统关键文件或端口时,可能需要 root 权限。 - 考虑使用
-s
静默模式:当不需要任何输出信息时,可以使用-s
选项来静默执行,适用于脚本中自动化处理。 - 避免滥用
-k
信号:除非必要,否则不要随意更改默认的 SIGKILL 信号,因为这可能导致进程无法正常关闭。 - 测试与验证:在生产环境中使用前,先在测试环境中进行充分测试,以确保命令的行为符合预期。