Linux/C2/Redirection-Pipes/Bengali

From Script | Spoken-Tutorial
Revision as of 23:06, 23 February 2017 by Kaushik Datta (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
Time Narration
00:00 Redirection এবং Pipes সংক্রান্ত এই কথ্য টিউটোরিয়ালটিতে আপনাদের স্বাগত জানাচ্ছি ।
00:07 আমি উবুন্টু ১০.০৪ ব্যবহার করছি ।
00:09 আমি ধরে নিচ্ছি, লিনাক্স অপারেটিং সিস্টেম এবং মৌলিক নির্দেশাবলী সম্পর্কে আপনার কিছু ধারণা আছে ।
00:16 সেই সংক্রান্ত মৌখিক টিউটোরিয়াল এই ওয়েবসাইট-টিতে প্রাপ্তিসাধ্য ।
00:22 মনে রাখবেন যে লিনাক্স case sensitive ।
00:25 অন্যথায় উল্লেখ করা না থাকলে এই টিউটোরিয়ালটিতে ব্যবহৃত সমস্ত র্নিদেশাবলী ছোট হাতের অক্ষরে আছে ।
00:32 লিনাক্স-এ অধিকাংশ কাজ-ই টার্মিনাল-এর মাধ্যমে হয় ।
00:35 যখন আমরা একটি কমান্ড চালাতে চাই, আমরা কিবোর্ডের মাধ্যমে সেটি লিখি ।
00:39 ধরুন, আমরা তারিখ এবং সময় দেখতে চাইছি ।
00:41 কিবোর্ড-এর মাধ্যমে "date" লিখুন এবং এন্টার টিপুন ।
00:46 সাধারণত আমরা কিবোর্ড-এর মাধ্যমে ইনপুট দিয়ে থাকি ।
00:48 অনুরূপভাবে, কমান্ডের আউটপুট, টার্মিনাল উইন্ডোত়ে প্রদর্শিত হয় ।
00:56 এছাড়াও কোনো কমান্ড চানালোর সময় কিছু ত্রুটি ঘটতে পারে ।
00:59 উদাহরস্বরূপ, লিখুন "cat space aaa" । এন্টার টিপুন ।
01:05 aaa নামক কোনো ফাইলের অস্তিত্ব নেই ।
01:08 সেই ত্রুটি- সংক্রান্ত বার্তা এখানে দেখা যাচ্ছে ।
01:10 এখন এই ত্রুটি-টিও টার্মিনাল উইন্ডোর উপর দেখা যাচ্ছে ।
01:20 কমান্ড সংক্রান্ত তিনটি বিশেষ কর্ম হল ইনপুট নেওয়া, আউটপুট দেখানো এবং error বা ত্রুটি রিপোর্ট করা ।
01:24 Redirection শেখার পূর্বে আমাদের দুটি গুরুত্বপূর্ণ ধারণা সম্পর্কে জানা উচিত। সেগুলি হল - স্ট্রিম এবং file descriptor ।
01:31 লিনাক্স শেল যেমন Bash, অক্ষরের স্ট্রিম-এর মাধ্যমে ইনপুট গ্রহণ করে ও আউটপুট পাঠায় ।
01:37 কোনো অক্ষর তার আগের এবং পরের অক্ষরের উপর নির্ভর করে না ।
01:41 স্ট্রিম-গুলি ফাইল IO পদ্ধতির দ্বারা ব্যবহার করা হয় ।
01:44 অক্ষরের স্ট্রিম-টি কোনো একটি ফাইল বা কীবোর্ড বা উইন্ডো ইত্যাদি কোথা থেকে আসছে বা কোথায় যাচ্ছে, ত়া কোনো মূল্য রাখে না ।
01:51 লিনাক্স-এ প্রত্যেক খোলা ফাইল-এর সঙ্গে একটি পূর্ণসংখ্যা সংখ্যা যুক্ত থাকে ।
01:57 এটিকে file descriptor বলা হয় ।
02:05 লিনাক্স শেল তিনটি স্ট্যান্ডার্ড I/O স্ট্রিম ব্যবহার করে ।
02:08 প্রতিটি একটি সুনির্দিষ্ট ফাইল descriptor-এর সাথে যুক্ত থাকে ।
02:12 stdin হল স্ট্যান্ডার্ড ইনপুট স্ট্রিম ।
02:15 এটি কমান্ড-এ ইনপুট দেয় ।
02:17 এর ফাইল descriptor মান 0 ।
02:19 stdout হল স্ট্যান্ডার্ড আউটপুট স্ট্রিম ।
02:22 এটি কমান্ড-এর আউটপুট দেখায় । এর ফাইল বর্ণনাকারীর মান ১ ।
02:26 stderr হল স্ট্যান্ডার্ড এরর স্ট্রিম । এটি কমান্ড-এর ত্রুটি-গুলি প্রদর্শন করে । এর ফাইল descriptor হল ২ ।
02:36 ইনপুট স্ট্রিম প্রোগ্রামের ইনপুট প্রদান করে ।
02:40 সাধারনতঃ এটি টার্মিনাল keystrokes থেকে ইনপুট নেয় ।
02:44 আউটপুট স্ট্রিম সাধারনতঃ টার্মিনালে অক্ষর প্রিন্ট করে ।
02:47 আগে টার্মিনাল ছিল ASCII typewriter বা display terminal ।
02:52 কিন্তু এখন এটি গ্রাফিকাল ডেস্কটপ-এর উপর একটি টেক্সট উইন্ডো ।
02:56 আমরা দেখেছি যে ৩ টি স্ট্রিমই স্বাভাবিকভাবে কোনো ফাইল-এর সাথে সংযুক্ত থাকে ।
03:01 কিন্তু লিনাক্সে আমরা এটির পরিবর্তন করতে পারি ।
03:04 আমরা এই ৩-টি স্ট্রিম অন্যান্য ফাইলের সাথে সংযুক্ত করতে পারি ।
03:07 এই প্রক্রিয়া-টিকে redirection বা পুনর্নির্দেশনা বলা হয় ।
03:09 এখন দেখা যাক কিভাবে এই ৩ স্ট্রিম-এ পুনর্নির্দেশনা করা যায় ।
03:14 প্রথমে দেখা যাক স্ট্যান্ডার্ড ইনপুট কিভাবে পুনঃনির্দেশিত করা যায় ।
03:17 আমরা একটি ফাইল থেকে standardin, <(বামকোণী বন্ধনী) অপারেটর ব্যবহার করে পুনঃনির্দেশিত করতে পারি ।
03:22 আমরা জানি যে একটি ফাইলের লাইন, শব্দ এবং অক্ষরের সংখ্যা জানতে wc কমান্ডের ব্যবহার করা হয় ।
03:28 টার্মিনাল উইন্ডো-ত়ে wc লিখুন ।
03:31 এন্টার টিপুন । কারসর-টি দপদপ করছে অর্থাৎ আমাদের কিবোর্ড-এর মাধ্যমে ইনপুট দিতে হবে ।
03:37 কিছু লেখা যাক "This tutorial is very important" ।
03:46 এন্টার টিপুন ।
03:48 এবার ctrl ও d কী একসাথে টিপুন ।
03:52 এখন যে লাইনগুলি আমরা লিখেছি, তার উপর কমান্ড-টি কাজ করেছে ।
03:55 এই কমান্ড-টি টার্মিনাল-এ আউটপুট দেখাছে ।
03:57 এখানে wc কমান্ড-এর পর কোনো ফাইল উল্লেখ করা হয়নি ।
04:01 তাই কমান্ড-টি স্ট্যান্ডার্ড ইনপুট স্ট্রিম থেকে ইনপুট নিয়েছে ।
04:04 স্ট্যান্ডার্ড ইনপুট স্ট্রিম স্বাভাবিকভাবে-ই কিবোর্ড-এর সাথে যুক্ত থাকে । তাই wc কিবোর্ড থেকে ইনপুট নেয় ।
04:12 এখন যদি আমরা লিখি -

"wc space বামকোণী বন্ধনী space test1 dot txt" ।

04:19 তাহলে wc test1 dot txt ফাইল-এর লাইন, শব্দ এবং অক্ষরের সংখ্যা দেখাবে ।
04:27 এবার লিখুন ।

"wc space test1 dot txt" ।

04:34 আমরা একই আউটপুট দেখছি ।
04:37 তাহলে পার্থক্য -টি কোথায় ?
04:39 "wc space test1 dot txt" লিখলে , কমান্ড-টি test1dot txt ফাইল-টি খোলে এবং সেটি থেকে পড়ে ।
04:46 কিন্তু উপরের কমান্ড-টি লিখলে , wc খোলার জন্য কোনো ফাইল পায়না ।
04:53 তাই , এটি standardin থেকে ইনপুট নিতে চেষ্টা করে ।
04:57 কিন্তু আমরা standardin -কে ফাইল test1dot txt -এর দিকে পরিচালিত করেছি ।
05:01 তাই এই কমান্ড-টি test1 থেকে পড়ে ।
05:04 কিন্তু প্রকৃতপক্ষে , এটা জানে না যে standardin-e কোথা থেকে তথ্য আসছে ।
05:10 তাহলে আমরা দেখলাম কিভাবে স্ট্যান্ডার্ড ইনপুট পুননির্দেশনা করা যায় ।
05:12 এবার দেখে নেওয়া যাক কিভাবে স্ট্যান্ডার্ড আউটপুট এবং স্ট্যান্ডার্ড এরর পুননির্দেশনা করা যায় ।
05:17 দুটি পদ্ধতিতে আউটপুট বা এরর একটি ফাইল-এ পুননির্দেশনা করা যায় ।
05:20 ধরুন, n হল ফাইল descriptor ।

n একটি ডানকোণী বন্ধনী ফাইল descriptor n থেকে একটি ফাইল-এ আউটপুট redirect করে ।

05:29 আপনার অবশ্যই সেই ফাইল-এ লেখার অধিকার থাকতে হবে ।
05:32 যদি ফাইলটি উপস্থিত না থাকে, সেটি নির্মিত হয় ।
05:35 যদি সেটির অস্তিত্ব আগে থেকেই থাকে, তাহলে উপস্থিত বিষয়বস্তু সাধারণত কোন সতর্কত়াবাণী ছাড়াই হারিয়ে যায় ।
05:40 ' n ' দুটি ডানকোণী বন্ধনী ' -ও ফাইল বর্ণনাকারী n থেকে একটি ফাইল-এ আউটপুট পুননির্দেশনা করে ।
05:47 এক্ষেত্রেও, আপনার সেই ফাইল-এ লেখার অধিকার থাকতে হবে ।
05:50 যদি ফাইলটি উপস্থিত না থাকে , সেটি নির্মিত হয় ।
05:52 যদি ফাইলটির অস্তিত্ব আগে থেকেই থাকে, তাহলে আউটপুট সেই ফাইল-এর শেষে যুক্ত হয় ।
05:59 একটি ডানকোণী বন্ধনী বা দুটি ডানকোণী বন্ধনীর আগে n হল ফাইল descriptor ।
06:05 এটি বাদ দিলে স্ট্যান্ডার্ড আউপুট অর্থাৎ ফাইল বর্ণনাকারী ১ অনুমান করা হয় ।
06:10 তাহলে একটি ডানকোণী বন্ধনী এবং ১ এর পর একটি ডানকোণী বন্ধনী আসলে একই কাজ করে ।
06:15 কিন্তু ত্রুটির স্ট্রিম-কে redirect করতে আমাদের ২ এর পর একটি বা দুটি ডানকোণী বন্ধনী ব্যবহার করতে হয় ।
06:22 আসুন, এটি দেখা যাক ।
06:24 শেষ উদাহরণ-এ আমরা দেখেছি যে ফাইল বা standardin উপর wc কমান্ডের ফলাফল টার্মিনাল উইন্ডোর এ প্রদর্শিত হয় ।
06:31 কিন্তু, এটি টার্মিনালে প্রদর্শন করতে না চাইলে আমরা কি করবো ?
06:34 ধরুন, আমরা এটি একটি ফাইলে সংরক্ষণ করতে চাই , যাতে পরে এই তথ্য ব্যবহার করা যায় ।
06:38 স্বাভাভিকভাবে wc standardout -এ আউটপুট লেখে ।
06:42 standardout টার্মিনাল উইন্ডোর সাথে সংযুক্ত থাকে ।
06:45 তাই আমরা টার্মিনাল উইন্ডো-ত়ে আউটপুট দেখি ।
06:48 কিন্তু যদি আমরা standardout একটি ফাইল-এ redirect করতে পারি, তাহলে wc কমান্ডের ফলাফল সেই ফাইল-এ লিখিত হবে ।
06:57 লিখুন -

"wc space test1 dot txt ডানকোণী বন্ধনী wc_results dot txt" ।

07:09 এন্টার টিপুন ।
07:11 এখন এটি প্রকৃতপক্ষে হয়েছে কিনা দেখার জন্যে cat কমান্ড-এর দ্বারা wc_results dot txt ফাইল-এর বিষয়বস্তু দেখা যাক ।
07:23 হ্যা, এটি হয়েছে । ধরুন, ওই একই ডিরেক্টরি-ত়ে অন্য একটি ফাইল test2 আছে ।
07:30 এখন আবার আমরা test2 ফাইল-ti নিয়ে কমান্ডটি চালাব । লিখছি-

"wc space test2 dot txt ডানকোণী বন্ধনী wc_results dot txt"

07:44 এক্ষেত্রে, wc_results -ফাইলের বিষয়বস্তু overwrite হয়ে যাবে ।
07:48 এটি দেখে নেওয়া যাক ।
07:56 এর পরিবর্তে আমরা লিখতে পারি "wc space test1 dot txt দুটি ডানকোণী বন্ধনী wc underscore results dot txt"
08:07 নতুন বিষয়বস্তু ফাইল wc underscore results dot txt -এর বর্তমান উপস্থিত বিষয়বস্তু overwrite করে না, সেই ফাইল-এর শেষে যুক্ত হয়ে যায় ।
08:15 এটিও দেখে নেওয়া যাক । এখানে দুটি লেখাই দেখা যাচ্ছে ।
08:26 স্ট্যান্ডার্ড এরর অনুরূপভাবে redirect করা যায় ।
08:29 শুধু পার্থক্য হল, এইক্ষেত্রে একটি ডানকোণী বন্ধনী বা দুটি ডানকোণী বন্ধনীর আগে স্ট্যান্ডার্ড এরর-এর ফাইল descriptor সংখ্যা উল্লেখ করতে হয় ।
08:38 আমরা জানি aaa নামক কোন ফাইল উপস্থিত নেই । তাহলে লেখা যাক -

"wc space aaa" ।

08:46 শেল ত্রুটি জানাচ্ছে যে - “No such file or directory”।
08:50 ধরুন, আমরা স্ক্রিন-এ এই বার্তা দেখতে চাই না । তারজন্য, সেগুলি অন্য ফাইল-এ redirect করতে হবে ।
08:55 লেখা যাক -

"wc space aaa space 2 ডানকোণী বন্ধনী errorlog dot txt" ।

09:06 এখন ত্রুটি-গুলি টার্মিনালে প্রদর্শিত হচ্ছে না , বরং ফাইল errorlog dot txt -ত়ে লিখিত হয়ে গেছে ।
09:12 আমরা "cat space errorlog dot txt" কমান্ড-এর মাধ্যমে এটি দেখতে পারি ।

09:22 ধরুন, আমি "cat space bbb space 2 ডানকোণী বন্ধনী errorlog dot txt" কমান্ড ব্যবহার করে কিছু ক্রুটি করেছি ।
09:34 এখন পূর্ববর্তী ক্রুটি overwrite হয়ে যাবে এবং নতুন ক্রুটি দেখা যাবে ।
09:39 দেখুন "cat space errorlog dot txt"
09:46 কিন্তু সবকটি error-এর তালিকা দেখতে চাইলে আমরা কি করবো ?

সেক্ষেত্রে, আমরা এই কমান্ড-টি চালাব -

"wc space aaa space 2 দুটি ডানকোণী বন্ধনী errorlog dot txt" ।

09:58 cat কমান্ড ব্যবহার করে এটি পরীক্ষা করা যাক ।
10:06 তাহলে আমরা দেখলাম কিভাবে তিনটি স্ট্রিম -স্ট্যান্ডার্ড আউট, স্ট্যান্ডার্ড in ও স্ট্যান্ডার্ড এরর-কে আলাদাভাবে redirect এবং ব্যবহার করা যায় । কিন্তু এই তিনটি স্ট্রিম -কে একসাথে ব্যবহার অর্থাৎ বিভিন্ন স্ট্রিম-গুলি যুক্ত কতে পারলে, redirection আসল ক্ষমতা বোঝা যায় ।
10:20 একে pipelining বলা হয় ।
10:22 পাইপ কমান্ড-এর শৃঙ্খল তৈরী করে ।
10:25 পাইপ একটি কমান্ডের আউটপুট-এর সাথে পরবর্তী কমান্ডের ইনপুট যুক্ত করে ।
10:30 এটি লেখার নিয়ম হল -

command1 উল্লম্ব দাঁড়ি command2 hyphen option উল্লম্ব দাঁড়ি command3 hyphen option1 hyphen option2 উল্লম্ব দাঁড়ি command4 ।

10:46 ধরুন, আমরা বর্তমান ডিরেক্টরির মধ্যে উপস্থিত ফাইল ও ডিরেক্টরির মোট সংখ্যা জানতে চাই ।
10:51 তাহলে আমরা কি করবো ? আমরা জানি

"ls space minus l" বর্তমান ডিরেক্টরি-র সব ফাইল এবং সাব-ডিরেক্টরির তালিকা দেয় ।

10:58 আমরা আউটপুট-টিকে একটি ফাইলে redirect করতে পারি -

"ls space minus l ডানকোণী বন্ধনী files dot txt" ।

11:08 "cat space files dot txt" ।
11:14 এখানে, প্রতিটি লাইন একটি ফাইল অথবা ডিরেক্টরির নাম ।
11:17 যদি আমরা এই ফাইলের মোট লাইন সংখ্যা জানতে চাই, তাহলে আমরা files dot txt ফাইল-টিকে ব্যবহার করতে পারি ।
11:24 এটি এই কমান্ড-এর মাধ্যমে করা যায়- "wc space minus l files dot txt" ।
11:32 এটি আমাদের উদ্দেশ্য সাধন করলেও এর কিছু সমস্যা আছে ।
11:35 প্রথমত, একটি অন্তর্বর্তী ফাইল files dot txt প্রয়োজন হয় ।
11:40 যদি প্রথম কমান্ড অনেক তথ্য উত্পাদন করে, এটা অকারণে ডিস্ক মেমরি নষ্ট করতে পারে ।
11:46 এছাড়াও য বিভিন্ন কমান্ড-এর শৃঙ্খল তৈরী করতে চাইলে এই পদ্ধতিটি সময়সাপেক্ষ ।
11:50 আমরা এটি অনেক সহজেই পাইপ ব্যবহার করে কাজটি করতে পারি । লেখা যাক -

"ls space minus l উল্লম্ব দাঁড়ি wc space minus l" ।

12:01 এখন আমরা অনেক বেশি স্বাচ্ছন্দ্য-এর সঙ্গে একই ফলাফল পাচ্ছি ।
12:06 ls কমান্ডের আউটপুট wc কমান্ডের ইনপুট হিসেবে ব্যবহৃত হয় ।
12:10 এমনকি আমরা পাইপ ব্যবহার করে কমান্ড-এর আরো লম্বা শৃঙ্খল তৈরী করতে পারি ।
12:15 পাইপ-এর একটি সাধারণ ব্যবহার হল বিভিন্ন পৃষ্ঠায় প্রদর্শিত লেখা পড়া ।
12:19 লিখুন "cd space slash usr slash bin"।
12:24 তাহলে আমরা এখন bin ডিরেক্টরী-ত়ে আছি ।
12:28 এখান "ls minus l" কমান্ড-টি রান করুন ।
12:31 আমরা আউটপুট সঠিকভাবে দেখতে পাচ্ছিনা । কিন্তু more পাইপ-এর সাথে যুক্ত করে কমান্ড-টি ব্যবহার করলে, এটি সঠিকভাবে দেখা যাবে ।
12:37 এই লিস্ট-টি পুরো দেখতে এন্টার টিপুন ।
12:41 বেরিয়ে আসতে q টিপুন ।
12:45 এখানে কিছু কমান্ড আলোচিত হল যেগুলি আমাদের ফাইল নিয়ে কাজ করতে সাহায্য করে ।
12:48 এইপ্রকার আরো অনেক কমান্ড আছে ।
12:50 আলোচিত প্রত্যেকটি কমান্ড-এর অনেকগুলি অপশন আছে ।
12:54 'man' কমান্ড-এর সাহায্যে সেগুলির সম্পর্কে আরো বিস্তারিত ভাবে জানুন ।
12:58 কমান্ড শেখার সবথেকে সেরা উপায় হল সেগুলিকে বারবার ব্যবহার করা ।
13:04 এখানেই এই টিউটোরিয়াল্-এর সমাপ্তি হল ।
13:07 স্পোকেন্ টিউটোরিয়াল্ Talk to a Teacher প্রকল্পের অংশবিশেষ যা ICT এর National Mission on Education দ্বারা সমর্থিত ।
13:19 আমি অন্তরা এই টিউটোরিয়াল-টি অনুবাদ এবং রেকর্ড করেছি । শুভবিদায় ।

Contributors and Content Editors

Kaushik Datta, PoojaMoolya