Editace souborů

nano základ + jak přežít vi, editace configů.

V Linuxu je konfigurace textová — nastavení služeb, sítě, uživatelů, přihlašování přes SSH, spouštění programů, to všechno jsou obyčejné textové soubory. A na serveru, kam se připojíš přes SSH, nemáš žádnou grafiku — žádný Poznámkový blok, žádné okno. Máš jen terminál. Proto musíš umět editovat soubory přímo v něm. Naučíš se dva editory: nano (přátelský, pro začátek) a vi/vim (survival minimum — je na úplně každém Linuxu). Až tohle zvládneš, přestane ti server nahánět hrůzu.


Pár pojmů na úvod

  • Terminálový editor = program, který otevře soubor přímo v terminálu, bez okna a myši. Ovládáš ho klávesami — místo „klikni na Uložit" zmáčkneš kombinaci kláves.
  • nano = jednoduchý, přátelský editor. Píšeš rovnou, nápověda je pořád vidět dole na obrazovce. Ideální pro začátek a na 90 % běžné editace.
  • vi / vim = mocný editor, který je předinstalovaný úplně všude — i na holém minimálním serveru, kde nano není. vi je původní, vim (Vi IMproved) je jeho vylepšená verze; ovládají se stejně.
  • Režim (mode) = stav editoru vi. Buď píšeš text (insert), nebo klávesy fungují jako příkazy (normal). Tohle je ta věc, o kterou začátečníci ve vi zakopnou nejvíc.
  • EDITOR / VISUAL = proměnné prostředí, které říkají systému, který editor spustit, když tě o editaci požádá nějaký program (třeba git commit nebo crontab -e).

Proč to musíš umět

Na desktopu si soubor otevřeš v grafickém editoru a hotovo. Jenže:

  • Server nemá grafiku. Přihlásíš se přes SSH do textové konzole — jediné, co máš, je terminál.
  • Konfigurace je textová. /etc/fstab (disky), /etc/ssh/sshd_config (SSH server), unit soubory systemd, ~/.bashrc, /etc/sudoers — všechno jsou textové soubory, které budeš během kurzu upravovat pořád dokola.
  • Rychlost. Otevřít soubor, změnit jeden řádek, uložit a zavřít — to v terminálu zvládneš za pár vteřin, aniž bys sundal ruce z klávesnice.

💡 Neuč se editory nazpaměť teď „do foroty". Nauč se odejít bez škody (hlavně z vi) a uložit jednu změnu — zbytek přijde praxí, protože configy budeš editovat celým kurzem.


nano — přátelský start

Otevřeš soubor prostě takhle:

nano poznamky.txt

Kurzor je rovnou v textu — píšeš normálně, jako v Poznámkovém bloku. Šipky fungují, Backspace maže. Žádné režimy, žádné triky.

⚠️ Nápověda je pořád dole na obrazovce. Vidíš tam řádky jako ^O Uložit nebo ^X Konec. Ten stříška ^ znamená Ctrl — takže ^O = Ctrl+O, ^X = Ctrl+X. Nikdy si nemusíš pamatovat zkratky, stačí kouknout dolů.

Nejdůležitější klávesy:

KlávesaV nápověděCo dělá
Ctrl+O^OUložit (nano se zeptá na jméno → potvrď Enter)
Ctrl+X^XKonec (když je neuloženo, zeptá se, jestli uložit)
Ctrl+W^WHledat text
Ctrl+K^KVyjmout (smazat) celý řádek
Ctrl+U^UVložit vyjmutý řádek zpět
Ctrl+_^_Skok na řádek (zadáš číslo řádku)
Ctrl+G^GPlná nápověda

Typický postup uložení: napíšeš změny → Ctrl+O → nano dole ukáže jméno souboru → Enter potvrdí → Ctrl+X ukončí. Hotovo.

💡 „Uložit a zavřít" jde i zkratkou: rovnou Ctrl+X → nano se zeptá Save modified buffer? → zmáčkni YEnter. Dvě mouchy jednou ranou.


vi / vim — survival minimum

vi vypadá pro nováčka nepřátelsky, ale musíš ho aspoň přežít — je na každém Linuxu, i tam, kde nano prostě není nainstalované. Nejde o to stát se mistrem; jde o to umět otevřít, změnit, uložit a hlavně BEZPEČNĚ ODEJÍT.

⚠️ Klíč k pochopení vi jsou režimy. vi se po otevření spustí v normal režimu, kde klávesy nejsou text, ale příkazy. Když v tomhle stavu začneš psát, děje se chaos — mažou se řádky, skáče kurzor. To není rozbité, jen jsi ve špatném režimu.

vi /etc/hosts
SituaceKlávesaCo se stane
Chci psát textiVstup do insert režimu (dole se objeví -- INSERT --)
Dopsal jsemEscZpět do normal režimu
Uložit:wZapíše změny (jen v normal režimu!)
Konec:qUkončí (jen když není nic neuloženo)
Uložit a konec:wqUloží a ukončí (ZZ dělá totéž)
Konec BEZ uložení:q!Zahodí změny a odejde

⚠️ :q! je THE příkaz, který si zapamatuj ze všeho nejdřív. Když se ti vi „zasekne", nevíš, co jsi navyváděl, a chceš prostě pryč bez škody: zmáčkni Esc (pro jistotu do normal režimu), pak napiš :q! a Enter. To je celé kouzlo — vždycky se dostaneš ven.

Pár dalších užitečných příkazů (v normal režimu):

KlávesaCo dělá
h j k lPohyb kurzoru — vlevo, dolů, nahoru, vpravo (šipky obvykle taky jdou)
ddSmaže celý řádek
/textHledá „text" (n = další výskyt)
uUndo — vrátí poslední změnu zpět
xSmaže znak pod kurzorem

💡 Zapamatovací pomůcka na celý workflow: i (píšu) → Esc (dopsal jsem) → :wq (uložit a jít) nebo :q! (zahodit a jít). S těmihle čtyřmi věcmi přežiješ vi kdekoli.


Kdy co použít

  • nano na běžnou, rychlou editaci — je pohodlný a nic si nemusíš pamatovat.
  • vi vždycky, když nano na daném stroji není (typicky holé servery, kontejnery, záchranné režimy). Proto stojí za to umět ho aspoň přežít.

Když tě nějaký program (git commit, crontab -e, visudo) požádá o editaci, spustí editor podle proměnných EDITOR a VISUAL. Když ti naskočí vi a chtěl bys nano, nastavíš si:

export EDITOR=nano
export VISUAL=nano

Aby to platilo napořád, dá se to zapsat do ~/.bashrc (podrobně v kapitole o prostředí a proměnných).


sudo a systémové soubory

Soubory v /etc, unit soubory systemd a podobné patří rootovi. Když je zkusíš editovat jako běžný uživatel, buď dostaneš rovnou „Permission denied", nebo (zákeřnější) soubor otevřeš, upravíš — a při ukládání zjistíš, že nemáš práva zápisu. Napsal jsi změny do prázdna.

Proto systémové soubory edituj se sudo:

sudo nano /etc/hosts
sudo vi /etc/ssh/sshd_config

⚠️ Jedna výjimka, kterou NIKDY neporušuj: /etc/sudoers. Tenhle soubor řídí, kdo smí sudo. Když ho upravíš ručně (sudo nano /etc/sudoers) a uděláš překlep, systém ho odmítne načíst a přijdeš o sudo úplně — a přitom právě sudo bys potřeboval na opravu. Klasické zamčení se z domu s klíčem uvnitř. Proto ho edituj výhradně přes visudo:

sudo visudo

visudo otevře sudoers v editoru, a při ukládání zkontroluje syntax — když najde chybu, nepustí tě dál a nabídne opravu. Tím tě chrání před zamčením.


Failure modes — časté průšvihy začátečníků

  • Zaseknutí ve vi. Otevřel jsi soubor, něco se děje, nevíš, jak ven. Řešení: Esc, pak :q! a Enter — odejdeš bez uložení. Tohle je nejčastější panika a zároveň nejjednodušší fix.
  • Editace systémového souboru bez sudo. Soubor jde otevřít a upravit, ale nejde uložit („Permission denied" / read-only). Otevři ho znovu se sudo.
  • Ruční editace /etc/sudoers. Překlep = ztráta sudo a možná zamčený systém. Vždy visudo — ověří syntax před uložením.
  • Zavření nano bez uložení. Zmáčkl jsi Ctrl+X, na dotaz Save modified buffer? odpověděl N — a změny jsou pryč. Čti dotazy dole na obrazovce, než odpovíš.
  • Editace „za běhu". Změníš config služby (třeba sshd_config), ale samotná úprava souboru nic nezmění — služba si config načte, až ji přenačteš/restartuješ. Řeší se to systemctl reload/restart (podrobně v kapitole o systemd a službách).

🛠️ Cvičení

  1. Založ a ulož v nano. Otevři nový soubor ~/pokus.txt v nano, napiš pár řádků, ulož ho a zavři. Pak ho otevři znovu a ověř, že text tam je. Kterými klávesami jsi uložil a kterými odešel?
  2. Přežij vi. Otevři stejný soubor ve vi ~/pokus.txt. Přepni se do insert režimu, přidej řádek, vrať se do normal režimu a ulož a ukonči. Které klávesy jsi použil v jakém pořadí?
  3. Uteč z vi bez uložení. Otevři soubor ve vi, něco v něm naklikej/napiš tak, abys ho „rozbil", a pak z něj odejdi tak, aby se žádná změna neuložila. Ověř, že původní obsah zůstal netknutý.
  4. Systémový soubor a práva. Zkus jako běžný uživatel otevřít a upravit /etc/hosts bez sudo a pokus se uložit. Co se stane? Pak to zopakuj se sudo a popiš rozdíl.
  5. Bezpečný sudoers. Zjisti, proč se /etc/sudoers needituje přímo, a jakým příkazem se má editovat místo toho. Co ten příkaz udělá navíc oproti obyčejnému nano?
Náčrt řešení — rozbal, až si cvičení zkusíš sám
  1. nano ulož a zavřinano ~/pokus.txt, napíšeš text (píše se rovnou), Ctrl+OEnter (potvrdí jméno) uloží, Ctrl+X zavře. Rychlejší varianta: rovnou Ctrl+X, na dotaz odpovíš Y a Enter. Pozor: ^ v nápovědě dole znamená Ctrl, ne nějakou zvláštní klávesu.
  2. vi ulož a ukonči — po otevření jsi v normal režimu; zmáčkni i (insert, dole -- INSERT --), napiš řádek, Esc zpět do normal, pak :wq + Enter (uloží a ukončí). Pozor: :w funguje jen v normal režimu — kdybys ho psal v insert, jen se napíše do textu.
  3. Útěk z viEsc (pro jistotu do normal režimu), pak :q! + Enter. Vykřičník znamená „zahoď změny a odejdi". Původní soubor zůstane nezměněný. Pozor: :q samotné vi odmítne provést, dokud máš neuložené změny — proto ten !.
  4. Systémový soubor — bez sudo (nano /etc/hosts) soubor většinou otevřeš, ale při ukládání dostaneš „Permission denied" / soubor je read-only — nemáš právo zápisu, patří rootovi. Se sudo (sudo nano /etc/hosts) běžíš s právy roota, uložení projde. Pozor: úprava bez práv se ti může „ztratit" — proto systémové věci rovnou přes sudo.
  5. sudoers přes visudo/etc/sudoers řídí, kdo smí sudo; překlep v něm může zablokovat sudo pro všechny a zamkneš se ze systému. Edituj ho příkazem sudo visudo, který při ukládání zkontroluje syntax a při chybě tě nepustí dál (nabídne opravu). Pozor: nikdy nano /etc/sudoers napřímo — visudo je pojistka, ne formalita.

🧠 Otázky & odpovědi

Proč musím umět editovat soubory přímo v terminálu?

Protože v Linuxu je konfigurace textová (disky, síť, SSH, služby, .bashrc, sudoers) a na serveru, kam se připojíš přes SSH, nemáš žádnou grafiku — jen textovou konzoli. Žádný Poznámkový blok tam nespustíš. Terminálový editor je tedy jediný způsob, jak na dálku upravit nastavení. Naučíš se nano (pohodlný start) a vi (survival, protože je úplně všude).

Jak se dostanu ze zaseknutého vi, když nevím co dělám?

Zmáčkni Esc — tím se dostaneš do normal režimu (i kdyby ses omylem psal text). Pak napiš :q! a stiskni Enter. Vykřičník znamená „ukonči a zahoď všechny změny", takže původní soubor zůstane netknutý. Tohle je nejdůležitější věc, kterou o vi vůbec můžeš vědět: vždycky se dostaneš ven bez škody. Kdybys chtěl změny naopak uložit, je to :wq.

Co znamenají ty stříšky jako ^O v nano dole na obrazovce?

Stříška ^ znamená klávesu Ctrl. Takže ^O = Ctrl+O (uložit), ^X = Ctrl+X (konec), ^W = Ctrl+W (hledat). Nano ti tuhle nápovědu drží pořád na spodních dvou řádcích, takže si zkratky nemusíš pamatovat — stačí kouknout dolů. Uložení proběhne tak, že po Ctrl+O nano ukáže jméno souboru a ty ho potvrdíš Enterem.

Proč se /etc/sudoers nesmí editovat obyčejným editorem?

Protože /etc/sudoers řídí, kdo smí sudo. Když ho upravíš ručně a uděláš i drobný překlep, systém ho odmítne načíst a přijdeš o sudo — přitom právě sudo bys potřeboval na opravu, takže se efektivně zamkneš. Proto se edituje přes sudo visudo, který soubor při ukládání zkontroluje na syntax a při chybě tě nepustí dál. Je to pojistka přesně proti tomuhle sebezamčení.

Změnil jsem config služby, ale nic se nezměnilo. Proč?

Protože samotná úprava textového souboru službu neovlivní — běžící služba má config načtený v paměti z doby, kdy se spustila. Aby změnu vzala, musíš ji přenačíst nebo restartovat (systemctl reload nebo systemctl restart <služba>). Editor jen změní soubor na disku; „aktivaci" změny řeší až systemd. Podrobně v kapitole o systemd a službách.