本篇 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 查詢硬碟剩餘空間/資料夾容量用法與範例