কম্পিউটার

লিনাক্স টার্মিনালে পুনঃনির্দেশ সহ যেকোন স্থান থেকে ডেটা পড়ুন এবং লিখুন

ইনপুট এবং আউটপুটের পুনঃনির্দেশ করা যেকোনো প্রোগ্রামিং বা স্ক্রিপ্টিং ভাষার একটি স্বাভাবিক কাজ। টেকনিক্যালি, যখনই আপনি একটি কম্পিউটারের সাথে ইন্টারঅ্যাক্ট করেন তখন এটি সহজাতভাবে ঘটে। ইনপুট stdin থেকে পড়া হয় (স্ট্যান্ডার্ড ইনপুট, সাধারণত আপনার কীবোর্ড বা মাউস), আউটপুট stdout এ যায় (স্ট্যান্ডার্ড আউটপুট, একটি পাঠ্য বা ডেটা স্ট্রিম), এবং ত্রুটিগুলি stderr এ পাঠানো হয় . এই ডেটা স্ট্রিমগুলি বিদ্যমান তা বোঝার ফলে আপনি যখন Bash বা Zsh-এর মতো শেল ব্যবহার করছেন তখন তথ্য কোথায় যায় তা নিয়ন্ত্রণ করতে সক্ষম করে৷

স্ট্যান্ডার্ড ইন, স্ট্যান্ডার্ড আউট এবং স্ট্যান্ডার্ড ত্রুটি লিনাক্সে ফাইল সিস্টেম অবস্থান হিসাবে বিদ্যমান। আপনি সেগুলি /dev-এ দেখতে পারেন :

$ ls /dev/std*
/dev/stderr@  /dev/stdin@  /dev/stdout@

আপনি তাদের সাথে সরাসরি অনেক কিছু করতে পারবেন না, তবে কখনও কখনও তাদের মেটা-অবস্থান হিসাবে ভাবতে সুবিধা হয় যেখানে আপনি ডেটা পাঠাতে পারেন৷

পুনঃনির্দেশের মূল বিষয়গুলি সহজ:কিছু সংখ্যক > ব্যবহার করুন আউটপুট পুনঃনির্দেশ করার জন্য অক্ষর, এবং কিছু সংখ্যক < ইনপুট পুনঃনির্দেশ করতে অক্ষর।

পুনঃনির্দেশিত আউটপুট

একটি ফাইলে ls কমান্ডের আউটপুট লিখতে:

$ ls > list.txt

আপনি ls এর আউটপুট দেখতে পাচ্ছেন না আপনি সাধারণত যেমন করবেন, কারণ আউটপুট list.txt এ লেখা হয় আপনার পর্দার পরিবর্তে ফাইল। এটি এত বহুমুখী, আসলে, আপনি এটিকে একটি ফাইলের বিষয়বস্তু অন্য ফাইলে অনুলিপি করতেও ব্যবহার করতে পারেন। এটি একটি পাঠ্য ফাইল হতে হবে না, হয়. আপনি বাইনারি ডেটার জন্য পুনর্নির্দেশ ব্যবহার করতে পারেন:

$ cat image.png > picture.png

(যদি আপনি ভাবছেন কেন আপনি কখনও এটি করতে চান, এটি ফাইলের অনুমতিগুলির উপর কখনও কখনও দরকারী প্রতিক্রিয়ার জন্য৷)

রিডাইরেক্টিং ইনপুট

আপনি একটি কমান্ড "ইনপুট" পুনঃনির্দেশ করতে পারেন, এছাড়াও. আউটপুট রিডাইরেক্ট করার চেয়ে এটি যুক্তিযুক্তভাবে কম কার্যকর কারণ অনেক কমান্ড ইতিমধ্যেই আপনার দেওয়া একটি আর্গুমেন্ট থেকে ইনপুট নেওয়ার জন্য হার্ড কোডেড। এটি কার্যকর হতে পারে, তবে, যখন একটি কমান্ড আর্গুমেন্টের একটি তালিকা আশা করে, এবং আপনার কাছে সেই আর্গুমেন্টগুলি একটি ফাইলে থাকে এবং ফাইল থেকে আপনার টার্মিনালে দ্রুত "কপি এবং পেস্ট" করতে চান (ব্যতীত আপনি আসলে অনুলিপি করতে চান না) এবং পেস্ট):

$ sudo dnf install $(<package.list)

ইনপুট পুনঃনির্দেশের সাধারণ ব্যবহার হল এখানে-নথি (বা শুধু এখানে-ডক সংক্ষেপে) এবং এখানে-স্ট্রিং কৌশল এই ইনপুট পদ্ধতিটি স্ট্যান্ডার্ড ইনপুট স্ট্রীমে পাঠ্যের একটি ব্লককে একটি বিশেষ শেষ-অফ-ফাইল মার্কার পর্যন্ত পুনঃনির্দেশ করে (বেশিরভাগ লোকেরা EOF ব্যবহার করে , কিন্তু এটি যে কোনো স্ট্রিং হতে পারে যা আপনি অনন্য বলে আশা করেন)। এটি টাইপ করার চেষ্টা করুন ( EOF এর দ্বিতীয় উদাহরণ পর্যন্ত ) একটি টার্মিনালে:

$ echo << EOF
> foo
> bar
> baz
> EOF

প্রত্যাশিত ফলাফল:

foo
bar
baz

একটি এখানে-ডক ব্যাশ স্ক্রিপ্টারদের দ্বারা একটি ফাইলে বা স্ক্রিনে পাঠ্যের কয়েকটি লাইন ডাম্প করার জন্য ব্যবহৃত একটি সাধারণ কৌশল। যতক্ষণ না আপনি আপনার ফাইলের শেষের মার্কার দিয়ে ক্লজটি শেষ করতে ভুলবেন না, এটি echo-এর অপ্রীতিকর তালিকা এড়াতে একটি কার্যকর উপায়। অথবা printf বিবৃতি।

একটি এখানে-স্ট্রিং এটি একটি এখানে-ডক এর মত , কিন্তু এটি শুধুমাত্র একটি স্ট্রিং নিয়ে গঠিত (বা উদ্ধৃতি চিহ্ন সহ একটি একক স্ট্রিং হিসাবে ছদ্মবেশে বেশ কয়েকটি স্ট্রিং):

$ cat <<< "foo bar baz"
foo bar baz

ত্রুটির বার্তা পুনর্নির্দেশ করা হচ্ছে

ত্রুটি বার্তাগুলি stderr নামে একটি স্ট্রীমে যায়৷ , 2> হিসাবে মনোনীত পুনর্নির্দেশের উদ্দেশ্যে। এই কমান্ডটি output.log নামের একটি ফাইলে ত্রুটি বার্তা পাঠায় :

$ ls /nope 2> output.log

/dev/null-এ ডেটা পাঠানো হচ্ছে

স্ট্যান্ডার্ড ইন, স্ট্যান্ডার্ড আউট এবং ত্রুটির জন্য যেমন অবস্থান রয়েছে, তেমনি কোথাও নেই এর জন্যও একটি অবস্থান রয়েছে লিনাক্স ফাইল সিস্টেমে। একে null বলা হয় , এবং এটি /dev-এ অবস্থিত , তাই এটি প্রায়শই "devnull" উচ্চারিত হয় যারা "slash dev slash null" বলার জন্য এটি ব্যবহার করে।

আপনি /dev/null-এ ডেটা পাঠাতে পারেন পুনর্নির্দেশ ব্যবহার করে। উদাহরণস্বরূপ, find কমান্ডটি ভার্বোস হতে থাকে এবং এটি প্রায়শই আপনার ফাইলগুলির মাধ্যমে অনুসন্ধান করার সময় অনুমতি দ্বন্দ্বের রিপোর্ট করে:

$ find ~ -type f 
/home/seth/actual.file
find: `/home/seth/foggy': Permission denied
find: `/home/seth/groggy': Permission denied
find: `/home/seth/soggy': Permission denied
/home/seth/zzz.file

find কমান্ড এটি একটি ত্রুটি হিসাবে প্রক্রিয়া করে, তাই আপনি শুধুমাত্র ত্রুটি বার্তাগুলিকে /dev/null এ পুনঃনির্দেশ করতে পারেন :

$ find ~ -type f 2> /dev/null
/home/seth/actual.file
/home/seth/zzz.file

পুনঃনির্দেশ ব্যবহার করা

রিডাইরেকশন হল ব্যাশে এক জায়গা থেকে অন্য জায়গায় ডেটা পাওয়ার একটি কার্যকরী উপায়। আপনি সব সময় পুনঃনির্দেশ ব্যবহার নাও করতে পারেন, কিন্তু যখন আপনার প্রয়োজন হয় তখন এটি ব্যবহার করতে শেখা আপনাকে প্রচুর অপ্রয়োজনীয় ফাইল খোলার এবং কপি এবং পেস্ট করা ডেটা সংরক্ষণ করতে পারে, যার জন্য সাধারণত মাউস নড়াচড়া এবং প্রচুর কী প্রেসের প্রয়োজন হয়। এই ধরনের চরম অবলম্বন করবেন না. ভাল জীবন যাপন করুন এবং পুনর্নির্দেশ ব্যবহার করুন।


  1. জাভাতে একটি বৈশিষ্ট্য ফাইল থেকে ডেটা কীভাবে পড়তে হয়?

  2. লিনাক্সের একটি ফাইলে টার্মিনাল আউটপুট কীভাবে সংরক্ষণ করবেন

  3. কিভাবে লিনাক্স টার্মিনাল থেকে ইমেইল পাঠাতে হয়

  4. লিনাক্সের টার্মিনাল থেকে আপনার অ্যাপ্লিকেশন আইকন কীভাবে পরিবর্তন করবেন