2008-09-26 24 views

Trả lời

147
dd if=/dev/zero of=upload_test bs=file_size count=1 

đâu file_size là kích thước của tập tin thử nghiệm của bạn trong byte

+0

Ồ, điều đó có thể hiệu quả hơn cách tiếp cận của tôi bởi vì nó thực hiện tất cả trong một khối. Ý tưởng tốt. –

+9

Trên thực tế, việc sử dụng một khối lượng lớn sẽ thực hiện tồi tệ hơn nhiều khi nó trở nên rất lớn, vì nó sẽ phân bổ và đọc số tiền đó vào bộ nhớ trước khi viết. Nếu điều này là somethig như bs = 4GiB bạn có thể sẽ kết thúc trao đổi. – Brian

+0

Điều gì sẽ xảy ra nếu bạn sử dụng một tệp làm mẫu và sao chép phần đầu của nó (với 'head -c file_size> mong_file') hoặc kết thúc của nó (với' đuôi -c file_size> mong_file')? Nó sẽ nhanh hơn? Nó cũng sẽ là "ngẫu nhiên". – Carcamano

19

Sử dụng lệnh này:

 
dd if=$INPUT-FILE of=$OUTPUT-FILE bs=$BLOCK-SIZE count=$NUM-BLOCKS 

Để tạo (trống) tập tin lớn, thiết $INPUT-FILE=/dev/zero.
Tổng kích thước của tệp sẽ là $BLOCK-SIZE * $NUM-BLOCKS.
Tệp mới được tạo sẽ là $OUTPUT-FILE.

+0

Tại sao bạn đặt câu hỏi? –

+8

Tôi đã phải trả lời câu hỏi của Google, vì vậy tôi đặt nó ở đây, vì vậy nó có thể được thảo luận và cập nhật ... bạn biết đấy, điểm của toàn bộ trang web? – Grundlefleck

+2

Tôi biết mọi người đang bỏ phiếu @Grundlefleck cho XP whoring, nhưng anh ta có một điểm - một trong những cách để sử dụng trang web này như được hình dung bởi Jeff và Joel là đặt một câu hỏi và câu trả lời cho một cái gì đó bạn vừa phát hiện ra. –

9
dd if=/dev/zero of=my_file.txt count=12345 
+4

Hãy nhớ rằng kích thước khối mặc định của dd là 512 byte, vì vậy lệnh này sẽ tạo một tệp có kích thước 12345 * 512 byte. –

10

bạn có thể làm:

[[email protected]:~]$ perl -e 'print "\0" x 100' > filename.ext 

đâu bạn thay thế 100 với số byte mà bạn muốn viết.

+0

Và byte điền thực tế là tốt. Tôi cần "\ xff" và hoạt động tốt. Cảm ơn! :) – Ray

37

Chỉ cần theo dõi Tom's bưu điện, bạn có thể sử dụng dd để tạo tập tin thưa thớt cũng như:

dd if=/dev/zero of=the_file bs=1 count=0 seek=12345 

này sẽ tạo một tệp có "lỗ hổng" trong nó trên hầu hết các bản sao - dữ liệu sẽ không thực sự được ghi vào đĩa hoặc chiếm bất kỳ khoảng trắng nào cho đến khi một cái gì đó khác 0 được ghi vào đó.

+0

Số đếm = 0 tránh phải trừ một byte từ kích thước tệp. – andrewdotn

+0

Vì vậy, nó. Cảm ơn - Tôi đã cập nhật nó. – Brian

+3

với 'count = 0',' bs * seek' trở thành kích thước tập tin – Jayen

16

Bạn có thể làm điều đó cách lập trình:

#include <unistd.h> 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h> 
#include <stdlib.h> 

int main() { 
    int fd = creat("/tmp/foo.txt", 0644); 
    ftruncate(fd, SIZE_IN_BYTES); 
    close(fd); 
    return 0; 
} 

Cách tiếp cận này đặc biệt hữu ích để sau đó mmap tập tin vào bộ nhớ.

sử dụng lệnh sau để kiểm tra xem các tập tin có kích thước chính xác:

# du -B1 --apparent-size /tmp/foo.txt 

Hãy cẩn thận:

# du /tmp/foo.txt 

lẽ sẽ in bởi vì nó được phân bổ như Sparse file nếu được hỗ trợ bởi hệ thống tập tin của bạn.

also see: man 2 openman 2 truncate

-1

Tôi cho rằng cách tiếp cận hiệu quả nhất sẽ bao gồm việc tạo ra các tập tin sử dụng open (với O_CREATO_WRONLY cờ, trừ khi bạn muốn đọc từ tập tin trong cùng một chương trình) và thiết lập kích thước với ftruncate.

18

Ngày OSX (và Solaris, rõ ràng), lệnh mkfile có sẵn cũng như:

mkfile 10g big_file 

Điều này làm cho một tập tin 10 GB có tên là "big_file".Tìm thấy phương pháp này here.

+0

Điều này rất hữu ích cho các tình huống như OS X, trong đó các lệnh 'truncate' và' fallocate' không khả dụng. 'dd' cũng hoạt động như mô tả ở trên mặc dù nó là' m' cho megabyte, không phải 'M'. – user535673

130

Xin vui lòng, hiện đại là dễ dàng hơn và nhanh hơn. Trên Linux, (chọn một)

truncate -s 10G foo 
fallocate -l 5G bar 

cần được tuyên bố rằng truncate trên một hệ thống tập tin hỗ trợ file thưa thớt sẽ tạo ra một tập tin thưa thớt và fallocate sẽ không. Tệp thưa thớt là tệp nơi đơn vị phân bổ tạo thành tệp không phải là thực tế được phân bổ cho đến khi sử dụng. Siêu dữ liệu cho tệp sẽ tuy nhiên chiếm một số không gian đáng kể nhưng có thể không có vị trí gần kích thước thực của tệp. Bạn nên tham khảo tài nguyên về các tệp thưa thớt để biết thêm thông tin vì có những lợi thế và bất lợi đối với loại tệp này. Một tệp không thưa thớt có các khối của nó (các đơn vị phân bổ) được phân bổ trước thời hạn có nghĩa là không gian được dành riêng cho đến khi hệ thống tệp nhìn thấy nó. Ngoài ra fallocate cũng không phải truncate sẽ không đặt nội dung của tệp thành giá trị được chỉ định nhưdd, thay vào đó nội dung của tệp được phân bổ với fallocate hoặc truncate có thể là bất kỳ giá trị thùng rác nào tồn tại trong đơn vị được phân bổ trong quá trình tạo và hành vi này có thể hoặc có thể không được mong muốn. dd là chậm nhất vì nó thực sự ghi giá trị hoặc đoạn dữ liệu vào toàn bộ luồng tệp như được chỉ định với tùy chọn dòng lệnh của nó.

Hành vi này có khả năng khác nhau - tùy thuộc vào hệ thống tệp được sử dụng và sự phù hợp của hệ thống tệp đó với bất kỳ tiêu chuẩn hoặc đặc điểm kỹ thuật nào. Vì vậy nó được khuyến cáo rằng nghiên cứu thích hợp được thực hiện để đảm bảo rằng phương pháp thích hợp được sử dụng.

+0

Tôi đã thử 'truncate'. Nó tạo ra một tệp có kích thước bằng không bằng cách sử dụng cú pháp ở trên.'Trang người đàn ông' cho 'fallocate' nói rằng các tệp mà nó tạo ra chứa đầy' khoảng trống' trống hơn là dữ liệu. Nó xuất hiện rằng nó sẽ không hữu ích cho một số trường hợp dự kiến ​​như "mất bao lâu để sao chép một tập tin 1G". –

+6

bị bỏ rơi dường như làm việc tốt cho tôi. Nó tạo ra một tệp có kích thước phù hợp. –

+4

Đây là câu trả lời hay nhất cho câu hỏi này. Các truncate/fallocate không mất nhiều thời gian, bởi vì nó không viết tất cả các khối của tập tin. Nhưng, nếu bạn sau đó tải lên tệp kết quả ở đâu đó, nó sẽ đọc số 0 cho toàn bộ điều. –

3

Như lệnh shell:

< /dev/zero head -c 1048576 > output 
8

Một số các câu trả lời bạn đã sử dụng /dev/zero cho các nguồn dữ liệu của bạn. Nếu tốc độ tải lên mạng thử nghiệm của bạn tăng lên, đây có thể không phải là ý tưởng tốt nhất nếu ứng dụng của bạn đang thực hiện bất kỳ nén nào, một tệp chứa đầy số không nén thực sự là tốt nhất là. Sử dụng lệnh này để tạo tệp

dd if=/dev/zero of=upload_test bs=10000 count=1 

Tôi có thể nén upload_test xuống còn khoảng 200 byte. Vì vậy, bạn có thể đặt mình vào tình huống mà bạn cho rằng bạn đang tải lên tệp 10KB nhưng thực tế nó sẽ ít hơn nhiều.

Những gì tôi đề xuất đang sử dụng /dev/urandom thay vì /dev/zero. Tôi không thể nén đầu ra của /dev/urandom rất nhiều ở tất cả.

+0

Hệ thống nhúng của tôi không có '/ dev/zero', vì vậy'/dev/urandom' là tốt. –

3

Có rất nhiều câu trả lời, nhưng không có câu trả lời nào giải thích rõ ràng những gì khác có thể được thực hiện. Nhìn vào man pages for dd, có thể xác định rõ hơn kích thước của tệp.

Điều này sẽ tạo /tmp/zero_big_data_file.bin điền với số không, có kích thước 20 MB:

dd if=/dev/zero of=/tmp/zero_big_data_file.bin bs=1M count=20 

Điều này sẽ tạo/tmp/zero_1000bytes_data_file.bin đầy số không, có kích thước 1000 byte:

dd if=/dev/zero of=/tmp/zero_1000bytes_data_file.bin bs=1kB count=1 

hoặc

dd if=/dev/zero of=/tmp/zero_1000bytes_data_file.bin bs=1000 count=1 

  • Trong tất cả các ví dụ, bs là kích thước khối, và đếm là số khối
  • BLOCKS và BYTES có thể được theo sau bởi các hậu tố nhân sau: c = 1, w = 2, b = 512, kB = 1000, K = 1024, MB = 1000 * 1000, M = 1024 * 1024, xM = M GB = 1000 * 1000 * 1000, G = 1024 * 1024 * 1024, v.v. với T, P, E, Z, Y.
2

này sẽ tạo ra 4 file văn bản MB với các nhân vật ngẫu nhiên trong thư mục hiện hành và tên của nó "4mb.txt" Bạn có thể thay đổi các thông số để tạo ra kích thước và tên gọi khác nhau.

base64 /dev/urandom | head -c 4000000 > 4mb.txt 
Các vấn đề liên quan