Editace souborů

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

Co se naučíš: Zvládneš upravit konfigurák na cizím serveru a hlavně se dostat z vi ven.

12 min čtení + cvičeníNavazuje na:📁 Základní příkazy

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 Y → Enter. 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ři, nano ~/pokus.txt, napíšeš text (píše se rovnou), Ctrl+O → Enter (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 vi, Esc (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.