Test amacıyla, belirli bir boyutta bir dosya oluşturmam gerekiyor (bir yükleme sınırını test etmek için).
Linux'ta belirli bir boyutta dosya oluşturma komutu nedir?
Test amacıyla, belirli bir boyutta bir dosya oluşturmam gerekiyor (bir yükleme sınırını test etmek için).
Linux'ta belirli bir boyutta dosya oluşturma komutu nedir?
Yanıtlar:
dd if=/dev/zero of=upload_test bs=file_size count=1
file_size
Test dosyanızın bayt cinsinden boyutu nerede
dd
böylece 4 GB'tan daha büyük bir dosya oluşturmak için, onun değerler için 2 ^ 32 sınırı vardır, bir numara var: dd if=/dev/zero of=test bs=1M count=<size in megabytes>
.
Lütfen modern daha kolay ve daha hızlı. Linux'ta, (birini seçin)
truncate -s 10G foo
fallocate -l 5G bar
Bu ihtiyacı olduğunu belirtti edilecek truncate
bir dosya sistemine destek seyrek dosyalar seyrek dosyası oluşturmak ve edecek fallocate
olmayacak. Bir seyrek dosya dosyasını oluşturan ayırma birimleri değil biridir aslında kullanılana kadar tahsis etti. Dosya için meta veri olacaktır ancak bazı önemli alan ancak büyük olasılıkla hiçbir yerde dosyanın gerçek boyutundan yakın sürebilir. Bu tür dosyaların avantajları ve dezavantajları olduğu için daha fazla bilgi için seyrek dosyalar hakkındaki kaynaklara başvurmalısınız. Seyrek olmayan bir dosyanın blokları (ayırma birimleri) önceden tahsis edilir, bu da alanın dosya sistemi gördüğü kadar ayrıldığı anlamına gelir. Ayrıca fallocate
ne de truncate
belirli bir değere dosyanın içeriğini ayarlamak olmayacak gibi dd
bunun yerine, oluşturma sırasında ayrılan bir dosya ile ayrılan fallocate
veya truncate
herhangi bir çöp kutusu içeriği oluşturulabilir ve bu davranış istenebilir veya istenmeyebilir. Bu dd
en yavaş olanıdır, çünkü aslında komut satırı seçenekleriyle belirtildiği gibi veri değerini veya yığınını tüm dosya akışına yazar.
Bu davranış potansiyel olarak farklı olabilir - kullanılan dosya sistemine ve bu dosya sisteminin herhangi bir standart veya spesifikasyona uygunluğuna bağlı olarak. Bu nedenle, uygun yöntemin kullanıldığından emin olmak için uygun araştırmaların yapılması tavsiye edilir.
truncate
. Yukarıdaki sözdizimini kullanarak sıfır boyutlu bir dosya oluşturdu. 'Man sayfası', fallocate
oluşturduğu dosyaların space
veri yerine boş dolu olduğunu söylüyor . Görünüşe göre "1G dosyasını kopyalamak ne kadar zaman alır" gibi bazı beklenen durumlar için yararlı olmaz.
brew install coreutils
. Bu katacak g komutunun önünde, bu yüzden bu şekilde çalıştırmak zorunda: gtruncate -s 10G foo
. Bu yardımcı olur umarım!
NTFS
bölüm üzerinde çalışmıyor .
Sadece Tom'un gönderisini takip etmek için, seyrek dosyalar oluşturmak için de dd'yi kullanabilirsiniz:
dd if=/dev/zero of=the_file bs=1 count=0 seek=12345
Bu, çoğu unix üzerinde içinde bir "delik" bulunan bir dosya oluşturur - veriler aslında diske yazılmaz veya içine sıfır dışında bir şey yazılana kadar herhangi bir yer kaplamaz.
count=0
, bs * seek
dosya boyutu olur
OSX'te (ve Solaris'de, görünüşe göre), mkfile
komut da kullanılabilir:
mkfile 10g big_file
Bu, "big_file" adlı 10 GB'lık bir dosya yapar. Bu yaklaşımı burada buldum.
truncate
ve fallocate
komutlarının kullanılamadığı OS X gibi durumlar için kullanışlıdır . dd
Ayrıca m
megabayt için olmasına rağmen yukarıda açıklandığı gibi çalışır M
.
Bu komutu kullanın:
gg if = $ INPUT-FILE / $ $ OUTPUT-FILE bs = $ BLOCK-SIZE sayısı = $ NUM-BLOK
Büyük (boş) bir dosya oluşturmak için ayarlayın $INPUT-FILE=/dev/zero
.
Dosyanın toplam boyutu olacaktır $BLOCK-SIZE * $NUM-BLOCKS
.
Yeni dosya oluşturulacak $OUTPUT-FILE
.
Programlı olarak yapabilirsiniz:
#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;
}
Bu yaklaşım, daha sonra dosyayı belleğe eşlemek için özellikle yararlıdır .
dosyanın doğru boyutta olup olmadığını kontrol etmek için aşağıdaki komutu kullanın:
# du -B1 --apparent-size /tmp/foo.txt
Dikkatli ol:
# du /tmp/foo.txt
dosya sisteminiz tarafından destekleniyorsa Sparse dosyası olarak ayrıldığından muhtemelen 0 yazdırır .
ayrıca bakınız: adam 2 açık ve adam 2 kesik
Bu yanıtlardan bazıları /dev/zero
verilerinizin kaynağı için kullanılır. Test ağınızın yükleme hızları, uygulamanız herhangi bir sıkıştırma yapıyorsa, bu en iyi fikir olmayabilir, sıfırlarla dolu bir dosya gerçekten iyi sıkıştırır . Dosyayı oluşturmak için bu komutu kullanma
dd if=/dev/zero of=upload_test bs=10000 count=1
upload_test
Yaklaşık 200 bayta kadar sıkıştırabilirim . Böylece kendinizi 10KB dosyası yüklediğinizi düşündüğünüz bir duruma sokabilirsiniz, ancak aslında çok daha az olurdu.
Ne önermek /dev/urandom
yerine kullanmaktır /dev/zero
. Çıktısını /dev/urandom
çok fazla sıkıştıramadım .
/dev/zero
, bu yüzden /dev/urandom
iyi.
dd if=/dev/zero of=my_file.txt count=12345
Çok sayıda cevap var, ama hiçbiri başka neler yapılabileceğini güzelce açıklamadı. Dd için man sayfalarına bakıldığında , bir dosyanın boyutunu daha iyi belirlemek mümkündür.
Bu, 20 megabayt büyüklüğünde sıfırlarla dolu /tmp/zero_big_data_file.bin dosyasını oluşturacak:
dd if=/dev/zero of=/tmp/zero_big_data_file.bin bs=1M count=20
Bu, 1000 bayt büyüklüğünde sıfırlarla dolu /tmp/zero_1000bytes_data_file.bin dosyasını oluşturacak:
dd if=/dev/zero of=/tmp/zero_1000bytes_data_file.bin bs=1kB count=1
veya
dd if=/dev/zero of=/tmp/zero_1000bytes_data_file.bin bs=1000 count=1
Shell komutu olarak:
< /dev/zero head -c 1048576 > output
Kullanım fallocate
disk beklemek istemiyorsanız.
Misal:
fallocate -l 100G BigFile
Kullanımı:
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