2008-09-26 10 views
116

परीक्षण उद्देश्यों के लिए मुझे एक निश्चित आकार की फ़ाइल उत्पन्न करना है (अपलोड सीमा का परीक्षण करने के लिए)।लिनक्स में किसी दिए गए आकार के साथ फ़ाइल कैसे बनाएं?

लिनक्स पर किसी निश्चित आकार की फ़ाइल बनाने का आदेश क्या है?

+0

बड़े आकार http://stackoverflow.com/questions/257844/quickly-create-a-large-file-on-a-linux-system –

उत्तर

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

कहाँ file_size बाइट्स

+0

ओह, यह मेरे दृष्टिकोण से अधिक कुशल हो सकता है क्योंकि यह सब एक ब्लॉक में करता है। अच्छा विचार। –

+9

असल में, एक विशाल ब्लॉजिज का उपयोग करके यह बहुत बड़ा हो जाता है जब यह बहुत बड़ा हो जाता है, क्योंकि यह लिखने से पहले स्मृति में आवंटित और पढ़ा जाएगा। यदि यह बीएस = 4 जीआईबी की तरह somethig है तो आप शायद स्वैपिंग समाप्त हो जाएगा। – Brian

+0

यदि आप टेम्पलेट के रूप में फ़ाइल का उपयोग करते हैं और इसकी शुरुआत की प्रतिलिपि बनाते हैं ('head -c file_size> वांछित_फाइल' के साथ) या इसका अंत ('tail -c file_size> वांछित_फाइल' के साथ)? क्या यह तेज़ होगा? यह "यादृच्छिक" भी होगा। – Carcamano

19

इस आदेश का उपयोग करें:

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

एक बड़ा (खाली) फ़ाइल बनाने के लिए, $INPUT-FILE=/dev/zero निर्धारित किया है।
फ़ाइल का कुल आकार $BLOCK-SIZE * $NUM-BLOCKS होगा।
बनाई गई नई फ़ाइल $OUTPUT-FILE होगी।

+0

आप सवाल क्यों पूछा? –

+8

मुझे उत्तर के लिए Google होना था, इसलिए मैंने इसे यहां रखा, इसलिए इस पर चर्चा की जा सकती है और अद्यतित रखा जा सकता है ... आप जानते हैं, पूरी साइट का बिंदु? – Grundlefleck

+2

मुझे पता है कि लोग XP के लिए @Grundlefleck को वोट दे रहे हैं, लेकिन उनके पास एक बिंदु है - जेफ और जोएल द्वारा कल्पना की गई इस साइट का उपयोग करने के तरीकों में से एक है जिसे आपने अभी खोजा है उसके लिए एक प्रश्न और उत्तर देना है। –

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

याद रखें कि डीडी का डिफ़ॉल्ट ब्लॉक आकार 512 बाइट्स है, इसलिए यह आदेश आकार में 12345 * 512 बाइट्स फ़ाइल करेगा। –

10

तुम कर सकते हो:

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

कहाँ बाइट्स आप लिखा चाहते हैं की संख्या के साथ 100 की जगह।

+0

और वास्तविक भरने बाइट भी। मुझे "\ xff" चाहिए और ठीक काम करता है। धन्यवाद! :) – Ray

37

में अपने परीक्षण फ़ाइल का आकार बस Tom's पद का पालन करने के लिए है, तो आप विरल फ़ाइलों को बनाने के रूप में अच्छी तरह dd का उपयोग कर सकते हैं:

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

यह बनाएगा अधिकांश यूनिक्स पर "छेद" वाली एक फ़ाइल - डेटा वास्तव में डिस्क पर नहीं लिखा जाएगा, या किसी भी स्थान को तब तक ले जायेगा जब तक इसमें शून्य के अलावा कुछ भी लिखा न जाए।

+0

गिरना गिनती = 0 को घटाकर निकालना फ़ाइल आकार से एक बाइट। – andrewdotn

+0

तो यह करता है। धन्यवाद - मैंने इसे अपडेट किया है। – Brian

+3

'count = 0' के साथ,' bs * seek' फ़ाइल आकार – Jayen

16

आप इसे प्रोग्राम के रूप में कर सकते हैं:

#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; 
} 

यह दृष्टिकोण विशेष रूप से उपयोगी है करने के लिए बाद में mmap स्मृति में फ़ाइल।

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

सावधान::

कि फ़ाइल सही आकार की है की जाँच करने के निम्न आदेश का उपयोग

# du /tmp/foo.txt 

शायद प्रिंट होगा क्योंकि यह Sparse file अगर के रूप में आवंटित किया जाता है आपके फाइल सिस्टम द्वारा समर्थित है।

यह भी देखें: man 2 open और man 2 truncate

-1

मुझे लगता है सबसे कुशल दृष्टिकोण open का उपयोग कर फ़ाइल बनाने शामिल होगा (साथ O_CREAT और O_WRONLY झंडे, जब तक आप एक ही कार्यक्रम में फ़ाइल से पढ़ने के लिए चाहते हैं) और सेटिंग ftruncate के साथ आकार।

18

पर OSX (और Solaris, जाहिरा तौर पर), mkfile आदेश के साथ-साथ उपलब्ध है:

mkfile 10g big_file 

यह एक 10 जीबी "big_file" नाम की फ़ाइल बनाता है।इस दृष्टिकोण को मिला here.

+0

यह ओएस एक्स जैसी स्थितियों के लिए उपयोगी है जहां 'truncate' और 'fallocate' आदेश उपलब्ध नहीं हैं। 'dd' ऊपर वर्णित अनुसार भी काम करता है हालांकि यह मेगाबाइट्स के लिए' m' है, न कि 'एम'। – user535673

130

कृपया, आधुनिक आसान और तेज़ है। लिनक्स पर, (एक चुनना)

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

यह जरूरत कहा जा सकता है कि truncate एक फाइल सिस्टम स्पार्स फ़ाइलों का समर्थन स्पार्स फ़ाइल पैदा करेगा पर और fallocate नहीं होगा। एक स्पैस फ़ाइल वह है जहां फ़ाइल बनाने वाली आवंटन इकाइयां वास्तव में उपयोग किए जाने तक आवंटित नहीं होती हैं। फ़ाइल फ़ाइल के लिए मेटा-डेटा होगा हालांकि कुछ महत्वपूर्ण स्थान लेते हैं लेकिन संभवतः फ़ाइल के वास्तविक आकार के पास कहीं भी नहीं। आपको अधिक जानकारी के लिए स्पैस फ़ाइलों के बारे में संसाधनों से परामर्श लेना चाहिए क्योंकि इस प्रकार की फ़ाइल के फायदे और नुकसान हैं। एक गैर-स्पैस फ़ाइल में उसके ब्लॉक (आवंटन इकाइयां) समय से पहले आवंटित होते हैं जिसका मतलब है कि फ़ाइल आरक्षित है, जहां तक ​​फ़ाइल सिस्टम इसे देखता है। इसके अलावा fallocate और न ही truncatedd की तरह एक निर्धारित मूल्य लिए फ़ाइल की सामग्री को सेट नहीं होगा, बजाय fallocate या truncate साथ आवंटित किसी भी कचरा मूल्य है कि निर्माण के दौरान आवंटित इकाइयों में ही अस्तित्व में हो सकता है एक फ़ाइल की सामग्री और इस व्यवहार कर सकते हैं या वांछित नहीं हो सकता है। dd सबसे धीमा है क्योंकि यह वास्तव में संपूर्ण फ़ाइल स्ट्रीम में डेटा के मान या खंड को लिखता है जैसा कि इसके कमांड लाइन विकल्पों के साथ निर्दिष्ट है।

यह व्यवहार संभावित रूप से भिन्न हो सकता है - फ़ाइल सिस्टम के उपयोग और उस फ़ाइल सिस्टम के अनुरूप किसी भी मानक या विनिर्देश के अनुरूप। इसलिए यह सलाह दी जाती है कि उचित विधि का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि उचित विधि का उपयोग किया जाता है।

+0

मैंने 'truncate' की कोशिश की। इसने ऊपर वाक्यविन्यास का उपयोग करके शून्य आकार की फ़ाइल बनाई।'Fallocate' के लिए 'मैन पेज' कहता है कि जो फ़ाइलें बनाता है वह डेटा के बजाय खाली 'स्पेस' से भरे हुए हैं। ऐसा प्रतीत होता है कि यह कुछ अपेक्षित मामलों के लिए उपयोगी नहीं होगा जैसे "1 जी फ़ाइल की प्रतिलिपि बनाने में कितना समय लगता है"। –

+6

फॉलोकोक मेरे लिए ठीक काम करता प्रतीत होता है। यह एक फ़ाइल सही आकार बनाता है। –

+4

यह इस प्रश्न का सबसे अच्छा जवाब है। कटाई/फलोकेट में लंबा समय नहीं लगता है, क्योंकि यह सभी फाइल के ब्लॉक नहीं लिखता है। लेकिन, अगर आप परिणामस्वरूप फ़ाइल को कहीं भी अपलोड करना चाहते थे, तो यह पूरी चीज़ के लिए शून्य पढ़ेगा। –

3

शेल कमांड के रूप में:

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

इन उत्तरों से कुछ आप अपने डेटा के स्रोत के लिए /dev/zero का उपयोग कर रहे हैं। यदि आपका परीक्षण नेटवर्क गति अपलोड करता है, तो यह आपका सबसे अच्छा विचार नहीं हो सकता है कि आपका एप्लिकेशन कोई संपीड़न कर रहा है, शून्य से भरा फ़ाइल वास्तव में संपीड़ित करती है। फ़ाइल

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

उत्पन्न करने के लिए इस आदेश का उपयोग करते हुए मैं लगभग 200 बाइट्स के लिए नीचे upload_test सेक कर सकते हैं। तो आप खुद को ऐसी परिस्थिति में डाल सकते हैं जहां आपको लगता है कि आपका 10kB फ़ाइल अपलोड हो रहा है लेकिन यह वास्तव में बहुत कम होगा।

मेरा सुझाव है कि के बजाय /dev/urandom का उपयोग कर रहा है। मैं /dev/urandom के आउटपुट को बहुत कम नहीं कर सका।

+0

मेरे एम्बेडेड सिस्टम में '/ dev/zero' नहीं है, इसलिए'/dev/urandom' अच्छा है। –

3

बहुत सारे उत्तर हैं, लेकिन कोई भी अच्छी तरह से समझाया नहीं गया कि और क्या किया जा सकता है। man pages for dd में देख रहे हैं, फ़ाइल के आकार को बेहतर ढंग से निर्दिष्ट करना संभव है।

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

इस बनाने के लिए जा रहा है/tmp/zero_1000bytes_data_file:

यह शून्य से भर /tmp/zero_big_data_file.bin बनाने के लिए, 20 मेगाबाइट के आकार है कि जा रहा है।बिन शून्य से भरा, 1000 बाइट्स के आकार की है कि:

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

या

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

  • सभी उदाहरणों में, bs ब्लॉक आकार है, और गिनती ब्लॉक की संख्या है
  • ब्लॉकों और बीईटीईएस के बाद निम्नलिखित गुणक प्रत्यय हो सकते हैं: सी = 1, डब्ल्यू = 2, बी = 512, केबी = 1000, के = 1024, एमबी = 1000 * 1000, एम = 1024 * 1024, एक्सएम = एम जीबी = 1000 * 1000 * 1000, जी = 1024 * 1024 * 1024, और टी के लिए, पी, ई, जेड, वाई
2

यह मौजूदा निर्देशिका में यादृच्छिक पात्रों के साथ 4 एमबी पाठ फ़ाइल और उसके नाम "4mb.txt" आप पैरामीटर बदल विभिन्न आकारों और नाम उत्पन्न करने के लिए कर सकते हैं उत्पन्न होगा।

base64 /dev/urandom | head -c 4000000 > 4mb.txt