rm(remove的缩写)命令主要用于:
rm [选项] 文件...
| 选项 | 说明 |
|---|---|
| -f, --force | 强制删除,忽略不存在的文件和参数,不提示确认 |
| -i, --interactive | 交互式删除,删除前提示确认 |
| -I | 在删除超过3个文件或递归删除前提示一次确认 |
| -r, -R, --recursive | 递归删除目录及其内容 |
| -d, --dir | 删除空目录 |
| -v, --verbose | 详细模式,显示删除的文件 |
| --no-preserve-root | 不特殊对待根目录"/"(危险!) |
| --preserve-root | 不删除根目录"/"(默认) |
| --one-file-system | 递归删除时跳过不同文件系统的目录 |
| --help | 显示帮助信息 |
| --version | 显示版本信息 |
rm -rf / 或 rm -rf /*删除指定的文件:
rm file.txt
使用 -i 选项在删除前确认:
rm -i important.txt
rm: remove regular file 'important.txt'? y
一次删除多个文件:
rm file1.txt file2.txt file3.txt
使用通配符批量删除文件:
# 删除所有.txt文件
rm *.txt
# 删除所有临时文件
rm *.tmp
# 删除所有以a开头的文件
rm a*
使用 -r 选项删除目录及其内容:
rm -r directory_name
使用 -f 选项强制删除:
# 强制删除文件,不提示
rm -f file.txt
# 强制递归删除目录
rm -rf directory_name
使用 -v 选项显示删除的文件:
rm -v *.log
removed 'app.log'
removed 'error.log'
removed 'access.log'
使用 -d 选项删除空目录:
rm -d empty_directory
# 这将删除整个系统!
rm -rf /
# 这将删除根目录下的所有文件!
rm -rf /*
# 危险的通配符使用(如果在错误目录执行)
rm -rf *
清理系统临时文件:
# 清理当前用户的临时文件
rm -rf /tmp/myapp_*
# 清理日志文件
rm -f /var/log/myapp/*.log
清理开发项目中的生成文件:
# 清理编译生成的文件
rm -rf build/
rm -f *.o *.so *.a
# 清理Python缓存文件
rm -rf __pycache__/
rm -f *.pyc
清理用户缓存和临时数据:
# 清理浏览器缓存
rm -rf ~/.cache/mozilla/
rm -rf ~/.cache/google-chrome/
# 清理系统缓存
sudo rm -rf /var/cache/apt/archives/*
删除旧的备份文件:
# 保留最近7天的备份,删除更早的
find /backups -name "*.tar.gz" -mtime +7 -exec rm -f {} \;
在.bashrc中设置安全的rm别名:
# 在 ~/.bashrc 中添加
alias rm='rm -i'
alias rmdir='rmdir -i'
alias del='rm -i'
# 或者使用trash-cli
alias rm='trash-put'
实现简单的回收站机制:
#!/bin/bash
# 安全删除函数 - 添加到 ~/.bashrc
safe_rm() {
local trash_dir="$HOME/.local/trash"
mkdir -p "$trash_dir"
for file in "$@"; do
if [ -e "$file" ]; then
mv "$file" "$trash_dir/"
echo "已移动到回收站: $file"
else
echo "文件不存在: $file"
fi
done
}
# 设置别名
alias rm=safe_rm
创建安全的删除确认脚本:
#!/bin/bash
# safe_delete.sh - 安全删除脚本
confirm_delete() {
local target="$1"
echo "警告:您将要删除: $target"
echo -n "确认删除?(y/N): "
read -r response
case "$response" in
[yY][eE][sS]|[yY])
if [ -d "$target" ]; then
rm -rf "$target"
else
rm -f "$target"
fi
echo "已删除: $target"
;;
*)
echo "取消删除"
;;
esac
}
# 使用示例
for file in "$@"; do
confirm_delete "$file"
done
使用find命令定位并删除特定文件:
# 删除所有空文件
find . -type f -empty -delete
# 删除7天前的日志文件
find /var/log -name "*.log" -mtime +7 -exec rm -f {} \;
# 删除大于100MB的临时文件
find /tmp -type f -size +100M -exec rm -f {} \;
# 删除特定扩展名的文件
find . -name "*.tmp" -exec rm -f {} \;
创建完整的安全删除工具集:
#!/bin/bash
# rm_utils.sh - 安全删除工具库
# 备份后删除
backup_and_remove() {
local file="$1"
local backup_dir="${2:-$HOME/backups}"
mkdir -p "$backup_dir"
if [ -e "$file" ]; then
local backup_name="$(basename "$file").$(date +%Y%m%d_%H%M%S).bak"
cp -r "$file" "$backup_dir/$backup_name"
rm -rf "$file"
echo "已备份到: $backup_dir/$backup_name 并删除原文件"
else
echo "文件不存在: $file"
fi
}
# 安全递归删除
safe_recursive_rm() {
local target="$1"
if [ ! -e "$target" ]; then
echo "错误: 目标不存在: $target"
return 1
fi
echo "将要递归删除: $target"
echo "目录内容:"
if [ -d "$target" ]; then
find "$target" -type f | head -20
echo "... (可能还有更多文件)"
fi
echo -n "确认删除?(输入'DELETE'确认): "
read -r confirmation
if [ "$confirmation" = "DELETE" ]; then
rm -rf "$target"
echo "已删除: $target"
else
echo "取消删除"
fi
}
# 删除前预览
preview_rm() {
local pattern="$1"
echo "匹配的文件:"
ls -la $pattern 2>/dev/null || echo "无匹配文件"
echo -n "确认删除这些文件?(y/N): "
read -r response
if [[ "$response" =~ ^[Yy]$ ]]; then
rm -f $pattern
echo "删除完成"
else
echo "取消删除"
fi
}
记录所有删除操作以便审计:
#!/bin/bash
# logging_rm.sh - 带日志记录的删除
LOG_FILE="$HOME/.delete_log"
log_delete() {
local file="$1"
local user=$(whoami)
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
echo "[$timestamp] User: $user deleted: $file" >> "$LOG_FILE"
}
safe_rm_with_log() {
for file in "$@"; do
if [ -e "$file" ]; then
echo "将要删除: $file"
echo -n "确认?(y/N): "
read -r response
if [[ "$response" =~ ^[Yy]$ ]]; then
log_delete "$file"
rm -rf "$file"
echo "已删除: $file (操作已记录)"
else
echo "取消删除: $file"
fi
else
echo "文件不存在: $file"
fi
done
}
alias rm=safe_rm_with_log
| 工具 | 说明 | 安装命令 |
|---|---|---|
| trash-cli | 将文件移动到回收站而不是直接删除 | sudo apt install trash-cli |
| safe-rm | 防止意外删除重要文件和目录 | sudo apt install safe-rm |
| gvfs-trash | GNOME桌面环境的回收站工具 | 通常默认安装 |
| 问题 | 原因 | 解决方案 |
|---|---|---|
| "rm: cannot remove 'file': Permission denied" | 没有文件写权限 | 使用sudo或修改文件权限 |
| "rm: cannot remove 'dir': Is a directory" | 尝试删除目录但没有使用-r选项 | 使用rm -r或rmdir |
| "rm: cannot remove 'file': No such file or directory" | 文件不存在或路径错误 | 检查文件路径和名称 |
| 误删重要文件 | 操作失误 | 立即停止使用磁盘,尝试数据恢复工具 |
| 通配符意外匹配 | 通配符匹配了意外文件 | 使用ls命令先预览匹配的文件 |