অনেক সিস্টেম একটি আছে getent
লিস্টে আদেশ বা বিষয়বস্তুর অনুসন্ধান নাম পরিষেবা মত ডাটাবেস passwd
, group
, services
, protocols
...
getent passwd | cut -d: -f6
ডাটাবেসে সমস্ত ব্যবহারকারীর হোম ডিরেক্টরি ( th ষ্ঠ কোলোন সীমাবদ্ধ ক্ষেত্র) তালিকাবদ্ধ করে ।
ব্যবহারকারীর নাম নিজেই প্রথম ক্ষেত্রে, তাই ব্যবহারকারীর নামের তালিকার জন্য:
getent passwd | cut -d: -f1
(মনে রাখবেন যে এর অর্থ এই নয় যে এই ব্যবহারকারীরা সিস্টেমে লগইন করতে পারেন বা তাদের হোম ডিরেক্টরি তৈরি করা হয়েছে, তবে তারা সিস্টেমে পরিচিত, তাদের কোনও ব্যবহারকারী আইডিতে অনুবাদ করা যেতে পারে)।
ডাটাবেসগুলির জন্য যা গণনা করা যায় না, আপনি পৃথকভাবে প্রতিটি সম্ভাব্য ব্যবহারকারী আইডি চেষ্টা করতে এবং জিজ্ঞাসা করতে পারেন:
getent passwd {0..65535} | cut -d: -f1,6
(এখানে ধরে নেওয়া হচ্ছে যে ইউডস 65535 এ থামবে (কিছু সিস্টেম আরও সমর্থন করে) এবং zsh এর সমর্থন করে এমন একটি শেল {x..y}
ব্রেস সম্প্রসারণের ফর্মকে )। তবে আপনি এমন সিস্টেমে প্রায়শই করতে চান না যেখানে ব্যবহারকারী ডেটাবেস নেটওয়ার্কযুক্ত (এবং সেখানে স্থানীয় স্থানীয় ক্যাচিং সীমাবদ্ধ রয়েছে) যেমন এলডিএপি, এনআইএস +, এসকিউএল ... এতে প্রচুর নেটওয়ার্ক ট্র্যাফিক বোঝানো যায় (এবং ডিরেক্টরি সার্ভারে লোড হয়) ) এই সমস্ত প্রশ্ন করা।
এর অর্থ হ'ল যদি একই ইউআইড ভাগ করে নেওয়ার জন্য বেশ কয়েকটি ব্যবহারকারী থাকে তবে আপনি প্রতিটি ইউইডের জন্য কেবল একটি করে এন্ট্রি পাবেন, তাই অন্যকে মিস করুন।
আপনার যদি না থাকে তবে getent
আপনি অবলম্বন করতে পারেন perl
:
perl -le 'while (@e = getpwent) {print $e[7]}'
জন্য getent passwd
( $e[0]
ব্যবহারকারীর নাম জন্য), অথবা:
perl -le 'for ($i=0;$i<65536;++$i) {
if (@e = getpwuid $i) {print $e[0] ": " $e[7]}}'
জন্য getent passwd {0..65535}
একই সতর্কতা সঙ্গে ।
শেলগুলিতে, আপনি ~user
হোম ডিরেক্টরি ডিরেক্টরি পেতে ব্যবহার করতে পারেন user
, তবে বেশিরভাগ শেলগুলিতে, কেবলমাত্র ব্যবহারকারীর নামের সীমিত সেটগুলির জন্য কাজ করে (সেই ~
সম্প্রসারণ অপারেটরের জন্য সমর্থিত ব্যবহারকারীর নামগুলিতে অনুমোদিত অক্ষরের তালিকা শেল থেকে শেল পর্যন্ত পরিবর্তিত হয়) এবং এর সাথে বেশ কয়েকটি শেল (সহ bash
) ~$user
কাজ করবে না ( eval
যখন ব্যবহারকারীর নাম সেখানে একটি ভেরিয়েবলে সংরক্ষণ করা হয় তখন আপনাকে অবলম্বন করতে হবে)। এবং আপনাকে এখনও ব্যবহারকারীর নামের তালিকা পাওয়ার একটি উপায় খুঁজে বের করতে হবে।
কিছু শেল ব্যবহারকারীর নামের তালিকাটি পেতে অন্তর্নির্মিত সমর্থন করেছে।
bash
: compgen -u
গণনা করা যায় এমন ডাটাবেসে ব্যবহারকারীদের তালিকা ফিরিয়ে দেয়।
zsh
: $userdirs
অ্যাসোসিয়েটিভ অ্যারে ব্যবহারকারীর নামগুলি তাদের ডিরেক্টরি ডিরেক্টরিতে ম্যাপ করে (এটি গণনা করা যায় এমন ডেটাবেসগুলির মধ্যেও সীমাবদ্ধ তবে আপনি যদি একটি ~user
অগণিত ডাটাবেসে থাকা কোনও ব্যবহারকারীর জন্য প্রসারণ করেন তবে একটি এন্ট্রি যুক্ত করা হবে $userdirs
)। সুতরাং আপনি এটি করতে পারেন:
printf '%s => %s\n' "${(kv@)userdirs}"
তাদের হোম ডিরেক্টরি সহ ব্যবহারকারীদের তালিকা করতে।
এটি কেবল তখনই কার্যকর zsh
হয় যখন ইন্টারেক্টিভ হয় ।
tcsh
, fish
এবং yash
অন্য তিনটি শেল যা ব্যবহারকারীর নাম (উদাহরণস্বরূপ যখন তর্কগুলি সম্পন্ন করার সময় ~<Tab>
) সম্পূর্ণ করতে পারে তবে এটি মনে হয় না যে তারা আপনাকে ব্যবহারকারীর নামের তালিকাটি প্রোগ্রামগতভাবে পেতে দেয়।