Wiem, jak utworzyć pusty plik:
touch /var/tmp/nullbytes
ale jak mogę utworzyć plik 1 MB, który zawiera tylko nullbytes w linii poleceń za pomocą bash?
Wiem, jak utworzyć pusty plik:
touch /var/tmp/nullbytes
ale jak mogę utworzyć plik 1 MB, który zawiera tylko nullbytes w linii poleceń za pomocą bash?
Odpowiedzi:
Z GNU truncate:
truncate -s 1M nullbytes
(zakładając, nullbytesże wcześniej nie istniał) utworzyłby rzadki plik o rozmiarze 1 MB. Jest to plik, który wygląda na wypełniony zerami, ale nie zajmuje miejsca na dysku.
Bez truncatemożesz ddzamiast tego użyć :
dd bs=1048576 seek=1 of=nullbytes count=0
(w przypadku niektórych ddimplementacji można zastąpić 1048576 1M)
Jeśli wolisz przydzielić miejsce na dysku , w systemie Linux i niektórych systemach plików możesz:
fallocate -l 1M nullbytes
Przydziela to miejsce bez faktycznego zapisywania danych na dysku (miejsce jest zarezerwowane, ale oznaczone jako niezainicjowane).
dd < /dev/zero bs=1048576 count=1 > nullbytes
Faktycznie zapisze zera na dysku. Jest to najmniej wydajne, ale jeśli chcesz, aby dyski obracały się podczas uzyskiwania dostępu do tego pliku, to ten, na który chcesz się wybrać.
Lub sposób @ mikeserv na podstęp dddo wygenerowania bajtów NUL:
dd bs=1048576 count=1 conv=sync,noerror 0> /dev/null > nullbytes
Alternatywa dla GNU head, która nie wymaga określania rozmiaru bloku (1M jest OK, ale na przykład 10G nie):
head -c 1M < /dev/zero > nullbytes
Lub, aby uzyskać pasek postępu:
pv -Ss 1M < /dev/zero > nullbytes
truncatedo tworzenia pustego pliku, który będzie używany jako wolumin wymiany… to nie zadziała! ddZamiast tego użyj w tym przypadku.
ddmogę tworzyć rzadkie pliki, tak jak pokazałem.
bs=1kx1k. Lub <&1 dd bs=1kx1k conv=sync,noerror count="$rpt" | cat >filedosłownie napisać na dysk. Jednak nie w 100% na ile efektywność może zostać utracona w wymuszaniu błędu odczytu.