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?
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?
Câu trả lời:
Với GNU truncate
:
truncate -s 1M nullbytes
(giả sử nullbytes
khô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 dd
thay thế:
dd bs=1048576 seek=1 of=nullbytes count=0
(với một số dd
triể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 để dd
tạ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 head
khô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
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 dd
trong trường hợp này thay thế.
dd
có thể tạo các tập tin thưa thớt như tôi đã chỉ ra.
bs=1kx1k
. Hoặc <&1 dd bs=1kx1k conv=sync,noerror count="$rpt" | cat >file
cho 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.