สร้างไฟล์ทดสอบที่มีจำนวนไบต์เป็นศูนย์


25

ฉันรู้วิธีสร้างไฟล์ว่างเปล่า:

touch /var/tmp/nullbytes

แต่ฉันจะสร้างไฟล์ 1MB ที่มี nullbytes บน commandline ด้วย bash ได้อย่างไร


เกี่ยวข้องกับคำถาม SU: superuser.com/q/609020/151431
terdon

1
+1 คำถามที่น่าสนใจ ใครบางคนช่วยอธิบายรายละเอียดในสถานการณ์ที่จำเป็นต้องใช้ไฟล์ดังกล่าว .. ?
Kent Pawar

1
ฉันต้องการมันเพื่อจำลองความผิดพลาดใน chkrootkit: unix.stackexchange.com/questions/86866/ …
rubo77

คำตอบ:


56

ด้วย GNU truncate:

truncate -s 1M nullbytes

(สมมติว่าnullbytesไม่มีอยู่ก่อน) จะสร้างไฟล์ 1 ไฟล์ mebibyte นั่นคือไฟล์ที่ดูเหมือนเต็มไปด้วยเลขศูนย์ แต่ไม่มีเนื้อที่ว่างบนดิสก์

หากไม่มีtruncateคุณสามารถใช้ddแทน:

dd bs=1048576 seek=1 of=nullbytes count=0

(ด้วยddการใช้งานบางอย่างคุณสามารถแทนที่ 1048576 ด้วย1M)

หากคุณต้องการจัดสรรพื้นที่ดิสก์บน Linux และระบบไฟล์บางระบบคุณสามารถทำได้:

fallocate -l 1M nullbytes

ที่จัดสรรพื้นที่โดยไม่ต้องเขียนข้อมูลลงในดิสก์จริง ๆ (พื้นที่สงวนไว้ แต่ทำเครื่องหมายว่าไม่เตรียมการ)

dd < /dev/zero bs=1048576 count=1 > nullbytes

จะเขียนเลขศูนย์ไปที่ดิสก์จริงหรือ นั่นคือประสิทธิภาพที่น้อยที่สุด แต่ถ้าคุณต้องการไดรฟ์ของคุณหมุนเมื่อเข้าถึงไฟล์นั้นนั่นคือสิ่งที่คุณต้องการ

หรือวิธีของ @ mikeserv เพื่อหลอกลวงddให้สร้าง NUL ไบต์:

dd bs=1048576 count=1 conv=sync,noerror 0> /dev/null > nullbytes

ทางเลือกอื่นของ GNU headที่ไม่เกี่ยวข้องกับการระบุขนาดบล็อก (1M ใช้ได้, แต่ 10G จะไม่เป็นเช่นนั้น):

head -c 1M < /dev/zero > nullbytes

หรือเพื่อรับแถบความคืบหน้า:

pv -Ss 1M < /dev/zero > nullbytes

อย่าใช้truncateสำหรับสร้างไฟล์เปล่าเพื่อใช้เป็นวอลลุ่มสลับ ... มันจะไม่ทำงาน! ใช้ddในกรณีนี้แทน
อีเลียส Probst

1
@EliasProbst, ITYM การคัดลอกจาก / dev / ศูนย์แทน , ไม่ใช้ไฟล์เบาบาง ddสามารถสร้างไฟล์กระจัดกระจายตามที่ฉันแสดงเช่นกัน
Stéphane Chazelas

2
fallocate เป็นวิธีที่ดีที่สุดและรวดเร็วในการสร้างเพราะจองพื้นที่ไว้และทำมันอย่างรวดเร็ว แต่ไม่ต้องเขียนอะไรเลย ( stackoverflow.com/questions/257844/… )
curratore

bs=1kx1k... หรือ หรือ<&1 dd bs=1kx1k conv=sync,noerror count="$rpt" | cat >fileสำหรับตัวอักษรเขียนสิ่งที่ดิสก์ ไม่ใช่ 100% สำหรับประสิทธิภาพที่อาจสูญเสียไปในการบังคับให้เกิดข้อผิดพลาดในการอ่าน
mikeserv

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