টি এল; ডিআর :
- লগইন শেল কোথায় সংজ্ঞায়িত করা হয়? ভিতরে
/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
থেকে লাফিয়ে উঠেছিল , আমি এটির জন্য নির্ধারিত বৈশিষ্ট্যযুক্ত প্রম্পটটি দিয়ে। এবং অবশ্যই, যেহেতু এটি কোনও লগইন অ্যাকশন নয়, কারণ এটি শেলটি অ-লগইন শেল উদাহরণ হিসাবে তৈরি হয়েছে বলে প্রতিবেদন করবে। আমার ক্ষেত্রে যাইহোক, আপনি দেখতে পাচ্ছেন যে সেখানে কোনও চিঠি নেই, যা যদি সেখানে লগইন শেল দৃষ্টান্ত থাকে।bash
mksh
bash
$-
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) এর জন্য প্রয়োজনীয় নির্দিষ্ট পদ্ধতিতে শুরু করা হয়, সুতরাং অর্থের সংমিশ্রণ।