/ Dev / urandom থেকে এন এলোমেলো অক্ষরে কীভাবে পড়বেন?


উত্তর:


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

1
@ ফ্লিমজি, কীভাবে $()কাজ করে?
লিনাক্স

2
এটি কমান্ডের আউটপুটকে ভেরিয়েবলের মতো আচরণ করে। দ্রষ্টব্য: এটি একটি বাশিজম। আপনি যদি ব্যাশ ব্যবহার না করে থাকেন তবে আপনার পরিবর্তে `use ব্যবহার করতে হতে পারে। `more আরও সার্বজনীন, তবে আমি মনে করি $ () পড়া সহজ।
ফ্লিমজি

@ ফ্লিমজি, It treats the output of a command like a variable.আপনি আসলে স্ট্রিং বলতে চান, তাই না?
লিনাক্স

2
একটি পরিবর্তনশীল করতে একটি স্ট্রিং ... অথবা একটি সংখ্যা হওয়া। এটি এটিকে পরিবর্তনশীল হিসাবে বিবেচনা করে ... তারপরে প্রসঙ্গের উপর নির্ভর করে এটি স্ট্রিং বা সংখ্যার মতো আচরণ করা হয়।
ফ্লিমজি

1
$()বেশ সার্বজনীন, বাশ-নির্দিষ্ট নয়। বিটিডাব্লু, সতর্কতা অবলম্বন করুন যে শেলটি ভেরিয়েবলগুলিতে কোন অক্ষর সংরক্ষণ করতে পারে তার সীমাবদ্ধতায় না চলে run উদাহরণস্বরূপ, বাশ সংস্করণটি আমি স্ট্রিং থেকে নালগুলি (from x00) বের করে দিয়ে পরীক্ষা করেছি।
গর্ডন ডেভিসন

44
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

1
তিনি 3 বাইট খুঁজছেন ...
ক্রিস এস

1
3 প্লাস সঠিক প্যাটার্ন
এডিএম

এটি দুর্দান্ত।
দানিজেল-জেমস ডাব্লু

3
গ্রেট! এছাড়াও টিআর ফ্যাঙ্কের জন্য চর শ্রেণীর নাম ([: গ্রাফ | প্রিন্ট | ইত্যাদি:]) পাওয়া যায়, এবং নতুন লাইনের চরটি শেষে না লাগলে fold -w 3 | head -n 1একটি দ্বারা প্রতিস্থাপন করে এটি আরও সরল করা যেতে পারে head -c 3
জিম্মি

5
যদি সিস্টেমের ডিফল্ট এনকোডিংটি মাল্টিবাইট হয় (যেমন ইউটিএফ -8) তবে Illegal byte sequenceত্রুটি ত্রুটিযুক্ত হয়ে ব্যর্থ হবে । এটি ঠিক করতে, "সি" এনকোডিং ব্যবহার করুন; কমান্ডটি এতে পরিবর্তন করুন:head -c 500 /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9~!@#$%^&*_-' | fold -w 3 | head -n 1
devstuff

33

দয়া করে চেক করুন man od

উদাহরণস্বরূপ আপনি ব্যবহার করতে পারেন

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

স্বাক্ষরযুক্ত দশমিক 4 বাইট এলোমেলো সংখ্যা তৈরি করতে।


1
আকরাম, এসএফ-তে আপনাকে স্বাগতম। আমি সাধারণত দীর্ঘ-গৃহীত প্রশ্নের উত্তরগুলির পক্ষে খুব বেশি পছন্দ করি না তবে এটি পূর্ববর্তী সমস্ত উত্তরগুলির থেকে সত্যই আলাদা এবং এর কিছু বাস্তব সুবিধা রয়েছে - দুর্দান্ত! আমার কাছ থেকে +1, এবং আমি আশা করি আপনি এসএফের কাছাকাছি থাকবেন এবং আগামি কিছু সময়ের জন্য এই জাতীয় অবদান রাখবেন।
ম্যাডহ্যাটার

19

এখানে একটি যা বেস6464 স্ট্রিংগুলি তৈরি করে, দ্রষ্টব্য যে তারা বেস64 স্ট্রিংগুলির মধ্যে সীমাবদ্ধ থাকলেও প্যাডিংগুলি তাদের থেকে সরিয়ে দেওয়া হয়, সুতরাং আপনি সেগুলি ডিকোড করতে পারবেন না, সম্ভবত আপনাকে সম্ভবত এটির প্রয়োজন হবে না।

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

5আপনার পছন্দের চরগুলির সংখ্যাটি প্রতিস্থাপন করুন ।

তবে আপনাকে যদি কোনও কারণে এগুলি ডিকোড করতে হয় তবে base64পাইপের শেষ দিকে যান move এরপরে এটি ইউরেনডম থেকে 5 টি অক্ষর সংগ্রহ করবে এবং বেস 64 এটি ডান প্যাডিং সহ এনকোড করবে, তবে প্যাডিংয়ের কারণে চূড়ান্ত স্ট্রিংটি আপনি যা চেয়েছিলেন তার চেয়ে দীর্ঘ হতে পারে be

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

এই প্রশ্নটি ঠিক কী চেয়েছিল তা নয়। আপনার উত্তরটি এখনও কার্যকর হতে পারে, তবে প্রশ্নের পক্ষে নিশ্চিতভাবে বলতে যথেষ্ট প্রসঙ্গ নেই।
ক্যাস্পার্ড

1
@ ক্যাস্পারড প্রশ্নটি জিজ্ঞাসা করে (শিরোনামে) কীভাবে / ডিভ / ইউরানডম থেকে এন এলোমেলো অক্ষর পড়তে পারে তবে শরীরে এটি বাইট পড়ার জন্য জিজ্ঞাসা করে। আমি একমত যে এখানে একটি অসঙ্গতি আছে। চরিত্রগুলি পড়ার জন্য আমি গুগল থেকে এই প্রশ্নে এসেছি এবং আমি মনে করি এটি ভবিষ্যতের দর্শকদের একটি বিকল্প হিসাবে সহায়তা করতে পারে।
উমুর কনটাসে

আমি মনে করি আপনার উত্তরটি বোঝার পক্ষে সবচেয়ে সহজ তবে সহজ। ধন্যবাদ!
রবার্ট

1
ব্যবহারের ফলে catপ্রদত্ত পরিমাণের Nঅক্ষরের চেয়ে অনেক বেশি পড়তে হবে এবং এন্ট্রপিকে কমিয়ে দেওয়া যাবে। দরকারী উত্তর নয়।
ডাঃ বেকো

1
যদিও ডঃ বেকো ঠিক বলেছেন যে এটি catউভয়েরই অপব্যবহার base64এবং headএকটি ফাইলনামকে যুক্তি হিসাবে গ্রহণ করতে পারে, এক্ষেত্রে এটি কাজ করে এবং এনট্রপিটি হ্রাস করা উচিত নয়। দেখুন stackoverflow.com/questions/10031344/...
J.Money

11

এটা চেষ্টা কর: dd if=/dev/urandom bs=1 count=3

আপনি যদি ফলাফলটি $ ভেরিয়েবলে রাখতে চান তবে:

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

মনে রাখবেন যে এটি সম্ভবত মুদ্রণযোগ্য হবে না।


বাইনারি ডেটার 3 টি এলোমেলো বাইট পড়ার জন্যও কমান্ডটি ব্যবহার করা যেতে পারে?
দিমিত্রিওস ডেসিল্লাস

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.