এই কি ঘটেছে যখন আমি মৃত্যুদন্ড কার্যকর করা হয় sudo su
দ্বারা অনুসরণexit
$ sudo su
# exit
exit
$
প্রস্থান আদেশটি আমার টার্মিনাল এমুলেটরটি বন্ধ করে না।
এটি কি শিশু টার্মিনাল?
এই কি ঘটেছে যখন আমি মৃত্যুদন্ড কার্যকর করা হয় sudo su
দ্বারা অনুসরণexit
$ sudo su
# exit
exit
$
প্রস্থান আদেশটি আমার টার্মিনাল এমুলেটরটি বন্ধ করে না।
এটি কি শিশু টার্মিনাল?
উত্তর:
একবার আপনি কার্যকর করুন sudo su
বা একটি নতুন শেল তৈরি হচ্ছে।su user
এক্সিকিউট করা exit
(বা Ctrl+ D) সদ্য তৈরি হওয়া শেলটি থেকে প্রস্থান করবে এবং আপনাকে আপনার আগের শেলটিতে ফিরিয়ে আনবে।
শুরুর পয়েন্ট - ব্যাশ শেল PID 25050 এ চলছে:
$ ps
PID TTY TIME CMD
25050 pts/17 00:00:00 bash
25200 pts/17 00:00:00 ps
রানিং sudo su
একটি নতুন বাশ প্রক্রিয়া তৈরি করে যা পিআইডি 25203 এ চলছে:
$ sudo su
# ps
PID TTY TIME CMD
25201 pts/17 00:00:00 sudo
25202 pts/17 00:00:00 su
25203 pts/17 00:00:00 bash
25213 pts/17 00:00:00 ps
# exit
প্রস্থান sudo su
এবং প্রারম্ভের পয়েন্টে ফিরে - ব্যাশ শেল PID 25050 এ চলছে:
$ ps
PID TTY TIME CMD
25050 pts/17 00:00:00 bash
25214 pts/17 00:00:00 ps
$
শিশু শেল সহ আপনি শেল থেকে চালিত শিশু প্রক্রিয়াগুলি স্বয়ংক্রিয়ভাবে একই টার্মিনালটি ব্যবহার করে। এটি কোনওভাবেই সুনির্দিষ্ট নয় sudo
- আপনি যখন শেল থেকে কোনও প্রোগ্রাম চালাবেন এটি সাধারণত এটি কাজ করে।
শেল এবং টার্মিনালগুলি আলাদা জিনিস। একটি শেল হ'ল আপনি টার্মিনালে কমান্ড চালানোর জন্য যা ব্যবহার করেন । একটি শেল ইন্টারেক্টিভভাবে কাজ করতে পারে - এটি আপনাকে একটি প্রম্পট দেয়, আপনি এটি একটি কমান্ড দেন, এটি কমান্ডটি চালায় বা কেন এটি করতে পারে না সে সম্পর্কে একটি ত্রুটি দেখায় এবং শেলটি ছাড়ার আগে পর্যন্ত প্রক্রিয়া পুনরাবৃত্তি করে। বা এটি একটি স্ক্রিপ্ট চালিয়ে, নিরবচ্ছিন্নভাবে পরিচালনা করতে পারে ।
যদিও আপনার টার্মিনালটি সম্ভবত (সম্ভবত!) অনুকরণযুক্ত , শারীরিক নয় , তবে উবুন্টুর মতো ইউনিক্স-এর মতো অপারেটিং সিস্টেমগুলি আপনার প্রতিটি টার্মিনালের জন্য ডিভাইস নোড দেয় এবং আপনি tty
কমান্ডটি দিয়ে কোন টার্মিনালটি ব্যবহার করছেন তা পরীক্ষা করতে পারেন । এটি সাধারণত হবে /dev/pts/0
, /dev/pts/1
, /dev/pts/2
, ইত্যাদি , একটি জন্য টার্মিনাল উইন্ডোর বা SSH সংযোগ , অথবা /dev/tty1
, /dev/tty2
, ইত্যাদি , জন্য ভার্চুয়াল কনসোল । আসলে কী tty
তা আপনাকে জানাতে হয় যে কোন টার্মিনাল, যদি কোনও হয় তবে ইনপুট নেওয়া হচ্ছে; বিস্তারিত জানার জন্য নীচে দেখুন।
ek@Io:~$ tty
/dev/pts/1
ek@Io:~$ bash
ek@Io:~$ tty
/dev/pts/1
ek@Io:~$ exit
exit
ek@Io:~$ sudo su
[sudo] password for ek:
root@Io:/home/ek# tty
/dev/pts/1
root@Io:/home/ek# exit
exit
ek@Io:~$
আপনি এটি দেখতে পাচ্ছেন, যদিও ইয়ারন খুব ভালভাবে ব্যাখ্যা করার সাথে সাথেsudo su
একটি নতুন শেল তৈরি করেছে , আপনি যে টার্মিনালটি ব্যবহার করছেন সেটি পরিবর্তন হয় না।
অবশ্যই, টার্মিনালটি একইরূপে পর্যবেক্ষণ করার আরেকটি উপায় রয়েছে: আপনি এখনও একইভাবে এবং একই জায়গায় ইনপুট লিখছেন, এবং একই পদ্ধতিতে এবং একই জায়গায় আউটপুট পড়ছেন।
সর্বাধিক কমান্ড আপনি একটি শেল চালানোর - যেমন ls
, cp
, mv
, rm
, touch
, wc
, du
, df
, ssh
, su
, sudo
, sh
, bash
, এবং অনেক আরো অনেক কিছু - কারণ একটি শিশু প্রক্রিয়া তৈরি করতে হবে। এই শিশু প্রক্রিয়াটির পিতা-মাতা হিসাবে আপনার শেল রয়েছে তবে এটি একটি পৃথক প্রোগ্রাম। ডিফল্টরূপে, এটি আপনার শেলের মতো একই টার্মিনালের সাথে সংযুক্ত ।
আপনার শেলটি এখনও চলছে, তবে প্রোগ্রামটি শেষ হওয়ার জন্য (বা এটি আপনাকে স্থগিত করার জন্য ) ব্যাকগ্রাউন্ডে অপেক্ষা করছে । প্রোগ্রামটি শেষ হয়ে গেলে, শেলটি এখনও চলমান থাকে এবং এটি আপনার পরবর্তী কমান্ডের জন্য অনুরোধ করে কার্যক্রম শুরু করে।
এগুলি প্রধান ব্যতিক্রমগুলি:
cd
, সব নতুন প্রক্রিয়া তৈরি করবেন না যদি না তিনি কনস্ট্রাক্ট করে একটি নিয়োগ ব্যবহার করা হয় subshell ( এখানে ব্যাখ্যা যেমন,) (
)
গোষ্ঠীবদ্ধ এবং পাইপলাইনগুলি ।&
। ( your-command arguments... &
)disown
যদিও আমি শিশু প্রসেসগুলি তাদের পিতামাতার মতো একই টার্মিনালের সাথে সংযুক্ত হওয়ার ব্যপারে সত্যই বিবেচনা করব না, তবে মনে রাখবেন যে আপনি যে প্রক্রিয়াটি টার্মিনালের শেল থেকে চালাচ্ছেন তা সর্বদা সেই টার্মিনাল থেকে ইনপুট নেবে না বা সেই টার্মিনালে আউটপুট প্রেরণ করবে না :
<
, >
এবং >>
অপারেটর।|
।যেহেতু tty
কমান্ডটি কেবল তার স্ট্যান্ডার্ড ইনপুটটি কোন টার্মিনালটি পরীক্ষা করে, আপনি এটি "বোকা" করতে পারেন:
ek@Io:~$ tty
/dev/pts/1
ek@Io:~$ tty </dev/pts/0
/dev/pts/0
বা, কম বিচক্ষণতার সাথে:
ek@Io:~$ tty </dev/null # not a terminal
not a tty
ek@Io:~$ tty <&- # closes the input stream
not a tty