Bagaimana saya bisa menemukan jumlah pengguna online di Linux?

10

Bagaimana saya bisa melihat berapa banyak orang yang masuk ke mesin Linux? Saya tahu perintah 'pengguna' menunjukkan semua orang yang masuk tetapi saya perlu nomor. Apakah ada saklar untuk pengguna yang saya lewatkan di halaman manual? Saya berpikir untuk menggunakan grep -cperintah, tetapi harus ada sesuatu yang sama di setiap nama pengguna agar ini berfungsi. Apakah ada cara yang lebih mudah?

Jamal
sumber

Jawaban:

15

Anda mencari perintah wc(jumlah kata).

Coba ini:

users | wc -w
John T
sumber
perhatikan bahwa pendekatan ini (solusi siapa / w) hanya menampilkan pengguna yang masuk, tidak harus pengguna yang aktif (yaitu pengguna yang memulai proses dan kemudian keluar meninggalkan proses yang berjalan di belakang). Hanya untuk menyerah tentang perbedaan.
estani
18

Secara klasik, perintahnya adalah 'siapa' daripada 'pengguna', tetapi 'siapa' memberi Anda lebih banyak informasi. Melihat kembali artikel Unix asli (pertengahan 70-an), contohnya adalah:

who | wc -l

Menggunakan 'wc-l' menghitung garis output - ini bekerja dengan 'pengguna' dan 'siapa'. Menggunakan '-w' hanya bekerja dengan andal bila ada satu kata per pengguna (seperti dengan 'pengguna' tetapi tidak dengan 'siapa').

Anda bisa menggunakan 'grep -c' untuk menghitung garis. Karena Anda hanya tertarik pada nama pengguna yang tidak kosong, Anda dapat melakukan:

who | grep -c .

Selalu ada setidaknya satu karakter di setiap baris.


Seperti dicatat dalam komentar oleh John T , usersperintah berbeda dari whodalam beberapa hal. Yang paling penting adalah bahwa alih-alih memberikan satu nama per baris, itu menyebarkan nama beberapa kali per baris - Saya tidak memiliki mesin dengan pengguna yang cukup berbeda yang masuk untuk menguji apa yang terjadi ketika jumlah pengguna menjadi besar. Perbedaan lainnya adalah 'siapa' yang melaporkan koneksi terminal yang digunakan. Dengan beberapa jendela terminal terbuka, itu akan menampilkan beberapa baris untuk satu pengguna, sedangkan 'pengguna' sepertinya mendaftar pengguna yang masuk sekali saja.

Sebagai konsekuensi dari perbedaan ini, grep -c .formulasi ' ' tidak akan berfungsi dengan perintah 'pengguna'; ' wc -w' itu perlu.

Jonathan Leffler
sumber
nitpick kecil - perintah pengguna tidak mencetak 1 baris per pengguna, hanya mencetak id secara berurutan, jadi grep -c. tidak akan berfungsi dalam kasus ini. Pemikiran cerdas sekalipun.
John T
ini juga berarti bahwa wc -l tidak akan bekerja dengan perintah pengguna, seperti yang ditunjukkan di sini: i26.tinypic.com/4pw0vd.png
John T
@ John T: oh - well, mengingat tangkapan layar, Anda benar. Saya menguji 'pengguna' di MacOS X - tetapi dengan hanya satu pengguna yang masuk. Ketika saya memeriksa ulang dengan pengguna kedua yang masuk, saya melihat perilaku 'semua pada satu baris'.
Jonathan Leffler
1
untuk mensimulasikan lebih banyak pengguna Anda bisa SSH ke dalam kotak Anda sendiri :)
John T
Terima kasih atas informasi berharga ini, meskipun saya ingin tetap menggunakan perintah "pengguna". Juga mendukung Anda, terima kasih.
7

Buka shell dan ketik:

who -q

Baris terakhir akan memberi Anda hitungan.

EDIT:

(menghela nafas) Saya salah paham pertanyaannya. Inilah pendekatan yang agak kasar:

Untuk melihat nama pengguna yang unik:

who | awk '{ print $1 }' | sort | uniq

Untuk melihat jumlah pengguna unik:

who | awk '{ print $1 }' | sort | uniq | wc -l 
Avery Payne
sumber
yang menghitung semua login dari pengguna yang sama secara total.
hayalci
periksa kembali edit, saya pikir Anda akan menemukan bahwa jawaban baru mengatasinya.
Avery Payne
Ini masih tidak berfungsi, hanya uniq menghapus duplikat baris berturut-turut, Anda perlu mengurutkan output siapa yang pertama.
theotherreceive
itulah yang saya dapatkan untuk mengirim jawaban pada jam 1 pagi. (Menghela napas) diperbaiki.
Avery Payne
3

Apakah Anda ingin melihat jumlah sesi, atau jumlah pengguna yang sebenarnya ?

$ who
andrew   tty1         2009-07-26 15:31 (:0)
andrew   pts/0        2009-07-27 00:11 (:0.0)
andrew   pts/1        2009-07-27 01:58 (:0.0)

Itu ada di laptop saya, jadi saya satu-satunya pengguna, tapi saya masuk tiga kali.

$ who | wc -l
3
$ users | wc -w
3

Sangat mudah untuk memfilter duplikat ini meskipun untuk mendapatkan jumlah pengguna yang sebenarnya.

$ users | tr ' ' '\n' | sort -u 
andrew
$ users | tr ' ' '\n' | sort -u | wc -l
1
theecereceive
sumber
3

Berikut ini adalah versi bash dari postingan awk tink yang bagus:

set $(users)
declare -A user
for u ; do ((user[$u]++)) ; done
for key in "${!user[@]}" ; do echo "$key: ${user[$key]}" ; done | column -t | sort -nk 2

Ok, ini sedikit lebih lama, tetapi layak untuk menemukan yang ini ... :).

Saat menguji, lakukan sebelum upaya berikutnya:

shift $#                # clear positional parameters
unset user              # remove associative array variable
Sasch
sumber
2

jumlah pengguna yang saat ini masuk:

who |cut -c 1-9 |sort -u |wc -l

buta di atas dengan nama akun mereka:

who |cut -c 1-9 |sort -u |tee /dev/tty |wc -l
Cris
sumber
1
who | cut --delimiter=' ' -f 1 | sort -u | wc -l

Siapa yang mencetak daftar, memotong menghapus semuanya kecuali baris pertama, mengurutkan -u mengurutkannya dan menghapus duplikat dan wc -l menghitung garis. Bekerja dengan baik untuk saya di ubuntu / bash :)

Kim
sumber
1

Anda cukup menggunakan w( /usr/bin/wpada sistem berbasis Red Hat saya) atau uptime, mereka menunjukkan jumlah sebenarnya pengguna yang masuk.

w:

                              v
 22:40:38 up 3 days, 22 min,  1 user,  load average: 0.02, 0.01, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
manuel   pts/0    pc-manuel        09:35    0.00s  0.07s  0.00s /usr/bin/screen -xRR

waktu aktif:

                              v
 22:39:18 up 3 days, 21 min,  1 user,  load average: 0.08, 0.02, 0.01
Manuel Faux
sumber
1

Dan metode yang hanya menggunakan satu pipa ...

users | awk '{for(i=1;i<=NF;i++){a[$i]++}}END{for(i in a){print i"\t"a[i]}}'

:}

Tink
sumber
0

Anda selalu dapat mengunduh alat gratis untuk unix yang disebut TOP. Ini menghasilkan daftar pengguna dan juga apa yang mereka lakukan pada sistem pada saat itu dan akan terus memperbarui selama masih berjalan.

Itu terletak di http://www.unixtop.org/

Ini memiliki banyak saklar baris perintah sehingga Anda harus dapat mengekstrak informasi yang Anda cari.

Axxmasterr
sumber
Saya belum menemukan distro linux yang tidak menyertakan top secara default, apalagi tidak memiliki opsi untuk menginstalnya dari paket.
theotherreceive
0
who | cut -d ' ' -f1 | uniq | wc -l
Arjun Dandagi
sumber
2
Ini sepertinya variasi kecil dari jawaban Kim, dan tidak mengandung penjelasan. Mungkin lebih tepat sebagai komentar pada jawaban itu (yang membutuhkan lebih banyak perwakilan). Maksudnya adalah bahwa setiap jawaban memberikan solusi yang secara substansial berbeda dari apa yang telah dikontribusikan.
fixer1234
-2

Jika Anda mencari jumlah total pengguna yang masuk dan keluar dalam urutan yang tepat, perintah terbaik untuk dijalankan adalah

cat -n /etc/passwd
Amrik Singh
sumber
2
Tidak, bukan itu yang dilakukan perintah itu. cat -nhanya mencetak semua baris dalam file, menomori masing-masing. Anda akan mendapatkan daftar pengguna yang ada di sistem itu, tetapi Anda tidak akan mendapatkan banyak info masuk.
cpast