1. hodina
Co je Linux
UNIX
- Ochranná známka pro operační systémy, co dodržují Single UNIX Specification. Definují API (systémové volání) pro komunikaci s hardwarem.
Linux
- Jedná se o operační systémy založené na Linux kernelu, který je Unix-like a dodržuje POSIX (portable operating system interface).
- Správným názvem se myslí GNU/Linux, tedy se sem počítá jak Linux kernel, tak aplikace, utility a další software.
- Linuxová distribuce je balíček Linuxového jádra a uživatelských aplikací.
vlastnosti Linuxu
- OSS (open source software)
- konfigurace v textových souborech
- GUI (grafické uživatelské rozhraní) - většinou není potřeba
- CLI (rozhraní příkazové řádky) - přesné a zautomatizovatelné
- všechno je soubor - proto stačí jen jedno API pro všechno
- víceuživatelský - více uživatelů může používat systém naráz, vzdáleně i lokálně
- balíčky - pro instalace aplikací, ty se pak lépe udržují a automaticky aktualizují
- lze řídit všechno - pomocí CLI
Pracovní prostředí
- ovlivňují vzhled a způsob ovládání Linuxu.
mezi nejčastěji používáné patří:
- GNOME, Plasma (KDE), Xfce, LXDE - podobné prostředí ostatním OS
- Openbox, i3 - ovládájí se většinou klávesnicí, steep learning curve
Zkratky v Linuxu
Super(Windows key) + L- logs the user outCtrl + Q- quits current application
Odbočka: Git (správa verzí kódů)
- sledování změn a zapamatování předchozích stavů.
2. hodina
Příkazová řádka
- Pomocí CLI lze systém ovládat přesně. Uložené soubory s příkazy se nazývají skripty. Namísto programovacích jazyků, kde se spouští funkce, tak se v CLI se spouští programy.
Názvy souborů a cesty
- název souboru + adresář = cesta
- Oddělovačem v adresáři je
/dopředné lomítko. - Na Linuxu se v cestě rozlišují velká a malá písmena.
- adresář je speciální typ souboru. Vše je soubor.
Kořenový adresář
- root/kořenový adresář je jediné dopředné lomítko
/
Relativní a absolutní cesta
- relativní - Nezačíná lomítkem.
adresar/soubor.txtPotřeba zkombinovat s aktuální absolutní cestou. - absolutní - Začíná lomítkem.
/adresar/soubor.txtKonkrétní soubor nehledě na tom, ve kterém adresáři právě jste.
Speciální adresáře
..- nadřazený (rodičovský) adresář. Příklad: lze zkombinovat/home/documents/films/../dopis.odtzkráceně jako/home/documents/dopis.odt.- aktuální adresář. Takže (relativní cesta) lze napsat./bin/knihy/harry_poter.epubnebobin/knihy/harry_poter.epub
Přípony souborů
- Linux nevyžaduje použití přípon u soborů a soubory mohou fungovat bez nich.
- Jiné soubory mohou mít přípon více, např.
tar.gz(tape archive komprimován gzipem). Ty pak jsou vyvíjeny nezávisle a lze změnit gzip jiným komprimovacím algoritmem bez ohledu na archivační algoritmus.
Skryté soubory
- Soubory s předponou
.Jsou většinou skryté, protože se nepředpokládá, že by s nimi uživatel potřeboval přímo pracovat. Lze je odhalit v CLI nebo GUI. - např.:
.gitignorepro nastavení pravidel gitu nebo.configpro nastavení Linuxu
Práce s terminálem
[intro@localhost] ~je prompt. A~odkazuje na domovský adresář, ale ten může být delší. V domovském adresáři se ukládají všechny soubor uživatele včetně nastavení prostředí jako.config.- Shell - zobrazuje výzvu a jedná se o plnohodnotný programovací jazyk. Shell je program běžící uvnitř terminálu (emulátoru terminálu).
etc/pass- adresář sloužící ke konfiguraci Linuxu
Zkratky/Používání
Ctrl + Left/Right Arrow- přeskakování slovUp/Down Arrow- načítání předchozí zadané příkazyEnter- spuštění příkazůCtrl + D- ukončení terminálu (nejčistší způsob)Ctrl + C- násilné ukončení programuCtrl + Shift + CneboSelect Text- zkopírování obsahu do schránkyMiddle Mouse Button- vloží se text ze schránky
Příkazy
exit- ukončení termináluuptime- vytiskne dobu běhu strojels- "list", zobrazí seznam souborů v aktuálním adresářils -l- "list long", tzv. dlouhý režime, kde -l je přepínačls -la- vypíše i skryté soubory (v long list)ls -a- vypíše i skryté soubory bez přepínače longls -lh- vypíše velikosti souborů čitelné pro normálního uživatelels -lt- vypíše seřazené podle času modifikacels -l one.txt two.txt three.txt four.txt- zobrazit si informace pouze k určitým souborům v adresářils -l *.txt- zobrazí informace jen k souborům s příponou .txt (tzv. wildcards = zástupné znaky pro určení více souborů najednou, řadí abecedně)ls t*- vytiskne všechny soubory začínající tls [of]*.txt- vytiskne soubory začínající na o nebo f s příponou .txtls *[a-f].txt- vytiskne všechny soubory s příponou .txt, co končí na písmena a až fls -d D*- vypíše soubory začínající na písmeno d, ale s přepínačem -d, který zabrání, aby byl vypsán i obsah těchto souborů (adresářů)ls x?.txt- vypíše soubory, co mají 6 znaků, tedy x_.txt, kde _ je libovolný znakls -a ~nebols -d ~/.*- vypíše všechny skryté soubory bez obsahu v domovském adresáři (ne root)ls --colorzobrazí soubory barvamils -Fspustitelné soubory označí * a adresáře /
cd- "change directory", změní aktuální adresář na adresář daný argumentem. Např.:cd Documents- do složky Documentscd ..- do nadřazeného adresářecd .- změní na aktuální adresářcd- bez argumentů změní na domovský adresář
pwd- vypíše celou (absolutní) cestu k aktuálnímu adresářicat- "concatenate" - vypíše obsah souboru, lze použít i ke spojovánícat *- vypíše obsah všech souborůcat [0-9][0-9][0-9].txt- vypíše obsah všech souborů s názvy [000-999].txt
tac- rozšíření cat a vypíše řádky souboru obráceněhexdump- vypíše bajty souboru v hexadecimálním tvaruhexdump -C c/image.bmp- přepínač -C slouží k vypsání ASCII znaků vedle hexdumpu
file- slouží k zobrazení metadat k souboru jako typ souboru, u obrázku velikost atd.man [argument/cmd]- "manual", slouží k zobrazení dokumentace k určitému příkazuman cat- zobrazí přepínače a způsob použití příkazu catman man- zobrazí úplný seznam sekcí/- po otevření manuálu se dá pomocí lomítka vyhledávatq- vypne manuálUp/Down Arrow- navigace v manuálu
--help- přepínač, funguje u většiny programů GNU, vypíšou nápovědu--versionnebo-vnebo-V- přepínač, vypíše verzi a autorská práva programu--verbosenebo--debug(občas-vnebo-d) - spustí program v debug režimu, kdy program vypisuje podrobně, co dělá--dry-run(občas-n) - spustí program bez toho, aniž by provedl jakékoliv změny, např. vypsání souborů, které by odstranil--interactive(občas-i) - program požádá o potvrzení při destruktivních akcích--- ukončí seznam přepínaču, hodí se pokud existuje v adresáři soubor začínající pomlčkou. Hodí se často používat pro jistotu.ls -l -h -- *.txt- bezpečná konvence, příkaz, přepínače, ukončení přepínaču a wildcard nebo název souboru. Toto vypíše "lidsky" velikosti a názvy souborů s příponou .txt
\- pokud použijeme soubor s mezerami v názvu, tak mezery jdou escapovat pomocí zpátečního lomítka\, tedyls tady\ je\ mezera.txtwget [URL]- stáhnutí souboru do aktuálního adresářeecho- vypsání řetězce na stdout (standard output)cut- na extrahování částí z vstupu nebo souboru (tiskne části řádků)cut -d : -f 1- spustí vstup pomocí stdin,-d :specifikuje delimiter:, na které se má text rozdělit a-f 1vezme první část z rozdělených úseků-b- ignore leading blanks
- I/O redirection - pomocí operátoru
>, tedy> soubor.txtse text nevypíše do příkazové řádky, ale do souborusoubor.txt. Např.:echo Hello World > hello.txt- operátor
>>appenduje text na konec specifikovaného souboru místo přepisování/tvorby nového - operátor
<umožňuje číst ze souboru na místo zapisování
- operátor
uniq- vytiskne jen unikátní- s argumentem
-c- vypíše i počet
- s argumentem
sort- seřadí-n- podle čísel, např. pouniq -czavolám a předám stdout pomocí|-t,- field delimiter-k2,2- select fields, so selected from field 2 to field 2sort -n -k 2 -r- tohle řadí podle čísel ve druhém sloupci v opačném pořadí
|- roura, předává stdout na stdin, např.:cat text/*.txt | sort- seřadí obsahu textových souborů podle abecedyhead -n 3- vypíše jen první 3 řádkytail- opak head, vypíše poslední řádkytail -n +2- odstraní první řádektail -n 2 /etc/passwd /etc/groups- vypíše poslední 2 řádky z obou souborů
paste- vypíše do stdout předané řádky textu z stdin-d argument- delimiter, přidá mezi předanými vstupy-s- serial, vypíše najednou, ne paralelně
cp- kopíruje soubory a adresářebc- kalkulátorgrep- používá se k hledání určitých informací v textused [path]- na hledání a úpravů dat rychlewc- vypíše počet řádků, slov a znaků v datechwc -l- vypíše počet řádků souboru v argumentu
join- spojí setříděné soubory podle společných sloupečkůrev- otočí pořadí znaků na každém řádkurm- odstraní soubory nebo adresářermdir- odstraňuje adresářescp- bezpečně kopíruje soubory napříč strojitar- archivační nástrojtest- porovnává hodnoty a rozhoduje o typech souborůtr- přeloží (nahradí) nebo odstraní znaky (písmena)who- vypíše 2 přihlášené uživatele, druhý se právě přihlásil do GUI a první do CLIwhoami- vypíše, kdo je přihlášenexport- vypíše dočasné proměnné
Doplnění tabulátorem
- Např. při psaní argumentu
cd Doc, tak pokud v daném adresáři existuje jediný možný soubor začínající na Doc, tedy Documents, tak se to doplní nacd Documents. - V ostatních případech je třeba
Tabstisknout vícekrát pro zobrazení možných příkazů nebo všech souborů, co odpovídá danému argumentu pokud nejjednoznačné.
Midnight commander
- Spustí se příkazem
mc - čísla dole odkazují na fuknční klávesy
Ovládání
-
F1- Help -
F2- Menu, otevře víc příkazů pro soubor -
F3- zobrazí obsah souboru -
F4- otevře textový editor (s syntax highlighting) pro editaci souboru -
F5- Copy, zkopíruje soubor do jiného adresáře -
F6- Move, změní adresář souboru -
F7- MKDIR, vytvoří nový soubor -
F8- Delete -
F9- Vybere nabídku MC a umožní interagovat pomocí klávesnice -
F10- Quit -
Tab- přepínání mezi panely vpravo a vlevo -
Insert- umožňuje vybrat soubory (pro provádění akcí jako smazání) -
+- umožní zadat masku pro výběr více souborů najednou -
Ctrl + o- skryje panely a dočasně přepne do shellu, ale nezamkne ho
Ranger
- správce souborů inspirovaný Vimem
Ovládání - procházení
q- ukončí rangerj- posun dolůk- posun nahoruh- přesun do nadřazeného adresářel- otevření souboru nebo přesun do adresářegg- přejít na začátek seznamuG- přejít na konec seznamugh- přesune aktuální adresář do domovského adresáře, nebo-licd ~gm- přesune do souboru /media, nebo-licd /mediagr- přesune aktuální adresář do/, nebo-li root, tedycd /
Ovládání - práce se soubory
zh- zobrazí skryté souborycw- přejmenuje aktuální souborSpacebar- vybere aktuální souboryy- vyjmutí (kopírování) souboru nebo více souborůdd- označení vybraných souborů pro operaci vystřiženípp- vložit vyjmutý nebo vystřižený soubor/souborydD- odstranění vybraných souborů
Úpravy souborů
- mezi nejpoužívanější patří: Emacs, Joe, mcedit, nano a Vim
- otevírají se pomocí příkazu + argumentu, např.
mcedit hello.py - jedná se o TUI editory, takže jsou vesměs dostupné v terminálu bez grafického rozhraní a tedy lze s nimi pracovat vzdáleně.
3. Hodina
Skript
-
pomocí shellu, což je jazyk příkazové řádky
-
Ukládají se do souborů s příponou
.sh, naprikladskript.sh -
Následně se spouští pomocí příkazu
sh, celý příkaz budesh skript.sh. Který spustí interpretr jazyka shell. -
Je potřeba specifikovat interpretr a ten se specifikuje pomocí shebangu/hasbangu, nebo-li
#!- Pro shellové skripty se používá
#!/bin/sh - Pro pythonové skripty se používá
#!/usr/bin/env python3 - Další:
#!/bin/bash- bash je rozšíření shellu
- Pro shellové skripty se používá
-
Pro označení souboru jako spustitelný je třeba provést
chmod +x skript.sh, pak lze soubor spustit pomocí:./skript.sh- Musí se použít
./, protože se shell dívá první dousr/binnebo-li$PATH, kde je většina spustitelných souborů a do aktuálního adresáře se nepodívá, proto je potřeba specifikovat relativní cestu
- Musí se použít
-
Při spuštění skriptů má proces vlastní pracovní adresář, který nijak neovlivní ostatní procesy, tedy shell uživatele pokud budu chtít ve skriptu měnit adresu.
- Z toho důvod je
cdbuiltin funkce shellu a nejedná se o normální skript/program
- Z toho důvod je
Argumenty příkazové řádky (Python)
- pomocí
import sysa argumenty jsou ve formátu'-d','argument2'...
#!/usr/bin/env python3
import sys
def main():
for arg in sys.argv:
print(arg)
if __name__ == '__main__':
main()
Stdout, Stdin
- jsou knihovny pro čtení a vypisování. V pythonu je k nim možné přistoupit přes
import sys.stdina neboimport sys.stdout- pak se používají pomocí
sys.stdin.readline()a nebo pro čtení více řádek:for line in sys.stdin - nemusí se soubor uzavírat, protože se uzavře sám po dokončení přístupu
- pak se používají pomocí
- např.: při použití
cut -d : -f 1se spustí stdin a ukončí seCtrl+D, což je něco jiného nežCtrl+C
I/O redirection
- low-level přesměrování výstupu pomocí argumentu
> soubor.txt, ale tohle se nepředává v sys.argv, nemusí o tom program vědět - soubor se přepíše a nelze obnovit, proto se doporučuje používat
Tabpro zjištění zda daný souboru už existuje - příklad:
cat 1.txt 2.txt > 12.txt - příklad č.2:
tac 1.txt 2.txt > 2.txt(při přesměrování na úrovni shellu se souboru 2.txt smaže, takže se uloží jen opačné pořadí souboru 1.txt do 2.txt)
Filtry
- jsou vlastně příkazy na úpravu standard inputu a předání, např.:
sort,cut,cat,tac,head,tail,uniq,wc,grep,sed,nl cut -d : -f 1 </etc/passwdacut -d : -f 1 /etc/passwdvypíšou to samé, ale první je předán text cutu pomocí shellu a musí to otevírat shell a kdyžtak nahlásit chybu, ten druhý případ se předá souboru příkazu cut a ten zpracuje soubor a řeší případné chyby
Roury (pipes)
-
skládání proudových dat
-
místo toho, abych zapisoval do dočasného souboru a omlyme přepsal nějaký soubor, tak použiju
|, což vlastně znamená, žestdoutpošlu nastdin -
cat logs/*.csv | cut -d , -f 5 | sort | uniq -c | sort -n -r | head -n 3- seřadí csv soubory v určitém formátu podle počtu výskytů a vypíše první 3 -
cat logs/*.csv | cut -d , -f 5 | paste -s -d + | bc- spočítá byty logů pomocí bc kalkulátoru a paste, který zformátuje do stdout předaný stdin -
stdin je dostupný i uvnitř skriptů pro tvoření pipes
#!/bin/sh
cut -d : -f 1 | sort
- tento skript se propojí s pipeline:
cat /etc/passwd | ./column.sh | tail -n 5
další příklady:
cut -d : -f 1,3 /etc/group- vypíše první a třetí sloupec souboru /etc/group<skore.txt tr -s ' ' | cut -d ' ' -f 2- | tr ' ' '+' | bc | paste score.txt - | tr '\t' ' '- pomocí rour, takže -s (squeeze zredukuje mezeru na jednu), 2- je od 2. až na konec, pak nahradí mezeru za +, pak spočítá, paste pak spojí 2 vstupy po sloupcích, kde-znamená vzít z stdin,tr '\t' ' 'nahradí tabulátor mezerougrep -F vendor_id /proc/cpuinfo | cut -d : -f 2 | cut -b 2- | sort | uniq- vytiskne výrobce CPUsort -t, -k2,2n file- seřadí podle čísel v druhém sloupic odděleném čárkou
4. Hodina
-
gitje verzovací nástroj -
výběr editoru. Přidáním
export EDITOR=mceditnebo jiného editoru (např. vim, nano ...) na konec souboru~/.bashrc- pak lze spustit (po restartu terminálu)
$EDITOR ~/.bashrca tím se spustí daný editor se souborem~/.bashrc - takhle se nastavila proměnná prostředí EDITOR (používají ji ostatní programy k funkci)
- TUI editory jsou superior od GUI, protože např. při psaní commit zprávy se správně zpracuje instance a nepošle se prázdný commit
- pak lze spustit (po restartu terminálu)
Příkaz git
- píše se vždy ve formě
git podprikaz --help. Takžegit, pak podpříkaz (např.config,commit) a pak parametry a nakonec data- podpříkazů je hodně (cca 100), ale většinou stačí jen asi méně než 20
Nastavení Gitu
- každý commit má autora, proto je potřeba nastavit prostředí
- přepínač
--globalznamená, že nastavení platí pro všechny gitové projekty
- přepínač
git config --global user.name "My Real Name"
git config --global user.email "My E-mail"
- lze použít i bez přepínače
--global, nastaví identifikaci jen lokálně, např. pro odlišení identit
Git init
git init- vytvoří prázdný lokální repozitář gitu, lze později propojit se vzdáleným
Git clone
-
klon projektu je tzv. Pracovní kopie nebo-li Working Copy, je to 1:1 kopie a lze projekt na GitLabu obnovit z této kopie
- nekopíruje se wiki, issues, ty nejsou verzované gitem
-
git clone- příkaz na zkopírování a vytvoření working copy -
nastavení přihlášení se dá obnovit pomocí:
export GIT_ASKPASS=""
export SSH_ASKPASS=""
git clone ...
Git status
git status- vypíše aktuální změny lokálně oproti projektu v GitLabu- Changes not staged for commit = vidím změny v souborech
- Untracked files = nové soubory (nevypisují se všechny soubory adresářů)
Git diff
git diff- zobrazí změny v souborech@@ -3,3 +3,5 @@- změny v řádcích-3,3- stará verze je od řádku 3 do řádku 3+3,5- nová verze je od řádku 3 do řádku 5
+ nějaký text- přidaná řádka- nějaký text- odebraná řádka
Git add
-
přidání do stagingu (tedy zahrnutí do další verze commitu)
-
git addgit add .- přidá všechny souborygit add adresar/soubor.txt- přidání určitého souboru
-
v
git statusse to projeví tím, že se dané změny přesunou do sekce Changes to be commited
Git commit
-
git commit- otevře příslušný editor, kam se napíše commit zpráva a tím se vyčistí změny a může se pracovat na další změněgit commit -m "příslušný commit název"- rovnou nastaví zprávu commitu,-mznamená message
-
git statusv tomhle případě napíše Your branch is ahead of 'origin/master' by 1 commit, proto je potřeba změny poslat na server
Git push
git push- nahraje všechny změny na server
Git log
git log- vypíše všechny commitygit log --oneline- vypíše všechny commity kompaktněgit log --max-count=20 --oneline- jen 20 posledních kompaktně- lze použít
git lspo nakonfigurovánígit config --global alias.ls 'log --max-count=20 --oneline' - další
ll = log --format='tformat:%C(yellow)%h%Creset %an (%cr) %C(yellow)%s%Creset' --max-count=20 --first-parent
- lze použít
Git pull
-
git pull- stáhne změny ze serveru, dokáže začlenit změny z GitLabu a na lokálním repozitáři -
práci začít
git pulla skončitgit push
Git blame
- pro získání overview, kdo modifikoval, kterou řádku kódů a v jakém commitu
Použití jiných interpretrů
-
do shebangů lze napsat jiné soubory a ty se spustí, např.
#!/bin/catnebo i vlastní soubor v pythonu, ale absolutní cestou- lze vlastně vypustit příponu souboru
-
např. my-cat má obsah jen
#!/bin/cata my-echo jen#!/bin/echo, pak./my-cat my-echospustí vlastně složení:/bin/cat my-cat my-echo -
pro úkoly (testy) lze spustit:
./bin/run_tests.shči jeho podmnožina./bin/run_tests.sh 04...
Přesměrování vstupu a výstupu
Standardní chybový výstup
- v případě, že například soubor neexistuje, tak místo toho, aby se chybová hláška dostala do
stdinprogramu, tak se pošle pomocístderr(standard error [output])- nepřesměrovává se spolu s
stdoutpomocí příkazu>
- nepřesměrovává se spolu s
Deskriptory souborů
-
je to číslo otevřeného souboru, proto se musí soubory otevírat před tím, než se do nich zapisuje nebo se něco vypisuje
-
je to identifikátor, který si operační systém udržuje v tabulce otevřených souborů a volají se pomocí nich syscall
-
0,1,2 je popořadě systdin, systdou, systderr v deskriptorech a syscallech
-
lze přesměrovat stderr pomocí 2
- např. neexistuje adresář nonexistent.txt
cat one.txt nonexistent.txt two.txt > merged.txt 2>err.txt
- např. neexistuje adresář nonexistent.txt
Obecné přesměrování
-
>&2- přesměruje stdout na stderr- např. pokud nechceme vypsat všechny detaily při použití
wget
- např. pokud nechceme vypsat všechny detaily při použití
-
>output.txt 2>&1nebo&>output.txt- přesměrování stdout a stderr do jednoho souboru,2>&1říká tam, kam jde stdout>output.txt 2>output.txtnefunguje, protože shell musí otevřít soubor dvakrát
Speciální soubory
-
/dev/nullcat one.txt > /dev/null-/dev/nullje speciální typ souboru, kam lze něco přesměrovat, pokud nás to nezajímá
-
/dev/full- simuluje disk, co je plný a vždy vrátí chybu při zápisu
-
/dev/stdin- reprezentuje file descriptor 0, tedy stdin, v programech se dá zaměňovat často za
- ./funkce.py /dev/stdin one.txt < two.txt- přesměruje složený one.txt a two.txt na stdin pro python program, two.txt je složený přes OS
- reprezentuje file descriptor 0, tedy stdin, v programech se dá zaměňovat často za
-
/dev/stdout- pokud program chce zapisovat do souboru, ale ty mu hodíš
/dev/stdout, což přesměruje na výstup
- pokud program chce zapisovat do souboru, ale ty mu hodíš
Návratová hodnota programu (exit code)
0signalizuje úspěch, jakékoliv jiné číslo neúspěch
Nastavení selhávání
-
začít příkaz pomocí těchto zkratek:
set -o pipefail- chyba kterékoliv části pipeline způsobí ukončení celé pipelineset -e- ukončení programu v případě chybyset -u- ukončení skriptu v případě neinicializované proměnné- společně:
set -ueo pipefail- dobrá praxe začínat každý skript tímhl příkazem
-
set -ueo pipefail cat /dev/urandom | head -n 1 | hexdump- cat ukončí s chybou kvůliset -o pipefail, protože cat vypisuje, ale head ukončí příkaz jakmile vypíše jeho počet řádků a další nečtě, ale cat dál vypisuje, takže to, že to nikdo nečte se naštve a ukončí program, pomocí||tomu lze zamezit před head
Přizpůsobení shellu
Aliasy
-
je to definování příkazů bez vytváření skriptů
-
alias l='ls -l -h'- definuje nový příkaz l- ale jen na dobu běhu shellu, pak se přepíšou
-
dají se nadefinovat v konfiguračním souboru shellu, např.
~/.bashrc
Nastavení promptu
-
PS1=''- nastaví prompt na prázdný -
PS1='Prikazy:' -
PS1='\u: \w '- jméno uživatele a aktuální adresář -
lze měnit i barva, přidat datum pomocí
$( date )
5. Hodina
- asymetrické šifrování, viz. Úvod do počítačových sítí ze ZS
- doporučuje se používat na více počítačích více párů veřejných/soukromých klíčů
- v Linuxu jsou veřejné/soukromé klíče uloženy v textových souborech
SSH (Secure shell)
- port 22, ale může ho správce serveru přepnout
ssh LOGIN@NAZEV_VZDALENEHO_STROJE
-
ssh user@localhost- připojení na loopback adresu (127.0.0.1), pokud je port otevřen k připojení -
ssh- většinou klient ssh, protože se připojuje k serveru SSHssh -v- vytiskne log a detaily připojení k SSH
-
po připojení se zobrazí otisk serveru, např. ECDSA, RSA, ED25519
- pokud se otisk změnil - může to být man-in-the-middle útok
-
nastavení $PS1
export PS1='\u@\h \w\$'- zobrazí uživatelské jméno, jméno hostitele a pracovní adresář bez barvy
-
uname -aahostname -f- pro oveření, že jsem na jiném počítači -
free -h- zobrazí kolik paměti je volné -
uptime- zobrazí údaje o době běhu
### spuštění jednoho příkazu přes ssh
ssh login@host uname -r > local.txt- spustí se na vzdáleném stroji a zapíše do lokálního souborussh login@host "uname -r > remote.txt"- celý příkaz se spustí na vzdáleném stroji
přihlášení bez hesla
-
vytvořit pár klíčů a zkopírovat veřejný na vzdálený počítač
- generuje vždy na lokálním počítači (nebo na vzdálenem pokud se připojuje dál, např. github)
-
ssh-keygen -t ed25519 -C "name@email.com"- uloží se do adresáře
~/.sshklíčeid_ed25519soukromý aid_ed25519.pubveřejný - pro správu více klíčů se používá přepínař
-inebo-lissh-copy-id -i ~/.ssh/muj_specificky_klic uzivatel@vzdaleny_hostitel- tohle nahraje klíč na vzdálený počítač, uloží se do~/.ssh/authorized_keys
- uloží se do adresáře
kopírování souborů
-
na vzdálený počítač:
cat local.txt | ssh login@host "cat > remote.txt" -
na lokální počítač:
ssh login@host cat remote.txt > local.txt -
scparsync- pro kopírování více souborů přes SSH -
pomocí
mc- v panelu nahoře right a tam lze zadatlogin@hostpod shell link
konfigurace SSH
- v
~/.ssh/config, syntaxe je vman 5 shh_config
Host *
IdentityFile ~/.ssh/id_ed25519
Host intro
Hostname server.cz
User LOGIN
- pak lze napsat jen
ssh introa připojí se pomocí klíče k SSH serveru
Git
-
lze se připojit k SSH git serveru
-
pomocí ssh adresy
git clone git@server:adresar/repozitar.git
Síťové nástroje
ipaip addr- příkaz na správu sítě
Network Manager
- CLI rozhraní se spustí pomocí
nmcli
Změna ip konfigurace
- pro nastavení ip adresy mimo DHCP, např. propojí počítačů při přenášení souborů
sudo nmcli connection add con-name wired-static-temporary ifname enp0s31f6 type ethernet ip 192.168.177.201/24
-
nastaví spojení přes ethernet, kde
con-nameznamená název profilu, a musí se uvést adresa s maskou -
sudo nmcli connection up/down/delete nazev-profilu- na správu profilu a připojení, sudo je administrátor
nmcli connection add con-name wifi-temporary ifname wlp58s0 ssid "nazev site" wifi-sec.key-mgmt "wpa-psk" wifi-sec.psk "heslo" ip4 192.168.177.203/24
- tohle vytvoří profil pro wifi, kde
ssidje název sítě,wifi-sec.key-mgmtje zabezpečení awifi-sec.pskje heslo- ale u WiFi většinou je DHCP, takže tam to není potřeba
Ping
- pro nalezení problému, pokud ztratím spojení se serverem.
ping 192.168.177.201/24jako na ethernet profil nahoře
Traceroute
traceroute 1.1.1.1- cesta k serveru přes routery, posílají se ICMP package
nmap
-
často zakázáno správci sítě, protože se většinou používá jako příprava na kybernetický útok, kdy se skenují otevřené porty
-
nmap localhost- najde všechny otevřené porty na loopback ip adresesudo nmap -A localhost- více informacísudo -p1-65535 localhost- větší rozsah portů (všechny)
nc (netcat)
nc --listen 8888 --keep-open --sh-exec 'cat transfer_file.txt'- otevře port 8888 a lze se na něj připojit pomocínc localhost 8888
tmux
-
pro ovládání více relací terminálu v jednom terminálu pomocí serveru běžícího ssh
-
tmux new -s nazevnebotmuxspustí novou relaci -
tmux ls- vypíše všechny aktivní relace -
tmux attach -t nazev- připojení k relaci -
tmux kill-session -t nazev- ukončení relace -
Ctrl + B +d- odpojení od relacec- vytvoření oknan- další oknop- předchozí oknof- najít okno,- název okna&- zavřít okno%- vertikální rozdělení"- horizontální rozdělenío- prohození panelůq- zobrazit čísla panelůx- zavřít panel- šípky (přepnutí panelů)
-
dá se upravit v
.tmux.conf
pdfpc
- na prezentování
6. Hodina
Git pokračování - větvení
-
vytvoření nové větve:
git branch issue/4-file-issue
-
přepnutí na větev:
git switch issue/4-file-issue
-
oba příkazy najednou:
git switch -c issue/4-file-issue
-
pro obnovu souborů (dříve používal i k tvorbě větví)
git checkout
-
nahrání nové větve
git push --set-upstream origin issue/4-file-issue
-
zobrazení grafu
git log --graph
-
zobrazení seznam větví
git branchgit branch --all
-
mergnutí branchů do sebe
git switch mastergit merge issue/4-file-issue
-
smazání větve
git branch -d issue/4-file-issue
-
zobrazení remote repozitáře
git remote -v
-
přidání remote
git remote add upstream username@giturl.git
-
aktualizace z remote repozitáře
git fetch upstream
-
změnit commit zprávu zpětně
git commit --amend
VLC
- na přehrávání videií, lze spustit i přes web na port
Youtube-dl a yt-dlp
- na stahování videií i z různých webů než YouTube
yt-dlp "youtube-url"
ffmpeg
- konvertor videoformátů
7. Hodina
Pandoc
-
převaděč mezi mnoha formáty jako HTML, Markdown, LaTeX, PDF, Word atd.
-
pandoc --standalone website.md > website.html- nebo specifikovat výstup pomocí
-o --standaloneje jen potřeba pro html
- nebo specifikovat výstup pomocí
-
pandoc --template template.html post.md > post.html- vytvoři webovku pomocí šablony
- v
template.htmlse nahrazení specifikuje pomocí$body$...
Logická skladba programu
-
exit kódy v praxi
&&- vykoná další příkaz pokud první uspěl||- vykoná další příkaz pokud první selže
-
řetězení:
test -f soubor.md && echo "soubor.md existuje" || echo "soubor.md neexistuje"
-
proměnná:
- deklarace:
MY_VARIABLE="value" - použití: pomocí \(, tedy `echo "Value in MY_VARIABLE is \)MY_VARIABLE."`
- žádné mezery
- deklarace:
-
čtení proměnných prostředí
os.getenv()variable = os.getenv('MY_VARIABLE', 'OTHER_VARIABLE')
os.environ- je potřeba zkontrolovat, že taková proměnná není None nebo nastavit defaultní hodnotu
-
zpřístupnění čitelnosti pro ostatní programy:
export VARexport VAR="value"export VAR command- jen pro konkrétní příkaz- exportuje se jen pro dobu běhu programu
-
env- seznam všech exportovaných proměnných -
set- seznam všech proměnných$HOME- cesta k domovské adrese$PWD- pracovní adresář$USER- jméno aktuálně přihlášeného uživatele$RANDOM- náhodné číslo
$PATH
-
zobrazit pomocí
echo $PATH- lze přidat vlastní složku například
~/bina tam ukládat skripty, aby byly přístupné všude
- lze přidat vlastní složku například
-
shebang může dostat právě jeden volitelný argument
#!/usr/bin/env python3- najde a spustí z environment variable
-
"$@"- předá všechny parametry jinému programu
#!/bin/bash
pandoc --self-contained --base-header-level=1 --strip-comments "$@"
výchozí hodnota
-
"${EDITOR:-mcedit}" file.txt -
na začátku skriptu:
EDITOR="${EDITOR:-mcedit}", pak jen"$EDITOR" file.txt -
pokud chci napsat proměnnou a pak písmeno, tak:
prefix="text"
echo "Do something ${prefix}here"
pro testování podmínky
verbose=false
test "${1:-none}" = "--verbose" && verbose=true
pak testovat a vypisovat pomocí
$verbose && echo "Something is happening"
expanze proměnných
-
mezery a wildcardy vyžadují zvláštní pozornost
-
some_dir="${some_dir:-default}", pak může uživatel zavolatsome_dir=not_default ./skript.sh
nahrazování příkazů
temp="$( mktemp -d )"- výstup mktemp -d se uloží do temp
temp="$( mktemp -d )"
stdout="$( command 2>"$temp/err.txt" )"
stderr="$( cat "$temp/err.txt" )"
rm -rf "$temp"
echo "this architecture is $( uname -m )."
funkce v shellu
-
v shellu nespecifikují argumenty ani návratovou hodnotu
- argumenty jsou předány jako v shellovém skriptu
$1, $2, ...
- argumenty jsou předány jako v shellovém skriptu
-
lze nastavit funkci do proměnné a pak volat, např. logování
func() {
commands
}
- návratové hodnoty ukončí funkci
- proměnné s označením
localjsou lokální uvnitř funkce (ale není oficiální rozšíření shellu)- původní hodnota proměnné neoznačené local se uloží a po návratu funkce obnoví
viditelnost proměnných
- když program upraví exportované proměnné, které dostane od shellu při spuštění, tak se hodnoty upraví jen lokálně po dobu běhu programu a pak se vrátí zpátky
subshell
- uzavřením do
( .. ) - taky není vidět pro okolní shell
aritmetika v shellu
- pomocí
$(( .. ))
x=1
x=$(( x + 1 ))
- užitečné na měření doby běhu programu
shell check
-
kontrola správnosti programu
- překlepy, syntaxe, lehčí optimalizace
-
použije se
shellcheck skript.sh -
i pro připomínky ke stylu kódu:
shellcheck -o all skript.sh
pylint
- pro kontrolu pythonových skriptů
- používá se:
pylint skript.py
8. Hodina
načítání konfigurace
-
příklad config.rc (runtime configuration):
html_dir=www- spustí se i příkazy uvnitř
- většinou neobsahují shebang, nejsou samostatně spustitelné
-
přidání do skriptu pomocí:
. config.rc
source config.rc
for loop
for VARIABLE in Val1 Val2 Val3; do
something
done
if a else
- podmínka je příkaz co se vykoná a jeho exit kód určuje zda je podmínka splněna nebo ne
if command_checking_condition; then
success
elif something_else; then
success too
else
do something else
fi
- ukončený pomocí
fi - často pomocí
test, např.
if test -d .git; then
echo "In git repo"
fi
- synonymem pro
testje[ .. ], např.[ -d .git ]
while
while condition; do
something
done
breakacontinue- funguje stejně jako v jiných jazycích
switch
case value_for_switch in
option1) commands ;;
option2) commands ;;
*) default commands ;;
esac
parametry skriptů
- "$@" - pro všechny parametry
$1, $2, ...- pro parametry$#- počet argumentů$0- název skriptu
getopts
- není uživatelsky přívětivé
read
read FIRST_LINE < input.txt- vlastně na čtení, ale pokaždé otevře soubor, než stdin, který půjde po řádcích
SCP a rsync
-
pro kopírování souborů mezi dvěma počítači -
scp -
scp file.txt user@machine:remote_file.txt -
rsync je novější a vyvinutější, namísto scp musí být nainstalován na obou stranách
-
syntaxe stejná jak u scp