Tematický přehled vybraných příkazů ----------------------------------- .. sectionauthor:: Jiří Sedláček Uvádí se, že velké distribuce jako je Debian (Ubuntu, Linux Mint, Red Hat, Fedora ap.) mívají typicky nainstalováno více než 1000 různých příkazů a programů, určených pro práci z příkazové řádky. Nikdo si samozřejmě nepamatuje takové množství příkazů, natož všechny jejich parametry a přepínače. Následující stránky proto uvádí poměrně obsáhlý, ale zdaleka ne „úplný“ (žádný přehled nemůže být úplný) *tematicky uspořádaný přehled* příkazů formou *přehledných tabulek.* - Pro písemku pátý týden (třetí test) budete potřebovat *jen příkazy*, uvedené v prezentacích. Další příkazy však využijete na pozdějších cvičeních, během studia a v praxi. - Kromě několika příkazů zde *neuvádím* konkrétní příklady ani nejdůležitější parametry. Předpokládá se, že tyto tabulky použijete *k rychlému nalezení vhodného příkazu* a se znalostí příkazu již snadno dohledáte jeho použití (prezentace, man/info, na Internetu atd.) - I některé poměrně běžně používané příkazy (např. traceroute) *nebývají standardně nainstalovány*. Na bis.vse.cz pochopitelně instalovat nemůžete, na bis999.vse.cz ano. - Poměrně dost zde uvedených příkazů vyžaduje *zvýšená práva* (sudo příkaz ...). Zde neuvádím a na bis.vse.cz opět nemůžete, na bis999.vse.cz ano. - Naprostá většina zde uvedených příkazů by měla být k *dispozici ve všech běžných distribucích* (např. na Vašem domácím PC, byť může být třeba je doinstalovat: viz výše), některé se liší podle distribuce (zejména příkazy pro práci s balíčky). - Některé příkazy jsou pro rychlé vyhledání uvedeny ve více kategoriích a opakuji zde i příkazy uvedené v předchozích kapitolách. Jednoduché příkazy (převážně bez parametrů) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +--------------------+-------------------------------------------------------+ | **Příkaz** | **Význam** | +====================+=======================================================+ | ``pwd`` | vypíše aktuální adresář | +--------------------+-------------------------------------------------------+ | ``hostname`` | vypíše jméno počítače (hostname | | | -i vypíše IP adresu počítače) | +--------------------+-------------------------------------------------------+ | ``whoami`` | jméno uživatele (viz též obdobné příkazy dále) | +--------------------+-------------------------------------------------------+ | ``uname`` | uname vypíše „Linux“, uname -a zobrazí podrobnosti | +--------------------+-------------------------------------------------------+ | ``date`` | zobrazí datum a čas | +--------------------+-------------------------------------------------------+ | ``who`` a ``w`` | vypíše seznam přihlášených uživatelů (dva různé | | | příkazy) | +--------------------+-------------------------------------------------------+ | ``uptime`` | doba od posledního startu, počet přihlášených | | | uživatelů, | +--------------------+-------------------------------------------------------+ | ``set`` | vypíše *všechny* proměnné v interpretu příkazů | +--------------------+-------------------------------------------------------+ | ``env`` | vypíše *exportované* proměnné prostředí | +--------------------+-------------------------------------------------------+ | ``echo [STRING]`` | vypíše text na standardní výstup (obrazovku) | | | | | | ``echo $JMENO`` shell nejdříve nahradí $JMENO obsahem | | | konkrétní proměnné a poté zavolá ``echo``, např. | | | ``echo $TERM`` | +--------------------+-------------------------------------------------------+ | ``history`` | ``history`` (bez parametrů) vypíše historii | | | zadaných příkazů, | | | ``history 20`` vypíše 20 posledních příkazů | +--------------------+-------------------------------------------------------+ | ``clear`` | smaže obsah obrazovky terminálu | +--------------------+-------------------------------------------------------+ | ``reset`` | resetuje nastavení terminálu (použijte, | | | když clear nestačilo) | +--------------------+-------------------------------------------------------+ Příkaz cat ~~~~~~~~~~ +-----------------------------------+-----------------------------------+ | **Příklady cat** | **(základní příklady vč. použití | | | >, >> a \| viz Prezentace)** | +===================================+===================================+ | cat -n soubor.txt cat -b | na výstupu řádky očísluje (včetně | | soubor.txt | prázdných řádků) na výstupu řádky | | | očísluje (kromě prázdných řádků) | +-----------------------------------+-----------------------------------+ | cat -T soubor.txt cat -A | zobrazí znaky Tab jako viditelné | | soubor.txt | znaky zobrazí všechny speciální | | | (řídící) znaky | +-----------------------------------+-----------------------------------+ | cat s1 s2 > spoj.txt | spojí dva/více souborů (lze | | | spojit *i binární soubory*: viz | | | Pozn. 1) | +-----------------------------------+-----------------------------------+ | cat kus.00{1,2,3,4}>spoj.txt cat | spojí (v našem příkladu) 4 | | kus.0*>spoj.txt | soubory | | | | | | spojí všechny soubory vyhovující | | | zástupným znakům (např. 55) | +-----------------------------------+-----------------------------------+ Poznámky: 1) Dává smysl např. pro komprimovaný soubor, který byl pro velkou velikost rozdělen, např. cat file.rar.001 file.rar.002 file.rar.003 file.rar.004 > velkysoubor.rar poté příkazem unrar soubor dekomprimuji 2) Cat se často používá též pro zobrazení *různých informací o PC* z adresáře *proc* (viz dále). Příkaz split ~~~~~~~~~~~~ Příkaz *split* (jak napovídá již jeho název) je opak příkazu cat (ve variantě pro spojování souborů). Soubor lze rozdělit několika způsoby: po určitém počtu řádek (standardně 1000 řádek, poslední kus samozřejmě typicky bude kratší), po určitém počtů bytes (kilobytes atd.), na zvolený počet souborů (a ještě několik podvariant). Rozdělené soubory budou pojmenovány PREFIXaa, PREFIXab, PREFIXac atd. (lze změnit na PREFIX01, PREFIX02 atd.). Pokud žádný prefix nezadáte, soubory se budou jmenovat xaa, xab, xac atd. (default prefix je malé „x“). +-----------------------------------+-----------------------------------+ | **Příkaz split** | **Vysvětlení** | +===================================+===================================+ | split velkysoub.txt | zadáno jen jméno souboru, který | | | se má rozdělit, pro vše ostatní | | | se použijí implicitní hodnoty: | | | soubor bude rozdělen po 1000 | | | řádcích a výstupní soubory se | | | budou jmenovat xaa, xab, ... xan | +-----------------------------------+-----------------------------------+ | split -l 500 velkysoub.txt PRE | rozdělí se po 500 řádcích, jména | | | PREaa, PREab ... | +-----------------------------------+-----------------------------------+ | split -l 500 -d -a 3 velkysoub | rozdělí se po 500 řádcích, bude | | kus. | se číslovat (-d) a čísla budou | | | trojmístná: zde tedy kus.001 | | | kus.002 ... | +-----------------------------------+-----------------------------------+ | split -b 1000 velkysoub.txt split | bude se rozdělovat *přesně* po | | -b 10k velkysoub.txt | 1000 bytes (i uprostřed řádku) | | | bude se rozdělovat *přesně* po 10 | | | KB (i uprostřed řádku) | +-----------------------------------+-----------------------------------+ | split -C 1000 velkysoub.txt | bude se rozdělovat *nejvýše* po | | | 1000 bytes (snaží se rozdělit na | | | konci řádků) | +-----------------------------------+-----------------------------------+ | split -n 10 velkysoub.txt | rozdělí na 10 souborů pokud možno | | | stejné velikosti (rozdělí i | | | uprostřed řádku) | +-----------------------------------+-----------------------------------+ | split -n l/10 velkysoub.txt | rozdělí na 10 souborů přibližně | | | stejné velikosti, ale snaží se | | | rozdělit na konci řádku (parametr | | | je „malé L“/10): lines | +-----------------------------------+-----------------------------------+ Poznámka: *split -b* nebo *split -n* má smysl i pro *binární soubory* Existuje i příkaz *join*, ale ten má specifické použití jen pro spojování setříděných textových souborů podle určitého pole. Pro spojování textových i binárních souborů rozdělených příkazem *split* použijte příkaz *cat*, tak jak uvedeno v příkladech výše. (Dále existuje ještě příkaz *csplit*.) Další základní příkazy pro práci se soubory a adresáři ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-----------------------------------+-----------------------------------+ | **Skupina příkazů** | **Příkazy (cat: viz výše)** | +===================================+===================================+ | výpis soubor a adresářů | ls (ls -l, ls -la, ls -li, ls | | | -lh, ls -r, ls -R a další) | +-----------------------------------+-----------------------------------+ | pager | less (případně more): less | | | soub.txt nebo jiný_příkaz \| less | +-----------------------------------+-----------------------------------+ | filtry | head, tail, wc, sort, uniq, cut, | | | grep | +-----------------------------------+-----------------------------------+ | zákl. operace se soubory | cp, mv, rm | +-----------------------------------+-----------------------------------+ | informace/jiné operace | file (zobrazí typ souboru), | | | touch, stat, diff, comm: viz | | | Poznámky | +-----------------------------------+-----------------------------------+ | hard/symbolic links | ln, ln -s (odstranění *rm* jako | | | běžné soubory) | +-----------------------------------+-----------------------------------+ | úprava CR/LF | todos, fromdos nebo unix2dos, | | | dos2unix (dle distribuce, | | | doinstalovat) | +-----------------------------------+-----------------------------------+ | archivace/komprimace tar -czf | tar, gzip, bzip2, bunzip2, zip, | | archiv.tar.gz dir tar -xzf | unzip, unrar a další | | archiv.tar.gz | | | | vytvořit gzip komprimovaný tar | | | (zde adresáře *dir,* příp. skup. | | | souborů) rozbalit (dekomprimovat) | | | gzip tar | | | | | | (-c je create -x extract, z = | | | gzip, nahraďte J pro xz | | | komprimaci) | +-----------------------------------+-----------------------------------+ | operace s adresáři | pwd, cd (cd ~, cd, cd .., cd -, | | | cd /), mkdir, rmdir, mv | +-----------------------------------+-----------------------------------+ | vyhledávání příkazů/programů | which: vyhledá a zobrazí adresář, | | | kde daný program, viz Poznámky | | | whereis: zobrazí i související | | | soubory (např. manuálové stránky) | | | type: zobrazí informace o typu | | | příkazu: viz Poznámky | +-----------------------------------+-----------------------------------+ | vyhledávání souborů | find: „tradiční“ vyhledávání | | | (může trvat dlouho), mnoho | | | parametrů locate (resp. mlocate): | | | rychlé vyhledávání využívající | | | index (databázi) souborů, | | | podmínkou vytvoření a pravidelná | | | aktualizace této databáze | +-----------------------------------+-----------------------------------+ *grep:* kromě parametrů uvedených v prezentaci jsou užitečné např. -c (count) nebo -L (opak -l) *touch:* příkaz má dvoje různé využití (a) změní datum a čas zvolených existujících souborů (mtime nebo atime nebo oboje) na aktuální čas, zvolený čas (více způsobů) nebo podle jiného souboru (b) pro rychlé vytvoření souborů: vytvoří jeden nebo více souborů s nulovou délkou *stat:* méně známý, ale užitečný příkaz, zobrazí podrobné informace o zvoleném souboru/souborech nebo adresáři: název, jméno, bloky. inode, odkazy, typ souboru, přístupová práva (osmičkově i symbolicky), Uid, Gid, ctime, mtime, atime *Hard/symbolic links: s*\ ymbolické odkazy umožňují více než hard links: lze vytvořit odkaz na adresář, na soubor na jiném oddílu. Symbolický odkaz na neexistující soubor může být výhoda např. pro opakovaně vytvářený a rušený soubor. Naopak (vaší nepozorností) lze mít mnoho osiřelých odkazů na již dávno neexistující soubory. *tar:* na Internetu je ještě řada příkladů použití tar, kde parametry (přepínače) jsou bez pomlčky, ale současné verze podporují standardní jednu pomlčku pro krátké a dvě pomlčky pro dlouhé přepínače *which:* např. which grep zobrazí /bin/grep (většina základních utilit je v adresáři /bin), zatímco which traceroute v mém případě zobrazí /usr/bin/traceroute pokud by náhodou existovalo více verzí stejného programu, rozhoduje pořadí adresářů v proměnné $PATH: může to být důvod, proč se spouští verze, která se chová jinak než čekáte whereis: whereis grep zobrazí v mém případě grep: /bin/grep /usr/share/man/man1/grep.1.gz použití příkazu *which* i příkazu *whereis* je *zavádějící* pro interní příkazy, např. v mém případě which pwd vypíše /bin/pwd ačkoli je to interní příkaz bash, proto využijte též příkaz type type cd pwd if ls cat v mém případě vypíše následující cd is a shell builtin (= interní příkaz) pwd is a shell builtin (= interní příkaz) if is a shell keyword (klíčové slovo používané ve skriptech = také interní příkaz) ls je externí příkaz, ale v mém případě: is aliased to ... (viz aliasy dále) cat is /bin/cat (= externí příkaz) *tail* se kromě kombinace s jinými příkazy často používá též k průběžnému sledování logovacích a jiných měnících se souborů, např. se průběžně vypisuje 10 (nebo -n číslo) posledních řádků tail -f /var/log/syslog Základní informace o uživatelích, systému a hardware ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-----------------------------------+-----------------------------------+ | **Skupina příkazů** | **Příkazy a vysvětlivky** | +===================================+===================================+ | info o uživateli/lích | whoami (já), who am i (já | | | podrobněji), who (přihlášení | | | uživatelé), w (trochu jiné | | | infomace podrobněji), finger | | | (viz Poznámka). | | | | | | last -n: zobrazí *n* | | | posledních přihlášení | | | | | | last -n username: zobrazí n | | | posledních přihlášení daného | | | uživatele | +-----------------------------------+-----------------------------------+ | komunikace s ostatními | write *username,* mesg [y|n]: | | | povolit/zakázat příjem zpráv | | | od ostatních | +-----------------------------------+-----------------------------------+ | zákl. info o systému | hostname (hostname -i), uname | | | (uname -r, uname -a), uptime | | | last reboot: zobrazí | | | boot/reboot historii | +-----------------------------------+-----------------------------------+ | info pamět, disk, virtuální | free (free -h, free -m). df | | pamět, I/O, vybrané adresáře | (df -h, df -h /dev/sda), viz | | | též příkaz top níže vmstat, | | | iostat | | | | | | du (du -h, du -k, du -m, du | | | -ms): disk usage kolik místa | | | zabírá aktuální či zvolený | | | adresář (včetně podadresářů: | | | každý nebo jen součet) | +-----------------------------------+-----------------------------------+ | info o systému z adresáře */proc* | cat /proc/cpuinfo podrobnosti | | | o procesoru cat /proc/meminfo | | (i další zde neuvedené) | podrobnosti o paměti cat | | | /proc/version Linux kernel | | | verze | +-----------------------------------+-----------------------------------+ +-----------------------------------+-----------------------------------+ | **Skupina příkazů** | **Příkazy a vysvětlivky** | +===================================+===================================+ | podrobnější informace o hardware | lshw | | | | | | lspci, lsusb: pro oba příkazy | | | -tv nebo -tvv jako tree a | | | podrobněji dmidecode: info o | | | hw komponentách a BIOSu | +-----------------------------------+-----------------------------------+ | podrobnější informace o hardware: | hdparm -i /dev/sda zobrazí | | disky | (-I podrobněji) informace o | | | disku, další přepínače | | | umožňují různé testy (např. | | | -tT) a také nastavení | | | (opatrně!) | +-----------------------------------+-----------------------------------+ finger: dříve se běžně využíval, dnes obvykle bývá z bezpečnostních důvodu zakázán Zobrazení a nastavení práv (bez ACL) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-----------------------------------+-----------------------------------+ | **Skupina příkazů** | **Příkazy a vysvětlivky** | +===================================+===================================+ | zobrazení práv souborů a adresářů | ls -l | | | | | | ls -ld jméno_adresáře | +-----------------------------------+-----------------------------------+ | nastavení práv souborů | chmod (symbolické argumenty | | | nebo osmičková čísla: viz | | | Prezentace) chown změní | | | vlastníka souboru nebo | | | adresáře | | | | | | chgrp změní skupinu pro | | | soubor nebo adresáře | +-----------------------------------+-----------------------------------+ | zobrazení pro uživatele | id zobrazí uid, gid a groups | | | pro aktivního uživatele id | | | username totéž pro jiného | | | uživatele | +-----------------------------------+-----------------------------------+ | (dočasné) zvýšení | sudo (nastavení v | | | /etc/sudoers ev. LDAP), su | | | grafické programy: gksudo, | | | gksu | +-----------------------------------+-----------------------------------+ | správa uživatelů/skupin viz | adduser (příp. useradd), | | Poznámka | addgroup (příp. groupadd) | | | usermod, userdel, groupdel | +-----------------------------------+-----------------------------------+ Poznámka: v některých distribucích příkazy adduser nebo addgroup vůbec neexistují, případně jsou jen odkazem na příkazy useradd resp. groupadd. Pokud skutečně existují, je jejich použití pro běžného uživatele snazší (příkaz postupně na jednotlivé řádky vypisuje, jaké údaje máte doplnit). Naopak „složitější“ příkazy useradd, groupadd mohou být vhodnější pro dávkové přidávání většího počtu uživatelů nebo skupin skriptem. Procesy a jejich monitoring ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-----------------------------------+-----------------------------------+ | **Příkaz/příkazy** | **Vysvětlení** | +===================================+===================================+ | top, htop (a další modifikace) | Zobrazí základní informace o | | | systému a tabulkový aktualizovaný | | | (standardně 3 s) přehled procesů | | | seřazený dle spotřeby zdrojů. | +-----------------------------------+-----------------------------------+ | ps | Zobrazí procesy pro | | | daného/všechny uživatele/určitý | | | program. | | | | | | Více než 80 částečně se | | | překrývajících přepínačů! (GNU, | | | Unix a BSD styl). BSD styl | | | přepínače jsou bez pomlčky! V | | | zásadě stačí přepínače z | | | prezentace, užitečný ještě -w | | | (wide), máte-li hodně sloupců. | +-----------------------------------+-----------------------------------+ | pstree | Vypíše procesy ve formě stromu. | | | | | | (ps f, ps f -e, ps f -ef: bez | | | pomlčky! též vypíše určitou formu | | | stromu) | +-----------------------------------+-----------------------------------+ | kill killall | Ukončí proces s číslem PID | | | (default signál TERM, další | | | prezentace). Ukončí všechny | | | procesy vyhovující zadanému jménu | | | (řetězci). | +-----------------------------------+-----------------------------------+ | Ctrl+C Ctrl+Z | Procesu se pošle signál TERM | | | (ukončení, již nebude v seznamu). | | | Zastaví běžící aplikaci a vrátí | | | prompt (bude v seznamu procesů). | +-----------------------------------+-----------------------------------+ +-----------------------------------+-----------------------------------+ | **Příkaz/příkazy** | **Vysvětlení** | +===================================+===================================+ | příkaz & bg | Job vyvolaný daným příkazem bude | | | spuštěn na pozadí. (Dříve | | fg, fg n | spuštěný a zastavený) job bude | | | přesunut do pozadí. | | | | | | Poslední (nebo zadaný) job bude | | | přesunut z pozadí do popředí. | +-----------------------------------+-----------------------------------+ | jobs | Zobrazí jobs: (dle přepínače) | | | zastavené/aktivní//změna stavu. | +-----------------------------------+-----------------------------------+ | nice | Nice bez parametrů zobrazí | | | prioritu shellu (obvykle = 0). | | nice -n 15 find *...* | | | | Spustit (déletrvající) příkaz s | | renice | nižší/vyšší prioritou: viz | | | Poznámky. | | | | | | Zvýšit/snížit prioritu již | | | běžícího procesu | | | | | | (lze též v programu *top*, volba | | | r, zadat číslo procesu, nová | | | hodnota). | +-----------------------------------+-----------------------------------+ *nice:* priorita je číslo od nejvyšší priority –20 do +19 (nejnižší priorita), pouze uživatel s právy root může zadávat záporné hodnoty, v příkladu je příkaz find spuštěn s velmi nízkou prioritou, vyhledávání souborů větších než zadaná velikost bude trvat déle, ale systém bude méně zatěžován nice -n 15 find / -size +10000k *renice:* zadané číslo se přičítá nebo odčítá k aktuální hodnotě priority, např. pokud výše uvedený příklad pro příkaz find nyní běží jako proces 10258 s (velmi nízkou) prioritou 15, pak následující příkaz tuto prioritu zvýší z 15 na (stále poměrně nízkou) hodnotu 10. Přepínačem -u username lze zvýšit nebo snížit prioritu všem procesům daného uživatele. renice -n -5 10258 # zvýší prioritu o 5 (v našem příkladě z 15 na 10) Práce s balíčky a repozitáři ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Příkazy pro práci s balíčky a repozitáři patří mezi ty, které se *nejvíce liší* podle toho, jakou používáte *distribuci* resp. jaký *formát balíčků* používá vaše distribuce. Zjednodušeně řečeno existují dva hlavní formáty balíčků: - *.deb:* první verze formátu vyvinuta v rámci Debianu (odtud i název) zhruba do roku 1995. Deb balíčky jsou používány distribucemi *Debian*, *Ubuntu* (Lubuntu, Xubuntu, Kubuntu , Edubuntu, Ubuntu Studio ad.), *Linux Mint* a mnoha desítkami dalších distribucí, které přímo nebo nepřímo vycházejí z Debianu nebo Ubuntu (např. *Kali Linux*: používán pro penetrační testování a forenzní účely, Zorin OS, elementary OS, Peppermint OS, antiX, Bodhi Linux, Devuan, Knoppix, Skolelinux (Debian Edu), SolydXK, siduction, AV Linux, SteamOS: herní platforma Steam, Tails: využívá Tor, Webconverger: pro internetové kiosky, GParted Live, Clonezilla Live a mnohé další). - *.rpm* formát vyvíjen firmou Red Hat od roku 1997 (zkratka vychází z původního označení systému: Red Hat Package Manager, nyní RPM Package Manager). Formát je používaný distribucemi Red Hat Enterprise Linux (RHEL), Fedora (též od fy Red Hat), CentOS, Scientific Linux, OpenSUSE, SUSE Linux Enterprise, Mageia, Clear OS, Qubes OS a řadou dalších distribucí. Významnější výjimky (nepoužívají ani .deb ani .rpm): *Slackware* (nejstarší dosud existující distribuce) a ze Slackware vycházející distribuce (Salix, Slackel, VectorLinux, Zenwalk Linux a několik dalších) používají formát *.txz* (tar s komprimací xz), příp. starší .tgz (tar s gzip). *Arch Linux* a z něj vycházející distribuce (Manjaro Linux, Antergos a několik dalších) používají pro správu balíčků Pacman. Níže uvedené platí pro balíčky ve formátu *.deb,* v případě distribucí používající formát *.rpm* je sice postup instalace balíčků v principu obdobný, ale musíte se naučit jiné příkazy, nejčastěji *rpm* a *yum* (používá Red Hat, CentOS, Scientificc Linux, Oracle Linux ad.), příp. i další příkazy, též v závislosti na konkrétní distribuci. Fedora od verze 22 používá jako default správce balíčků DNF, OpenSUSE a SUSE Enterprise používá Zypper, Mageia a další používají urpmi. Existuje též příkaz *alien*, který umí zkonvertovat balíčky mezi formáty .deb, .rpm, .txz/.tgz a tyto balíčky též nainstalovat. Měl by se však používat až jako poslední možnost (jedna věc je samotná konverze formátů, druhá různé odlišnosti samotných distribucí). Binární balíčky *.deb* (existují též .deb balíčky se zdrojovými kódy) vždy obsahují spustitelný program, téměř vždy obsahují tzv. *control* (obsahuje všechny potřebné informace k balíčku, např. seznam závislostí, doporučené balíčky), seznam souborů s kontrolními součty a zpravidla několik skriptů, které se postupně provádí před a po instalaci daného balíčku. Instalace vždy začíná rozbalením *controls,* pokud byla dříve instalována starší verze balíčku, je zálohována včetně konfiguračních souborů pro případ nějakého problému s novou verzí, provede se případný předinstalační skript, rozbalí se vlastní balíček a provede se případný postinstalační skript +-----------------------------------+-----------------------------------+ | **Příkaz** | **Vysvětlivky** | +===================================+===================================+ | dpkg | nízkoúrovňový příkaz pro | | | práci s balíčky, používejte | | | jen níže uvedené | +-----------------------------------+-----------------------------------+ | dpkg --list | seznam balíčků (viz Poznámka) | +-----------------------------------+-----------------------------------+ | dpkg --listfiles *balíček* | vypíše přehled souborů v | | | konkrétním balíčku | +-----------------------------------+-----------------------------------+ | dpkg --status *balíček* | podrobné informace o | | | konkrétním instalovaném | | | balíčku | +-----------------------------------+-----------------------------------+ | apt-cache | informace o balíčcích | +-----------------------------------+-----------------------------------+ | apt-cache stats | obecnější info o | | | repozitářích, počtu balíčků a | | | jejich druhů... | +-----------------------------------+-----------------------------------+ | apt-cache search *regex* | vyhledávání balíčku/ů dle | | | klíčových slov/regulárního | | | výrazu | +-----------------------------------+-----------------------------------+ | apt-cache show ... | informace o konkrétním | | | balíčku vč. jeho popisu | +-----------------------------------+-----------------------------------+ | apt-cache showpkg ... | informace o konkrétním | | | balíčku (jiné info, vč. | | | obrác. závislostí) | +-----------------------------------+-----------------------------------+ | apt-get | instalace a odinstalace | | | balíčků (a seznamy balíčků) | +-----------------------------------+-----------------------------------+ | apt-get update | aktualizuje se databáze | | | (seznam) balíčků (s balíčky | | | se nic nedělá) | +-----------------------------------+-----------------------------------+ | apt-get upgrade | zkontrolují se všechny | | | instal. balíčky a provede se | | | jejich upgrade | +-----------------------------------+-----------------------------------+ | apt-get install *balíček* | instalace nebo upgrade | | | konkrétního balíčku | | | (nejpoužívanější příkaz) | +-----------------------------------+-----------------------------------+ | apt-get -d install *bal.* | download only, zatím ne | | | instalace (uvidíte velikost | | | balíčku i instalace) | +-----------------------------------+-----------------------------------+ | apt-get -s install *bal*. | jen simulovaná instalace | +-----------------------------------+-----------------------------------+ | apt-get remove *balíček* | odinstalace konkrétního | | | balíčku (konfigurační soubory | | | zachovány) | +-----------------------------------+-----------------------------------+ | apt-get remove *balíček* | odinstalace konkrétního | | | balíčku vč. konfiguračních | | | souborů | +-----------------------------------+-----------------------------------+ V případě dpkg --list se vypíší dvě písmena statusu, název, verze, architektura (např. i386 nebo all) a většinou i stručný jednořádkový popis. Status nejčastěji bude „ii“, znamená měl být nainstalován a byl úspěšně nainstalován. „pn“ první písmeno znamená požadovaný status „purged“ a druhé písmeno „not installed“ znamená, že byl skutečně odinstalován včetně konfiguračních souborů, „rc“ znamená měl být „removed“ a skutečně byl odinstalován bez odstranění konfiguračních souborů, „un“ znamená „unknown, not installed“. V případě vašeho PC lze použít též grafické nástroje (ale i zde poměrně často využijete minimálně sudo apt-get install balíček, je často rychlejší: např. zadali jste jméno příkazu, který není nainstalován a systém rovnou poradí, jaký balíček potřebujete). V případě serveru jsou řádkové příkazy nutností. Pokud nevíte jméno balíčků, je dnes většinou nejjednodušší hledat přes `WWW. `__ V případě *Debianu není* nijak pevně stanoveno, kdy bude vydána nová verze (tým Debianu rozhodne, kdy je nová verze dostatečně otestována) a rozlišují tři tzv. *větve:* - *Stable:* obsahuje často relativně staré verze balíčků, ale vše je důkladně otestováno právě s důrazem na maximální stabilitu (typické využití servery). Aktualizace verze balíčků obvykle jen v případě nalezení bezpečnostních problémů. Volitelně jsou pro vybrané balíčky k dispozici novější verze formou tzv. *backports*. K dispozici instalační CD a DVD. - *Testing* se posléze stane novým hlavním vydáním. Obsahuje novější (relativně dobře otestované) verze balíčků než stable, které jsou postupně aktualizovány až do okamžiku zmrazení. K dispozici instalační CD a DVD. - *Unstable* (kódové jméno *sid*) obsahuje nejnovější verze balíčků, jednotlivé balíčky projdou alespoň základním testováním, ale není testován celek, není k dispozici CD nebo DVD. Kromě těchto tří větví vždy existuje (mimo jiné) tzv. *Oldstable*: tj. předchozí větev Stable. Z důvodu kontinuity instalací serverů je tato verze podporována poměrně dlouho prostřednictvím Debian Security Team (jsou vydávány bezpečnostní opravy). Naproti tomu v případě Ubuntu je nová verze vydávána pravidelně každých 6 měsíců a to vždy v dubnu a říjnu (číselné verze je tedy xx.04 resp. xx.10), ale jen každá čtvrtá verze je tzv. LTS (Long Term Support). I v případě stolního PC se doporučuje držet se těchto LTS verzí (nyní je to 16.04 LTS Xenial Xerus z dubna 2016). V případě Ubuntu se rozlišuje celá řada repozitářů, mimo jiné *main* (Ubuntu podporovaný open-source software), *universe* (komunitou udržovaný OSS), *restricted* (uzavřené ovladače bez zdrojového kódu: nutné pro rozumné fungování některých komponent), *partner*, *backports*. Edice *Ubuntu Server* používá stejné repozitáře jako odpovídající Desktop edice, ale standardně se neinstaluje grafické rozhraní, instalační proces je mírně upraven a jsou přidána některé komponenty a nastavení s ohledem na bezpečnost. *Linux Mint* byl do roku 2014 vydáván rovněž v půlročním cyklu, zhruba měsíc po Ubuntu a rovněž jen každá čtvrtá verze byla LTS. Poté bylo oznámeno, že vývojový cyklus nebude striktně půlroční, podstatnější však je, že nyní každá verze je založena na příslušné LTS verzi Ubuntu. V současnosti tak verze 17.1 až 17.3 jsou všechny založeny na Ubuntu 14.04 LTS a mají stejně dlouhou podporu (do 2019) a verze 18/18.1 (zatím poslední) jsou založeny na Ubuntu 16.04 LTS a mají podporu do roku 2021. Méně známý a méně rozšířený *Linux Mint Debian Edition* je založen přímo na Debianu, má vlastní repozitáře a je aktualizován průběžně. Diskové oddíly a souborový systém ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-----------------------------------+-----------------------------------+ | **Skupina příkazů** | **Příkazy a vysvětlivky** | +===================================+===================================+ | přehled o diskových oddílech | fdisk -l: základní informace | | | o všech diskových oddílech | | | (jen MBR) parted -l: základní | | | informace o všech oddílech | | | (MBR i GPT) | +-----------------------------------+-----------------------------------+ | souborový systém | *mount* (bez parametrů) | | | vypíše základní přehled | +-----------------------------------+-----------------------------------+ | připojení, odpojení připojení | mount, umount | | ISO soub. | | | | mount -o loop | | | jmenosouboru.iso /mnt/disk | +-----------------------------------+-----------------------------------+ | kontrola soub. systému | fsck: souborový systém nesmí | | | (!!) být připojen | +-----------------------------------+-----------------------------------+ | monitoring HDD | smarmontools (smartctl: běžný | | | příkaz a smartd: démon) | +-----------------------------------+-----------------------------------+ Poznámky: 1) gparted je GUI verze parted, pro případnou úpravu diskových oddílů použijte raději ten, máte-li GUI k dispozici (pochopitelně i tehdy je nejlepší mít všechna případná data zálohována) 2) mezi *fdisk* (jen MBR) a parted je zásadní rozdíl i ve způsobu provedení změn (fdisk: až na závěr, parted: příkazy se provádí ihned!). 3) fsck volá specializované programy podle typu souborového systému, v případě podezření na na větší problémy je vhodné nejprve použít fsck -n (nic se neopravuje), příp. zkopírovat oddíl po sektorech, fsck může být vyvoláno též automaticky při startu PC, zejména na ext2 Speciální souborové systémy ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Jak je vidět i na příkazu mount (bez parametrů), zdaleka ne všechny souborové systémy se týkají fyzických disků. Obecně jde o tzv. Special-Purpose Filesystem, např. proc připojeno na /proc (již dříve jsme využili některé informace zde obsažené příkazy typu cat /proc/cpuinfo), sysfs na /sys, tmpfs na /run i jinde (na PC s dostatkem paměti se často využívá část RAM) a další systémy. Sítě a Internet ~~~~~~~~~~~~~~~ +-----------------------------------+-----------------------------------+ | **Skupina příkazů** | **Příkazy a vysvětlivky** | +===================================+===================================+ | základní a další příkazy: stav a | ifconfig: základní příkaz pro | | konfigurace síťových rozhraní | zobrazení informací a | | | konfiguraci ifconfig -a | | | zobrazí informace o všech | | | síťových rozhraních ifconfig | | | eth0 zobrazí informace pro | | | dané rozhraní (*eth0* je | | | první | | | | | | rozhraní typu Ethernet, | | | *wlan0* je první bezdrátové, | | | *lo* je local loopback | | | ifconfig eth0 up (...wlan0 | | | down): povolit/zakázat dané | | | rozhraní konfigurace: viz | | | manuálové stránky (static IP, | | | jinak příkaz *dhclient*), | | | další příkazy: ip (ip addr | | | show, ip route get IP | | | adresa), arp, netstat | +-----------------------------------+-----------------------------------+ | základní diagnostika | ping hostname nebo IP adresa | | dostupnosti/doby odezvy určitého | (např. ping www.vse.cz) | | serveru přes Internet | | | | traceroute hostname nebo IP | | | adresa (traceroute | | | --resolve-hostname) již | | | uvedeno dříve, že příkaz | | | finger nyní většinou není | | | povolen: bezpečnostní důvody | | | (finger -l username | | | user@hostname) | +-----------------------------------+-----------------------------------+ | vyhledávání DNS/ WHOIS | dig: DNS lookup, vyhledávání | | | v DNS (dig vse.cz) | | | | | | dig -x IP adresa: inverzní | | | vyhl. (pro VŠE funguje, | | | obecně nemusí) whois (příp. | | | jwhois): vyhledávání v | | | registru domén | | | | | | nslookup: jednoduché | | | vyhledávání DNS <--> IP | | | adresa host: jednoduché | | | vyhledávání DNS <--> IP | | | adresa | +-----------------------------------+-----------------------------------+ | nešifrované! přenosy | telnet, ftp | +-----------------------------------+-----------------------------------+ | dávkové stahování | wget: neinteraktivní | | | stahování souborů (protokoly | | | ftp, http, https) | +-----------------------------------+-----------------------------------+ | openssh | ssh (klient), sshd (server, | | | démon), scp, sftp (příp. | | | lftp), | | | | | | ssh-keygen, ssh-copy-id, | | | ssh-agent, ssh-add,: viz | | | Poznámky | | | | | | rsync: inteligentní | | | zálohování/synchronizace | | | (přenášejí se jen změněné | | | části souborů), mnoho | | | přepínačů (např. rsync -av | | | nebo -avz, | | | | | | rsync -avz /home/user | | | username@remote_host:/backup_dir | +-----------------------------------+-----------------------------------+ Poznámky: 1) Příkazu *ifconfig* v Linuxu přibližně odpovídá příkaz *ipconfig* ve Windows. 2) SSH: ssh-copy-id není v některých distribucích, pak musíte vygenerovaný public key nahrát na server jiným způsobem, ssh-agent bývá spuštěn automaticky, ssh-agent + ssh-add společně zajišťují obdobnou funkcionalitu jako v případě Windows a Putty program Pageant. Vybrané ostatní příkazy ~~~~~~~~~~~~~~~~~~~~~~~ +-----------------------------------+-----------------------------------+ | **Skupina příkazů** | **Příkazy a vysvětlivky** | +===================================+===================================+ | speciální pomocné příkazy | script: záznam relace z | | | terminálu (viz Poznámky) | | | time(jiný_příkaz): změří | | | spotřebovaný čas (real, user, | | | syss) watch -přepínače | | | jiný_příkaz: opakuj příkaz | | | (standardně 2 s) | +-----------------------------------+-----------------------------------+ | spouštění programů v určený čas | at: relaltivně jednoduchý | | | příkaz pro spouštění ve | | | zvolený čas cron, anacron: | | | komplexnější řízení spouštění | | | programů | +-----------------------------------+-----------------------------------+ | hash funkce | md5sum, sha1sum, sha256sum, | | | sha384sum, sha512sum (bez | | | parametru vytvoření, -c | | | kontrola) | +-----------------------------------+-----------------------------------+ +-----------------------------------+-----------------------------------+ | transformace textů | tr: jednoduché náhrady nebo | | | smazaní vybraných znaků sed: | | | program na zpracování textů | | | (stream editor) | | | | | | awk: program na zpracování | | | textů (řádky se skládají z | | | polí) | +===================================+===================================+ | spec. kopírování dat | dd: velmi různorodé použití | | | (používejte opatrně! + | | | odlišná syntax!) | +-----------------------------------+-----------------------------------+ | spec. zobrazení souborů | od (octal dump a další | | | formáty), base64 | +-----------------------------------+-----------------------------------+ | vybrané aplikace (příklady, mnoho | ps2pdf: zkonvertuje | | dalších) | postscriptové soubory do PDF | | | jpegtran: úpravy JPEG souborů | | | vč. *bezztrátového* otočení | | | jhead: různé operace s EXIF | | | informacemi JPEG souborů | +-----------------------------------+-----------------------------------+ Poznámky: 1) ``script`` jméno_textového_soub (implicitní jméno souboru je typescript): veškeré příkazy a textové výstupy těchto příkazů v okně terminálu budou zaznamenávány do zvoleného textového souboru, záznam ukončíte příkazem ``exit`` 2) zatímco ``tr`` je relativně jednoduchý příkaz, ``sed`` a ``awk`` jsou dost komplexní programy, mající vlastní (byť značně specifický) programovací jazyk, sed a awk jsou koncepčně dost odlišné, ale dají se použít i na stejné úlohy (na ještě složitější zpracování textů je dále zaměřen jazyk Perl, jež obvyklé bývá nainstalován, případně se dnes používají i další jazyky) 3) ``dd`` je velmi mocný a univerzální příkaz, kterým lze mimo jiné zálohovat MBR record do souboru, zkopírovat instalační ISO soubor na flash disk, zálohovat celý diskový oddíl a mnoho dalšího, ale omylem lze např. přepsat určitou část disku, proto vždy dvakrát zkontrolujte zadané parametry, než příkaz použijete! Vzhledem ke svému původu používá odlišnou syntax než jiné příkazy (parametr=hodnota), podrobněji viz manuálové stránky. Jména zařízení ~~~~~~~~~~~~~~ pevné disky: /dev/sda, dev/sdb ... (včetně flash disků ap.) (ve starších verzích Linuxu „obyčejné“ disky byly /dev/hda, /dev/hdb...: pokud na to ještě narazíte v hodně starých návodech na Internetu, je třeba nahradit hda sda atd.) jednotlivá oddíly (partitions) na daném disku: /dev/sda1, /dev/sda2.... Pozn: pokud disk používá MBR, kde je limit 4 primárních oddílů, a vy jste proto 4. oddíl definovali jako extended a v něm 2x logical partitions a všechny oddíly jste použili pro Linux, budou oddíly, kde jsou skutečně data, označeny /dev/sda1, /dev/sda2, dev/sda3, dev/sda5 a dev/sda6. CD/DVD mechanika zpravidla budou /dev/sr0 (ev. další /dev/sr1): r zde znamená read-only, Ubuntu a odvozené distribuce vytváří též /dev/cdrom, příp. /dev/dvd terminály: „skutečné“ textové terminály jsou /dev/tty/\*, virtuální terminály /dev/pts/\*, jak můžete vidět např. ve výpisu příkazu ps. paralelní porty: pokud ještě máte ve svém PC paralelní port/y (a na něm připojenou např. tiskárnu: současné jsou připojeny přes USB), tak LPT1: ve Windows v Linuxu odpovídá /dev/lp0 sériové porty: obdobně, pokud ještě máte ve svém PC „pravé“ sériové porty, COM1 ve Windows bude v Linuxu /dev/ttyS0 (sériové porty jsou v Linuxu speciální terminálová zařízení), pokud je to ve skutečnosti USB zařízení, které sériový port emuluje, mělo by se objevit jako /dev/ttyUSB0 atd. audio zařízení v systému ALSA jsou /dev/snd/\*, mohou zde být ještě další audio zařízení Special devices ^^^^^^^^^^^^^^^ Kromě výše uvedeného vytváří Linux také několik *speciálních zařízení*, které nemají žádné korespondující fyzické zařízení, proto se jim často říká též *pseudozařízení (pseudo-devices)*. Mezi tato bloková pseudozařízení patří: - /dev/null: je asi nejznámější zařízení používané i běžnými uživateli, jakási „černá díra“, ve které zmizí vše, co do ní pošleme (nejčastěji se používá pro odfiltrování nežádoucích chybových hlášení ve výstupu některého příkazu: viz příklad s příkazem grep v Prezentaci). - /dev/random, /dev/urandom: jsou dva různé generátory pseudonáhodných čísel (jejich využití jste nepřímo viděli při generování páru klíčů v Putty, OpenSSH nebo GnuPG). - /dev/zero: poskytuje nekonečný proud Null bytes (nikoli čísla 0). - /dev/full: poskytuje opět proud Null bytes, pokud se ze zařízení čte a chybu „disk full“ při pokusu o zápis do tohoto zařízení. Vytváření a používání aliasů ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Aliasy jsou další nástroj, jak si zpříjemnit a zefektivnit práci na příkazové řádce. Důvodů pro vytvoření aliasů může být více: - zjednodušit zadávání často používaných variant příkazů (např. alias pro ``ls -la``) - vytvořit si nové jméno příkazu, které je pro mě snazší na zapamatování (např. ``del`` místo ``rm``) - vytvořit si „bezpečnější“ verzi příkazu (např. ``rm -i``) Příkaz ``alias`` bez parametrů vypíše již existující aliasy. Obvykle jich několik bývá nastaveno již při instalaci, např. v mém případě (Linux Mint), vypíše alias (mimo jiné): .. code-block:: bash alias la='ls -A' alias ll='ls -alF' alias ls='ls --color=auto' alias grep='grep --colour=auto' Poslední dva aliasy mají jen „kosmetický“ význam, nemění jméno příkazu ani jeho význam, ale ve výstupu daného příkazu (pochopitelně pouze na obrazovce) budou určité typy souborů barevně rozlišeny. Alias „ll“ je již „skoro“ přesně to, co chci, proto si vytvořím ještě jednu jeho variantu (nyní tedy bude stačit zadat příkaz o jediném písmenu, který vypíše seznam souborů v dlouhém formátu a včetně skrytých souborů): .. code-block:: bash alias l='ls -la' Již existující alias „la“ si trošku upravím na: .. code-block:: bash alias la='ls -a' Pro příkaz ``rm`` si můžu vytvořit alternativní jméno ``del`` (které je dejme tomu pro mě lepší na zapamatování než než ``rm``), případně ho vytvořím jako bezpečnější variantu, tedy: .. code-block:: bash alias del='rm' nebo .. code-block:: bash alias del='rm -i' Druhá varianta (přepínač -i) znamená, že při použití příkazu ``del`` se mě systém vždy zeptá, zda opravdu chci daný soubor/y smazat, zatímco při použití původní ``rm`` se soubory rovnou smažou. Existuje též přepínač -I, který bude potvrzení žádat jen pokud se má smazat 3 a více souborů nebo mazat rekurzivně. Můžu si takto upravit přímo příkaz ``rm`` a obdobně i příkaz ``cp`` (zde se příkaz bude ptát, pokud by při kopírování mělo dojít k přepsání souboru). .. code-block:: bash alias rm='rm -i' alias cp='cp -i' Příkazem ``unalias`` odstraním jeden konkrétní alias nebo všechny aliasy. .. code-block:: bash unalias del # smazání alisu del unalias -a # smazání všech aliasů Všechny takto vytvářené aliasy mají *platnost* jen po dobu dané terminálové relace. Jakmile si aliasy vyzkoušíte, pravděpodobně budete chtít, aby ty osvědčené platily natrvalo. Jednoduše přidejte vybrané aliasy do souboru ``.bashrc`` ve vašem domovském adresáři (pokud by tento soubor náhodou ještě neexistoval, vytvořte nový).