Linux
為什麼用隨機文本創建文件比用零創建文件需要更長的時間?
我最近創建了一個測試文件,因為我想玩一下 logrotate。我正在尋找一種解決方案來創建我想要的任何大小的文件。我發現這是我的解決方案:
dd if=/dev/zero of=/path bs=1M count=30 status=progress
我還發現了這個:
dd if=/dev/urandom of=/path bs=1M count=30 status=progress
第一個範例創建一個包含零的文件,第二個範例包含隨機文本。這兩個文件的大小相同,均為 30M。
誰能解釋一下,為什麼用隨機文本創建這個文件比用零創建這個文件需要更長的時間?因為它們都具有相同大小的數據…
提前致謝 :)
從輸出中可以看出,這兩種方法都非常快。但是,數據來源之間存在明顯差異。
/dev/zero
是一個偽文件,它簡單地生成一個零流,這是一個相當簡單的任務/dev/urandom
實際上訪問核心的熵池以生成隨機數,因此與簡單地在整個過程中生成相同的固定值相比,具有更多的 I/O 和程序呼叫成本/dev/zero
。這就是為什麼讀取
/dev/urandom
永遠不會像讀取一樣快的原因/dev/zero
。如果你有興趣,維基百科上的文章/dev/random
可以作為進一步閱讀的起點。