আমার জ্ঞান অনুসারে, /dev/pts
ফাইলগুলি এসএসএস বা টেলনেট সেশনের জন্য তৈরি করা হয়।
tty
।
আমার জ্ঞান অনুসারে, /dev/pts
ফাইলগুলি এসএসএস বা টেলনেট সেশনের জন্য তৈরি করা হয়।
tty
।
উত্তর:
কিছুই সংরক্ষণ করা হয় না /dev/pts
। এই ফাইল সিস্টেমটি স্মৃতিতে বিশুদ্ধভাবে বাস করে।
এন্ট্রিগুলির /dev/pts
হয় সিউডো-টার্মিনাল (সংক্ষেপে Pty)। ইউনিক্স কার্নেলগুলির টার্মিনালের একটি সাধারণ ধারণা রয়েছে । একটি টার্মিনাল অ্যাপ্লিকেশনগুলির আউটপুট প্রদর্শন করার এবং টার্মিনাল ডিভাইসের মাধ্যমে ইনপুট পাওয়ার জন্য একটি উপায় সরবরাহ করে । একটি প্রক্রিয়াতে একটি নিয়ন্ত্রণকারী টার্মিনাল থাকতে পারে - একটি পাঠ্য মোড অ্যাপ্লিকেশনের জন্য, এটি এটি ব্যবহারকারীর সাথে ইন্টারেক্ট করে।
টার্মিনালগুলি হার্ডওয়্যার টার্মিনাল ("tty", "টেলি টাইপ" এর জন্য সংক্ষিপ্ত) বা সিউডো-টার্মিনাল ("পিটিআই") হতে পারে। হার্ডওয়্যার টার্মিনালগুলি কিছু ইন্টারফেস যেমন সিরিয়াল পোর্ট ( ttyS0
,…) বা ইউএসবি ( ttyUSB0
,…) বা পিসি স্ক্রিন এবং কীবোর্ডের মাধ্যমে ( tty1
,…) এর সাথে সংযুক্ত থাকে। সিউডো-টার্মিনালগুলি একটি টার্মিনাল এমুলেটর দ্বারা সরবরাহ করা হয়, যা একটি অ্যাপ্লিকেশন। সিউডো-টার্মিনালগুলির কয়েকটি ধরণের হ'ল:
যদি কোনও প্রোগ্রাম লেখার জন্য একটি টার্মিনাল খোলে, সেই প্রোগ্রাম থেকে আউটপুট টার্মিনালে প্রদর্শিত হবে। একই সাথে একাধিক প্রোগ্রাম টার্মিনালে আউটপুট করা সাধারণ বিষয়, যদিও এটি সময়ে বিভ্রান্ত হতে পারে কারণ আউটপুটটির কোন অংশটি কোন প্রোগ্রাম থেকে এসেছে তা বলার উপায় নেই। পটভূমি প্রক্রিয়াগুলি যা তাদের নিয়ন্ত্রণকারী টার্মিনালটিতে লেখার চেষ্টা করে সেগুলি স্বয়ংক্রিয়ভাবে একটি সিক্টোটিউ সংকেত দ্বারা স্থগিত করা যেতে পারে ।
যদি কোনও প্রোগ্রাম পড়ার জন্য একটি টার্মিনাল খোলে, ব্যবহারকারীর কাছ থেকে ইনপুটটি সেই প্রোগ্রামটিতে দেওয়া হবে। যদি একাধিক প্রোগ্রাম একই টার্মিনাল থেকে পড়তে থাকে তবে প্রতিটি অক্ষর একটি করে প্রোগ্রামে স্বতন্ত্রভাবে স্থানান্তরিত হয়; এটি সুপারিশ করা হয় না। সাধারণত নির্দিষ্ট সময়টিতে টার্মিনাল থেকে সক্রিয়ভাবে পড়া কেবল একটি একক প্রোগ্রাম রয়েছে; যে প্রোগ্রামগুলি অগ্রভাগে না থাকাকালীন তাদের নিয়ন্ত্রণকারী টার্মিনাল থেকে পড়ার চেষ্টা করে সেগুলি স্বয়ংক্রিয়ভাবে একটি সিগটিন সিগন্যাল দ্বারা স্থগিত করা হয় ।
পরীক্ষা করতে, tty
টার্মিনালটিতে চালনা করুন টার্মিনাল ডিভাইসটি কী। আসুন এটি বলা যাক /dev/pts/42
। অন্য টার্মিনালের শেলের মধ্যে, চালান echo hello >/dev/pts/42
: স্ট্রিংটি hello
অন্য টার্মিনালে প্রদর্শিত হবে। এখন cat /dev/pts/42
অন্য টার্মিনালে রান করুন এবং টাইপ করুন। যে হত্যা করতে cat
কমান্ড (যা অন্যান্য টার্মিনাল ব্যবহার করতে কঠিন করা হবে না), প্রেস Ctrl+ + C।
অন্য টার্মিনালে লিখন একটি বিজ্ঞপ্তি প্রদর্শনের জন্য মাঝে মাঝে দরকারী; উদাহরণস্বরূপ write
কমান্ড এটি করে। অন্য টার্মিনাল থেকে পড়া সাধারণত সম্পন্ন হয় না।
strace
প্রোগ্রাম পড়ার ইনপুট করতে পারেন , তবে এটি।
tostop
ফ্ল্যাগ সেট করা থাকলে SIGTTOU পান । এই পতাকাটি ডিফল্টরূপে সেট করা নেই। এবং আমি অ্যানোটার টিটিওয়াইয়ের রিডে সংশোধন করেছি। আমি এটি চেষ্টা করেছি এবং এটি কাজ করে, তবে এটি প্রতি-পঠনের ভিত্তিতে, প্রতি-চরিত্রের ভিত্তিতে নয় (শেল প্রম্পটে বসে যখন তারা শেলগুলি একবারে 1 টি অক্ষর পড়ে থাকে তেমন হয়)। এই বিষয়টিকে স্পষ্ট করে বলা ভাল যে এখন আমি আপনার উত্তরটি কীভাবে ব্যাখ্যা করেছি।
read
কল কেবল ধারাবাহিক অক্ষর (বা বরং বাইটস, আমার বলা উচিত) read
ফিরে আসবে, তবে কলটি কত বাইট ফিরে আসবে তার প্রয়োগটির কোনও নিয়ন্ত্রণ নেই , সুতরাং এটি আর ভাল নয়।
ফাইলগুলি /dev/pts
হ'ল "সিউডো-টিটিস"। এগুলি কিছুটা নামী পাইপের মতো তবে তারা ভিটি -100 এর মতো পুরানো সিরিয়াল-সংযোগ টার্মিনালগুলিও অনুকরণ করে। সিউডো-টিটিস কীবোর্ড থেকে প্রোগ্রামে বাইটগুলি স্থানান্তরিত করার কাজটি করে এবং প্রোগ্রাম থেকে আউটপুট ডিভাইসে স্থানান্তরিত করার কাজটি করে যা সহজ শোনায়। তবে এটি আপনার স্পষ্টতার প্রশ্নের উত্তর দেয়: কার্নেল /dev/pts/0
উদাহরণস্বরূপ কিছুই সংরক্ষণ করে না । সিউডো-টিটি-র সাথে সংযুক্ত একটি প্রোগ্রামের স্টাডাউট থেকে কেবল বাইটের স্ট্রিমগুলিই প্রবেশ করে এবং যে স্ট্রিন একই সিউডো-টিটির সাথে সংযুক্ত থাকে সেই প্রোগ্রামগুলি সেই বাইটগুলি পড়ে।
সিউডো-টিটিস বাইটগুলির সেই স্ট্রিমগুলিতে ইন্ডিয়ারেশনের একটি স্তরও রেখেছিল। কার্নেলটি "কন্ট্রোল-সি" বা "কন্ট্রোল-ডি" বা "নিয়ন্ত্রণ-ইউ" (যা সবগুলি কনফিগারযোগ্য, দেখুন man stty
) এর মতো বিশেষ মানগুলির জন্য বাইটগুলি পরিদর্শন করতে পারে এবং একটি সাইন ইন প্রেরণ করতে পারে, স্টিডিনে ফাইল-এর শেষ সেট করে, বা মুছতে পারে ইনপুট একটি লাইন। সেখানে কোথাও একটি বাফারিং ফাংশনও রয়েছে, সুতরাং আমার "স্টোরগুলি কিছুই নেই" কিছুটা ভুল তবে কেবল কয়েক কিলোবাইট দ্বারা।
কার্নেল আউটপুটে বাইট মানগুলি পরীক্ষা করতে পারে এবং একটি নিউলাইন (এএসসিআইআই লাইনফিড, এলএফ বা "\n"
) দুটি বাইট, ক্যারিজ-রিটার্ন এবং লাইনফিডে (সিআরএলএফ বা ) রূপান্তর করতে পারে "\r\n"
বা সিরিয়াল টার্মিনাল হার্ডওয়্যারটির জন্য বাইট বাইটগুলি যা যা করতে পারে। সিউডো-টিটি-র ইন্ডিয়ারেকশন হার্ডওয়্যার থেকে স্বাধীনতার অনুমতি দেয়।
সিউডো-টিটিস সমস্ত "সেট বাড রেট", "সেট প্যারিটি" এবং এ জাতীয় ioctl()
সিস্টেম কলগুলির অনুমতি দেয় এবং সম্ভবত তাদের সাথে কিছুই না করে। এটি ভিটি -100, এডিএম -3 এবং উইস ওয়েভেভার্সের দিনে ফিরে লিখিত প্রোগ্রামগুলিকে ত্রুটিযুক্ত না করেই কাজ চালিয়ে যেতে দেয়। সফ্টওয়্যার, সিউডো-টিটিস ডিভাইস ড্রাইভার, হার্ডওয়্যারের মতো কাজ করে।
সিউডো-টিটিস ব্যবহার করতে পারে sshd
এবং এটি ব্যবহার করতে পারে telnet
তবে এগুলি টার্মিনাল এমুলেটর (যেমন xterm
বা rxvt
) এবং শেল যা সাধারণত এক্সটারমের অভ্যন্তরে সঞ্চালিত হয় তার মধ্যেও ব্যবহৃত হয় ।
লিনাক্স এবং প্রচুর ইউনিক্সের সিউডো-টিটি রয়েছে। প্ল্যান 9 না। সিউডো-টিটিসগুলি সামান্য কিছুটা রেলিক্স, সিরিয়াল-কেবল সংযুক্ত হার্ডওয়্যার টার্মিনালগুলির দিনগুলি থেকে বাকি।
/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
অন্য টার্মিনাল থেকে কৌশলটি টানেন তবে আপনি টাইপ করার সময় খেয়াল করবেন, বিড়াল দ্বারা পড়া মূল স্ট্রোক স্ট্রেস আউটপুটে কোনও প্রতিক্রিয়া দেখাবে না - টার্মিনালটি ' তাদের পুনরুদ্ধার করা। সুতরাং জিইউআই টার্মিনাল অ্যাপ্লিকেশন এবং বিড়াল একই ডিভাইসটি পড়তে প্রতিযোগিতা করছে, যা শেল আউটপুট করছে।
echo Hello > /dev/pts/1
... দেখুন কি হয়, এটি আপনার টার্মিনাল।