Základní linuxové příkazy pro webový vývoj

Každý programátor by měl vyvíjet v takovém prostředí, které mu nejvíc vyhovuje. Ať už je to Windows, OSX nebo Linux. Co se však samotné aplikace týče, je velice pravděpodobné, že jí to bude slušet nejvíc na Linuxu. V linuxovém prostředí velice snadno spustíte program napsaný v Pythonu (ale klidně i jiném jazyce), aplikační a proxy servery mají často nejlepší podporu v Linuxu a pokud se budeme bavit o docker kontejnerech, tak tam téměř vždy najdete v základu nějakou linuxovou distribuci.

Základní znalost Linuxu se prostě hodí. Pokud jste nováčci, doporučuji si projít nějaké základní tutoriály, ze kterých pochopíte především adresářové cesty, práci s shellem (příkazovou řádkou) a získáte znalost, jak nainstalovat a nastavit nové programy a balíčky. V tomto článku si popíšeme jenom pár základních příkazů, které se vám budou hodit pro webový vývoj.

💡 TIP: Zvykněte si používat tabulátor pro automatické doplňování příkazů a cest.

Práce se soubory

grep

grep je jedním z nejmocnějších konzolových nástrojů. Pomocí grepu můžete vyhledat textový řetězec v souboru nebo rekurzivně v celém adresáři, získat kontext (řádky nad a pod hledaným řetězcem), což se může hodit například k dohledání stacku nějaké výjimky, nebo řetězce hledat pomocí regulárních výrazů. Už jste zkoušeli někdy otevřít několika gigabytový log a hledat v něm pomocí vizuálního editoru? Není to tak snadné 🙂 grep pomůže. 💪

  • grep "self.username" requests/auth.py [-n]
    • Zjistí, zda se v souboru requests/auth.py nachází řetězec "self.username" a vypíše celý řádek.
    • Pomocí přepínače -n můžeme vypsat i číslo řádku, na kterém se řetězec nachází.
  • grep "self.username" ./requests/ -r
    • Řetězec "self.username" budeme hledat rekurzivně v celém adresáři ./requests/.
  • grep "Exception" ./ -A 10 -B 10 -r
    • Vyhledáme řetězec "Exception" ve všech souborech aktuálního adresáře s 10 řádky před (-B, before) a za (-A, after).

cat

Základní nástroj pro čtení souboru. Obsah souboru vypíše na standardní výstup.

  • cat muj-soubor.txt

head, tail

Dvě strany jedné mince. Pomocí head si můžete přečíst začátek souboru, pomocí tail zase konec. Příkazy můžete použít v kombinace a tail má pár zajímavých přepínačů navíc.

  • tail setup.cfg
    • Vypíše posledních 10 řádku ze souboru setup.cfg.
  • tail setup.cfg -n 2
    • Vypíše poslední 2 řádky ze souboru setup.cfg.
  • head -n 5 setup.cfg | tail -n 1
    • Ze souboru setup.cfg si načteme prvních 5 řádků, ty pošleme na vstup příkazu tail a ten nám z těch pěti získá poslední. Kombinací těchto dvou příkazů jsme získali právě pátý řádek souboru setup.cfg.
  • tail app.log -f
    • Přepínač -f (follow) nám neustále čte konec souboru a ve chvíli, kdy do něj aplikace zapíše další řádky, tak si je rovnou přečteme na standardním výstupu.

vim, nano

Vim a Nano jsou spíše plnohodnotnými textovými editory, než pouhými příkazy nebo nástroji. Doporučuji si osvojit jeden z nich a pokud to bude vim nebudete litovat 😉. Začátky s vimem jsou sice náročné (mohli jste zaslechnout desítky vtipů: "Vim používám už 2 roky... hlavně proto, že jsem ještě nepřišel na to, jak ho zavřít."), ale když se s ním člověk naučí, je to mocný nástroj.

Běžící procesy

ps

Příkaz a zkratka "process status". Pomocí tohoto nástroje zjistíte aktuálně běžící procesy. Doporučuji rovnou spouštět s argumenty ax. a zobrazí procesy všech uživatelů a x ty, které neběží z terminálu (daemon).

  • ps ax | grep python
    • Triviálně zjistí, jaké pythonní aplikace a s jakým pid jsou spuštěny.

kill/killall

Ukončení či zabití nějakého procesu. Ano, mezi ukončením a zabitím procesu je rozdíl 🙂 mrkněte na tabulku kill -l případně vygooglete typy signálů. Věřím, že nejčastěji se setkáte se signálem SIGKILL (9), takže s ním níže budeme i pracovat. A jaký je rozdíl mezi kill a killall? kill jako argument přijímá číslo procesu, kdežto killall jeho název (tudíž může zabít i více procesů).

  • kill -9 123
    • Zabije proces s pid 123.
  • killall -9 python
    • Zabije proces python.

top/htop

Příkaz top v základu zobrazí interaktivní statistiku a tabulku procesů, využití paměti a procesoru. Můžete ho přirovnat ke grafickému Monitoru aktivity na OSX nebo Task manageru na Windows. Příkaz htop pak nabízí komfortnější a přehlednější rozhraní nad procesy, snadnější možnost vyhledávání nebo zobrazení hierarchické struktury procesů.

Připojení a vzdálený přístup

ssh

Máte nějaký virtuální server nebo obecně nějaký vzdálený linuxový stroj? Abyste se k němu připojili a přihlásili, pravděpodobně se tam "ssháčknete". SSH je aplikace a související protokol, který umožňuje vzdálenou komunikaci mezi počítači. Je šifrovaný (ssh = secure shell) nástupce telnetu a kromě připojení k terminálu umí například bezpečné tunelování portů mezi dvěmi stroji. V tomto textu se o něm chci pouze zmínit, ale ssh si zaslouží větší pozornost a proto doporučuji chvíli googlit a hlavně si ho prakticky (třeba na nějaké té virtuálce) vyzkoušet. Zajímavou nástavbou ssh je pak scp (secure copy) a sshfs (umožňuje připojit vzdálený adresář jako lokální svazek).

  • ssh uzivatel@hostname
    • Přihlásí se k terminálu na serveru "hostname" pod uživatelem "uzivatel".
  • ssh -A uzivatel@hostname
    • Propagace klíčenky na stroj hostname. Představte si, že máte v Githubu nahraný svůj veřejný klíč. Na svém lokálním stroji si tedy můžete pohodlně klonovat a pushovat větve dle libosti. Co když chcete to samé udělat na vzdáleném serveru, kde jste přihlášeni za jiného uživatele? Parametr -A vypropaguje lokální ssh klíčenku na vzdálený server a v tu chvíli vám bude fungovat autentizace jako byste byli na svém lokálním stroji. 👍

netstat

Nástroj netstat vám vypíše navázaná síťová spojení (příchozí i odchozí, tcp i udp) a díky němu jste například schopni zjistit, na kterém portu běží ta která aplikace.

  • netstat -t
    • Zobrazí přehled všech tcp spojení.
  • netstat -pt
    • -p zobrazí proces, který daný socket využívá.
  • netstat -pat
    • -a znamená přehled všech aktivních spojení.
  • netstat -pant
    • Pomocí přepínače -n není použit reverzní překlad ip adres na jména.

wget

Nástroj pro "stahování dat z webu". Wget podporuje protokoly http, https a ftp a jsme pomocí něj schopni jednoduše stáhnout soubor z internetu, případně, což je šikovné, rekurzivně celou webovou stránku.

  • wget https://www.python-programator.cz/robots.txt
    • Stáhne z webu soubor robots.txt a uloží ho do aktuálního adresáře.

nc

nc (netcat) je jednoduchý nástroj pro čtení a zápis na TCP/UDP. My si zatím ukážeme jenom jedno použití netcatu a to "listen" (poslouchání na nějakém portu). Vytvoříme si tak jednoduchý debugovací nástroj HTTP requestů, který se nám bude hodit například pro pokusy s curlem níže.

  • nc -l 80
    • Otevře TCP spojení a poslouchá na portu 80. Cokoli pošlete na http://localhost/, zobrazí se vám na standardním výstupu.

curl

Podobně jako wget můžete curl použít pro stahování dat. Na rozdíl od wgetu se však jedná o komplexnější nástroj a obecně by se dalo říci, že je spíše "nástrojem pro vytváření requestů". Představte si, že vyrábíte nějaké API a chcete si otestovat jeho funkčnost. Chcete se zeptat na konkrétní url, s requestem poslat nějaké konkrétní hlavičky, cookies a to celé poslat POSTem. Přesně tohle uděláte nejjednodušeji pomocí curlu.

  • curl https://www.python-programator.cz/robots.txt
    • Stáhne soubor robots.txt a vypíše jeho obsah na standardní výstup.
  • curl -X POST http://localhost/
    • Pošle POST požadavek na server běžící na localhostu. (doporučuji mít vedle v terminálu otevřený nc).
  • curl -H "X-Header: abc" http://localhost/
    • S requestem na localhost se pošle i hlavička "X-Header: abc".
  • curl -X POST -H "Content-Type: application/json" -d "{\"user\":\"karel\", \"passwd\":\"heslo\"}" http://localhost/
    • Argumentem -d pošleme data. V tomto případě posíláme json (což tvrdíme správně i v poslané hlavičce), ale může se jednat o libovolný typ... třeba formulářové multipart/form-data.
  • curl --cookie "session=123" http://localhost/
    • Na náš localhost server pošleme cookie "session". Zkrácený argument pro --cookie je -b. Jelikož se cookie posílá v hlavičce, fungovalo by nám dost dobře i -H "Cookie: session=123".
  • curl -v
    • Verbose, aneb vypiš všechno, co se děje. Ideální pro ladění komunikace... s kým se navazuje spojení, vypíše všechny odchozí i příchozí hlavičky atd.
Úroveň znalostí
Začátečník