Dit is de code die ik wil ontcijferen:
w | cut -d " " -f 1 - | grep -v USER | sort -u
Antwoord
w | cut -d " " -f 1 - | grep -v USER | sort -u
De w
-opdracht geeft gebruikers weer die zijn aangemeld samen met wat aanvullende informatie:
$ 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
Het cut -d " " -f 1 -
commando extraheert de eerste door spaties gescheiden kolom hiervan (de -
aan het einde kan worden verwijderd):
$ w | cut -d " " -f 1 USER bill bill dave dave
grep -v USER
verwijdert alle regels die de tekenreeks USER
bevatten:
$ w | cut -d " " -f 1 | grep -v USER bill bill dave dave
sort -u
sorteert zijn invoer lexicografisch, en verwijdert dubbele regels:
$ w | cut -d " " -f 1 | grep -v USER | sort -u bill dave
Ik vermoed dat het probeert de gebruikersnamen te vermelden van de gebruikers die momenteel zijn aangemeld , als een gesorteerde lijst.
Een eenvoudigere manier om dat te doen is door gewoon het users
commando te gebruiken. users
geeft alle aangemelde gebruikers op één regel weer, maar je kunt dat door tr " " "\n"
en sort -u
om één gebruiker per regel te krijgen:
users | tr " " "\n" | sort -u
Dit is bovendien niet afhankelijk van het formaat geproduceerd door w
(de tijd op de eerste regel van de w
-uitvoer kan wel of niet deel uitmaken van de uitvoer van uw pijplijn, afhankelijk van of de huidige tijd van de dag één of twee cijfers is, op welke implementatie van w
u “gebruikt).