Perintah yang mudah digunakan untuk mencantumkan semua pengguna di sistem Ubuntu?


22

Apakah ada perintah yang ramah pengguna yang dapat saya gunakan untuk mendaftar pengguna di konsol pada sistem Ubuntu?

Ketika saya cat /etc/passwdmendapatkan daftar pengguna yang sulit dibaca. Akan menyenangkan untuk melihat daftar alfabet, dengan entri disusun ke dalam kolom, dan dengan nama grup dalam tanda kurung di sebelah ID grup.


2
baik, / etc / passwd adalah diatur ke dalam kolom ... jika Anda ingin melihat hanya beberapa colums, mungkin menggunakan cut. Untuk abjad, ada sort. Jika Anda memerlukan nama grup, mainkan dengan join (yang mungkin sebenarnya hanya dapat menampilkan sebagian kolom, btw).
njsg

Jawaban:


27

Cara yang bagus untuk hasil yang bagus dari file / etc / passwd:

$ column -nts: /etc/passwd

Sekarang Anda dapat mengurutkannya:

$ column -nts: /etc/passwd | sort

Dengan nama grup di kolom terakhir (tanpa tanda kurung):

$ paste -d: /etc/passwd <(groups $(cut -d: -f1 /etc/passwd) | sed 's/.*: //') | column -nts: | sort

Terima kasih, perintah ini melakukan apa yang saya inginkan. Bagi seorang pemula ini sangat menakutkan ... Saya kira saya harus belajar cara membuat alias untuk mereka.
M. Dudley

Pada kolom Centos tidak suka nopsi. column -ts: /etc/passwdbekerja dengan baik.
user1014251

9

Jika Anda memiliki akses root pada mesin, Anda dapat melakukan hal berikut:

sudo grep -vE '^[^*!]+:[*!]:' /etc/shadow | sort | cut -d: -f1 | while read user; do id $user; done | column -ts' ,' | vi '+set nowrap' -

Bagaimana itu bekerja

Menjadi root untuk membaca file bayangan. Kamu saja membutuhkan hak akses root jika Anda ingin untuk memeriksa apakah pengguna memiliki password set (pengguna manusia), jika tidak, anda hanya dapat cat /etc/passwdbukannya sudo grep ...:

sudo 

Hanya tampilkan pengguna yang memiliki kumpulan kata sandi:

grep -vE '^[^*!]+:[*!]:' /etc/shadow

Sortir menurut nama pengguna:

sort 

Buang semua informasi kecuali untuk nama pengguna:

cut -d: -f1

Iterasi melalui nama pengguna dan perkaya dengan informasi grup:

while read user; do id $user; done

Format input ke dalam kolom:

column -ts' ,'

Gunakan vi untuk melihat hasilnya:

vi '+set nowrap' - 

Jika Anda tidak memiliki akses root,

coba sesuatu seperti ini:

cut -d: -f1 /etc/passwd | sort | while read user; do id $user; done | sed 's/\(\()\|^\)[^(]*(\|)\)/ /g' | column -t

Hasilnya agak berbeda, tetapi saya membiarkannya sebagai latihan bagi pembaca untuk menggabungkan dua bagian dalam jawaban ini menjadi sesuatu yang sepenuhnya sesuai dengan pekerjaan itu. (Apakah kamu tidak hanya cinta sed?)


"Saya meninggalkannya sebagai latihan untuk pembaca ..." :)
Emanuel Berg

1

Di Ubuntu dapat sebagai berikut:

tujuh bidang dari / etc / passwd disimpan dalam $ f1, f2 ..., $ f7

while IFS=: read -r f1 f2 f3 f4 f5 f6 f7
do
 echo "User $f1 use $f7 shell and stores files in $f6 directory."
done < /etc/passwd

1

Sesuatu yang saya lakukan dan berfungsi untuk tujuan saya adalah

ls /home

Memang, itu tidak benar-benar memberi Anda daftar pengguna daripada daftar direktori home pengguna dan direktori pengguna sebelumnya tetapi perintah apa pun yang ingin Anda lakukan pada pengguna yang tidak ada terminal akan memberi tahu Anda dan bisa menjadi petunjuk untuk menghapus file beranda yang tidak memiliki pengguna atau memindahkannya!


Saya suka ini. Ini menyelesaikan pekerjaan pada level dasar.
aalaap

0

Saya pikir ini akan mudah join, tetapi joinmembutuhkan file untuk diurutkan pada kolom join . Jadi diperlukan (?) Solusi dengan file sementara. Output diurutkan pada pengguna, dan menampilkan ID pengguna, grup, dan grup.

uag () {
  TEMP_GROUPS=/var/tmp/sorted_groups
  TEMP_USERS=/var/tmp/sorted_users
  cat /etc/group  | tr ":" " " | sort -k 3 -o $TEMP_GROUPS
  cat /etc/passwd | tr ":" " " | sort -k 4 -o $TEMP_USERS
  join -1 4 -2 3 -o 1.1,2.1,2.3 $TEMP_USERS $TEMP_GROUPS | sort
  rm $TEMP_GROUPS $TEMP_USERS
}

Terjemahkan karakter ke karakter lain dengan tr; sortmenurut bidang kunci dengan -k, output ke file dengan -o; bergabung dengan berkaitan dengan bidang dalam file pertama ( -1) dan kedua ( -2), output bidang tertentu dalam file pertama ( -o 1.1) serta yang kedua ( ,2.1,2.3).


perhatikan itu /tmpakan lebih baik, karena FHS menyatakan bahwa /var/tmptidak akan dihapus pada reboot, yang kita tidak benar-benar butuhkan.
strugee
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.