ฉันจะสร้างไฟล์ได้อย่างไร (เช่นใช้touch
คำสั่งหรือวิธีอื่นที่คล้ายกัน) แต่มีขนาดเฉพาะ (เช่น 14 MB)
กรณีการใช้งานคือการทดสอบ FTP ด้วยขนาดไฟล์ต่าง ๆ หากเราสามารถสร้างไฟล์ที่มีขนาดเฉพาะจะเป็นประโยชน์ในการตรวจสอบการถ่ายโอน FTP เป็นต้น
ฉันจะสร้างไฟล์ได้อย่างไร (เช่นใช้touch
คำสั่งหรือวิธีอื่นที่คล้ายกัน) แต่มีขนาดเฉพาะ (เช่น 14 MB)
กรณีการใช้งานคือการทดสอบ FTP ด้วยขนาดไฟล์ต่าง ๆ หากเราสามารถสร้างไฟล์ที่มีขนาดเฉพาะจะเป็นประโยชน์ในการตรวจสอบการถ่ายโอน FTP เป็นต้น
คำตอบ:
การใช้truncate
:
truncate -s 14M filename
จากman truncate
:
DESCRIPTION
Shrink or extend the size of each FILE to the specified size
[...]
-s, --size=SIZE
set or adjust the file size by SIZE
หมายเหตุ: truncate
อาจไม่สามารถใช้ได้ในระบบของคุณเช่นบน Mac OS X ซึ่งไม่ได้ติดตั้งตามค่าเริ่มต้น (แต่คุณสามารถติดตั้งได้อย่างง่ายดายโดยใช้ macports เป็นต้น) ในกรณีเหล่านี้คุณอาจจำเป็นต้องใช้dd
หรือhead
แทน
touch
ไม่จำเป็น แต่คุณก็สามารถเรียกใช้truncate -s 14M filename
มันจะสร้างfilename
โดยตรง
แก้ไข: วิธีที่ง่ายที่สุดน่าจะtruncate
เป็นคำตอบของ Ashutosh Vishwa Bandhu แต่ดังที่ชี้ให้เห็นโดย@ offby1ที่สร้างไฟล์ที่กระจัดกระจายซึ่งอาจไม่ใช่สิ่งที่คุณต้องการ โซลูชันด้านล่างสร้างไฟล์เต็มปกติ
คำสั่งต่อไปนี้สร้างไฟล์ 14MB ที่เรียกว่าfoo
:
fallocate
(ขอบคุณ@Breakthroughที่แนะนำในความคิดเห็นและโหวตคำตอบของ Ahmed Masud ด้านล่างซึ่งระบุไว้ด้วย)
fallocate -l 14000000 foo
คำสั่งนี้น่าประทับใจโดยเฉพาะอย่างยิ่งเนื่องจากมันเร็วเท่ากับtruncate
(ทันที) โดยไม่คำนึงถึงขนาดไฟล์ที่ต้องการ (ไม่เหมือนกับโซลูชั่นอื่น ๆ ซึ่งจะช้าสำหรับไฟล์ขนาดใหญ่) และยังสร้างไฟล์ปกติไม่ใช่แบบเบาบาง:
$ truncate -s 14MB foo1.txt
$ fallocate -l 14000000 foo2.txt
$ ls -ls foo?.txt
0 -rw-r--r-- 1 terdon terdon 14000000 Jun 21 03:54 foo1.txt
13672 -rw-r--r-- 1 terdon terdon 14000000 Jun 21 03:55 foo2.txt
สร้างไฟล์ที่เต็มไปด้วยข้อมูลแบบสุ่ม
dd if=/dev/urandom of=foo bs=14MB count=1
หรือ
head -c 14MB /dev/urandom > foo
สร้างไฟล์ที่เต็มไปด้วย\0
s:
dd if=/dev/zero of=foo.txt bs=14MB count=1
หรือ
head -c 14MB /dev/zero > foo
สร้างไฟล์ที่เต็มไปด้วยข้อมูล 14MB แรกของไฟล์อื่น:
head -c 14MB bar.txt > foo
สร้างไฟล์ที่เต็มไปด้วยข้อมูล 14MB สุดท้ายของไฟล์อื่น:
tail -c 14MB bar.txt > foo
ในทุกตัวอย่างข้างต้นไฟล์จะ14*1000*1000
ถ้าคุณต้องการ14*1024*1024
แทนที่ด้วยMB
M
ตัวอย่างเช่น:
dd if=/dev/urandom of=foo bs=14M count=1
head -c 14M /dev/zero > foo
fallocate
ข้อเสนอเป็นไบต์เท่านั้นดังนั้นคุณต้องทำ (14 * 1024 * 1024 = 14680064)
fallocate -l 14680064 foo
dd
หากมีวิธีการที่ง่ายกว่าและไม่ทำลาย
dd
วิธีมีทางเลือกที่ไม่ใช่ DD
dd
/dev/zero
สำหรับผู้ที่มีเหตุผลM
หรือMB
มีเหตุผลมากกว่า man man ของhead , tailและddระบุไว้อย่างชัดเจนว่า "MB = 1,000 * 1,000, M = 1024 * 1024" สิ่งนี้อาจแตกต่างจาก * nixes อื่น ๆ
dd bs=1MB count=14 if=/dev/zero of=<yourfilename>
คำเตือน dd
จะเขียนทับสิ่งที่คุณมีสิทธิ์ที่จะเขียนหากคุณระบุด้วยความเต็มใจหรือโดยไม่ตั้งใจ ทำให้แน่ใจว่าคุณเข้าใจdd
เช่น กับการอ่านdd --help
และคุณไม่ได้กรูขึ้นบรรทัดคำสั่ง DD ของคุณหรืออื่น ๆ คุณสามารถสร้างการสูญเสียข้อมูลกลับไม่ได้ - แม้ทั้งหมด
สำหรับการเริ่มต้น, if=
เป็นแฟ้มใส่และof=
คือไฟล์ที่ส่งออก มักจะตรวจสอบว่าคุณได้รับมันขวาก่อนที่จะใช้คำสั่ง :)
ใช้เวทย์มนตร์dd
;) หน้าคน
$ dd if=/dev/zero of=output.dat bs=1024 count=14336
สาเหตุ 14MB * 1024 = 14336KB หรือ:
$ dd if=/dev/zero of=output.dat bs=1MB count=14
และคุณจะได้ไฟล์ output.dat ขนาด 14mb ซึ่งเต็มไปด้วยเลขศูนย์: D
นี่ควรเป็นวิธีที่เร็วที่สุดที่จะทำ:
SEEK=$SIZE-1
dd if=/dev/zero of=outfile bs=1 seek=$SEEK count=1
มิฉะนั้นเพียงแค่เขียนโปรแกรม C หรือ Perl ที่รวดเร็วและสกปรกที่จะค้นหาตำแหน่งที่แน่นอนและเขียนไบต์เดียว นี่เป็นจำนวนมากเร็วกว่าการทิ้งข้อมูลลงบนบล็อก
หากคุณต้องการที่จะหลีกเลี่ยงไฟล์เบาบางแล้วบน Linux (และระบบอื่น ๆ อาจจะ) คุณสามารถใช้จากfallocate -l <length>
util-linux
หากไม่สามารถใช้งานได้และคุณมีระบบที่เข้ากันได้กับ POSIX คุณสามารถเขียนโปรแกรมที่รวดเร็วและสกปรกโดยใช้การเรียกไลบรารี่ posix_fallocate () posix_fallocate รับประกันการจัดสรรช่วงที่ระบุดังนั้นคุณจะไม่ได้รับดิสก์เต็มเมื่อใช้ช่วงต่อมาหากส่งคืนสำเร็จ
ในขณะที่dd
เป็นวิธีพกพาที่จะทำคำสั่งmkfile
และxfs_mkfile
เขียนเฉพาะสำหรับวัตถุประสงค์นี้และเร็วขึ้น:
mkfile size[b|k|m|g] filename
xfs_mkfile size[b|k|m|g] filename
การจับก็คือคำสั่งทั้งสองไม่สามารถใช้ได้ในระดับสากลดังนั้นจึงไม่ดีสำหรับการเขียนสคริปต์แบบพกพา อย่างไรก็ตามถ้าฉันทำมันแบบโต้ตอบผ่านบรรทัดคำสั่งเหล่านั้นคือคำสั่งที่ฉันใช้
โดยค่าเริ่มต้นที่พวกเขาสร้างศูนย์ที่เต็มไปด้วยไฟล์และไม่โปร่ง (หรือ "โพรง") ไฟล์ พวกเขาทั้งคู่-n
เลือกที่จะสร้างไฟล์แบบเบาบางแทน
มีตัวเลือกอื่นด้วย Perl:
perl -e 'print "a" x 1024' > file.txt
สิ่งนี้จะสร้างไฟล์ 1KB แทนที่ 1024 ด้วยหมายเลขที่คุณต้องการ