/ Dev / pts ফাইলগুলিতে কী সঞ্চিত থাকে এবং আমরা সেগুলি খুলতে পারি?


73

আমার জ্ঞান অনুসারে, /dev/ptsফাইলগুলি এসএসএস বা টেলনেট সেশনের জন্য তৈরি করা হয়।


6
echo Hello > /dev/pts/1... দেখুন কি হয়, এটি আপনার টার্মিনাল।
সিপাহারাড সলুর


1
@ সেপাহ্রাডসালোরকে পিটিএস নম্বরটি তার প্রসঙ্গে মানিয়ে নিতে হবে। আমার এসএসডি আমার সেশনের জন্য / dev / pts / 30 ব্যবহার করেছে।
গ্যাব 好人

2
@ গ্যাব 是 好人 আপনার বর্তমান টার্মিনালের অবস্থান পেতে, আপনি কমান্ডটি ব্যবহার করতে পারেন tty
জেরোজেজে

উত্তর:


110

কিছুই সংরক্ষণ করা হয় না /dev/pts। এই ফাইল সিস্টেমটি স্মৃতিতে বিশুদ্ধভাবে বাস করে।

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

টার্মিনালগুলি হার্ডওয়্যার টার্মিনাল ("tty", "টেলি টাইপ" এর জন্য সংক্ষিপ্ত) বা সিউডো-টার্মিনাল ("পিটিআই") হতে পারে। হার্ডওয়্যার টার্মিনালগুলি কিছু ইন্টারফেস যেমন সিরিয়াল পোর্ট ( ttyS0,…) বা ইউএসবি ( ttyUSB0,…) বা পিসি স্ক্রিন এবং কীবোর্ডের মাধ্যমে ( tty1,…) এর সাথে সংযুক্ত থাকে। সিউডো-টার্মিনালগুলি একটি টার্মিনাল এমুলেটর দ্বারা সরবরাহ করা হয়, যা একটি অ্যাপ্লিকেশন। সিউডো-টার্মিনালগুলির কয়েকটি ধরণের হ'ল:

  • জিইউআই অ্যাপ্লিকেশন যেমন এক্সটার্ম, জিনোম-টার্মিনাল, কনসোল,… কীবোর্ড এবং মাউস ইভেন্টগুলিকে পাঠ্য ইনপুটগুলিতে রূপান্তর করে এবং কিছু ফন্টে গ্রাফিকভাবে আউটপুট প্রদর্শন করে।
  • প্রকৃত টার্মিনাল থেকে পাঠ্য মোড অ্যাপ্লিকেশনগুলি ডিকুয়াল করতে, একাধিক প্লেয়ার অ্যাপ্লিকেশন যেমন স্ক্রিন এবং tmux রিলে ইনপুট এবং অন্য টার্মিনাল থেকে এবং আউটপুট।
  • রিমোট শেল অ্যাপ্লিকেশন যেমন sshd, telnetd, rlogind,… ক্লায়েন্টে রিমোট টার্মিনাল এবং সার্ভারে একটি pty এর মধ্যে রিলে ইনপুট এবং আউটপুট।

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

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

পরীক্ষা করতে, ttyটার্মিনালটিতে চালনা করুন টার্মিনাল ডিভাইসটি কী। আসুন এটি বলা যাক /dev/pts/42। অন্য টার্মিনালের শেলের মধ্যে, চালান echo hello >/dev/pts/42: স্ট্রিংটি helloঅন্য টার্মিনালে প্রদর্শিত হবে। এখন cat /dev/pts/42অন্য টার্মিনালে রান করুন এবং টাইপ করুন। যে হত্যা করতে catকমান্ড (যা অন্যান্য টার্মিনাল ব্যবহার করতে কঠিন করা হবে না), প্রেস Ctrl+ + C

অন্য টার্মিনালে লিখন একটি বিজ্ঞপ্তি প্রদর্শনের জন্য মাঝে মাঝে দরকারী; উদাহরণস্বরূপ writeকমান্ড এটি করে। অন্য টার্মিনাল থেকে পড়া সাধারণত সম্পন্ন হয় না।


হয় আপনি যা বলতে চাইছেন তা ভুল বুঝাবুঝি করছি বা আপনার তথ্য বন্ধ আছে। টার্মিনালটিতে পটভূমি প্রসেসগুলি লেখার ফলে কোনও SIGTTIN আসবে না। বা একই সময়ে টার্মিনাল থেকে একাধিক প্রোগ্রামগুলি পড়তে পারে না (আপনার বক্তব্য যে "প্রতিটি অক্ষর স্বতন্ত্রভাবে রাউটেড হয়")। যে কোনও সময় টার্মিনাল থেকে কেবল একটি প্রোগ্রামই পড়তে পারে এবং একটি পটভূমি প্রোগ্রামের মাধ্যমে সেই টার্মিনালটি থেকে পড়ার চেষ্টা সাইনটিনের ফলস্বরূপ। এটাই একমাত্র ঘটনা যেখানে সাইনটিন স্বয়ংক্রিয়ভাবে প্রেরণ করা হয়।
প্যাট্রিক

এছাড়াও আপনি অন্য টার্মিনাল থেকে পড়তে পারবেন না। আপনি ডেটা বাধা দিতে সক্ষম হবেন এটি করা একটি গুরুত্বপূর্ণ সুরক্ষার দুর্বলতা। আপনি straceপ্রোগ্রাম পড়ার ইনপুট করতে পারেন , তবে এটি।
প্যাট্রিক

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

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

2
@ পেট্রিক শিওর, একটি readকল কেবল ধারাবাহিক অক্ষর (বা বরং বাইটস, আমার বলা উচিত) readফিরে আসবে, তবে কলটি কত বাইট ফিরে আসবে তার প্রয়োগটির কোনও নিয়ন্ত্রণ নেই , সুতরাং এটি আর ভাল নয়।
গিলস

18

ফাইলগুলি /dev/ptsহ'ল "সিউডো-টিটিস"। এগুলি কিছুটা নামী পাইপের মতো তবে তারা ভিটি -100 এর মতো পুরানো সিরিয়াল-সংযোগ টার্মিনালগুলিও অনুকরণ করে। সিউডো-টিটিস কীবোর্ড থেকে প্রোগ্রামে বাইটগুলি স্থানান্তরিত করার কাজটি করে এবং প্রোগ্রাম থেকে আউটপুট ডিভাইসে স্থানান্তরিত করার কাজটি করে যা সহজ শোনায়। তবে এটি আপনার স্পষ্টতার প্রশ্নের উত্তর দেয়: কার্নেল /dev/pts/0উদাহরণস্বরূপ কিছুই সংরক্ষণ করে না । সিউডো-টিটি-র সাথে সংযুক্ত একটি প্রোগ্রামের স্টাডাউট থেকে কেবল বাইটের স্ট্রিমগুলিই প্রবেশ করে এবং যে স্ট্রিন একই সিউডো-টিটির সাথে সংযুক্ত থাকে সেই প্রোগ্রামগুলি সেই বাইটগুলি পড়ে।

সিউডো-টিটিস বাইটগুলির সেই স্ট্রিমগুলিতে ইন্ডিয়ারেশনের একটি স্তরও রেখেছিল। কার্নেলটি "কন্ট্রোল-সি" বা "কন্ট্রোল-ডি" বা "নিয়ন্ত্রণ-ইউ" (যা সবগুলি কনফিগারযোগ্য, দেখুন man stty) এর মতো বিশেষ মানগুলির জন্য বাইটগুলি পরিদর্শন করতে পারে এবং একটি সাইন ইন প্রেরণ করতে পারে, স্টিডিনে ফাইল-এর শেষ সেট করে, বা মুছতে পারে ইনপুট একটি লাইন। সেখানে কোথাও একটি বাফারিং ফাংশনও রয়েছে, সুতরাং আমার "স্টোরগুলি কিছুই নেই" কিছুটা ভুল তবে কেবল কয়েক কিলোবাইট দ্বারা।

কার্নেল আউটপুটে বাইট মানগুলি পরীক্ষা করতে পারে এবং একটি নিউলাইন (এএসসিআইআই লাইনফিড, এলএফ বা "\n") দুটি বাইট, ক্যারিজ-রিটার্ন এবং লাইনফিডে (সিআরএলএফ বা ) রূপান্তর করতে পারে "\r\n"বা সিরিয়াল টার্মিনাল হার্ডওয়্যারটির জন্য বাইট বাইটগুলি যা যা করতে পারে। সিউডো-টিটি-র ইন্ডিয়ারেকশন হার্ডওয়্যার থেকে স্বাধীনতার অনুমতি দেয়।

সিউডো-টিটিস সমস্ত "সেট বাড রেট", "সেট প্যারিটি" এবং এ জাতীয় ioctl()সিস্টেম কলগুলির অনুমতি দেয় এবং সম্ভবত তাদের সাথে কিছুই না করে। এটি ভিটি -100, এডিএম -3 এবং উইস ওয়েভেভার্সের দিনে ফিরে লিখিত প্রোগ্রামগুলিকে ত্রুটিযুক্ত না করেই কাজ চালিয়ে যেতে দেয়। সফ্টওয়্যার, সিউডো-টিটিস ডিভাইস ড্রাইভার, হার্ডওয়্যারের মতো কাজ করে।

সিউডো-টিটিস ব্যবহার করতে পারে sshdএবং এটি ব্যবহার করতে পারে telnetতবে এগুলি টার্মিনাল এমুলেটর (যেমন xtermবা rxvt) এবং শেল যা সাধারণত এক্সটারমের অভ্যন্তরে সঞ্চালিত হয় তার মধ্যেও ব্যবহৃত হয় ।

লিনাক্স এবং প্রচুর ইউনিক্সের সিউডো-টিটি রয়েছে। প্ল্যান 9 না। সিউডো-টিটিসগুলি সামান্য কিছুটা রেলিক্স, সিরিয়াল-কেবল সংযুক্ত হার্ডওয়্যার টার্মিনালগুলির দিনগুলি থেকে বাকি।


13

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

উপস্থাপিত অনেকগুলি ডিভাইস ভার্চুয়াল। /dev/ptsএটিতে কনসোল ডিভাইসগুলিতে থাকা এন্ট্রিগুলি অন্তর্ভুক্ত রয়েছে । এ কারণেই একটি দূরবর্তী সেশনের জন্য তৈরি করা হয়; আপনি একটি স্থানীয় জিইউআই টার্মিনাল খুললে এগুলিও তৈরি হয়।

আপনি এগুলি ফাইল হিসাবে খুলতে পারেন, যদিও এটি খুব বেশি ব্যবহারের মূল্য নয়। /dev/ptsআপনার শেলটি সংযুক্ত থাকা নোডটি পেতে , ব্যবহার করুন tty:

> tty
/dev/pts/4

এখন অন্য কিছু কনসোলে স্যুইচ করুন এবং চেষ্টা করুন:

> echo "duck!" > /dev/pts/4

চালাক। এখন চেষ্টা করুন:

> cat /dev/pts/4

তারপরে শেলটি / dev / pts / 4 এ ব্যবহার করে চেষ্টা করুন। আপনি যতক্ষণ না আপনি প্রস্থান আটকে করছি catঅন্য দিকে, কিন্তু আপনি কি পয়েন্ট / 4 তে টাইপ অধিকাংশ মধ্য দিয়ে পাস হবে (চেষ্টা যেমন "ওহে দুনিয়া" আমি সঙ্গে শেষ পর্যন্ত hlপয়েন্ট চালু / 4 এবং ello wordউপর catকনসোল)।

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

read(0, "h", 1)                         = 1
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
write(2, "h", 1h)                        = 1
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
read(0, "e", 1)                         = 1
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
write(2, "e", 1e)                        = 1
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
read(0, "y", 1)                         = 1
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
write(2, "y", 1y)                        = 1
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0

টাইপ করা প্রতিটি অক্ষরের জন্য মানক ইনপুট থেকে পাঠ্য এবং স্ট্যান্ডার্ড আউট থেকে একটি লেখা রয়েছে। তবে শেলের স্ট্যান্ডার্ড কীসের সাথে যুক্ত? এখন straceআপনার জিইউআই টার্মিনালটিতে চেষ্টা করুন - আপনি যদি নামটি না জানেন তবে আপনাকে নামটি বের করতে হবে, উদাহরণস্বরূপ, কে-ডি-ই এটির konsole, এবং জিনোমের রয়েছে gnome-terminal, আমি বিশ্বাস করি। এটি থেকে আউটপুট straceসম্ভবত আরও ক্রিপ্টিক - খনিতে রয়েছে প্রচুর poll()এবং recvfrom()। আমি কোনও লেখাগুলি দেখতে পাচ্ছি না, তবে আপনি যদি এখন catঅন্য টার্মিনাল থেকে কৌশলটি টানেন তবে আপনি টাইপ করার সময় খেয়াল করবেন, বিড়াল দ্বারা পড়া মূল স্ট্রোক স্ট্রেস আউটপুটে কোনও প্রতিক্রিয়া দেখাবে না - টার্মিনালটি ' তাদের পুনরুদ্ধার করা। সুতরাং জিইউআই টার্মিনাল অ্যাপ্লিকেশন এবং বিড়াল একই ডিভাইসটি পড়তে প্রতিযোগিতা করছে, যা শেল আউটপুট করছে।


আমরা আটকে থাকাকালীন 'ক্যাট / ডেভ / পিটিএস / 4' এর ব্যবহার কী এবং এই আদেশটি কার্যকর করার সময় আমরা কেন স্টক করছি।
ব্যবহারকারী 2720323

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