Bash pro začátečníky

Jak používat klasifikační nálepkuTato stránka je součástí kurzu:
začátečníci
Příslušnost: všeobecná


Informace o kurzu

editovat
  • 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. Znamená to, že pořadí úkolů si definujete sami podle potřeby kdy co potřebujete na operačním systému udělat. Pokud by Vás nic nenapadlo, můžete využít níže řešené problémy a postupně si je zkoušet. Z každé sekce vyberte jeden dva. V případně vašich problémů a otázek, je zapište níže a až najdete na Internetu (či na YouTube, konzultaci s chatGPT, apod.) řešení, tak ho sem 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. nespustit 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ě.
Některé úlohy jsou zaměřeny vyloženě na uživatele operačních systémů na bázi Linux (třeba i Ubuntu), takové mohou uživatelé jiných OS přeskočit.
Pokud byste chtěli měnit strukturu kurzu, prodiskutujte to napřed na diskusní stránce (metodiku kurzu vyvinul Juandev). Stejně tak neodstraňujte žlutý box vpravo nahoře, ani neměňte a neodstraňujte tagy <noinclude></noinclude>.
  • 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é varianty Linuxu

Grafické a strukturní konvence

editovat
  • 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. Tučný text se používá i k odlišení již zvýrazněného textu kurzivou.
  • 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
  • syntaxe kódu s vysvětlením – kódy v oblasti řešení zapisujeme v obecné podobě (např. cp zdroj cíl) a případně doplníme v poznámkách konkrétním případem, kdyby se zdálo, že to není srozumitelné. Samotný kód (cp zdroj cíl) pak zvýrazňujeme jako kód a nekódovou vysvětlující část kurzivou (zdroj cíl). Bash v tom tak poznáme tak, že je v kódovém podsvícení, ale není kurzivou.
  • Blok kódu – několikařádkové zápisy kódu zvýrazňujeme nástrojem Blok kódu, který zvýrazní kód změnou barvy pozadí a změní barvu jednotlivých částí kódu. Ve Vizuálním editoru jděte na Vložit-->Blok kódu a v sekci jazyk vyberte bash.
  • nejnovější poznámky – jdou vždy odspoda v dané sekci
  • Větší sekce této stránky jsou uloženy na substránkách a sem jsou vloženy. Eliminuje se tak trochu editační konflikt a hlavně nároky na vaše technické prostředky při editování této stránky. Další výhodou je, že některé substránky mohou být použity i v jiných edukačních modulech. Pokud na hlavní stránce kliknete editovat, můžete být přeneseni právě na substránku, kde je jeji obsah. Nic se neděje. Editujte a pak to uložte tam kde to je.
  • Editační konflikt – editační konflikt vzniká pokud editor chce uložit stránku, kterou zatím někdo změnil. Je pak potřeba dle návodu manuálně posoudit a sloučit změny. (nápověda na Wikipedii)
  • Odkazování na položky – položky v tabulkách je možné odkazovat písmenkovo-číselnou notací. Vždy v každé tabulce máte ve sloupci číslo takové označní, kde písmeno vychází z názvu sekce. (např. v sekci Jak něco udělat? Jsou položky číslovány J.11.∞, ale de facto je to zapsáno jen u první položky.) Pokud stisknete CTRL+F tak můžete takový odkaz jednoduše na stránce vyhledat.
  • Zadání – zapisujte tak jak byste se ptali sami sebe. Nevadí když vznikne duplicita. Duplicitní dotazy se dají spojit odkazem v poznámkách, dle výše uvedeného modelu. Otázky neodstraňujte – spíše je modifikujte, pokud si myslíte, že měly znít jinak a případně pokud zjistíte, že zadání bylo nesmyslné, tak ho ponechte a své zjištění uvedte do poznámek.

Spuštění a případná instalace terminálu

editovat

Operační systémy na bázy Linuxu

editovat

Zde by bashovský terminál měl být již předinstalovaný. Obvykle se spouští stiskem kláves CTRL+ALT+T. V poli vyhledá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.

Windows

editovat

Na YouTube je řešení, jak nainstalovat Windows Subsystem for Linux, což je de facto virtualizace příkazového řádku Bashe.

Výuková část

editovat

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
J.2 Jak zobrazit nápovědu k příkazu? man příkaz, help příkaz, info příkaz, příkaz --help, příkaz -? 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.
J.3 Jak zobrazit skryté adresáře? ls -a Možno též dir -a
J.5 Jak zjistit kolik mám volného místa? df -Th

df -h -t (systém souborů)

  1. Zjistíme systém souborů, který bude uveden vedle názvu pro disk (SDAx) s největším přiděleným prostorem. Funkce -T vypíše názvy souborových systémů, funkce -h výpis zpřehlední.
  2. Zjistí informace o disku a uspořádá je (funkce -h). Funkcí -t odfiltrujeme ostatní (např. dočasné systémy souborů tmpfs, které mění velikost podle potřeby)
J.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.
J.7 Jak nainstalovat KdenLive? sudo snap find kdenlive

(heslo)

sudo snap install kdenlive

  1. příkaz hledá snap s kdenlive
  2. druhý ho nainstaluje
J.8 Jak spustit program? echo $PATH
  1. v PATH je cesta k adresáři programu --> název programu
  2. v PATH není cesta k adresáři programu --> doskákat do adresáře - chmod a+x název programu - ./název programu
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).
J.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.
J.10 Jak nainstalovat Wine? lscpu

sudo apt install wine64

  1. v kroku 1 zjistíme jaký máme systém. pokud je tam 32, 64 máme 64
  2. pak ho zadáme za wine
J.11 Jak zjistit, kolik ja na disku volného místa? df -h Jde i df, ale df -h (human) je čitelnější.
J.12 Jak zobrazím strom adresářů? Nebo si najít defaultní strukturu na webu.
J.13 Jak zobrazím obsah adresáře, který se vejde na jednu stránku?
J.14 Jak nainstalovat R? Na webu R je nápověda.
J.15 Jak zjistím jakou mám verzi? cat /etc/os-release Vypíše informace k verzi.
J.16 Jak nainstalovat Gephi? sudo snap find gephi

(heslo)

sudo snap install gephi

  1. příklaz hledá snap (balíček) s gephi
  2. příkaz nainstaluje gephi
J.17 Jak odinstalovat Gephi? sudo snap remove gephi

sudo apt-get autoremove

Druhý krok odinstaluje nepoužívané dependencies a je dobré ho udělat.
J.18 Jak najít package (balíček)?
  1. apt get update
  2. apt-cache search název balíčku
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.
J.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.
J.20 Jak najít snap? snap find něco něco nahradíme názvem hledaného softwaru
J.21 Jak najít nainstalované balíčky (snapy)? sudo snap list
J.21 Jak se přemísťovat ve stromu adresářů? ls

cd (název adresáře)/cd ..

  1. vypíše aresáře soubory v aktuálním adresáři
  2. přejde do daného adresáře/odzkouší o jeden adresář níž
J.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.
J.23 Jak vytvořit iso flašku?
J.24 Jak zjistím jakou mám verzi Javy? java -version
J.25 Jak přidat program do PATH?
  1. cd
  2. PATH=$PATH:cesta do adresáře, kde je program
  1. Nejprve se přesunu do domovského adresáře.
  2. V podstatě vytvořím novou proměnou PATH. Proměnná je označená znakem dolaru. Když ale vytvářím proměnnou, tak tam ten dolar znak nedávám. Chci, aby ale v PATH bylo to co dopusud, proto se nová proměnná rovná původní proměnné $PATH a za dvojtečku uvedu cestu do adresáře, kde je program, respetive shellový skript. Kdybych vkládal další adresáře, tak ty cesty vždy oddělím dvojtečkou. Příklad pro spouštění skriptu VicuñaUploader může být: PATH=$PATH:~/diskD/Vicuna/"Verze Juan 1"/vicuna/bin/
J.26 Jak updatovat Javu?
  1. sudo apt update
  2. sudo apt install default-jre
  1. stáhne informace o balíčcích dostupných na webu
  2. nainstaluje defaultní jre (?)
J.27 Jak odinstalovat gscan2pdf?
  1. sudo apt get remove gscan2pdf
  2. y+enter
J.28 Jak nainstalovat program, který není ve snapu?
J.29 Jak nainstalovat Edge? Ověřené řešení viz: https://www.omgubuntu.co.uk/2021/01/how-to-install-edge-on-ubuntu-linux
J.30 Jak nainstalovat ET na Ubuntu 22?
J.31 Jak restartovat počítač?
J.32 Jak nainstalovat OBS Studio?
J.33 Jan nainstalovat gscan2pdf?
  1. sudo apt-add-repository ppa:jeffreyratcliffe/ppa
  2. sudo apt install gscan2pdf
  1. pak se stáhne patřičný repozitář
  2. následně se gscan2pdf nainstaluje
J.34 Jak nainstalovat aplikaci eObcanka?
J.35 Jak vyberu konkrétní screen, ke kterému se chci připojit?
J.36 Jak po napsání něčeho, rychle vložit již někde napsaný řetězec?
J.37 Jak vypsat soubory určitého typu na celém PC a zastavit vždy po pokrytí celé stránky?
J.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

bash: /usr/bin/bash /usr/share/man/man1/bash.1.gz kde bash: je název (příkazu), /usr/bin/bash je cesta k binárnímu souboru a /usr/share/man/man1/bash.1.gz je cesta ke stránce s manuálem.

J.39 Jak zjistit informace o souboru? stat (název souboru)

file (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.
J.40 Jak rozbalit archiv gzip do určitého místa? cp (původní umístění) (nové umístění)

gunzip (název archivu)

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.
J.41 Jak upgradovat balíčky?
  1. sudo apt update
  2. sudo apt upgrade
  3. (sudo apt autoremove)
  1. stáhne informace o balíčcích dostupných na webu
  2. stáhne a nainstaluje dostupné updaty balíčků
  3. pokud výpis hlásí, že některé balíčky není potřeba, je možné je odebrat
J.42 Jak zobrazit význam barev u příkazu ls?
J.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]...
J.44 Jak upgradovat Python?
J.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
J.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.
J.47 Jak zjistím, jaké verze Pythonu mám nainstalované? ls /usr/bin/python*
J.48 Jaký je rozdíl mezi knihovnami a binárními soubory?
J.49 Jak nainstalovat nejnovější verzi Python?
J.50 Jak nainstalovat IDLE?
  1. sudo apt update
  2. sudo apt install idle
  1. Stáhne informace o balíčcích dostupných na webu
  2. Nainstaluje IDLE
J.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
J.52 Jak vytvořit alias?
J.53 Jak updatovat informace o ppa balíčcích?
J.54 Jak převést pdf do OCR?
  1. stáhnout ocrmypdf, tesseract
  2. stáhnout češtinu pro tesseract
  3. doskákat do adresáře, kde je soubor
  4. ocrmypdf -l ces zdrojový soubor výchozí soubor
J.55 Jak vytvořit shortcut pro příkaz?
J.56 Jak nainstalovat Avidemux?
  1. git clone https://github.com/mean00/avidemux2.git
  2. cd avidemux2
  3. git submodule update --init --recursive
  4. bash createDebFromSourceUbuntu.bash --deps-only
  1. Okopíruje z webu repozitář avidemux2 a vloží ho do adresáře stejného jména v aktuálním adresáři. Git je příkaz na správu verzí. Git clone naklonuje konkrétní repozitář z dané URL.
  2. Přejdeme do adresáře avidemux2.
  3. Vytvoří repozitář ve stávajícím repozitáři (adresář?).
J.57 Jak smazat adresář?
  1. rmdir název adrešáře
  2. rm -r název adresáře
  1. adresář je prázdný
  2. adresáře není prázdný, atribut -r znamená rekurzivně, neboli opakovaně. Jinak řečeno, příkaz rm bude odstraňovat obsah adresáře tak dlouho, než ho celý odstraní. rm -r Tkinter2, tedy odstraňuje tak dlouho obsah adresáře Tkinter2, než ho celý odstraní. Na závěr odstraní i samotný adresář.
J.58 Jak nainstalovat software, který je pouze pro Windows?
J.59 Jak odinstalovat Avidemux sestavený ze zdrojového kódu?
  1. zazálohovat systém
  2. smazat ručně jeho soubory
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.
J.60 Jak vytvořit spustitelný příkaz pro program?
  1. cd
  2. PATH=$PATH:cesta do adresáře, kde je program
  3. alias něco=název programu
CHYBNÉ ŘEŠENÍ, FUNGUJE POUZE DOČASNĚ, NUTNÉ PŘEPSAT.
  1. Nejprve přejdem do domovského adresáře, abysme to nepomotali.
  2. Poté přídáme cestu do adresáře, kde je program do proměnné $PATH. Děláme to tak, že vytvoříme novou proměnou PATH, kam umístíme starou proměnou PATH plus za dvojtečku cestu do adresáře, kde je náš program. Tím vznikne možnost spustit program přes jeho plný název. Bash totiž bude hledat tento název ve všech adresářích, které má uloženy v proměnné PATH a až ho najde, tak ho spustí. Taková cesta může vypadat následovně: PATH=$PATH:~/diskD/Vicuna/"Verze Juan 1"/vicuna/bin/. Program v tomto adresři se jmenuje vicuna.sh a volá se napsáním vicuna do terminálu. (Podrobněji viz J 25)
  3. V případě, že bysme chtěli program volat jinak, třeba kratší cestou vytvoříme k němu alias. Například zápis alias vu="vicuna", nám umožní skript vicuna.sh volat pouhým zadáním zkratky vu.
J.61 Jak spustit MATE Calculator? mate-calc
J.62 Jak přenést do popředí MATE Calculator po stisku klávesnice kalkulačka?
J.63 Jak zobrazím práva k souboru? ls -l název souboru
J.64 Jak zobrazím informace o balíčku apt? sudo apt-cache show název balíčku
J.65 Jak otevřít Visual Code Studio z terminálu? code
J.66 Jak vytvořit někde soubor?
J.67 Jak updatovat RStudio?
  1. Stáhnout patřičnou .deb verzi ze stránek vývojáře
  2. doskákat do místě, kde je instalační balíček typu .deb
  3. sudo dpkg -i název instalačního balíčku
J.68 Jak zadat zkratky CTRL+C a CTRL+V ve všech Bash shellech (např. i RStudio)?
J.69 Jak restartovat program?
J.70 Jak downgradovat program?
J.71 Jak vytvořit prázdný soubor? touch název soboru
J.72 Jak spočítat počet slov v textu?
J.73 Kde najdu soubory s rozložením klávesnic? Obvykle v /usr/share/X11/xkb/symbols.
J.74 Jak otevřít bashrc? název textového editoru ~/.bashrc Takže například micro ~/.bashrc, kde micro je název textového editoru ve kterém se bashrc otevře.
J.75 Jak zjistím, které rozložení právě používám? textový prohlížeč /etc/default/keyboard Tedy například micro /etc/default/keyboard.
J.76 Jak vyprázdnit paměť při kopírování?
J.77 Jak nainstalovat uživatelské rozvržení ze souboru v xkb?
J.78 Jak zkopírovat soubor z jednoho místa do druhého? cp cesta ke zdrojovému souboru cesta k cílovému souboru V praxi to může vypadat následovně: sudo cp diskD/Studium/Programování/cz-qwertz-prog-nnumbers-layout /usr/share/X11/xkb/symbols/. Tedy soubor cz-qwertz-prog-nnumbers-layout kopíruji z adresáře Programování do adresáře symbols. Sudo tam dávám proto, že do složky usr může kopírovat pouze admin.
J.79 Jak zobrazím obsah či inofrmace o knihovně libnotify? locate libnotify Vyjedou mi všechny adresáře a soubory obsahující řetězec libnotify. Mohu se tak i podívat co je v adresářích libnotify*.
J.80 Jak zjistím svůj default editor? sudo update-alternatives --config editor Default pro všechny uživatele má nejvyšší prioritu, pro konkrétnního uživatele je označen hvězdičkou. Zápis může vypadat následovně:
  Selection    Path               Priority   Status
------------------------------------------------------------
  0            /usr/bin/micro      100       auto mode
* 1            /bin/ed            -100       manual mode
  2            /usr/bin/code       0         manual mode
  3            /usr/bin/micro      100       manual mode
  4            /usr/bin/vim.tiny   15        manual mode
Tento seznamu ukazuje všechny editory přidané do update-alternatives. První editor je globální pro všechny uživatele což se pozná i tím, že má nejvyšší prioritu. Priorita se určuje při instalaci, nebo se dá dodatečně změnit. Druhý editor má hvězdičku, tzn. že se použije jako default, všude tam, kde ho použije aktuální přihlášený editor. Nicméně některé aplikace využívající administrátorská práva, mohou použít právě editor pod číslem 0. Záporná priority (v tomto případě editor ed -100) se dává těm editorům, které by se neměli stát defaultními.
J.81 Jak přidat Micro do výběru select-editor?
  1. whereis název editoru
  2. sudo update-alternatives --install /usr/bin/editor editor cesta k editoru 100
  1. Napřed si zjistím, kde se můj editor nachází
  2. Pak tuto cestu přidám do tohoto příkazu, takže to může vypadat následovně: sudo update-alternatives --install /usr/bin/editor editor /usr/bin/micro 100. Pokud zadám nejvyšší prioritu, bude tento editor defaultní i pro všechny uživatele (nehledě na to jaký editor bude vybrán pomocí update-alternatives (hvězdička)). Zadáním sudo update-alternatives --config editor si tedy mohu nejprve zjistit, jaké jsou priority jednotlivých editorů.
J.82 Jak vyextrahovat data z tabulky obsahující určitý řetězec?
  1. stáhnu tabulku například jako *.tsv
  2. cat zdrojovydokument.tsv | grep "heledaný řetězec" > "soubor s vyfiltrovanými daty.tsv"
  1. TSV soubor znamená soubor, kde jsou jednotlivé buňky/sloupce odděleny tabulátorem (z angl. Tab-Separated Values)
  2. Pokud by mi stačilo vypsat dané řádky do okna terminálu, stačí zadat pouze cat zdrojovydokument.tsv | grep "heledaný řetězec" a případně si hledaný řetězec mohu zvýraznit přes cat zdrojovydokument.tsv | grep --color "heledaný řetězec". Pokud chci výsledek vložit do dalšího dokumentu pro další zpracování, volím celý tento příkaz. Výsledný soubor, má jednotlivé hodnoty stále oddělené tabulátorem, takže mohu pak jednoduše opět převést do tabulky.
J.83 Jak odstranit z EXIFu fotky souřadnice?
J.84 Jak zmenšit rozlišení fotek?
  1. sudo apt update
  2. sudo apt install nautilus-image-converter
  3. killall nautilus
  4. nautilus
  5. označit a zvolit možnost změny rozlišení
  1. nejprve updatujeme informace o dostupných balíčcích
  2. poté naistalujeme Nautilus
  3. pak ho shodíme
  4. a znovu spustíme
  5. na Ubuntu 22.04.2 LTS (Debian) se nám otevře okno se složkami. Pak už stačí označit soubor, či soubory, kde chceme změnit rozlišení a kliknout na Resize images... (takže jde změnit rozlišení u jedné fotky, nebo u více fotek naráz). Je možné, že na jiných distribucích se neotevírá speciální okno se složkami, ale pouze se přidají nové možnosti do nabídky, která vyzkočí, při pravém pokliknutí na myš.
J.85 Jak zobrazit rozložení klávesových zkratek v terminálu?
J.86 Jak hledat v manuálu?
  1. /řetězec
  2. ?řetězec
  3. n
  4. N
  1. Najde řetězec vpřed
  2. Najde řetězec vzad
  3. další hledání vpřed v rámci 1, nebo 2
  4. další hledání vzad v rámci 2, nebo 1
J.89 Jak vyhledat nápovědu pro man(7)? man 7 man man man mi většinou hodí pouze sekci 1 manuálu k příkazu man. Pokud chci jinou sekci, jako například 7, musím psát man 7 man. Sedmá sekce se v manuálových stránkách označuje jako man(7).
J.90 Jak si vytisknout manuálovou stránku?
  1. lpstat -p
  2. zkopírovat název tiskárny
  3. man -t příkaz | lp -d název tiskárny
  1. zobrazí seznam dostupných tiskáren
  2. okopíruji si název tiskárny na které chci tisknout
  3. zadám nápovědu příkazu, který chci tisknout a pipnu to do příkazu pro tisk s názvem konkrétní tiskárny
J.91 Jak zobrazit dostupné tiskárny? lpstat -p
J.92 Jak vytisknout pouze část manuálové stránky?
J.93 Jak smazat soubor? rm název souboru Pokud jsem ve složce, kde je soubor umístěn, jinak se tam musím přemístit prostřednictvím cd.
J.94 Jak provést více příkazů po sobě a zadat to na jednom řádku? Ano, použitím logického operátoru &&. Ten zajistí, že provedení prvního příkazu, bude zajištěno až po zdárném provedení prvního příkazu. Syntax tedy je 1. příkaz && 2. příkaz. Příkladem může být skopírování souboru s jeho následným smazáním, tedy cp cesta k souboru cílový adresář souboru && rm cesta k původnímu souboru. Tedy po zadání cp "oznameni do okna.py" Tkinter/ && rm "oznameni do okna.py" příkaz cp zkopíruje soubor oznameni do okna.py do adresáře Tkinter a následně tento soubor v původním umístění smaže. Uživatel se tedy v tomto případě nacházel v adresáři, kde byl původní skript, proto nezadával cestu k souboru v případě příkazu rm, respetive cesta byl samotný název souboru.
J.95 Jak smazat soubor v jiném než aktuálním adresáři? Tak že se zadá cesta, např. rm Tkinter/vstup.py, smaže soubor vstup.py v adresáři Tkinter.
J.96 Jak založit adresář? mkdir název adresáře
J.97 Jak přejmenovat soubor? mv název souboru nový název souboru Např. mv test.py "kalkulacka pokus.py" přejmenuje soubor test.py na kalulacka pokus.py.
J.98 Jak nainstalovat Zotero?
  1. wget -qO- https://raw.githubusercontent.com/retorquere/zotero-deb/master/install.sh | sudo bash
  2. sudo apt update
  3. sudo apt install zotero
  1. První krok stáhne zatím prověřený instalátor
  2. druhý krok updatuje balíčky
  3. třetí krok instaluje zotero
J.99 Jak si zobrazit obsah terminálu i po jeho zavření?
J.100 Jak přidat tiskárnu?


Terminál, manuál a Bash

editovat

Vysvětlení manuálové syntaxe

editovat

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ů.

Aby bylo jasno tak do subnadpisu uvádíme pokud máme pocit, že jsme danou syntaxi pochopili (vyřešeno) či nepochopili (dořešit).

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á jako case obráceně!
  • WORD.....je slovo, které se srovnává vůči jednotlivým vzorům PATTERN. V tomto případě je WORD $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říkazu case není manuálová stránka a nápovědu nelze ani vyvolat přes case --help. Funguje pouze help case, kde je ale nepatrné množství informací. V man 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, jestli PATTERN 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 jen PATTERN. 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 je 1, závorka ) se zapíše, COMMANDS odpovídá příkazu echo, respetive echo "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 a PATTERN ano? Logická odpověď je, že in není výraz. Co ale je potom in? 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říkazu case).[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ů syntaxe
editovat
  • 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:

  1. cp [OPTION]... [-T] SOURCE DEST
  2. cp [OPTION]... SOURCE... DIRECTORY
  3. cp [OPTION]... -t DIRECTORY SOURCE...

Příklad:

Úvahy:

  1. cp je zkratka příkazu, tedy copy
  2. Podle man man kapitálky nic neoznačují, respetive man 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í.
  3. 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!
  4. 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... a DIRECTORY SOURCE... (je otázka pro jakou část syntaxe se ve třetím případě opakovatelnost vztahuje, jestli pro SOURCE, DIRICTORY SOURCE, nebo dokonce pro -t DIRECTORY SOURCE) opakovatelnost zdroje či zdrojového adresáře. Dalším problémem manuálu cp je, že neobsahuje sekci Options, hned by bylo jasné, co [OPTION] může znamenat.
  5. Man man píše, že něco jako [-T] znamená, že jsou argumenty volitelné. Žel bohu se opět man man a man cp liší v tom, že v man man jsou argumenty na rozdíl od man 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 v man 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
    1. 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é (viz man cp). V man man je sekce s těmito flagy skutečně označena jako Options, tože v man 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ě.)
  6. 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říkaz cp 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říklad baf1.txt, baf2.txt) a následně název adresáře, kam se to má kopírovat.
  7. A konečně třetí příklad syntaxe cp [OPTION]... -t DIRECTORY SOURCE... by pak znamenal, že za příkaz cp 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.
    1. 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říkazu cp 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.

Syntaxe man7.org:

  1. cp [OPTION]... [-T] SOURCE DEST

Úvahy:

  1. 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é.
  2. 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.
  3. 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řeba cp /home/juan/avidemux2, ale je otázka co by takový příkaz udělal? Když si něco takového vyzkouším, tak mi cp 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říkaz cp /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ářem test a když zadám vytvořený test2. Z tohoto rozboru tedy plyne, že tento zápis syntaxe, není asi správný.
    1. ChatGPT poskytl následující příkaz cp file.txt directory/ # Copies 'file.txt' into 'directory/file.txt'. To znamená, že jsem synopsy pochopil špatně a SOURCE DEST jsou dva výrazy, ne jeden. Napřed jde zdrojový sobour (adresář), pak jde ten kam se to má uložit.
  4. 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 soubor baf.txt do adresáře test2.

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 (dořešit)
editovat

Syntaxe man: snap [OPTIONS] find [find-OPTIONS]

Úvahy:

  1. snap je název příkazu
  2. [OPTIONS] - man man nezná něco co je kapitálkama, v man man jsou options název sekce, ve které jsou možnosti či argumenty
  3. find - je v man 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říkaz find, který má i svůj manuál a synopsy (find  [-H]  [-L] [-P] [-D debugopts] [-Olevel] [starting-point...] [expression]).
  4. [find-OPTIONS] - opět jako v případě bodu 2 man man nezná něco s kapitálkama, stejně jako Options jsou pro něj atributy. Jinak man 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 a find).
  • Nemůžeme s jistotou říct, co jsou OPTIONS a jak se chovaj, můžem pouze předkládat hypotézy:
    1. H: Pro snap jsou OPTIONS možnosti v sekci Option Commands
    2. H: Pro find jsou OPTIONS možnosti v sekci Options v manuálu find (proto je to označeno jako find-OPTIONS)
    3. H: Závorka se v příkladu nezapíše.
    4. H: OPTIONS se nahradí jedním, nebo vícero jinými příkazy
    5. H: Stejně tak find-OPTIONS se nahradí jedním nebo víceropříkazy
  • Trochu matoucí je ale zápis typu [OPTIONS] find, když víme, že find by teoreticky mohl být součástí výrazu OPTIONS. 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řed find může být jeden a více příkazů a že find 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
notify-send (vyřešeno)
editovat

Syntaxe man: notify-send [OPTIONS] {summary} [body]

Výklad dle man man:

  • notify-send - první jde samotný příkaz, to je jasné a dokonce je tučně, takže se musí zapsat, tak jak je.
  • OPTIONS - man man o žádných kapitálkách nemluví, takže OPTIONS bude asi čistý výmysl tvůrců notify-send a zřejmě zvýraznění, protože mají v manuálu sekci Options
  • [OPTIONS] - argumenty v [] by měly být volitelné. Co jsou to argumenty? --> Jsou to ty věci co jsou v sekci Options (např. -u, -t, -i).
  • {summary} - man man žádnou notaci o složených závorkách ({}) nezná, takže je to zase o hypotézách, co se tím tvůrci notify-send snaží sdělit. Summary značí shrnutí, jaké shrnutí tím myslí, těžko říct a jakou funkci to shrnutí má také.
  • [body] - dle man man nevíme co je body. Víme, ale, že hranaté závorky značí volitelnost
  • Shrnutí: zatím víme, že musíme napsat příkaz (notify-send), pak můžeme zvolit atributy (-?, -u, -t), pak nevíme co dělat a pak můžeme zvolit nějaké tělo. Ovšem nevíme co to tělo je.

Dovýklad dle man notify-send:

  • Tak tady odtud není co dovyložit.

Na man7.org k tomu manuál není, takže smůlec!

ChatGPT 4:

  • [OPTIONS] - 4ka souhlasí, že todle je volitelná část, kam se mohou zapisovat atributy ze sekce Options
  • {summary} - toto je údajně nadpis v notifikaci, a skutečně se to po otestování tak chová
  • [body] - je samotný text notifikace.
  • Shrnutí: po ozkoušení mohu potvrdit, že to tak funguje. Příkaz notify-send je povinný a neměný, [OPTIONS] jsou volitelné atributy ze sekce Options z manuálu k notify-send. Prostě nahradím [OPTIONS] nějakým atributem (např. -t 10000). {summary} je povinný nadpis oznámení. Prostě nahradím {summary} nějakým řetězcem. [body] je volitelný text oznámení. Prostě nahradím [body] nějakým řetězcem. Příklad:
  • notify-send -t 10000 "Test" "Todle je pouze test!"
    
rm (dořešit)
editovat

Syntaxe man: rm [OPTION]... [FILE]...

Výklad dle man man:

  • rm - nejprve jde příkaz, je označen boltem, tzn. že musí být zapsán tak jak je
  • [OPTION]... [FILE]... - jsou nějaké proměné, které se vkládají podle nějakých pravidel, nevím, ale jak se to obecně jmenuje
  • [OPTION]... - man man žádný zvýraznění kapitálkama nezná, pak se těžko určí co to znamená, když je to v závorce. Tak dejme hypotézu, že OPTION je jeden argument a tím že je v závorce, by pak znamenalo, že je volitelnej. Výpustka (...) tedy bude znamenat, že se to může opakovat. Celé by to mohlo znamenat, že tam může být několik argumentů, které se mohou opakovat. Proč to tedy nazapsat podle pravidel man man následovně: [-abc]...?
  • [FILE]... - toto je podobný příklad jako výše, kdy se musíme domnívat. Vzhledem k tomu, že rm maže soubory, FILE bude asi název souboru. Opět není jasné, proč je to kapitálkama. To že je to v závorce znamená, že je to volitelné a že se to může opakovat?
  • suma sumárum - znamenalo by to, že atributy a soubor jsou volitelné, nebo může být jeden, nebo se můžou opakovat?
unrar (dořešit)
editovat

Syntaxe man: unrar  command  [-switch ...] archive [file ...] [@listfiles ...] [path ...] [path_to_extract/]

Výklad dle man man a man unrar:

  • unrar - příkaz, je poviný
  • command - i dle man unrar to vypadá, že pokud chceme využít nějaký příkaz, musíme zapsat slovo command
  • [-switch ...] - asi že, to nemusí obsahovat žádný argument, argumenty jsou volitelné a mohou se opakovat (výpustka)
  • archive [file ...] - z logiky věci a man man by to mohlo znamenat, že musím zapsat slovo archive a následně název jednoho, nebo více souborů typu rar. Nicméně z popisu v man unrar není zcela jasné, jestli se musí archive zapsat. Co je ale jasné, že file není pouze název raru, ale cesta k raru či rarům.
  • [@listfiles ...] - zase to že je to v závorce značí volitelnost a výpustka opakovatelnost. Podle man unrar to vypadá, že listfile je plain text soubor obsahující cesty k rarům. Každá cesta musí být na separátní řádce. Do příkazu se vloží zavináč a následně jméno souboru s listem. Asi z logiky věci spíš cesta k souboru se seznamem rarů.
  • [path ...] - z logiky věci bych řekl, že se sem vkládá nějaká cesta k souboru, který se má rozbalit. Je to volitelné a opakovatelné. Jinak řečeno, je to jedna z možností pro archive (ostatní jsou tedy [file ...] [@listfiles ...] [path ...] [path_to_extract/]). Otázka je jaký je rozdíl mezi [file ...] a [path ...]. Man unrar path nevysvětluje.
  • [path_to_extract/] - zde to opět vypadá na cestu k raru, respektive rarům, protože lomítko může označovat cestu do konkrétního adresáře, kde jsou rary. Nedá se to opakovat, ale je to volitelné. Dle man unrar asi jo.

Výklad dle man7.org: manuál chybí.

ChatGPT 3.5: unrar [options] archive.rar [files...]

  • unrar - příkaz, je poviný
  • [options] - volitelné možnosti, které příkaz nabízí
  • archive.rar - jméno raru k rozbalení
  • [files...] - další soubory či adresáře k rozbalení, z tohodle vysvětlení by to teda asi začátečník nepochopil

Shrnutí:

  • úplně nejlepší by asi bylo, kdyby manuálové stránky obsahovaly příklady, než nějaké suché manuály.
  • je otázka jaké je rozdíl mezi sekcí commands a options v man unrar. Man man s žádnou sekcí commands nepočítá.

Struktura manuálu a Bashe

editovat

Tato sekce je speciálně vypíchnutá a věnuje se speciálně manuálovým stránkám Bashe.

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 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álu
editovat

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 Bashe
editovat

Cílem této sekce je společně vytvořit gramatiku Bashe (či linuxácké mluvy), 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í.

Slovníček pojmů
editovat
  • 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
  • apt update prý refrešne repozitáře - to co apt update dělá je ale, že updatuje informace o balíčcích dostupných na webu. Se samotnými balíčky, nebo online repozitáři, které jsou na webu dostupné, ale nijak nemanipuluje.

Práce s terminálem

editovat
  • TAB – tabulátor v terminálu doplní rozepsaný řetězec a urychlý tím práci


Otázky

editovat

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. test

Č. 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.
O.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.
O.3 Co je v adresáři udev? Ovladač jádra OS, tedy userspace /dev
O.4 Co je to "mounting"?
O.5 Co je to /dev? Označuje umístění souborů.
O.6 Jaký je minimální prostor pro spuštění OS? Asi 8 G.
O.7 Kde se nachází repositories a jak se najdou?
O.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.
O.9 Co je to snap? Snap je balíček softwaru a závislostí, snap je nástroj pro manipulaci se snapy.
O.10 Kdo vytváří snapy? Vymysleli je Ubuntu vývojáři ve verzi 16.04. Asi kdokoliv, ale ne ke všemu jsou snapy.
O.11 Co je to socket?
O.12 Co je to system daemon? Program, který stále běží, aby systému zajistil služby, které potřebuje.
O.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).
O.14 Co je to main?
O.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).
O.16 Co je to /etc/alternatives/?
O.17 Jak vypsat seznam všech příkazů?
O.18 Lze si aliasem přepsat existující příkaz? Ano, ale pokud se to neuloží do .bashrc, tak se to po restartu nezapamatuje.
O.19 Co to znamená, když v terminálu nejde psát?
O.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.
O.21 Jak rozumět zápisu užití příkazů v manuálu?
O.22 Jaká je dobrá praxe při práci v terminálu?
O.23 Jaké existují metaznaky? mezera, tabulátor, nová řádka,|, &, ;, (, ), <, >
O.24 Co jsou potom v bashi tyto závorky: []?
O.25 Co značí tečka (.)? Označuje aktuální pracovní adresář.
O.26 Co je to token? Token je sekvence, jednoho nebo více znaků.
O.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.
O.28 Používá Ubuntu MATE k něčemu Python?
O.29 Jak zjistím jaký mám model PC? sudo dmidecode | grep -A3 '^System Information'
O.30 Jak zjistím, kolik místa na disku zabírají soubory?
O.31 Co je to binary? Binární soubor (anglicky binary) je soubor obsahující binární člověku nesrozumitelný kód.
O.32 Co je to source file? Soubor obsahující instrukce k programu.
O.33 Jaké příkazy se používají pro vyhledávání souborů? find, whereis, which, (p)locate
O.34 Jaká jsou pravidla pro dávání řetězců do uvozovek?
O.35 Jak určím, která verze programu se bude používat.
O.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.
O.37 Co je to software-properties-common?
O.38 Co je to ppa? Znamená to Personal Package Archive, jsou to balíčky pro uživatele Ubuntu.
O.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ší.
O.40 Proč se musí oficiální balíčky installovat a o čem ta instalace je?
O.41 Kde se nachází balíčky?
O.42 Jakou příponu mají balíčky?
O.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.
O.44 Jak se updatují balíčky?
O.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.
O.46 Jaká jsou pravidla pro tvorbu názvů příkazů?
O.47 Kde bere snap informace o balíčcích? Informace o snapech se do PC nestahují, jako informace o apt balíčcích, respektive se dají stáhnout k jednomu konkrétnímu balíčku, který se vyhledává. Ty se dají vyhledat pomocí příkazů snap find balíček, či snap search balíček.
O.48 Co to znamená nainstalovaný repozitář?
O.49 Jaké typy balíčků pro Ubuntu existují?
O.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.
O.51 Lze zálohovat pouze změny (roztřídění souborů, v dokumentech? Ano, differential backup by to měl zařídit.
O.52 V jakém pořadí Shell interpretuje příkazy a skrypty?
O.53 Kde skladovat uživatelské skripty? Patří do /usr/local/bin, kde je nepřepíší distro upgraty a další změny.
O.54 Co to je copy-region-as-kill?
O.55 Co to je kill ring?
O.56 Je nějaký intuitivnější editor než nano? Ano, třeba micro.
O.57 Jak se říká úvodníku skriptu Bashe (tedy #!/bin/bash)? Shebang a někdy též (či dříve) sharp exclamation či hashbang.
O.58 Co znamená #!/bin/bash? # je v bashi úvodníky pro komentář. #! je pak tzv. shebang, který označuje spustitelný soubor. /bin/bash je pak cesta k interpretu, kterým se má tento soubor spustit. Doslova řečeno, cesta k interpretu se pošle do shebang a tím se to celé rozchodí. V tomto případě je soubor spuštěn v shellu Bashe. Jedná se o analogii windowsovského exe souboru.
O.59 Jak začíná v Bashi kometář? Hashtagem (#).
O.60 Co je to argument a jak vypadá? Argument je část informace, která se posílá do příkazu k interpretaci. Někdy se jí říká též parametr a v Bashi jsou argumenty příkazů uvedeny v sekci Options. Jedná se tedy o řetězce, označené jako -u, -t, --timestamp atd. Jednoduchým příkladem je ls -a, tedy argument -a se posílá do příkazu ls. ls -a vypíše seznam skrytých souborů.
O.61 Jsou nějaké příkazy, které hlídají čas, nebo dělají repetitivní akce v čase? Například nástroj cron, který opakovaně spouští jiné věci.
O.62 Co je to knihovna ve smyslu Bashe? Kolekce souborů různého druhu zajišťující určitou repetitivní činnost.
O.63 Co je to rutina (angl. routine)? Jiné označení pro počítačový program.
O.64 Jaký je rozdíl mezi adresáři lib, lib32, lib64 a libx32? V lib jsou knihovny s programy v programovacím jazyce C, které využívají programy uložené v adresáři bin, kernel, nebo zařízení. lib32 a lib64 obsahují knihovny, které podporují vícečetnou architekturu. libx32, se pravděpodobně přidalo s instalací nějakých doplňků.
O.65 Co je GTK+ dialog? Nějaké dialogové okno z dílny GTK.
O.66 Jaké jsou konvence pro používání uvozovek?
O.67 Co znamená značka > a nemožnost zadat další příkaz? Například znamená pokračování příkazu na druhé řádce. Bash shell, totiž detekuje příkaz a pokud si myslí, že je nedokončený (například chybějící komentovací značka) tak nabídne takto další řádku příkazu. Vyzkočit se z toho dá např. příkazem CTRL+C.
O.68 Co dělá klávesa CTRL+SHIFT+D?
O.69 Co je to CLI?
O.70 Jaká klávesová zkratka ukončí proces v terminálu MATE, pokud použiji zkratku CTRL + C pro něco jiného? CTRL + SHIFT + C
O.71 Co jsou to keybindings?
O.72 Jak otestovat přerušení procesu?
  1. sleep 5 && echo test
  2. klávesová zkratka pro přerušení procesu
O.73 Jak se jmenuje část za příkazem? argumenty
74 Co dělá příkaz pip? Instaluje balíčky Pythonu.
75 Co je python-dev v sudo apt-get install python3-pip python-dev? python-dev je druhý balíček, který se má instalovat. Celý kód tedy instaluje dva balíčky za použití příkazu apt. Prvním je python3-pip a druhým python-dev.
76 Co je to xclip? Nástroj umožňující kopírovat něco z a do GUI pomocí X11.
77 Mohu používat naráz xclip i xsel?
77 Co značí > v terminálu? Že terminál očekává nějaký další vstup. Ukončit se dá třeba stiskem zkratky CTRL+D.
O.78 Co je .bash.d? Adresář, který obsahuje konfigurační bash scripty.
79 K čemu se využívají jednotlivé typy souborů na Linuxu?
  • /etc/ - editable text configuration - konfigurační a shellové soubory
    • /etc/alternatives/ - (pouze Debian) - symlinky na různé verze podobného sw
    • /etc/apt/ - (pouze Debian) - komfigurační soubory vztahující se k nástroji APT (Advance Package Tool)
      • /etc/apt/sources.list.d/ - doplňkové odkazy na repozitáře
      • /etc/apt/trusted.gpg.d/ - GPG klíče pro ověření autenticity balíčků
    • /etc/cron.daily/ - systémový plánovač úloh cron zajišťuje každodenní spustěžní skryptů, pokud je počítač zapnutý (ještě mohou být /cron.hourly/, /cron.weekly/, /cron.monthly/)
    • /etc/default/ - konfigurační soubory, tedy jak se mají jednotlivé služby spouštět
  • /home/juan/.cache/ - uživatelsky specifické dočasné soubory, skrytý adresář
  • /home/juan/.config/ - uživatelské konfigurační soubory
  • /snap/ - aplikace nainstalované snapem
  • /var/ - soubory, které se mohou měnit v průběhu běhu systému (odtud anglické variable, tedy var)
    • /var/lib/dpkg/ - informace a metadata o balíčcích, které využívá nástroj dpkg (balíčkovací nástroj pro Debian, který je využíván nástrojem Apt)
      • /var/lib/dpkg/info/microsoft-edge-stable.list - seznam všech souborů a adresářů, které byly nainstalované s Microsoft Edge
      • /var/lib/dpkg/info/microsoft-edge-stable.postrm - skript se spouští po odstranění balíčku, aby po něm uklidil
  • /usr/bin/ - spustitelné binární soubory a skripty
  • /usr/share/ - dokumentace, ikonky, zvuky, jazykové lokalizace programů
    • /usr/share/applications/ - soubory typu *.desktop pro GUI prostředí obsahující informace o spouštění programů
    • /usr/share/doc/ - dokumentační soubory programů
    • /usr/share/icons/ - ikony programů
    • /usr/share/man/ - manuálové stránky spustitelné příkazem man z terminálu
    • /usr/share/menu/ -
80 Jak nainstalovat Windows jako druhý operační systém?
81 Co znamená subl -?
82 Jak nainstalovat clamAV?

Chyby a problémy

editovat

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. Nemusí se samozřejmě jednat o chyby, které generuje Bash a které se k Bash vztahují.

Č. 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
CH.3 No remote refs found similar to ‘flathub’
CH.4 E: Unable to locate package
CH.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.
CH.6 ls: cannot access '/diskD/Knihy/': No such file or directory Tato chyba vznikla po zadání příkazu ls /diskD/Knihy/. Jde tototiž o to, že lomítko (/) na začátku je interpretováno jako kořenový adresář, ale ve skutečnosti diskD, není u mne kořenovým adresářem. Aby to fungovalo, musel bych buď použít správnou absolutní cestu, nebo to zapsat jinak a použít relativní cestu. Absolutní cesta by byla: /home/juan/diskD/Knihy/. Relativní cesta by pak byla ls diskD/Knihy/. Fungovala by jen v případě, že bych byl ve svém domovském adresáři, tedy /home/juan/. Kdybych byl jinde, mohu domovský adresář volat pomocí tildy (~). Zápis by pak vypadal ls ~/diskD/Knihy/ (a stále se jedná o relativní cestu). Jinak koncový slash nemusí být, interpretu umí interpretovat ~/diskD/Knihy i ~/diskD/Knihy/. Podle chatGPT 3.5 je ale lepší tam to lomítko psát.


Problémy

editovat

Cílem tohoto kurzu je, abyste problémy buď přepracovali do podoby řešení (Jak něco udělat?) či otázek (Otázky). Nicméně někdy to člověku nejde a proto je tu tato sekce, kde si můžete otevřít problém, zapisovat si postup řešení a jiní Vám mohou do toho zkusit poradit.

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ñaUploader
editovat
  • 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
3: V terminálu je tilda (~) a nejde v něm pracovat
editovat
  • 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álu
editovat
  • 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á praxe

editovat

Zde je pokus si sepsat, co by člověk měl dělat správně při správně svého Linux zařízení přes Bash.

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 upgradovat
    • sudo apt upgrade – upgraduje balíčky
  • po odinstalování sw:
    sudo apt-get autoremove
    

Zálohování

editovat

Sem by to asi chtělo napsat obecné principy zálohování, práce s daty, nastavením systému (nebo na ně odkázat) a pak ukázat některé příklady jak je obsloužit prostřednictvím Bashe.

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


Skripty

editovat

Až zde vytvoříte pár skriptů, můžete se pustit do kurzu Bash pro středně pokročilé. Aby bylo jasno tak do subnadpisu uvádíme pokud máme pocit, že jsme skript správně napsali a otestovali (vyřešeno) či či ještě pracujeme (dořešit).

Po stisku klávesy kalkulačka se objeví MATE Calculator, nebo se přenese do popředí, ten již zobrazený (dořešit)

editovat

Příkaz vu spustí skript vicuna.sh (vyřešeno)

editovat
  • 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řes ls -l vu, případně udělíme práva spouštět všem skupinám přes sudo chmod +x vu
  • následně by příkaz terminálu vu měl spustit vicuna.sh

Každý týden vyskočí notifikační okno upozorňující, že je potřeba provést backup (dořešit)

editovat
  • Zde využívám nástroj cron a příkaz zenity. Postup je následující:
    1. Napřed si otevřu tabulku cronu a budu ji editovat pouze pro sebe jako přihlášeného uživatele: crontab -e (je otázka, jestli mi to bude vyhovovat a jestli nebude potřeba to předělat pro všechny uživatle)
    2. Poté vložím následující kód:
0 20 * * 7  zenity --info --text="Otevři Backups a zálohuj!" --no-wrap --width=600 --height=500

Znaky před zenity určují, kdy se příkaz zenity spustí. Funkce jednotlivých znaků cronu jsou následující:

  1. Minuty (možný rozsah 0 až 59), pokud chci tedy, aby se příkaz spustil přesně v 8 večer, musí zde být nula
  2. Hodiny (0 až 23), 20 je tedy 8 hodin večer
  3. Den v měsící (1 až 31) - jelikož nevím, který den v měsíci je neděle, dávám tedy hvězdičku, která určí, že se jedná o jakýkoliv den v měsíci
  4. Měsíc (1 až 12) - jelikož chci příkaz spouštět každý týden, musím sem dát hvězdičku
  5. Den v týdnu (1 až 7, neděle může mít hodnotu 7 i 0), pokud chci tedy příkaz spoustět každou neděli dám 7

A nyní příkaz zenity:

  • --info značí, že se jedná o informativní box
  • --text je samotný text v boxu
  • --no-wrap znamená, že se text nezalomí
  • --width a --heigth urči velikost boxu

Testování:

  • skrypt se nespustil a mám podezření, že důvodem je to, že byl nastaven v cronu pro aktuálního uživatele
    • tak podle chatGPT 4 se cron spouští tím uživatelem, který je přihlášený
  • pak mě napadlo, že možná skript nebyl spuštěn, protože byl zrovna počítač v režimu spánku
    • a G 4 to potvrzuje a navrhuje mi místo toho zkusit anacron (který mám nainstalován) a který je určen pro zařízení, která nejsou zapnuta 24/7
    • a v man anacron čtu, že se skript spustí v době na kterou byl naplánován, nebo hned jak vyjde ze zmražení
    • nicméně anacron neumí spustit script k určitému datu, kdybych chtěl spouštět každé pondělí tak to nedokáže, protože počítá vždy určitý čas od spuštění. Pokud se tedy spuštění kvůli vypnutému počítači posune o dva dny, třetí spuštění pak bude zase posunuté o dva dny. Takže tato cesta také není vhodná.

Debugování dle chatGPT 4:

  • Hypotéza zenity není v proměnné $PATH, protože cron může využívat jinou proměnou PATH
    • zjistíme, jaká je cesta k příkazu zenity: which zenity
    • zjistíme jaké cesty jsou v $PATH cronu: crontab -e a pak * * * * * echo $PATH > /tmp/cronpath.txt, zobrazíme micro /tmp/cronpath.txt a zjistíme, jestli je tam ta cesta
    • výsledek, je že zenity je v PATH cronu, můžeme odstranit * * * * * echo $PATH > /tmp/cronpath.txt z crontab a případně odstranit tento soubor rm /tmp/crontpath.txt
  • ...

Poznámky

editovat

Příkazy

editovat

Zde si strukturujeme informace o jednotlivých příkazech. Následujte příkladů.

Č. 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
  1. find . -type d -iname "*python*"
  2. find . -type f -iname "*python*"
  3. find . -type f -mtime -20
  4. find . -type f -mtime +20
  5. find -type f -mmin +1 -mmin -5
  6. find . -size +3G
  1. Najde (find) adresáře (-type d), které mají v názvu python (-iname "*python*"). Tečka, která se nemusí uvádět, označuje hledání od aktuálního adresáře a není potřeba (může být nahrazena cestou odkud hledat). d jako directory, f jako file. i v name zahrne i případná velká písmenka (z anglického caps insensitive), *python* je glob umožňující hledat cokoliv co má v sobě řetězec python.
  2. Stejné jako výše, jen hledá soubory (protože -type je f, tedy file)
  3. Najde (find) soubory (-type f), které byly modifikovány do 20 dní zpět (-mtime -20, tedy m - modifikovány, time - dny, - zpět, počet dní 20) ve stromu počínající aktuálním adresářem (.)
  4. Stejné jako výše jen hledá soubory modivikovaná, před více jak 20 dny (-mtime +20)
  5. Najde (find) soubory (-type f), které byly změněny před 2-5 minutama (-mmin +1 -mmin -5) a nachází se ve stromě pod aktuálním adresářem. Respetive změněny před více jak minutou a méně jak pěti minutami.
  6. Najde (find) všechny soubory větši než 3 giga (-size +3G) nacházející se ve stromě počínajícím od aktuálního adresáře (.). Pokud se nezadá typ, hledá v souborech, ale je možné hledat i dle velikosti adresářů (-type d). M je pro megabity a k pro kilobity.
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.
29 notify-send notify send upozorni pošli Příkaz pošle na obrazovku upozornění formou textu v baneru. notify-send "Dobré ráno!" V pravém horním rohu se objevý šedé okénko s nápisem Dobré ráno! Na Ubuntu ovšem po 5 sekundách okno zmizí. Ubuntu nerespektuje funkci critical, která by ponechala okno stále otevřené.

Nástroje

editovat

Pokud něco není příkaz, ale je to (i) nástroj. Definice nástroje není asi zcela přesná, kdyžtak upravte.

Č. 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ě)).
7 cron chronos čas Plánuje úlohy ke zpracování.


Přehledy

editovat

Instalace/odinstalace

editovat

V této sekci vytváříme podrobný postup způsobů instalace či odinstalace balíčků či softwaru. Jednotlivé kroky jsou samozřejmě volitelné, ale zde si ukazujeme kroky v režimu „doporučené a bezpečné“.

Jelikož není statistika distribucí Linuxu pro ČR, vycházíme ze světových statistik za rok 2022, že asi 50 % uživatelů používá Debian (Debian, Ubuntu) takže je balíčkovací systém debianu apt pro balíčky *.deb je na prvním místě. Na druhém místě jsou systémy odvozené od RedHatu (RedHat, CentOS, Fedora) s 20 % používající magery dnf a balíčky *.rpm. Globální balíčkovací systémy (snap, flatpack) následují poté.

Apt (systémy na bázi Debian)
Krok Co Kód Vysvětlení
1 update informací o balíčcích sudo apt update Před každým záměrem instalovat nový software přes příkaz apt, je dobré si stáhnout aktuální informace o debian baličcích. Ty se dají procházet i online, kde jsou seřazeny do různých kategorii.
2 nainstalovat micro sudo apt install micro Nainstaluje textový editor Micro. Micro je textový editor, který umožní lépe prohlédnout celkový seznam nabízených balíčků. Lze to udělat i v předinstalovaným Less. Na druhou stranu Nano má například problém celý seznam načíst.
3 vypsat seznam dostupných balíčků apt list | micro Vypíše seznam dostupných balíčků a pipne je do editoru Micro. Pokud nechcete používat micro, můžete si je zobrazit například v Less. Kód by pak byl sudo apt list | less.
4 vyhledat v micro CTRL+F ^ V Micro se dá hledat po stisku kláves CTRL+F řetězec. Pokud chcete hledat na začátku každého řádku, musíte před Váš řetězec vložit znak stříky (^).
5 zobrazit informace o balíčku apt-cache show balíček Pokud si nejste jisti, který balíček nainstalovat, můžete po opuštění Micro (CTRL+Q) vypsat informace o balíčku příkazem apt-cache show, tedy například sudo apt-cache show micro.
6 instalace programu viz bod 2
A vypsat seznam nainstalovaných apt --installed list
B odinstalace programu sudo apt remove název programu Takže například sudo apt remove nano odebere textový editor Nano.
C odinstalace knihoven sudo apt autoremove Odinstaluje nepotřebné závislosti (angl. dependiencies), které používal odnistalovaný sw.
D vyčištění cache sudo apt clean Vyčistí cache od nepotřebných souborů. To může urychlit chod počítače. Neovlivní to nainstalované aplikace.

Byť aplikace instalované pomocí příkazu apt, běží v jádru a mohou ho poškodit, jsou na druhou stranu kontrolovány správci repozitáře, takže by k tomu nemělo dojít. Horší by bylo instalovat aptem z jiných zdrojů. Pak jsou aplikace, které nejde kontajnerizovat, tak zcela logicky jedou přes apt (jako například flatpak).

dnf (systémy na odvozené od RedHat)
Krok Co Kód Vysvětlení
1 update informací o balíčcích sudo dnf check-update
2 vypsat seznam dostupných balíčků dnf list available | micro V tomto případě pro přehlednost posíláme seznam dostupných balíčků do editoru micro.
3 vyhledat v micro CTRL+F ^ V Micro se dá hledat po stisku kláves CTRL+F řetězec. Pokud chcete hledat na začátku každého řádku, musíte před Váš řetězec vložit znak stříky (^).
4 zobrazí informace o specifickém balíčku dnf info balíček
5 nainstaluje konkrétní program sudo dnf install balíček
A odinstaluje program sudo dnf uninstall název programu
B odinstalace závislostí sudo dnf autoremove Odinstaluje knihovny, které už nejsou potřeba. Zpravidla ty, které používala právě odinstalovaná aplikace.
C vyčistí cache sudo dnf clean all Vyčistí cache od nepotřebných souborů. To může urychlit chod počítače. Neovlivní to nainstalované aplikace.
Snap
Krok Co Kód Vysvětlení
1 Najít odpovídající balíček snap find název balíčku Jelikož se na rozdíl od balíčků typu apt nevytváří v PC seznam dostupných balíčků, je možné pouze vyhledávat konkrétní, nebo se podívat na web snapů: https://snapcraft.io/store. Příkaz by tedy mohl vypadat: snap find kdenlive.
2 Informace o balíčku snap info název balíčku Zobrazí podrobnější informace o balíčku včetně vydavatele a krátkého popisu.
3 Instalace sudo snap install název balíčku Nainstaluje balíček, který obsahuje samotný program plus software, který tento program potřebuje (angl. dependecies).
A Odinstalace sudo snap remove název balíčku Odinstaluje konkrétní program a jeho závislosti.

Jsou kritizovány za to, že repozitáře moc nekontrolují kód. Nicméně snapy mohou být zapouzdřeny a nevyužívat tak vnější prostředky (kategorie strict). Pokud instalujeme soubor, který nemá pevné zapouzdření, jsme na to upozornění (např. kategorie classic). Snapy mají různé úrovně zapouzdření:

  1. strict - jede pouze ve své obálce a nemůže používat nepřidělené zdroje
  2. classic - funguje jako aplikace instalovaná přes klasický apt, tedy využívá prostředky mimo zapouzdření. Může představovat určitou úroveň hrozby
  3. devmode - dočasné zapouzdření určené pro vývoj, ovšem s širokou možností využívat zdroje
  4. jailmode - zapouzdření pro snapd a jeho vývoj s omezenými možnostmi využívat prostředky
Flatpak
Krok Co Kód Vysvětlení
1 nainstalovat flatpak sudo apt install flatpak Instalujeme příkazem apt.
2 ověření jestli jsou připojeny repozitáře flatpak remotes Pokud už je Flathub nastaven, nemusím nic dál řešit, v opačném případě ho nastavíme následujícím krokem.
3 připojení Flathub repozitáře flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
Odinstalace repozitáře flatpak remote-delete název repozitáře Takže například v případě odebrální repozitáře Flathub, by příkaz vypadal následovně: flatpak remote-delete flathub.
4 Updatovat informace o balíčcích flatpak update
5 Vypsat seznam dostupných balíčků v repozitáři flatpak remote-ls
6 Zobrazit podrobnější informace o balíčku flatpack info ID balíčku Zde se neuvádí jméno, jako u příkazu apt, ale rovnou ID balíčku (označeno je to ale jako ID Application), ta je ve druhém sloupci zleva ve výpisu. Dotaz by zněl flatpack info org.telegram.desktop.webview.
7 instalace balíčku flatpak install název repozitáře ID balíčku Takže například flatpak install flathub net.kvirc.KVIrc instaluje balíček KVIrc z repozitáře Flathub.
A vyjet seznam nainstalovaných aplikací flatpak list --app Důvod proč to děláme je, abysme zjistili ID balíčku, který chceme odinstalovat. Atribut --app vypíše pouze aplikace. Pokud bysme potřebovali řešit i jiné balíčky, pak stačí napsat flatpak list.
B odinstalujeme aplikaci flatpak uninstall ID balíčku Takže například flatpak uninstall net.kvirc.KVIrc.
C odinstaluje nepoužívané závislosti v prostředí flatpak flatpak uninstall --unused Slouží k pročištění systému na podobné bázi jako sudo apt autoremove. Jeližkož flatpak a apt pracují každý v jiným prostředí, zároveň také nesdílí závislosti a nemůže se stát, že by jsme odinstalací knihoven ve flatpaku znefunkčnili nějakou aplikaci nainstalovanou přes apt.
odinstalace flatpaku sudo apt remove název programu
odstranění závislostí sudo apt autoremove

Installují pouze dektopové aplikace (tedy nenabízí aplikace do příkazového řádku) bez použití administrátorských práv (sudo). Flatpakové aplikace používají systémy postavené na kontajnerizaci (např. běží ve svém jmenném prostoru) tak, aby se oddělili od hlavního systému.

PPA repozitář pro apt
Krok Co Kód Vysvětlení
0 zjistit, jestli není zkontrolovaný balíček v apt repozitáři apt list | micro Jde totiž o to, že pokud je balíček dostupný ve zkontrolovaném repozitáři, tak po zadání sudo apt install název balíčku, stejně apt nainstaluje balíček z zkontrolovaného repozitáře, nikoliv z PPA. Apt totiž volí ten balíček, který je novější a z repozitáře, který je uveden první v seznamech repozitářů. Pokud jsme tedy nepozmněnili seznami repozitářů, či neuděli jiné piny, nainstaluje se to z toho oficiálního.
1 získat ppa Někde na webu, nebo si ho vyhledat v repozitáři launchpad.net
2 přidat repozitář sudo apt-add-repository ppa:název repozitáře/ppa Takže například sudo apt-add-repository ppa:jeffreyratcliffe/ppa.
3 updatovat informace o balíčcích sudo apt update
4 nainstalovat balíček PPA sudo apt install název balíčku Pokud bych chtěl apt donutit, aby instaloval balíček z konkrétního repozitáře (viz krok 0), musím použí následující příkaz: sudo apt-get install -t název repozitáře název balíčku.
A odinstalovat program sudo apt remove název programu
B odinstalovat nepoužívané závislosti sudo apt autoremove

PPA je archiv repozotářů od Canonical (stejná firma spravuje oficiální apt repozitář) pro nezkontrolované balíčky vývojářů (každý balíček má většinou vlastní repozitář). Zde je tedy při každé instalaci balíčku potřeba mít daný balíček nebo daného vývojáře ověřeného, aby nedošlo k zanesení škodlivého systému. Ideální je před instalací a spoštěním systém zazálohovat. Fakt, že má každý vývojáře či balíček vlastní repozitář umožňuje oddělit balíčky a dobře vyhledávat odkud jsou. Odděluje se tím odpovědnost za špatný kód.

Instalace z kódu (např. GitHub)
Krok Co Kód Vysvětlení
0 podívat se jestli je instalátor a instalační návod Jednoduší je instalovat poskytnutým instalátorem. Pokud neni dostupný ani návod instalace, může to být docela složité. Konfigurační skrypty se nazývají většinou *configure*. A spouští se příkazem ./configure. Nápověda bývá v souborech nazvaných readme, install či build.
1 stáhnout zdrojový kód
2 sestavení softwaru (angl. build) Build, česky sestavení je převod kódu z člověku čitelné podoby do binárního kódu pro počítač. To se dělá přiloženým instalátorem, nebo příkazem make. Projekt ale musí obsazovat makefile soubor s instrukcemi, jak program složit.
3 instalace Instalace je umístění binárních souborů tak, aby byly spustitelné. To se dělá přiloženým instalátorem, nebo příkazem make.

Samoinstalace softwaru je složitá, nainstalovaný software se pak sám neupdatuje a bývá problém ho odinstalovat.

Zvážít zpracování appimage, dkpg

  1. Bash Reference Manual. www.gnu.org [online]. [cit. 2023-04-18]. Dostupné online. 
  2. Bash Reference Manual. www.gnu.org [online]. [cit. 2023-04-18]. Dostupné online. 
  3. Using case statements. tldp.org [online]. [cit. 2023-04-18]. Dostupné online. 
  4. case Man Page - Linux - SS64.com. ss64.com [online]. [cit. 2023-04-18]. Dostupné online. 
  5. bash - Console doesn't render according to man manual. Unix & Linux Stack Exchange [online]. [cit. 2023-03-28]. Dostupné online. (anglicky) 

Externí odkazy

editovat