===== 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 (//**l**i**s**t directory contents//) | |''cd''| | změní aktuální pracovní adresář (//**c**hange **d**irectory//) | |''pwd''| | vypíše absolutní adresu aktuálního pracovního adresáře (//**p**rint **w**orking **d**irectory 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 (//**m**a**k**e **dir**ectories //)| |''cp''| -r | Zkopíruje soubor zadaného jména (//**c**o**p**y files//)| |''mv''| | Přesune (přejmenuje) soubor zadaného jména (//**m**o**v**e files//)| |''rm''| -r -f | Odstraní soubor zadaného jména (//**r**e**m**ove 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 argumentu 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 ==== * Nastavte si heslo v počítačové učebně [[https://www.felk.cvut.cz/labpass/|(Nastavení hesla)]] a seznamte se používaným prostředím. * Procvičte si práci v [[courses:bab36prga:tutorials:cmds|příkazové řádce]]. ''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'' nebo ''echo $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ě. . ./prga-lab01.sh /tmp/home/jf/prga └── lab01 └── prg-lab01.txt 1 directory, 1 file /tmp/home/jf/ctu-fee └── prg-lab01 └── main.c 1 directory, 1 file