मैं लिनक्स में 1GB की यादृच्छिक फ़ाइल कैसे बनाऊं?


88

मैं bash खोल उपयोग कर रहा हूँ और पाइप आदेश से बाहर करना चाहते हैं openssl rand -base64 1000कमांड के लिए ddइस तरह के रूप dd if={output of openssl} of="sample.txt bs=1G count=1। मुझे लगता है कि मैं चर का उपयोग कर सकता हूं, लेकिन मैं अनिश्चित हूं कि ऐसा कैसे करना सबसे अच्छा है। मैं फ़ाइल बनाना चाहूंगा इसका कारण यह है कि मैं यादृच्छिक पाठ के साथ 1GB फ़ाइल पसंद करूंगा।

जवाबों:


130

if=आवश्यकता नहीं है, आप ddइसके बजाय कुछ पाइप कर सकते हैं :

something... | dd of=sample.txt bs=1G count=1

यह यहाँ उपयोगी नहीं होगा क्योंकि openssl randवैसे भी बाइट्स की संख्या को निर्दिष्ट करने की आवश्यकता होती है। तो आप वास्तव में जरूरत नहीं है dd- यह काम करेगा:

openssl rand -out sample.txt -base64 $(( 2**30 * 3/4 ))

1 गीगाबाइट आमतौर पर 2 30 बाइट्स होते हैं (हालांकि आप इसके बजाय 10**910 9 बाइट्स के लिए उपयोग कर सकते हैं )। * 3/4भाग Base64 भूमि के ऊपर के लिए खातों, जिससे इनकोडिंग उत्पादन 1 जीबी।

वैकल्पिक रूप से, आप उपयोग कर सकते हैं /dev/urandom, लेकिन यह OpenSSL की तुलना में थोड़ा धीमा होगा:

dd if=/dev/urandom of=sample.txt bs=1G count=1

व्यक्तिगत रूप से, मैं उपयोग bs=64M count=16या समान होगा:

dd if=/dev/urandom of=sample.txt bs=64M count=16

2
मैंने बड़ी फ़ाइलों को सुपरयूज़र . com/ questions/ 467697/… पर कंप्रेस करने के संबंध में एक प्रश्न पोस्ट किया था और उन्हें सलाह दी गई थी कि /dev/urandomएक बाइनरी फ़ाइल का उपयोग करें और एक सच्ची टेक्स्ट फ़ाइल नहीं।
मूँगफली के दाने

2
@ मूंगफली: सही; आपको कुछ इस तरह की आवश्यकता होगी dd if=/dev/urandom bs=750M count=1 | uuencode my_sample > sample.txt
स्कॉट

3
@PeanutsMonkey: कोई एक "वास्तविक दुनिया परिदृश्य" है, कुछ परिदृश्यों, पाठ के गीगाबाइट के साथ काम हो सकता है दूसरों - JPEGs के गीगाबाइट, या संकलित सॉफ्टवेयर के गीगाबाइट के साथ ... आप पाठ का एक बहुत चाहते हैं, एक डाउनलोड विकिपीडिया डंप के लिए उदाहरण।
ग्रैविटी

2
@PeanutsMonkey: इनमें ddसे 750,000,000 बाइट्स पढ़ता है /dev/urandomऔर उन्हें पाइप करता है uuencodeuuencodeइसके इनपुट को बेस 64 एनकोडिंग के रूप में एनकोड करता है (जरूरी नहीं कि अन्य कार्यक्रमों के अनुरूप हो)। दूसरे शब्दों में, यह बाइनरी डेटा को टेक्स्ट में परिवर्तित करता है। मैंने 750M का उपयोग किया क्योंकि मैंने ग्रेविटी के बयान पर भरोसा किया था कि बेस 64 एन्कोडिंग डेटा को 33,% तक बढ़ाता है, इसलिए आपको अपनी पाठ फ़ाइल में ¾ उतना ही द्विआधारी डेटा मांगना होगा।
स्कॉट

3
ध्यान दें कि अगर यह कहता है कि dd: warning: partial read (33554431 bytes); suggest iflag=fullblockयह एक छंटनी की गई फ़ाइल बनाएगा तो iflag=fullblockध्वज जोड़ें , तो यह काम करता है।
रोज़गारपैक

25

1GB.bin यादृच्छिक सामग्री फ़ाइल बनाएँ:

dd if = / dev / urandom of = 1GB.bin bs = 64M count = 16 iflag = fullblock


3
मेरे लिए, iflag=fullblockअन्य उत्तरों की तुलना में आवश्यक अतिरिक्त था।
डोजुबा

2

यदि आप वास्तव में 1GB चाहते हैं, तो आप निम्नलिखित का उपयोग कर सकते हैं:

Opensl रैंड -आउट $ testfile -base64 792917038; truncate -s-1 $ testfile

Opensl कमांड एक फ़ाइल को 1 बाइट बहुत बड़ा बनाता है। ट्रंकट कमांड ट्रिम करता है जो बाइट करता है।


वह अतिरिक्त बाइट शायद इसकी वजह से है -base64। इसे हटाने से फ़ाइल का आकार सही होगा।
डैनियल

-1

इस स्क्रिप्ट को आज़माएं।

#!/bin/bash
openssl rand -base64 1000 | dd of=sample.txt bs=1G count=1

यह स्क्रिप्ट तब तक काम कर सकती है जब तक आप उपयोग करने में कोई आपत्ति नहीं करते /dev/random

#!/bin/bash
dd if=/dev/random of="sample.txt bs=1G count=1"

8
मैं /dev/randomइस पर बर्बाद करने की सलाह नहीं दूंगा जब तक कि ऐसा करने का कोई बहुत अच्छा कारण न हो। /dev/urandomबहुत सस्ता है।
अंसार विचर

1
इसके अलावा, $var=(command)इस संदर्भ में मान्य सिंटैक्स नहीं है।
ग्रेविटी

@ शुद्धता - जब आप कहते हैं कि यह मान्य नहीं है, तो आपका क्या मतलब है?
मूंगफली के दाने

मेरा मतलब बिल्कुल यही है - यह गलत है।
ग्रैविटी

3
@grawity, @PeanutsMonkey: उन्होंने एक टाइपो बनाया; उसका मतलब था random=$(openssl rand -base64 1000)। हालांकि मैं यह सवाल करूंगा कि क्या bashआप एक चर के लिए एक गीगाबाइट-लंबी मान असाइन करेंगे। और यहां तक ​​कि अगर आप कहते हैं random=$(openssl rand -base64 1000), बाद में if=$randomकोई मतलब नहीं है।
स्कॉट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.