একটি শেল স্ক্রিপ্টে, কীভাবে সনাক্ত করতে পারি যে প্রদত্ত ব্যবহারকারীর নাম বর্তমান সিস্টেমে বিদ্যমান আছে?
/etc/passwd
এবং /etc/shadow
অসম্পূর্ণ। ওএস এক্স এর ডিরেক্টরি পরিষেবাগুলি, বা একইভাবে সক্রিয় ডিরেক্টরি একীকরণের সাথে লিনাক্স বিবেচনা করুন।
একটি শেল স্ক্রিপ্টে, কীভাবে সনাক্ত করতে পারি যে প্রদত্ত ব্যবহারকারীর নাম বর্তমান সিস্টেমে বিদ্যমান আছে?
/etc/passwd
এবং /etc/shadow
অসম্পূর্ণ। ওএস এক্স এর ডিরেক্টরি পরিষেবাগুলি, বা একইভাবে সক্রিয় ডিরেক্টরি একীকরণের সাথে লিনাক্স বিবেচনা করুন।
উত্তর:
সম্ভবত এটির জন্য সবচেয়ে ব্যবহৃত একটি প্রাথমিক সরঞ্জাম 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
if
নেতিবাচক ফলাফল পরীক্ষক দিয়ে আমার প্রয়োজন হয় ?
id -u $1 1>/dev/null 2>&1; echo $?
পাইপের জন্য ব্যবহার করা যেতে পারে
getent
এই কমান্ডটি ডেটাবেসগুলির জন্য এন্ট্রি সংগ্রহ করার জন্য তৈরি করা হয়েছে যা / ইত্যাদি ফাইল এবং বিভিন্ন দূরবর্তী পরিষেবা যেমন এলডিএপি, এডি, এনআইএস / ইয়েলো পেজ, ডিএনএস এবং পছন্দগুলি সমর্থন করে।
কোনও ব্যবহারকারীর নাম পাসওয়ার্ডের নামকরণ পরিষেবাদিগুলির মধ্যে একটি হিসাবে পরিচিত কিনা তা নির্ধারণের জন্য, কেবল চালনা করুন:
getent passwd username
এটি ওএস এবং বাস্তবায়নের উপর নির্ভর করে গ্রুপ, হোস্ট এবং অন্যদের সাথেও কাজ করে।
getent
, কোন getent
Mac OS X এর উপর
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
নির্ভরযোগ্যভাবে এটি করতে আগে থেকে সেট করুন ।
আমি বলব যে আপনি নির্ভর করতে চান /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
সিস্টেমে "সঠিকভাবে" উপস্থিত নেই, বিশেষত যখন ওপি স্পষ্টভাবে নামকরণ পরিষেবাদি উল্লেখ করছে বিবেচনা করা হবে.
if id -u "$1" >/dev/null 2>&1; then
...