ฉันจะเติมไฟล์ด้วยข้อมูลแบบสุ่มได้อย่างไร


124

ฉันจะสร้างไฟล์ใหม่และเติมด้วยข้อมูลแบบสุ่มมูลค่า 1 กิกะไบต์ได้อย่างไร ฉันต้องการสิ่งนี้เพื่อทดสอบซอฟต์แวร์

ฉันชอบที่จะใช้หรือ/dev/random/dev/urandom


74
เปิดviด้วยvi -w randomfileและถามคนที่ไม่เคยเห็นviเพื่อออกจากโปรแกรม ;)
สัญลักษณ์ตัวแทน

1
เพิ่งมาถึงชอบความคิดเห็นข้างต้นจากโพสต์ Facebook! facebook.com/ProgrammersCreateLife/photos/a.241809332534619/…
Parixit

คำตอบ:


171

โดยส่วนใหญ่:

head -c 1G </dev/urandom >myfile

หากคุณheadไม่เข้าใจGคำต่อท้ายคุณสามารถระบุขนาดเป็นไบต์:

head -c 1073741824 </dev/urandom >myfile

หากคุณheadไม่เข้าใจ-cตัวเลือก (เป็นเรื่องปกติ แต่ไม่ใช่ POSIX คุณอาจมี OpenBSD):

dd bs=1024 count=1048576 </dev/urandom >myfile

อย่าใช้/dev/randomบน Linux /dev/urandomใช้


1
สำหรับสิ่งที่คุ้มค่าheadไม่เข้าใจ-cในเครื่อง Solaris 10 ของฉัน
rahmu

2
สิ่งที่น่าสนใจที่headสามารถอ่าน/dev/urandomได้ แต่tailทำไม่ได้
Stefan Lasiewski

21
@StefanLasiewski tailพยายามครั้งแรกที่จะไปที่จุดสิ้นสุดของไฟล์อินพุตซึ่งจะใช้เวลาตลอดไป (ตัวอักษร)
Gilles

อาเช่น 'tail / dev / infinity` หากมีอุปกรณ์ดังกล่าว
Stefan Lasiewski

3
@StefanLasiewski คุณมี/dev/zeroดีถ้าคุณไม่ชอบความหลากหลาย
Gilles

35

สมมติว่าข้อมูลแบบหลอกหลอกเพียงพอแล้วdd if=/dev/urandom of=target-file bs=1M count=1000จะทำสิ่งที่คุณต้องการ

dd (1)จะอ่านบล็อกของข้อมูลจากไฟล์อินพุตและเขียนลงในไฟล์เอาต์พุต ภาษาของบรรทัดคำสั่งเป็นสิ่งที่แปลก แต่ก็เป็นหนึ่งในเครื่องมือที่มีประโยชน์จริง ๆ ที่ควรค่าแก่การเรียนรู้พื้นฐานของ

ในกรณีนี้ifคือไฟล์อินพุตคือไฟล์ofเอาต์พุตbsคือ "ขนาดบล็อก" - และฉันใช้ส่วนขยาย GNU เพื่อกำหนดขนาดให้สะดวกยิ่งขึ้น (คุณยังสามารถใช้ 1048576 ถ้าคุณddไม่ได้มีนามสกุล GNU.) countคือจำนวนของบล็อกที่จะอ่านจากและเขียนไปยังifof

/dev/urandomเป็นทางเลือกที่ดีกว่า/dev/randomเพราะบน Linux มันจะถอยกลับไปยังข้อมูลแบบหลอกเทียมที่แข็งแกร่งแทนที่จะปิดกั้นเมื่อข้อมูลแบบสุ่มอย่างแท้จริงหมดลง

คุณอาจต้องการดูhttp://www.random.org/เป็นอีกเส้นทางหนึ่งในการรับข้อมูลแบบสุ่มโดยไม่ต้องสร้างเอง


3
หมายเหตุ - ข้อมูลจำเพาะหน่วยเช่น1Mไม่มีในddตัวแปรมาตรฐานทุกรุ่น ถ้ารุ่นของคุณเป็นได้รับผลกระทบการใช้งานdd bs=1048576
Chris Down

4
คำสั่งตัวอย่างจะสร้างไฟล์นับ 1,000,000 บล็อกแต่ละขนาด 1 MB นั่นคือประมาณ 1 TB (1M x 1MB) ไม่ใช่ 1 GB (ซึ่งจะเป็น 1K x 1MB) นอกจากนี้จนถึงจุดหนึ่งการเพิ่มขนาดบล็อกและการลดจำนวนบล็อกมีแนวโน้มที่จะให้ปริมาณงานที่ดีขึ้นสำหรับข้อมูลเอาต์พุตจำนวนหนึ่ง
CVn

2
while true;do head /dev/urandom | tr -dc A-Za-z0-9;done | head -c 5000K | tee  5000kb

ใช้สิ่งนี้เพื่อสร้างข้อมูลตัวอักษรแบบสุ่ม 5MB หากคุณต้องการขนาดแตกต่างกันให้เปลี่ยน-cค่าส่วนหัวเปลี่ยนชื่อ outfile ดำเนินการและรอจนกว่าการดำเนินการจะเสร็จสิ้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.