cat
man
ls
mkdir
cd
cp
mv
rm
, rmdir
pwd
touch
.
a ..
cat
Příkaz cat
(concatenate) je velmi užitečný a má několik způsobů použití.
Spuštěný bez argumentu opisuje text ze standardního vstupu (stdin
, klávesnice) na standardní výstup (stdout
, terminál). Pro ukončení stiskněte zkratku Ctrl+D.
$ cat
Standardní výstup jde přesměrovat do souboru. Spusťte příkaz níže, napište několik řádků textu a ukončete. Text se zapsal do souboru dopis
.
$ cat > dopis
Nyní si obsah souboru vypíšeme, opět příkazem cat
:
$ cat dopis
Teď je standardním vstupem (stdin
) soubor dopis
, výstupem terminál (stdout
).
Stejným postupem (přesměrováním do souboru) si vytvořte ještě dva soubory dopis_2
a dopis_3
.
Nyní do všech tří souborů přidejte na konec jeden nebo dva dva řádky textu (pomocí dvou šipek):
$ cat >> <file>
Pro kontrolu si obsah souborů vypište.
☝ Klávesa TAB (tabulátor)
Místo celého názvu souboru napište jen jeden-dva znaky a stiskněte klávesu TAB. Zbytek názvu se dopíše. Tím máte jistotu, že je název zapsaný správně. A taky je to pohodlnější.
Pokud je možností víc, nic se nevypíše. Stiskněte TAB ještě jednou, vypíše se seznam souborů odpovídající zapsanému vzoru.
Znaky >
a >>
se přesměruje standardní výstup do souboru.
Pokud soubor neexistuje, vytvoří se.
>
existující soubor přepíše (overwrite)>>
do existujícího souboru připojí na konec (append)Nejsou to všechny varianty přesměrování. Později si ukážeme další.
V unixových systémech je zavedena dohoda, podle které je nově spuštěný program standardně vybaven třemi otevřenými datovými proudy (deskriptory):
Označení | Význam | Proud | Default |
---|---|---|---|
stdin |
standardní vstup | 0 | klávesnice |
stdout |
standardní výstup | 1 | terminál |
stderr |
standardní chybový výstup | 2 | terminál |
Pokud program potřebuje získat data, čte je z proudu 0. Potřebuje-li něco vypsat, použije proud 1, avšak pro výpis chybových hlášení se používá proud 2. Tím jde oddělit výstup od chyb.
man
Příkaz cat lze spustit i s parametry (přepínači). Obecný tvar je:
cat [OPTION] [FILE]
Vypište si některý z dříve vytvořených souborů takto:
$ cat -n dopis
Je vidět, že parametr -n
zobrazí čísla řádků.
Jak je zjistím např. u příkazu cat
?
$ cat --help $ man cat
💡 Zapište do vyhledávače text "man cat". Výsledkem bude několik odkazů na online manuálové stránky příkazu: https://duckduckgo.com/?q=man+cat. Všechny jsou na www.man7.org
ls
Velmi často používaným příkazem je ls
. Vypíše obsah adresáře. Adresář (directory) je v Unixových systémech běžné označení pro složku (folder). Výstupem je seznam adresářů a souborů (na TuXovi hezky barevný).
$ ls $ ls -l
S přepínačem -l
ji vypíše s podrobnostmi (typ, oprávnění, majitel, velikost, datum úpravy, název).
I příkaz ls má svůj --help
a také manuálovou stránku. Nelekněte se, přepínačů je velmi velké množství (snad nejvíc ze všech příkazů). Běžně nám jich stačí pouze několik. Všimněte si, že většinou existují dvě varianty přepínačů: -krátký
nebo --dlouhý
.
Příkaz ls
umí vypsat nejen aktuální adresář, ale i jakýkoliv jiný. Vypište si (bez a s přepínačem -l
):
$ ls /home $ ls / $ ls -l /home $ ls -l /
Jde vypsat i jeden soubor (ne jeho obsah, ale informace o něm):
$ ls -l dopis
Užitečný je i "žolíkový" znak *
. Zastupuje libovolný počet znaků:
$ ls -l dop*
Do souboru jde přesměrovat jakýkoliv výstup, který se zobrazí na standardním výstupu – tedy např. i výstup příkazu ls
nebo jiných.
$ ls > vypis_home $ ls / $ ls /home > vypis_all_home
Úkoly:
vypis_trida
přesměruje (zapíše) názvy adresářů vaší třídy (těch z adresáře /home
).vypis_trida_desc
s tím rozdílem, že názvy budou v opačném pořadí (to zajistí vhodný přepínač příkazu ls
).Zástupné znaky zpracovává bash. Programu jsou předány již expandované parametry.
Tím je dosaženo jednotného zpracování parametrů pro spouštěné příkazy. Je tedy jedno, kterému příkazu je "podsunete".
* Jakékoliv znaky (i žádný znak) ? Jakýkoliv právě jeden znak [abc] Jeden z uvedených znaků (zde a, b nebo c) [a-e] Jeden znak z rozsahu (zde a až e) [^abc] Cokoliv kromě a, b nebo c (lze využít i rozsah) {slovo1,slovo2} Jedno z uvedených slov
Příklady:
Vypíše vše, co v...
$ ls /bin/*sh # /bin končí na sh $ ls /bin/[bcd]* # /bin začíná na b, c nebo d $ ls /bin/[a-d]* # /bin začíná na a, b, c nebo d $ ls /bin/[a-zA-Z] # /bin začíná na písmeno $ ls /etc/[ab]* # /etc začíná na a nebo b $ ls /bin/[^abc]* # /bin nezačíná na a, b nebo c $ ls *{.txt,.sh} # . končí na .txt nebo .sh $ ls /{bin,etc}/c* # /bin a /etc začíná na c $ ls /{,s}bin/c* # /bin a /sbin začíná na c $ ls {,/usr}/bin/z* # /bin a /usr/bin začíná na z
mkdir
Příkaz mkdir
(make directories) vytvoří adresář(e). Vytvořte si následující adresáře takto:
$ mkdir logy $ mkdir vykazy1 vykazy2 $ mkdir -p sestavy/leden
První příkaz vytvoří adresář logy
. Druhý vytvoří dva adresáře vykazy1
a vykazy2
najednou. Třetí vytvoří adresář sestavy
a v něm podadresář leden
. K vytvoření adresáře včetně podadresáře slouží přepínač -p
(parents) – ověřte si to pomocí mkdir --help
.
Vypište si současný stav adresáře. Adresář leden
ve výpisu nebude – je zanořený. Vypíšete jej takto:
$ ls sestavy
cd
Pro přesun mezi adresáři slouží příkaz cd
(change directory). Používá se třemi způsoby
Nemá přepínače ani manuálovou stránku (příkaz je součástí jádra systému):
$ cd adresar $ cd .. $ cd
..
(dvě tečky).Zkuste ještě příkaz:
$ cd .
Nestane se nic. Jedna tečka totiž označuje "tento adresář".
cp
Příkaz cp
(copy) kopíruje soubor. Základní syntaxe je:
$ cp <zdroj> <cil>
Pokud je v parametru <cil>
pouze název adresáře, zachová původní název. Pokud jej uvedete, vznikne kopie s tímto názvem.
Příklady:
$ cp /etc/fstab tab # pod názvem tab $ cp tab tab_kopie # kopie souboru $ cp /etc/fstab . # pod steným názvem
Lze využít i zástupné znaky:
$ cp adr1/* adr2 # vše z adr1 do adr2 $ cp adr1/*.txt adr2 # všechny .txt z adr1 do adr2 $ cp -r adr1/* adr2 # včetně podadresářů $ cp -u adr1/* adr2 # pouze nové soubory
mv
Příkaz mv
(move) plní dvě funkce: přesun nebo přejmenování. Základní syntaxe:
$ mv <zdroj> <cil>
Způsob použití je stejný jako u příkazu cp
. I zde platí, že pokud neuvedete v parametru <cil>
název souboru, zachová při přesunu původní název (přesune jej). Pokud název uvedete, vznikne při přesunu jej přejmenuje.
Pokud toto provedete v rámci stejného adresáře dojde k "přesunu" s přejmenováním.
Příklady:
$ mv adr1/* adr2 # přesune vše z adr1 do adr2 $ mv adr1/*.txt adr2 # přesune všechny .txt z adr1 do adr2 $ mv nazev1 nazev2 # přejmenuje nazev nazev1 na nazev2 $ mv adr1/nazev1 adr2 # přesune nazev1 pod stejným názvem $ mv adr1/n1 adr2/n2 # přesune n1 pod novým názvem n2
Přesuny můžete provádět pouze v rámci svého /home/jmeno
.
rm
, rmdir
Příkaz rm
(remove) odstraní (smaže) soubor(y). Terminál nemá "koš".
⚠️ Odstranění je nevratná operace!!! ⚠️
$ rm file # jeden soubor $ rm file1 file2 file3 # více souborů naráz $ rm -i file # potvrzení (y nebo n)
Také rm
podporuje žolíkové znaky:
$ rm adresar/* # všechny soubory v adresáři $ rm adresar/*.txt # všechny .txt soubory v adresáři $ rm -i adresar/*.txt # ...s potvrzením každého z nich
Samotný adresář se neodstraní. Ten se odstraní příkazem
$ rmdir adresar
Příkaz rmdir
umí odstranit pouze prázdný adresář.
pwd
Příkaz pwd
(print working directory) vypíše aktuální adresář:
MacBook:data machac$ pwd /Users/machac/data machac@TuX:~/vykazy$ pwd /home/machac/vykazy [jan@fedora ~/c]$ pwd /home/jan/c
Znak ~
(vlnka, tilda) reprezentuje domovský adresář:
18CPrijmeniJ@TuX:~$ pwd /home/18CPrijmeniJ
Výhodou tohoto zápisu je úspornost a také fakt, že pro každého uživatele je vlnka jeho home adresář.
⚠️ Oblast, kde se často chybuje, resp. obtížněji se chápe.
Všechny Unixové systémy mají jedno společné: nepoužívají písmena jednotek jako Windows. Vše adresáře a soubory jsou řazené do tzv. stromové struktury a "vyrůstají" z jediného kořenového adresáře "root". Ten se značí lomítkem /
.
Běžně se používají dva typy zápisu: absolutní nebo relativní.
Absolutní zápis obsahuje kompletní cestu počínaje kořenovým adresářem "root" (to první lomítko v cestě):
debian@jmeno:~$ cat /etc/network/interfaces
Relativní zápis cesty začíná názvem souboru nebo adresáře a vztahuje se k aktuálnímu pracovnímu adresáři. Pokud jsem v adresáři /etc
, pak relativní cesta by byla:
debian@jmeno:/etc$ network/interfaces
touch
touch file1 [file2 file3 file4 file5...]
Vytvoří jeden nebo více souborů (názvy oddělujte mezerou) nulové velikosti.
$ touch aaa $ touch bbb ccc
touch
a řady {n..m}
$ touch ddd{1..5}
Konstrukce {1..5}
vygeneruje řadu čísel od 1 do 5 (umí i abecedu). Vytvoří tedy pět souborů ddd1
, ddd2
... ddd5
.
Funguje to tak, že shell expanduje řadu {1..5}
a příkazu touch "podstrčí" už hotové názvy:
$ touch ddd1 ddd2 ddd3 ddd4 ddd5
Použití je tedy nezávislé na příkazu. Funguje i abeceda [a-z]
a [A-Z]
. Zkuste:
$ mkdir {A..D}_adr $ mkdir {2023..2025}_Q{1..4} $ mkdir {a..h}_adresar $ mkdir adresar{X..Z} $ touch rok_{2020..2025}.txt
Ve všech Unixových systémech jsou od nepaměti skryté soubory/adresáře takové, jejichž název začíná tečkou. Tečka je znak, je tedy součástí názvu.
Nejčastěji je využívají příkazy a aplikace pro uložení svých nastavení (konfigurace). Jsou skryté z dobrého důvodu. Neodstraňujte je!
Výpis skrytých souborů/adresářů zajistí přepínač -a
.
$ ls -a $ ls --all $ ls -l -a $ ls -al
💡 Krátké přepínače (
-
) lze sdružovat za jednu pomlčku bez ohledu na pořadí. Dlouhé (--
) musí být samostatně.
.
a ..
Ve výpisu včetně skrytých souborů ls -a
jsou na prvních dvou místech speciální soubory.
.
označuje "tento adresář"
..
označuje "nadřazený adresář"
Běžně se využívají u příkazů:
$ cd .. $ ls .. $ ./skript.sh $ ./nasobilka
ls
a jaké přepínače můžete použít pro zobrazení skrytých souborů/adresářů?mkdir
?cd
?cp
a jaké přepínače můžete použít pro kopírování adresářů?rm
a rmdir
?.
a ..
ve správě souborů a adresářů?Pište jen číslované odpovědi na otázky:
xxd
:data
, který se nachází v adresáři sady
:skripty
:skripty
v pracovním adresáři:Pište jen číslované odpovědi na otázky:
etc
(je v kořenovém adresáři):vypis10
s novým názvem vypis20
:file1
na file1.txt
:Pište jen číslované odpovědi na otázky:
cv3
.skript.sh
.skript2.sh
.skript3.sh
.cv3
vytvořte adresář vystupy
a v něm soubor config
./etc
.