परीक्षण उद्देश्यों के लिए मुझे एक निश्चित आकार की फ़ाइल उत्पन्न करना है (अपलोड सीमा का परीक्षण करने के लिए)।लिनक्स में किसी दिए गए आकार के साथ फ़ाइल कैसे बनाएं?
लिनक्स पर किसी निश्चित आकार की फ़ाइल बनाने का आदेश क्या है?
परीक्षण उद्देश्यों के लिए मुझे एक निश्चित आकार की फ़ाइल उत्पन्न करना है (अपलोड सीमा का परीक्षण करने के लिए)।लिनक्स में किसी दिए गए आकार के साथ फ़ाइल कैसे बनाएं?
लिनक्स पर किसी निश्चित आकार की फ़ाइल बनाने का आदेश क्या है?
dd if=/dev/zero of=upload_test bs=file_size count=1
कहाँ file_size
बाइट्स
ओह, यह मेरे दृष्टिकोण से अधिक कुशल हो सकता है क्योंकि यह सब एक ब्लॉक में करता है। अच्छा विचार। –
असल में, एक विशाल ब्लॉजिज का उपयोग करके यह बहुत बड़ा हो जाता है जब यह बहुत बड़ा हो जाता है, क्योंकि यह लिखने से पहले स्मृति में आवंटित और पढ़ा जाएगा। यदि यह बीएस = 4 जीआईबी की तरह somethig है तो आप शायद स्वैपिंग समाप्त हो जाएगा। – Brian
यदि आप टेम्पलेट के रूप में फ़ाइल का उपयोग करते हैं और इसकी शुरुआत की प्रतिलिपि बनाते हैं ('head -c file_size> वांछित_फाइल' के साथ) या इसका अंत ('tail -c file_size> वांछित_फाइल' के साथ)? क्या यह तेज़ होगा? यह "यादृच्छिक" भी होगा। – Carcamano
इस आदेश का उपयोग करें:
dd if=$INPUT-FILE of=$OUTPUT-FILE bs=$BLOCK-SIZE count=$NUM-BLOCKS
एक बड़ा (खाली) फ़ाइल बनाने के लिए, $INPUT-FILE=/dev/zero
निर्धारित किया है।
फ़ाइल का कुल आकार $BLOCK-SIZE * $NUM-BLOCKS
होगा।
बनाई गई नई फ़ाइल $OUTPUT-FILE
होगी।
आप सवाल क्यों पूछा? –
मुझे उत्तर के लिए Google होना था, इसलिए मैंने इसे यहां रखा, इसलिए इस पर चर्चा की जा सकती है और अद्यतित रखा जा सकता है ... आप जानते हैं, पूरी साइट का बिंदु? – Grundlefleck
मुझे पता है कि लोग XP के लिए @Grundlefleck को वोट दे रहे हैं, लेकिन उनके पास एक बिंदु है - जेफ और जोएल द्वारा कल्पना की गई इस साइट का उपयोग करने के तरीकों में से एक है जिसे आपने अभी खोजा है उसके लिए एक प्रश्न और उत्तर देना है। –
dd if=/dev/zero of=my_file.txt count=12345
याद रखें कि डीडी का डिफ़ॉल्ट ब्लॉक आकार 512 बाइट्स है, इसलिए यह आदेश आकार में 12345 * 512 बाइट्स फ़ाइल करेगा। –
तुम कर सकते हो:
[[email protected]:~]$ perl -e 'print "\0" x 100' > filename.ext
कहाँ बाइट्स आप लिखा चाहते हैं की संख्या के साथ 100 की जगह।
और वास्तविक भरने बाइट भी। मुझे "\ xff" चाहिए और ठीक काम करता है। धन्यवाद! :) – Ray
में अपने परीक्षण फ़ाइल का आकार बस Tom's पद का पालन करने के लिए है, तो आप विरल फ़ाइलों को बनाने के रूप में अच्छी तरह dd का उपयोग कर सकते हैं:
dd if=/dev/zero of=the_file bs=1 count=0 seek=12345
यह बनाएगा अधिकांश यूनिक्स पर "छेद" वाली एक फ़ाइल - डेटा वास्तव में डिस्क पर नहीं लिखा जाएगा, या किसी भी स्थान को तब तक ले जायेगा जब तक इसमें शून्य के अलावा कुछ भी लिखा न जाए।
गिरना गिनती = 0 को घटाकर निकालना फ़ाइल आकार से एक बाइट। – andrewdotn
तो यह करता है। धन्यवाद - मैंने इसे अपडेट किया है। – Brian
'count = 0' के साथ,' bs * seek' फ़ाइल आकार – Jayen
आप इसे प्रोग्राम के रूप में कर सकते हैं:
#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
मुझे लगता है सबसे कुशल दृष्टिकोण open
का उपयोग कर फ़ाइल बनाने शामिल होगा (साथ O_CREAT
और O_WRONLY
झंडे, जब तक आप एक ही कार्यक्रम में फ़ाइल से पढ़ने के लिए चाहते हैं) और सेटिंग ftruncate के साथ आकार।
पर OSX (और Solaris, जाहिरा तौर पर), mkfile
आदेश के साथ-साथ उपलब्ध है:
mkfile 10g big_file
यह एक 10 जीबी "big_file" नाम की फ़ाइल बनाता है।इस दृष्टिकोण को मिला here.
यह ओएस एक्स जैसी स्थितियों के लिए उपयोगी है जहां 'truncate' और 'fallocate' आदेश उपलब्ध नहीं हैं। 'dd' ऊपर वर्णित अनुसार भी काम करता है हालांकि यह मेगाबाइट्स के लिए' m' है, न कि 'एम'। – user535673
कृपया, आधुनिक आसान और तेज़ है। लिनक्स पर, (एक चुनना)
truncate -s 10G foo
fallocate -l 5G bar
यह जरूरत कहा जा सकता है कि truncate
एक फाइल सिस्टम स्पार्स फ़ाइलों का समर्थन स्पार्स फ़ाइल पैदा करेगा पर और fallocate
नहीं होगा। एक स्पैस फ़ाइल वह है जहां फ़ाइल बनाने वाली आवंटन इकाइयां वास्तव में उपयोग किए जाने तक आवंटित नहीं होती हैं। फ़ाइल फ़ाइल के लिए मेटा-डेटा होगा हालांकि कुछ महत्वपूर्ण स्थान लेते हैं लेकिन संभवतः फ़ाइल के वास्तविक आकार के पास कहीं भी नहीं। आपको अधिक जानकारी के लिए स्पैस फ़ाइलों के बारे में संसाधनों से परामर्श लेना चाहिए क्योंकि इस प्रकार की फ़ाइल के फायदे और नुकसान हैं। एक गैर-स्पैस फ़ाइल में उसके ब्लॉक (आवंटन इकाइयां) समय से पहले आवंटित होते हैं जिसका मतलब है कि फ़ाइल आरक्षित है, जहां तक फ़ाइल सिस्टम इसे देखता है। इसके अलावा fallocate
और न ही truncate
dd
की तरह एक निर्धारित मूल्य लिए फ़ाइल की सामग्री को सेट नहीं होगा, बजाय fallocate
या truncate
साथ आवंटित किसी भी कचरा मूल्य है कि निर्माण के दौरान आवंटित इकाइयों में ही अस्तित्व में हो सकता है एक फ़ाइल की सामग्री और इस व्यवहार कर सकते हैं या वांछित नहीं हो सकता है। dd
सबसे धीमा है क्योंकि यह वास्तव में संपूर्ण फ़ाइल स्ट्रीम में डेटा के मान या खंड को लिखता है जैसा कि इसके कमांड लाइन विकल्पों के साथ निर्दिष्ट है।
यह व्यवहार संभावित रूप से भिन्न हो सकता है - फ़ाइल सिस्टम के उपयोग और उस फ़ाइल सिस्टम के अनुरूप किसी भी मानक या विनिर्देश के अनुरूप। इसलिए यह सलाह दी जाती है कि उचित विधि का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि उचित विधि का उपयोग किया जाता है।
मैंने 'truncate' की कोशिश की। इसने ऊपर वाक्यविन्यास का उपयोग करके शून्य आकार की फ़ाइल बनाई।'Fallocate' के लिए 'मैन पेज' कहता है कि जो फ़ाइलें बनाता है वह डेटा के बजाय खाली 'स्पेस' से भरे हुए हैं। ऐसा प्रतीत होता है कि यह कुछ अपेक्षित मामलों के लिए उपयोगी नहीं होगा जैसे "1 जी फ़ाइल की प्रतिलिपि बनाने में कितना समय लगता है"। –
फॉलोकोक मेरे लिए ठीक काम करता प्रतीत होता है। यह एक फ़ाइल सही आकार बनाता है। –
यह इस प्रश्न का सबसे अच्छा जवाब है। कटाई/फलोकेट में लंबा समय नहीं लगता है, क्योंकि यह सभी फाइल के ब्लॉक नहीं लिखता है। लेकिन, अगर आप परिणामस्वरूप फ़ाइल को कहीं भी अपलोड करना चाहते थे, तो यह पूरी चीज़ के लिए शून्य पढ़ेगा। –
शेल कमांड के रूप में:
< /dev/zero head -c 1048576 > output
इन उत्तरों से कुछ आप अपने डेटा के स्रोत के लिए /dev/zero
का उपयोग कर रहे हैं। यदि आपका परीक्षण नेटवर्क गति अपलोड करता है, तो यह आपका सबसे अच्छा विचार नहीं हो सकता है कि आपका एप्लिकेशन कोई संपीड़न कर रहा है, शून्य से भरा फ़ाइल वास्तव में संपीड़ित करती है। फ़ाइल
dd if=/dev/zero of=upload_test bs=10000 count=1
उत्पन्न करने के लिए इस आदेश का उपयोग करते हुए मैं लगभग 200 बाइट्स के लिए नीचे upload_test
सेक कर सकते हैं। तो आप खुद को ऐसी परिस्थिति में डाल सकते हैं जहां आपको लगता है कि आपका 10kB फ़ाइल अपलोड हो रहा है लेकिन यह वास्तव में बहुत कम होगा।
मेरा सुझाव है कि के बजाय /dev/urandom
का उपयोग कर रहा है। मैं /dev/urandom
के आउटपुट को बहुत कम नहीं कर सका।
मेरे एम्बेडेड सिस्टम में '/ dev/zero' नहीं है, इसलिए'/dev/urandom' अच्छा है। –
बहुत सारे उत्तर हैं, लेकिन कोई भी अच्छी तरह से समझाया नहीं गया कि और क्या किया जा सकता है। 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
यह मौजूदा निर्देशिका में यादृच्छिक पात्रों के साथ 4 एमबी पाठ फ़ाइल और उसके नाम "4mb.txt" आप पैरामीटर बदल विभिन्न आकारों और नाम उत्पन्न करने के लिए कर सकते हैं उत्पन्न होगा।
base64 /dev/urandom | head -c 4000000 > 4mb.txt
बड़े आकार http://stackoverflow.com/questions/257844/quickly-create-a-large-file-on-a-linux-system –