Cvičení: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14.
- Předstartovní kontrola
- Proč bychom vůbec měli chtít používat příkazovou řádku
- Názvy souborů a cesty
- Spusťte vaše terminály, prosím
- Průchod systémem souborů
- Nástroje s textovým uživatelským rozhraním
- Úpravy souborů
- Příprava souborů pro cvičení
- Zástupné znaky v shellu (wildcards)
- Zkoumáme obsah souborů
- Dokumentace (manual pages)
- Zádrhele (soubory s mezerou v názvu)
- Jak pracovat efektivněji
- Spouštění Pythoních skriptů z příkazové řádky
- Úlohy k ověření vašich znalostí
- Učební výstupy
Na tomto cvičení se začneme učit jak ovládat náš Linuxový stroj tím nejefektivnějším způsobem – skrze rozhraní příkazové řádky.
Cvičení uvedeme motivací, proč bychom se vůbec měli zajímat o rozhraní příkazového řádku. Poté si krátce shrneme, co je to jméno souboru a cesta k souboru, a budeme pokračovat stručným vysvětlením hierarchie souborového systému Linux.
Po tomto teoretickém úvodu se vrhneme na používání terminálu. Naučíte se procházet adresáře a zobrazovat obsah souborů v terminálu.
Předstartovní kontrola
Prosím, ujistěte se, že následující máte hotové.
Budeme to potřebovat po zbytek semestru.
- Můžete se přihlásit do MFF GitLabu.
- Máte přístup k projektu Forum.
- Zapnuli jste si upozornění z projektu Forum.
- Máte přístup k projektu student-LOGIN a můžete v něm měnit soubory.
- Můžete se přihlásit na školní počítače v učebnách.
- Vybrali jste si hezké Linuxové GUI (DE/WM). Jak na školním počítači, tak na své instalaci doma.
Proč bychom vůbec měli chtít používat příkazovou řádku
Především, je to přesné a jednoznačné. Vyhneme se riziku, že by uživatel
používal třeba jiný styl nebo panel nástrojů, když budeme popisovat
provedení nějaké činnosti. Použití přesného příkazu nenechává snižuje
prostor pro omyly.
Navíc, je to poměrně rychlé. Jakmile začneme porovnávat rychlosti klikání na ikony a rychlost klávesnice, klávesnice bude vždy vítěz (pokud předpokládáme, že v obou případech víme, co chceme vlastně udělat).
S tím částečně také souvisí to, že napsané příkazy je snadné uložit a kdykoliv znovu použít.
Takové textové soubory se nazývají skripty v Linuxovém světě. Může to být jen seznam příkazů, které se mají spustit, ale můžeme do nich přidat i cykly a podmínky pro složitější akce. Budeme se tomu věnovat po několik cvičení.
Z pohledu počítače je to také velmi efektivní. Obzvlášť, pokud budeme mluvit o vzdáleném přístupu na nestabilním připojení. Rozdíl mezi sdílením obrazovky – byť jen 800x600 – a posíláním seznamu stisknutých kláves je obrovský. Správa Linuxových serverů po ubohém 2G připojení je možná; správa serveru, který umí jen GUI s takovým připojením vůbec nepřipadá v úvahu.
Nevýhodou pak je, že vyzkoušení si takového systému je trochu složitější. V graficky orientovaném programu můžete zkoušet klikat na různé ikony a zjistit, co se děje. Na příkazovém řádku se musíte naučit spousty příkazů, abyste mohli systém používat efektivně. Nicméně, není nutné si pamatovat každý jednotlivý příkaz, protože existuje zabudovaná dokumentace, která je vždy dostupná (ještě se k tomu vrátíme).
Ve skutečnosti je to jako s libovolným programovacím jazykem: musíte znát jeho API než v něm začnete psát programy. Jen v Linuxu netvoří API funkce jak je znáte z programovacích jazyků, ale celé programy.
Faktem zůstává, že shell, který budeme používat, vznikl cca před 50 lety. Ale pořád se používá. Možná to znamená, že nedokážeme přijít s ničím novým. Ale spíše to znamená, že ty výhody skutečně dávají smysl.
Počátky mohou být složité, ale dlouhodobě se to vážně vyplatí.
Z praktického hlediska je používání příkazové řádky poměrně podobné práci v interaktivní režimu Pythonu.
Píšete příkazy, můžete je upravovat a když jste spokojeni, vykonáte příkaz stiskem klávesy <Enter>
.
Od této chvíle bude naše interakce se systémem vypadat většinou takto.
Nemějte však strach. Linux často vyměňuje líbivost za efektivitu. Zkuste k němu přistupovat spíše jako k novému programovacímu jazyku: nejdříve se musíte naučit (a také si zapamatovat!) něco málo o konstrukcích a standardní knihovně, než začnete psát velké programy. V Linuxu je to stejné. A rozhodně to stojí za to, pokud to s počítači myslíte doopravdy vážně. Myslíme to vážně. Doopravdy.
Názvy souborů a cesty
Tohle všechno asi pravděpodobně znáte. Klidně tuto část prolétněte. Důležité části jsme už pro vás zvýraznili.
Základní pojmy
V našem textu budeme používat název soubor k označení obyčejného názvu bez adresáře. Názvy souborů je to, co uvidíte ve vašem správci souborů nebo v e-mailu s přílohami.
Všimněte si, že na Linuxu spíše používáme slovo adresář než složka. Složkou obvykle myslíme něco virtuálního, co nemá přímou reprezentaci na souborovém systému (tj. nenajdeme to jako takové na disku). Takže můžeme mluvit o složkách v e-mailovém klientu nebo v cloudovém úložišti.
Cesta pak znamená název souboru s uvedením nějakého adresáře (před názvem souboru).
/
(tj. žádné
escapování není potřeba, když ji zapisujete v Pythonu), takže cestou může
být třeba adresar/soubor.txt
.
Linux nezná koncept diskových jednotek – všechny najdeme pod
tzv. kořenovým adresářem (často se setkáte jen s anglickým označeném
root), což je jediné dopředné lomítko /
.
os.path.join()
a podobné, protože zajišťují použití správného oddělovače bez ohledu na
aktuální platformu (místo ručního řetězení jmeno_adresare + '/' + nazev_souboru
jako text). Pozor, že se jedná o něco jiného než operator z
pathlib
.
foo.txt
, FOO.txt
a Foo.txt
v jediném adresáři.
(To že něco jde neznamená, že je to dobrý nápad. Naopak. Prostě to
nedělejte.)
Relativní a absolutní cesta, pracovní adresář
Cesta může být relativní nebo absolutní. Když je cesta absolutní, odkazuje se na konkrétní soubor na daném počítači. Bez ohledu na to, ve kterém adresáři se právě nacházíte. Relativní cestu je potřeba vždy zkombinovat s (absolutní) cestou k adresáři, abychom získali absolutní cestu.
Na Linuxu, každá absolutní cesta musí začínat lomítkem. Pokud cesta lomítkem nezačíná, je brána jako relativní vůči pracovnímu (současnému) adresáři. Intuitivně, pracovní adresář je ten adresář, který máte právě otevřený ve správci souborů.
Speciální adresáře
Cesta může obsahovat odkazy na rodičovské (nadřazené) adresáře pomocí
..
(dvě tečky).
Například, relativní cesta ../documents/letter.odt
odkazuje na soubor
umístěný v adresáři documents
, který je o adresáře výše vůči současnému.
Předpokládejme, že jsme v adresáři /home/intro/movies
(což je mimochodem
absolutní cesta). Pak absolutní cesta k souboru letter.odt
je
/home/intro/movies/../documents/letter.odt
což může být výhodnoceno
(zkráceno) jako /home/intro/documents/letter.odt
.
Kromě speciálního adresáře ..
existuje ještě adresář .
(jedna tečka),
který odkazuje na ten současný.
Takže ./bin/run_tests.sh
odkazuje na soubor run_tests.sh
v adresáři
bin
, který je podadresářem toho současného (tj. je to úplně stejné jako
bin/run_tests.sh
).
Později uvidíme, proč je adresář .
tak zajímavý a nutný.
Přípony souborů
Linux nevyžaduje ani neomezuje použití přípon u souborů (např. .zip
nebo
.pdf
).
Dokonce, soubory mohou existovat bez nich nebo jich mít několik.
Typickým příkladem více-připonového souboru je soubor.tar.gz
, což je
tzv. tape archive tar
(podle magnetických pásek), který byl komprimován
gzipem.
Skryté soubory
Soubory začínající na .
jsou ve výchozím zobrazení skryté.
Vše na Linuxu je soubor
Naše povídání jsme začali o souborech a cestách. Důvodem je, že téměř cokoliv v Linuxovém systému je soubor.
Už víte, že existují obyčejné soubory (např. zmiňovaný letter.odt
je
soubor textového procesoru) a adresáře (pro seskupování dalších souborů).
Uvědomte si, že slovo soubor může v Linuxu označovat jak běžné soubory, tak i adresáře, tj. adresář je soubor.
Kromě toho také existují speciální soubory, které reprezentují fyzická zařízení nebo soubory, které fungují jako kukátka do stavu systému. Na ty se podíváme později.
Zkontrolujte si, zda této části rozumíte
Vyberte všechna pravdivá tvrzení.
You need to have enabled JavaScript for the quiz to work.Spusťte vaše terminály, prosím
Dost bylo teorie. Najděte prosím program Terminal a spusťte jej. V závislosti na vašem prostředí to bude buď Terminál, Konzole, nebo možná dokonce Shell (i když technicky vzato je Shell program spuštěný uvnitř emulátoru terminálu).
Doporučujeme věnovat nějaký čas konfiguraci vzhledu terminálu, například zvolit pěkný font a rozumnou velikost. Budete s ním trávit poměrně hodně času, tak si ho zpříjemněte. Níže uvádíme několik možností, co byste mohli také získat :-).
Zobrazí se něco jako [intro@localhost ~]
a poté blikající kurzor. Tomu se
říká prompt, a pokud ho vidíte, znamená to, že můžete zadávat příkazy.
Výzvu zobrazuje shell, který je interpretem zadávaných příkazů. Shell je vlastně plnohodnotný programovací jazyk, ale na tomto cvičení ho budeme používat pouze ke spouštění velmi jednoduchých příkazů.
Zadejte uptime
a spusťte tento příkaz stisknutím <Enter>
.
Dokud nestisknete <Enter>
, můžete příkaz snadno upravovat.
Fungují také klávesové zkratky, například <Ctrl>-<Šipka>
pro přeskakování slov.
Jak jsme již zmínili, zážitek je do jisté míry podobný interaktivnímu použití Pythonu (editace atd.).
Rychlé kopírování/vkládání (a ukončování programů)
Kdykoli vyberete text v terminálu myší, automaticky se zkopíruje. Tento text pak můžete vložit pouhým kliknutím na prostřední tlačítko myši (nebo kolečko).
<Ctrl>-C
a <Ctrl>-V
v shellu nefungují
protože <Ctrl>-C
se používá k násilnému ukončení programu.
Obvykle však funguje <Ctrl>-<Shift>-C
.
Všimněte si, že se ve skutečnosti jedná o dvě různé schránky - speciální vázaná na
na prostřední tlačítko myši a druhá na <Ctrl>-C
(<Ctrl>-<Shift>-C
) a <Ctrl>-V
.
V grafických aplikacích fungují <Ctrl>-C
a <Ctrl>-V
jako obvykle.
Ukončení terminálu
Chcete-li terminál zavřít, můžete jednoduše zavřít celé okno (např. pomocí tlačítka
myší), ale můžete také napsat exit
nebo stisknout <Ctrl>-D
na prázdném řádku.
Protože se chceme zbavit nutnosti používat myš (v určitém smyslu), měli byste
dát přednost <Ctrl>-D
;-).
Ladění chyb
Při spouštění programů v terminálu nikdy nevkládejte jejich výstup jako snímek obrazovky. Místo toho vyberte text (včetně spuštěného příkazu) a vložte jej tam, kam potřebujete.
Nezapomeňte, že označený text je automaticky zkopírován: prosté klepnutí prostředním tlačítkem text vloží kam potřebujete.
Od této chvíle sem také přestaneme vkládat snímky obrazovky z terminálu a budeme vkládat pouze výstup (i když byste měli vždy spustit příkaz sami, abyste viděli, co dělá a skutečně si ho vyzkoušeli sami).
Pro vložení do našeho
Fórum
text uzavřete do ohraničeného bloku ```
, abyste zachovali
písmo s pevnou šířkou.
```
ls nonexistent
ls: cannot access 'nonexistent': No such file or directory
```
Průchod systémem souborů
Začneme jednoduchým průchodem souborového systému. Pomohou vám dva základní příkazy.
Výpis souborů pomocí ls
Příkaz ls
zobrazí seznam souborů v aktuálním adresáři.
Spuštěním ls
získáte něco takového:
Desktop Downloads Hudba Veřejná videa
Dokumenty gif.md Obrázky Šablony
Nyní spusťte ls -l
. Tedy ls
a -l
oddělené mezerou. Zde voláme program
ls
a dáváme mu další argument, -l
. Protože argument začíná pomlčkou,
jedná se vlastně o takzvanou volbu (nebo přepínač, anglicky pak option
či switch), která dává pokyn ls
, aby změnil své chování. Nyní ls
vypíše něco takového:
celkem 4
drwxr-xr-x. 1 intro intro 0 10. února 13:43 Desktop
drwxr-xr-x. 1 intro intro 0 10. února 13:43 Dokumenty
drwxr-xr-x. 1 intro intro 0 10. února 13:43 Stažené soubory
-rw-r--r--. 1 intro intro 1022 9. ledna 18:13 gif.md
drwxr-xr-x. 1 intro intro 0 10. února 13:43 Hudba
drwxr-xr-x. 1 intro intro 0 10. února 13:43 Obrázky
drwxr-xr-x. 1 intro intro 0 10. února 13:43 Public
drwxr-xr-x. 1 intro intro 0 10. února 13:43 Šablony
drwxr-xr-x. 1 intro intro 0 10. února 13:43 Videa
Klávesa -l
zapíná tzv. dlouhý režim (long), ve kterém se o každém
souboru vypíše více podrobností.
K významu některých sloupců se vrátíme později, rozluštění sloupců pro čas poslední změny a velikost souboru je jednoduché a pro tuto chvíli dostačující.
Změna pracovního adresáře pomocí cd
Příkaz cd
nám umožňuje změnit pracovní (aktuální) adresář (z anglického
change directory). Příkaz přijímá jeden argument – adresář, do kterého
se chceme přepnout.
Příkaz cd Documents
by nás tedy přesunul do adresáře Documents
.
Zde proveďte ls
.
Jaký je výstup?
Odpověď.
Jak byste se přesunuli zpátky do nadřazeného adresáře Odpověď.
Co provede následující příkaz?
cd .
Odpověď.
Všimněte si, že prompt se změnil vždy, když jste přešli do jiného adresáře.
Ve výchozím nastavení zobrazuje pouze poslední složku cesty. Chceme-li
zobrazit celou (absolutní) cestu, musíme spustit příkaz pwd
(z
anglického print working directory).
Zobrazí se něco jako
/home/intro/Videos
Doplňování tabulátorem
Psaní dlouhých názvů souborů může být těžkopádné a náchylné na překlepy. Shell nabízí doplňování tabulátorem (tab completion), které vám s tím pomůže.
Pro tento příklad předpokládáme, že jste právě spustili terminál a ls
vypíše Desktop Documents Downloads Templates
atd.
Pokud chceme přejít do adresáře Templates
, začneme psát cd Te
a stiskneme <Tab>
.
Pokud neexistuje jiný název souboru (adresáře) začínající na Te
,
název v příkazu se doplní za vás a měli byste vidět celé cd Templates/
.
Odesláním příkazu pomocí <Enter>
se přepnete do
adresáře, jak byste očekávali. Vyzkoušejte to a vraťte se do tohoto adresáře znovu.
Nyní se přepneme do adresáře Documents
.
Pro tento příklad zadejte cd Do
a stiskněte <Tab>
.
Existují dva adresáře s touto předponou: Documents
a Downloads
.
Protože shell nemůže vědět, který z nich chcete, neudělá nic.
Při druhém stisknutí <Tab>
se však zobrazí možné shody
a po zadání c
(dalšího písmene) může <Tab>
dokončit doplňování.
Jako cvičení: co se stane, když napíšete cd
a stisknete <Tab>
?
Odpověď.
Zadejte pouze c
(jako cd
) a stiskněte <Tab>
. Co se stane?
Odpověď.
Domovský adresář
Pravděpodobně jste si všimli, že když spustíte terminál, název adresáře,
který se vám zobrazí, je jen ~
, přestože by se mělo zobrazit intro
(nebo
vaše uživatelské jméno na daném počítači), protože to je poslední složka z
pwd
.
Cesta /home/intro
je však váš domovský adresář a má speciální zkratku
vlnovkou (tilda) ~
.
Pokud navíc spustíte příkaz cd
bez dalších argumentů, změní se pracovní
adresář zpět na váš domovský.
Stručné shrnutí
Co si pamatujete? Vyberte všechna tvrzení, která jsou pravdivá.
You need to have enabled JavaScript for the quiz to work.Nástroje s textovým uživatelským rozhraním
I když je použití nástrojů čistě pro příkazový řádek, jako jsou uptime
,
ls
nebo cd
, skvělé a pro skripty velmi užitečné, existují i případy, kdy
je interaktivnější přístup rychlejší.
V tomto smyslu Linux obvykle nabízí tři vrstvy, ze kterých si můžete vybrat. Od plně grafické, nazývané grafické uživatelské rozhraní (GUI), přes nástroj s textovým uživatelským rozhraním (TUI) až po čisté rozhraní příkazového řádku (CLI). Každé z nich může být užitečné v závislosti na okolnostech.
Textovým uživatelským rozhraním myslíme to, co nabízí Midnight commander nebo Ranger.
Midnight commander
Spusťte mc
a procházejte soubory stejně jako v případě ls
a cd
.
Čísla v dolní části odkazují na funkční klávesy pro typické operace se
soubory (např. F5
zkopíruje soubor).
Všimněte si, že v typickém nastavení nabízí MC dva panely se seznamem souborů,
mezi nimi přepínáte pomocí <Tab>
a ve výchozím nastavení je kopírování
do adresáře v druhém panelu.
MC je poměrně mocný nástroj, protože dokáže prozkoumávat archivy, zobrazovat soubory na vzdáleném počítači atd.
Stručně se zmíníme o nejdůležitějších věcech, které s ním můžete dělat. Vyzkoušejte je :-)
<Insert>
umožňuje vybrat více souborů ke smazání/kopírování.<F3>
zobrazí obsah souboru.<F4>
nabízí jednoduchý textový editor se zvýrazňováním syntaxe.<+>
umožňuje zadat masku názvu souboru pro výběr více souborů najednou (více o tom budeme hovořit později v části Wildcards).<Ctrl>-o
skryje panely a dočasně vás přepne zpět do shellu. Ideální pro spouštění příkazů bez opuštění MC.
Program MC můžete ukončit pomocí <F10>
nebo prostřednictvím nabídky (aktivuje se pomocí <F9>
).
Všimněte si, že některé terminály zachycují <F10>
pro aktivaci jejich menu
(toto chování však lze změnit v Nastavení (Preferences) terminálové aplikace).
Ranger
Ranger je správce souborů pro konzoli inspirovaný Vimem. Přináší některé známé klávesové zkratky z Vimu společně s kartami (panely).
Procházení
j
- Posun dolůk
- Posun nahoruh
- Přesun do nadřazeného adresářel
- Otevření souboru nebo přesun do adresářegg
- Přejít na začátek seznamuG
- Přejít na konec seznamugh
-cd ~
gm
-cd /media
gr
-cd /
q
- Ukončí Ranger
Práce se soubory
zh
- Zobrazení skrytých souborůcw
- Přejmenování aktuálního souboru<mezerník>
- Vybere aktuální souboryy
- Vyjmutí (kopírování) souboru (nebo vybraných souborů)dd
- Označení souboru (nebo vybraných souborů) pro operaci vystřižení souborupp
- Vložit vyjmutý nebo vystřižený soubor(y)dD
- Odstranění souboru (nebo vybraných souborů)
Více informací naleznete na stránce Ranger: Terminálový správce souborů (v angličtině).
Úpravy souborů
Pravděpodobně jste si všimli, že podnabídka Vývoj obsahuje několik grafických textových editorů, které můžete použít k úpravě zdrojového kódu. Soubory je však možné upravovat také v editorech TUI.
Pokud se ptáte, proč se učit další editor (když vám již vyhovuje některý z grafických), zde je odpověď. Na některých počítačích nemusíte mít ke grafickému rozhraní vůbec přístup. Vzpomeňte si, že jsme dříve hovořili o vzdáleném přístupu: v takovém případě budete mít k dispozici pouze TUI (a často budete potřebovat upravovat soubory na vzdáleném počítači). Někteří uživatelé tedy vůbec nepoužívají editory s grafickým uživatelským rozhraním s odůvodněním, že je mnohem lepší naučit se (a řádně přizpůsobit) jeden editor, a to editor založený na TUI.
Na našem disku najdete Emacs, Joe, mcedit, nano a Vim.
Každý z nich má své výhody a záleží jen na vás, který si vyberete. Všimněte
si, že mcedit
je pravděpodobně nejblíže editoru, který můžete znát z
jiných systémů. joe
a nano
jsou sice minimalistické, ale dokonale se
hodí pro editaci skriptů, kterou budeme provádět nejčastěji. Jak emacs
,
tak vim
jsou nesmírně výkonné nástroje, které toho umí mnohem víc než jen
upravovat soubory. Vyžadují však určitou časovou investici, než se s nimi
pořádně naučíte.
Pokud jste v Linuxu nováčkem, doporučujeme vám používat mcedit
(buď přímo,
nebo při editaci souborů v Midnight commanderu) a k ostatním se vrátit
později, abyste se mohli definitivně rozhodnout, který textový editor si
vyberete.
Všechny tyto editory lze spustit z příkazového řádku a jako parametr jim
zadat název souboru, který chcete upravit (např. mcedit quiz.md
).
V mnoha případech (včetně některých hodnocených úloh v tomto kurzu) budete nuceni upravovat soubory na vzdáleném počítači, který nabízí pouze rozhraní CLI (TUI).
Naučte se brzy používat nějaký TUI editor, budeme ho potřebovat v následných cvičeních.
Některé z výše zmíněných editorů nabízejí i grafickou verzi a jsou multiplatformní, takže se nemáte na co vymlouvat, že nechcete vyzkoušet něco nového :-)
Příprava souborů pro cvičení
Pro následující příklady budete potřebovat stejné soubory jako máme my.
Stáhněte si prosím tento archiv
a rozbalte jeho obsah.
Pokud jej chcete stáhnout z příkazového řádku, můžete použít wget URL
,
jinak použijte libovolný prohlížeč.
Pomocí Midnight commanderu zkopírujte rozbalený obsah do svého domovského adresáře.
Nápověda.
Na disku byste měli vidět adresář nswi177-lab02
.
Zástupné znaky v shellu (wildcards)
Předpokládáme, že máte adresář nswi177-lab02
připravený podle popisu v
předchozí části.
Dosud jsme používali ls
k zobrazení všech souborů v adresáři. Pokud nás
zajímá pouze jejich podmnožina, můžeme je na příkazovém řádku vyjmenovat.
Přesuňte se do adresáře, kam jste rozbalili soubor nswi177-lab02.tar.gz
.
Měli byste vidět následující soubory:
a/ b/ c/ one.txt two.txt three.txt four.txt
Pokud chceme vypsat pouze podrobnosti o textových souborech, můžeme provést
ls -l one.txt two.txt three.txt four.txt
-rw-r--r-- 1 intro intro 0 3. března 13:38 four.txt
-rw-r--r-- 1 intro intro 0 3. března 13:38 one.txt
-rw-r--r-- 1 intro intro 0 3. března 13:38 tři.txt
-rw-r--r-- 1 intro intro 0 3. března 13:38 dva.txt
Pro více souborů by tohle nebylo příliš elegantní řešení, ale shell nabízí tzv. wildcards (občas též zástupné znaky) pro určení více souborů najednou. Stejný výstup lze tedy získat spuštěním příkazu
ls -l *.txt
Je nutné si uvědomit, že ls
(nebo jakýkoli jiný program) obdrží už
expandovaný seznam souborů - vyhledávání odpovídajících souborů provádí
shell, nikoli jednotlivé programy. V případě výše uvedeného příkladu tedy
zevnitř ls
není možné rozlišit, zda uživatel použil úplný seznam nebo
wildcard *.txt
. Experimentovat s tím budeme také v jednom z příštích
cvičení, kde si povíme o přístupu k těmto parametrům ve vašem oblíbeném
programovacím jazyce. Pro vývojáře to znamená, že se nemusí starat o
vlastní implementaci expanze wildcardů. Program by vždy obdržel seznam
existujících názvů souborů, nikoliv wildcard.
Mimochodem - je poslední věta zcela pravdivá?
Co se stane, když spustíme ls -l *.txxxt
?
Odpověď.
Jak byste vytiskli všechny soubory začínající písmenem t
?
Odpověď.
Pokud bychom chtěli vypsat pouze informace o souborech začínajících na o
nebo f
s příponou .txt
, použili bychom.
ls [of]*.txt
Pokud chceme vypsat soubory, které končí na některé z písmen od a
do f
,
můžeme použít následující příkaz
ls *[a-f].txt
Zkuste to v podadresáři a
.
Všimněte si, že při zadávání pomocí wildcardů jsou soubory řazeny abecedně.
Přepněte se zpět do domovského adresáře. Nápověda.
A nyní vypište všechny soubory/adresáře začínající na D
(připomeňme si, že
Linux rozlišuje malá a velká písmena). Možná budete překvapeni, protože
prosté ls D*
skutečně vypsalo obsah těchto adresářů. Je to ale naprosto
logické, protože ls Documents
má vypsat seznam souborů v tomto adresáři.
Pokud nechceme, aby ls
sestupoval do adresářů, můžeme přidat volbu -d
,
která tomu zabrání.
Co se stane, když zadáte neexistující soubor? A co když neexistují jen některé ze zadaných souborů?
Kromě *
(který odpovídá libovolné části názvu souboru) a [seznamu znaků]
(který odpovídá jednomu písmenu v názvu souboru) existuje také ?
, který
odpovídá libovolnému jednotlivému písmenu (znaku).
Proto x?.txt
bude odpovídat souborům, jejichž název je dlouhý 6 písmen
(znaků), začíná na x
a končí na .txt
(tj. dvoupísmenný název souboru
začínající na x
a typu prostý text).
Více o skrytých souborech
Připomeňme si, že názvy souborů začínající tečkou .
jsou skryté. Ty
nejsou ve výchozím nastavení v seznamu od programu ls
uvedeny. Pokud
chcete vidět i tyto soubory, musíte je buď explicitně vyjmenovat, nebo
použít volbu -a
.
Zkuste to v adresáři nswi177-lab02
.
Jaké skryté soubory jsou ve vašem domovském adresáři? Odpověď.
Opět: nejedná se o bezpečnostní opatření, pouze o způsob, jak udělat výpis trochu přehlednější.
Zkoumáme obsah souborů
Již jsme se zmínili o textových editorech a MC pro nahlížení do souborů při práci v terminálu. Nejsou to však jediné možnosti.
Textové soubory
Nejjednodušší způsob, jak vypsat obsah libovolného souboru, je zavolat
program cat
. Jeho argumenty jsou jména souborů, které se mají vypsat.
Název cat
nemá nic společného se savcem, ale odkazuje na střed slova
concatenate, protože jej lze skutečně použít i ke spojování souborů.
Přesuňte se do podadresáře b
. Spuštěním příkazu cat 000.txt
se na
obrazovce zobrazí obsah souboru 000.txt
.
Jak zobrazíte obsah všech souborů v tomto adresáři? Odpověď.
Binární soubory
Pokud chceme vypisovat binární soubory (například obrázky), je obvykle lepší vypisovat jejich bajty v hexadecimálním tvaru.
K tomu lze použít nástroj hexdump
.
Vždy jej použijte s přepínačem -C
pro vypsání hexdump a ASCII znaků vedle
sebe. Výpis souboru GIF vypadá takto:
hexdump -C c/sample.gif
00000000 47 49 46 38 39 61 0a 00 0a 00 91 00 00 ff ff ff |GIF89a..........|
00000010 ff 00 00 00 00 ff 00 00 00 21 f9 04 00 00 00 00 |.........!......|
00000020 00 2c 00 00 00 00 0a 00 0a 00 00 02 16 8c 2d 99 |.,............-.|
00000030 87 2a 1c dc 33 a0 02 75 ec 95 fa a8 de 60 8c 04 |.*..3..u.....`..|
00000040 91 4c 01 00 3b |.L..;|
00000045
Netisknutelné hodnoty (např. menší než 32) jsou nahrazeny tečkou.
Hádání typu souboru
Přestože přípona souboru není povinná, je lepší ji používat k jednoznačné identifikaci typů souborů.
Pokud si nejste jisti typem souboru, může ho za vás určit nástroj file
.
Zkuste ho spustit na ukázkovém souboru GIF.
file c/sample.gif
Dokumentace (manual pages)
Viděli jsme, že chování ls
lze upravit pomocí -a
, -d
a -l
.
hexdump
má -C
. Víte, že uptime
akceptuje -s
? A že cat
přijímá
-n
pro vypisování čísel řádků?
Je prakticky nemožné si to všechno zapamatovat. Naštěstí Linux obsahuje takzvané manuálové stránky (nebo jen manpages), které popisují dostupné možnosti (téměř) každého programu, který máte v systému.
Spuštěním příkazu man
cmd získáte přístup k příručce k programu cmd
(skutečný název příkazu nahraďte místo cmd). Pro posouvání použijte šipky
a q
pro ukončení příručky. Uvnitř stránky můžete vyhledávat pomocí
klávesy /
(lomítko).
Manuálové stránky jsou uspořádány do sekcí a číslo sekce můžete zadat jako
součást příkazu man
, např. man 3 printf
otevře stránku nápovědy pro
funkci printf()
v jazyce C, protože to je obsah sekce 3. Všimněte si, že
man printf
by zobrazil obsah nápovědy příkazu printf
ze sekce 1,
tj. příkaz shellu.
Otevřete man man
a zobrazte úplný seznam sekcí. Ve stručnosti, 1 je pro
příkazy shellu, 3 pro volání knihoven a 4 a 5 se používají pro konkrétní
soubory (např. man 5 proc
spustí manuálovou stránku pro celý adresář
/proc
).
Všimněte si, že manuálové stránky jsou k dispozici také on-line, takže můžete studovat své oblíbené příkazy i bez přístupu k počítači s Linuxem.
Obvyklé volby
Mnohé z parametrů jsou více či méně standardizované pro více programů a stojí za to si je zapamatovat.
Téměř všechny programy GNU, které budete mít na svém počítači, vypíší při
spuštění pomocí --help
malou nápovědu. Vyzkoušejte to pro ls
nebo cd
.
--version
lze použít k vypsání informací o verzi a autorských právech
spuštěného programu. Někdy funguje také -v
nebo -V
.
--verbose
nebo --debug
(někdy -v
nebo -d
) spustí program ve
upovídaném (verbose) režimu, kdy program vypisuje podrobněji, co dělá.
--dry-run
(někdy -n
) spustí program, aniž by provedl skutečné změny
(např. může vypsat, které soubory budou odstraněny, aniž by některý z nich
skutečně odstranil).
--interactive
(někdy -i
) obvykle způsobí, že program požádá o
interaktivní potvrzení destruktivních akcí.
--
lze použít k ukončení seznamu možností, pokud máte názvy souborů
začínající pomlčkou.
Pro klasický příklad se přesuňte do podadresáře d
adresáře nswi177-lab02
a vypište informace o souboru s názvem -a
.
Poté zkontrolujte výsledek a zkuste to znovu s použitím oddělovače --
.
Odpověď.
Při práci s neznámými soubory nepodceňujte použití --
. Může se jednat o
nevinný omyl, když se objeví soubor s názvem -f
, ale výsledky bez použití
--
v cmd WILDCARD
mohou být obrovské.
Vždy použijte cmd -- WILDCARD
, pokud zástupný znak začíná znakem *
nebo
pokud zástupný znak pochází potenciálně od uživatele (tj. také pokud
uživatel zadá seznam souborů na příkazovém řádku).
Slučování a řazení voleb a přepínačů
Příkaz ls -h -l *.txt
vypíše podrobné informace o všech textových
souborech v aktuálním adresáři a vypíše jejich velikost v lidsky čitelných
jednotkách (ano, bohužel ls
je výjimkou, kdy -h
nevypisuje nápovědu, ale
mění výstup -l
).
Občas se můžete setkat i s následujícími variantami výše uvedeného.
ls -l -h *.txt
ls -lh *.txt
ls -hl *.txt
ls *.txt -l -h
ls -l *.txt -h
Pokud nemáte nějaký podivně pojmenovaný soubor (např. -a.txt
), budou
všechny výše uvedené příkazy fungovat stejně.
Varianta -lh
je zkratka, kterou podporuje mnoho nástrojů pro jakousi
úsporu. Doporučujeme se jí vyhnout, protože čtení skriptů spíše komplikuje.
Variantu, kdy jsou volby smíchány s názvy souborů, tedy např. ls -l *.txt -h
, podporuje také většina nástrojů: budou schopny oddělit volby od názvů
souborů a brát -h
za přepínač místo názvu souboru a rozumně tak změnit
pořadí příkazového řádku.
Příkazy však obvykle očekávají, že jména souborů budou na konci: nejbezpečnější variantou je proto použití následujícího způsobu.
ls -l -h -- *.txt
Výše uvedená forma (tj. nejprve volby) bude fungovat pro většinu nástrojů (a
použití explicitního oddělovače --
je defenzivní přístup proti divným
názvům souborů).
Pozor, že záleží na programu a nikoliv na shellu jak bude pracovat s argumenty. Později si ukážeme programy, kde na pořadí přepínačů záleží a ovlivňuje to jak se program chová.
Zádrhele (soubory s mezerou v názvu)
Pokud vytvoříte soubor s názvem soubor s mezerami.txt
a poté spustíte
příkaz
ls soubor s mezerami.txt
obdržíte
ls: cannot access 'soubor': No such file or directory
ls: cannot access 's': No such file or directory
ls: cannot access 'mezerami.txt': No such file or directory
protože mezera (nebo tabulátor) se používá jako oddělovač mezi parametry.
Proto ls
ve skutečnosti hledal tři soubory.
Pokud byste použili doplňování tabulátorem, příkaz by byl doplněn escape znaky.
ls soubor\ s\ mezerami.txt
Všimněte si, že výstup by obvykle vypadal takto:
'soubor s mezerami.txt'
protože použití apostrofů (nebo uvozovek) je další způsob, jak určit, že mezera je doslovný znak, a ne oddělovač.
Ještě se o tom zmíníme, až budeme mluvit o skriptech, ale je vhodné si to zapamatovat: mezery v názvech souborů mohou způsobit nečekaná překvapení a je lepší se takovému pojmenování vyhnout.
A ano, je možné vytvořit soubor s názvem ' '
(tj. mezera) a zobrazit jeho
obsah pomocí cat " "
, ale není to příliš rozumný nápad. Je to podobné
jako s vytvářením souborů začínajících pomlčkou – je to možné, existují
způsoby, jak tyto problémy obejít (např. pomocí oddělovače --
), ale je
prostě jednodušší se těmto problémům vyhnout.
Jak pracovat efektivněji
Nebojte se spouštět více terminálů vedle sebe. Jeden používejte k navigaci
pomocí ls
a cd
, druhý používejte pro Midnight commander, který bude
zrcadlit vaše akce.
Otevřete další terminál s manuálovou stránku pro příkaz, který právě používáte.
Většina desktopových prostředí umožňuje vytvořit více pracovních prostorů (workspace) nebo desktopů. Každá pracovní plocha pak má svůj vlastní seznam otevřených oken, okna otevřená na jiných pracovních plochách nejsou viditelná. To může výrazně snížit nepořádek a – s vhodnými klávesovými zkratkami – urychlit práci.
Spouštění Pythoních skriptů z příkazové řádky
O tomhle si budeme více povídat na dalším cvičení, prozatím můžete použít následující příkaz abyste spustili váš Pythoní program:
python3 cesta_k_vasemu_python_skriptu.py
Úlohy k ověření vašich znalostí
Očekáváme, že následující úlohy vyřešíte ještě před příchodem na cvičení, takže se budeme moci o vašich řešeních na cvičení pobavit.
Učební výstupy
Učební výstupy podávají zhuštěný souhrn základních konceptů a dovedností, které byste měli umět vysvětlit a/nebo použít po každém cvičení. Také obsahují absolutní minimum, které je potřebné pro pochopení navazujících cvičení (a dalších předmětů).
Znalosti konceptů
Znalost konceptů znamená, že rozumíte významu a kontextu daného tématu a jste schopni témata zasadit do většího rámce. Takže, jste schopni …
-
vysvětlit, kdy je rozhraní příkazového řádku lepší (či horší) volbou než grafická aplikace
-
vysvětlit rozdíl mezi (emulátorem) terminálu a shellem
-
vysvětlit, co je to cesta k souboru
-
vysvětlit rozdíl mezi relativní a absolutní cestou
-
vysvětlit, jak fungují tzv. shell wildcards (názvy souborů)
-
vysvětlit, co jsou argumenty příkazové řádky (options, switches)
-
vysvětlit užitečnost oddělovače
--
(při použití wildcardů u zvláštně pojmenovaných souborů)
Praktické dovednosti
Praktické dovednosti se obvykle týkají použití daných programů pro vyřešení různých úloh. Takže, dokážete …
-
spustit a ukončit emulátor terminálu
-
nastavit si oblíbený emulátor terminálu
-
procházet souborový systém pomocí nástrojů textového uživatelského rozhraní (např.
mc
neboranger
) -
procházet souborový systém pomocí příkazů
ls
acd
-
použit základní přepínače příkazu
ls
, jako jsou-l
,-h
nebo-a
-
použít zástupné znaky (wildcards) pro omezení příkazů na určité podmnožiny souborů
-
spustit Pythoní skript z příkazové řádky
-
zobrazit obsah textových soubor pomocí utility
cat
-
zobrazit obsah binárních souborů jako hexadecimální výpis pomocí programu
hexdump
-
identifikovat typ souboru pomocí nástroje
file
-
využívat vestavěné manuálové stránky (základní operace)
-
používat schránky dostupné v grafických prostředích Linuxu
-
používat doplňování tabelátorem pro rychlejší psaní názvů souborů a cest
-
používat soubory se neobvyklými názvy