Answers:
使用以下find
命令来shred
递归执行:
find <dir> -type f -exec shred {} \;
man shred
。
srm
从@Cookie的答案中至少会尝试解决此问题)。
-exec shred {} +
,使其更快,因为一丝一毫接受多个参数。
当心切碎!
从粉碎的手册中:
注意:请注意,切碎取决于一个非常重要的假设:文件系统会覆盖适当的数据。这是传统的处理方式,但是许多现代文件系统设计都不满足此假设。以下是在其上无效或不能保证在所有文件系统模式下均有效的文件系统示例:
日志结构或日志文件系统,例如AIX和Solaris(以及JFS,ReiserFS,XFS,Ext3等)提供的文件系统
写入冗余数据并即使某些写入失败也继续执行的文件系统,例如基于RAID的文件系统
制作快照的文件系统,例如Network Appliance的NFS服务器
缓存在临时位置的文件系统,例如NFS版本3客户端
压缩文件系统
在ext3文件系统的情况下,以上免责声明仅在data = journal模式下适用(因此,粉碎效果有限),该模式除了元数据外还记录文件数据。在data = ordered(默认)和data = writeback模式下,切碎都照常工作。可以通过将data = something选项添加到/ etc / fstab文件中特定文件系统的安装选项中来更改Ext3日志记录模式,如安装手册页(man mount)中所述。
此外,文件系统备份和远程镜像可能包含无法删除的文件副本,这将使以后可以恢复粉碎的文件。
解决方案:使用加密的文件系统,然后删除文件即可。
shred
和数据加密都可以防止从脱机存储设备(认为是盗窃或报警)中读取数据,而数据加密具有保护所有文件(不仅仅是(正确)删除的)文件的附加好处。挂载文件系统后,无论哪种情况,我们都将恢复到良好的unix权限,并且数据保护又成为操作系统安全和适当的系统管理的任务。在保护静态数据方面,前瞻性文件系统加密绝对不会比战略性使用差shred
!
请改用安全删除。
sudo apt-get install secure-delete
srm -r pathname
做完了 使用38次传递而不是3次传递,安全删除比切碎要多得多。要执行快速单次传递,请使用
srm -rfll pathname
fll使您的数据生成器的随机性降低,并且只有一次通过。
find
基于提议的方法具有更多好处,该方法将尝试通过在截断和取消链接之前重命名文件来擦除存储的文件名。
使用此堆栈溢出链接“ 在CentOS上永久安全地删除文件 ”,将答案与最知名的选项结合在一起以进行粉碎:
find <directory> -depth -type f -exec shred -v -n 1 -z -u {} \;
编辑:请注意,切碎单个文件的最佳答案会强制执行同步,该同步会在删除文件之前将更改写入媒体,因为某些或所有日志文件系统都有缓冲区。
如果可能,find命令应在运行的文件上调用一个shell脚本:
shred -v -n 1 /path/to/your/file #overwriting with random data
sync #forcing a sync of the buffers to the disk
shred -v -n 0 -z -u /path/to/your/file #overwriting with zeroes and remove the file
在每个文件上。
rm -rvf $1
到shell脚本的目录(其中$ 1是从{}
扩展中传入的/ path / to / your / file find... -exec
)
depth
在这里做什么?同样不确定尾随的反斜杠
find [dirname] -depth -type f -exec shred -n1 {} \;
这将对目录[dirname]中的文件执行深度优先搜索,然后shred -n1
在每个文件上运行命令。删除文件和/或目录时,-depth
默认情况下添加默认值是一个好习惯,即使在这种情况下并非必须如此。使用rm -rf
代替来运行此类命令时shred
,-depth
需要确保在尝试删除目录内容之前不会删除目录(从而导致错误)。
shred -N 1
,因为默认值是3次,是蛇油。一次就足够了,否则30次将不起作用。
shred
我找到的最彻底的方法(其中也包括目录删除)是find
调用一个脚本来拥有shred
:
此方法还可以正确处理文件名中带有空格的文件名。
首先- shred
脚本(我已经命名为我,dirShredder.sh
并将其存储在/root
目录中:
shred -v -n 1 "$1" #overwriting with random data
sync #forcing a sync of the buffers to the disk
shred -v -n 0 -z -u "$1" #overwriting with zeroes and remove the file
rm -rvf "$1" # call rm to remove the directories
然后,像这样调用脚本:
find /volume1/pathToShred/ -mindepth 1 -depth -exec /root/dirShredder.sh "{}" \;
确保将killit.sh
文件标记为可执行文件(chmod +x
),当然还要更新要切碎的目录的路径,以及dirShredder.sh
将其存储在其他位置的路径。
NOTA BENE- shred
写时复制文件系统(ZFS,BTRFS等)甚至日记文件系统都有问题。除了“加密文件系统”以外,没有找到一种真正公认的“最佳”方式来处理此问题,但是我不确定这事后的效果如何。
似乎可以得到的最接近的结果是,在切碎操作之后用随机数据覆盖驱动器上的所有空白空间(不是零,这似乎并不总是可靠的。)而且,SSD也可能有其他考虑事项(例如TRIM)。
我不在这里讨论这些,还有其他Stack答案(例如,在此问题中为@user unknown的答案),并且整个网络上都有涉及这些主题的大量讨论,因此如果需要这种安全级别的搜索,请进行搜索。