Birçok sistem, bir var getentlisteye komutunu veya içeriğini sorgulamak Name Service gibi veritabanları passwd, group,services , protocols...
getent passwd | cut -d: -f6
Ana dizinleri listeler (6 inci edilebilir veritabanlarında kullanıcılar tüm kolon ayrılmış alanı) sayılan .
Kullanıcı adının kendisi ilk alandadır, bu nedenle kullanıcı adları listesi için:
getent passwd | cut -d: -f1
(bu kullanıcıların sisteme giriş yapabileceği veya ana dizininin oluşturulduğu anlamına gelmediğini, ancak sistem tarafından bilindiklerini, bir kullanıcı kimliğine çevrilebileceklerini unutmayın).
Numaralandırılamayan veritabanları için, olası her kullanıcı kimliğini ayrı ayrı deneyebilir ve sorgulayabilirsiniz:
getent passwd {0..65535} | cut -d: -f1,6
(burada uids'in 65535'te durduğunu varsayarsak (bazı sistemler daha fazlasını destekler) ve zsh'ın küme {x..y}ayracı genişlemesini destekleyen bir kabuk ). Ancak bunu LDAP, NIS +, SQL ... gibi kullanıcı veritabanının ağa bağlandığı (ve sınırlı yerel önbellekleme olduğu) sistemlerde yapmak istemezsiniz, çünkü bu çok fazla ağ trafiği anlamına gelebilir (ve dizin sunucusuna yüklenebilir) ) tüm bu sorguları yapmak için.
Bu, aynı kullanıcı kimliğini paylaşan birkaç kullanıcı varsa, her kullanıcı kimliği için yalnızca bir giriş alacağınız anlamına gelir.
Eğer yoksa getent, aşağıdakilere başvurabilirsiniz perl:
perl -le 'while (@e = getpwent) {print $e[7]}'
için getent passwd( $e[0]kullanıcı adları için) veya:
perl -le 'for ($i=0;$i<65536;++$i) {
if (@e = getpwuid $i) {print $e[0] ": " $e[7]}}'
için getent passwd {0..65535}aynı uyarılar ile.
Kabuklarda, ancak sınırlı sayıda kullanıcı adı için (bu genişletme operatörü için desteklenen kullanıcı adlarında izin verilen karakterlerin listesi kabuktan kabuğa değişir) çalışan ~userana dizini almak için kullanabilirsiniz . birkaç mermi (dahil ) işe yaramaz ( kullanıcının adı oradaki bir değişkente saklandığında başvurmanız gerekir ). Yine de kullanıcı adlarının listesini almanın bir yolunu bulmanız gerekir.user~bash~$usereval
Bazı mermiler, bu kullanıcı adlarının listesini almak için yerleşik desteğe sahiptir.
bash: compgen -unumaralandırılabilen veritabanlarındaki kullanıcıların listesini döndürür.
zsh: $userdirsilişkilendirilebilir dizi kullanıcı adlarını ana dizinleriyle eşler (numaralandırılabilen veritabanlarıyla da sınırlıdır, ancak ~usernumaralandırılamayan bir veritabanında bulunan bir kullanıcı için genişletme yaparsanız , bir giriş eklenecektir $userdirs). Böylece şunları yapabilirsiniz:
printf '%s => %s\n' "${(kv@)userdirs}"
kullanıcıları ana dizinleriyle listelemek için.
Bu sadece zshetkileşimli olduğunda çalışır .
tcsh, fishVe yash(tamamlarken mesela kullanıcı adlarını tamamlayabilirsiniz diğer üç kabukları olan ~<Tab>argümanlar), ancak programlı kullanıcı adları o listeyi elde edelim gibi görünmüyor.