销毁数据的方式分为擦除、消除、清除、销毁级别。我们日常用的rm命令相当于是擦除,执行了删除操作,数据实际上还是存在磁盘上的。shred是一条终端命令,重复覆盖指定的文件,以使即使非常昂贵的硬件探测也难以恢复数据。shred命令删除一个文件之后,文件中的数据会被多次随机覆写,相当于执行的是清除级别的销毁数据操作。shred命令执行后文件系统会在原来的位置覆盖指定的数据。传统的文件系统符合此条件,但许多现代的文件系统都不符合条件。以下是会令shred 无效或不担保一定有效的文件系统的。比如有冗余镜像的Raid系统;不时进行快照记录的文件系统,像Network Applicance 的NFS 服务器等。shred命令只能清除文件,不能清除目录。博文实验环境:
[bdsc@s142 ~]$ shred --help
Usage: shred [OPTION]… FILE…
…
[bdsc@s142 ~]$ shred --version
shred (GNU coreutils) 8.22
Copyright © 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Colin Plumb.
直接执行shred命令,静默状态下执行3次覆盖写的操作,没有任何输出,执行完成后文件还存在,但是你们的数据已经被覆盖多次,查看文件显示内容是乱码。
[bdsc@s142 ~]$ echo “This is a test about shred” > hi.txt
[bdsc@s142 ~]$ cat hi.txt
This is a test about shred
[bdsc@s142 ~]$ shred hi.txt
[bdsc@s142 ~]$ cat hi.txt
\6)z^/߆*fH-A;=R맭bRq\j-UDpϯرhTﳡ
…
我们可以使用-n指定覆盖次数,可以使用-v参数显示程序执行的详细信息。我们可以看到当同时粉碎多个文件的时候实际运行是逐个文件执行的,执行覆盖使用的字符是随机、0或者F。
[bdsc@s142 ~]$ shred -v -n 5 hi.txt hello.txt
shred: hi.txt: pass 1/5 (random)…
shred: hi.txt: pass 2/5 (ffffff)…
shred: hi.txt: pass 3/5 (random)…
shred: hi.txt: pass 4/5 (000000)…
shred: hi.txt: pass 5/5 (random)…
shred: hello.txt: pass 1/5 (random)…
shred: hello.txt: pass 2/5 (000000)…
shred: hello.txt: pass 3/5 (random)…
shred: hello.txt: pass 4/5 (ffffff)…
shred: hello.txt: pass 5/5 (random)…
使用-z参数在执行默认或者指定粉碎次数后最后执行一次0字符覆盖操作。这样去查看文件的时候显示是空文件,可以起到隐藏了执行shred操作的作用。
[bdsc@s142 ~]$ shred -v -z hi.txt
shred: hi.txt: pass 1/4 (random)…
shred: hi.txt: pass 2/4 (random)…
shred: hi.txt: pass 3/4 (random)…
shred: hi.txt: pass 4/4 (000000)…
[bdsc@s142 ~]$ cat hi.txt
执行粉碎文件时可以指定使用另外文件中的随机字节,对指定文件大小有要求,太小的话无法满足取出指定次数的随机字节要求。
[bdsc@s142 ~]$ shred -v -n 6 --random-source=jumpserver.tar.gz hello.txt
shred: hello.txt: pass 1/6 (random)…
shred: hello.txt: pass 2/6 (555555)…
shred: hello.txt: pass 3/6 (aaaaaa)…
shred: hello.txt: pass 4/6 (ffffff)…
shred: hello.txt: pass 5/6 (000000)…
shred: hello.txt: pass 6/6 (random)…
shred命令执行时加上-u参数就是完整的清除操作,执行了此操作后被删除的文件均无法恢复。
[bdsc@s142 ~]$ shred -v -u jumpserver.tar.gz
shred: jumpserver.tar.gz: pass 1/3 (random)…
shred: jumpserver.tar.gz: pass 2/3 (random)…
shred: jumpserver.tar.gz: pass 3/3 (random)…
shred: jumpserver.tar.gz: removing
shred: jumpserver.tar.gz: renamed to 00000000000000000
shred: 00000000000000000: renamed to 0000000000000000
shred: 0000000000000000: renamed to 000000000000000
shred: 000000000000000: renamed to 00000000000000
shred: 00000000000000: renamed to 0000000000000
shred: 0000000000000: renamed to 000000000000
shred: 000000000000: renamed to 00000000000
shred: 00000000000: renamed to 0000000000
shred: 0000000000: renamed to 000000000
shred: 000000000: renamed to 00000000
shred: 00000000: renamed to 0000000
shred: 0000000: renamed to 000000
shred: 000000: renamed to 00000
shred: 00000: renamed to 0000
shred: 0000: renamed to 000
shred: 000: renamed to 00
shred: 00: renamed to 0
shred: jumpserver.tar.gz: removed
[bdsc@s142 ~]$ ll
total 0
用法:shred [OPTION]… FILE…
参数 | 参数说明 |
---|---|
-f, --force | 必要时修改权限以使目标可写 |
-n, --iterations=N | 覆盖N 次(默认3次) |
–random-source=file | 从指定文件中取出随机字节 |
-s, --size | 粉碎数据为指定字节的碎片(单位K,M,G) |
-u, --remove | 覆盖后截断并删除文件 |
-v, --verbose | 显示命令执行详细信息 |
-x, --exact | 不要将文件大小四舍五入到下一个完整块 |
-z, --zero | 添加最后一个零覆盖以隐藏清除动作 |
–help | 获取命令帮助 |
–version | 显示版本信息 |