NXP芯片

rm-rf rm-rf 可怕不?来给 rm 加个垃圾桶

小编 2024-11-24 NXP芯片 23 0

rm-rf 可怕不?来给 rm 加个垃圾桶

人类犯错误是因为我们不是一个可编程设备,所以,在使用 rm 命令时要额外注意,不要在任何时候使用 rm -rf *。当你使用 rm 命令时,它会永久删除文件,不会像文件管理器那样将这些文件移动到 “垃圾箱”。

有时我们会将不应该删除的文件删除掉,所以当错误地删除了文件时该怎么办? 你必须看看恢复工具(Linux 中有很多数据恢复工具),但我们不知道是否能将它百分之百恢复,所以要如何解决这个问题?

我们最近发表了一篇关于 Trash-Cli 的文章,在评论部分,我们从用户 Eemil Lgz 那里获得了一个关于 saferm.sh 脚本的更新,它可以帮助我们将文件移动到“垃圾箱”而不是永久删除它们。

将文件移动到“垃圾桶”是一个好主意,当你无意中运行 rm 命令时,可以拯救你;但是很少有人会说这是一个坏习惯,如果你不注意“垃圾桶”,它可能会在一定的时间内被文件和文件夹堆积起来。在这种情况下,我建议你按照你的意愿去做一个定时任务。

这适用于服务器和桌面两种环境。 如果脚本检测到 GNOME 、KDE、Unity 或 LXDE 桌面环境(DE),则它将文件或文件夹安全地移动到默认垃圾箱 $HOME/.local/share/Trash/files,否则会在您的主目录中创建垃圾箱文件夹 $HOME/Trash。

saferm.sh 脚本托管在 Github 中,可以从仓库中克隆,也可以创建一个名为 saferm.sh 的文件并复制其上的代码。

$ git clone https://github.com/lagerspetz/linux-stuff

$ sudo mv linux-stuff/scripts/saferm.sh /bin

$ rm -Rf linux-stuff

在 .bashrc 文件中设置别名,

alias rm=saferm.sh

执行下面的命令使其生效,

$ source ~/.bashrc

一切就绪,现在你可以执行 rm 命令,自动将文件移动到”垃圾桶”,而不是永久删除它们。

测试一下,我们将删除一个名为 magi.txt 的文件,命令行明确的提醒了 Moving magi.txt to $HOME/.local/share/Trash/file。

$ rm -rf magi.txt

Moving magi.txt to /home/magi/.local/share/Trash/files

也可以通过 ls 命令或 trash-cli 进行验证。

$ ls -lh /home/magi/.local/share/Trash/files

Permissions Size User Date Modified Name

.rw-r--r-- 32 magi 11 Oct 16:24 magi.txt

或者我们可以通过文件管理器界面中查看相同的内容。

(LCTT 译注:原文此处混淆了部分 trash-cli 的内容,考虑到文章衔接和逻辑,此处略。)

要了解 saferm.sh 的其他选项,请查看帮助。

$ saferm.sh -h

This is saferm.sh 1.16. LXDE and Gnome3 detection.

Will ask to unsafe-delete instead of cross-fs move. Allows unsafe (regular rm) delete (ignores trashinfo).

Creates trash and trashinfo directories if they do not exist. Handles symbolic link deletion.

Does not complain about different user any more.

Usage: /path/to /saferm.sh [OPTIONS] [--] files and dirs to safely remove

OPTIONS:

-r allows recursively removing directories.

-f Allow deleting special files (devices, ...).

-u Unsafe mode, bypass trash and delete files permanently.

-v Verbose, prints more messages. Default in this version.

-q Quiet mode. Opposite of verbose.

「精华」rm-rf删除数据后还能恢复?

背景

之所以写这篇文章,是因为切身体会,刚入门的时候做了一次在mount的情况下直接rm -rf的操作,一下子删了700G的附件,那时候直接懵了,后来跟小伙伴连夜补救,还好项目还没上线,重新做了次数据迁移~

因为上面的原因,后来专门研究了rm -rf后怎么去补救?用虚拟机 做了以下的实验,采用的是extundelete 这套方案,切实可行。不过小伙伴们千万别拿生产环境去试,恢复不回来不要说认识我啊!

原理

在Linux下可以通过“ls -id”命令来查看某个文件或者目录的inode值,例如查看根目录的inode值,可以输入:

查看inode

在利用extundelete恢复文件时并不依赖特定文件格式,首先extundelete会通过文件系统的inode信息(根目录的inode一般为2)来获得当前文件系统下所有文件的信息,包括存在的和已经删除的文件,这些信息包括文件名和inode。

然后利用inode信息结合日志去查询该inode所在的block位置,包括直接块、间接块等信息。

最后利用dd命令将这些信息备份出来,从而恢复数据文件。

介绍extundelete

1.extundelete的文件恢复工具,该工具最给力的一点就是支持ext3/ext4双格式分区恢复。

2. 在实际线上恢复过程中,切勿将extundelete安装到你误删的文件所在硬盘,这样会有一定几率将需要恢复的数据彻底覆盖。

3. extundelete还是有很大的不完整性,基于整个磁盘的恢复功能较为强大,基于目录和文件的恢复还不够强大。

4. extundelete执行完毕后在当前目录生产一个RECOVERED_FILES目录,里面即是恢复出来的文件,还包括文件夹。

5.任何的文件恢复工具,在使用前,均要将要恢复的分区卸载或挂载为只读,防止数据被覆盖使用。

umount /dev/partition

mount -o remount,ro /dev/partition

安装extundelete

extundelete 主页:http://extundelete.sourceforge.net/

1、下载extundelete

下载地址:http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2 --0.2.4版本

[root@node1 opt]# cd extundelete/

[root@node1 extundelete]# ll

总用量 108

-rw-r--r-- 1 root root 108472 5月 24 05:04 extundelete-0.2.4.tar.bz2

[root@node1 extundelete]# tar -xvf extundelete-0.2.4.tar.bz2

extundelete-0.2.4/

extundelete-0.2.4/acinclude.m4

extundelete-0.2.4/missing

extundelete-0.2.4/autogen.sh

extundelete-0.2.4/aclocal.m4

extundelete-0.2.4/configure

extundelete-0.2.4/LICENSE

extundelete-0.2.4/README

extundelete-0.2.4/install-sh

extundelete-0.2.4/config.h.in

extundelete-0.2.4/src/

extundelete-0.2.4/src/extundelete.cc

extundelete-0.2.4/src/block.h

extundelete-0.2.4/src/kernel-jbd.h

extundelete-0.2.4/src/insertionops.cc

extundelete-0.2.4/src/block.c

extundelete-0.2.4/src/cli.cc

extundelete-0.2.4/src/extundelete-priv.h

extundelete-0.2.4/src/extundelete.h

extundelete-0.2.4/src/jfs_compat.h

extundelete-0.2.4/src/Makefile.in

extundelete-0.2.4/src/Makefile.am

extundelete-0.2.4/configure.ac

extundelete-0.2.4/depcomp

extundelete-0.2.4/Makefile.in

extundelete-0.2.4/Makefile.am

2、编译安装

[root@node1 extundelete]# cd extundelete-0.2.4

[root@node1 extundelete-0.2.4]# ll

总用量 356

-rw-r--r-- 1 1000 1000 3283 11月 3 2012 acinclude.m4

-rw-r--r-- 1 1000 1000 0 1月 4 2013 aclocal.m4

-rwxr-xr-x 1 1000 1000 372 12月 31 2012 autogen.sh

-rw-r--r-- 1 1000 1000 4780 1月 4 2013 config.h.in

-rwxr--r-- 1 1000 1000 231557 1月 4 2013 configure

-rw-r--r-- 1 1000 1000 5357 12月 31 2012 configure.ac

-rwxr-xr-x 1 1000 1000 20334 1月 4 2013 depcomp

-rwxr-xr-x 1 1000 1000 13998 1月 4 2013 install-sh

-rw-r--r-- 1 1000 1000 17987 11月 3 2012 LICENSE

-rw-r--r-- 1 1000 1000 916 12月 31 2012 Makefile.am

-rw-r--r-- 1 1000 1000 23644 1月 4 2013 Makefile.in

-rwxr-xr-x 1 1000 1000 10346 1月 4 2013 missing

-rw-r--r-- 1 1000 1000 1666 11月 3 2012 README

drwxr-xr-x 2 1000 1000 4096 1月 4 2013 src

[root@node1 extundelete-0.2.4]# ./configure --prefix=/usr/local/extundelete

Configuring extundelete 0.2.4

configure: error: Can't find ext2fs library

报错:configure: error: Can't find ext2fs library

由于extundelete依赖e2fsprogs,需要先安装e2fsprogs

[root@node1 extundelete-0.2.4]# yum -y install e2fsprogs e2fsprogs-devel

Loaded plugins: product-id, refresh-packagekit, security, subscription-manager

This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.

Setting up Install Process

Package e2fsprogs-1.41.12-18.el6.x86_64 already installed and latest version

......

安装e2fsprogs后再次configure 成功。

[root@node1 extundelete-0.2.4]# ./configure --prefix=/usr/local/extundelete && make && make install

Configuring extundelete 0.2.4

Writing generated files to disk

make -s all-recursive

Making all in src

extundelete.cc:571: 警告:未使用的参数‘flags’

Making install in src

/usr/bin/install -c extundelete '/usr/local/extundelete/bin'

3.查看工具版本

[root@node1 extundelete-0.2.4]# cd /usr/local/extundelete/bin/

[root@node1 bin]# ll

总用量 1160

-rwxr-xr-x 1 root root 1187055 5月 24 05:09 extundelete

[root@node1 bin]# ./extundelete -v

extundelete version 0.2.4

libext2fs version 1.41.12

Processor is little endian.

rm -rf 恢复实验

1. 创建文件系统

mkfs -t ext4 /dev/sdb1

2.查看文件系统类型

[root@node1 ~]# fdisk -l

Disk /dev/sda: 64.4 GB, 64424509440 bytes

255 heads, 63 sectors/track, 7832 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x000d2842

Device Boot Start End Blocks Id System

/dev/sda1 * 1 26 204800 83 Linux

Partition 1 does not end on cylinder boundary.

/dev/sda2 26 287 2097152 82 Linux swap / Solaris

Partition 2 does not end on cylinder boundary.

/dev/sda3 287 7833 60611584 83 Linux

[root@node1 ~]# blkid /dev/sda1

/dev/sda1: UUID="14e9f1ea-0326-47ef-8c35-325a6fb7186d" TYPE="ext4"

[root@node1 ~]# blkid /dev/sda3

/dev/sda3: UUID="faab01ae-3d46-49dd-932f-837c8f45e5c0" TYPE="ext4"

[root@node1 ~]# blkid /dev/sda2

/dev/sda2: UUID="48b4bdaa-460e-468e-9102-fc3d4d3ca69b" TYPE="swap"

也可以用下面方法查看

[root@node1 ~]# file -s /dev/sda1

/dev/sda1: Linux rev 1.0 ext4 filesystem data (needs journal recovery) (extents) (huge files)

[root@node1 ~]# file -s /dev/sda3

/dev/sda3: Linux rev 1.0 ext4 filesystem data (needs journal recovery) (extents) (large files) (huge files)

[root@node1 ~]# file -s /dev/sda2

/dev/sda2: Linux/i386 swap file (new style) 1 (4K pages) size 524287 pages

3.创建一个delete目录,并挂载到刚创建的文件系统上,并创建文件,然后删除文件

[root@node1 home]# mkdir delete

[root@node1 home]# mount /dev/sda1 /home/delete/

[root@node1 home]# mount

/dev/sda3 on / type ext4 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

tmpfs on /dev/shm type tmpfs (rw)

/dev/sda1 on /boot type ext4 (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

.host:/ on /mnt/hgfs type vmhgfs (rw,ttl=1)

vmware-vmblock on /var/run/vmblock-fuse type fuse.vmware-vmblock (rw,nosuid,nodev,default_permissions,allow_other)

/dev/sr0 on /mnt/cdrom type iso9660 (ro)

gvfs-fuse-daemon on /root/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev)

/dev/sda1 on /home/delete type ext4 (rw)

[root@node1 delete]# ll

总用量 28333

-rw-r--r--. 1 root root 105195 11月 11 2013 config-2.6.32-431.el6.x86_64

drwxr-xr-x. 3 root root 1024 2月 6 23:46 efi

drwxr-xr-x. 2 root root 1024 2月 7 00:37 grub

-rw-------. 1 root root 17533084 2月 9 21:43 initramfs-2.6.32-431.el6.x86_64.img

-rw-------. 1 root root 4505771 2月 7 00:38 initrd-2.6.32-431.el6.x86_64kdump.img

drwx------. 2 root root 12288 2月 6 23:37 lost+found

-rw-r--r--. 1 root root 193758 11月 11 2013 symvers-2.6.32-431.el6.x86_64.gz

-rw-r--r--. 1 root root 2518236 11月 11 2013 System.map-2.6.32-431.el6.x86_64

-rwxr-xr-x. 1 root root 4128944 11月 11 2013 vmlinuz-2.6.32-431.el6.x86_64

[root@node1 delete]# vi index.txt #添加数据

[root@node1 delete]# rm -rf index.txt

4.卸载分区

注意如果是/ 根目录的删了,把磁盘挂载到其他机器做恢复

[root@node1 bin]# fuser -m -v /home/delete/

[root@node1 bin]# fuser -k /home/delete/ <-- 结束使用某分区的进程树

[root@node1 bin]# umount /home/delete/ <-- 卸载分区

[root@zw_test_26_74 ~]# umount /dev/sdb3

5.使用extundelete查看分区上存在的文件

extundelete --inode 2 /dev/sdb2

# --inode 为查找某i节点中的内容,使用2则说明为搜索,如果需要进入目录搜索,只须要指定目录I节点即可

[root@node1 bin]# ./extundelete --inode 2 /dev/sda1

NOTICE: Extended attributes are not restored.

WARNING: EXT3_FEATURE_INCOMPAT_RECOVER is set.

The partition should be unmounted to undelete any files without further data loss.

If the partition is not currently mounted, this message indicates

it was improperly unmounted, and you should run fsck before continuing.

If you decide to continue, extundelete may overwrite some of the deleted

files and make recovering those files impossible. You should unmount the

file system and check it with fsck before using extundelete.

Would you like to continue? (y/n)

y

Loading filesystem metadata ... 25 groups loaded.

Group: 0

Contents of inode 2:

0000 | 6d 41 00 00 00 04 00 00 ae a4 24 59 97 a3 24 59 | mA........$Y..$Y

0010 | 97 a3 24 59 00 00 00 00 00 00 05 00 04 00 00 00 | ..$Y............

0020 | 00 00 00 00 1b 00 00 00 23 11 00 00 00 00 00 00 | ........#.......

0030 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................

0040 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................

0050 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................

0060 | 00 00 00 00 00 00 00 00 31 11 00 00 00 00 00 00 | ........1.......

0070 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................

Inode is Allocated

File mode: 16749

Low 16 bits of Owner Uid: 0

Size in bytes: 1024

Access time: 1495573678

Creation time: 1495573399

Modification time: 1495573399

Deletion Time: 0

Low 16 bits of Group Id: 0

Links count: 5

Blocks count: 4

File flags: 0

File version (for NFS): 0

File ACL: 4401

Directory ACL: 0

Fragment address: 0

Direct blocks: 4387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

Indirect block: 0

Double indirect block: 0

Triple indirect block: 0

File name | Inode number | Deleted status

. 2

.. 2

lost+found 11

grub 12

efi 19

.index.txt.swp 24 Deleted

.vmlinuz-2.6.32-431.el6.x86_64.hmac 14

System.map-2.6.32-431.el6.x86_64 15

config-2.6.32-431.el6.x86_64 16

symvers-2.6.32-431.el6.x86_64.gz 17

vmlinuz-2.6.32-431.el6.x86_64 18

initramfs-2.6.32-431.el6.x86_64.img 23

initrd-2.6.32-431.el6.x86_64kdump.img 39

index.txt 41 Deleted

上面标记为deleted的index.txt 就是误删的数据

6. 恢复

[root@node1 bin]# ./extundelete --restore-all /dev/sda1

NOTICE: Extended attributes are not restored.

WARNING: EXT3_FEATURE_INCOMPAT_RECOVER is set.

The partition should be unmounted to undelete any files without further data loss.

If the partition is not currently mounted, this message indicates

it was improperly unmounted, and you should run fsck before continuing.

If you decide to continue, extundelete may overwrite some of the deleted

files and make recovering those files impossible. You should unmount the

file system and check it with fsck before using extundelete.

Would you like to continue? (y/n)

y

Loading filesystem metadata ... 25 groups loaded.

Loading journal descriptors ... 89 descriptors loaded.

Searching for recoverable inodes in directory / ...

2 recoverable inodes found.

Looking through the directory structure for deleted files ...

Unable to restore inode 24 (.index.txt.swp): Space has been reallocated.

0 recoverable inodes still lost.

[root@node1 bin]# ll

总用量 1164

-rwxr-xr-x 1 root root 1187055 5月 24 05:09 extundelete

drwxr-xr-x 2 root root 4096 5月 24 05:18 RECOVERED_FILES

[root@node1 bin]# ll RECOVERED_FILES/

总用量 4

-rw-r--r-- 1 root root 47 5月 24 05:18 index.txt

可以看到index.txt 已经恢复到RECOVERED_FILES 目录下了。

总结

当发现某个分区的数据被误删除后,要做的第一件事是立刻卸载被误删除文件所在的分区,或者重新以只读方式挂载此分区。

这么做的原因其实很简单:删除一个文件,就是将文件inode节点中的扇区指针清除,同时,释放这些数据对应的数据块,而真实的文件还存留在磁盘分区中。但是这些被删除的文件不一定会一直存留在磁盘中,当这些释放的数据块被操作系统重新分配时,那些被删除的数据就会被覆盖。 因此,在数据误删除后,马上卸载文件所在分区可以降低数据块中数据被覆盖的风险,进而提高成功恢复数据的机率。

最后,祝大家永远不要用到extundelete!

觉得有用的就走波关注吧 ~

相关问答

linux中rm-rf是什么命令?

在Linux中,`rm-rf`是一个用于删除文件和目录的命令。`rm`是remove(删除)的缩写,`-r`或`-R`参数用于递归地处理目录,而`-f`参数用于强制删除文件或...

全景网中RM和RF分别是什么意思?

是不同图片的授权模式RM、RF、PE是3种不同的图片授权模式,由图片卖家设定,图片买家根据自己的需要来进行选择。这三种模式是图片行业在发展过程中,经过对图...

Rm和Rm-Rf分别什么意思啊,分不清_快账

Rm-Rf是市场组合的风险补偿率,风险溢价率Rm是市场组合的平均报酬率β(Rm-Rf)是风险附加率

财管中Rm和Rm-Rf分别指什么?表述上有什么区别?_会计学堂

[回答]rm就是市场组合收益率,rm减去rf就是平均股票风险报酬率

帮我解下方程组,谢谢了0.20=RF+1.1×(Rm-RF)0.18=RF+0.9×(R...

[最佳回答]0.20=RF+1.1×(Rm-RF)0.18=RF+0.9×(Rm-RF)上下相加0.2+0.18=RF+RF+(1.1+0.9)x(Rm-RF)0.38=2RF+...

RRmRF分别是什么意思?R-Rf/RM-RF求出来的结果是贝塔系数...

晚上好啊,Rf无风险报酬,Rm市场平均报酬,r某股票的报酬率R-Rf/RM-RF求出来的结果是贝塔系数,是的

请问老师有没有什么好办法在财管里面区别Rm和(Rm-Rf)感觉...

[回答](1)Rm的常见叫法包括:平均风险股票的要求收益率、平均风险股票的必要收益率、市场组合要求的收益率、股票市场的平均收益率、市场收益率、证券市场...

Rm和Rm-Rf是不是有很多名字啊?是什么呀?怎么区分?

不是指令,是控制台命令。命令的名字是rm,单词remove(删除)的缩写。r是给rm加入递归(recursion)特性,也就是目标为文件夹时删除文件夹下所有数据。f给rm加入...

财务管理,内在市净率,股权资本成本这边不懂,为什么rm-rf=5%?

这就是资本资产定价模型公式,某公司股票的必要报酬率=无风险利率+贝塔系数×(平均证券市场的收益率-无风险利率)。rm-rf即平均证券市场的收益率-无风险利率=平...

允许rm-rf/这样的命令是不是linux/bash的缺陷?

这个bash其实有相关保护的,现在主流的发行版Linux都要加上--no-preserve参数(记不太清)Windows中也可以绕过保护机制强制弹出C:并执行格式化。但是rm-rf/可...

猜你喜欢