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 -u sa neaktivnošću · who -b vreme pokretanja
  • who am i — moja sesija · whoami — efektivni korisnik
  • w — ko je prijavljen i šta radi · w -h bez zaglavlja · w korisnik
  • last — istorija prijava · last reboot — istorija pokretanja
  • last -aFi -s -7days — poslednjih sedam dana, pun datum, IP adrese
  • sudo lastb — neuspele prijave
  • lastlog — poslednja prijava po korisniku · lastlog -b 90 — neaktivni nalozi
  • wall "poruka" — poruka svim prijavljenima

Vežba

  1. Utvrdi koliko sesija trenutno ima tvoj nalog i koje su od njih lokalne, a koje udaljene.
  2. Pronađi kada je sistem poslednji put pokrenut, na dva različita načina.
  3. Izlistaj sve prijave u poslednjih sedam dana, sa punim datumom i IP adresama.
  4. Prebroj neuspele pokušaje prijave po korisničkom imenu i pronađi tri najčešća imena koja su pokušavana.
  5. Pronađi sve naloge na sistemu koji se nikada nisu prijavili, pa uporedi taj spisak sa sadržajem /etc/passwd i 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

Popular posts from this blog

Početak u Linuxu — šta je i zašto se uči

Konverzija tipova podataka u Pythonu

groupadd