Detta är koden jag vill dechiffrera:

w | cut -d " " -f 1 - | grep -v USER | sort -u 

Svara

w | cut -d " " -f 1 - | grep -v USER | sort -u 

Kommandot w visar användare som är inloggade tillsammans med lite ytterligare information:

$ 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 

cut -d " " -f 1 - kommandot extraherar den första mellanseparerade kolumnen i denna (- i slutet kan tas bort):

$ w | cut -d " " -f 1 USER bill bill dave dave 

grep -v USER tar bort alla rader som innehåller strängen USER:

$ w | cut -d " " -f 1 | grep -v USER bill bill dave dave 

sort -u sorterar sin ingång lexikografiskt och tar bort dubbla rader:

$ w | cut -d " " -f 1 | grep -v USER | sort -u bill dave 

Jag antar att den försöker lista användarnamnen på de användare som för närvarande är inloggade , som en sorterad lista.

Ett enklare sätt att göra det är att bara använda kommandot users. users matar ut alla inloggade användare på en rad, men du kan göra det genom tr " " "\n" och sort -u för att få en användare per rad:

users | tr " " "\n" | sort -u 

Detta beror dessutom inte på det format som produceras av w (tiden på första raden i w -utgången kan eller inte kan vara en del av utgången från din pipeline beroende på om den aktuella tiden på dagen är en eller två siffror, beroende på om vilken implementering av w du använder).

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *