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 truncate
możesz dd
zamiast tego użyć :
dd bs=1048576 seek=1 of=nullbytes count=0
(w przypadku niektórych dd
implementacji 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 dd
do 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
truncate
do tworzenia pustego pliku, który będzie używany jako wolumin wymiany… to nie zadziała! dd
Zamiast tego użyj w tym przypadku.
dd
mogę tworzyć rzadkie pliki, tak jak pokazałem.
bs=1kx1k
. Lub <&1 dd bs=1kx1k conv=sync,noerror count="$rpt" | cat >file
dosłownie napisać na dysk. Jednak nie w 100% na ile efektywność może zostać utracona w wymuszaniu błędu odczytu.