Bash pro začátečníky
![]() | |
Kategorie Bash pro začátečníky nenalezena
| |
začátečníci | |
Příslušnost: všeobecná |
Informace o kurzuEditovat
- Předpoklady: dobré je mít základní znalost angličtiny a zájem zkoumat věci
- Jak s tímto kurzem pracovat: Tento kurz je postaven tak, že ho sami vytváříte a zároveň se učíte od studentů, kteří jím prošli před Vámi. Jak často a kdy se budete studiu Bashe věnovat je na Vás. Nejlépe se Bash učí, pokud se na Linuxu rozhodnete dělat vše v příkazové řádce - můžete tak pronikat do jeho tajů přímo při řešení reálných problémů z praxe. Pokud by Vás nic nenapadlo, můžete využít níže řešené problémy a zkusit si je. V případně vašich problémů a otázek, je zapište níže a až najdete na Internetu (nebo chatGPT) řešení, tak ho i zapište. Je také možné že u řešených příkladů, bude potřeba je upřesnit či připojit grafiku. // V kurzu se střídají lehké a těžké sekce, ale Vaše vnímání může být opačné. Jelikož pracujete s jazykem, který může vytvářet nevratné změny na Vašem PC doporučujeme obsah pravidelně zálohovat a pracovat s rozvahou (t.j. nezkopírovat hned každý příkaz, který někde najdete. V momentě, kdy se Vám podaří vytvořit pár skriptů, je čas postoupit do vyšší úrovně. // Pokud byste chtěli měnit strukturu kurzu, prodiskutujte to napřed na diskusní stránce.
- Vyšší úroveň: Bash pro středně pokročilé
- Co potřebujete: Ke studiu Bashe potřebujete počítač, Internet a nejlépe linuxový terminál (ve Windows 10+ lze nainstalovat Windows Subsystém for Linux)
- Kde hledat pomoc: chatGPT 3,5+, YouTube, Internet
- Zaměření kurzu: kurz je koncipován zejména pro operační systémy Debian/Ubuntu, nicméně dá se použít i pro jiné operační systémy na bázy Linux
Grafické a strukturní konvenceEditovat
- kurziva – pod nadpisy sekcí obsahuje pokyny jak s danou sekcí pracovat. Kurziva v textu je prvním stupněm zvýraznění, kurziva v příkazech vyjadřuje proměnou, kterou musíte sami navolit (např.
apt-cache search název balíčku
znamená, že místo textu název balíčku, napíšete konkrétní název balíčku). - tučně – je zvýrazněn text k vyjádření silného důrazu
počítačový kód
– je název položky zvýraznění Vizuálního editoru pro zápisy příkazů Bashe a výpisy terminálu- nejnovější poznámky – jdou vždy odspoda v dané sekci
Spuštění a případná instalace termináluEditovat
Operační systémy na bázy LinuxuEditovat
Zde by bashovský terminál měl být již předinstalovaný. Obvykle se spouští stiskem kláves CTRL+ALT+T. V poli vzhledávání též můžete zadat slovo terminal. Jediné co se může stát, že máte jiný než bashovský terminál. V tom případě zadejte do terminálu echo $SHELL
a zmáčněte ENTER. Měl by so objevit výpis toho, jaký terminál máte. Pokud se zobrazí něco jiného než /bin/bash
, máte pravdpodobně jiný shell a Bash budete muset navirtualizovat.
Výuková částEditovat
Jak něco udělat?Editovat
Terminál si otevřeme stiskem CTRL + ALT + T (nebo jinak, pokud jsme si změnili klávesovou zkratku).
Pokud nenastartuje systém, lze terminál otevřit i přes GRUB. Do GRUBu se vztoupí při startu BIOSu opakovaným tisknutím klávesy SHIFT (někdy to trvá než se člověk strefí).
Jednotlivé úkoly si můžete ozkoušet níže. Dobrou praxí je, se podívat, co jednotlivé příkazy dělají. Terminál je mocný nástroj a pokud byste jen příklazy opisovali slepě z webu, můžete si zadělat problémy. Pokud níže nenajdete řešení svěho problému, tak ho zapište a zkuste najít na webu řešení. Případně si můžete najít řešení i k úkolům, které níže to řešení nemají.
Č. | Co | Jak | Poznámky |
---|---|---|---|
J.1 | Jak vyprázdnit koš? | cd
rm -rf .local/share/Trash |
Pro odmazání adresáře Trash, je potřeba být ve výchozí složce, dostanu se tam zadáním příkazu cd |
2 | Jak zobrazit nápovědu k příkazu? | man (příkaz), help (příkaz), (příkaz) --help | Cesty jsou různé, protože nexistuje povinnost vytvářet manuály k příkazům (například příkaz echo má manuál, příkaz cd nikoliv). man je nástroj, který zobrazuje po stránkách existující soubory manuálů příkazů (například man echo zobrazí manuál k příkazu echo ). help zobrazí seznam vestavěných příkazů (help ) a případě k nim i nápovědu (např. help cd ). Samotný help nemá manuál, takže nápověda k help se volá help help . Některé příkazy mají sami funkci nápovědy volatelnou, přes --help , nebo -h . Zde je nutno ale podotknout, že -h může mít i jiné funkce. Problém pak nastává, pokud tyto funkce nejsou popsány v nápovědě k příkazu (např. v nápovědě příkazu cd není uvedeno, že --help dá nápovědu). -- v bash znamená, že nemají být interpretovány další možnosti, protože nechceme aby nápověda zmizela a probíhaly další operace.
|
3 | Jak zobrazit skryté adresáře? | ls -a | Možno též dir -a |
5 | Jak zjistit kolik mám volného místa? | df -Th
df -h -t (systém souborů) |
|
6 | Jak najdu nápovědu pro cd ?
|
help cd
|
Postupujeme dle J.2. Pokud nenajdeme manuál po zadání příkazu man , zkoušíme další možnost, tedy příkaz help .
|
7 | Jak nainstalovat KdenLive? | sudo snap find kdenlive
(heslo)
|
|
8 | Jak spustit program? | echo $PATH
|
PATH voláme proto, aby jsme nepoškodili systém pro případ, kdy by program měl stejný název jako nějaký příkaz v terminálu. Pokud program v PATH není, je tedy z tohoto důvodu i rychlosti výhodného ho do PATH přidat (viz otázka 25). |
9 | Jak najít program? | whereis (název)
dpkg --list |
Pokud whereis nefunguje, můžeme zkusit dpkg --list a následně interní funkcí v terminálu hledat podle předpokládaného názvu. |
10 | Jak nainstalovat Wine? | lscpu
sudo apt install wine64 |
|
11 | Jak zjistit, kolik ja na disku volného místa? | df -h | Jde i df, ale df -h (human) je čitelnější. |
12 | Jak zobrazím strom adresářů? | Nebo si najít defaultní strukturu na webu. | |
13 | Jak zobrazím obsah adresáře, který se vejde na jednu stránku? | ||
14 | Jak nainstalovat R? | Na webu R je nápověda. | |
15 | Jak zjistím jakou mám verzi? | cat /etc/os-release | Vypíše informace k verzi. |
16 | Jak nainstalovat Gephi? | sudo snap find gephi
(heslo) sudo snap install gephi |
|
17 | Jak odinstalovat Gephi? | sudo snap remove gephi
sudo apt-get autoremove |
Druhý krok odinstaluje nepoužívané dependencies a je dobré ho udělat. |
18 | Jak najít package (balíček)? |
|
Je nutno dodat, že se nerozlišuje hledání na webu, nebo hledání v počítači, protože informace o balíčcích pro příkaz apt jsou umístěny v počítači, ale samotné balíčky jsou umístěny na webu. Proto je dobré před samotným hledáním balíčku tyto informace updatovat přes apt get update . Jak najít balíček typu snap (J20), ppa či jiný je vysvětleno jinde.
|
19 | Jan nainstalovat OpenRefine? | - | Jelikož nemá snap, zjistím po zadání "sudo snap find refine", musím použít jinou cestu instalace. Zdá se, že se OpenRefine neinstaluje. Pouze se stáhne, rozbalí a spustí přes terminál příkazem ./refine ve složce OR. Otevře se v záložce prohlížeče. |
20 | Jak najít snap? | snap find něco
|
něco nahradíme názvem hledaného softwaru |
21 | Jak najít nainstalované balíčky (snapy)? | sudo snap list | |
21 | Jak se přemísťovat ve stromu adresářů? | ls
cd (název adresáře)/cd .. |
|
22 | Jak přidat tiskárnu do Opery? | Stačí pouze přidat v systému. Pokud je ale Opera snapem, je potřeba udělit jejímu balíčku práva. | |
23 | Jak vytvořit iso flašku? | ||
24 | Jak zjistím jakou mám verzi Javy? | java -version | |
25 | Jak přidat program do PATH? |
|
|
26 | Jak updatovat Javu? |
|
|
27 | Jak odinstalovat gscan2pdf? |
|
|
28 | Jak nainstalovat program, který není ve snapu? | ||
29 | Jak nainstalovat Edge? | Ověřené řešení viz: https://www.omgubuntu.co.uk/2021/01/how-to-install-edge-on-ubuntu-linux | |
30 | Jak nainstalovat ET na Ubuntu 22? | ||
31 | Jak restartovat počítač? | ||
32 | Jak nainstalovat OBS Studio? | ||
33 | Jan nainstalovat gscan2pdf? |
|
|
34 | Jak nainstalovat aplikaci eObcanka? | ||
35 | Jak vyberu konkrétní screen, ke kterému se chci připojit? | ||
36 | Jak po napsání něčeho, rychle vložit již někde napsaný řetězec? | ||
37 | Jak vypsat soubory určitého typu na celém PC a zastavit vždy po pokrytí celé stránky? | ||
38 | Jak najít název souboru jinak volatelný přes man bash ?
|
whereis bash
|
Ve výpisu je to třeti řetězec. Například při zadání whereis bash , dostaneme výpis
|
39 | Jak zjistit informace o souboru? | stat (název souboru)
|
Záleží na tom co chceme zjistit. Například stat poskytné různé statistické informace o souboru, ale už neumí dobře určit formát souboru. Na dotaz "stat -c --format=%F (soubor)" třeba odpoví, že se jedná o běžný soubor. Pokud potřebujeme zjistit a jaký soubor se jedná, je tedy lepší použít příkaz file .
|
40 | Jak rozbalit archiv gzip do určitého místa? | cp (původní umístění) (nové umístění)
|
Jelikož funkce gunzip neumožňuje rozbalit archiv do určitého místa, je potřeba tuto operaci provést v krocích a nejprve daný archiv do určitého místa překopírovat příkazem cp .
|
41 | Jak upgradovat balíčky? |
|
|
42 | Jak zobrazit význam barev u příkazu ls? | ||
43 | Jak vypsat pouze adresáře? | ls -d */
|
-d jako directory má ve skutečnosti funkci zamezit zobrazení obsahu adresářů. Cesta za tím, pak zajišťuje výpis adresářů. Je to proto, že synopse příkazu ls je ls [OPTION]... [FILE]... |
44 | Jak upgradovat Python? | ||
45 | Jak zařídit, aby v terminálu fungovali zkratky CTRL+C a CTRL+V ?
|
V Terminálu: Edit: Keyboard Shortcuts...: poklikat na Copy a stisknout CTRL+C a to samé udělat s CTLR+V
|
|
46 | Jak zjistím, jestli mám nainstalovaný Python? | Začnu psát python a někde uprostřed kliknu na TAB. Tím dojde k doplnění případného řetězce.
|
Pokud dojde k doplnění řetězce, například pyt na python3 , vím, že mám minimálně Python verze 3x.
|
47 | Jak zjistím, jaké verze Pythonu mám nainstalované? | ls /usr/bin/python*
|
|
48 | Jaký je rozdíl mezi knihovnami a binárními soubory? | ||
49 | Jak nainstalovat nejnovější verzi Python? | ||
50 | Jak nainstalovat IDLE? |
|
|
51 | Jak zjistit, jestli něco není příkaz? | text + TAB
|
Začnu psát text a stisknu TAB, když mi to něco doplní, tak ten příkaz už existuje. Například p +TAB nic, py +TAB nic, pyt +TAB hodí python3
|
52 | Jak vytvořit alias? | ||
53 | Jak updatovat informace o ppa balíčcích? | ||
54 | Jak převést pdf do OCR? | ||
55 | Jak vytvořit shortcut pro příkaz? | ||
56 | Jak nainstalovat Avidemux? |
|
|
57 | Jak smazat adresář? |
|
|
58 | Jak nainstalovat software, který je pouze pro Windows? | ||
59 | Jak odinstalovat Avidemux sestavený ze zdrojového kódu? |
|
Pokud byl softare nainstalován zkombilováním binárních souborů, měl by ten, kdo nabízí nápovědu k instalaci uvádět i nápovědu k odinstalaci. V opačném případě je možné zkusit ručně odmazat některé soubory s Avidemuxem související, ale doporučuje se předtím zazálohovat systém. |
60 | Jak vytvořit spustitelný příkaz pro program? |
|
|
61 | Jak spustit MATE Calculator? | mate-calc
|
|
62 | Jak přenést do popředí MATE Calculator po stisku klávesnice kalkulačka? | ||
63 | Jak zobrazím práva k souboru? | ls -l název souboru
|
|
64 | Jak zobrazím informace o balíčku apt? | sudo apt-cache show název balíčku
|
|
65 | Jak otevřít Visual Code Studio z terminálu? | code
|
|
66 | Jak vytvořit někde soubor? | ||
67 | Jak updatovat RStudio? |
|
|
68 | Jak zadat zkratky CTRL+C a CTRL+V ve všech Bash shellech (např. i RStudio)? | ||
69 | Jak restartovat program? | ||
70 | Jak downgradovat program? |
Terminál, manuál a BashEditovat
Vysvětlení manuálové syntaxeEditovat
V tomto oddíle procvičujeme pochopení manuálové syntaxe. V příkazové řádce zadejete man váš příkaz
a připište si sem syntaxi. Pak se můžete pokusit s ohledem na man man
(manuál manuálů) dovodit, jak se příkaz používá. Když si nebudete jisti, zkuste jiný zápis syntaxe, např. z man7.org, nebo si někde najděte ukázku. Cílem tohoto cvičení je k tomu přistoupit co „nejstrožeji“, tak abysme se naučili nespoléhat na jiné zdroje informací, než lokální manuály a případně objevily a mohli popsat zákonitosti či nedostatky syntaxí manuálů.
Příkaz case (dořešit)Editovat
Syntaxe: case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac
Příklad:
x=3
case "$x" in
"1") echo "x se rovná 1" ;;
"2") echo "x se rovná 2" ;;
"3"|"4") echo "x se rovná 3 nebo 4" ;;
*) echo "x je větší než 4" ;;
esac
x se rovná 3 nebo 4
Úvahy:
case
...je začátek příkazu[1]esac
...konec skryptu, vypadá jakocase
obráceně!WORD
.....je slovo, které se srovnává vůči jednotlivým vzorůmPATTERN
. V tomto případě jeWORD $x
, tedy řetězec. Uvozovky zde mají zřejmě jen metainformatický charakter.[PATTERN [| PATTERN]...)
....asi odpovídá řádku 5 a konkrétně"3"|"4")
, tzn. že 3 je jeden vzor (PATTERN
) a 4 druhý. Složené závorky ([]
) a výpustka (...
) se v kódu neobjevují, tzn. že se musí jednat o nějaké metainformace. K příkazucase
není manuálová stránka a nápovědu nelze ani vyvolat přescase --help
. Funguje pouzehelp case
, kde je ale nepatrné množství informací. Vman man
se pro[-abc]
uvádí, že žádný, nebo všechny arguments (argumenty) v závorkách jsou volitelné. Dále se zde praví, že[expression] ...
znamená, že expression (výraz) se dá opakovat. Otázkou tedy je, jestliPATTERN
je argument, nebo výraz. Jediné co je z toho zcela jasné, je to, že složené závorky se v kódu skutečně nepíší a pouze nesou nějakou informaci. Řekněme, že řetězec[| PATTERN]...
lze vyjmout a tak nám zbyde jenPATTERN
. To by odpovídalo příkazům na řádcích 3, 4 a 6.[PATTERN) COMMANDS ;;]
vezměmě hypotézu, že toto je expression a odpovídá třeba řádku 3 kde závorka se nepíše,PATTERN
je1
, závorka)
se zapíše,COMMANDS
odpovídá příkazuecho
, respetiveecho "x se rovná 1"
a výraz se ukončí středníky;;
- Pak se ale můžeme zeptat, proč
in
není ve složených závorkách aPATTERN
ano? Logická odpověď je, žein
není výraz. Co ale je potomin
? Podle manuálu je in rezervované slovo za určitých případů (jako, že není v uvozovkách či stojí na třetí pozci jako u příkazucase).
[2] - |.... podle
help case
je svislík oddělovačem jednotlivých vzorů. Trochu ale nechápu, proč je až uvnitř závorky, přišlo by mi logičtější, kdyby byl zápis následující[PATTERN |[PATTERN]...) COMMANDS ;;]
. Znamená to tedy, že svislík neoděluje výrazy, ale vzory? Ovšem pokud by se nejednalo o[PATTERN]
, ale o[PATTERN]...
, pak by možná dávalo smysl, proč není svyslík před závorkou ale za ní ([|PATTERN]...
)? A hrají nějakou roli mezery, které jsou kolem značek[|
? Protože v uvedeném příkladu kolem vzorů ani svislíku mezery nejsou a když je zkusím dát do skryptu, tak to nemá vliv na výsledek. ...
(tři tečky, nebo-li výpustka (původní fonty shellů asi výpistku neměli)) je ve dvou případech v man man uvedeno jako řešení, které uvádí předchozí argument, nebo výraz.- Jinak shell přečte celý skrypt interpretuje ho asi postupně, protože když zadám
x=0
, tak výsledkem je stejněecho
z řádku 6. - ....mezera se zdá, že v uvedeném příkladu by se mohla úplně zrušit, protože každý výraz je nějakým způsobem ohraničen, ale je – kdyby nebyl. Například proč musí bý čísla uvedena v uvozovkách, ale je to asi proto, že zde nedochází k interpretaci čísel, ale řetězců, tedy jsou to textové řetězce?
Srování různých zápisů syntaxeEditovat
- „
case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac“
- terminál - „
case EXPRESSION in CASE1) COMMAND-LIST;; CASE2) COMMAND-LIST;; ... CASEN) COMMAND-LIST;; esac
“[3] - „
case word in [ [(] pattern [| pattern]...) command-list ;;]... esac
“[4]
Příkaz cp (vyřešeno)Editovat
Syntaxe man:
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
Příklad:
Úvahy:
cp
je zkratka příkazu, tedy copy- Podle
man man
kapitálky nic neoznačují, respetiveman man
odkazuje na to, že názvy sekcí manuálu se píší kapitálkami. Jde tedy asi o osobní invenci pisatélů manuálu příkazu copy, nebo může jít o jejich způsob zvýraznění. - V
man man
jsou pouze dva příklady s hranatou závorkou. Jednou jsou ale tučně, podruhé podtrženě. Těžko pak soudit co je co! - Dle manuálu manuálů označuje výpustka to, že daná věc před závorkou se dá opakovat. V případě
[OPTION]...
by se tedy asi dalo několikrát zopakovat, to co je před třemi tečkami. Otázka ovšem je, jak to zapsat, když neznáme pravidla pro 3. V případěSOURCE...
aDIRECTORY SOURCE...
(je otázka pro jakou část syntaxe se ve třetím případě opakovatelnost vztahuje, jestli proSOURCE
,DIRICTORY SOURCE
, nebo dokonce pro-t DIRECTORY SOURCE
) opakovatelnost zdroje či zdrojového adresáře. Dalším problémem manuálucp
je, že neobsahuje sekci Options, hned by bylo jasné, co[OPTION]
může znamenat. Man man
píše, že něco jako[-T]
znamená, že jsou argumenty volitelné. Žel bohu se opětman man
aman cp
liší v tom, že vman man
jsou argumenty na rozdíl odman cp
tučně. Z prostého vzhledu lez ale dovodit, že v případěman cp
se jedná skutečně o argumenty. Otázka, která tady vyvstává, je ale co to znamená[OPTION]... [-T]
, protože dle formátu vman man
by OPTIONS měly být také argumenty. Kdyby tomu bylo stejně i v případěman cp
, pak je tento název syntaxe zbytečně složitý. Může to tedy znamenat, že Option není argument. Tady už začíná vyvstávat moc otazníků a hypotéz, zkusme zápis z man7.org- Z vysvětlení, které poskytl chatGPT ale plyne, že výrazy
[OPTION]...
a[-T]
označují trochu něco jiného. Zatímco[OPTION]...
označuje možnosti, které se dají opakovat,[-T]
ty, které se opakovat nedají. Takto vysvětleno to dává smysl, proč jsou de facto zapsány dvě totožné věci. Další možnosti, které se nedají opakovat jsou podle chatGPT-r
,-u
a-n
. Ostatní jsou tedy opakovatelné (vizman cp
). Vman man
je sekce s těmito flagy skutečně označena jakoOptions
, tože vman cp
tomu tak není může být chyba či nedbalost. Důvod pro použití-T
v příkazu je pak zcela jasný – zdůrazňuje to, že tuto možnost nelze opakovat (nicméně jistě by se to dalo zapsat i jinak, například[option]... [option]
, případně[-a]... [-T]
(jenom připomínám, že kurziva zde značí řetězec, který má být nahrazen argumentem a tučný text řetězec, který se musí zapsat tak jak je). Nicméně, když na ten druhý příkaz koukám, tak si nejsem jistý jestli je přesný. Oba jsou v závorce, to znamená, že mohou a nemusí být použity. Když použity budou, pak si nejsem jistý, jestli fakt, že jsou tučným písmem, je tam nevnucuje explicitně.)
- Z vysvětlení, které poskytl chatGPT ale plyne, že výrazy
- Podle dovysvětlení první syntaxe AI by se pak dalo říct, že u druhé syntaxe
cp [OPTION]... SOURCE... DIRECTORY
, to znamená, že mohu za příkazcp
vložit nějakou možnost, respetive možností může být víc (nepřipouští to tedy možnosti, které nejde opakovat?), následuje jeden nebo více zdrojů (napříkladbaf1.txt
,baf2.txt
) a následně název adresáře, kam se to má kopírovat. - A konečně třetí příklad syntaxe
cp [OPTION]... -t DIRECTORY SOURCE...
by pak znamenal, že za příkazcp
mohu vložit možnost nebo možnosti, musím uvést možnost-t
a následně mi to není jasné. Jen vím, že adresář je jeden a zdrojů může být vícero.- Tak po diskusi s AI z toho plyne, že argument
-t
umožní zadat napřed cílový adresář a vše ostatní jsou kopírované soubory či adresáře. ChatGPT dále upozorňuje, že tato možnost, nemusí být u všech verzí příkazucp
a pokud tomu tak není, tak se holt musí použít standardní postup ve formátu příkaz, argumenty, kopírovaný soubor či aresář a cílové místo.
- Tak po diskusi s AI z toho plyne, že argument
Syntaxe man7.org:
cp [OPTION]... [-T] SOURCE DEST
Úvahy:
- Bohužel zde, je syntaxe velmi podobná manuálu! Nicméně
cp
tučně by mělo znamenat, že se musí zapsat, tak jak je. To je ostatně logické. - V
man man
se píše, že se má kurziva nahradit patřičným argumentem. Tady je kurzivou skoro vše, což není na škodu, protože vše za příkazem jsou de facto argumenty. - Připusťme tedy, že
man man
říká, že to co je v závorce je volitelné. Znamenalo by to tedy, že jediným nevolitelným argumentem je v tomto případěSOURCE DEST
, což asi znamená zdrojové umístění. Takový příkaz by pak mohl vypadat třebacp /home/juan/avidemux2
, ale je otázka co by takový příkaz udělal? Když si něco takového vyzkouším, tak micp
hlásí chybu:missing destination file operand after '/home/juan/test'
. Znamená to tedy, že chybí cílové umístění. Zdá se tedy, že příkazcp /home/juan/test
je chápán jako okopíruj/home/juan/test
někam a ptá se kam. Nefunguje to ani, když je aktuálním adresářemtest
a když zadám vytvořenýtest2.
Z tohoto rozboru tedy plyne, že tento zápis syntaxe, není asi správný.- ChatGPT poskytl následující příkaz c
p file.txt directory/ # Copies 'file.txt' into 'directory/file.txt'
. To znamená, že jsem synopsy pochopil špatně aSOURCE DEST
jsou dva výrazy, ne jeden. Napřed jde zdrojový sobour (adresář), pak jde ten kam se to má uložit.
- ChatGPT poskytl následující příkaz c
- A skutečně při kopírování sobourů (ne pří kopírování adresářů) to funguje. Například
cp /home/juan/test/baf.txt /home/juan/test2/
překopíruje souborbaf.txt
do adresářetest2
.
Shrnutí:
Syntax tedy znamená, že po zápisu názvu příkazu copy, tedy cp
se mohou vložit atributy z čehož některé jsou opakovatelné a jiné ne a následné se vkládají soubory a adresáře, či cesty k nim a cílové umístění. Některé verze příkazu cp
, pak umožňují prohodit zdroj a umístění díky vložení atributu -t
(cp [OPTION]... -t DIRECTORY SOURCE...
). Dále se dá říct, že manuál příkazu cp
se neřídí syntaxí uvedenou v manuálu manuálů.
Snap find (nedořešeno)Editovat
Syntaxe man: snap [OPTIONS] find [find-OPTIONS]
Úvahy:
snap
je název příkazu[OPTIONS]
-man man
nezná něco co je kapitálkama, vman man
jsou options název sekce, ve které jsou možnosti či argumentyfind
- je vman snap
označen jako Option command,man man
žádný Option command nezná, ale mohl by to být příkaz, který jde užívat s jiným příkazem. A skutečně existuje příkazfind
, který má i svůj manuál a synopsy (find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point...] [expression]
).[find-OPTIONS]
- opět jako v případě bodu 2man man
nezná něco s kapitálkama, stejně jako Options jsou pro něj atributy. Jinakman snap
nemá sekci Options, pouze Option Commands. Man find má sekci Options a jsou tam atributy.Man snap
nijak nerozvádí co by to měly být ty Options.
Shrnutí:
- Z výše uvedeného tedy můžeme s jistotou říci, že lze spojit dva příkazy (v tomto případy
snap
afind
). - Nemůžeme s jistotou říct, co jsou
OPTIONS
a jak se chovaj, můžem pouze předkládat hypotézy:- H: Pro
snap
jsouOPTIONS
možnosti v sekci Option Commands - H: Pro
find
jsouOPTIONS
možnosti v sekci Options v manuálufind
(proto je to označeno jakofind-OPTIONS
) - H: Závorka se v příkladu nezapíše.
- H:
OPTIONS
se nahradí jedním, nebo vícero jinými příkazy - H: Stejně tak
find-OPTIONS
se nahradí jedním nebo víceropříkazy
- H: Pro
- Trochu matoucí je ale zápis typu
[OPTIONS] find
, když víme, žefind
by teoreticky mohl být součástí výrazuOPTIONS
. Ale na druhou stranu k přihlédnutí k tomu, že se tento zápis synopse nachází v sekci Option Commonds:find můžeme říct, že to smysl dává a prostě to značí, že předfind
může být jeden a více příkazů a žefind
sám může mít jeden a více atributů. - Co z toho ale není jasné, jestli tam vždy musí být nějaké
OPTIONS
, nebo někdy ne
Struktura manuálu a BasheEditovat
Manuál k příkazům voláme příkazem man něco
, dokonce i příkaz man
má svůj manuál volatelný přes man man
. Ne všechny příkazy ale manuál mají, někdy musíte zkustit příkaz --help
. Případně se dají manuálové stránky najít na webu, kde jsou i barevně podbarvené.
Č. | Otázka | Odpověď | Poznámky |
---|---|---|---|
1.P | Co to znamená man ?
|
Manual | |
2 | Jak rozumět sekci synopse? | ||
3 | Jaké jsou způsoby pro jasné zvýraznění synopse? | Například nainstalovat aplikaci most. | |
4 | K čemu je příkaz intro? | Obsahuje návod pro práci v příkazové řádce. | |
5 | Proč řádka nevykresluje tučné písmo? | Asi není zapnuté. | Zapne se: Edit-Profile Preferences-General-Allow bold text. |
6 | Proč řádka nevykresluje kurzivu? | Může za to sázecí jazyk roff, který se stále používá a kurzivu neumí, takže kurziva se vykresluje jako podtržené písmo.[5] | |
7 | Jak zjistím jaký pager používá příkaz man ?
|
Poznámky z manuáluEditovat
Přečtěte si manuál k Bash a níže zanehte své postřehy, otázka a myšlenky.
- chápu to dobře, že shell je operační systém?
- pokud soubory fungují jako příkazy, jak se dá spustit třeba /bin?
- token je sekvence jednoho a více znaků. Tokenem může být slovo, nebo operátor.
- metacharacter (metaznak) je znak, který odděluje slova pokud není označen uvozovkami (mezera, tabulátor, nová řádka, ‘|’, ‘&’, ‘;’, ‘(’, ‘)’, ‘<’, nebo ‘>’.
- vysvětlení slova operátor je skoro jak vysvětlení v kruhu!
- bash obsahuje stejne build in příkazy jako Bourne Shell (sh)
Gramatika BasheEditovat
Cílem této sekce je společně vytvořit gramatiku Bashe, to vysvětlit jednotlivé terminy jako (arguments, expressions) a popsat funkci metainformací a dále logiku skládání jednotlivých znaků při skryptování.
SlovaEditovat
- argument - argument
- expression
- operator - operátor, zajišťuje nějakou operaci
- snap - zkratka pro Snap package, balíček
- Snap - nástroj pro manipulaci se snapy, tj. balíčky
- package -
- argument
Práce s terminálemEditovat
TAB
– tabulátor v terminálu doplní rozepsaný řetězec a urychlý tím práci
OtázkyEditovat
Při práci s terminálem mohou vyvstat i různé otázky, které se nevejdou do sekce Jak něco udělat. Nebojte se a klidně zapište své otázky níže.
Č. | Otázka? | Odpověď | Poznámky |
---|---|---|---|
O.1 | Co je to snap? | Snap je balíček softwaru a závislostí, snap je nástroj pro manipulaci se snapy. | |
2 | Co je adresář "/dev/sda5" a případně sda1? | Označují části disků. /dev/sda je disk a sda 1 a 5 jsou jeho části. | |
3 | Co je v adresáři udev? | Ovladač jádra OS, tedy userspace /dev | |
4 | Co je to "mounting"? | ||
5 | Co je to /dev? | Označuje umístění souborů. | |
6 | Jaký je minimální prostor pro spuštění OS? | Asi 8 G. | |
7 | Kde se nachází repositories a jak se najdou? | ||
8 | Co je to distro a jak ho zjistím? | Distro, je distribution, tedy operační systém využívající Linux kernel. Takže například Ubuntu je distro. V příkazovém řádku stačí zadat cat /etc/*-release .
|
|
9 | Co je to snap? | Snap je balíček softwaru a závislostí, snap je nástroj pro manipulaci se snapy. | |
10 | Kdo vytváří snapy? | Vymysleli je Ubuntu vývojáři ve verzi 16.04. Asi kdokoliv, ale ne ke všemu jsou snapy. | |
11 | Co je to socket? | ||
12 | Co je to system daemon? | Program, který stále běží, aby systému zajistil služby, které potřebuje. | |
13 | Co je to $PATH? | Proměnná prostředí, která systému říká ve kterém adresáři hledat, když uživatel zadává příkazy v terminálu. Obsahuje soubor, kde jsou v textové podobě uloženy texty k adresářům (path - cesta k adresáři). | |
14 | Co je to main? | ||
15 | Co v ls označuje světle modrá barva? | Symbolický odkaz, měkký odkaz, přesměrování - soubor obsahující odkaz na jiný soubor či adresář (může obsahovat i síťový odkaz). | |
16 | Co je to /etc/alternatives/? | ||
17 | Jak vypsat seznam všech příkazů? | ||
18 | Lze si aliasem přepsat existující příkaz? | Ano, ale pokud se to neuloží do .bashrc, tak se to po restartu nezapamatuje. | |
19 | Co to znamená, když v terminálu nejde psát? | ||
20 | Co v bashi znamená -- ?
|
Pokyn jádru neinterpretovat další možnosti (vyjma pozičních parametrů (parametr, který začíná číslem (vejma nuly))). Některé příkazy to ovšem nemusí akceptovat, jako například vestavěný příkaz echo .
|
|
21 | Jak rozumět zápisu užití příkazů v manuálu? | ||
22 | Jaká je dobrá praxe při práci v terminálu? | ||
23 | Jaké existují metaznaky? | mezera, tabulátor, nová řádka,|, &, ;, (, ), <, > | |
24 | Co jsou potom v bashi tyto závorky: [] ?
|
||
25 | Co značí tečka (. )?
|
Označuje aktuální pracovní adresář. | |
26 | Co je to token? | Token je sekvence, jednoho nebo více znaků. | |
27 | Může se instlací upgradovat software? | Ne, když instaluji jinou verzi sw, tak budu mít dvě verze a budu muset určit, která se má používat. Ale nejedná se o upgrade. | |
28 | Používá Ubuntu MATE k něčemu Python? | ||
29 | Jak zjistím jaký mám model PC? | sudo dmidecode | grep -A3 '^System Information'
|
|
30 | Jak zjistím, kolik místa na disku zabírají soubory? | ||
31 | Co je to binary? | Binární soubor (anglicky binary) je soubor obsahující binární člověku nesrozumitelný kód. | |
32 | Co je to source file? | Soubor obsahující instrukce k programu. | |
33 | Jaké příkazy se používají pro vyhledávání souborů? | find, whereis, which, (p)locate | |
34 | Jaká jsou pravidla pro dávání řetězců do uvozovek? | ||
35 | Jak určím, která verze programu se bude používat. | ||
36 | Proč mám nainstalováno více verzí pythonu? | Tedy proč obecně mít více verzí a ne jednu, která se bude upgradovat. | |
37 | Co je to software-properties-common? | ||
38 | Co je to ppa? | Znamená to Personal Package Archive, jsou to balíčky pro uživatele Ubuntu. | |
39 | Jaký je rozdíl mezi ppa a repozitářem? | Repozitář je kolekce balíčků na vlastním serveru, kdežto PPA je kolekce na hostovaném serveru firmy Canonical (firma, která vyvíjí Ubuntu). Následníkem PPA jsou snapy (také poskytované firmou Canonical), které jsou lépe dohledatelné a snad i bezpečnější. | |
40 | Proč se musí oficiální balíčky installovat a o čem ta instalace je? | ||
41 | Kde se nachází balíčky? | ||
42 | Jakou příponu mají balíčky? | ||
43 | Co je to kompilace? | Převod programu ze zdrojového kódu do spustitelného binárního souboru. Umožňuje optimální využití prostředků daného počítače. | |
44 | Jak se updatují balíčky? | ||
45 | Co dělá příkaz sudo apt update ?
|
Tento příkaz updatuje informace o balíčcích dostupných na webu. Může se tak objevit nový stáhnutelný balíček, či informace, že lze některé balíčky, repetive jejich obsah upgradovat. | |
46 | Jaká jsou pravidla pro tvorbu názvů příkazů? | ||
47 | Kde bere snap informace o balíčcích? | Zhruba 4x deně se updatují informace o snapech z centrálního repozitáře snapů u Cannonical Ltd. Ručně se to dá vyvolat přes příkaz sudo snap refresh .
|
|
48 | Co to znamená nainstalovaný repozitář? | ||
49 | Jaké typy balíčků pro Ubuntu existují? | ||
50 | Jaké jsou strategie zálohování? | Ideálním způsobem zálohování, je zálohovat kód v Githubu, kdy se vyrovnávají změny v kódu, což odpovídá obecné metodice nazvané differential backup, kdy se musí nejprve provést kompletní backup a pak se ukládají pouze informace o změnách. Na Linuxu takový backup umí např. program Backups. Hodně věcí jde také dělat příkazem rsync, a pak jde vytvořit skript pro pravidelné backupy a dát ho do cronu. Například u Backups je dobré některé adresáře vyjmout, protože se backupují jinde a u některých je potřeba dávat pozor, aby neobsahovali klíče a hesla, které si může někdo na uložišti otevřít (je tedy potřeba mít zabezpečené uložiště, nebo zakódovaná hesla). Dobré je zálohovat na 3 různých místech (např. PC, datadisk a cloud). Někdo také řeší způsob uložení na discích, tzn. rozmístit všude po disku/ích, kdyby se některé části disku rozbili, aby bylo možné data obvnovit? U Linuxu je dobré dělat backup nastavení systému (něktéré systémy vytváří system snapshots systému). Případně se to dělá nástrojem Timeshift. | Nicméně Backups a Timeshift jsou programy a bylo by dobré, se podívat co přesně dělají a pak vytvořit například svůj vylepšený v terminálu. |
51 | Lze zálohovat pouze změny (roztřídění souborů, v dokumentech? | Ano, differential backup by to měl zařídit. | |
52 | V jakém pořadí Shell interpretuje příkazy a skrypty? | ||
53 | Kde skladovat uživatelské skripty? | Patří do /usr/local/bin , kde je nepřepíší distro upgraty a další změny.
|
|
54 | Co to je copy-region-as-kill? | ||
55 | Co to je kill ring? |
Chyby a problémyEditovat
Chybová hlášeníEditovat
Při práci s terminálem narazíme na celou řadu chybových hlášení, je dobré jim rozumět.
Č. | Hlášení | Vysvětlení | |
---|---|---|---|
CH.1 | Exception in thread "main" java.lang.UnsatisfiedLinkError | Chybové hlášení Javy. Program volá jinou verzi Javy, než je k dispozici v PATH. Pokud tedy máme správnou verzi Javy, ale nemáme ji v PATH (viz O.13) nebude to fungovat. | |
CH.2 | bash: cd: java: Not a directory | ||
3 | No remote refs found similar to ‘flathub’ | ||
4 | E: Unable to locate package | ||
5 | Bad Interpreter: No Such File or Directory
|
Konkrétněji /bin/bash^M: bad interpreter: No such file or directory znamená, že script má windowsácké respetive dosácké zakončení řádku (\r\n ), kdežto Linux potřebuje \n . Toto tvrzení lze ověřit zadáním příkazu file název skriptu . Pokud to vyhodí hlášku CRLF line terminators , je to skutečně tento problém.
|
ProblémyEditovat
1: Nejde otevřít adresářEditovat
- tak nakonec se zjistilo, že se nejedná o adresář (modře po příkazu ls), ale o redirekt (světle modře) - prostě na tom černém pozadí ty barvy nejsou tak zřetelný
2: Nejde spustit VicuñaUploaderEditovat
- stáhnu si verzi, robalím, poklikám na soubor "vicuna" a nic (otevře se terminál a zase zavře)
- při spuštění programu z terminálu, tedy J.8, mit hlásí chybu CH.1
- tato chyba může být způsobena tím, že je nainstalova headles java, opravím to přeinstalací normální javy, například příkazem
sudo apt install openjdk-17-jdk
- případně se dají doinstalovat další součásti javy, viz návody
- tato chyba může být způsobena tím, že je nainstalova headles java, opravím to přeinstalací normální javy, například příkazem
3: V terminálu je tilda (~) a nejde v něm pracovatEditovat
- jediné na co terminál reaguje je enter, ale vždy vypíše novou řádku s uživatelským jménem ukončeným tildou
- může jít o to, že je poškozen systém adresářů, protože došlo k vybytí při zapnutí systému
- některé příkazy ale fungují
- ŘEŠENÍ: nakonec se ale ukázalo, že LT funguje a že písmo mělo stejnou barvu jako pozadí a nebylo vidět.
4: Vicuna nejde spustit příkazem v termináluEditovat
- vložil jsem odkaz na adresář VU do
$PATH
v.bashrc
, pak vytvořil alias, a otevřel nový terminál. Při zadánívicuna
i aliasu vu to hlásí "command not found
" - takže se postupným hledáním chyby zjistilo, že se nejedná o bash skript, ale sh skript, protože je na začátku skriptu
#!/usr/bin/env sh
Dobrá praxeEditovat
Jaká je dobrá praxe při správně Ubuntu systému.
- před každou instalací spustit update:
sudo apt update
– stáhne informace o balíčcích dostupných na webu, jejich obsah je možné následně nainstalovat, nebo upgradovatsudo apt upgrade
– upgraduje balíčky
- po odinstalování sw:
sudo apt-get autoremove
ZálohováníEditovat
Součástí praxe je také zálohovat svoje data a nastavení systému. To může být lokálně, třeba na vlastní data disk, ale i na webu (např. v různých cloudových službách). Počítačový kód se pak může zálohovat třeba na Githubu. Obecně je zálohování nákladné, proto se doporučuje, na každý druh dat používat různé dostupné služby co jsou zdarma (třeba již uvedený Github pro kód). Zároveň využívat efektivní metodu zálohování - například změnové zálohování (anglicky differential backup), které zazálohuje jednou obsah disku a pak již zálohuje jen změny na disku provedené. Při zálohování hesel a klíčů je pak potřeba dávat pozor na bezpečnost, tj. buď zálohovat do míst, ke kterým nemají přístup další osoby, nebo citlivé údaje zašifrovat.
Mezi cloudové služby patří:
- Github – počítačový kód, dokumentace; umožňuje verzování
- Zenodo – výzkumné datasety, články a software; přiděluje DOI, umožňuje přetahovat věci z Githubu
SkriptyEditovat
Až zde vytvoříte pár skriptů, můžete se pustit do kurzu Bash pro středně pokročilé.
Po stisku klávesy kalkulačka se objeví MATE Calculator, nebo se přenese do popředí, ten již zobrazenýEditovat
Příkaz vu spustí skript vicuna.shEditovat
- například v /diskD/Bash/skripty/ vytvoříme skript vu:
#!/bin/bash
#Initiate sh shell to run vicuna.sh
sh ~/diskD/Vicuna/Test1/vicuna/bin/vicuna
- skript vu umístíme do /usr/local/bin například přemístěním z jiné lokace, kde jsem ho editovali (
sudo cp ./diskD/Bash/skripty/vu /usr/local/bin
) - přesunem se do onoho adresáře přes
cd /usr/local/bin
a zjistíme jeho práva přesls -l vu
, případně udělíme práva spouštět všem skupinám přessudo chmod +x vu
- následně by příkaz terminálu
vu
měl spustit vicuna.sh
PoznámkyEditovat
PříkazyEditovat
Č. | Příkaz | Co znamená | Česky | Co dělá | Příklad | Popis příkladu | Poznámky |
---|---|---|---|---|---|---|---|
1 | man | manual | nápověda | Pokud existuje manuál k příkazům, zobrazí, ho. | man rm | vypíše nápovědu k příkazu rm | Pokud manuál neexistuje, lze zkusit příkaz help
|
2 | ls | ||||||
3 | dir | ||||||
4 | rm | remove | odebrat | ||||
5 | cd | change (the working) directory | změnit pracovní adresář | umožňuje přesouvat se mezi adresáři | cd .. | vrátí se ve stromu adresářů o jednu zpět | |
6 | du | odhadne obsazení disků | |||||
7 | df | disk free | volný disk | ukazuje obsazenost disku | |||
8 | sudo | superuser do | superuser dělá | spustí příkaz jako superuser | |||
9 | find | find | najít | hledá soubor napříč adresáři |
|
|
A možná umí vyhledat jen soubory, které byly použité v nedávné době. |
10 | clear | clear | vyčistit | vyčistí obrazovku | clear | vyčistí obrazovku | |
11 | exit | exit | opustit | ukončí proces | exit | zavře terminál | |
12 | whereis | where is | kde je | najde program, ovšem programu musí být v PATH | whereis gimp | najde adresáře, kde je GIMP | Hledá hlavně programové soubory, ale ne ostatní soubory! |
13 | lscpu | list CPU | vypiš CPU | vypíše informace o PC | lscpu | vypíše parametry hardwaru | |
14 | apt | advanced package tool | pokročilý nástroj balíčků | nástroj pro zjednodušenou práci s balíčky | sudo apt update | ||
15 | install | ||||||
16 | cat | ||||||
17 | dpkg | debian package (manager) | nástroj pro balíčky debian | nástroj pro manipulaci s balíčky debian | |||
18 | connect | connect | spojení | Zahájí spojení do zásuvky (socket) | |||
19 | systemctl | Operuje s nástrojem systemd | |||||
20 | chmod | change file mod bits | |||||
22 | source | Příkaz spouštějící určitý soubor v konkrétním jádře | |||||
23 | ll | ||||||
24 | help
|
help | nápověda | Pokud má daný příkaz nápovědu, tak ji vypíše na obrazovku. | help cd
|
nabídne kompletní nápovědu pro příkaz cd
|
|
25 | chmod | change mode | Ve skutečnosti change file mode bits. | ||||
26 | which
|
Hledá umístění příkazů. | which python3
|
Najde umístění příkazu python3 (tedy výstup by byl /usr/bin/python3 ).
|
|||
27 | (p)locate | Hledá soubory, snadněji než find. | |||||
28 | rsync | remote synchron*? | vzdálená synchronizace? | Program slouží ke kopírování a umí posílat pouze rozdíly. |
NástrojeEditovat
Č. | Název | Co to znamená | Česky | Co to umí | Poznámky |
---|---|---|---|---|---|
1 | snap | Nástroj pro manipulaci se snapy (tj. balíčky) | |||
2 | cups | Open source sw zajišťující komunikaci od editoru (Word) do tiskárny. | |||
3 | systemd | Je to systémový démon (viz O 12), který se spouští hned při startu. | |||
4 | fwupd | Je systémový démon | |||
5 | apt | Nástroj pro manipulaci s debs (tj. balíčky) | |||
6 | man | Systémový stránkovač (dalšími stránkovači jsou například more, less, či most (most zvýrazňuje syntax barevně)). |
OdkazyEditovat
CitaceEditovat
- ↑ Bash Reference Manual. www.gnu.org [online]. [cit. 2023-04-18]. Dostupné online.
- ↑ Bash Reference Manual. www.gnu.org [online]. [cit. 2023-04-18]. Dostupné online.
- ↑ Using case statements. tldp.org [online]. [cit. 2023-04-18]. Dostupné online.
- ↑ case Man Page - Linux - SS64.com. ss64.com [online]. [cit. 2023-04-18]. Dostupné online.
- ↑ bash - Console doesn't render according to man manual. Unix & Linux Stack Exchange [online]. [cit. 2023-03-28]. Dostupné online. (anglicky)