Banyak sistem memiliki getentperintah untuk daftar atau query isi Name Service database seperti passwd, group, services, protocols...
getent passwd | cut -d: -f6
Akan mencantumkan direktori home (bidang ke- 6 dengan batas kolon ke- 6 ) dari semua pengguna dalam basis data yang dapat disebutkan .
Nama pengguna itu sendiri ada di bidang pertama, jadi untuk daftar nama pengguna:
getent passwd | cut -d: -f1
(perhatikan bahwa itu tidak berarti para pengguna dapat login ke sistem atau direktori home mereka telah dibuat, tetapi mereka dikenal oleh sistem, mereka dapat diterjemahkan ke id pengguna).
Untuk basis data yang tidak dapat disebutkan, Anda dapat mencoba dan menanyakan setiap id pengguna yang memungkinkan secara individual:
getent passwd {0..65535} | cut -d: -f1,6
(disini anggaplah uids berhenti di 65535 (beberapa sistem mendukung lebih) dan sebuah shell yang mendukung {x..y}bentuk ekspansi brace zsh ). Tetapi Anda tidak ingin sering melakukannya pada sistem di mana basis data pengguna jaringan (dan ada caching lokal terbatas) seperti LDAP, NIS +, SQL ... karena hal itu dapat menyiratkan banyak lalu lintas jaringan (dan memuat pada server direktori ) untuk membuat semua pertanyaan itu.
Itu juga berarti bahwa jika ada beberapa pengguna berbagi uid yang sama, Anda hanya akan mendapatkan satu entri untuk setiap uid, jadi lewatkan yang lain.
Jika tidak getent, Anda dapat menggunakan perl:
perl -le 'while (@e = getpwent) {print $e[7]}'
untuk getent passwd( $e[0]untuk nama pengguna), atau:
perl -le 'for ($i=0;$i<65536;++$i) {
if (@e = getpwuid $i) {print $e[0] ": " $e[7]}}'
untuk getent passwd {0..65535}dengan peringatan yang sama.
Dalam shell, Anda dapat menggunakan ~useruntuk mendapatkan direktori home user, tetapi di sebagian besar shell, yang hanya berfungsi untuk sekumpulan nama pengguna yang terbatas (daftar karakter yang diizinkan dalam nama pengguna yang didukung untuk ~operator ekspansi itu bervariasi dari shell ke shell) dan dengan beberapa shell (termasuk bash), ~$usertidak akan berfungsi (Anda harus menggunakan evalketika nama pengguna disimpan dalam variabel di sana). Dan Anda masih harus menemukan cara untuk mendapatkan daftar nama pengguna.
Beberapa shell memiliki dukungan bawaan untuk mendapatkan daftar nama pengguna itu.
bash: compgen -uakan mengembalikan daftar pengguna dalam basis data yang dapat disebutkan.
zsh: $userdirsarray asosiatif memetakan nama pengguna ke direktori home mereka (juga terbatas pada basis data yang dapat disebutkan, tetapi jika Anda melakukan ~userekspansi untuk pengguna yang ada dalam basis data yang tidak dapat dihitung, entri akan ditambahkan ke $userdirs). Jadi kamu bisa melakukan:
printf '%s => %s\n' "${(kv@)userdirs}"
untuk daftar pengguna dengan direktori home mereka.
Itu hanya berfungsi ketika zshbersifat interaktif sekalipun .
tcsh, fishdan yashtiga shell lain yang dapat melengkapi nama pengguna (misalnya saat menyelesaikan ~<Tab>argumen), tetapi sepertinya mereka tidak membiarkan Anda memperoleh daftar nama pengguna tersebut secara terprogram.