ইউনিক্স পাইপটির সঠিক চতুরতা কী


52

ডগলাস ম্যাকলরয় কীভাবে ধারণাটি নিয়ে এসেছিলেন এবং কেন থম্পসন এক রাতেই এটি প্রয়োগ করেছিলেন তার গল্পটি আমি শুনেছি।

আমি যতদূর বুঝতে পারি পাইপ হ'ল একটি সিস্টেম কল যা দুটি প্রসেসের মধ্যে মেমরির একটি অংশ ভাগ করে দেয় যেখানে একটি প্রক্রিয়া লেখা হয় এবং অন্যটি পড়ে থাকে।

যে কেউ ওএস ইন্টার্নাল বা ধারণার সাথে পরিচিত নন, আমি ভাবছিলাম গল্পের "প্রতিভা" আসলে কী? এটি মেমরি ভাগ করে নেওয়ার দুটি প্রক্রিয়া ধারণা? নাকি তা বাস্তবায়ন? অথবা উভয়?

পিএস: পাইপের ইউটিলিটি বা শেল এটি কীভাবে ব্যবহার করতে হয় সে সম্পর্কে আমি সচেতন। প্রশ্নটি ধারণা এবং বাস্তবায়ন সম্পর্কে|


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

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

6
@WarrenP বাস্তবিক, ইউনিক্স মান-ইনপুট এবং মান-আউটপুট পেয়েছিলাম কারণpipe() প্রাপ্ত syscall এবং |শেল অপারেটর (: সুত্র McIlroy )। অথবা, যেমন ভল্টেয়ার বলে থাকতে পারে, " যদি [স্টিডিও] না থাকত তবে [এটি] আবিষ্কার করা দরকার ছিল। " :-)
রস প্যাটারসন

ফাইল হ্যান্ডেল, এবং পাইপ না হওয়া পর্যন্ত একটি ইন এবং আউট হ্যান্ডেল বলে কিছুই নেই?
ওয়ারেন পি

4
@ ওয়ারেনপি: প্যাটারসন যা বলছেন তা মনে হচ্ছে এটি: প্রথমে ফাইল হ্যান্ডলগুলি ছিল। তারপরে এই ছেলেরা ধারণাটি নিয়ে এসেছিল যে প্রতিটি প্রোগ্রাম একটি ইনপুট হ্যান্ডেল এবং ডিফল্টরূপে আউটপুট হ্যান্ডেল দেয়, যা প্রোগ্রামগুলিকে তুচ্ছভাবে শৃঙ্খলাবদ্ধ করতে দেয়। এগুলি "স্ট্যান্ডার্ড" ইনপুট / আউটপুট হিসাবে পরিচিতি লাভ করে।
মাকিং হাঁস

উত্তর:


109

আমি যতদূর বুঝতে পারি পাইপ হ'ল একটি সিস্টেম কল যা দুটি প্রসেসের মধ্যে মেমরির একটি অংশ ভাগ করে দেয় যেখানে একটি প্রক্রিয়া লেখা হয় এবং অন্যটি পড়ে থাকে।

আসলে, এর সাথে কোনও ভাগ করা মেমরি নেই। পাঠক এবং লেখক তাদের ঠিকানার জায়গার কোনও অংশ ভাগ করছেন না এবং তারা কোনও সুস্পষ্ট সিঙ্ক্রোনাইজেশন ব্যবহার করছেন না।

পঠন এবং লেখার প্রক্রিয়াগুলি তৈরি হচ্ছে readএবং writeসিস্টেমগুলি ঠিক সেভাবে কল করে যদি তারা কোনও ফাইল থেকে / লেখার ক্ষেত্রে পড়ত। এটি হ'ল প্রতিভা ... উদ্ভাবন: অ্যাপ্লিকেশন প্রোগ্রামার এবং ব্যবহারকারীর দৃষ্টিকোণ থেকে ... ধারণাটি (সহজ) ইন্টারপ্রোসেস যোগাযোগ এবং ফাইল I / O একইভাবে পরিচালনা করা যায়।

পাইপটি সেট আপ হয়ে গেলে, ওএস (অ্যাপ্লিকেশন কোড নয়, বা ব্যবহারকারী-স্পেসের লাইব্রেরিগুলি) বাফারিং এবং সমন্বয়ের যত্ন নেয়। Transparently।


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

বিকল্পভাবে, আপনি যদি সত্য পাইপলাইন চান তবে আপনি উভয় অ্যাপ্লিকেশনকে একটি (বাস্তব) ভাগ করা মেমরি বিভাগ স্থাপন করতে এবং পাঠ / রচনার সমন্বয় করতে সেম্যাফোরাস (বা কিছু) ব্যবহার করতে পারেন। জটিল ... এবং ফলস্বরূপ প্রায়শই হয় না।


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

6
আইপিসির জন্য ফাইল আই / ও ব্যবহার করার কারণটি মূলত দরকারী কারণ ইউনিক্সটি পাঠ্য প্রক্রিয়াজাতকরণের জন্য তৈরি করা হয়েছিল - প্রোগ্রাম থেকে প্রোগ্রামে টেক্সট ডেটা প্রবাহিত করা, তুলনামূলকভাবে ব্যথাহীন রচনাকে সক্ষম করে যার ফলে পুরো সিস্টেমটি নির্মিত হতে পারে অপেক্ষাকৃত সহজ, ছোট প্রোগ্রাম যা সাধারণ অপারেশনগুলির (সম্ভবত) দীর্ঘ চেইনে একের পরস্পর ডেটা প্রবাহিত করে। মূলত, এর অর্থ হ'ল পাঠ্য প্রক্রিয়াকরণ পরিচালনা করার জন্য আপনার কাছে তুলনামূলকভাবে নমনীয় ভাষা ছিল ।
লুয়ান

1
এবং সুতরাং "ইউনিক্স পাইপের দক্ষতা" হ'ল "ইউনিক্সের চতুরতা": সমস্ত আই / ও (ইন্টারপ্রসেস যোগাযোগ, স্ট্যান্ডার্ড ফাইল এবং বাকী ফাইল সিস্টেমের অবজেক্ট সহ) ফাইল হিসাবে পরিচালিত হয়।
মার্ক হার্ট

জিনিয়াসের আর একটি স্ট্রোক ছিল
ইউএনআইএক্স

14

আমার মতে, "পাইপ" ধারণাটির প্রতিভা ব্যবহারের সরলতা।

আপনাকে কোনও সিস্টেম কল করতে হবে না, মেমরি বরাদ্দ করতে হবে না, কিছুতেই জটিল কিছু নয়। শেল, আপনি একটি একক অক্ষর ব্যবহার করুন: |। এটি কোনও প্রদত্ত কার্যকে সাধারণ (বা জটিল) সরঞ্জামগুলির সংমিশ্রণে অসাধারণ শক্তি দেয়।

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

$ cat names.txt
Sally Weikel
Dana Penaflor
Christine Hook
Shaneka Flythe
Almeda Crook
Freddie Lindley
Hester Kersh
Wanda Ruse
Megan Mauzy
Samuel Mancha
Paris Phipps
Annika Accardo
Elena Nabors
Caroline Foti
Jude Nesby
Chase Gordy
Carmela Driggers
Marlin Ostendorf
Harrison Dauber
$ cat names.txt | awk '{print $2 ", " $1}' | sort | uniq | column -c 100
Accardo, Annika     Hook, Christine     Ostendorf, Marlin
Crook, Almeda       Kersh, Hester       Penaflor, Dana
Dauber, Harrison    Lindley, Freddie    Phipps, Paris
Driggers, Carmela   Mancha, Samuel      Ruse, Wanda
Flythe, Shaneka     Mauzy, Megan        Weikel, Sally
Foti, Caroline      Nabors, Elena
Gordy, Chase        Nesby, Jude

এটি কেবল একটি উদাহরণ; হাজার হাজার আছে পাইপ ব্যবহার করে উল্লেখযোগ্যভাবে সহজ করা কয়েকটি অন্যান্য নির্দিষ্ট কাজের জন্য, এই পৃষ্ঠায় "দ্য ইউনিক্স দর্শন" বিভাগটি দেখুন ।


এই উত্তরটি আন্ডারস্কোর করতে, উপস্থাপনাটির 4 থেকে 9 এর স্লাইডগুলি দেখুন , "জেডশ কেন আপনার শেলের চেয়ে শীতল is"


আমি সচেতন যে উপরের কমান্ডটিতে একটি ইউইউসি রয়েছে । আমি এটি দাঁড়াতে দিলাম কারণ এটি একটি স্বেচ্ছাসেবক কমান্ডের জন্য স্থানধারক যা পাঠ্য উত্পন্ন করে।


3
ক্ষুদ্র ক্ষুদ্র নোট : দ্রুত sort -uকাজ করতে পারেন sort | uniq
আইভিলনোটেক্সিস্ট আইডোনোটেক্সিস্ট

cat names.txt | awk '{print $2 ", " $1}' | sort | uniq | column -c 100আপনি এটি অভ্যস্ত হতে পারে, কিন্তু আমি একেবারেই সহজ বলব না। বিশেষত awkঅংশ।
ফেডেরিকো পোলোনি

পাইপ সহজ। আমি বলেছিলাম, "... কোনও নির্দিষ্ট কাজের জন্য সাধারণ (বা জটিল) সরঞ্জামগুলির সংমিশ্রণে অসাধারণ শক্তি " "
ওয়াইল্ডকার্ড

5

পাইপগুলির আগে শিল্পের অবস্থা কী ছিল তা জানার জন্য আমি পিডিপি -10 / টপস -10 ম্যানুয়াল অনুসন্ধান করে এটি নিয়ে কিছুটা গবেষণা করার চেষ্টা করেছি। আমি দেখেছি এই , কিন্তু সমাজের সারাংশ -10 সাতিশয় google করা কঠিন। আছে: পাইপের উদ্ভাবন উপর কয়েক ভাল রেফারেন্স McIlroy সঙ্গে একটি সাক্ষাত্কারে , ইতিহাস এবং ইউনিক্স এর প্রভাব

আপনাকে এটি historicalতিহাসিক প্রসঙ্গে রাখতে হবে। আমরা গৃহীত আধুনিক সরঞ্জাম এবং সুবিধার জন্য অল্প কিছু বিদ্যমান of

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

একটি পিডিপি -7 এর মতো দেখাচ্ছে । একটি ইন্টারেক্টিভ ডিসপ্লে বা হার্ড ডিস্কের অভাব নোট করুন। "ফাইল সিস্টেম" চৌম্বকীয় টেপে সংরক্ষণ করা হবে। প্রোগ্রাম এবং ডেটা জন্য 64kB আপ মেমরি ছিল।

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

এখানে আবিষ্কারের বিষয়ে ম্যাকিলরোয় grep। আমি মনে করি প্রাক-ইউনিক্স পরিবেশে প্রয়োজনীয় কাজের পরিমাণের সংক্ষিপ্তকরণের এটি একটি ভাল কাজ করে।

"গ্রেপ আমার জন্য উদ্ভাবিত হয়েছিল। আমি একটি ভয়েস সিন্থেসাইজারের মাধ্যমে জোরে জোরে পাঠের জন্য একটি প্রোগ্রাম তৈরি করছিলাম। আমি ফোনটিক নিয়মগুলি আবিষ্কার করতে গিয়ে ওয়েবস্টারের ডিকশনারিটি যে শব্দগুলিতে ব্যর্থ হতে পারে তার জন্য পরীক্ষা করতাম। উদাহরণস্বরূপ, আপনি কীভাবে ডিজিট্রাফটি মোকাবেলা করবেন? ' ইউআই ', যা বিভিন্ন উপায়ে উচ্চারণ করা হয়:' ফল ',' ছলনা ',' দোষী ',' যন্ত্রণা ',' অন্তর্দৃষ্টি ',' বেইগুইন '? আমি অভিধানটি টুকরো টুকরো করে ফেলব যা এডের সীমিত বাফারের সাথে খাপ খায় এবং ব্যবহার করতে পারে একটি তালিকা নির্বাচন করার জন্য একটি বিশ্বব্যাপী কমান্ড each প্রতিটি প্রস্তাবিত নিয়ম কীভাবে কাজ করে তা দেখার জন্য আমি এ তালিকাটি বার বার স্ক্যানিংয়ের মাধ্যমে নীচে হিট করব would "

"প্রক্রিয়াটি ক্লান্তিকর এবং মারাত্মকভাবে অপ্রয়োজনীয়, যেহেতু অভিধানটি বিভক্ত করতে হয়েছিল (লাইনে একটি বিভাজন অনুলিপি রাখার পক্ষে কেউই সক্ষম ছিল না)। তারপরে এড প্রতিটি অংশকে / tmp এ অনুলিপি করে, g কমান্ডটি সম্পাদন করার জন্য এটি দুটি বার স্ক্যান করে, এবং অবশেষে এটিকে ছুঁড়ে ফেলেছে, এতে সময়ও লাগে "

"একদিন বিকেলে আমি কেন থম্পসনকে জিজ্ঞাসা করলাম যে তিনি সম্পাদক থেকে নিয়মিত এক্সপ্রেশন সনাক্তকারীকে তুলে ধরতে পারেন এবং এটি করার জন্য একটি পাসের প্রোগ্রাম তৈরি করতে পারেন। তিনি হ্যাঁ বলেছিলেন। পরের দিন সকালে আমি আমার মেইলে একটি গ্রেপ্তার নামক একটি প্রোগ্রাম ঘোষণা করে একটি নোট পেয়েছি। এটি একটি কবজির মতো কাজ করেছিল। যখন এই মজাদার নামটির অর্থ জিজ্ঞাসা করা হয়েছিল, কেন বলেছিলেন এটি সুস্পষ্ট।

এর প্রথম অংশটির cat names.txt | awk '{print $2 ", " $1}' | sort | uniq | column -c 100উদাহরণের সাথে তুলনা করুন । যদি আপনার বিকল্পগুলি "কমান্ড লাইন তৈরি করুন" বনাম "উদ্দেশ্যে উদ্দেশ্যে একটি প্রোগ্রাম লিখুন, হাতে হাতে, এসেম্বলারের ক্ষেত্রে", তবে কমান্ড লাইনটি তৈরি করার পক্ষে এটি মূল্যবান। এমনকি এটি করতে (কাগজ) ম্যানুয়ালগুলি পড়তে কয়েক ঘন্টা সময় লাগলেও। তারপরে আপনি এটি ভবিষ্যতের রেফারেন্সের জন্য লিখতে পারেন।


1

পাইপের প্রতিভা হ'ল এটি তিনটি গুরুত্বপূর্ণ ধারণাকে একত্রিত করে।

প্রথমত, পাইপ হ'ল 'কো-রুটিন' এর ব্যবহারিক প্রয়োগ, যা ১৯৫৮ সালে কনওয়ের দ্বারা নির্মিত একটি শব্দ যা প্রতিশ্রুতিশীল ছিল তবে পাইপের আগে ব্যবহারিক ব্যবহার খুব কমই দেখা যায়।

দ্বিতীয়ত, শেল ভাষাতে পাইপ প্রয়োগ করে, থম্পসন এট প্রথম প্রথম 'আঠালো ভাষা' আবিষ্কার করেছিলেন '

এই দুটি পয়েন্টগুলি পুনরায় ব্যবহারযোগ্য সফ্টওয়্যার উপাদানগুলিকে একটি নিম্ন-স্তরের, অনুকূলিত ভাষায় দক্ষতার সাথে বিকাশ করার অনুমতি দেয় এবং তারপরে একসাথে আটকানো হয়ে অনেক বড়, আরও জটিল কার্যকারিতা তৈরি করে। তারা এটিকে 'বৃহত্তর প্রোগ্রামিং' বলে অভিহিত করেছে।

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

যদি আপনি শেখার বক্ররেখার দিকে মনোযোগ দিতে চান তবে ইউনিক্স সফটওয়্যারটি আজ থেকে ঠিক ততটাই কার্যকর যেটি 40 বছর আগে ছিল। আমরা ক্রমাগত জিনিসগুলি পুনরায় উদ্ভাবন করছি যা তারা ইতিমধ্যে জানত এবং এর জন্য সমাধানগুলি তৈরি করেছিল। এবং মূল সাফল্য ছিল সহজ পাইপ। এর পরে একমাত্র আসল উদ্ভাবন হ'ল 80 এর দশকে ইন্টারনেট তৈরি করা। নাটকীয়ভাবে, ইউনিক্স একটি পৃথক এপিআই তৈরি করে এটির প্রয়োগ বাস্তবায়ন করেছে। আমরা এখনও পরিণতিগুলি ভোগ করছি ... ওহ, হ্যাঁ, ভিডিও প্রদর্শন এবং ইঁদুরগুলির সাথে এমন কিছু ছিল যা 80 এর দশকের শেষের দিকে জনপ্রিয় হয়েছিল। তবে তা ডাব্লুআইএমপিদের জন্য।

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