সুডো দ্বারা ডাকা বাশ স্ক্রিপ্টে ব্যবহারকারী শনাক্ত করুন


108

যদি আমি স্ক্রিপ্টটি তৈরি করে /root/bin/whoami.sh:

#!/bin/bash
whoami

এবং এই স্ক্রিপ্টটি কোনও ব্যবহারকারী সঠিকভাবে কনফিগার করা সুডো সহ কল ​​করেছেন, এটি নির্দেশ করবে

root

কোনও স্ক্রিপ্টে প্রকৃত ব্যবহারকারীর পক্ষে পাওয়ার জন্য কোনও দ্রুত উপায় আছে, বা আমাকে এই ব্যবহারকারীর নামটি দিয়ে যাওয়ার জন্য প্যারামিটারগুলি অবলম্বন করতে হবে?

উত্তর:


134

আপনি যদি ব্যবহার করছেন তবে U SUDO_USER কাজ করে না sudo su -
এটির জন্য একাধিক চেকও প্রয়োজন - যদি $USER == 'root'তা পান তবে $SUDO_USER

কমান্ডের পরিবর্তে whoamiব্যবহার করুন who am i। এটি whoবর্তমান সেশনের জন্য ফিল্টার হওয়া কমান্ডটি চালায় । এটি আপনাকে আপনার প্রয়োজনের তুলনায় আরও তথ্য দেয়। সুতরাং, কেবল ব্যবহারকারী পেতে এটি করুন:

who am i | awk '{print $1}'

বিকল্পভাবে (এবং আরও সহজ) আপনি ব্যবহার করতে পারেন logname। এটি উপরের বিবৃতি হিসাবে একই জিনিস।

এটি আপনাকে ব্যবহারকারীর নাম দেয় যা সেশনে লগ ইন করেছিল।

এই কাজগুলি নির্বিশেষে sudoবা না করে sudo su [whatever]। এটি কতবার বলা হয় suএবং নির্বিশেষে এটিও কাজ করে sudo


2
হ্যাঁ, +1, who am iএখানে উত্তর।
জো কেয়ার্নি

43
বিকল্প who am iহয় who mom likes। তোমার পছন্দ.
wchargin

3
whoআমার জন্য উভয়ই আমার জন্য 2 টি লাইন দেয় এবং who am iকোনও কিছুই দেয় না। কোন সাহায্য?
হোশ সাদিক

7
আমি উবুন্টু 16.04 এ আছি এবং কমান্ডটি who am iকিছুই করে না, এটি সহজ বলে মনে হয় who, সুতরাং who | awk '{print $1}'প্রত্যাশার মতো কাজ করে;)
ডেভনকোড

1
কেবল awkইনস্টল না করে , আপনি এটি ব্যবহার করতে পারেন cut: who mom likes | cut -d' ' -f1 বা sedকোনও কারণে: who mom likes | sed -n 's/^\([^ ]*\).*/\1/p'
ইজমির রামিরেজ

56

আমার মনে হয় $ SUDO_USER বৈধ।

#!/bin/bash
echo $SUDO_USER
whoami

1
অদ্ভুত বিষয়: sudo envদেখায় SUDO_USERতবে sudo echo $SUDO_USERকিছুই ছাপায় না ...
কাজ

17
কাজ, এটি আশ্চর্যজনক নয়, এটি প্রত্যাশিত। ইন sudo echo $SUDO_USER, বাশ sudo চালানোর আগে $ SUDO_USER মূল্যায়ন করছে । এই সমাধানটিতে পোস্ট করা স্ক্রিপ্টটি চেষ্টা করুন, এটি কাজ করে।

@ কোয়াডমোর: আপনি যদি উত্তরটি নিয়ে খুশি হন তবে তা গ্রহণ করতে ভুলবেন না।
কাজ

2
আপনি echo ${SUDO_USER:-$USER}উভয় sudoএবং অ-সুডো চলমান ধরতেও ব্যবহার করতে পারেন । তবে ইভানের উত্তরটি আরও সহজ logname বলে মনে হচ্ছে
টোবিয়াস কেইনজলার

2
@ তোবিয়াস কিইনজলার - এবং ইওনটি দেখায় যে, এতে $SUDO_USERকাজ করে না sudo su -, তবে lognameসর্বদা কাজ করে।
ডেভিড হার্কনেস

13

সুডো বা না থাকুক স্ক্রিপ্টটি কল করে এমন ব্যক্তির ব্যবহারকারীর নাম কীভাবে পাবেন:

if [ $SUDO_USER ]; then user=$SUDO_USER; else user=`whoami`; fi

বা একটি সংক্ষিপ্ত সংস্করণ

[ $SUDO_USER ] && user=$SUDO_USER || user=`whoami`

8
এমনকি আরও ছোট: user=${SUDO_USER:-$(whoami)}বাuser=$(logname)
টোবিয়াস কেইনজলার



1

ব্যবহার whoami, who am i, who, idবা $SUDO_USERনা করার অধিকার এখানে।

আসলে, whoকখনই প্রশ্নের সমাধান নয়, কারণ এটি কেবল লগইন করা ব্যবহারকারীদের তালিকাভুক্ত করবে, যা কয়েক ডজন হতে পারে ...

আমার দৃষ্টিতে একমাত্র মূল্যবান উত্তর হ'ল ব্যবহার logname

আশাকরি এটা সাহায্য করবে

হরণ করা


0

যদি আপনি যে ইউআইডিটি সন্ধান করেন (ডকার শেননিগানদের জন্য দরকারী), তবে এটি কাজ করে:

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