Linux 隨機產生文字檔或二進制檔

本篇 ShengYu 介紹在 Linux 隨機產生文字檔或二進制檔的方法,以下內容包含了產生隨機的二進制檔,也有產生隨機內容的文字檔,甚至還有產生隨機內容的圖片檔。本方法除了在 Linux 下可用以外,在 macOS 下也適用唷!

為什麼要產生隨機內容而不是產生都是零的內容呢?例如:有時使用內容都是 0 的內容可能達不到我們測試的需求,比如我想要測試壓縮大檔案的時間,那麼使用都是零的內容檔案就會壓縮的非常快,因為檔案裡的內容都一樣嘛,這樣就反應不出真實的壓縮時間,那麼就會想要產生隨機內容。

以下 Linux 產生固定大小的隨機內容檔案介紹將分為這幾部份,

  • Linux 產生隨機內容的二進制
  • Linux 產生隨機內容的文字檔
  • Linux 產生隨機內容的圖片檔

那我們開始吧!

Linux 產生隨機內容的二進制

簡單示範一下用 dd 指令產生隨機內容的二進制 1MB 跟 2MB 檔案大小的例子,dd 指令在 Linux 與 macOS 下都可以使用,dd 的 bs 參數預設單位為 byte,

1
2
3
$ dd if=/dev/urandom of=1m.bin bs=1M count=1 # 1M
$ dd if=/dev/urandom of=2m.bin bs=1M count=2 # 2M
$ dd if=/dev/urandom of=3m.bin bs=1M count=3 # 3M

如果遇到 dd: invalid number: ‘1m’ 或者 dd: bs: illegal numeric value 這種錯誤訊息的話,就表示 bs 的單位有問題,我自己的經驗是 Ubuntu 下 bs 的單位不行用小寫 m,要用大寫 M。macOS 下 bs 的單位也是要用大寫 M,不行用小寫 m。

bs 要改用其他單位的話,例如 KB,

1
2
$ dd if=/dev/urandom of=random.bin bs=1k count=1 # 1K
$ dd if=/dev/urandom of=random.bin bs=512k count=1 # 512K

如果 bs 的單位遇到有問題,就大寫小寫交換試試看。

如果不要產生隨機的內容,而是要產生都是 0 的內容的話,只要將上述的 /dev/urandom 換成 /dev/zero 就可以產生都是零的內容了。

Linux 產生隨機內容的文字檔

以下示範一下產生隨機內容的文字檔,使用 base64 指令來將 /dev/urandom 產生的串流隨機內容編碼成文字,再搭配 head 指令取前 n bytes 資料。

1
2
3
4
$ base64 /dev/urandom | head -c 100 > random.txt
$ base64 /dev/urandom | head -c 1024 > 1k.txt
$ base64 /dev/urandom | head -c 1048567 > 1m.txt
$ base64 /dev/urandom | head -c "$((1024*1024))" > 1m.txt

把上述的例子裡的 /dev/urandom 改成 /dev/zero 就是填充 0 囉。

Linux 產生隨機內容的圖片檔

以下示範一下產生隨機內容的圖片檔,這邊需要搭配 convert 指令來產生圖片檔,
convert 指令在 Ubuntu 下可以用 sudo apt install imagemagick,convert 指令在 macOS 下可以用 brew install imagemagick 安裝。

以下示範產生 320x240 大小的隨機內容圖片檔,

1
2
$ mx=320;my=240;head -c "$((3*mx*my))" /dev/urandom | \
convert -depth 8 -size "${mx}x${my}" RGB:- random.png

產生的圖片檔範例如下所示,

產生的圖片檔如果要以當下日期為命名的話,可以配合 date 指令這樣使用,

1
2
$ mx=320;my=240;head -c "$((3*mx*my))" /dev/urandom | \
convert -depth 8 -size "${mx}x${my}" RGB:- random-$(date +%Y-%m-%d-%H%M%S).png

以上就是 Linux 隨機產生文字檔或二進制檔的介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其他參考
Quickly create a large file on a Linux system
https://stackoverflow.com/questions/257844/quickly-create-a-large-file-on-a-linux-system
How to create a random .txt(Human readable text like ascii) file in linux - Super User
https://superuser.com/questions/692175/how-to-create-a-random-txthuman-readable-text-like-ascii-file-in-linux
command line - Random image generator - Unix & Linux Stack Exchange
https://unix.stackexchange.com/questions/289572/random-image-generator

其它相關文章推薦
Linux 常用指令教學懶人包
Linux wget 下載檔案用法與範例
Linux sed 字串取代用法與範例
Linux find 尋找檔案/尋找資料夾用法與範例
Linux grep/ack/ag 搜尋字串用法與範例
Linux tee 同時螢幕標準輸出和輸出到檔案用法與範例
Linux xargs 參數列表轉換用法與範例
Linux tail 持續監看檔案輸出用法與範例
Linux du 查詢硬碟剩餘空間/資料夾容量用法與範例