Linux常见设备

1. 使用 lsof 命令(推荐)

lsof(List Open Files)可以列出所有打开的文件和设备的进程信息。

语法:

bash

sudo lsof /dev/<设备名> # 查看特定设备

sudo lsof <挂载点> # 查看挂载目录

示例:

bash

sudo lsof /dev/sdb1 # 查看谁在使用 /dev/sdb1

sudo lsof /mnt/usb # 查看谁在访问 /mnt/usb

输出示例:

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

bash 1234 root cwd DIR 8,17 4096 2 /mnt/usb

vim 5678 user 4u REG 8,17 1024 3 /mnt/usb/file.txt

COMMAND:进程名(如 bash、vim)。

PID:进程 ID,可以用 kill -9 结束进程。

USER:运行该进程的用户。

FD:文件描述符(cwd=当前工作目录,mem=内存映射文件等)。

2. 使用 fuser 命令

fuser 可以显示正在使用某个设备或挂载点的进程 PID。

语法:

bash

sudo fuser -v /dev/<设备名> # 查看设备

sudo fuser -v <挂载点> # 查看挂载目录

sudo fuser -vm /mnt/usb # 显示详细信息

示例:

bash

sudo fuser -v /dev/sdb1

sudo fuser -vm /mnt/usb

输出示例:

USER PID ACCESS COMMAND

/mnt/usb: root kernel mount /mnt/usb

alice 1234 ..c.. bash

ACCESS 列:

c:当前目录在该挂载点。

f:打开的文件在该挂载点。

m:内存映射文件(如 lib 库或 mmap 文件)。

结束占用进程

bash

sudo fuser -km /mnt/usb # 强制结束所有占用 /mnt/usb 的进程

3. 使用 lsblk + lsof 结合

如果想查看所有挂载的设备及其占用情况:

bash

lsblk # 查看块设备

sudo lsof /dev/sdb1 # 查看特定设备的进程

4. 特殊情况:umount 失败时如何查找进程

如果 umount 报错 target is busy,可以:

bash

sudo umount -l /mnt/usb # 延迟卸载(lazy unmount),等设备不再使用时自动卸载

或者:

bash

sudo lsof +f -- /mnt/usb # 强制检查挂载点

sudo fuser -vm /mnt/usb # 查看占用进程

5. 检查内核模块占用的设备

如果是内核模块(如 nfsd、mdadm)占用设备,可以:

bash

dmesg | grep <设备名> # 查看内核日志

lsmod | grep nfs # 查看是否 NFS 相关模块占用

总结

方法命令适用场景lsofsudo lsof /dev/sdb1查看具体哪个进程打开了设备文件fusersudo fuser -vm /mnt/usb快速查看占用进程并结束umount -lsudo umount -l /mnt/usb延迟卸载,避免 device is busylsblk + lsoflsblk + lsof结合查看块设备和进程

如果设备被占用,可以:

结束进程:kill -9 或 fuser -km。

延迟卸载:umount -l。

检查内核模块:dmesg 或 lsmod

Copyright © 2022 历届世界杯_世界杯篮球 - cnfznx.com All Rights Reserved.