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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *