linux上恢复误删(使用rm-rf命令)的文件或目录

本文介绍了在Linux系统中如何恢复误删除的文件。通过利用活动进程存在的特性,使用lsof命令来查找已删除但仍在使用的文件,并通过特定步骤将其恢复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux不像windows有那么显眼的回收站,不是简单的还原就可以了。linux删除文件还原可以分为两种情况,一种是删除以后在进程存在删除信息,一种是删除以后进程都找不到,只有借助于工具还原,这里分别检查介绍下。

误删除文件进程还在的情况。
        

这种一般是有活动的进程存在持续标准输入或输出,到时文件被删除后,进程PID还是存在。这也就是有些服务器删除一些文件但是磁盘不释放的原因。

1. lsof

文件刚刚被删除,想要恢复,先尝试lsof.

# lsof |grep data.file1

1.lsof |grep 'deleted' |  grep 'A.jar' 查看
    java      392798 305256   uu    4r      REG                8,3   32    91 /home/A.jar (deleted)
   
2.得到进程号
    lr-x------ 1 uu uu 64 Mar 2 15:50 2 -> /home/A.jar (deleted)

3. 切到目录:
    cd /proc/392798/fd
4. 复制文件
    cp 2 /tmp/A.jar

Linux 系统中,`rm -rf` 是一个非常强大的命令组合,用于**强制删除文件目录及其所有子目录和内容**。该命令结合了 `-r`(递归)和 `-f`(强制)两个选项的功能,能够快速且无提示地删除目标路径下的所有数据。 ### 使用方法 1. **删除指定目录及其内容** 例如,要删除名为 `example_dir` 的目录及其所有子目录文件,可以使用以下命令: ```bash rm -rf example_dir ``` 该命令不会提示确认操作,也不会在目标不存在时显示错误信息[^2]。 2. **删除单个文件多个文件** 虽然 `rm -rf` 主要用于删除目录,但也可以用来删除一个多个文件: ```bash rm -rf file1.txt file2.txt ``` 此命令会立即删除这些文件,不提供恢复机会[^3]。 3. **删除隐藏文件目录** 在某些情况下,可能需要删除包含隐藏文件目录。`rm -rf` 同样适用于这种情况: ```bash rm -rf .hidden_directory ``` --- ### 注意事项 1. **谨慎使用** `rm -rf` 命令具有极高的破坏性,一旦执行就无法撤销。务必确保目标路径正确无误,避免误删重要系统文件用户数据。例如,错误地输入: ```bash rm -rf / ``` 将导致整个系统文件删除,造成严重后果[^2]。 2. **不可恢复** 与 Windows 中的“回收站”不同,Linux使用 `rm -rf` 删除文件不会进入任何临时存储区域。如果未采取额外措施,这些文件将直接从磁盘上移除,恢复难度极大[^3]。 3. **备份数据** 在执行 `rm -rf` 操作前,建议先对目标目录进行备份,尤其是处理生产环境中的关键数据时。可以通过 `cp` `rsync` 命令创建副本: ```bash cp -r /path/to/dir /backup/ ``` 4. **替代方案** 如果希望在删除前获得确认提示,可以使用 `rm -r` 而不加 `-f` 参数,这样每次删除都会要求用户确认: ```bash rm -r directoryname ``` 这种方式更安全,适合不熟悉命令行操作的用户。 5. **文件系统影响** 即使成功删除文件,有时磁盘空间可能并未立即释放。这通常与文件系统的缓存机制有关。若发现删除后空间未减少,可尝试重启系统卸载并重新挂载相关分区[^5]。 6. **数据恢复可能性** 虽然 `rm -rf` 删除的数据难以恢复,但在某些情况下仍可通过专业工具(如 `extundelete`、`testdisk` 等)尝试恢复。前提是删除后没有新的数据写入覆盖原有磁盘区块[^4]。 --- ### 示例代码 以下是一个简单的脚本示例,展示如何在删除目录前进行确认,并在删除后输出日志信息: ```bash #!/bin/bash DIR="/path/to/directory" if [ -d "$DIR" ]; then echo "Deleting directory: $DIR" rm -rf "$DIR" if [ $? -eq 0 ]; then echo "Directory deleted successfully." else echo "Failed to delete directory." fi else echo "Directory does not exist." fi ``` 此脚本首先检查目标是否存在,再执行删除操作,并根据返回状态码判断是否成功。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值