টি এল; ডিআর :
- লগইন শেল কোথায় সংজ্ঞায়িত করা হয়? ভিতরে
/etc/passwd ।
- হয়
sudo su/ sudo su -/sudo -i / sudo -sএকই? না, তারা সকলেই একটি শেল স্প্যান করে তবে আলাদাভাবে এবং বিভিন্ন প্রসঙ্গে।
- কি করে
$SHELL? আপনার ডিফল্ট শেলটি কেবল একই হিসাবে বলুন /etc/passwd।
আসল উত্তর :
প্রথমত, এটি উল্লেখ করা গুরুত্বপূর্ণ যে shoptবাশ-নির্দিষ্ট। উদাহরণস্বরূপ, আমি mkshশেল ব্যবহারকারী, এবং এটি নেইshopt মতো kshনেই , যেমনটি হয় না।
এরপরে, ঠিক login_shellকী উপস্থাপন করার কথা? থেকেman bash :
login_shell
শেলটি এই বিকল্পটি সেট করে যদি লগইন শেল হিসাবে এটি শুরু হয় তবে
এটি মূল বিষয়। sudo -i, আপনি যে আগের উত্তরটি পড়েছেন তা ইতিমধ্যে জানেন, প্রাথমিক লগইন অনুকরণ করার কথা। এজন্য এই বিকল্পের জন্য shoptপ্রতিবেদনগুলি login_shell on। এটি ভাবুন যেন sudo -iশেলটিকে এমন ফাইলগুলির মধ্য দিয়ে যেতে বাধ্য করে যা কেবলমাত্র লগইন প্রক্রিয়া চলাকালীন উপস্থিত হয় (যা ইন্টারেক্টিভ শেল দ্বারা উত্সাহিত হয় না)।
অন্যান্য ক্ষেত্রে, আপনি ইতিমধ্যে শেলের উদাহরণ চালাচ্ছেন, সুতরাং এটি প্রথম স্থানে লগইন শেল হতে পারে না এবং বিকল্পগুলির উদ্দেশ্যটি ভিন্ন। sudo -sকেবলমাত্র পড়তে $SHELL(যা আপনার ডিফল্ট শেলটিকে সেট করার মতো উপস্থাপন করতে বোঝানো হয় /etc/passwd) ভেরিয়েবল এবং এটি রুট সুবিধার সাথে চালায়। এটি করা sudo $SHELLবা sudo mkshবা sudo bash(আপনি যা ব্যবহার করুন) এর সমতুল্য ।
মনে আছে আমি উল্লেখ করেছি যে আমি mkshব্যবহারকারী? এক নজর দেখে নাও:
$ bash --posix
bash-4.3$ sudo -s
[sudo] password for xieerqi:
DIR:/xieerqi|01:53|skolodya@ubuntu:
$ id
uid=0(root) gid=0(root) groups=0(root)
DIR:/xieerqi|01:53|skolodya@ubuntu:
$ echo $-
imsU
আপনি যা দেখছেন তা হ'ল এটি আমার শেল sudo -sথেকে লাফিয়ে উঠেছিল , আমি এটির জন্য নির্ধারিত বৈশিষ্ট্যযুক্ত প্রম্পটটি দিয়ে। এবং অবশ্যই, যেহেতু এটি কোনও লগইন অ্যাকশন নয়, কারণ এটি শেলটি অ-লগইন শেল উদাহরণ হিসাবে তৈরি হয়েছে বলে প্রতিবেদন করবে। আমার ক্ষেত্রে যাইহোক, আপনি দেখতে পাচ্ছেন যে সেখানে কোনও চিঠি নেই, যা যদি সেখানে লগইন শেল দৃষ্টান্ত থাকে।bashmkshbash$-l
অবশেষে, একই ধারণাটি প্রযোজ্য sudo suএবং sudo su -। পরে একটি স্প্যান লগইন শেল দৃষ্টান্ত (যেমন লগইন করার জন্য প্রয়োজনীয় নির্দিষ্ট ফাইলগুলি চলবে) এবং প্রাক্তন একগুলি কেবল ইন্টারেক্টিভ শেলগুলি (যেমন লগইন ফাইলগুলি চালিত হয় না) স্প্যান করে।
bash-4.3$ sudo su
[sudo] password for xieerqi:
root@eagle:/home/xieerqi# shopt login_shell
login_shell off
root@eagle:/home/xieerqi# exit
bash-4.3$ sudo su -
[sudo] password for xieerqi:
$ shopt login_shell
login_shell on
তাই টেকনিক্যালি, shopt login_shellকোনও সম্পর্ক নেই $SHELLসবটা। এটিকে এভাবে ভাবুন: বাশ কীভাবে চলে তা দেখানো এর উদ্দেশ্য ।$SHELLআপনি যা অর্পণ করেছেন কেবল তার প্রতিফলন ঘটানোর কথা /etc/passwd।
লগইন শেল এবং নন-লগইন শেলের মধ্যে পার্থক্য হিসাবে, এটি উত্তরের সম্মানিত গিলস এই উত্তরটিতে ইউনিক্স.স্ট্যাকেক্সেঞ্জ ডটকম এ ব্যাখ্যা করেছেন ।
অতিরিক্ত মজা
এখানে আপনি মজাদার কিছু চেষ্টা করতে পারেন। আপনি ইতিমধ্যে জানেন যে একটি লগইন শেল চলবে .profile(এবং .bashrcযেহেতু উবুন্টু এটির .profile জন্য কনফিগার করা আছে ) তবে লগ-ইন না করে কেবল .bashrcফাইল চালানো হবে। সুতরাং আমরা পরীক্ষা করতে পারি echoযে এই কমান্ডগুলির মধ্যে কোনটি একটি লগইন শেল চালায় এবং কোনটি নয় এবং আমরা echoলগইন শেলটির জন্য দুটি লাইন এবং অ-লগইন করার জন্য কেবল একটির প্রত্যাশা করি ।
$ echo "echo 'hi,i am .profile'" >> .profile
$ echo "echo 'hi, i am .bashrc'" >> .bashrc
$ sudo -i
hi, i am .bashrc
hi,i am .profile
$ sudo su
hi, i am .bashrc
root@eagle:~# sudo su -
hi, i am .bashrc
hi,i am .profile
$ sudo -s
hi, i am .bashrc
root@eagle:~#
যথাযথভাবে যথেষ্ট, দু'টি লাইনের আউটপুট থাকা লোকেরা login_shellসেট হয়ে যাবে on।
.profileবা সমতুল্য), এবং ২ It's ব্যবহারকারী হিসাবে সংজ্ঞায়িত/etc/passwdবা সমতুল্য।$SHELLপরেরটি রয়েছে, আপনারshoptফলাফলগুলি পূর্বের সাথে ডিল করে। সাধারণত, যখন (2) শেলটি লগইন করার সময় শুরু হয়, তখন এটি (1) এর জন্য প্রয়োজনীয় নির্দিষ্ট পদ্ধতিতে শুরু করা হয়, সুতরাং অর্থের সংমিশ্রণ।