Как «обнулить» файл с 1 - PullRequest
1 голос
/ 04 июня 2010

Я часто буду создавать файл определенного размера с уловкой типа

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 или случайно?

Ответы [ 3 ]

2 голосов
/ 04 июня 2010

Для случайных данных почти во всех случаях используйте /dev/urandom. (Вы также можете использовать /dev/random, но это намного медленнее, потому что оно привязано к энтропии. urandom - это PRNG, который самоосемляется из random.)

Для ненулевого файла я бы предложил что-то вроде этого:

perl -e 'print chr(0xff) x 1000' > t

Очевидно, настроить 0xff и 1000 по вкусу.

1 голос
/ 05 июня 2010

Это примерно в четыре раза больше, чем dd if=/dev/zero, но лишь немного дольше, чем команда Perl в crazyscot's answer:

touch shred.out; yes $'\xff' | tr -d $'\n' | shred --random-source=/dev/stdin --size=1G --iterations=1 shred.out

Интересно, что подобная команда остановилась до того, как достигла 1 ГБ:

yes $'\xff' | tr -d $'\n' | dd if=/dev/stdin of=1gb.dd bs=1M count=1024
0 голосов
/ 04 июня 2010

Добавьте еще одну команду после вашего дд.

sed 's/0/1/g' file.txt

Он заменит все 0 на 1.

Возможно лучшее решение, но это должно сработать :-)

Edit: вам на самом деле придется передать результат из этого в новый файл или заменить тот же файл. sed печатает по умолчанию на экран (IIRC)

...