सवाल एन / यादृच्छिक वर्णों में / dev / urandom से कैसे पढ़ा जाए?


read /dev/urandom 3

उपर्युक्त काम नहीं कर रहा है..मैं यादृच्छिक बाइट कैसे पढ़ सकता हूं /dev/urandom बाश में?


38
2018-06-23 05:34


मूल




जवाब:


random="$(dd if=/dev/urandom bs=3 count=1)"

37
2018-06-23 05:44



@ Flimzy, कैसे करता है $() काम? - linux
यह एक चर के रूप में एक कमांड के आउटपुट का इलाज करता है। नोट: यह एक झुकाव है। यदि आप बैश का उपयोग नहीं कर रहे हैं, तो आपको इसके बजाय `` `उपयोग करने की आवश्यकता हो सकती है। `` अधिक सार्वभौमिक है, लेकिन मुझे लगता है कि $ () पढ़ने के लिए आसान है। - Flimzy
@Flimzy,It treats the output of a command like a variable., आप वास्तव में स्ट्रिंग के रूप में मतलब है, है ना? - linux
एक परिवर्तनीय कर सकते हैं एक स्ट्रिंग ... या एक संख्या हो। यह इसे एक चर के रूप में मानता है ... फिर संदर्भ के आधार पर, यह एक स्ट्रिंग, या एक संख्या की तरह व्यवहार किया जाता है। - Flimzy
$() बहुत सार्वभौमिक है, बाश-विशिष्ट नहीं। बीटीडब्ल्यू, सावधान रहें कि आप वैरिएबल में कौन से पात्रों को स्टोर कर सकते हैं, इस पर सीमाओं में भाग नहीं लेते हैं - उदाहरण के लिए, स्ट्रिंग से नल (\ x00) पत्तियों के साथ परीक्षण किए गए बैश का संस्करण। - Gordon Davisson


head -c 500 /dev/urandom | tr -dc 'a-zA-Z0-9~!@#$%^&*_-' | fold -w 3 | head -n 1

(यदि आप शाब्दिक डैश वर्ण चाहते हैं, तो डैश चरित्र को ऊपर की तरह स्ट्रिंग के अंत में जाना चाहिए, जैसा कि विपरीत है *-_)।

और आदेशों के उपरोक्त सेट के कारण क्या किया जाता है यह बताने के लिए:

  1. head -c 500 /dev/urandom: से पहले 500 अक्षर (बाइट्स) प्राप्त करें /dev/urandom
  2. tr -dc 'a-zA-Z0-9~!@#$%^&*_-': हटाना सब लकिन में वर्णित वर्ण 'a-zA-Z0-9~!@#$%^&*_-' पहले कमांड के आउटपुट से।
  3. fold -w 3: दूसरे कमांड के आउटपुट को प्रारूपित करें जैसे कि इसमें प्रति पंक्ति 3 वर्ण हैं।
  4. head -n 1: तीसरे कमांड के परिणाम की पहली पंक्ति को प्रदर्शित करें stdout

37
2018-02-21 16:41



वह 3 बाइट्स की तलाश में है ... - Chris S
3 प्लस सटीक पैटर्न - ADM
यह उत्कृष्ट है। - Danijel-James W
महान! चार वर्ग नाम भी हैं ([: ग्राफ | प्रिंट | आदि:]) tr func के लिए उपलब्ध है, और इसे बदलकर इसे और सरल बनाया जा सकता है fold -w 3 | head -n 1 ए द्वारा head -c 3 यदि अंत में नई लाइन चार की आवश्यकता नहीं है। - Zimmi
यदि सिस्टम का डिफ़ॉल्ट एन्कोडिंग मल्टीबाइट (उदा। यूटीएफ -8) है तो tr एक के साथ विफल हो जाएगा Illegal byte sequence त्रुटि। इसे ठीक करने के लिए, "सी" एन्कोडिंग का उपयोग करें; कमांड को इस पर बदलें: head -c 500 /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9~!@#$%^&*_-' | fold -w 3 | head -n 1 - devstuff


कृपया जांचें man od

उदाहरण के लिए आप इसका उपयोग कर सकते हैं

od -vAn -N4 -tu4 < /dev/urandom

हस्ताक्षर किए गए दशमलव 4 बाइट यादृच्छिक संख्या उत्पन्न करने के लिए।


23
2017-09-01 07:18



Ekrem, एसएफ में आपका स्वागत है। मैं आमतौर पर लंबे समय से स्वीकृत प्रश्नों के नए उत्तरों का अधिक पक्ष नहीं लेता हूं, लेकिन यह वास्तव में पिछले सभी उत्तरों से अलग है, और इसमें कुछ वास्तविक फायदे हैं - अच्छा! मेरे द्वारा +1, और मुझे आशा है कि आप एसएफ के आसपास रहें और आने वाले कुछ समय के लिए इस तरह योगदान दें। - MadHatter


यहां एक है जो बेस 64 स्ट्रिंग बनाता है, ध्यान दें कि भले ही वे बेस 64 स्ट्रिंग तक सीमित हैं, पैडिंग उनसे हटा दी जाती है, इसलिए आप उन्हें डीकोड नहीं कर सकते हैं, आपको शायद इसकी आवश्यकता नहीं होगी।

 cat /dev/urandom | base64 | head -c 5

बदलने के 5 आप चाहने वाले वर्णों की संख्या के साथ।

यदि आपको किसी कारण से उन्हें डीकोड करने की आवश्यकता है, तो आगे बढ़ें base64 पाइप के अंत तक। इसके बाद यह 5 वर्णों को यूरैंडम से एकत्र करेगा और बेस 64 इसे सही पैडिंग के साथ एन्कोड करेगा, लेकिन अंतिम स्ट्रिंग पैडिंग के कारण आप जो चाहते थे उससे अधिक हो सकती है।

cat /dev/urandom | head -c 5 | base64

17
2018-01-04 06:34



यह वही नहीं है जो सवाल पूछ रहा था। आपका उत्तर अभी भी उपयोगी हो सकता है, लेकिन प्रश्न के लिए निश्चित रूप से कहने के लिए पर्याप्त संदर्भ नहीं है। - kasperd
@ kasperd सवाल पूछता है (शीर्षक में) एन / यादृच्छिक वर्णों को / dev / urandom से कैसे पढ़ा जाए लेकिन शरीर में यह बाइट पढ़ने के लिए कहता है। मैं मानता हूं कि एक असंगतता है। मैं Google से इस प्रश्न पर पात्रों को पढ़ने के लिए आया था और मुझे लगता है कि यह भविष्य के आगंतुकों को एक विकल्प के रूप में मदद कर सकता है। - Umur Kontacı
मुझे लगता है कि आपका जवाब समझना सबसे आसान और आसान है। धन्यवाद! - Robert
का उपयोग करते हुए cat किसी दिए गए राशि से कहीं अधिक पढ़ा जाएगा N अक्षर, और एंट्रॉपी को कम कर सकते हैं। उपयोगी उत्तर नहीं है। - Dr Beco
जबकि डॉ बेको सही है कि यह एक दुर्व्यवहार है cat चूंकि दोनों base64 तथा head एक फ़ाइल नाम को तर्क के रूप में ले सकते हैं, इस मामले में यह काम करता है और एन्ट्रॉपी को कम नहीं करना चाहिए। देख stackoverflow.com/questions/10031344/... - J.Money


इसे इस्तेमाल करे: dd if=/dev/urandom bs=1 count=3

यदि आप परिणाम को $ चर में रखना चाहते हैं:

variable=`dd if=/dev/urandom bs=1 count=3`

ध्यान दें कि यह संभवतः प्रिंट करने योग्य नहीं होगा।


9
2018-06-23 05:43



बाइनरी डेटा के 3 यादृच्छिक बाइट्स को पढ़ने के लिए भी कमांड का उपयोग किया जा सकता है? - Dimitrios Desyllas


सबसे आसान समाधान उतना सरल होगा जितना:

$ head -cN /dev/urandom

4
2017-09-01 08:00



यह पहले से दिए गए उत्तरों में क्या जोड़ता है? - MadHatter
सरल आमंत्रण - m.kocikowski