Sự khác biệt giữa 'bs', 'đếm' và 'tìm kiếm' trong lệnh dd là gì?


24

Tôi đã đọc hướng dẫn và các bài viết diễn đàn mô tả làm thế nào để sử dụng nhiều dd, nhưng có một điều tôi đã nhận thấy là người luôn luôn sử dụng giá trị khác nhau cho bs=, count=seek=chuyển mạch.

Vui lòng ai đó có thể giải thích chính xác những gì các công tắc này thực hiện (trang man không chi tiết lắm) và giải thích các cài đặt tốt nhất cho chúng là gì cho các tác vụ khác nhau, chẳng hạn như tạo tệp từ / dev / ngẫu nhiên hoặc / dev / zero và ghi đè phân vùng và ổ đĩa ngoài.


Câu trả lời:


27

Tôi thực sự không biết làm thế nào để giải thích điều này tốt hơn trang chủ.

bs=đặt kích thước khối, ví dụ bs=1Msẽ là kích thước khối 1MiB.

count=chỉ sao chép số khối này (mặc định là để dd tiếp tục tồn tại hoặc cho đến khi hết đầu vào). Các khối lý tưởng có bs=kích thước nhưng có thể có các lần đọc không đầy đủ, vì vậy nếu bạn sử dụng count=để sao chép một lượng dữ liệu cụ thể ( count*bs), bạn cũng nên cung cấp iflag=fullblock.

seek= tìm kiếm số khối này trong đầu ra, thay vì ghi vào đầu của thiết bị đầu ra.

Vì vậy, ví dụ, bản sao này có giá trị 1MiB y\nđể định vị 8MiB của tệp đầu ra. Vì vậy, tổng kích thước tập tin sẽ là 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

Vì bạn đề cập /dev/randomvà ghi đè phân vùng ... sẽ mất rất nhiều thời gian vì /dev/random(cũng như /dev/urandom) quá chậm. Bạn chỉ có thể sử dụng shred -v -n 1thay thế, đó là nhanh chóng và thường có sẵn ở bất cứ đâu.


21

Ok, bạn nói rằng các trang của người đàn ông không chi tiết, vì vậy tôi sẽ giải thích ý nghĩa của chúng với những ẩn dụ dễ hiểu về một anh chàng cảm động (nó có tên là dd):

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

ddnhặt một cái gì đó (hộp, bình, giường, gạo, v.v.), di chuyển đến nơi cần đến và thả nó xuống. Cho đến khi anh ta không giảm tải, anh ta không chọn bất cứ thứ gì khác. Bây giờ, khi bạn cần nói cho anh ta biết chính xác anh ta nên chọn bao nhiêu đồ vật cho mỗi chuyến đi, đây là việc bscần làm. Bạn đặt lượng dữ liệu anh ấy sẽ đọc và viết. Điều này gần như là bắt buộc trong tất cả các lệnh hữu ích và phổ biến.

   count=N
          copy only N input blocks

Điều này quyết định tổng số lượng hộp anh ta sẽ di chuyển. Các hộp trong bối cảnh này là các khối trên đĩa . Bạn bảo anh ta di chuyển 5 hộp, anh ta chỉ di chuyển 5 hộp ngay cả khi có nhiều hơn 5 hộp (nếu có ít hơn 5 hộp, anh ta sẽ lấy một chiếc bình anh ta tìm thấy bên cạnh các hộp để thêm nó). Nếu bạn chỉ nói ddvới count5 và viết nó ở đâu đó, anh ta sẽ sao chép 5 khối đầu tiên anh ta nhìn thấy và viết chúng ở nơi bạn muốn.

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

Anh chàng thường tìm nơi có sẵn đầu tiên để giảm tải, đây thường là lúc bắt đầu (của đĩa), và tiếp tục lấp đầy cho đến khi kết thúc. Vâng, với điều này bạn nói ddđể bắt đầu xa hơn, nói thay vì hội trường, bắt đầu ở một trong những phòng xa hơn bên trong. Nó chỉ "bỏ qua" các khối bắt đầu.

Bây giờ, tùy thuộc vào những gì bạn đang làm, bạn sẽ cần các kết hợp khác nhau dựa trên nguồn và đích, cùng với định dạng chúng sẽ được đọc và viết. Tôi khuyên bạn nên tìm kiếm chúng tách biệt.


"anh ấy sẽ lấy một chiếc bình mà anh ấy tìm thấy bên cạnh những chiếc hộp để thêm nó lên". Ẩn dụ này có nghĩa là gì?
Ini

1
@Ini Nếu có một khối liền kề không thuộc về if, dd sẽ đọc nó và di chuyển nó. Một cái bình không phải là một cái hộp, nhưng dd di chuyển nó.
Braiam
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.