'সুডো সু -' বনাম 'সুডো-আই' বনাম 'সুডো / বিন / বাশ' - কখন ব্যবহৃত হয় তা কোন বিষয় বিবেচনা করে না, বা এটি আদৌ কিছু যায় আসে?


254

যখন আমি এমন কিছু কাজ করি যার জন্য টানা কয়েকবার কয়েকবার রুট টাইপ করা দরকার হয়, আমি আমার অধিবেশনটিকে একটি রুট সেশনে স্যুইচ করতে পছন্দ করি। বিভিন্ন টিউটোরিয়াল এবং নির্দেশাবলী আমি ইন্টারনেটে ব্যবহার করেছেন, আমি দেখতে sudo su, sudo su -, sudo -iএবং sudo /bin/bashএকটি রুট অধিবেশন খোলার জন্য ব্যবহার করা হচ্ছে, কিন্তু আমি এই এবং যখন মধ্যবর্তী অথবা যদি পার্থক্যটা বিষয় পার্থক্য স্পষ্ট নই।

কেউ কি আমার জন্য এটি পরিষ্কার করতে পারেন?


11
আপনি সম্পর্কে জিজ্ঞাসা করতে ভুলে গেছেন sudo -sএবং sudo su
রাদু রেডানু




3
@ রদুআরেদানু আমি যখন প্রশ্নটি টাইপ করতাম তখন আমি প্রস্তাবিত প্রশ্নগুলি পর্যালোচনা করি এবং এর মধ্যে কোনওটিই আমার সম্পূর্ণ প্রশ্নের সমাধান করেনি। আপনার লিঙ্কিত প্রশ্নগুলির ক্ষেত্রেও এটি একই। যদিও সেগুলি আমার জন্য প্রচুর নতুন তথ্য ধারণ করে এবং তাদের সাথে লিঙ্ক করার জন্য আপনাকে ধন্যবাদ জানায়, নীচের উত্তর ব্যবহারকারী বিশৃঙ্খলাটি সরবরাহ করার মতো আমি এগুলি সম্পূর্ণরূপে পাইনি, যা আমি যা খুঁজছিলাম তার সাথে সামঞ্জস্যপূর্ণ।
পল

উত্তর:


325

এটি ব্যাখ্যা করার জন্য আপনার প্রোগ্রামগুলি কী করে তা জানতে হবে:

  • su- কমান্ড suআর একজন ব্যবহারকারী (স্যুইচ করতে ব্যবহৃত হয় গুলি জাদুকরী তোমার দর্শন লগ করা Ser), কিন্তু আপনার কাছে কোন প্যারামিটার দিয়ে কমান্ড আবাহন করার মাধ্যমে মূল ব্যবহারকারীর কাছে সুইচ করতে পারেন। suআপনাকে পাসওয়ার্ড টাইপ করার পরে ব্যবহারকারীর পরিবেশে স্যুইচ করে দেওয়া ব্যবহারকারীর পাসওয়ার্ড জিজ্ঞাসা করবে।
  • sudo- sudoএর অর্থ মূল অধিকারগুলির সাথে একটি একক কমান্ড চালানো। তবে এর বিপরীতে suএটি আপনাকে বর্তমান ব্যবহারকারীর পাসওয়ার্ডের জন্য অনুরোধ করবে। এই ব্যবহারকারীর অবশ্যই sudoers ফাইল (অথবা একটি গ্রুপ যা sudoers ফাইলে আছে) থাকতে হবে। ডিফল্টরূপে, উবুন্টু আপনার পাসওয়ার্ডটি 15 মিনিটের জন্য "মনে রাখে", যাতে প্রতিবার আপনার পাসওয়ার্ড টাইপ করতে না হয়।
  • bash- কম্পিউটারের সাথে ইন্টারেক্ট করার জন্য একটি পাঠ্য-ইন্টারফেস। লগইন, নন-লগইন, ইন্টারেক্টিভ এবং অ-ইন্টারেক্টিভ শেলের মধ্যে পার্থক্যটি বোঝা গুরুত্বপূর্ণ:

শাঁসের প্রকার:

  • লগইন শেল : একটি লগইন শেল আপনাকে নির্দিষ্ট ব্যবহারকারী হিসাবে সিস্টেমে লগইন করে, এর জন্য প্রয়োজনীয় একটি ব্যবহারকারীর নাম এবং পাসওয়ার্ড। যখন আপনি ভার্চুয়াল টার্মিনালটিতে লগইন করতে ctrl+ alt+ চাপুন তখন আপনি F1সফল লগইন করার পরে একটি লগইন শেল পাবেন।
  • অ-লগইন শেল : লগ-ইন না করে কার্যকর করা একটি শেল, এটির জন্য প্রয়োজনীয় বর্তমানে লগ-ইন করা ব্যবহারকারী। আপনি যখন জিনোমে কোনও গ্রাফিক টার্মিনাল খুলবেন এটি একটি লগ-ইন শেল।
  • ইন্টারেক্টিভ শেল : একটি শেল (লগইন বা অ-লগইন) যেখানে আপনি ইন্টারেক্টিভভাবে আদেশগুলি টাইপ করতে বা বাধা দিতে পারেন। উদাহরণস্বরূপ একটি জিনোম টার্মিনাল।
  • অ-ইন্টারেক্টিভ শেল : একটি (উপ) শেল যা সম্ভবত একটি স্বয়ংক্রিয় প্রক্রিয়া থেকে চালিত। আপনি ইনপুট এবং আউটপুট উভয়ই দেখতে পাবেন।

সুতরাং কেসগুলি হ'ল:

  • sudo susudoকমান্ড সহ কল su। বাশকে ইন্টারেক্টিভ নন-লগইন শেল হিসাবে ডাকা হয়। সুতরাং বাশ শুধুমাত্র চালায় .bashrc। আপনি দেখতে পাচ্ছেন যে রুটে স্যুইচ করার পরে আপনি এখনও একই ডিরেক্টরিতে রয়েছেন:

    user@host:~$ sudo su
    root@host:/home/user#
  • sudo su -এবার এটি লগইন শেল, সুতরাং /etc/profile, .profileএবং .bashrcকার্যকর করা হয় এবং আপনি রুটের পরিবেশের সাথে নিজেকে মূলের হোম ডিরেক্টরিতে দেখতে পাবেন।

  • sudo -iএটি প্রায় একইরকম sudo su --i (প্রাথমিক প্রারম্ভিক অনুকরণ) অপশনটি লগইন শেল হিসাবে লক্ষ্য ব্যবহারকারীর পাসওয়ার্ড ডাটাবেস এন্ট্রি দ্বারা নির্দিষ্ট শেলটি চালায়। এর অর্থ হ'ল লগইন-সম্পর্কিত সংস্থানীয় ফাইলগুলি .profile, .bashrcবা .loginশেল দ্বারা পড়া এবং সম্পাদন করা হবে।

  • sudo /bin/bashএর অর্থ আপনি sudoকমান্ডটি দিয়ে কল করেছেন /bin/bash/bin/bashলগ-ইন শেল হিসাবে শুরু করা হয়েছে যাতে সমস্ত ডট-ফাইল কার্যকর করা হয় না, তবে ব্যাশ নিজেই .bashrcকলিং ব্যবহারকারীর পড়েন । আপনার পরিবেশ একই থাকে। আপনার বাড়িটি মূলের বাড়ি হবে না। সুতরাং আপনি মূল, কিন্তু কলিং ব্যবহারকারীর পরিবেশে।

  • sudo -s$SHELLভেরিয়েবলটি পড়ে এবং সামগ্রীটি কার্যকর করে। যদি এটি $SHELLথাকে তবে /bin/bashএটি sudo /bin/bashউপরোক্ত (উপরে দেখুন)।

পরীক্ষা করে দেখুন:

আপনি লগইন শেলটিতে shoptরয়েছেন কিনা তা যাচাই করতে (কেবলমাত্র বিল্টিন কমান্ড বলে ব্যাশে কাজ করে):

shopt -q login_shell && echo 'Login shell' || echo 'No login shell'

18
কেবল একটি স্পষ্টকরণ: sudoএকজন অনুমোদিত ব্যবহারকারীকে অতিরিক্ত ব্যবহারকারীর বা অন্য কোনও ব্যবহারকারী হিসাবে একটি কমান্ড চালানোর অনুমতি দেয় । যাইহোক, আপনার চেষ্টার জন্য +1 করুন।
রাদু রেদেনু

2
@ চাওস এই দুর্দান্ত উত্তরের জন্য আপনাকে ধন্যবাদ! এটি বেশিরভাগই আমার প্রশ্নের উত্তর দেয়, তাই আমি এগিয়ে গিয়ে প্রশ্নের উত্তর চিহ্নিত করেছিলাম, তবে নির্দিষ্ট শেলটি চালানো কখন পছন্দনীয় তা আমি বুঝতে পারি না। আমি সত্যই কেবল কমান্ড লাইনের মাধ্যমে উবুন্টু ব্যবহার করি এবং যখন আমি কোনও এমন কিছু করছি যার জন্য বিশেষাধিকারের ভারী ব্যবহারের প্রয়োজন হয় যেমন নতুন কিছু ইনস্টল করার সময় বা কোনও বড় পুনর্গঠন সম্পাদন করার সময় আমি rootব্যবহারকারীর সেশন খোলার জন্য আমার সবচেয়ে সাধারণ ব্যবহার sudoদেখতে পাই vs root। আমি ব্যবহার করছি sudo /bin/bash, তবে দৃশ্যত সেই পদ্ধতির কোনও খারাপ কারণ আছে যা আমি বুঝতে পারি না।
পল

2
এছাড়াও, এটি আরও "সঠিক" বলা উচিত যে সুপারটি ব্যবহারকারীর পরিবর্তে স্যুইচ ব্যবহারকারীদের পক্ষে। অর্থাত্ পিএইচপি স্ক্রিপ্ট চালান: ইন্টার-এ্যাকটিভ শেলের জন্য su www-data /usr/share/script.php বা just su www-data। তবে কোনও ব্যবহারকারীর নাম ছাড়াই su মূল (সুপার ব্যবহারকারী) অ্যাকাউন্টটি গ্রহণ করবে।
বিস্মৃত

বিশৃঙ্খলা - "শপট-কি-লগইন_শেল && এর প্রতিধ্বনি 'লগইন শেল' || ইকো 'কোনও লগইন শেল নয়'" এই ধরণের পরামর্শ আমি প্রায়শই দেখি, তবে কেন এত দীর্ঘ? && অপারেটরটির অর্থ যদি প্রস্থান কোড 0 হয় তবে "পরবর্তী নির্দেশ দিন" এবং ডাবল পাইপ (||) এর অর্থ অন্য কোনও (যদি 0 নয়) তবে এই আদেশটি করুন। সুতরাং এটি মূলত যা বলছে যদি প্রস্থান কোড 0 হয় তবে "লগইন শেল" প্রতিধ্বনি করুন, যদি প্রস্থান কোড 1 (ব্যর্থ) হয় তবে "লগইন নন" প্রতিধ্বনি করুন। কেন শুধু "শপট-কিউ লগইন_শেল; প্রতিধ্বনি not?" $? পূর্ববর্তী কমান্ডের ফলাফল / প্রস্থান কোডের অর্থ। বেশিরভাগ ক্ষেত্রে যদি সমস্ত প্রোগ্রাম 0 না হয় মানে সাফল্য, 1 বা তার বেশি অর্থ ব্যর্থ হয়। সুতরাং প্রতিধ্বনি যদি 0 = সাফল্য হয় ...
বিস্মৃত হওয়া

2
@ পল: sudo -iপ্রস্তাবিত এখানে পড়ুন: ubuntuforums.org/showthread.php?t=1817402 এবং এখানে: unix.stackexchange.com/questions/98531/…
মার্কো সুল্লা

0

পার্থক্য সন্ধান করতে আপনি বিভিন্ন অনুরোধগুলির মধ্যে ফলাফল পরিবেশ চেক করতে পারেন।

কিছু সমালোচক ভেরিয়েবলের মধ্যে আপনি কিছু "ছোট" পার্থক্য খুঁজে পেতে পারেন :

  • PATH, LD_LIBRARY_PATH,LD_PRELOAD

বা difference / এর মধ্যে কিছু পার্থক্য। ডটফিলস হ্যান্ডলিং ( ~/.config)।

কমান্ড জেনারেট করে $ HOM ভিত্তিক লগফিলস ( ~/.xsession.errors, ইত্যাদি ...) বা xauth কুকিজ ( ~/.Xauthority) এর মালিকানাও বিবেচনা করুন ।

এই আদেশগুলি ব্যবহার করে দেখুন:


# 'su -' vs 'su'

diff <(sudo su - -c env | sort) <(sudo su -c env | sort)


# 'su -' vs 'sudo -i'

diff <(sudo su - -c env | sort) <(sudo -i env | sort)

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