Posts

Showing posts with the label komande

screen i tmux — sesija koja preživi prekid veze

Problem je poznat: pokreneš nešto dugotrajno preko SSH-a, veza pukne i posao propadne. Komanda nohup to rešava delimično — proces preživi, ali mu se ne možeš vratiti. Vidiš samo log. Multiplekser terminala rešava ceo problem. Sesija radi na serveru, nezavisno od tvoje veze; ti se od nje odvojiš i kasnije vratiš — u isto stanje, sa svim otvorenim prozorima i celom istorijom ispisa. Šta zapravo radi Kad se prijaviš preko SSH-a, tvoj shell je vezan za tu vezu. Kad veza pukne, svi procesi na njoj dobiju SIGHUP i ginu. Multiplekser umeće međusloj. Shell se vezuje za njega, a on radi kao zaseban proces koji nema veze sa tvojim terminalom: Ti → SSH → tmux → shell i tvoji procesi Kad veza padne, nestaje samo prva strelica. Sve desno od tmux-a i dalje radi. Koji izabrati tmux je noviji, moćniji i danas standard. Podela ekrana radi normalno, konfiguracija je razumljiva, dokumentacija dobra. screen je stariji, ali je češće već instaliran — naročito na starijim RHEL i C...

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 $ wh...

free i uptime — memorija i opterećenje sistema

Dve komande koje odgovaraju na pitanje „zašto je server spor". Prva pokazuje memoriju, druga opterećenje. Obe se često pogrešno tumače — i to na isti način: ljudi vide veliki broj i zaključe da je problem tu. free $ free -h total used free shared buff/cache available Mem: 15Gi 4,2Gi 412Mi 892Mi 11Gi 10Gi Swap: 4,0Gi 0B 4,0Gi Prva reakcija početnika: slobodno je samo 412 MB, memorija je pri kraju, treba dodati RAM. To je pogrešan zaključak. Pravi odgovor je u poslednjoj koloni: dostupno je 10 GB . Zašto je „free" mali broj, a to je dobro Linux slobodnu memoriju smatra protraćenom. Sve što nije zauzeto koristi za keš — čuva sadržaj fajlova sa diska, jer je čitanje iz RAM-a hiljadu puta brže. Kad aplikaciji zatreba memorija, kernel keš oslobodi trenutno. Otud kolone: total Ukupno fizičke memorije koju kernel vidi. used Stvarno zauze...

nohup i killall — proces koji preživi odjavu, i gašenje po imenu

Dve komande koje rešavaju dva česta problema. Prva: pokrenuo si nešto dugotrajno preko SSH-a, veza je pukla i posao je propao. Druga: proces se zaglavio, a ti nemaš volje da tražiš njegov PID. Zašto proces uopšte umire pri odjavi Kad se terminal zatvori, kernel svim procesima koji su za njega vezani šalje signal SIGHUP . Skraćeno od hangup — reč je ostala iz vremena modema, kad je „prekid veze" značio da je telefonska linija spuštena. Podrazumevano ponašanje na taj signal je gašenje. Otud i klasičan scenario: $ ssh server $ ./migracija.sh # traje dva sata [veza puca posle 40 minuta] $ ssh server $ ps aux | grep migracija $ # nema ničega Skripta je ubijena na četrdesetom minutu. Rešenje je da proces ili ne čuje taj signal, ili da uopšte ne bude vezan za terminal. nohup $ nohup ./migracija.sh & [1] 4821 nohup: ignoring input and appending output to 'nohup.out' Tri stvari se ovde desile: nohup je procesu rekao da ig...

gzip, bzip2 i xz — kompresija pojedinačnih fajlova

Prva stvar koju treba razdvojiti: arhiviranje i kompresija nisu isto . tar spaja više fajlova u jedan, ali ih ne smanjuje. gzip , bzip2 i xz smanjuju jedan fajl, ali ih ne umeju spojiti. Zato i postoji ono .tar.gz — prvo tar spoji, pa gzip stisne. Ova stranica je o drugom delu: koji kompresor izabrati i zašto to nije svejedno. Osnovna upotreba Sva tri alata rade isto i imaju istu logiku: $ ls -lh dump.sql -rw-r--r-- 1 alen alen 512M Aug 22 09:14 dump.sql $ gzip dump.sql $ ls -lh dump.sql.gz -rw-r--r-- 1 alen alen 118M Aug 22 09:14 dump.sql.gz Original je nestao. To je najvažnija stvar koju treba zapamtiti — za razliku od većine komandi, ovi alati zamenjuju fajl umesto da naprave kopiju. Raspakivanje radi isto, obrnuto: $ gunzip dump.sql.gz $ ls -lh dump.sql -rw-r--r-- 1 alen alen 512M Aug 22 09:14 dump.sql Ako želiš da original ostane, koristi opciju -k : $ gzip -k dump.sql $ ls -lh dump.sql* -rw-r--r-- 1 alen alen 512M Aug 22 09:14 dump.sql -rw-r--r-- 1 alen al...

wc, uniq i tr — brojanje, uklanjanje duplikata i zamena znakova

Tri komande koje same za sebe ne rade skoro ništa. Ali se u lancu sa grep i sort pojavljuju toliko često da bez njih gotovo nijedna ozbiljna obrada teksta ne prolazi. Redom: wc broji, uniq uklanja ponavljanja, tr menja pojedinačne znakove. wc — brojanje $ wc /var/log/syslog 4821 58394 512847 /var/log/syslog Tri broja: redovi, reči, bajtovi. U praksi ti skoro uvek treba samo jedan: $ wc -l /var/log/syslog 4821 /var/log/syslog $ wc -w esej.txt 1247 esej.txt $ wc -c slika.png 248391 slika.png Opcija -c broji bajtove, a -m znakove. Na ćiriličnom ili bilo kom tekstu sa našim slovima to nije isto: $ echo -n "džemper" | wc -c 9 $ echo -n "džemper" | wc -m 7 Slovo ž u UTF-8 zauzima dva bajta. Kad brojiš znakove, koristi -m . Trik sa imenom fajla $ wc -l spisak.txt 42 spisak.txt $ wc -l < spisak.txt 42 Kad se koristi preusmeravanje, wc ne zna ime fajla pa ga ne ispisuje. Neophodno kad rezultat ide u promenljivu: $ broj=$(wc -l < s...

vi za preživljavanje — režimi, kretanje i deset komandi koje su dovoljne

Pre nego što bilo šta drugo pročitaš, zapamti ovo: Esc :q! Enter — izlazak bez čuvanja izmena Esc :wq Enter — snimi i izađi To je devedeset odsto razloga zbog kojih ljudi traže pomoć oko vi-ja. Ako si trenutno zaglavljen u editoru koji se otvorio sam od sebe — pritisni Esc , otkucaj :q! i pritisni Enter. Ostatak lekcije možeš u miru. A zašto uopšte učiti editor koji izgleda neprijateljski? Zato što uvek postoji . Na svežoj instalaciji, na minimalnom kontejneru, na tuđem serveru u tri ujutru — nano možda nije instaliran, vi jeste. Ovo nije lekcija o tome kako da postaneš vim korisnik. Ovo je onaj minimum koji te izvlači iz svake situacije. Zašto je vi čudan: režimi Skoro svi editori koje znaš imaju jedan režim rada: kucaš i slova se pojavljuju. vi ima više režima, a razlog je istorijski — nastao je kad tastature nisu imale pouzdane Ctrl i Alt kombinacije, pa su same tipke morale da budu komande. Za preživljavanje su ti dovoljna tri: Komandni režim — u njemu ...

Apsolutne i relativne putanje — ., .., ~, -

Svaka komanda koja dodiruje neki fajl mora da zna gde se taj fajl nalazi. Putanja je odgovor na to pitanje. Postoje samo dve vrste putanja, a razlika između njih staje u jedno pravilo: Ako putanja počinje kosom crtom, apsolutna je. Ako ne počinje, relativna je i računa se od direktorijuma u kome se trenutno nalaziš. Sve ostalo u ovoj lekciji su posledice tog pravila. Odakle se broji: tekući direktorijum Relativna putanja nema smisla bez polazne tačke. Ta tačka je tekući direktorijum, a proveravaš ga komandom pwd : $ pwd /home/alen/dokumenti Ista relativna putanja znači različite stvari u zavisnosti od toga gde stojiš — i to je i njena prednost i njena zamka. Za primere u nastavku pretpostavimo ovakvo stablo: /home/alen ├── dokumenti │ ├── izvestaj.odt │ └── arhiva │ └── stari-izvestaj.odt ├── slike │ └── odmor.jpg └── skripte └── backup.sh Apsolutna putanja Počinje od korena sistema, koji se piše kao / , i nabraja svaki nivo do cilja: $ cat /home/a...

Džokeri i navodnici — kako shell proširuje šablone

Kad kucaš ls *.txt , komanda ls nikada ne vidi zvezdicu. Shell je razreši pre nego što pokrene komandu i prosledi joj gotov spisak imena fajlova. To je jedna rečenica koja objašnjava skoro sve čudne situacije sa džokerima — i kad rade, i kad ne rade. Ova lekcija pokriva džokere ( * , ? , [ ] ) i tri načina da shell-u kažeš da ne dira ono što si napisao (navodnici i kosa crta). Ko zapravo radi posao Pretpostavimo ovaj direktorijum: $ ls beleske.txt izvestaj-2025.pdf slika10.png skripta.sh izvestaj-2024.pdf slika1.png slika2.png Kad kucaš ls *.png , dešava se ovo: Shell pogleda direktorijum i pronađe imena koja odgovaraju šablonu. Shell zameni *.png tim imenima, sortiranim po abecedi. Tek onda pokreće ls slika1.png slika10.png slika2.png . Najlakši način da to vidiš svojim očima je komanda echo — ona samo ispiše ono što joj shell prosledi: $ echo *.png slika1.png slika10.png slika2.png Zapamti ovo pravilo: pre svake opasne komande sa dž...