ব্যবহারকারীর নাম বিদ্যমান কিনা তা সন্ধান করুন


68

একটি শেল স্ক্রিপ্টে, কীভাবে সনাক্ত করতে পারি যে প্রদত্ত ব্যবহারকারীর নাম বর্তমান সিস্টেমে বিদ্যমান আছে?


/etc/passwdএবং /etc/shadowঅসম্পূর্ণ। ওএস এক্স এর ডিরেক্টরি পরিষেবাগুলি, বা একইভাবে সক্রিয় ডিরেক্টরি একীকরণের সাথে লিনাক্স বিবেচনা করুন।

উত্তর:


103

সম্ভবত এটির জন্য সবচেয়ে ব্যবহৃত একটি প্রাথমিক সরঞ্জাম id

#!/bin/bash
if id "$1" >/dev/null 2>&1; then
        echo "user exists"
else
        echo "user does not exist"
fi

যা উত্পাদন করে

$ ./userexists root
user exists
$ ./userexists alice
user does not exist
$ ./userexists
user does not exist

2
আপনার এখানে ব্যাককোটিসের দরকার নেই - কেবল ব্যবহার করুন if id -u "$1" >/dev/null 2>&1; then...
গর্ডন ডেভিসন

1
@ গর্ডন অবশ্যই একেবারে ঠিক। ধন্যবাদ :)
বারবাজ


যদি কেবলমাত্র ifনেতিবাচক ফলাফল পরীক্ষক দিয়ে আমার প্রয়োজন হয় ?
ইউরা শিংকারেভ

id -u $1 1>/dev/null 2>&1; echo $?পাইপের জন্য ব্যবহার করা যেতে পারে
জেসনওয়াইন

20

getent

এই কমান্ডটি ডেটাবেসগুলির জন্য এন্ট্রি সংগ্রহ করার জন্য তৈরি করা হয়েছে যা / ইত্যাদি ফাইল এবং বিভিন্ন দূরবর্তী পরিষেবা যেমন এলডিএপি, এডি, এনআইএস / ইয়েলো পেজ, ডিএনএস এবং পছন্দগুলি সমর্থন করে।

কোনও ব্যবহারকারীর নাম পাসওয়ার্ডের নামকরণ পরিষেবাদিগুলির মধ্যে একটি হিসাবে পরিচিত কিনা তা নির্ধারণের জন্য, কেবল চালনা করুন:

getent passwd username

এটি ওএস এবং বাস্তবায়নের উপর নির্ভর করে গ্রুপ, হোস্ট এবং অন্যদের সাথেও কাজ করে।


1
সোলারিস এবং Linux, এবং আরও সম্প্রতি সবচেয়ে BSD গুলোর কাছে থাকতে থাকতেই getent, কোন getentMac OS X এর উপর
barbaz

প্রকৃতপক্ষে, আমি ম্যাক ওএস / এক্স মিস করছি অনুপস্থিত।
jlliagre

তবুও এটি যে সিস্টেমগুলিকে সমর্থন করে তাতে এটি বেশ কার্যকর।
ড্যানিয়েল বেক

1
জেন্টেন্টটি দুর্দান্ত কারণ আপনি একাধিক ব্যবহারকারীর নাম জিজ্ঞাসা করতে পারেন যেখানে আইডি কেবলমাত্র একটি একক ব্যবহারকারীর নাম সমর্থন করে।
21

6

finger

এর আউটপুট পার্স করুন finger -m <username>। কোনও ব্যবহারকারীর সন্ধান পেলে কোনও ত্রুটি কোড নেই, দুর্ভাগ্যক্রমে, তবে যদি এটি না পাওয়া যায় তবে ত্রুটি আউটপুট লেখা হবে। এখন পর্যন্ত কোনও ত্রুটি নেই।

finger -ms <username> 2>&1 1>/dev/null | wc -l

0ব্যবহারকারী পাওয়া গেলে মুদ্রণ করবে (কারণ কোনও ত্রুটির আউটপুট নেই), অন্যথায় বড় সংখ্যা larger

chown

চালান (যে কোনও ব্যবহারকারী হিসাবে, আশ্চর্যরকম):

T=$( mktemp -t foo.XXX ) ; chown <username> $T

যদি এটি হিসাবে ব্যর্থ হয় rootতবে অ্যাকাউন্টের নামটি অবৈধ।

যদি এটি অ- rootব্যবহারকারীর হিসাবে ব্যর্থ হয় তবে অপারেশনের অনুমোদিত বা অবৈধ ব্যবহারকারীর (বা সমকক্ষ) পক্ষে সম্ভাব্য স্থানীয় আউটপুট পার্স করুন । LANGনির্ভরযোগ্যভাবে এটি করতে আগে থেকে সেট করুন ।


0

আমি বলব যে আপনি নির্ভর করতে চান /etc/passwdএবং অনুরূপ (উদাহরণস্বরূপ /etc/shadowশ্যাডো-ভিত্তিক সিস্টেমগুলির জন্য; অফ-টপিক সাইড-নোটে, অনুরূপ কিছু সিস্টেম ব্যবহার করতে পারে /etc/master.passwdবা এই জাতীয় অন্যান্য ফাইলগুলি)।

/etc/passwdসাধারণত একটি ব্যবহারকারী বিদ্যমান বা না কিনা পরম প্রামাণিক সিদ্ধান্ত হিসাবে গণ্য হবে। আপনি যদি এই পৃষ্ঠায় বর্ণিত অন্য কোনও পদ্ধতি ব্যবহার করেন, এবং যদি এই অন্যান্য পদ্ধতিগুলি কোনও বিদ্যমান ব্যবহারকারীর দিকে নির্দেশ /etc/passwdকরে তবে তা না করে তবে আমি বলতে পারি যে সর্বাধিক সাধারণ মানের সংজ্ঞা দিয়ে ব্যবহারকারী সিস্টেমে সঠিকভাবে উপস্থিত নেই does সফ্টওয়্যার সম্ভবত উপর নির্ভর করবে।

এটি বলেছিল, আমি ব্যবহার করতে পারি এমন আরও কয়েকটি বিকল্পের মিশ্রণের জন্য অন্যভাবে ছুঁড়ে ফেলব।

ls -l /home | grep ^customUserName$<BR> echo $?

স্পষ্টতই, আপনি যে ব্যবহারকারীটির জন্য যাচাই করতে চান তার নামের সাথে "কাস্টম ব্যবহারকারীর নাম" প্রতিস্থাপন করুন। যদি আপনার সিস্টেম এটি ব্যবহার করে তবে / ব্যবহারকারীদের সাথে / বাড়িতে প্রতিস্থাপন করুন। নির্দিষ্ট ব্যবহারকারীর জন্য কোনও হোম ডিরেক্টরি তৈরি না করা হলে / etc / passwd- এ সমস্ত ব্যবহারকারীর সন্ধান করতে পারে না, যা যদি আপনি কেবল ব্যবহারকারীদের (যেমন, / etc / passwd তে পাঠ্যক্রমের লাইন) আমদানি করে থাকেন এবং যদি হোম ডিরেক্টরিগুলি না করে থাকে কোনও ব্যক্তি লগ ইন না করা অবধি তৈরি করুন।


আপনি এমন কোনও ব্যবহারকারীকে কেন বলছেন না যার কাছে / ইত্যাদি / পাসওয়ার্ড ফাইলে কোনও প্রবেশ নেই তবে সেগুলির দ্বারা বৈধ বলে জানা গেছে idবা getentসিস্টেমে "সঠিকভাবে" উপস্থিত নেই, বিশেষত যখন ওপি স্পষ্টভাবে নামকরণ পরিষেবাদি উল্লেখ করছে বিবেচনা করা হবে.
jlliagre
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.