Tạo một tệp thử nghiệm với nhiều byte bằng không


25

Tôi biết cách tạo một tệp trống:

touch /var/tmp/nullbytes

nhưng làm cách nào tôi có thể tạo tệp 1MB chỉ chứa nullbyte trên dòng lệnh bằng bash?


Liên quan đến câu hỏi SU: superuser.com/q/609020/151431
terdon

1
+1. Câu hỏi thú vị. Ai đó có thể vui lòng giải thích trong trường hợp nào một tập tin như vậy sẽ được yêu cầu ..?
Kent Pawar

1
Tôi cần nó để mô phỏng sự cố trên chkrootkit: unix.stackexchange.com/questions/86866/ trộm
rubo77

Câu trả lời:


56

Với GNU truncate:

truncate -s 1M nullbytes

(giả sử nullbyteskhông tồn tại trước đó) sẽ tạo ra tệp thưa thớt 1 mebibyte. Đó là một tệp xuất hiện chứa đầy số không nhưng không chiếm bất kỳ khoảng trống nào trên đĩa.

Nếu không truncate, bạn có thể sử dụng ddthay thế:

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

(với một số ddtriển khai, bạn có thể thay thế 1048576 bằng 1M)

Nếu bạn muốn phân bổ không gian đĩa , trên Linux và một số hệ thống tệp, bạn có thể làm:

fallocate -l 1M nullbytes

Điều đó phân bổ không gian mà không thực sự ghi dữ liệu vào đĩa (không gian được dành riêng nhưng được đánh dấu là chưa được khởi tạo).

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

Thực sự sẽ ghi các số không vào đĩa. Đó là cách kém hiệu quả nhất, nhưng nếu bạn cần ổ đĩa của mình quay khi truy cập tệp đó, thì đó là thứ bạn muốn sử dụng.

Hoặc @ mikeerv là cách để ddtạo ra các byte NUL:

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

Một giải pháp thay thế cho GNU headkhông liên quan đến việc chỉ định kích thước khối (1M là OK, nhưng 10G chẳng hạn):

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

Hoặc để có được một thanh tiến trình:

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

Đừng sử dụng truncateđể tạo một tập tin trống được sử dụng làm khối lượng trao đổi, điều này sẽ không hoạt động! Sử dụng ddtrong trường hợp này thay thế.
Elias Probst 26/11/13

1
@EliasProbst, thay vào đó , sao chép ITYM từ / dev / zero , không sử dụng tệp thưa . ddcó thể tạo các tập tin thưa thớt như tôi đã chỉ ra.
Stéphane Chazelas

2
fallocate là cách tốt nhất và nhanh chóng để tạo ra bởi vì nó giữ không gian và làm cho nó nhanh nhưng nó không bận tâm để ghi bất cứ điều gì ( stackoverflow.com/questions/257844/... )
curratore

... Hoặc bs=1kx1k. Hoặc <&1 dd bs=1kx1k conv=sync,noerror count="$rpt" | cat >filecho các chữ viết vào đĩa. Tuy nhiên, không phải 100% về mức độ hiệu quả có thể bị mất khi buộc lỗi đọc.
mikeerv

27
dd if=/dev/zero of=/var/tmp/nullbytes count=1 bs=1M
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.