C2110 Operační systém UNIX a základy programování U05: Souborový systém -1C2110 Operační systém UNIX a základy programování Petr Kulhánek kulhanek@chemi.muni.cz Národní centrum pro výzkum biomolekul, Přírodovědecká fakulta Masarykova univerzita, Kamenice 5, CZ-62500 Brno U05: Souborový systém PS/2022 Prezenční forma výuky: Rev5 C2110 Operační systém UNIX a základy programování U05: Souborový systém -2Souborový systém ➢ struktura ➢ odlišnosti od MS Windows ➢ relativní a absolutní cesty ➢ zástupné znaky ➢ základní příkazy C2110 Operační systém UNIX a základy programování U05: Souborový systém -3Struktura souborového systému UNIX využívá hierarchický adresářový souborový systém složený z adresářů (složek) a souborů. Všechny adresáře a soubory leží v jediném kořenovém adresáři (/). / home bin ivo kořenový adresář soubortest.txt adresář podadresář adresáře home Domovský adresář: ● adresář sloužící pro data a nastavení uživatele ● obvykle v cestě /home/username C2110 Operační systém UNIX a základy programování U05: Souborový systém -4Srovnání s MS Windows Vlastnost Linux (ext2/ext3/ext4) MS Windows (FAT32,NTFS) Diskové oddíly (partitions) Ne Diskové oddíly se připojují jako adresáře. C:, D:, atd. Je však možné připojit i jako adresář (ntfs). Jména Rozlišuje malá a velká písmena (case sensitive). Nerozlišuje malá a velká písmena (case insensitive). Oddělování jmen Lomítko Zpětné lomítko Přístupová práva Ano POSIX Ano (pouze NTFS) ACL Zařízení (hardware) Jako speciální soubory. Ne C2110 Operační systém UNIX a základy programování U05: Souborový systém -5Souborový systém na klastru WOLF wolf01 /scratch wolf02 /scratch wolf03 /scratch wolf04 /scratch /home ........ Sdílený obsah na všech uzlech klastru WOLF. Data jsou zálohována. Zálohy jsou dostupné ve formě snapshotů v 10-ti hodinových intervalech 30 dní zpět. Obnova souborů na požádání. Kapacita na uživatele je omezena kvótou 1,5 GB. Rozdílný obsah na každém uzlu. Data na svazku /scratch se nezálohují a mohou být kdykoliv smazána bez předchozího upozornění. Kapacita není omezena kvótou na uživatele. C2110 Operační systém UNIX a základy programování U05: Souborový systém -6Identifikace adresářů a souborů / home bin user test.txt /home/user/test.txt - absolutní cesta identifikující soubor test.txt vzhledem ke kořenovému adresáři Cesta k adresáři nebo souboru může být uvedena jako absolutní nebo relativní. Jména adresářů a souborů se oddělují lomítkem /. user/test.txt - relativní cesta identifikující soubor test.txt vzhledem k aktuálnímu adresáři (v tomto případě se jedná o adresář /home) C2110 Operační systém UNIX a základy programování U05: Souborový systém -7Typy cest Absolutní cesta je vždy uvedena vzhledem ke kořenovému nebo k domovskému adresáři. Musí tedy začínat buď lomítkem / nebo tildou ~. Relativní cesta je cesta uvedená k aktuálnímu/pracovnímu adresáři. (Absolutní cestu pracovního adresáře lze získat příkazem pwd.) /home/kulhanek/Documents/domaci_ukol.txt ../alois/Documents Použití tildy: ~ domovský adresář přihlášeného uživatele ~username domovský adresář uživatele username Speciální jména adresářů: . (tečka) aktuální adresář .. (dvě tečky) rodičovský (nadřazený) adresář Cesty v souborovém systému (bez ohledu na OS) mohou být relativní nebo absolutní. Význam relativních cest je závislý na aktuálním pracovním adresáři, kdežto význam absolutních cest je na aktuálním pracovním adresáři nezávislý. C2110 Operační systém UNIX a základy programování U05: Souborový systém -8Cesty vs poštovní adresy Velmi blízkou paralelou k cestám jsou např. poštovní adresy: Česká republika Zeměkoule Brno Zlín Kopretinová Kopretinová 5 6 5 6 Relativní adresa: Absolutní adresa: Kopretinová 5 /Zeměkoule/Česká republika/Brno/Kopretinová 5 C2110 Operační systém UNIX a základy programování U05: Souborový systém -9Využití relativních a absolutních cest V běžné práci se často používají oba typy a to i souběžně. experiment1 experiment2 experiment3 experiment4 analyzační skript Databáze PDB struktur absolutní cesty relativní cesty C2110 Operační systém UNIX a základy programování U05: Souborový systém -10Využití relativních a absolutních cest V běžné práci se často používají oba typy a to i souběžně. experiment1 experiment2 experiment3 experiment4 analyzační skript Databáze PDB struktur absolutní cesty relativní cesty C2110 Operační systém UNIX a základy programování U05: Souborový systém -11Zástupné znaky v názvech souborů Zástupné znaky (wildcards, divoké znaky, speciální znaky) v názvech souborů nebo adresářů: * - cokoliv v názvu (bez skrytých souborů) ? - jeden znak v názvu [] - rozsah (jeden znak) v názvu, př. [ajk], [a,j,k], [a-j] Rozvoj (expanzi) zástupných znaků provádí shell (prostředí zpřístupňující příkazovou řádku) před spuštěním samotného příkazu. Expanzi lze zabránit uvedením jména v uvozovkách nebo použitím zpětného lomítka před speciálním znakem. V tomto případě může expanzi provést spouštěný příkaz (např. find). Zadaný příkaz: $ cp *.pdf Documents/ Doplněný příkaz: $ cp 01.pdf 02.pdf Documents/ Příklad: Aktuální adresář obsahuje soubory 01.pdf a 02.pdf expanze spuštění příkazu C2110 Operační systém UNIX a základy programování U05: Souborový systém -12Speciální znaky v názvech souborů Speciální znaky je možné souběžně použít v názvech adresářů a souborů: Příklady: $ cp ~/ukol[1,4,5]/*.pdf Documents/ zkopíruje všechny pdf dokumenty z podadresářů ukol1, ukol4 a ukol5 v domovském adresáři do podadresáře Documents Příklady: $ cp *.pdf Documents/ zkopíruje všechny pdf dokumenty z aktuálního adresáře do podadresáře Documents $ rm * smaže všechny soubory v aktuálním adresáři (kromě adresářů a skrytých souborů a adresářů) $ mv A? Tmp/ přesune soubory s názvem začínajícím písmenem "A" a obsahujícím dva znaky do adresáře "Tmp" C2110 Operační systém UNIX a základy programování U05: Souborový systém -13Základní příkazy Souborový systém (základní příkazy): cd změní aktuální pracovní adresář pwd vypíše cestu k aktuálnímu pracovnímu adresáři ls vypíše obsah adresáře mkdir vytvoří adresář rmdir smaže adresář (musí být prázdný) cp zkopíruje soubor či adresář mv přesune soubor či adresář rm odstraní soubor či adresář find vyhledává soubory či adreáře "Zlatá trojice" – musím vědět, jak se tam dostat (cd), kde jsem, pokud to nevím (pwd) a co tam je (ls) Užitečné tipy: $ cd příkaz bez zadaného argumentu nastaví jako pracovní adresář domovský adresář Je vhodné mít otevřeny minimálně dva terminály ve zdrojovém a cílovém adresáři, používat automatické dokončování (TAB), a kontrolovat obsahy adresářů před a po provedení operace. C2110 Operační systém UNIX a základy programování U05: Souborový systém -14Vytvoření adresářů • Vytvoření adresáře $ mkdir jmeno_adresare • Vytvoření vnořených adresářů $ mkdir -p jmeno_adr1/jmeno_adr2/jmeno_adr3 volba -p (parents) způsobí, že budou vytvořeny rodičovské adresáře, pokud neexistují C2110 Operační systém UNIX a základy programování U05: Souborový systém -15- Kopírování • Ke kopírování slouží příkaz cp $ cp soubor1 soubor2 vytvoří kopii souboru "soubor1" s názvem "soubor2" $ cp soubor1 soubor2 soubor3 adresar1/ kopíruje soubory "soubor1 ", "soubor2", "soubor3" do adresáře "adresar1" $ cp -r adresar1 adresar2 vytvoří kopii adresáře "adresar1" s názvem "adresar2"; pokud adresář "adresar2" již existuje, vytvoří kopii adresáře "adresar1" jako podadresář adresáře "adresar2" $ cp -r soubor1 adresar2 soubor3 adresar1/ kopíruje soubory "soubor1", "soubor3" a adresář "adresar2" do adresáře "adresar1" Volbu -r (recursive) je nutné použít pro kopírování obsahu adresářů. C2110 Operační systém UNIX a základy programování U05: Souborový systém -16- Přesouvání • K přesouvání nebo přejmenovávání slouží příkaz mv $ mv soubor1 soubor2 přejmenuje soubor "soubor1" na "soubor2" $ mv soubor1 soubor2 soubor3 adresar1/ přesune soubory "soubor1", "soubor2", "soubor3" do adresáře "adresar1" $ mv adresar1 adresar2 přejmenuje adresář "adresar1" na "adresar2"; pokud adresář "adresar2" již existuje, přesune adresář "adresar1" do adresáře "adresar2" $ mv soubor1 adresar2 soubor3 adresar1/ přesune soubory "soubor1", "soubor3" a adresář "adresar2" do adresáře "adresar1" C2110 Operační systém UNIX a základy programování U05: Souborový systém -17- Mazání • K mazání slouží příkaz rm $ rm soubor1 odstraní soubor "soubor1" $ rm -r adresar1 odstraní adresář "adresar1" rm -rf .* rekurze (r) a bez dotazu (f - force) .* -> .. (mazání i směrem nahoru) C2110 Operační systém UNIX a základy programování U05: Souborový systém -18Skryté soubory a adresáře Jména skrytých souborů či adresářů začínají tečkou. Při běžném výpisu se nezobrazují, lze je vypsat pomocí příkazu ls -a. Speciální znaky *, ? a [] v běžném kontextu nezahrnují skryté soubory. Skryté soubory obsahují konfiguraci systému a pokud nevíte co děláte, tak je nemažte nebo neměňte. C2110 Operační systém UNIX a základy programování U05: Souborový systém -19Formát dotazu příkazové řádky Výchozí nastavení: $ PS1="[\u@\h \W]$ " Upravené nastavení: $ PS1="[\u@\h \w]$ " Vzhled dotazu příkazové řádky lze měnit. Slouží k tomu systémová proměnná PS1 (man bash). Pokud vám současný formát nevyhovuje (zobrazuje jméno posledního adresáře z aktuální cesty), můžete si vzhled změnit následovně: velké a malé písmeno w Změna se projeví pouze v terminálu, kde byla provedena. Nastavení je možné učinit trvalým tak, že se příkaz vloží na konec skrytého souboru ~/.bashrc na samostatný řádek. K změně obsahu souboru použijte textový editor gedit nebo kwrite. Změna v nastavení se projeví v nově otevřených terminálech. Upravené nastavení bude zobrazovat celou cestu k pracovnímu adresáři. C2110 Operační systém UNIX a základy programování U05: Souborový systém -20Cvičení 1 1. V domovském adresáři vytvořte adresáře: Documents/C2110 2. Do adresáře C2110 zkopírujte přednášky v pdf formátu z adresáře: /home/kulhanek/Documents/C2110/Presentations 3. Vytvořte adresář studmat ve vašem domovském adresáři 4. Do adresáře ~/studmat zkopírujte prezentaci C2110-CZ-T03.pdf z adresáře ~/Documents/C2110 a nazvěte ji prezentace.pdf 5. Vytvořte adresář /scratch/username/pokus 6. Soubor prezentace.pdf zkopírujte do adresáře /scratch/username/pokus 7. V adresáři /scratch/username/pokus prezentaci přejmenujte na tyden3.pdf 8. Přihlaste se na pracovní stanici wolf01.ncbr.muni.cz 9. Je soubor tyden3.pdf přítomen v adresáři /scratch/username/pokus? Pozorování diskutujte. 10. Smažte adresáře /scratch/username/pokus a ~/studmat Pokuste se naučit používat: • více terminálů • automatické dokončování (klávesa TAB) • zjednodušené kopírování: označit levým tlačítkem / vložit prostředním tlačítkem (kolečkem) myši • historii příkazové řádky username – vaše uživatelské jméno C2110 Operační systém UNIX a základy programování U05: Souborový systém -21Domácí úkoly ➢ Příkaz find ➢ Procvičování příkazů C2110 Operační systém UNIX a základy programování U05: Souborový systém -22Vyhledávání souborů K vyhledávání souborů lze použít příkaz find. $ find [where] what pokud není uvedeno, hledá se v aktuálním adresáři Vyhledávací dotaz (what) je komponován z dílčích dotazů, které je možné spojovat logickými operátory. Nejběžnější dotazy: -name pattern najde všechny soubory, které mají jméno pattern pattern může obsahovat speciální znaky: *,?,[] (při použití speciálních znaků uvádíme pattern v uvozovkách) -type c najde všechny soubory typu c (soubor, adresář, atd. výčet typů viz. man find) Logické operátory: -and levý a pravý dotaz je splněn současně -or je splněn levý nebo pravý dotaz vyhledávání je rekurzivní (výchozí stav) C2110 Operační systém UNIX a základy programování U05: Souborový systém -23Vyhledávání souborů - příklady $ find /home/ -name '*.txt' $ find ~kulhanek –name '*.txt' –or –name '*.hpp' $ find –name 'D*' –and –type d v adresáři /home/ nalezne všechny soubory, které mají zakončení .txt v adresáři /home/kulhanek nalezne všechny soubory, které mají zakončení .txt nebo .hpp v aktuálním adresáři nalezne všechny podadresáře, jejichž jména začínají písmenem D C2110 Operační systém UNIX a základy programování U05: Souborový systém -24Domácí úkol 1. Ve svém domovském adresáři vytvořte adresář Data 2. Do adresáře Data zkopírujte obsah adresáře /home/kulhanek/Documents/C2110/01.UNIX/U05 včetně podadresářů 3. Nalezněte všechny soubory s koncovkou .cpp, které se nacházejí v adresáři Data (jména souborů vypište na obrazovku, použijte příkaz find) 4. Adresář Data smažte. 5. V adresáři /scratch/username vytvořte adresář Headers 6. Do adresáře Headers zkopírujte všechny soubory z adresáře /home/kulhanek/Documents/C2110/01.UNIX/U05/dev/src, které mají koncovkou .h 7. Do adresáře Headers přesuňte všechny soubory z adresáře /home/kulhanek/Documents/C2110/ 01.UNIX/U05/dev/src, které mají koncovkou .cpp K čemu skutečně došlo a proč? 8. Jaká je velikost v B a kB souboru /home/kulhanek/Documents/C2110/01.UNIX/U05/dev/src/GraphicsSetup.cpp 9. V adresáři Headers smažte všechny soubory s koncovkou .h a obsahující slovo Graphics na začátku jména souboru 10. Smažte adresář Headers