who, w i last — ko je prijavljen i ko je bio
Tri komande koje odgovaraju na varijacije istog pitanja. who
kaže ko je trenutno prijavljen, w šta ti ljudi rade, a
last ko je bio ranije.
Na sopstvenom laptopu su blago zanimljive. Na serveru su prva stvar koju pogledaš kad se pitaš zašto je nešto promenjeno — ili kad sumnjaš da nešto nije u redu.
who
$ who alen tty2 2026-08-22 08:14 (:0) alen pts/0 2026-08-22 09:32 (192.168.1.15) marko pts/1 2026-08-22 13:47 (203.0.113.45)
Četiri kolone: korisnik, terminal, vreme prijave i odakle.
Kolona sa terminalom je važnija nego što izgleda:
tty1, tty2 |
Fizička konzola — neko sedi za samom mašinom. |
pts/0, pts/1 |
Pseudoterminal: SSH veza ili prozor terminala u grafičkom okruženju. |
(:0) |
Lokalna grafička sesija. |
(IP adresa) |
Udaljena veza sa tog mesta. |
U primeru iznad: Alen sedi za mašinom i uz to ima jednu SSH vezu iz lokalne mreže, a Marko je povezan spolja.
Korisne zastavice
$ who -H -u NAME LINE TIME IDLE PID COMMENT alen pts/0 2026-08-22 09:32 . 4821 (192.168.1.15) marko pts/1 2026-08-22 13:47 02:14 5102 (203.0.113.45)
Kolona IDLE je vreme neaktivnosti; tačka znači da korisnik
nešto radi upravo sada. Markova sesija stoji dva sata i četrnaest minuta.
$ who -b
system boot 2026-07-06 11:11
$ who -r
run-level 5 2026-07-06 11:11
$ who am i
alen pts/0 2026-08-22 09:32 (192.168.1.15)
Poslednja komanda odgovara na pitanje „koja je od ovih sesija moja", korisno kad ih ima nekoliko.
whoami je nešto drugo
$ whoami alen $ sudo whoami root
Ovo nije skraćenica od who am i. whoami ispisuje
efektivnog korisnika — pod kojim identitetom komanda trenutno radi.
who am i pokazuje ko se stvarno prijavio.
Razlika se najbolje vidi posle su:
$ su - marko $ whoami marko $ who am i alen pts/0 2026-08-22 09:32 (192.168.1.15)
Sistem pamti ko si zaista bio. Detaljnije o identitetima i grupama je na stranici id.
w
Isto što i who, ali sa odgovorom na pitanje „šta rade":
$ w 14:23:07 up 47 days, 3:12, 3 users, load average: 0,48 0,72 1,04 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT alen tty2 :0 08:14 6:09m 0.15s 0.15s -bash alen pts/0 192.168.1.15 09:32 0.00s 0.42s 0.02s w marko pts/1 203.0.113.45 13:47 2:14 1:32 1:28 mysqldump baza
Prvi red je identičan ispisu komande uptime. Ako te on ne zanima:
$ w -h
Ostale kolone:
- IDLE — koliko dugo se u toj sesiji ništa ne kuca
- JCPU — ukupno procesorsko vreme svih procesa na tom terminalu
- PCPU — procesorsko vreme trenutne komande
- WHAT — šta se upravo izvršava
Iz primera se odmah čita cela situacija: Marko je pokrenuo
mysqldump pre dva sata, komanda je potrošila minut i po
procesorskog vremena i još radi. Ako se pitaš zašto je baza spora — evo
odgovora, bez ijedne dodatne komande.
Zbog kolone WHAT je w u praksi korisniji od
who.
$ w marko # samo taj korisnik $ w -s # kratki oblik, bez JCPU i PCPU
Šta WHAT ne pokazuje
Prikazuje se samo komanda vezana za terminal. Ako je neko pokrenuo posao
preko nohup ili u tmux sesiji, u
koloni WHAT videćeš -bash iako mašina radi punom
parom. Za potpunu sliku ide ps:
$ ps -u marko -o pid,etime,cmd
last
Za razliku od prve dve, last gleda unazad:
$ last | head marko pts/1 203.0.113.45 Sat Aug 22 13:47 still logged in alen pts/0 192.168.1.15 Sat Aug 22 09:32 still logged in alen tty2 :0 Sat Aug 22 08:14 still logged in marko pts/0 203.0.113.45 Fri Aug 21 16:02 - 18:31 (02:29) alen pts/0 192.168.1.15 Fri Aug 21 08:55 - 17:40 (08:45) reboot system boot 6.8.0-45-generic Mon Jul 6 11:11 still running
Poslednja kolona je trajanje sesije. Redovi sa reboot su
pokretanja sistema, pa je ovo i najbrži način da vidiš istoriju restarta:
$ last reboot | head -5 reboot system boot 6.8.0-45 Mon Jul 6 11:11 still running reboot system boot 6.8.0-45 Wed Jun 18 03:22 - 11:09 (18+07:47) reboot system boot 6.8.0-41 Tue Jun 17 09:14 - 03:19 (18:05)
Ako je razmak između gašenja jednog i pokretanja sledećeg reda samo nekoliko minuta, radilo se o planiranom restartu. Ako nema urednog gašenja uopšte, mašina je pala.
Filtriranje
$ last marko # samo jedan korisnik $ last -n 20 # poslednjih 20 zapisa $ last -s yesterday # od juče $ last -s -7days -t today # poslednjih sedam dana $ last -a # izvor prijave u poslednjoj koloni $ last -F # pun datum sa godinom $ last -i # IP adrese umesto imena hostova
Kombinacija koja se najviše koristi pri proveri:
$ last -aFi -s -7days | head -20
lastb — neuspele prijave
$ sudo lastb | head root ssh:notty 203.0.113.88 Sat Aug 22 04:12 - 04:12 (00:00) admin ssh:notty 203.0.113.88 Sat Aug 22 04:12 - 04:12 (00:00) oracle ssh:notty 198.51.100.7 Sat Aug 22 03:58 - 03:58 (00:00)
Traži sudo, jer je fajl sa neuspelim prijavama čitljiv samo rootu. Ovakav
ispis — pokušaji sa imenima root, admin,
oracle u razmaku od nekoliko sekundi — je automatizovano
pogađanje lozinki. Na svakom serveru izloženom internetu toga ima
svakodnevno.
Koliko i odakle:
$ sudo lastb | awk '{print $3}' | sort | uniq -c | sort -rn | head -5
4821 203.0.113.88
1203 198.51.100.7
412 192.0.2.19
Ovo je isti obrazac iz lekcije wc, uniq i tr — sortiraj, prebroj, sortiraj po broju.
Ako brojke idu u hiljade, vredi razmisliti o prelasku na prijavu ključem
umesto lozinkom i o alatu poput fail2ban. Osnove su na stranici
Udaljeni pristup Linux
sistemu.
lastlog — poslednja prijava svakog korisnika
$ lastlog | head Username Port From Latest root pts/0 192.168.1.15 Fri Aug 21 08:12:44 2026 alen pts/0 192.168.1.15 Sat Aug 22 09:32:11 2026 marko pts/1 203.0.113.45 Sat Aug 22 13:47:02 2026 backup **Never logged in** www-data **Never logged in**
Ispisuje po jedan red za svakog korisnika iz
/etc/passwd — dakle i za sistemske naloge koji se nikad ne
prijavljuju, što je i očekivano.
Zanimljivo je obrnuto: nalog koji treba da bude sistemski, a ima zabeleženu prijavu.
$ lastlog -t 30 # prijavljeni u poslednjih 30 dana $ lastlog -b 90 # nisu se prijavili 90 dana i duže
Druga komanda je korisna pri čišćenju: nalozi koji stoje mesecima obično pripadaju ljudima koji više ne rade tu.
Odakle podaci dolaze
Sve tri komande čitaju iste tri binarne datoteke:
/var/run/utmp |
Ko je trenutno prijavljen. Čitaju who i w. |
/var/log/wtmp |
Istorija svih prijava i odjava. Čita last. |
/var/log/btmp |
Neuspeli pokušaji. Čita lastb. |
Nisu tekstualni, pa ih cat neće prikazati čitljivo:
$ file /var/log/wtmp /var/log/wtmp: data
Odatle slede dve praktične posledice.
Fajlovi se rotiraju
$ last | tail -1 wtmp begins Thu Aug 1 06:25:03 2026
Ako last ne seže dovoljno unazad, stariji podaci su u
rotiranim fajlovima:
$ last -f /var/log/wtmp.1 $ zcat /var/log/wtmp.2.gz > /tmp/staro && last -f /tmp/staro
Više o radu sa zapakovanim logovima u lekciji gzip, bzip2 i xz.
Podaci su promenljivi
Ko ima root prava, može te fajlove izmeniti i obrisati trag o sopstvenoj
prijavi. Zato last nije dokaz nego indicija. Ozbiljnija provera
gleda i:
$ sudo grep "Accepted" /var/log/auth.log | tail -10 $ sudo journalctl -u ssh --since "7 days ago" | grep Accepted
A za sistem gde je to zaista bitno, logovi se šalju na zaseban server — tamo ih napadač na kompromitovanoj mašini ne može dohvatiti.
Praktični scenariji
Ko je promenio konfiguraciju
$ ls -l --time-style=full-iso /etc/nginx/nginx.conf -rw-r--r-- 1 root root 2610 2026-08-21 16:14:32 /etc/nginx/nginx.conf $ last -s 2026-08-21 -t 2026-08-22 | head marko pts/0 203.0.113.45 Fri Aug 21 16:02 - 18:31 (02:29)
Fajl je izmenjen u 16:14, a jedina aktivna sesija u tom trenutku bila je Markova. Nije dokaz, ali je mesto gde počinje razgovor.
Pre restarta servera
$ w 16:45:02 up 47 days, 3 users, load average: 2,10 2,08 2,12 USER TTY FROM IDLE WHAT marko pts/1 203.0.113.45 0.00s mysqldump baza
Neko upravo radi backup baze. Restart bi ga prekinuo nasred posla — pošalji poruku i sačekaj:
$ echo "Restart za 15 minuta, sacuvaj posao" | wall
Komanda wall ispisuje poruku svim prijavljenim korisnicima.
Sumnjiva prijava
$ last -aFi | head -5 alen pts/2 Sat Aug 22 03:14:22 2026 - 03:47:19 (00:32) 198.51.100.203
Tvoj nalog, tri ujutru, IP koji ne prepoznaješ. Prvi koraci: promeni
lozinku, proveri ~/.ssh/authorized_keys, pogledaj
history te sesije i proveri da li je
nešto dodato u cron.
Kratka referenca
who— ko je prijavljen ·who -usa neaktivnošću ·who -bvreme pokretanjawho am i— moja sesija ·whoami— efektivni korisnikw— ko je prijavljen i šta radi ·w -hbez zaglavlja ·w korisniklast— istorija prijava ·last reboot— istorija pokretanjalast -aFi -s -7days— poslednjih sedam dana, pun datum, IP adresesudo lastb— neuspele prijavelastlog— poslednja prijava po korisniku ·lastlog -b 90— neaktivni naloziwall "poruka"— poruka svim prijavljenima
Vežba
- Utvrdi koliko sesija trenutno ima tvoj nalog i koje su od njih lokalne, a koje udaljene.
- Pronađi kada je sistem poslednji put pokrenut, na dva različita načina.
- Izlistaj sve prijave u poslednjih sedam dana, sa punim datumom i IP adresama.
- Prebroj neuspele pokušaje prijave po korisničkom imenu i pronađi tri najčešća imena koja su pokušavana.
- Pronađi sve naloge na sistemu koji se nikada nisu prijavili, pa uporedi
taj spisak sa sadržajem
/etc/passwdi objasni sebi zašto ih ima toliko.
Za četvrti zadatak ti treba lanac iz lekcije wc, uniq i tr.
Korisnički nalozi i grupe su na stranici Kreiranje korisnika i grupa, a sopstveni identitet na stranici id.
Cela lekcija je deo vodiča Linux osnove.
Comments
Post a Comment