Làm thế nào tôi có thể điền một tệp với dữ liệu ngẫu nhiên?


124

Làm cách nào tôi có thể tạo một tệp mới và điền vào nó với dữ liệu ngẫu nhiên trị giá 1 Gigabyte? Tôi cần điều này để kiểm tra một số phần mềm.

Tôi muốn sử dụng /dev/randomhoặc /dev/urandom.


74
Mở vivới vi -w randomfilevà yêu cầu ai đó chưa từng thấy viđể thoát khỏi chương trình. ;)
tự đại diện

1
Chỉ cần đến bình luận như trên từ bài đăng trên Facebook! facebook.com/ProgrammersCreateLife/photos/a.241809332534619/ory
Parixit

Câu trả lời:


171

Trên hầu hết các đơn vị:

head -c 1G </dev/urandom >myfile

Nếu bạn headkhông hiểu Ghậu tố, bạn có thể chỉ định kích thước theo byte:

head -c 1073741824 </dev/urandom >myfile

Nếu bạn headkhông hiểu -ctùy chọn (nó phổ biến nhưng không phải POSIX; bạn có thể có OpenBSD):

dd bs=1024 count=1048576 </dev/urandom >myfile

Không sử dụng /dev/randomtrên Linux, sử dụng /dev/urandom.


1
Đối với những gì nó có giá trị, headkhông hiểu -ctrên máy Solaris 10 của tôi.
rahmu

2
Thú vị mà headcó thể đọc /dev/urandom, nhưng tailkhông thể.
Stefan Lasiewski

22
@StefanLasiewski tailtrước tiên cố gắng đi đến cuối tệp đầu vào, sẽ mất mãi mãi (theo nghĩa đen).
Gilles

À, như 'tail / dev / infinite`, nếu có một thiết bị như vậy.
Stefan Lasiewski

3
@StefanLasiewski Bạn /dev/zerocũng vậy, nếu bạn không thích sự đa dạng.
Gilles

35

Giả sử rằng dữ liệu giả ngẫu nhiên là đủ, dd if=/dev/urandom of=target-file bs=1M count=1000sẽ làm những gì bạn muốn.

dd (1) sẽ đọc các khối dữ liệu từ tệp đầu vào và ghi chúng vào tệp đầu ra. Ngôn ngữ dòng lệnh hơi kỳ quặc, nhưng nó là một trong những công cụ thực sự hữu ích đáng để nắm vững những điều cơ bản.

Trong trường hợp ifnày là tệp đầu vào, oflà tệp đầu ra, bslà "kích thước khối" - và tôi đã sử dụng phần mở rộng GNU để đặt kích thước thuận tiện hơn. (Bạn cũng có thể sử dụng 1048576 nếu ddkhông có phần mở rộng GNU.) countLà số khối để đọc ifvà ghi vào of.

/dev/urandomlà một lựa chọn tốt hơn /dev/randombecuase, trên Linux, nó sẽ quay trở lại dữ liệu giả ngẫu nhiên mạnh thay vì chặn khi dữ liệu ngẫu nhiên thực sự cạn kiệt.

Bạn cũng có thể muốn xem http://www.random.org/ như một đường dẫn khác để nhận một số dữ liệu ngẫu nhiên mà không phải tự tạo dữ liệu.


3
Một lưu ý - thông số kỹ thuật đơn vị như 1Mkhông có sẵn trong mọi ddbiến thể tiêu chuẩn . Nếu phiên bản của bạn ddbị ảnh hưởng, sử dụng bs=1048576.
Chris Down

4
Lệnh ví dụ sẽ tạo một tệp có số lượng 1.000.000 khối mỗi kích thước 1 MB. Đó là khoảng 1 TB (1M x 1MB), không phải 1 GB (sẽ là 1K x 1MB). Bên cạnh đó, đến một điểm, tăng kích thước khối và giảm số lượng khối có xu hướng mang lại thông lượng tốt hơn cho một lượng dữ liệu đầu ra nhất định.
một CVn

2
while true;do head /dev/urandom | tr -dc A-Za-z0-9;done | head -c 5000K | tee  5000kb

Đã sử dụng điều này để tạo dữ liệu ký tự ngẫu nhiên 5MB. Nếu bạn cần kích thước khác nhau, thay đổi -cgiá trị của đầu, thay đổi tên outfile, thực thi và đợi cho đến khi thực hiện hoàn tất.

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.