การสร้างไฟล์“ ปลอม” ที่มีขนาดใหญ่ตามอำเภอใจ


16

ฉันต้องการสร้างไฟล์พิเศษที่คล้ายกับ/dev/nullหรือ/dev/randomที่ไฟล์ไม่ได้มีอยู่จริง แต่คุณสามารถอ่านได้เหมือนกันทั้งหมดยกเว้นว่าฉันสามารถตั้งค่าสูงสุดตามขนาดไฟล์ที่ชัดเจน

หากต้องการใส่อีกวิธีหนึ่งฉันต้องการสร้างไฟล์พิเศษที่ (สมมติว่าฉันตั้งค่าฝา 500GB) เมื่อฉัน "cat" ไฟล์มันจะส่งออกไฟล์ทั้งหมด 500GB แล้วหยุด มันต้องทำหน้าที่เหมือนกับไฟล์จริง 500GB แต่ไม่มีการเว้นวรรค เนื้อหาของไฟล์นี้ไม่สำคัญอาจเป็นได้ทุก\0อย่าง/dev/nullหรือแค่สายเล็ก ๆ ที่ถูกส่งซ้ำไปซ้ำมาหรืออะไรก็ตาม

นี่เป็นสิ่งที่ทำได้หรือไม่? สิ่งเดียวที่อยู่ใกล้ฉันได้จากระยะไกลคือหน้าคนที่พูดถึงmknodแต่คนเหล่านั้นไม่ค่อยมีประโยชน์

คำตอบ:


17

คุณสามารถสร้างไฟล์เบาบางใน filesystems บางอย่างซึ่งจะปรากฏที่จะมีขนาดบาง แต่จะไม่จริงใช้พื้นที่มากบนดิสก์

$ dd if=/dev/null of=sparse bs=1024 count=1 seek=524288000
0+0 records in
0+0 records out
0 bytes (0 B) copied, 2.4444e-05 s, 0.0 kB/s
$ ls -l sparse 
-rw-rw-r--. 1 ignacio ignacio 536870912000 May  9 22:25 sparse
$ du -h sparse
0   sparse

มันทำงานได้อย่างสมบูรณ์แบบ กรณีที่ดีที่สุดฉันหวังว่าจะได้ทางออกที่จริง ๆ แล้วฉันสามารถเขียนออกมาได้ว่าอะไรคือผลลัพธ์ (เช่นสำหรับทุกตำแหน่งการค้นหาที่คุณดูข้อมูลจะมีแฮชของตำแหน่งนั้นหรือบางสิ่งบางอย่างตามแนวเส้นเหล่านั้น) ที่นั่น ตอนนี้ใช้งานได้แน่นอนขอบคุณ!
Gopher ธรรมดา

1
@MediocreGopher คุณอย่างแน่นอนสามารถทำสิ่งที่ต้องการที่มีฟิวส์
cjm

1

นอกเหนือจากโซลูชัน dd / แสวงหาแบบพกพาที่กล่าวถึงแล้วบาง Unixes มีคำสั่งพิเศษ:

อย่างน้อยในSolaris , MacOS / XและIrix :

mkfile -n 500m sparseFile

บน HP-UX preallocบน AIX lmktemp และลีนุกซ์หลายรุ่นมีการตัด


1

หากคุณไม่ต้องการค้นหาไฟล์คุณสามารถใช้ไพพ์ที่มีชื่อ:

mkfifo my_special_file
yes | head -n 100 > my_special_file&
cat my_special_file

แน่นอนคุณสามารถใช้คำสั่งอื่นรวมถึงสคริปต์ที่ซับซ้อนเพื่อสร้างข้อมูลในไพพ์


0

ด้วย dd คุณสามารถระบุขนาดบล็อกและการนับได้และ จำกัด ขนาดดังนี้:

dd if=/dev/urandom count=5 bs=1024 > nullfile

หากคุณต้องการอ่านจากมันเพียงไปที่:

dd if=/dev/urandom count=5 bs=1024 | yourReadingProcess 

ในครั้งก่อนทุกการติดตั้ง linux ที่ฉันทำมาพร้อมกับเครื่องมือเครือข่ายบางอย่าง, portmap, inet.d และเช่นนั้นและใน inet.d มีบริการบางอย่างที่ระบุไว้เสมอหนึ่งในนั้นถูกอธิบาย / ชื่อ chargen ถ้าฉันจำได้อย่างถูกต้อง

(... หนึ่งนาทีต่อมา ... )

ใช่. ใน / etc / services คุณค้นหา

chargen         19/tcp          ttytst source
chargen         19/udp          ttytst source

ดังนั้นฉันคิดว่ามันเป็นบริการที่จะทดสอบบางสิ่งและส่งตัวอักษร - อาจจะสุ่ม - ผ่านเครือข่าย ฉันพบ /etc/xinet.d/chargen บนพีซีของฉันเท่านั้น มีข่าวสารเพิ่มเติม:

# default: off
# description: An xinetd internal service which generate characters.  The
# xinetd internal service which continuously generates characters until the
# connection is dropped.  The characters look something like this:
# !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg
# This is the tcp version.

อย่างไรก็ตามฉันไม่รู้ว่าจะใช้เพื่อจุดประสงค์ของคุณอย่างไร

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