2、文件被进程占用Device or resource busy
当文件或目录正在被某个进程使用时,rm删除会报错“Device or resource busy”,比如删除挂载的目录、正在被编辑的文件、正在运行的程序关联文件等。最典型的场景:删除U盘挂载目录时,U盘未卸载,就会提示无法删除。
查找占用进程:使用 lsof 文件名 或 fuser 文件名 查看哪个进程正在占用该文件。比如执行 lsof test.txt,会显示进程PID、进程名(如vim、nginx等)。
终止占用进程:若进程可终止,执行 kill -9 进程PID(-9强制终止,需确认进程无关紧要),终止后再执行rm删除。
卸载关联设备(针对挂载目录):若删除的是挂载目录,先执行 umount 挂载路径 卸载设备,再删除目录。比如删除/mnt/usb(U盘挂载目录),先 umount /mnt/usb,再rm -rf /mnt/usb。
提示:若无法终止进程(如系统核心进程),需先停止对应服务,再进行删除。
3、特殊字符文件、无法识别文件名
当文件名中包含特殊字符(如空格、、?、&、空格、中文符号等),直接执行rm命令会识别失败,比如文件名是“test file.txt”(含空格)、“testtxt”(含*),会提示“No such file or directory”。
用引号包裹文件名:将含特殊字符的文件名用双引号("")或单引号('')包裹,隔离特殊字符,比如 rm "test file.txt"、rm 'test*txt'。
转义字符:用反斜杠(\)对特殊字符进行转义,比如 rm test\ file.txt(转义空格)、rm test\*txt(转义)。
按inode删除(万能方法):若文件名特殊到无法识别,可通过inode号删除。先执行 ls -i 文件名 查看文件的inode号(比如inode号是12345),再执行 find . -inum 12345 -delete,即可删除对应文件(.表示当前目录,可替换为具体路径)。
4、文件系统只读Read-only file system
若文件所在的文件系统被挂载为只读模式,无论权限是否足够,rm删除都会报错“Read-only file system”,常见于U盘、移动硬盘、故障的硬盘分区。
查看挂载状态:执行 mount 查看文件系统的挂载信息,找到对应文件所在的分区(比如/dev/sdb1),查看挂载参数是否为“ro”(只读)。
重新挂载为可读写:执行 mount -o remount,rw 分区路径,将分区重新挂载为可读写模式。比如 mount -o remount,rw /dev/sdb1,之后再执行rm删除文件。
检查文件系统故障:若重新挂载失败,可能是文件系统损坏,需先执行 fsck 分区路径 修复故障(修复前建议备份数据),修复后再重新挂载、删除。
5、被锁定文件immutable属性(特殊保护)
Linux中部分文件会被设置immutable属性(不可变属性)即使是root用户,也无法直接rm删除,会提示“Operation not permitted”。这种属性通常用于保护系统核心文件,防止误删
查看文件属性:执行 lsattr 文件名 查看文件的特殊属性,若输出中包含“i”说明文件被设置了immutable属性“i”表示不可变
取消immutable属性:执行 chattr -i 文件名,取消不可变属性,之后再执行 rm 文件名 即可
若为目录:若目录被设置了immutable属性,需先取消目录及其子文件的属性,执行 chattr -R -i 目录名(-R递归处理子文件)再删除目录