क्या सुडो सु एक चाइल्ड टर्मिनल बनाता है?


9

मेरे sudo suद्वारा निष्पादित किए जाने पर यही हुआexit

$ sudo su
# exit
exit
$ 

निकास आदेश मेरे टर्मिनल एमुलेटर को बंद नहीं करता है।

क्या यह चाइल्ड टर्मिनल है?

जवाबों:


16

एक बार जब आप निष्पादित करते हैं sudo suया एक नया शेल बनाया जा रहा है।su user

निष्पादन exit(या Ctrl+ D) नव निर्मित शेल से बाहर निकलेगा और आपको आपके पिछले शेल में लौटा देगा।

  1. प्रारंभिक बिंदु - बैश शेल PID 25050 पर चल रहा है:

    $ ps
      PID TTY          TIME CMD
    25050 pts/17   00:00:00 bash
    25200 pts/17   00:00:00 ps
    
  2. रनिंग sudo suएक नई बैश प्रक्रिया बनाती है जो PID 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
    
  3. बाहर निकलने sudo suऔर प्रारंभिक बिंदु पर लौटने - पीआईडी ​​25050 पर बैश शेल चल रहा है:

    $ ps
      PID TTY          TIME CMD
    25050 pts/17   00:00:00 bash
    25214 pts/17   00:00:00 ps
    $
    

तो क्या इसे एक बच्चे के खोल के रूप में माना जा सकता है?
ऋषभ रंजन

1
@ReeshabhRanjan - हाँ
Yaron

17

समान टर्मिनल, अलग शेल।

बाल प्रक्रियाएं आप एक शेल से चलाते हैं, जिसमें बाल के गोले भी शामिल हैं, एक ही टर्मिनल का स्वचालित रूप से उपयोग करते हैं। यह 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, और कई और अधिक - कारण एक बच्चे की प्रक्रिया बनाया जाना। इस बच्चे की प्रक्रिया में आपके माता-पिता के रूप में आपका खोल है लेकिन यह एक अलग कार्यक्रम है। डिफ़ॉल्ट रूप से, यह आपके शेल के समान टर्मिनल से जुड़ा होता है।

आपका शेल अभी भी चल रहा है, लेकिन यह प्रोग्राम को समाप्त करने के लिए पृष्ठभूमि में इंतजार कर रहा है (या आप इसे निलंबित करने के लिए )। जब कार्यक्रम समाप्त हो जाता है, तो शेल अभी भी चल रहा है और यह आपके अगले कमांड के लिए संकेत देते हुए, ऑपरेशन फिर से शुरू करता है।

ये प्रमुख अपवाद हैं:

हालाँकि मैं वास्तव में इस बात को अपवाद नहीं मानूंगा कि बाल प्रक्रियाएँ एक ही टर्मिनल से उनके माता-पिता के रूप में जुड़ी हुई हैं, ध्यान दें कि आप जिस प्रक्रिया से किसी टर्मिनल में शेल से चलते हैं, वह हमेशा उस टर्मिनल से इनपुट नहीं लेगा या उस टर्मिनल को आउटपुट नहीं भेजेगा। :

चूंकि 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.