Bagaimana saya bisa mengisi file dengan data acak?

124

Bagaimana saya bisa membuat file baru dan mengisinya dengan data acak 1 Gigabyte? Saya perlu ini untuk menguji beberapa perangkat lunak.

Saya lebih suka menggunakan /dev/randomatau /dev/urandom.

Stefan Lasiewski
sumber
74
Buka vibersama vi -w randomfiledan tanyakan pada seseorang yang belum pernah vikeluar dari program. ;)
Wildcard
1
Baru saja menyukai komentar di atas dari pos Facebook! facebook.com/ProgrammersCreateLife/photos/a.241809332534619/…
Parixit

Jawaban:

171

Di sebagian besar unices:

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

Jika Anda headtidak memahami Gsufiks, Anda bisa menentukan ukuran dalam byte:

head -c 1073741824 </dev/urandom >myfile

Jika Anda headtidak memahami -copsi (ini umum tetapi bukan POSIX; Anda mungkin memiliki OpenBSD):

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

Jangan gunakan /dev/randomdi Linux, gunakan /dev/urandom.

Gilles
sumber
1
Untuk apa nilainya, headtidak mengerti -cpada mesin Solaris 10 saya.
rahmu
2
Menarik yang headbisa membaca /dev/urandom, tetapi tailtidak bisa.
Stefan Lasiewski
22
@StefanLasiewski tailpertama kali mencoba untuk pergi ke akhir file input, yang membutuhkan waktu lama (secara harfiah).
Gilles
Ah, seperti 'tail / dev / infinity`, jika ada perangkat seperti itu.
Stefan Lasiewski
3
@StefanLasiewski Anda juga memilikinya /dev/zero, jika Anda tidak suka variasi.
Gilles
35

Dengan asumsi bahwa data pseudo-acak sudah cukup, dd if=/dev/urandom of=target-file bs=1M count=1000akan melakukan apa yang Anda inginkan.

dd (1) akan membaca blok data dari file input dan menulisnya ke file output. Bahasa command line sedikit aneh, tetapi itu adalah salah satu alat yang sangat berguna layak menguasai dasar-dasar.

Dalam hal ini ifadalah file input, file ofoutput, bsadalah "ukuran blok" - dan saya menggunakan ekstensi GNU untuk mengatur ukuran lebih nyaman. (Anda juga dapat menggunakan 1048576 jika Anda ddtidak memiliki ekstensi GNU.) countAdalah jumlah blok untuk membaca ifdan menulis of.

/dev/urandomadalah pilihan yang lebih baik daripada /dev/randomkarena, di Linux, itu akan kembali ke data pseudo-acak yang kuat daripada memblokir ketika data yang benar-benar acak habis.

Anda mungkin juga ingin melihat http://www.random.org/ sebagai jalur lain untuk mendapatkan beberapa data acak tanpa harus membuatnya sendiri.

Daniel Pittman
sumber
3
Catatan - spesifikasi unit seperti 1Mtidak tersedia di setiap ddvarian standar . Jika versi Anda ddterpengaruh, gunakan bs=1048576.
Chris Down
4
Perintah contoh akan membuat file dengan jumlah 1.000.000 blok masing-masing berukuran 1 MB. Itu sekitar 1 TB (1M x 1MB), bukan 1 GB (yang akan menjadi 1K x 1MB). Sebagai tambahan, sampai batas tertentu, meningkatkan ukuran blok dan mengurangi jumlah blok cenderung menghasilkan throughput yang lebih baik untuk sejumlah data output tertentu.
CVn
2
while true;do head /dev/urandom | tr -dc A-Za-z0-9;done | head -c 5000K | tee  5000kb

Gunakan ini untuk menghasilkan data karakter acak 5MB. Jika Anda membutuhkan ukuran yang berbeda, ubah -cnilai head, ubah nama file outfile, jalankan dan tunggu sampai eksekusi selesai.

James Jithin
sumber