Lekce 7 - Linuxový terminál (Bash) - Práce se soubory
V minulé lekci, Linuxový terminál (Bash) - Prozkoumávání adresářů, jsme si nastavili více pracovních ploch a uvedli se do linuxového shellu. Dále se naučili prozkoumávat adresáře pomocí příkazů pwd, ls, cd a dalších.
Dnešní lekcí budeme v Bashi pokračovat a věnovat se budeme práci se soubory.
Prohlížení souborů
Často se nám bude stávat, že budeme chtít zobrazit nebo změnit obsah
nějakého textového souboru. Mnoho souborů v Linuxu je totiž lidsky
čitelných a používají se k uložení konfigurace. K zobrazení textových
souborů můžeme použít několik programů. Z grafického rozhraní jsme si v
kurzu představili Gedit. Dnes navážeme textovým rozhraním
a ukážeme si 5 základních způsobů, kterými lze číst soubor. Textový
editor spustíme tím, že napíšeme do konzole jeho název, například
vi
nebo nano
. Tím otevřeme prázdný editor.
Chceme-li otevřít již existující soubor, přidáme za editor ještě název
souboru, například vi hello_world
. Tímto způsobem otevřeme
pouze soubor ve stejném adresáři, ve kterém se právě nacházíme. Pokud se
soubor nachází v jiném adresáři, musíme uvést celou relativní či
absolutní cestu vi /home/user/hello_world
.
Editor vi
a vim
Vi je základní textový editor z počátku UNIXu a najdeme ho téměř v
každé distribuci. Výchozím editorem v Ubuntu je ale novější a
propracovanější Vim. Tyto editory jsou velmi
mocné a k vysvětlení úplného ovládání by nestačil ani jeden
celý kurz. Proto si projdeme pouze základní příkazy, abychom uměli soubor
otevřít, upravit, uložit a podobně. Abychom mohli do editoru napsat či
vložit text, musíme nejprve stisknout klávesu i nebo
Insert, čímž se přepneme do režimu vkládání. Po dopsání
textu musíme naopak stisknout klávesu Esc a vrátit se do
příkazového režimu. Další ovládání je vždy dostupné přes dvojtečku
a příkaz, například :w
zapíše změny do souboru. Pro
začátek si vystačíme s následujícími příkazy:
:w nazev_souboru
- Vytvoří nový soubor:q
- Ukončí program:q!
- Ukončí program bez uložení změn
Podrobněji se editoru Vim věnujeme v samostatné lekci Základy editoru Vim.
Pager less
a cat
Dalším často využívaným příkazem je less
. Less není
editor, ale pager. Nemůžeme s ním upravovat nebo přepisovat
text v souboru, ale pouze si ho přečíst. Příkazem
less nazev_souboru
vypíšeme obsah tohoto souboru na celou
stránku:
V textu se pohybujeme pomocí šipek ↑ ↓ nebo PageUp PageDown. Nápovědu k dalším příkazům zobrazíme klávesou h a program ukončíme stisknutím q.
Příkaz cat
funguje velmi podobně jako less, ale s tím
rozdílem, že nevypíše obsah souboru do okna ale přímo do
konzole.
Editor nano
Pro editaci nebo rozumnější zobrazování můžeme použít editor
nano
. Ten lze spustit buď bez parametru nebo opět s parametrem
souboru, který má otevřít. Na rozdíl od less
zvýrazňuje syntaxi a umožní nám soubory vytvářet
i editovat. Otevřeme tedy ten samý soubor v editoru
nano
:
Ovládání nano
je popsáno v jeho spodní liště. Stačí
stisknout CTRL + jeden ze znaků, například X pro
ukončení.
touch
Dalším způsobem, jak vytvořit soubor, je příkaz touch
.
Chceme-li vytvořit více souborů najednou, stačí pokud napíšeme jejich
názvy za sebe: touch soubor1 soubor2 soubor3
.
mkdir
Vytvoří nový adresář. Stejně jako u touch
můžeme
vytvořit více adresářů v jednom příkazu:
file
Již víme, že Linux si neláme hlavu s příponou souborů a typ souboru poznává podle jeho obsahu, nikoli názvu. Libovolný soubor si můžeme nechat analyzovat příkazem file. Zkusme si to na několika souborech:
Manipulace se soubory a adresáři
Zástupné znaky
V názvech souborů a složek můžeme používat zástupné znaky. Ty jsou následující:
\*
- Označuje libovolný počet libovolných znaků?
- Označuje 1 libovolný znak[znaky]
- Označuje jeden znak z vybraných možných znaků. Znaky můžeme určit i pomocí následujících tříd, které píšeme včetně závorek znovu do hranatých závorek:[:alnum:]
- Alfanumerické znaky[:alpha:]
- Abecední znaky[:digit:]
- Čísla[:upper:]
- Velká písmena[:lower:]
- Malá písmena
[!znaky]
- To samé jako předchozí případ, pouze s negací. Označuje tedy jeden znak, který není mezi zmíněnými znaky.
Můžeme si zmínit několik ukázek:
a*.txt
- Všechny soubory s příponou.txt
, které začínají naa
.soubor.???
- Soubor s libovolnou třípísmennou příponou.log[ABC][[:digit:]][[:digit:]]*
- Označí například souborlogA21.log
. Název souboru musí začínat nalog
, dále obsahovatA
,B
neboC
, 2 čísla a potom může obsahovat cokoli nebo může jeho název již skončit.[![:digit:]]*
- Soubor, který nezačíná na číslo.
cp
Příkaz cp
(jako copy) zkopíruje zadané soubory nebo
adresáře. Zkusíme si zkopírovat nějaký soubor a poté vypsat obsah
adresáře, abychom viděli, že tam opravdu je:
Jako cestu můžete samozřejmě zadat i relativní nebo se zástupnými znaky.
Chceme-li zkopírovat soubor do určitého adresáře, napíšeme tento adresář na konec příkazu:
Přepínače
I u příkazu cp
můžeme zadat jako první parametr
přepínače:
-i
- Pokud kopírujeme nějaký soubor (napříkladcp soubor.xml kopie.xml
) a soubor s daným názvem již existuje, bude přepsán, aniž bychom tomu mohli zabránit nebo se to dokonce dozvěděli! Tomuto chování lze zabránit přepínačem-i
(jako interactive), který si při existenci souboru od uživatele vyžádá potvrzení.-r
- Pokud zadáme přepínač-r
(rekurze platící pro tento adresář a vše, co se v něm nachází), můžeme kopírovat i adresáře. Například takto zkopírujeme jeden adresář do druhého s tím, že se cílový adresář vytvoří, pokud neexistuje. Jelikož je řeč o rekurzi, platí to samé pro podadresáře a tak dále.
mv
Jako cp
kopíroval, mv
přesouvá (název má od
move). Pokud soubor přesuneme na stejné místo, ale pod jiným názvem, dojde
k jeho přejmenování. Podobně jako u cp
můžeme zadat parametr
-i
, který nechá uživatele potvrdit přepsání existujícího
souboru. Příkaz si vyzkoušejme:
Kromě adresáře můžeme zadat i cestu k souboru s jeho názvem, soubor se přesune a přejmenuje:
rm
Příkaz rm
vymaže soubory a adresáře (jako remove).
Dávejte si velký pozor, protože v Linuxu neexistuje nic, jako
undelete ve Windows. Jakmile soubor odstraníte, je pryč. Říká se,
že Linux je pro tvrdé
Zvláštní pozor si dejte při mazání souborů a adresářů
pomocí zástupných znaků. Raději si dotaz nejprve sestavte a ozkoušejte u
příkazu ls
.
Můžeme použít opět přepínač -i
pro vyžádání
potvrzení od uživatele a také -r
pokud chceme, aby se mazaly
adresáře včetně jejich obsahu. Zkusme si to:
Systémové oddíly
Další důležitou dovedností při správě systému je získání
informací o pevném disku. Soubory pro správu disků v Linuxu nalezneme v
adresáři /dev
. Jsou zde soubory sda
,
sda1
, sda2
či sda3
, kde sda
je označení pevného disku a přidružená číslice označuje jednotlivé
oddíly na disku. Pokud máme v zařízení druhý disk, bude označen jako
sdb
, třetí disk by byl označen jako sdc
a tak dále
🙂
df
Příkaz df
(jako disk free) slouží ke zjištění dostupné
kapacity na disku. Standardně je však velikost vypsána v bajtech, a proto k
příkazu přidáme přepínač -h
(jako human) pro uživatelsky
přívětivější výpis:
df -h
Výpis příkazu vypadá následovně:
Názvy jednotlivých sloupců odpovídají hodnotám:
Filesystem | Souborový systém |
Size | Celková velikost disku |
Used | Využité místo na disku |
Avail | Dostupné místo na disku |
Use% | Využité místo na disku v procentech |
Mounted on | Adresář, ve kterém je souborový systém zakořeněn |
Kromě oddílů sda
si můžeme povšimnout i
systémů pro dočasné soubory tmpfs
.
Získání informací o příkazech
Příkazy, které píšeme do Bashe, mohou být 4 druhů:
- Program - Příkaz jednoduše spustí stejně pojmenovaný
program z adresáře
/bin
. Můžete se na ně podívat a najít si napříkladls
nebomkdir
. - Součást shellu (shell builtin) - Příkazy, které
poskytuje přímo shell. Jsou to například
cd
,echo
nebohelp
. - Funkce - Umožňuje zapouzdřit několik příkazů do funkce, kterou můžeme jednoduše vyvolat jako by to byl příkaz.
- Alias - Alias nám umožňuje zavést nový název pro existující příkazy.
type
Jakého typu je daný příkaz zjistíme pomocí příkazu type
.
Podívejme se na několik základních příkazů:
Vidíme, že cd
je součást shellu, cp
je program
v adresáři /bin
a ls
je alias na ls
,
kterému dává navíc parametr pro změnu barvy. Díky tomu příkaz
ls
ve výchozím volání zobrazuje:
- Adresáře modře
- Spustitelné nebo datové soubory zeleně
- Symbolické odkazy tyrkysově
- Zařízení žlutě
- Grafické soubory růžově
- Archivy červeně
Symbolické odkazy
Když je řeč o symbolických odkazech, vysvětleme si jak fungují. V Linuxu je možné vytvořit soubor, který funguje jako odkaz na jiný soubor. Můžeme tak docílit několika názvů jednoho souboru. Ve Windows se tomuto principu vzdáleně blíží zástupce, který se ovšem nechová jako soubor a všechny aplikace s ním neumí pracovat.
Symbolické odkazy poznáme pomocí znaku šipky a nalezneme
je například v adresáři /bin
, kde jsou programy, které v
shellu používáme. Pokud si obsah adresáře /bin
vypíšeme
dlouhým formátem, uvidíme zde například symbolický odkaz
rnano
, který odkazuje nano
, které spustí v
restricted módu:
which
Na některých systémech může být více programů pro ten samý příkaz.
Lokaci programu, který příkaz používá, vypíšeme pomocí
which
:
Nápověda
K shell příkazům lze samozřejmě získat i nápovědu. Bohužel způsob, jakým si o ni řekneme, závisí na typu příkazu.
man
Většina programů vystavuje manuál, který si můžeme prohlédnout
pomocí příkazu man
:
Mnoho programů/příkazů podporuje jako parametr --help
, po
jehož zadání se vypíše nápověda. Zpracování v manuálu je však
přehlednější:
help
Příkaz help
je shellu, který vypíše informace o nějaké
jeho součásti (o shell builtin). Vypišme si informace o příkazu
cd
:
V příští lekci, Linuxový terminál (Bash) - Oprávnění a instalace balíčků, si vysvětlíme uživatelská oprávnění, naučíme se vystupovat jako super uživatel a instalovat balíčky.