Questo è il codice che desidero decifrare:
w | cut -d " " -f 1 - | grep -v USER | sort -u
Risposta
w | cut -d " " -f 1 - | grep -v USER | sort -u
Il comando w
mostra gli utenti che hanno effettuato laccesso insieme a alcune informazioni aggiuntive:
$ w 12:59:25 up 50 days, 21:45, 4 users, load average: 1.02, 1.03, 1.01 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT bill pts/12 xxx.xxx.xxx.xxx 12:55 0.00s 0.03s 0.03s tmux bill pts/14 tmux(64415).%0 12:55 0.00s 0.05s 0.03s w dave pts/18 yyy.yyy.yyy.yyy Wed09 23:52m 1:15 1:07 vim clear_snapshots.pl dave pts/2 yyy.yyy.yyy.yyy Tue14 23:48m 3.65s 3.65s -bash
Il comando cut -d " " -f 1 -
estrae la prima colonna delimitata da spazi di questo (il -
alla fine può essere rimosso):
$ w | cut -d " " -f 1 USER bill bill dave dave
grep -v USER
rimuove tutte le righe che contengono la stringa USER
:
$ w | cut -d " " -f 1 | grep -v USER bill bill dave dave
sort -u
ordina il suo input lessicograficamente e rimuove le righe duplicate:
$ w | cut -d " " -f 1 | grep -v USER | sort -u bill dave
La mia ipotesi è che cerchi di elencare i nomi utente degli utenti che sono attualmente collegati , come un elenco ordinato.
Un modo più semplice per farlo è semplicemente usare il comando users
. users
restituirà tutti gli utenti che hanno effettuato laccesso in una riga, ma puoi reindirizzarlo tramite tr " " "\n"
e sort -u
per ottenere un utente per riga:
users | tr " " "\n" | sort -u
Questo inoltre non dipende dal formato prodotto da w
(lora sulla prima riga delloutput w
può o non può far parte delloutput della pipeline a seconda che lora del giorno corrente sia di una o due cifre, a seconda su quale implementazione di w
stai “utilizzando).