Saya mencoba memahami output dari dd
perintah. Saya mencoba
dd if=/dev/zero of=/dev/null bs=512 count=1
dan mendapat (seperti yang diharapkan):
1+0 records in
1+0 records out
512 bytes (512 B) copied, 2e-05 seconds, 26 MB/s
Namun ketika saya mencoba
dd if=/dev/random of=/dev/null bs=512 count=1
saya mendapatkan
0+1 records in
0+1 records out
128 bytes (128 B) copied, 0.00012 seconds, 1.1 MB/s
Mengapa hanya menyalin 128 byte?
linux
command-line
fo_x86
sumber
sumber
Jawaban:
Anda perlu menggunakan
/dev/urandom
, atau sumber acak "unblocking"./dev/random
menggunakan semacam kumpulan entropi untuk meningkatkan keacakan sumber bit. Metode ini hanya akan mengembalikan sebanyak bit / byte acak yang dapat dikembalikan berdasarkan keadaan kumpulan entropi pada saat itu, jadi jika generator nomor acak perangkat keras digunakan, ini kadang-kadang bisa berupa konstanta. Dari manual Linux :The
/dev/urandom
berkas terus menggunakan kembali kolam renang internal-adalah untuk menghasilkan angka selama Anda perlu. Efek samping dari ini adalah: jangan gunakan/dev/urandom
untuk keperluan kriptografi , karena kurang acak dari bit yang dihasilkan oleh/dev/random
. Lihat tautan manual di atas untuk detailnya.sumber
Karena membaca
/dev/random
hanya mengembalikan jumlah byte yang tersedia, Anda harus menentukan ukuran blok 1 . Dalam contoh Anda, Anda mengatur ukuran blok ke 512 yang gagal setelah pembacaan pertama.Oleh karena itu, argumen yang benar yang persis membaca 512 byte adalah:
Perhatikan bahwa perintah akan memblokir sampai ada cukup entropi dalam sistem untuk menghasilkan semua data. Begitulah cara
/dev/random
kerjanya. Jika Anda tidak ingin menunggu dan Anda baik-baik saja dengan sedikit entropi, gunakan/dev/urandom
saja. Dalam sebagian besar kasus, penggunaan/dev/urandom
lebih disukai.sumber
/dev/random
menjadi hampir tidak dapat digunakan, karena perintah dapat memakan waktu beberapa menit untuk menyelesaikannya. Juga, meskipunbs=512 count=1
tampaknya panggilan itu masih memblokir jika tidak ada byte sama sekali, benar? Alternatif untuk beralihbs
dancount
nilai adalah menggunakaniflag=fullblock
; yaitubs=512 count=1 iflag=fullblock
,.