Příkazy zadáváme do emulátoru terminálu – xterm, GNOME Terminal, Konsole, rxvt, … Zadaný příkaz spustíme stiskem klávesy <Enter> (odřádkováním). Emulátor terminálu nám obvykle nabízí historii – k poslednímu zadanému příkazu se vrátíme stiskem šipky nahoru. Pokud chceme vyhledávat mezi dávnějšími příkazy, použijeme klávesovou zkratku <Ctrl-R> a poté napíšeme část názvu příkazu. Dalším stiskem <Ctrl-R> se zanoříme hlouběji do minulosti. Tato historie ale není bezedná, obvykle pojme jen cca 500 posledních příkazů (tento počet lze nastavit).
Pokud napíšeme pouze část jména příkazu, můžeme nechat shell, aby jej doplnil a to stiskem klávesy <Tab>. Stejně tak to funguje i na jména souborů.
Další užitečné klávesové zkratky jsou <Ctrl-C> pro zastavení běhu programu, <Ctrl-D> pro ukončení standardního vstupu, <Ctrl-Z> pro pozastavení běhu programu a <Ctrl-L> pro vyčištění obrazovky terminálu. Klávesa <Tab> spouští doplňování názvů souborů.
V zápisu cesty jsou od sebe adresáře odděleny znakem /. Vždy když máme otevřen emulátor terminálu, nacházíme se v nějakém adresáři a všechny příkazy, které v tu chvíli zavoláme spouštíme uvnitř tohoto adresáře. Adresář, ve kterém se právě nacházíme budeme označovat jako pracovní. Každá cesta může být absolutní, nebo relativní. Absolutní začíná lomítkem a vztahuje ke kořenovému adresáři /. Naopak, relativní cesta se vztahuje k pracovnímu adresáři.
Speciální soubory:
~ ... domovský adresář
. ... pracovní adresář
.. ... nadřazený adresář
.abc ... soubory začínající tečkou jsou skryté
Skryté soubory se defaultně nezobrazují při vypsání obsahu adresáře, ani při expanzi * (viz níže).
Zadání příkazu má obvykle tři části – jméno příkazu, přepínače a parametry. Přepínače a parametry ovlivňují chování příkazu a mohou, ale nemusí být uvedeny.
ls -i -d /tmp ... vypíše adresář /tmp (nikoliv jeho obsah)
a jeho číslo inode
ls -id /tmp ... totéž, se sloučenými přepínači
ls -i /tmp ... vypíše obsah adresáře /tmp a čísla inode
jednotlivých souborů
ls -d /tmp ... vypíše adresář /tmp
ls -id ... vypíše pracovní adresář a jeho číslo inode
ls ... vypíše obsah pracovního adresáře
Metaznaky jsou znaky, které mají v shellu speciální význam. Chceme-li tento speciální význam potlačit a zapsat je jako normální znaky, musíme před ně zapsat zpětné lomítko \. Metaznaky jsou mj. \|&;()<>[]*? a navíc mezera a tabulátor. Nejvíce potíží zažijete pravděpodobně s mezerou. Pozor na to, mezera odděluje jednotlivé parametry příkazu. Chcete-li zadat parametr obsahující mezery, musíte potlačit jejich speciální význam předřazením \ (případně uvozovkami či apostrofy, ale o tom zase někdy jindy).
Expanze je činnost prováděná na úrovni shellu, která předtím, než spustí příkaz a předá mu parametry nahradí některé znaky či jejich posloupnosti něčím jiným. Prozatím si vystačíme jen s jedním expanzním znakem a to *. * se expanduje na libovolnou (i prázdnou) posloupnost znaků, která odpovídá jménu souboru v daném adresáři. Lépe to bude vidět na příkladu:
ls -d * ... vypíše všechny soubory v pracovním adresáři
ls -d *.txt ... vypíše všechny soubory s příponou .txt
ls -d *\ * ... vypíše všechny soubory, které obsahují
v názvu mezeru
ls -d /etc/*.conf ... vypíše všechny soubory v adresáři /etc
s příponou .conf
ls -d */*.jpg ... vypíše všechny soubory s příponou jpg, které
se nachází v podadresáři pracovního adresáře
ls -d .* ... vypíše všechny skryté soubory
Kromě posledního příkladu se však nikdy nezahrnou skryté soubory začínající tečkou. Znak * se na ně prostě neexpanduje.
Pro řešení příkladů se vám bude hodit přehled základních příkazů.
ls /etc
ls -l /etc
pwd
ls ..
cd /etc
cd apache2/vhosts.d
ls
cd ..
ls
cd
cd /etc; ls; cd
echo Datum > datum
echo Datum > datum
date +"%d. %m. %Y" >> datum
Řešení jedním příkazem:
date +"Datum%n%d. %m. %Y" > datum
mkdir One above all
Správná řešení:
mkdir One\ above\ all
mkdir "One above all"
mkdir 'One above all'
file * .*
mkdir dir
touch dir/alice dir/bob dir/cecil
mv dir/alice dir/alfonsie
rm dir/*
head /etc/passwd
head -n 15 /etc/passwd
touch -- -f; rm -- -f
touch -- -f; rm ./-f
wc -l /etc/passwd
tail -n +10 /etc/passwd
head -n 20 /etc/passwd > tmpfile
tail tmpfile
head -n 17 /etc/passwd > tmpfile
tail -n +13 tmpfile
ls ~ > tmpfile
wc -l tmpfile