Sudo su শেল পরিবর্তন করুন


13

যখনই আমি sudo suআমার স্বাভাবিক zsh(যেটি ওহ-মাই-জেডএস ফ্রেমওয়ার্ক ব্যবহার করে) থেকে ছুটে আসি, আমি shডিফল্টরূপে পুরাতন বোর্ন শেল ( ) ব্যবহার করতে বাধ্য হই (অবশ্যই; বেশিরভাগ * নিক্সের মতো সিস্টেমে এটি স্ট্যান্ডার্ড আচরণ)। যদি দৌড়ানোর পরে আমি যদি zshভেতর থেকে ছুটে যাই তবে আমি জেড শেলটি পাই, তবে ওহ-মাই-জেডএস এর কোনও উন্নতি ছাড়াই।shsudo su

শেল sudo suলঞ্চগুলিতে পরিবর্তন করার কোনও উপায় আছে কি zsh? যদি তা হয় তবে zshলঞ্চটির ব্যবহারটিও কি সম্ভব oh-my-zsh?

আমি ওএস এক্স 10.8.4 ব্যবহার করছি।

উত্তর:


21

একটি ইন্টারেক্টিভ শেলকে সুপারউসার হিসাবে চালিত করার আরেকটি উপায় sudo -s, যা $SHELLশেল হিসাবে ব্যবহৃত হয়।

অন্যান্য উত্তরে যেমন মন্তব্য করা হয়েছে, su -s /path/to/zshওএস এক্সে কাজ করে না As

ওএস এক্স লগইন শেলগুলি পরিবর্তন করতে সমর্থন করে না /etc/passwd, তবে আপনি এটি ব্যবহার করতে পারেন dscl:

$ dscl . -read /Users/root UserShell
/bin/sh
$ sudo dscl . -change /Users/root UserShell /bin/sh /bin/zsh
$ dscl . -read /Users/root UserShell
/bin/zsh
$ sudo su
My-iMac# echo $0
zsh
My-iMac# exit
$ sudo dscl . -change /Users/root UserShell /bin/zsh /bin/sh
$ 

/bin/shবেশিরভাগ প্ল্যাটফর্মগুলিতে আর কোনও বোর্ন শেল নয়। এটি ওএস এক্স-এ বাশ এবং উবুন্টুতে ড্যাশের একটি পসিএক্স-অনুবর্তী সংস্করণ


এই আমি প্রশ্ন চাইবে কি মনে করি। এটি অবশ্যই আমার পক্ষে কাজ করেছিল; তোমাকে অনেক ধন্যবাদ! তিনি এখন যা চেয়েছিলেন তা আমি সম্পাদনা করি - তিনি যা চেয়েছিলেন তা আমি মনে করি না, তাই এই প্রশ্নের পক্ষে আমি মোটামুটি এটিকে উত্সাহিত করতে পারি না, তবে আমি মনে করি আপনি যেভাবেই পদক পাওয়ার যোগ্য। আমার প্রশ্নের উত্তর আপনার কাছে ছিল !
Wyatt8740

4

suম্যানপেজ থেকে , দুটি উপায় আপনি এটি সম্পাদন করতে পারেন are


প্রথম পদ্ধতিটি হ'ল সহজেই -sবা --shellপতাকা ব্যবহার করা (ধরে নেওয়া যাক যে আপনি suএই যুক্তি সমর্থন করে এমন একটি সংস্করণ সহ একটি * এনআইএক্স-ভিত্তিক ওএস ব্যবহার করছেন ), আপনার পছন্দের শেলটির পথ অনুসরণ করবে। যদি পাস শেলটি পাওয়া যায় না, suতবে নিম্নলিখিত পদ্ধতিতে ফিরে আসে এবং এটি ব্যর্থ হলে, অনুরোধ করার চেষ্টা করবে /bin/sh

উদাহরণস্বরূপ, আপনি এইভাবে suচালু করতে বাধ্য করতে পারেন zsh(এটি বিদ্যমান বলে ধরে নিচ্ছেন /bin/zsh):

sudo su --shell /bin/zsh

দ্বিতীয় পদ্ধতিটি হ'ল rootব্যবহারকারীর জন্য নির্দিষ্ট ডিফল্ট শেলটি সংশোধন করা ( সতর্কতা অবলম্বন করুন! )। ফাইল সম্পাদনা করে /etc/passwdএবং rootব্যবহারকারীর জন্য নির্দিষ্ট শেল পরিবর্তন করে এটি করা যেতে পারে । শেলটি ডিফল্টরূপে কী নির্দিষ্ট করা হয়েছে তা দেখতে, আপনি নিম্নলিখিত কমান্ডটি চালিয়ে যেতে পারেন (ধরে নিলেন সুপারিউজারটি মূল হিসাবে):

sudo grep root /etc/passwd 

কমান্ডের মতো কিছু আউটপুট করা উচিত root:x:0:0:root:/root:/bin/bash। পরিবর্তে /bin/bashনির্দেশ করতে আপনি কেবল (বা আপনার সিস্টেমে যা কিছু সেট করা আছে) পরিবর্তন করতে পারেন zsh


3
বরাবরের মতো, মূলের শেল পরিবর্তন সম্পর্কে সতর্কতা অবলম্বন করুন। আপনি একক ব্যবহারকারী মোডে থাকতে চান না, এবং এটির ভাঙ্গা হলে একটি মূল শেল থাকে যা / usr প্রয়োজন। ইজারা নিয়ে নিশ্চিত করুন যে আপনার নতুন শেলটির পরিবর্তে যে কোনও ফাইল সিস্টেম নির্ভরতা নেই
রিচ হোমোলকা

চলমান sudo su -s /bin/zsh(বা ব্যবহার করে --shell) রিটার্ন দেয় su: illegal option -- s। আমি OS X 10.8.4 এ আছি; ওএস এক্স কি আলাদা কমান্ড নেয়?
জুলে

@ জুলসমজুর @ এর ফলাফল কী cat /etc/shells? প্রযুক্তিগতভাবে কেবলমাত্র সেই ফাইলটিতে অনুমোদিত শেলগুলি চালু করা হবে, যদিও suম্যানপেজটি বলে যে suএটি রুট দ্বারা ডাকা হলেও এটি বিবেচিত হবে না : এস
ব্রেকথ্রু

cat /etc/shells/bin/zshএকটি গ্রহণযোগ্য শেল হিসাবে ফিরে ।
জুলে

2
@ জুলেস মজুর দয়া করে মনে রাখবেন যে এই ধরণের বিভ্রান্তি এড়াতে আপনার ওএসকে সর্বদা অন্তর্ভুক্ত করুন।
টেরডন

1

আপনার কাস্টম শেলটি প্রসারণের ক্ষেত্রে আপনার সিস্টেমকে সুরক্ষা দেবে এমন একটি ক্লিনার উপায় হ'ল মূলের হোম ডিরেক্টরি ডাব্লু /

if [ -x /opt/local/bin/bash ]; then
    SHELL=/opt/local/bin/bash
    export SHELL
    exec /opt/local/bin/bash
else
    echo /opt/local/bin/bash not found using default shell of $SHELL
fi

ব্যাশের পরিবর্তে আপনি যে শেলটি চান তা কেবল পথ পরিবর্তন করুন।


0

এর মাধ্যমে সহজেই করা যায় chpass:

$ sudo chpass -s /bin/zsh
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.