อะไรคือความแตกต่างระหว่าง 'bs', 'count' และ 'ค้นหา' ในคำสั่ง dd?


24

ฉันได้อ่านคำแนะนำและโพสต์ฟอรั่มที่อธิบายถึงวิธีการใช้งานจำนวนมากddแต่สิ่งหนึ่งที่ฉันได้สังเกตเห็นคือคนที่มักจะใช้ค่าที่แตกต่างสำหรับbs=, count=และseek=สวิทช์

ได้โปรดใครสักคนอธิบายสิ่งที่สวิตช์เหล่านี้ทำอย่างถูกต้อง (หน้าคนไม่ละเอียดมาก) และอธิบายว่าการตั้งค่าที่ดีที่สุดสำหรับพวกเขาสำหรับงานต่าง ๆ เช่นการสร้างไฟล์จาก / dev / random หรือ / dev / ศูนย์และการเขียนทับ พาร์ติชันและไดรฟ์ภายนอก


คำตอบ:


27

ฉันไม่รู้จะอธิบายยังไงดีกว่า manpage

bs=ตั้งค่า blocksize เช่นbs=1M1MiB blocksize

count=คัดลอกเฉพาะบล็อกจำนวนนี้เท่านั้น (ค่าเริ่มต้นสำหรับ dd เพื่อดำเนินต่อไปเรื่อย ๆ หรือจนกว่าอินพุตจะหมด) จะเป็นการดีที่บล็อกมีbs=ขนาด แต่อาจจะไม่สมบูรณ์อ่านดังนั้นหากคุณใช้count=ในการสั่งซื้อที่จะคัดลอกจำนวนเฉพาะของข้อมูล ( count*bs) iflag=fullblockคุณควรยังอุปทาน

seek= ค้นหาบล็อกจำนวนนี้ในเอาต์พุตแทนที่จะเขียนลงไปที่จุดเริ่มต้นของอุปกรณ์เอาต์พุต

ตัวอย่างเช่นนี่จะคัดลอก 1MiB ที่คุ้มค่าy\nไปที่ตำแหน่ง 8MiB ของ outputfile ดังนั้นขนาดไฟล์ทั้งหมดจะเป็น 9MiB

$ yes | dd bs=1M count=1 seek=8 iflag=fullblock of=outputfile
$ ls -alh outputfile
9.0M Jun  3 21:02 outputfile
$ hexdump -C outputfile
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00800000  79 0a 79 0a 79 0a 79 0a  79 0a 79 0a 79 0a 79 0a  |y.y.y.y.y.y.y.y.|
*
00900000

เมื่อคุณพูดถึง/dev/randomและเขียนทับพาร์ทิชัน ... มันจะใช้เวลาตลอดไปตั้งแต่/dev/random(และ/dev/urandom) ช้าเกินไป คุณสามารถใช้shred -v -n 1แทนซึ่งเร็วและมักจะใช้ได้ทุกที่


21

ตกลงคุณบอกว่าหน้าคนไม่มีรายละเอียดดังนั้นฉันจะอธิบายสิ่งที่พวกเขาหมายถึงง่ายต่อการเข้าใจคำอุปมาอุปมัยเกี่ยวกับคนที่เคลื่อนไหว (มันไปตามชื่อdd):

   bs=BYTES
          read and write up to BYTES bytes at a time

ddหยิบของบางอย่าง (กล่อง, แจกัน, เตียง, ข้าว, ฯลฯ ) ย้ายไปที่ที่มันจะต้องมีและวางมันออก จนกว่าเขาจะไม่ลดภาระเขาจะไม่เลือกอย่างอื่น ตอนนี้เมื่อคุณจำเป็นต้องบอกเขาว่าเขาควรเลือกวัตถุจำนวนเท่าไรต่อการเดินทางนี่คือสิ่งที่bsทำ คุณตั้งค่าปริมาณข้อมูลที่เขาจะอ่านและเขียน นี่เป็นข้อบังคับเกือบทั้งหมดในคำสั่งที่มีประโยชน์และคำสั่งทั่วไป

   count=N
          copy only N input blocks

นี่เป็นการกำหนดจำนวนรวมของกล่องที่เขาจะย้าย กล่องในบริบทนี้เป็นบล็อกบนดิสก์ คุณบอกให้เขาย้าย 5 กล่องเขาแค่ย้าย 5 กล่องแม้ว่าจะมีมากกว่า 5 กล่อง (ถ้ามีกล่องน้อยกว่า 5 กล่องเขาจะเอาแจกันที่เขาพบข้างกล่องเพื่อเพิ่มขึ้น) ถ้าคุณบอกddไปcountเพียง 5 และเขียนมันบางเขาจะคัดลอก 5 บล็อกแรกที่เขาเห็นและเขียนพวกเขาที่คุณต้องการ

   seek=N skip N obs-sized blocks at start of output

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

ตอนนี้ขึ้นอยู่กับสิ่งที่คุณทำคุณจะต้องใช้ชุดค่าผสมที่แตกต่างกันตามแหล่งที่มาและปลายทางพร้อมกับรูปแบบที่พวกเขาจะอ่านและเขียน ฉันขอแนะนำให้คุณค้นหาแยกพวกเขา


เขาจะเอาแจกันที่เขาพบนอกเหนือจากกล่องมาเพิ่ม " คำอุปมาอุปมัยนี้หมายถึงอะไร?
Ini

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