Práce v příkazové řádce

Příkazová řádka je uživatelské rozhranní, ve kterém uživatel komunikuje s počítačem podobně jako při psaní programu, tj. píše příkazy, které počítač vykonává tak, jako když programátor píše program (recept), který následně spustí. V případě přímého ovládání počítače a interakce s operačním systémem je využito interaktivního režimu, ve kterém počítač reaguje na každý příkaz, který je v příkazové řádce napsán a odeslán počítači ke zpracování klávesou “Enter”. Data jsou v počítači uložena ve formě souborů, k nímž je přístup uživatelů zprostředkován operačním systémem. Proto základní práce s počítačem spočívá v interakci s operačním systémem a práci se soubory.

Výhodou ovládání počítače sekvencí příkazu je opakovatelnost, neboť se vlastně jedná o textový zápis operací podobně jako při psaní programu. Vlastně tak programujeme i pře běžném používání, zlvášťě pokud přidáme i podmíněné vykonávání příkazu a cykly. Takový zápis lze uložit do souboru a posleze replikovat, nebo vytvořit skript, který lze následně opakovaně spouštět a tím vlastně vytvořit nový příkaz. Pro inspiraci a pochopení základních principů se můžete podívat na historický snímek https://www.youtube.com/watch?v=tc4ROCJYbm0

Příkazová řádka je přítomna ve všech operačních systémech. Ve Windows je příkazová řádka přístupna pomocí programu cmd.exe nebo modernější varianty PowerShell.exe, případně alternativou Z-shell. Na systémech unixového typu běží příkazová řádka jako tzv. shell dostupný buď přímo v textovém režimu, nebo přes emulátory z grafického rozhranní (na Linuxu Xterm, Gnome terminal, Konsole …, na OS X terminal). Příkazová řádka umožňuje základní ovládání operačního systému (procházení adresářové struktury, práce se soubory, vyhledávání …), poskytuje rozhranní uživatelským programům a hlavně umožňuje řetězit vstupy a výstupy jednotlivých programů.

Velkou výhodou vývojového prostředí VS Code je integrace příkazové řádky do okna prostředí spolu s editačním oknem případně náhledem na existující soubory a to i v prostředí založené na aplikace v jediném grafickém okně.

Typická struktura příkazu

prikaz [přepínače] [parametry|argumenty|jména souboru(ů)]

Příkazy navigace v adresářové struktuře

Příkaz Používané přepínače Význam
ls -l -t vypíše obsah aktuálního pracovního adresáře (list directory contents)
cd změní aktuální pracovní adresář (change directory)
pwd vypíše absolutní adresu aktuálního pracovního adresáře (print working directory name)
tree vypíše strukturu aktuálního pracovního adresáře včetně podadresářů formou stromu

Příkazy práce se soubory a adresáři

Příkaz Používané přepínače Význam
mkdir Vytvoří adresář zadaného jména (make directories )
cp -r Zkopíruje soubor zadaného jména (copy files)
mv Přesune (přejmenuje) soubor zadaného jména (move files)
rm -r -f Odstraní soubor zadaného jména (remove directory entries)
​touch Vytvoří soubor zadaného jména, pokud takový existuje, jinak aktualizuje tzv. ​modification time​. ​
Drtivá většina příkazů má typicky vestavěnou manuálovou stránku, např. man touch, případně návod touch —-help.

Ostatní důležité příkazy

Příkaz Používané přepínače Význam
man Vypíše manuálovou stránku zadaného příkazu.
find Vyhledá soubor zadaného jména v aktuálním adresáři.
locate Jako find, ale hledá v kompletní adresářové struktuře vytvořené databáze.
cat Vypíše obsah souboru jako text
echo Vypíše obsah argument na standardní výstup, např. návratovou hodnota posledního příkazu echo $? nebo proměnná prostředí echo $HOME nebo echo $PWD.
hexdump -C Vypíše obsah souboru v hexadecimálním tvaru doplněný o adresy paměti.

Úkoly

Adresář (anglicky directory) je objektem souborového systému s přesně definovaným umistěním v rámci hiearchie souborů. Složka (folder) je motivována grafickým rozhraním reprezentující nějaký konkrétní adresář. https://en.wikipedia.org/wiki/Directory_(computing)#Folder_metaphor. Například domovský adresáře uživatele user najdeme typicky v adresáři /home/user. Složku Dokumenty můžeme například najít na grafického rozhraní a podle volby jazyka prostředí může odkazovat na /home/user/Documents nebo jinou složkou, třeba i vzdálený adresář.
  • V příkazové řádce vytvořte adresář prg a v něm lab01. Ideálně přímo v domovském adresáři, alternativně například ve složce Documents.
    • Ve vytvořeném adresáři prg vytvořte adresář lab01.
    • V adresáři lab01 vytvořte textový soubor se jménem prg-lab01.txt
    • Celý adresář 'lab01' přesuňte do adresáře 'prg-lab01' v adresáři ~/ctu-fee, kde symbol ~ reprezentuje domovský adresář, tež odkazovaný v proměnné prostředí HOME, odkazované např. printenv $HOME.
    • Soubor prg-lab01.txt přejmenujte na main.c.
Příklad sezení v příkazovém interpretu může být
➜  ~ pwd
/home/jf
➜  mkdir -p prg/lab01
➜  touch prg/lab01/prg-lab01.txt
➜  tree prg
prg
└── lab01
    └── prg-lab01.txt

1 directory, 1 file
➜  mkdir ctu-fee
➜  mv prg/lab01 $HOME/ctu-fee/prg-lab01
➜  cd ctu-fee/prg-lab01                          
➜  pwd
/home/jf/ctu-fee/prg-lab01
➜  ls
prg-lab01.txt
➜  mv prg-lab01.txt main.c
➜  cd
➜  tree ctu-fee 
ctu-fee
└── prg-lab01
    └── main.c

1 directory, 1 file
Jednotlivé kroky můžete kontrolovat například pohledem grafického správce souborů.
  • Vytvořte skript prg-lab01.sh, který provede uvedené kroky v posloupnosti, ale místo domovského adresáře umístě podadresáře a soubory do pracovního prostoru /tmp, například odkazovaného /tmp/$PWD.
    • Soubor označte jako spustitelný např. chmod +x prg-lab01.sh pro přímé spuštění ve stylu ./prg-lab01.sh nebo jej můžete spustit v rámci konkrétní instance příkazového interpretu např. . ./prg-lab01.sh.
Pokud ve skriptu použijete příkaze cd pro změnu aktuálního pracovního adresáře, můžete se k předchozím adresáři vrátit cd -, viz například https://www.youtube.com/watch?v=zvKRKU-ex6g.
  • Ve skriptu můžete pro zjednodušení využít proměnnou např. dst=/tmp/$HOME použitelnou třeba v mkdir -p $dsts/prg/lab01.
Výstup může například vypadat následovně.
. ./prg-lab01.sh
/tmp/home/jf/prg
└── lab01
    └── prg-lab01.txt

1 directory, 1 file
/tmp/home/jf/ctu-fee
└── prg-lab01
    └── main.c

1 directory, 1 file
courses/b3b36prg/labs/lab01/cmd.txt · Last modified: 2023/09/12 09:45 by faiglj