Come posso trovare il numero di utenti online su Linux?


10

Come posso vedere quante persone hanno effettuato l'accesso a una macchina Linux? So che il comando "utenti" mostra tutte le persone che hanno effettuato l'accesso ma ho bisogno di un numero. C'è un interruttore per gli utenti che mi manca nella pagina man? Ho pensato di usare il grep -ccomando, ma ci deve essere qualcosa di uguale in ogni nome utente affinché funzioni. C'è un modo più semplice?

Risposte:


15

Stai cercando il wccomando (conteggio parole).

Prova questo:

users | wc -w

si noti che questo approccio (soluzioni who / w) mostra solo gli utenti che hanno effettuato l'accesso, non necessariamente gli utenti attivi (ovvero gli utenti che avviano un processo e quindi si disconnettono lasciando indietro il processo in esecuzione). Giusto per dare un avvertimento sulla differenza.
estani,

18

In genere, il comando è "chi" anziché "utenti", ma "chi" fornisce ulteriori informazioni. Guardando indietro agli articoli originali Unix (metà degli anni '70), l'esempio sarebbe stato:

who | wc -l

L'uso di 'wc -l' conta le linee di output - funziona sia con 'utenti' che con 'chi'. L'uso di '-w' funziona in modo affidabile solo quando esiste una parola per utente (come con 'utenti' ma non con 'chi').

Puoi usare 'grep -c' per contare le linee. Poiché sei interessato solo a nomi utente non vuoti, puoi fare:

who | grep -c .

C'è sempre almeno un personaggio su ogni riga.


Come notato nei commenti di John T , il userscomando differisce da whoun certo numero di aspetti. Il più importante è che invece di dare un nome per riga, distribuisce i nomi diversi per riga: non ho una macchina con abbastanza utenti diversi per accedere per verificare cosa succede quando il numero di utenti aumenta. L'altra differenza è che "chi" riporta le connessioni ai terminali in uso. Con più finestre del terminale aperte, mostrerà più righe per un singolo utente, mentre "utenti" sembra elencare un utente connesso solo una volta.

Come conseguenza di questa differenza, la grep -c .formulazione " " non funzionerà con il comando "utenti"; ' wc -w' è necessario.


piccolo nitpick - il comando users non stampa 1 riga per utente, ma stampa solo l'id in sequenza, quindi grep -c. non funzionerebbe in questo caso. Pensiero intelligente però.
John T,

questo significa anche che wc -l non funzionerà con il comando users, come mostrato qui: i26.tinypic.com/4pw0vd.png
John T

@John T: oh - beh, data la schermata, hai ragione. Ho testato "utenti" su MacOS X, ma con un solo utente connesso. Quando ricontrollavo con un secondo utente connesso, vedo il comportamento "tutto su una riga".
Jonathan Leffler,

1
per simulare più utenti puoi SSH nella tua casella :)
John T

Grazie per queste preziose informazioni, anche se volevo attenermi al comando "utenti". Grazie anche a te, grazie.

7

Apri una shell e digita:

who -q

L'ultima riga ti darà un conto.

MODIFICARE:

(sospiro) Ho frainteso la domanda. Ecco un approccio un po 'bruto:

Per vedere nomi utente univoci:

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

Per vedere un conteggio di utenti unici:

who | awk '{ print $1 }' | sort | uniq | wc -l 

che conta tutti gli accessi dello stesso utente nel totale.
hayalci,

controlla la modifica, penso che troverai che le nuove risposte risolvono questo problema.
Avery Payne,

Questo non funziona ancora, uniq rimuove solo le righe successive duplicate, devi prima ordinare l'output di chi.
theotherreceive,

questo è quello che ottengo quando invio le risposte all'una di notte. (sospiro) fisso.
Avery Payne,

3

Vuoi vedere il numero di sessioni o il numero di utenti effettivi ?

$ 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)

È sul mio laptop, quindi sono l'unico utente, ma ho effettuato l'accesso tre volte.

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

È abbastanza facile filtrare questi duplicati per ottenere il numero di utenti effettivi.

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

3

Ecco una versione bash di tink grande post awk 's:

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, è un po 'più lungo, ma valeva la pena trovarlo ... :).

Durante il test, eseguire prima del prossimo tentativo:

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

2

numero di utenti attualmente connessi:

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

i buta sopra con il loro nome account:

who |cut -c 1-9 |sort -u |tee /dev/tty |wc -l

1
who | cut --delimiter=' ' -f 1 | sort -u | wc -l

Chi stampa l'elenco, taglia rimuove tutto tranne la prima riga, ordina -u ordina e rimuove i duplicati e wc -l conta le righe. Funziona bene per me su Ubuntu / Bash :)


1

Puoi semplicemente usare w( /usr/bin/wsul mio sistema basato su Red Hat) oppure uptime, mostrano il numero effettivo di utenti che hanno effettuato l'accesso.

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

uptime:

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

1

E un metodo che utilizza solo una pipe ...

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

:}



0

Puoi sempre scaricare lo strumento gratuito per unix chiamato TOP. Produce un elenco degli utenti e anche ciò che stanno facendo sul sistema in quel momento e continuerà ad aggiornarsi finché sarà in esecuzione.

Si trova all'indirizzo http://www.unixtop.org/

Ha molte opzioni della riga di comando, quindi dovresti essere in grado di estrarre le informazioni che stai cercando.


Devo ancora trovare una distribuzione Linux che non includa top di default, per non parlare dell'opzione per installarlo dai pacchetti.
ricevendo il

0
who | cut -d ' ' -f1 | uniq | wc -l

2
Questa sembra una variazione minore della risposta di Kim e non contiene alcuna spiegazione. Potrebbe essere più appropriato un commento su quella risposta (che richiede un po 'più di rep). L'intenzione è che ogni risposta fornisca una soluzione sostanzialmente diversa da quella già fornita.
fixer1234

-2

Se stai cercando il numero totale di utenti che hanno effettuato l'accesso e disconnesso in una sequenza appropriata, il comando migliore da eseguire è

cat -n /etc/passwd

2
No, non è quello che fa quel comando. cat -nstampa tutte le righe nel file, numerandole ognuna. Otterrai un elenco di utenti esistenti su quel sistema, ma non otterrai molte informazioni di accesso.
fino al
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.