diff --git a/presentation/filesystems/ZIP-64_Internal_Layout.png b/presentation/filesystems/ZIP-64_Internal_Layout.png new file mode 100644 index 00000000..7b49d509 Binary files /dev/null and b/presentation/filesystems/ZIP-64_Internal_Layout.png differ diff --git a/presentation/filesystems/filesystems.pdf b/presentation/filesystems/filesystems.pdf new file mode 100644 index 00000000..0215a6ba Binary files /dev/null and b/presentation/filesystems/filesystems.pdf differ diff --git a/presentation/filesystems/filesystems.tex b/presentation/filesystems/filesystems.tex new file mode 100644 index 00000000..3a8e8586 --- /dev/null +++ b/presentation/filesystems/filesystems.tex @@ -0,0 +1,502 @@ +\documentclass{beamer} +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage[czech]{babel} + +\setbeamerfont{title}{size=\LARGE} + +\title{Souborové systémy} +\author{Eliška Jégrová} +\date{24. 11. 2025} + +% pro obrázky a kreslení +\usepackage{tikz} +\usetikzlibrary{positioning} +\usepackage{graphicx} +\usepackage{datetime} +\usepackage{svg} +\usepackage{listings} +\usepackage{dirtree} + + +% vlastní příkaz pro tildy +\newcommand{\ts}{\raisebox{-0.25em}{\textasciitilde}} + +\begin{document} + + \frame{\titlepage} + + \begin{frame}{Obsah} + \tableofcontents + \end{frame} + + +\section{Adresářová struktura} + +\begin{frame}{Kořenový adresář /} + \begin{itemize} + \item V Linuxu jsou všechny soubory v jednom stromu pod \texttt{/}. + \item Na rozdíl od Windows (disky \texttt{C:}, \texttt{D:}, …) + je tu \textbf{jeden společný strom}. + \item Strukturu \texttt{/} popisuje standard + \textbf{Filesystem Hierarchy Standard (FHS)}. + \item Cíle: + \begin{itemize} + \item oddělit systémové soubory od dat uživatelů, + \item rozlišit soubory jen ke čtení vs. pro zápis, + \item umožnit sdílení částí systému mezi více počítači. + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame}{Adresářový strom – základní přehled} + \begin{columns}[t] + \column{0.45\textwidth} + \dirtree{% + .1 /. + .2 bin. + .2 boot. + .2 dev. + .2 etc. + .2 home. + .2 root. + .2 run. + .2 opt. + .2 tmp. + .2 usr. + .2 var. + } + + \column{0.55\textwidth} + \begin{itemize} + \item Tenhle základ najdeš \\(s drobnými rozdíly) na všech linuxových systémech. + \item Uživatelé pracují nejčastěji \\s \texttt{/home}, +případně s \texttt{/etc} (konfigurace) a logy \\ve \texttt{/var/log}. + \end{itemize} + \end{columns} +\end{frame} + + + +\begin{frame}{/bin, /usr/bin – programy} + \begin{itemize} + \item \texttt{/bin} – základní příkazy systému + (např. \texttt{bash}, \texttt{ls}, \texttt{cat}). + \item \texttt{/usr/bin} – „většina ostatních“ programů. + \item Na moderní Fedoře je \texttt{/bin} jen odkaz na \texttt{/usr/bin}. + \item Historicky bylo rozdělení důležité kvůli sdílení po síti; + dnes zůstalo hlavně kvůli kompatibilitě. + \end{itemize} +\end{frame} + +\begin{frame}{/dev a /boot} + \begin{itemize} + \item \texttt{/dev} – speciální soubory reprezentující zařízení: + \begin{itemize} + \item např. \texttt{/dev/sda}, \texttt{/dev/tty0}, \texttt{/dev/null}. + \item platí „všechno je soubor“ – čtení/zápis se mapuje na zařízení. + \end{itemize} + \item \texttt{/boot} – soubory potřebné ke startu systému: + \begin{itemize} + \item linuxové jádro, + \item konfigurace zavaděče (bootloaderu), + \item případně více verzí jadra pro návrat „zpět“. + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame}{/etc, /home, /root} + \begin{itemize} + \item \texttt{/etc} – konfigurace systému: + \begin{itemize} + \item např. \texttt{/etc/passwd}, \texttt{/etc/fstab}, \texttt{/etc/ssh/sshd\_config}. + \item většinou textové soubory, upravuje je jen \textbf{root}. + \end{itemize} + + \item \texttt{/home} – domovské adresáře běžných uživatelů: + \begin{itemize} + \item sem si ukládají uživatelé vlastní data a konfiguraci. + \end{itemize} + + \item \texttt{/root} – domovský adresář uživatele \textbf{root}: + \begin{itemize} + \item root nemá home v \texttt{/home}, ale právě v \texttt{/root}, + \item běžný uživatel sem normálně nemá přístup. + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame}{/var, /tmp, /run, /opt} + \begin{itemize} + \item \texttt{/var} – „proměnná“ data systému: + \begin{itemize} + \item logy (\texttt{/var/log}), + \item maily, spool tiskáren, + \item databáze a pracovní data služeb. + \end{itemize} + + \item \texttt{/tmp} – dočasné soubory: + \begin{itemize} + \item používají ho aplikace jako odkladiště, + \item obsah se často maže po restartu. + \end{itemize} + + \item \texttt{/run} – běhová data po startu systému: + \begin{itemize} + \item PID soubory, sockety, různé „stavové“ informace, + \item existují jen za běhu (po rebootu se vytváří znovu). + \end{itemize} + + \item \texttt{/opt} – „volitelné“ aplikace: + \begin{itemize} + \item typicky software třetích stran, + \item může mít vlastní podadresář, např. \texttt{/opt/firma/app}. + \end{itemize} + \end{itemize} +\end{frame} + + +\section{Souborové systémy} + +\begin{frame}{Co je souborový systém} + \begin{itemize} + \item Na disku jsou data jako dlouhá řada jedniček a nul. + \item \textbf{Souborový systém} je dohoda, jak z toho udělat: + \begin{itemize} + \item soubory se jménem, + \item adresáře (strom), + \item informace o velikosti, vlastnících, právech, časech změny, … + \end{itemize} + \item Umožní: + \begin{itemize} + \item rychle najít soubor podle cesty, + \item přidávat/mazat soubory, + \item kontrolovat přístup pomocí práv. + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame}{Analogie: ZIP archiv} + \begin{itemize} + \item ZIP soubor: + \begin{itemize} + \item uvnitř jsou za sebou naskládaná \textbf{data souborů}, + \item na konci je \textbf{seznam souborů} (centrální adresář ZIPu). + \end{itemize} + \item Seznam říká: + \begin{itemize} + \item jak se soubor jmenuje, + \item kde v ZIPu data začínají, + \item jak je soubor dlouhý. + \end{itemize} + \end{itemize} + + \begin{center} + \includegraphics[width=0.8\textwidth]{ZIP-64_Internal_Layout} + + \end{center} +\end{frame} + +\section{Inode a odkazy} + +\begin{frame}{Inode – informace o souboru} + \begin{itemize} + \item Soubor má: + \begin{itemize} + \item \textbf{obsah} (data), + \item \textbf{jméno} (cesta v adresáři), + \item \textbf{metadata} (velikost, práva, čas změny, \dots). + \end{itemize} + \item V Linuxu jsou metadata uložená v \textbf{inode}: + \begin{itemize} + \item typ souboru (běžný, adresář, link), + \item práva, vlastník, skupina, + \item velikost, časy změny, + \item počet odkazů, + \item odkazy na datové bloky na disku. + \end{itemize} + \item Ke zjištění inode se používá příkaz \texttt{stat} + + \texttt{\$ stat basnicka.txt} + + \end{itemize} + +\end{frame} + +\begin{frame}[fragile]{Inode vs. jméno souboru} + \begin{itemize} + \item \textbf{Jméno} souboru je jen záznam v adresáři. + \item Jméno ukazuje na \textbf{inode}, inode ukazuje na data. + \item Číslo inode zjistíš např.: + \begin{verbatim} + $ ls -i soubor.txt + 123456 soubor.txt + + $ stat soubor.txt + \end{verbatim} + \item Když soubor \texttt{přejmenuješ}: + \begin{verbatim} + $ mv soubor.txt novy.txt + \end{verbatim} + inode zůstává stejné – změnilo se jen jméno v adresáři. + \end{itemize} +\end{frame} +\begin{frame}[fragile]{Odkazy - Hard link} + \begin{itemize} + \item \textbf{Hard link} = další jméno, které ukazuje na stejný inode. + \item Vytvoření: + \begin{verbatim} + $ ln puvodni.txt kopie.txt + \end{verbatim} + \item Oba názvy: + \begin{itemize} + \item mají \textbf{stejné číslo inode}, + \item ukazují na stejná data, + \item jsou „rovnocenné“ – žádný není „ten původní“. + \end{itemize} + \item Když jeden z nich smažeš: + \begin{verbatim} + $ rm puvodni.txt + \end{verbatim} + data zůstanou – dokud existuje aspoň jeden hard link + na daný inode. + \end{itemize} +\end{frame} +\begin{frame}[fragile]{Odkazy - Symbolický (soft) link} + \begin{itemize} + \item \textbf{Symbolický link} (symlink, soft link): + \begin{itemize} + \item zvláštní soubor, který obsahuje \textbf{cestu} + k jinému souboru, + \item má své vlastní číslo inode. + \end{itemize} + \item Vytvoření: + \begin{verbatim} + $ ln -s cilovy_soubor link.txt + \end{verbatim} + \item Chování: + \begin{itemize} + \item když čteš \texttt{link.txt}, systém přesměruje + přístup na cílový soubor, + \item když se cílový soubor smaže, \texttt{link.txt} + zůstane, ale je „rozbitý“. + \end{itemize} + \item Na rozdíl od hard linku může symlink: + \begin{itemize} + \item mířit i na jiný souborový systém, + \item mířit na adresář. + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame}[fragile]{Samostatná práce 1 – inode a odkazy} + \begin{enumerate} + \item Vytvoř soubor \texttt{data.txt} s libovolným obsahem. + \item Zobraz jeho inode: + \begin{verbatim} + $ ls -i data.txt + $ stat data.txt + \end{verbatim} + \item Vytvoř hard link \texttt{data2.txt}. (ln) + \item Zobraz si inode (krok 2) pro \texttt{data2.txt} a porovnej s předešlými výpisy. + \item Vytvoř symlink \texttt{data-link.txt} (ln -s) a znovu se podívej na inode. + \item Zkus smazat \texttt{data.txt} a sleduj, co se stane + s \texttt{data2.txt} a \texttt{data-link.txt}. + \end{enumerate} +\end{frame} + +\section{Zařízení a souborové systémy} + +\begin{frame}{Disk jako soubor} + \begin{itemize} + \item Data jsou fyzicky uložená na \textbf{zařízeních}: + \begin{itemize} + \item pevné disky, SSD, USB flashky, virtuální disky ve VM, ISO obrazy… + \end{itemize} + \item V Linuxu jsou vidět jako \textbf{bloková zařízení} v \texttt{/dev}: + \begin{itemize} + \item např. \texttt{/dev/sda}, \texttt{/dev/sda1}, \texttt{/dev/vda}, \dots + \end{itemize} + \item Na zařízení může být: + \begin{itemize} + \item přímo souborový systém (např. \texttt{/dev/sda}), + \item nebo tabulka oddílů a souborový systém až na oddílu + (např. \texttt{/dev/sda1}). + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame}[fragile]{Připojené souborové systémy} + \begin{itemize} + \item \texttt{findmnt} ukazuje, co je kde připojeno, v podobě stromu: +\begin{verbatim} + $ findmnt + TARGET SOURCE FSTYPE OPTIONS + / /dev/vda3[/root] btrfs rw,relatime,seclabel, + compress=zstd:1,discard=async, + space_cache=v2,subvolid=256,subvol + |-/boot /dev/vda2 btrfs rw,relatime,seclabel + |-/tmp tmpfs tmpfs rw,nosuid,nodev, + seclabel,nr_inodes=1048576,inode64 +\end{verbatim} + + \item případně jaký souborový systém je připojený na daném adresáři. +\begin{verbatim} +$ findmnt / +TARGET SOURCE FSTYPE OPTIONS +/ /dev/vda3[/root] btrfs rw,relatime,seclabel,.. +\end{verbatim} + \end{itemize} +\end{frame} + +\begin{frame}[fragile]{df – využití souborových systémů} + \begin{itemize} + \item \texttt{df} ukazuje, jak jsou souborové systémy velké a zaplněné: + \begin{verbatim} + $ df -h + Filesystem Size Used Avail Use% Mounted on + /dev/vda3 19G 4,8G 14G 26% / + tmpfs 2.0G 0 2.0G 0% /tmp + \end{verbatim} + \item Přepínač \texttt{-h} (human-readable) ukazuje velikosti + v MB/GB místo v blocích. + \end{itemize} +\end{frame} + +\begin{frame}[fragile]{lsblk – přehled disků a oddílů} + \begin{itemize} + \item Příkaz \texttt{lsblk} zobrazí bloková zařízení a jejich strukturu: + \begin{verbatim} + + $ lsblk + NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS + sr0 11:0 1 2,2G 0 rom /run/media/eliska/Fedora-WS-Live-42 + zram0 251:0 0 3,8G 0 disk [SWAP] + vda 253:0 0 20G 0 disk + |-vda1 253:1 0 1M 0 part + |-vda2 253:2 0 1G 0 part /boot + |-vda3 253:3 0 19G 0 part /home + / + \end{verbatim} + \end{itemize} +\end{frame} + +\section{Připojování souborových systémů} + +\begin{frame}[fragile]{Mount point} + \begin{itemize} + \item \textbf{Mount point} je adresář, do kterého se připojí + souborový systém. + \item Bez mountu zařízení existuje, ale není nikde vidět ve stromu souborů. + \item Ruční připojení souborového systému: + + \begin{verbatim} + # mount zdroj cílový_adresář + \end{verbatim} + + \item Příklad (USB disk s jedním oddílem): + + \begin{verbatim} + # mkdir /mnt/usb + # mount /dev/sdb1 /mnt/usb + \end{verbatim} + + \item Typ souborového systému (\texttt{-t ext4}, \texttt{-t vfat}, \dots) + se většinou pozná automaticky. + \end{itemize} +\end{frame} + +\begin{frame}[fragile]{umount – odpojení} + \begin{itemize} + \item Odpojení souborového systému: + \begin{verbatim} + # umount /mnt/test + \end{verbatim} + \item Lze odpojit i podle zdroje: + \begin{verbatim} + # umount /dev/sdb1 + \end{verbatim} + \item Pokud je souborový systém používán (otevřený soubor, + shell v tom adresáři), \texttt{umount} selže. + \item Po odpojení \texttt{findmnt /mnt/test} nic nenajde. + \end{itemize} +\end{frame} + +\begin{frame}[fragile]{Připojení při startu} + \begin{itemize} + \item Soubor \texttt{/etc/fstab} říká, které souborové systémy + se připojí automaticky při startu. + \item Každý řádek popisuje jeden souborový systém: + \begin{verbatim} + /dev/sda2 / ext4 defaults 1 1 + /dev/sda1 /boot ext4 defaults 1 2 + \end{verbatim} + + \begin{itemize} + \item \textbf{zdroj} – napr. \texttt{/dev/sda2} nebo UUID, + \item \textbf{cílový adresář} – mount point, + \item \textbf{typ} – typ souborového systému, + \item \textbf{options} – základní volby (\texttt{defaults} apod.). + \end{itemize} + \item Po zápisu do souboru spusť \texttt{mount -a}, kterým se uplatní změny a disk se připojí, případně se vypíše chyba. + \begin{itemize} + \item \textbf{Chybná konfigurace způsobí nenastartování systému \\po restartu} + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame}[fragile]{Cvičení v hodině – mount/umount} + \begin{enumerate} + \item Stáhni si alpine.iso z \texttt{https://alpinelinux.org/downloads/} + \item Připoj disk k virtuálce: + \begin{verbatim} + $ sudo mount -o ro alpine.iso /mnt + \end{verbatim} + \item Zobraz si adresář /mnt: + \begin{verbatim} + $ ls /mnt + \end{verbatim} + \item Podívej se, co je právě připojeno: + \begin{verbatim} + $ findmnt + \end{verbatim} + \item Odpoj iso: + \begin{verbatim} + $ sudo umount /mnt + \end{verbatim} + \item Zobraz si adresář /mnt: + \begin{verbatim} + $ ls /mnt + \end{verbatim} + \end{enumerate} +\end{frame} + + +\begin{frame}[fragile]{Samostatná práce 2 – mount a přehled FS} + \begin{enumerate} + \item Zjisti, jaká bloková zařízení a oddíly má tvoje virtuálka. (lsblk) + \item Zobraz přehled souborových systémů a jejich využití. (df) + \item Podívej se, co je právě připojeno. (findmnt) + \item Otevři \texttt{/etc/fstab} (např. \texttt{less /etc/fstab}) + a najdi, který řádek odpovídá kořenovému souborovému systému \texttt{/} + a který \texttt{/boot}. + \end{enumerate} +\end{frame} + +\begin{frame}[fragile]{Samostatná práce 3 – findmnt, mount, umount} + \begin{enumerate} + \item Vytvoř adresář \texttt{/mnt/test} a podle návodu na cvičení + do něj připoj souborový systém. Ověř: + \begin{verbatim} + $ findmnt /mnt/test + \end{verbatim} + \item Souborový systém opatrně odpoj pomocí \texttt{umount} + a zkontroluj, že \texttt{findmnt /mnt/test} už nic nevrací. + \item Otevři \texttt{/etc/fstab} a vlož záznam pro připojení alpine.iso. + \item Spusť příkaz přo ověření správně nastaveného \texttt{/etc/fstab}. (mount -a) + \item Pokud máš zkontrolováno od kouče, restartuj virtuálku a přesvědč se, že se alpine připojilo. (nepovinný krok) + \item Odeber z \texttt{/etc/fstab} záznam o alpine.iso + \end{enumerate} +\end{frame} + +\end{document} \ No newline at end of file