উত্তর:
সমস্যাটি sudo -s
কোনও যুক্তি ছাড়াই মূলের জন্য একটি ইন্টারেক্টিভ শেলটি খুলবে।
আপনি যদি কেবল একটি কমান্ড ব্যবহার করে চালাতে চান তবে আপনি sudo -s
সহজ করতে পারেন:
sudo -s command
উদাহরণ স্বরূপ :
$ sudo -s whoami
root
অথবা আপনি এখানে স্ট্রিং ব্যবহার করতে পারেন:
$ sudo -s <<<'whoami'
root
আপনার যদি একাধিক আদেশ থাকে তবে আপনি এখানে ডক ব্যবহার করতে পারেন:
$ sudo -s <<'EOF'
> whoami
> hostname
> EOF
root
something--
আরেকটি উপায় হ'ল এখানে একটি পূর্ণ বাশ কমান্ড (গুলি) প্রেরণ করা হবে sudo
:
#!/bin/bash
sudo bash -c 'command1; command2; command3;'
যাইহোক, একটি ভাল উপায় আরম্ভ হবে স্ক্রিপ্ট সঙ্গে sudo
পরিবর্তে। sudo
স্ক্রিপ্টের ভিতরে থাকা খুব ভাল ধারণা নয় । মূল স্ক্রিপ্টগুলি ( sudo script.sh
) সহ পুরো স্ক্রিপ্টটি চালানো আরও ভাল । প্রয়োজনে আপনি sudo
নির্দিষ্ট কমান্ডের জন্য সুবিধাগুলি ছাড়তে ব্যবহার করতে পারেন । উদাহরণ স্বরূপ:
#!/usr/bin/env bash
whoami
echo $HOME
sudo -u terdon whoami ## drop privileges for specific command.
উপরে স্ক্রিপ্ট চালানো ফিরে আসে:
$ sudo ~/scripts/a.sh
root
/root
terdon
বোর্ন শেল টি -c
পতাকা যা আপনি শেল একটি অবাধ স্ক্রিপ্ট পাস করতে ব্যবহার করতে পারেন যা আপনার মত কিছু লিখতে পারেন, তাই
sudo sh -c 'something'
যদিও সহজ কমান্ড শুধুমাত্র দরকারী, কারণ এটি খুব কষ্টকর হয় স্ক্রিপ্ট সঠিকভাবে উদ্ধৃত করা এবং অসুবিধার এমনকি উচ্চ হলে তোমাদের উপর একটি দূরবর্তী সার্ভারে কমান্ড পাঠাতে SSH দুইবার কারণ যুক্তি স্ক্রিপ্ট বিশ্লেষণ করা হবে, পাশের একবার স্ক্রিপ্ট প্রেরণ এবং একবার স্ক্রিপ্ট চলমান।
যদি something
একটি জটিল স্ক্রিপ্ট হয় বা একটি হ্রদ পার করা প্রয়োজন SSH লাইন, এটা সাধারণ চর্চা একটি ফাংশন লিখতে হয় prepare_something_script
যার কাজের লিপি 'কিছু' লিখতে হয় stdout- এ । এর সহজতম ফর্মটিতে, এই ফাংশনটি আউটপুট উত্পন্ন করতে এখানে-নথি ব্যবহার করতে পারে:
prepare_something_script()
{
cat <<EOF
something
EOF
}
prepare_something_script
এরপরে উত্পাদিত স্ক্রিপ্টটি স্থানীয়ভাবে স্থানীয়ভাবে sudo দ্বারা প্রদত্ত সুবিধাগুলি দিয়ে কার্যকর করা যেতে পারে :
prepare_something_script | sudo sh
দৃশ্যকল্প যেখানে স্ক্রিপ্ট দ্বারা অনুমোদিত অধিকারসহ দূরবর্তী অবস্থান থেকে মৃত্যুদন্ড কার্যকর করা আবশ্যক উবুন্টু এটা বেস 64 স্ক্রিপ্ট সঙ্কেতাক্ষরে লিখা মান ইনপুট পুনঃনির্দেশিত এড়াতে করতে হয় SSH , এভাবে:
something64=$(prepare_something_script | base64)
ssh usesr@remote-host "echo ${something64} | base64 --decode | sudo sh"
আপনি যদি কোনও ফাংশনে সেই কোডটি ব্যবহার করেন তবে কোনও কিছু 64 ভেরিয়েবল স্থানীয় হিসাবে চিহ্নিত করতে ভুলবেন না । বেস 64 এর কিছু বাস্তবায়ন -d
ডিকোড করার জন্য একটি পতাকা সরবরাহ করে, যা ভার্বোস --decode
ভেরিয়েন্টের চেয়ে কম ভাল সমর্থিত । কিছু বাস্তবায়নের জন্য -w 0
উদ্দীপক লাইন বিরতি এড়াতে এনকোডিং কমান্ডটিতে একটি যুক্ত করা প্রয়োজন ।
sudo -s
কেবল এটি ব্যবহার করা ভাল নয়root
। এটি সত্যই হওয়া উচিতsudo sh
যা পরিষ্কারভাবে কোন শেলটি ব্যবহার করতে হবে তা উল্লেখ করে।