我经常会使用类似的技巧创建一个特定大小的文件
dd if=/dev/zero of=1gb.dd bs=1M count=1024
或者甚至
dd if=/dev/urandom of=1gb.dd bs=1M count=1024
dd if=/dev/random of=1gb.dd bs=1M count=1024
但是如果我想得到所有的 1 而不是 0 或随机的呢?
对于随机数据,几乎在所有情况下都使用/dev/urandom
. (您也可以使用/dev/random
,但这要慢得多,因为它是熵绑定的。urandom
是一个 PRNG,它从 自我种子random
。)
对于非零文件,我建议如下:
perl -e 'print chr(0xff) x 1000' > t
显然,自定义 0xff 和 1000 来品尝。
这大约需要 4 倍的时间,但只比crazyscot 的回答dd if=/dev/zero
中的 Perl 命令稍长一点:
touch shred.out; yes $'\xff' | tr -d $'\n' | shred --random-source=/dev/stdin --size=1G --iterations=1 shred.out
有趣的是,这个类似的命令在达到 1 GB 之前就停止了:
yes $'\xff' | tr -d $'\n' | dd if=/dev/stdin of=1gb.dd bs=1M count=1024
在 dd 之后添加另一个命令。
sed 's/0/1/g' file.txt
它将用 1 替换所有 0。
可能是一个更好的解决方案,但这应该工作:-)
编辑:您实际上必须将结果通过管道传输到新文件或替换同一文件。sed 默认打印到屏幕 (IIRC)