Đối với mục đích thử nghiệm, tôi phải tạo một tệp có kích thước nhất định (để kiểm tra giới hạn tải lên).
Lệnh tạo tệp có kích thước nhất định trên Linux là gì?
Đối với mục đích thử nghiệm, tôi phải tạo một tệp có kích thước nhất định (để kiểm tra giới hạn tải lên).
Lệnh tạo tệp có kích thước nhất định trên Linux là gì?
Câu trả lời:
dd if=/dev/zero of=upload_test bs=file_size count=1
Trong trường hợp file_size
là kích thước của tập tin thử nghiệm của bạn trong byte
dd
có giới hạn 2 ^ 32 cho các giá trị của nó, vì vậy để tạo tệp lớn hơn 4 GB, có một mẹo : dd if=/dev/zero of=test bs=1M count=<size in megabytes>
.
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
Nó cần phải đượ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. Một tệp thưa là một trong đó các đơn vị phân bổ tạo nên tệp không thực sự được phân bổ cho đến khi sử dụng. Tuy nhiên, siêu dữ liệu cho tệp sẽ chiếm một khoảng không gian đáng kể nhưng có thể không ở 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 để biết thêm thông tin vì có những ưu điểm và nhược điểm đối với loại tệp này. Một tệp không thưa thớt có các khối (đơ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 truncate
sẽ không đặt nội dung của tệp thành một giá trị được chỉ định như dd
, thay vào đó, nội dung của tệp được phân bổ có fallocate
hoặc truncate
có thể là bất kỳ giá trị rác nào tồn tại trong các đơn vị được phân bổ trong quá trình tạo và hành vi này có thể hoặc không được mong muốn. Tốc dd
độ chậm nhất vì nó thực sự ghi giá trị hoặc khối dữ liệu vào toàn bộ luồng tệp như được chỉ định với các tùy chọn dòng lệnh của nó.
Hành vi này có thể 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 thông số kỹ thuật nào. Do đó, nên thực hiện nghiên cứu thích hợp để đảm bảo sử dụng phương pháp thích hợp.
truncate
. Nó tạo ra một tệp có kích thước bằng không bằng cú pháp ở trên. 'Trang man' cho fallocate
biết rằng các tệp mà nó tạo ra đầy trống space
thay vì dữ liệu. Có vẻ như 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 tệp 1G".
brew install coreutils
. Điều này sẽ thêm một g ở phía trước lệnh, vì vậy bạn phải chạy nó như thế này : gtruncate -s 10G foo
. Hi vọng điêu nay co ich!
NTFS
phân vùng.
Chỉ cần theo dõi bài đăng của Tom , bạn cũng có thể sử dụng dd để tạo các tệp thưa thớt:
dd if=/dev/zero of=the_file bs=1 count=0 seek=12345
Điều này sẽ tạo ra một tệp có "lỗ hổng" trong hầu hết các bản không trộn - 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 đó.
count=0
, bs * seek
trở thành kích thước tệp
Trên OSX (và Solaris, rõ ràng), mkfile
lệnh cũng có sẵn:
mkfile 10g big_file
Điều này tạo ra một tệp 10 GB có tên "big_file". Tìm thấy phương pháp này ở đây.
truncate
và fallocate
lệnh không khả dụng. dd
cũng hoạt động như mô tả ở trên mặc dù nó m
cho megabyte, không phải M
.
Sử dụng lệnh này:
dd if = $ INPUT-FILE of = $ OUTPUT-FILE bs = $ BLOCK-SIZE đếm = $ NUM-BLOCKS
Để tạo một tệp lớn (trống), đặt $INPUT-FILE=/dev/zero
.
Tổng kích thước của tập tin sẽ được $BLOCK-SIZE * $NUM-BLOCKS
.
Tập tin mới được tạo sẽ được $OUTPUT-FILE
.
Bạn có thể làm điều đó theo chương 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 vào bộ nhớ.
sử dụng lệnh sau để kiểm tra xem tệp có đúng kích cỡ không:
# du -B1 --apparent-size /tmp/foo.txt
Hãy cẩn thận:
# du /tmp/foo.txt
có thể sẽ in 0 vì nó được phân bổ dưới dạng tệp thưa nếu được hệ thống tệp của bạn hỗ trợ.
xem thêm: người đàn ông 2 mở và người đàn ông 2 cắt ngắn
Một số câu trả lời có bạn sử dụng /dev/zero
cho 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, đây có thể không phải là ý tưởng tốt nhất nếu ứng dụng của bạn thực hiện bất kỳ thao tác nén nào, một tệp chứa đầy các số không nén thực sự tốt. Sử dụng lệnh này để tạo tập tin
dd if=/dev/zero of=upload_test bs=10000 count=1
Tôi có thể nén upload_test
xuống khoảng 200 byte. Vì vậy, bạn có thể đặt mình vào tình huống mà bạn nghĩ rằng việc tải lên tệp 10KB nhưng thực tế nó sẽ ít hơn nhiều.
Những gì tôi đề nghị là 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.
/dev/zero
, vậy /dev/urandom
là tốt.
dd if=/dev/zero of=my_file.txt count=12345
Có rất nhiều câu trả lời, nhưng không có câu trả lời độc đáo nào khác có thể được thực hiện. Nhìn vào trang man cho 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 chứa đầy số không, có kích thước 20 megabyte:
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 chứa đầ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 là
dd if=/dev/zero of=/tmp/zero_1000bytes_data_file.bin bs=1000 count=1
Như lệnh shell:
< /dev/zero head -c 1048576 > output
Sử dụng fallocate
nếu bạn không muốn đợi đĩa.
Thí dụ:
fallocate -l 100G BigFile
Sử dụng:
Usage:
fallocate [options] <filename>
Preallocate space to, or deallocate space from a file.
Options:
-c, --collapse-range remove a range from the file
-d, --dig-holes detect zeroes and replace with holes
-i, --insert-range insert a hole at range, shifting existing data
-l, --length <num> length for range operations, in bytes
-n, --keep-size maintain the apparent size of the file
-o, --offset <num> offset for range operations, in bytes
-p, --punch-hole replace a range with a hole (implies -n)
-z, --zero-range zero and ensure allocation of a range
-x, --posix use posix_fallocate(3) instead of fallocate(2)
-v, --verbose verbose mode
-h, --help display this help
-V, --version display version