Jak zapełnić plik losowymi danymi?

124

Jak mogę utworzyć nowy plik i wypełnić go losowymi danymi o wartości 1 gigabajta? Potrzebuję tego do przetestowania oprogramowania.

Wolałbym użyć /dev/randomlub /dev/urandom.

Stefan Lasiewski
źródło
74
Otwórz viz vi -w randomfilei poprosić kogoś, kto nigdy nie widział vi, aby wyjść z programu. ;)
Wildcard,
1
Właśnie polubiłem powyższy komentarz z posta na Facebooku! facebook.com/ProgrammersCreateLife/photos/a.241809332534619/…
Parixit

Odpowiedzi:

171

W większości jednorożców:

head -c 1G </dev/urandom >myfile

Jeśli headnie rozumiesz Gprzyrostka, możesz podać rozmiar w bajtach:

head -c 1073741824 </dev/urandom >myfile

Jeśli headnie rozumiesz tej -copcji (jest to powszechne, ale nie POSIX; prawdopodobnie masz OpenBSD):

dd bs=1024 count=1048576 </dev/urandom >myfile

Nie używaj /dev/randomw systemie Linux, użyj /dev/urandom.

Gilles
źródło
1
Jeśli chodzi o to, co jest warte, headnie rozumiem -cna moim komputerze z systemem Solaris 10.
rahmu
2
Interesujące, że headmożna przeczytać /dev/urandom, ale tailnie można.
Stefan Lasiewski
21
@StefanLasiewski tailnajpierw próbuje przejść do końca pliku wejściowego, co trwa wiecznie (dosłownie).
Gilles
Ach, jak „tail / dev / infinity”, jeśli istnieje takie urządzenie.
Stefan Lasiewski
3
@StefanLasiewski Masz /dev/zerorównież, jeśli nie lubisz różnorodności.
Gilles
35

Zakładając, że dane pseudolosowe są wystarczające, dd if=/dev/urandom of=target-file bs=1M count=1000zrobisz to, co chcesz.

dd (1) odczytuje bloki danych z pliku wejściowego i zapisuje je do pliku wyjściowego. Język wiersza poleceń jest nieco dziwaczny, ale jest to jedno z tych naprawdę przydatnych narzędzi, które warto opanować.

W tym przypadku ifplik wejściowy, plik ofwyjściowy, bsma „rozmiar bloku” - i użyłem rozszerzenia GNU, aby ustawić wygodniej rozmiar. (Możesz również użyć 1048576, jeśli ddnie masz rozszerzenia GNU.) countTo liczba bloków do odczytu ifi zapisu of.

/dev/urandomjest lepszym wyborem niż /dev/randomw Linuksie, ponieważ powróci do silnych pseudolosowych danych zamiast blokować, gdy wyczerpią się prawdziwie losowe dane.

Możesz także spojrzeć na http://www.random.org/ jako kolejną ścieżkę do zdobywania losowych danych bez konieczności ich generowania.

Daniel Pittman
źródło
3
Uwaga - specyfikacje jednostek, takie jak, 1Mnie są dostępne w każdym standardowym ddwariancie. Jeśli dotyczy to Twojej wersji dd, użyj bs=1048576.
Chris Down,
4
Przykładowe polecenie utworzy plik z liczbą 1 000 000 bloków o rozmiarze 1 MB. To około 1 TB (1 M x 1 MB), a nie 1 GB (co byłoby 1 K x 1 MB). Nawiasem mówiąc, do pewnego momentu, zwiększenie rozmiaru bloku i zmniejszenie liczby bloków zwykle prowadzi do lepszej przepustowości dla danej ilości danych wyjściowych.
CVn
2
while true;do head /dev/urandom | tr -dc A-Za-z0-9;done | head -c 5000K | tee  5000kb

Wykorzystano go do wygenerowania 5 MB danych losowych znaków. Jeśli potrzebujesz innego rozmiaru, zmień -cwartość head, zmień nazwę pliku wyjściowego, uruchom i poczekaj, aż wykonanie się zakończy.

James Jithin
źródło