是否會有這樣的場景:在有需要測試資料的時候,你不知如何生成一些已包含測試資料的檔案;或者你是臨時需要乙個小的程式,可以讓你生成不同大小的檔案(比如大於1mb少於100mb),不需要從網路上去搜尋查詢如何生成,這裡有一些簡單的方法幫你偷懶。
a、當你不需要關心隨機檔案的內容,只需乙個固定大小的檔案
1、solaris、mac os x等unix系統中mkfile指令,可以產生指定大小的檔案,而linux上則沒有
例子:mkfile -n 160g test1
2、linux可以用dd指令,/dev/zero是乙個特別的檔案描述符可以通過它返回null值
例子:dd if=/dev/zero of=test.file count=1024 bs=1024
產生count * bs位元組的檔案,1m
此方法生成隨機檔案的好處在於效率高(產生1g檔案大概1s),建立的檔案大小精確到位元組
壞處也有
使用null字元來填充檔案內容,檔案統計時沒有行(wc -l test.file為0)
b、當你不需要關心隨機檔案的內容,但期望測試檔案能有統計的行
將/dev/zero改為/dev/urandom,/dev/urandom是linux下的隨機數生成器
關於/dev/urandom跟/dev/random兩者的區別就不在此詳細討論,大概就是,前者是不受系統interrupts的限制,即使沒有足夠的interrupt它也能通過隨機數生成器產生足夠的輸出值;而後者如果用在dd上,它不能被ctrl+c或者kill -9中斷,如果ds的值較大時,產生的隨機值不足而長期占用cpu。雖然說/dev/random產生的隨機數會更隨機些,但與dd混用還是建議用/dev/urandom效率更高。
缺點跟/dev/zero比當然是效率會更低些了,生成個100mb的檔案需要10秒左右,而且檔案並沒有可讀的內容,一般的情況基本上是滿足了。
漏了說句,dd是linux與unix都支援的指令。
c、當你關心檔案的隨機內容行數,而不關心內容是否有所重複
這裡的思路就是找乙個參照檔案(比如說2行),將檔案重新定向到新的檔案,再mv覆蓋儲存,外加乙個for迴圈。(n為迴圈次數,產生的檔案行為2^(n+1))
例子:假設先建立乙個file.txt檔案,裡面含有hello 和 world兩行
for i in ; do cat file.txt file.txt > file2.txt && mv file2.txt file.txt; done
由於是階乘,n=20左右已經是200w行,效率會下降地比較厲害
d、當你關心隨機檔案的內容,而不想出現重複內容**況
這種情況下系統的指令應該是不能滿足了,或者可以通過作業系統的指令寫一大串指令碼也可以達到,但不建議這麼做,因為可讀性和維護性考慮,你應該要引入ruby或者python類的指令碼語言幫忙了
但還是要借助些系統的東西來幫忙
思路:/usr/share/dict/words裡面有記錄一些單詞,一共235886行,每行乙個單詞
可以從裡面挑選一些作為檔案的內容
加迴圈達到我們想要的隨機檔案要求
舉例:ruby -e 'a=stdin.readlines;x.times do; b=;y.times do; bx為隨機檔案需要的行數,y為從words中讀取的單詞,雖說組合成一句的命令,還是可以讀懂的;從標準輸入中重複讀取y個單詞,寫入到b列表中,然後再通過join空格連線內容寫入到標準輸出檔案file.txt中
參考:2、dd的wiki
如何在Linux系統通過命令列生成隨機檔案
是否會有這樣的場景 在有需要測試資料的時候,你不知如何生成一些已包含測試資料的檔案 或者你是臨時需要乙個小的程式,可以讓你生成不同大小的檔案 比如大於1mb少於100mb 不需要從網路上去搜尋查詢如何生成,這裡有一些簡單的方法幫你偷懶。1.當你不需要關心隨機檔案的內容,只需乙個固定大小的檔案 2.當...
centos下沒有桌面系統,通過命令列配置網路資訊
公司內部需要使用伺服器,但是要求安裝ubuntu沒有桌面的版本系統,後來通過配置 etc network inte ces etc init.d networking restart 這條命令是重啟網絡卡 或者 ifdown eth0 ifup eth0 這兩條命令是有針對性的重啟某個網路介面,因為...
如何在Linux 命令列終端分屏
下面介紹兩種終端分屏工具 screen和tmux 一 使用screen分屏 只能上下分屏,不能左右分屏 1 安裝工具 在ubuntu系統中使用sudo apt get install screen 安裝screen工具 2 使用工具 1,輸入命令screen使用工具 2,上下分屏 ctrl a 再按...