Birçok sistem, bir var getent
listeye 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 ~user
ana 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
~$user
eval
Bazı mermiler, bu kullanıcı adlarının listesini almak için yerleşik desteğe sahiptir.
bash
: compgen -u
numaralandırılabilen veritabanlarındaki kullanıcıların listesini döndürür.
zsh
: $userdirs
ilişkilendirilebilir dizi kullanıcı adlarını ana dizinleriyle eşler (numaralandırılabilen veritabanlarıyla da sınırlıdır, ancak ~user
numaralandı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 zsh
etkileşimli olduğunda çalışır .
tcsh
, fish
Ve 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.