সুডোর মাধ্যমে কীভাবে ওরফে পাস করবেন


32

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

কীভাবে উপনামটি পাস করবেন সে বিষয়ে কারও ইঙ্গিত রয়েছে?

এই ক্ষেত্রে, আমি যখন ডিবাগ করব তখন পার্লের জন্য আমার কাছে প্রচুর বিকল্প রয়েছে:

alias pd='perl -Ilib -I/home/myuser/lib -d'

কখনও কখনও, আমাকে চালনার পরিবর্তে আমার সরঞ্জামগুলি মূল হিসাবে ডিবাগ করতে হবে:

pd ./mytool --some params

আমার এটি সুডোর অধীনে চালানো দরকার। আমি অনেক উপায়ে চেষ্টা করেছি:

sudo eval $(alias pd)\; pd ./mytool --some params
sudo $(alias pd)\; pd ./mytool --some params
sudo bash -c "$(alias pd)\; pd ./mytool --some params"
sudo bash -c "$(alias pd); pd ./mytool --some params"
sudo bash -c eval\ "$(alias pd)\; pd ./mytool --some params"
sudo bash -c eval\ "'$(alias pd)\; pd ./mytool --some params'"

আমি আমার বর্তমান পিডি উরফটি পুরোপুরি ব্যবহার করা হয়েছে কিনা তা নিশ্চিত করার জন্য একটি সুন্দর, সংক্ষিপ্ত পথের জন্য প্রত্যাশা করছিলাম (যদি পরে এটির জন্য আমার টুইঙ্ক করা দরকার) তবে আমার কিছু প্রচেষ্টা মোটেই সংক্ষিপ্ত হয়নি। আমার শেষ অবলম্বনটি এটি একটি শেল স্ক্রিপ্টে রাখা এবং এমন কোনও জায়গা রাখা যা সুডো খুঁজে পেতে সক্ষম হবে। তবে উপাধিগুলি কখনও কখনও খুব সহজ হয়, সুতরাং এটি একটি শেষ অবলম্বন।

উত্তর:


50

আর্চলিনাক্স-উইকিতে একটি খুব মার্জিত সমাধান পাওয়া যায়:

alias sudo='sudo '
# whitespace ---^

সমস্ত এলিয়াস পাস করতে কাজ করে sudo

সূত্র: http://wiki.archlinux.org/index.php/Sudo#Passing_aliases


16
এটি একটি দুর্দান্ত কৌশল! কৌতূহলবশতদের জন্য, ব্যাশ ম্যানপেজে ওরফে বিভাগের ব্যাখ্যা:A trailing space in value causes the next word to be checked for alias substitution when the alias is expanded.
রাসেল ডেভিস

1
এটি সত্যই গ্রহণযোগ্য উত্তর হওয়া উচিত।
অ্যাড্রিয়ান ফ্রাহর্ইথ

এটি লজ্জাজনক যে এটি ফাংশনগুলির জন্য কাজ করে না।
সিরো সান্তিলি 新疆 改造 中心 法轮功 六四 事件

2
দ্রষ্টব্য: মনে করুন আপনাকে সেই বিকল্পটি একই সাথে রাখতে চাইলে আবার কোনও বিকল্প পাস sudoকরতে হবে sudopass এমনকি এটিও করা যেতে পারে: আবার বিকল্প ব্যবহার করতে, ব্যবহার করতে \sudo। ব্যাকস্ল্যাশটি ওরফে ওভাররাইড করবে । (অনেকেই এ সম্পর্কে জানে বলে মনে হয় না)। এইভাবে, আপনি ( বিপদ! ) এমনকি টাইপ করে সাধারণভাবে উল্লিখিত , কোনও সতর্কতা ছাড়াই ফাইলগুলি মুছে ফেলতে পারেন । alias rm='rm -i'.bash-aliases\rm file-to-delete
সিনট্যাক্সারর

11

আপনি যা করার চেষ্টা করছেন সে সম্পর্কে আমি প্রকৃত পরিষ্কার নই। আমি দুটি উপায় দেখতে পাচ্ছি:

সঠিক পথ

alias pd='sudo perl -Ilib -I/home/myuser/lib -d'

তারপরে কার্যকর করা pd ./mytoolআপনার ডিবাগিং কমান্ডটিকে রুট হিসাবে কার্যকর করবে তবে তবুও সুডোর (অডিট ট্রেল, কোনও রুট শেল থেকে অপারেটিং নয়) সুবিধাগুলি সংরক্ষণ করবে।

উদাহরণ:

insyte $ ওরফে sid = 'sudo id'
insyte id sid
uid = 0 (মূল) জিড = 0 (মূল) গোষ্ঠী = 0 (মূল)

সহজ উপায়

মূলের সাথে উপনাম যুক্ত করুন .bashrcএবং sudo -iআপনি যখনই রুটে যাবেন ব্যবহার করুন।

মূল # ইকো 'ওরফে এফবি = "ইকো ফু বার" ">> /root/.bashrc
রুট # প্রস্থান
প্রস্থান
insyte $ sudo -i
রুট # এফবি
ফু বার

4

মাত্র দুটি এলিয়াস আছে এবং একটি ভেরিয়েবল ব্যবহার করুন

আমি ব্যবহার কারণ দেখি না awkবা cutসহজে পরিবর্তন করতে করতে যদি না তা শুধুমাত্র কোর ওরফে অনুক্রমে একবার সংজ্ঞায়িত করে। যদি এটি হয় তবে এটি কাজ করে:

# ... in .bashrc ...
pd='perl -Ilib -I/home/myuser/lib -d'
alias pd="$pd"
alias spd="sudo $pd"

উপরের মতো যেমন ওরফে জোড়া তৈরি করার জন্য এখানে একটি সরল বৈশিষ্ট্য রয়েছে:

mkap () {
    alias $1=$2
    alias s$1="sudo $2"
}

ব্যবহার করা:

mkap pd 'perl -Ilib -I/home/myuser/lib -d'
mkap ct 'cat'

এখন আপনার কাছে আছে pdএবং spdপ্লাস ctএবং sct

$ ct /etc/shadow
cat: /etc/shadow: Permission denied
$ sct /etc/shadow
[sudo] password for dennis:
root:[censored]...
$ alias
alias ct='cat'
alias pd='perl -Ilib -I/home/myuser/lib -d'
alias sct='sudo cat'
alias spd='sudo perl -Ilib -I/home/myuser/lib -d'

4

আমি আশা করি আমি দুটি উত্তরকে "সঠিক" হিসাবে চিহ্নিত করতে পারতাম। ইনসাইটের , উম, অন্তর্দৃষ্টিপূর্ণ পোস্ট থেকে বিল ওয়েসের অ্যাড (বা কাটা) সমাধানের সাথে সঠিক পথের সংমিশ্রণ , আমি এটি নিয়ে এসেছি:

alias spd="sudo $(alias pd | cut -d\' -f2)"

এখন আমি এটিকে আমার .Bashrc বা অন্য কোনও শেল ফাংশনে রেখে দেব এবং তারপরে আমার সমস্ত উপকরণের "গুলি" সংস্করণ তৈরি করব যা আমি রুট হিসাবে চালানোর ইচ্ছে করে।

আপডেট : ডেনিস উইলিয়ামসনের সরল বৈশিষ্ট্যটির ব্যবহারটি কিছুটা সহজ করার জন্য সামান্য পরিবর্তন করা :

 salias()
 {
   local a c
   a=$(echo "$1" | cut -f1 -d=)
   c=$(echo "$1" | cut -f2- -d=)
   alias $a="$c"
   alias s$a="sudo $c"
 }

এর অর্থ আমাকে পুরো কমান্ডের সামনে "s" রাখতে হবে। পরিবর্তে:

alias pd='perl -Ilib -I/home/myuser/lib -d'

আমি শুধু সামনে এস গুলি যোগ করুন।

salias pd='perl -Ilib -I/home/myuser/lib -d'

এবং আমি সম্পন্ন। অবশ্যই, কম্পিউটারটি আরও কিছু কাজ করে, তবে এটি কম্পিউটারের জন্য। :-)

ধন্যবাদ!


আপনি (অথবা করতে সক্ষম হওয়া উচিত) করতে চিহ্ন জিনিষ গৃহীত হিসাবে, যা ধরনের এর উপলক্ষে মত তাদের সঠিক :)
বিল উইস

ডান - আমি দুটি উত্তর সঠিক হিসাবে চিহ্নিত করতে চাই :
পি

3
স্লিজারের উত্তর কেন নেই? alias sudo="sudo "নিখুঁত কাজ করে।
trusktr


3

আপনার বিকল্পগুলি অন্তর্ভুক্ত এমন কোনও স্ক্রিপ্ট হ্যাক করা কি সহজ হবে না, তবে এটি নিয়মিত অ্যাকাউন্ট এবং মূলের জন্য যে কোনও ফোল্ডারে রাখুন? এটি সত্যই কোনও স্ক্রিপ্ট গ্রহণ করবে না।

#!/bin/bash
exec perl -Ilib -I/home/myuser/lib -d $*

এটি আসলে $ * এর পরিবর্তে "$ @" হতে হবে এবং আমি সাধারণত এড়াতে চেষ্টা করার কারণ এটি। ;-) এটি কাজ করে, এটি যা রয়েছে তার তুলনায় এটি কেবলমাত্র একগুচ্ছ ডিস্কের জায়গার অপচয় করে।
ট্যাঙ্কটালাস

3

এটি মোটামুটি, তবে এটি এখানে কাজ করে:

houdini@clanspum:~/ > alias fb
fb='echo foo bar'
houdini@clanspum:~/ > alias fb | awk -F\' '{print $2}'
echo foo bar
houdini@clanspum:~/ > sudo sh -c "$(alias fb | awk -F\' '{print $2}')"
foo bar
houdini@clanspum:~/ > sudo sh -c "$(alias fb | awk -F\' '{print $2}') a b c"
foo bar a b c
houdini@clanspum:~/ > fb
foo bar
houdini@clanspum:~/ > fb a b c
foo bar a b c

আমি এখানে একটি অসম্পূর্ণ সমাধান আটকালাম, তারপরে ঠিক করার জন্য সম্পাদিত। বর্তমানটি ঠিক আছে। এখানে কি চলছে তা ব্যাখ্যা করার জন্য মন্তব্য করতে প্রথম ব্যক্তিকে একটি বিনামূল্যে আপভোট :)
বিল ওয়েইস

আমি অ্যাজকের চেয়ে সহজ সরল পথের জন্য আশা করছিলাম তবে আশা করি! = বাস্তবতা কখনও কখনও ;-) স্পষ্টতই, "কাট -f2 -d \ '" ঠিক তত ভালভাবে কাজ করবে এবং সেই ক্ষুদ্রতর ছোট হবে।
টঙ্কটালাস

হ্যাঁ, কাটা কাজ করবে, আমি সবসময় এটি ভুলে যাই।
বিল ওয়েইস

3

একটি "উবুন্টু" উপসর্গ যোগ নির্বাচিত alias লেখা এবং আদেশগুলি আপনার মধ্যে থেকে ~/.bashrcযেমন:

#a regular alias
alias pd='perl -Ilib -I/home/myuser/lib -d'

#sudofy (command id, alias pd - add others to this list)
for cmd in id pd;
      do alias "s$cmd"="sudo $cmd";
done;

এটি কাজ করে না - আমি এখান থেকেই শুরু করেছি। তুমি কি চেষ্টা করেছ?
টঙ্কটালাস

চমৎকার ধারণা। আমি alias sudo="sudo "যদিও সহজ মনে করি ।
trusktr

3

কয়েকবার পোস্ট হিসাবে, '.bashrc' এ করুন:

ওরফে সুডো = 'সুডো'

'ম্যান বাশ' এবং 'সহায়তা ওরফে' এ ব্যাখ্যা করার কারণ:

উপনাম: উপনাম [-p] [নাম [= মান] ...] উপকরণ সংজ্ঞা বা প্রদর্শন করুন।

Without arguments, `alias' prints the list of aliases in the reusable
form `alias NAME=VALUE' on standard output.

Otherwise, an alias is defined for each NAME whose VALUE is given.
**A trailing space in VALUE causes the next word to be checked for
alias substitution when the alias is expanded.**

1

আপনি এই জাতীয় কিছু চান:

(alias; echo "exec < /dev/tty") | sudo bash  -i

আমি ভুল হতে পারি, তবে আইআরএসটি যে bash -i(i = ইন্টারেক্টিভ) কেবলমাত্র v4.0। সুতরাং একটি পুরানো সার্ভারে এখনও bashv3 চলমান রয়েছে, এটি সম্ভবত ব্যর্থ হবে। তবে আমাকে ভুল প্রমাণ করুন, যে কেউ, এগিয়ে যান;)
সিনট্যাক্সারর

@ সাইন্ট্যাক্সেরর - আপনার ভুল মনে আছে। -iবোর্ন শেল, দেখুন: pubs.opengroup.org/onlinepubs/009695399/utilities/sh.html
জিওকার

বাহ, খুব শীঘ্রই 6+ বছরের পুরানো একটি পোস্টের জন্য উত্তর পাওয়ার প্রত্যাশা করেননি ... কেন হ্যাঁ, আমি #!/bin/bash -iএটি শিবাংয়ের পরে এটিকে বিভ্রান্ত করে থাকতে পারি , যা সম্ভবত একই নয় (?)। একটি দীর্ঘ গল্প সংক্ষিপ্ত কমানোর জন্য, ব্যবহার historyএকটি bashস্ক্রিপ্ট (এবং "লাইভ" কমান্ড লাইনে নয়) হবে প্রয়োজন -iবিকল্প, যা আমি সঙ্গে "কেবল" একটি সার্ভার কাজ পেতে অক্ষম ছিল bashv3 এর ইনস্টল। এবং এটি একটি সত্য।
সিনট্যাক্সারর

1

আমি জানি না যে কোনও প্রোডাকশন বাক্সে করা বুদ্ধিমানের কাজ তবে স্থানীয়ভাবে আমি ব্যবহার করি

alias sudo="sudo -E"

-E ( পরিবেশ সংরক্ষণ করুন ) বিকল্পটি sudoers (5%) এ env_reset বিকল্পটি ওভাররাইড করবে। এটি কেবল তখনই উপলভ্য যখন ম্যাচিং কমান্ডের SETENV ট্যাগ থাকে বা সেডেনভ বিকল্পটি sudoers (5) এ সেট করা থাকে।


-1

আপনি কি আপনার কমান্ডের আগে রুটের .bashrc- এ যুক্ত করতে পারেন বা sudo মাধ্যমে .bashrc প্রয়োগ করতে পারেন?

sudo (. ~yourlogin/.bashrc; pd ./mytool --some params)

1
হুম, এটি প্রায় কাজ করে না, হয়। এটি আমি উপরে চেষ্টা করা কয়েকটি জিনিসের সাথে মোটামুটি কাছাকাছি, তবে প্রকৃত শেল / সুডো সিনট্যাক্স থেকে আরও দূরে।
ট্যাঙ্কটালাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.