Souborový systém
Struktura adresářů linuxu
V Linuxu neexistují čísla jednotek jako ve Windows (C:, D: atd.). Všechny disky jsou připojeny („přimountovány“) do jedné struktury adresářů. Tato struktura začíná lomítkem / (tzv. kořen adresářů).
- /
- kořenový adresář. Všechny absolutní cesty začínají s /
- /bin
- základní systémové programy
- /boot
- soubory potřebné ke spuštění systému
- /dev
- všechny speciální soubory ("device"= zařízení)
- /etc
- konfigurační soubory, scénáře pro shell a datové soubory
- /home
- adresáře pro data uživatelů (domovské adresáře).
- /lib
- sada standardních programů, knihoven a nástrojů určených pro všeobecné použití ("library"=knihovna)
- /lost+found
- pokud při testování systému souborů narazí unix na data, která je potřeba opravit, tak je přesune do tohoto adresáře
- /media
- do adresářů v tomto adresáři se připojují USB a další odpojitelná zařízení.
- /mnt
- adresář pro ruční mountování USB a dalších odpojitelných zařízení.
- /opt
- adresář, kam by se měli instalovat programy, které nejsou součástí distribuce.
- /proc
- virtuální souborový systém pro přístup k inforamcím o běžících procesech.
- /root
- domovská složka administrátora (roota).
- /run
- adresář pro pomocné soubory běžících programů.
- /sbin
- spustitelné programy určené pouze pro roota
- /tmp
- místo pro vytváření dočasných souborů. Během startu bývá automaticky vymazán jeho obsah.
- /usr
- obsahuje další důležité podadresáře, např. bin, lib a tmp, které plní stejnou funkci jako stejnojmené adresáře v kořenovém adr. /
Další info viz Filesystem Hierarchy Standard.
Speciální a expanzní znaky ('=metaznaky')
Následující znaky interpretuje už bash. Program tedy dostane jejich „expanzi“.
- ~
- v prikazovem radku nahrazuje cestu k domacimu adresary
~rimmer = /home/rimmer
~ = /home/vas_domaci_adresar - *
- nahrazuje vsechny soubory v adresari
- ?
- nahrazuje libovolny znak v nazvu souboru
- [...]
- nahrazuje nektery ze znaku, jejichz vycet je uveden v zavorkach
(napr
ls [km]*
vypise jmena vsech souboru, zacinajicich znakem k nebo m) - [znak-znak2]
-
nahrazuje nektery znak ze zadaneho intervalu znaku. Hodnota
ASCII znak > znak2! (napr.
ls *[0-9]
vypise soubory koncici cislici) - [!...]
- nahrazuje kterykoliv znak krome tech, ktere jsou uvedeny v zavorce.
Napriklad:ls *gen*.[1-5x]*
vypise soubory obsahujici gen, neco pred tim, neco za tim, potom . (tecku) a za ni hned jednu z cislic 1 az 5 anebo pismeno x, a dal cokoliv. - '..'(apostrofy)
- potlaci specialni vyznam vsech znaku v retezci.
- ".."(uvozovky)
- potlaci specialni vyznam vsech znaku v retezci, ovsem pritom je mezi uvozovkami respektovana substituce priznaku a substituce promennych.
Pokdud zadavame prikaz na prikazovou radku a zademe uvozovkou, muzeme pokracovat na dalsim radku (pomoci <enter>) a dokud uvozovku neuzavreme (stejnym typem uvozovky), prikaz se neinterpretuje. (Neplati vsak v C-shellu, kde bychom obdrzeli chybove hlaseni).
Prechod na dalsi radku bez uvozovek je mozny pomoci \, ktery vypne specialni vyznam <Enter>
$ # znakem, pokračující dvěmi 'o' a pak libovolným počtem znaků.
$ ls -d /?oo*
/boot /root
$ # vypíše všechny public_html adresáře ve všech adresářích,
$ # které jsou v adresáři /home
$ ls -d /home/*/public_html/
/home/petr/public_html/
Základní typy souborů
- obyčejné
- Běžné textové nebo binární soubory, programy atp.
- speciální
- reprezentující zařízení (viz adresář /dev)
- adresáře
- obsahují další soubory
- roury
- soubory FIFO. Slouží pro komunikaci mezi procesy
- sockety
- Speciální soubory pro práci v síti
Speciální soubory
- /dev/null
- Funguje jako „černá díra“, kam lze přesměrovávat nechtěný výstup.
- /dev/urandom
- Z tohoto souboru lze číst náhodná data. Data jsou generována matematickým algoritmem a nikdy nedojdou.
- /dev/random
- Z tohoto souboru lze číst náhodná data. Tato data jsou generována na základě pohybu myši, stisků kláves klávesnice atp. Náhodnost je tak mnohem lepší než u /dev/urandom, ale toto zařízení se při nedostatku událstí čtených od zařízení zablokuje, dokud nedostane další signály. Nehodí se na získávání velkého množství dat.
- /dev/zero
- Vrací samé nuly. Mnohem rychlejší než /dev/urandom
Programy pro práci se souborovým systémem
Program ls
Program ls
vypíše obsah adresáře.
SYNOPSIS
ls [-xFladpsRtri] [--color=never|always|auto] [--sort=WORD]
- -x
- vypis serazen po radcich
- -F
- (vypise znak / za jmenem adresare a znak * za jmenem spustitelneho souboru)
- -l
- (vypise pred kazdy soubor rezim, pocet linek, vlastnika, skupinu, velikost v bitech a cas posledni modif.)
- -a
- Vypíše i soubory začínající tečkou, které jsou jinach v Linuxu chápány jako skryté.
- -d
- vypise informace o adresarich, ale ne o souborech v nich. Pokud neni uvedeno jmeno adresare, zobrazi se informace o aktuálním adr.
- -p
- identifikuje adresare (/)
- -s
- velikost souboru v log. blocich, jejich velikost je 1024 bajtu.
- -R
- vypisuje i obsah podadresaru
- -t
- serazeni dle casu posledni modifikace (od nejstarsiho ...)
- -i
- i-number presne urcuje kazdy soubor ciselnou hodnotou.
- --color=
-
never = nezobrazuji-se specificke barvy pro ruzne soubory
always= barvy se zobrazuji vzdy
auto = barvy se zobrazuji, jen kdyz je to vhodne (například při přesměrování výstupuls
se barvy výstup neobarvuje - --sort=WORD
-
WORD =
extension (-X) | none (-U) | size (-S) | time (-t) | version (-v) | status (-c) | time (-t) | atime (-u) | access (-u) | use (-u) - -r
- setrideni probehne v obracenem poradi
celkem 90468
lrwxrwxrwx 1 root root 1 8. dub 12.03 boot -> ./
lrwxrwxrwx 1 root root 5 8. dub 12.04 grub2-efi -> grub2/
lrwxrwxrwx 1 root root 25 15. kvě 09.42 initrd -> initrd-3.7.10-1.4-desktop
lrwxrwxrwx 1 root root 26 15. kvě 09.37 vmlinuz -> vmlinuz-3.7.10-1.4-desktop
-rw-r--r-- 1 root root 500 19. dub 17.16 sysctl.conf-3.7.10-1.4-desktop
-rw-r--r-- 1 root root 500 1. bře 16.42 sysctl.conf-3.7.10-1.1-desktop
-rw------- 1 root root 512 13. zář 2012 backup_mbr
-rw-r--r-- 1 root root 1484 26. úno 15.33 boot.readme
drwxr-xr-x 7 root root 4096 15. kvě 09.43 grub2/
drwxr-xr-x 2 root root 4096 8. dub 12.03 grub/
-rw-r--r-- 1 root root 137539 19. dub 15.44 config-3.7.10-1.4-desktop
...
-rw-r--r-- 1 root root 32312700 15. kvě 09.42 initrd-3.7.10-1.4-desktop
První řádka (celkem 90468) udává celkový počet zabraných bloků soubory. Každá další řádka začíná jedním z uvedených znaků, které charakterizují typ souboru:
Znak | Význam |
---|---|
d | adresar |
- | obycejny soubor |
c | znakovy specialni soubor |
d | blokovy specialni soubor |
l | symbolicky link (jine jmeno pro jiz existujici soubor ) |
Následují přístupová práva pro uživatele, skupinu a ostatní (read,write, execute). Dále počet odkazů na soubor (pro adresáře to znamená kolik adrsář obashuje souborů), vlastník a skupina, velikost, datum poslední modifikace a název souboru. U symbolických odkazů je ještě název soubor, na který odkazy (linky) směřují.
Program tree
nebývá obvyklou součástí základní instalace Linuxu,
takže si jej asi budete muset doinstalovat. Tento program zobrazuje výpis adresáře a jeho podadresářů
v pěkné stromové struktuře.
Program file
Příkaz file
se snaží „uhádnout“
typ souboru podle jeho obsahu. (Přípony souborů nehrají v Linuxu takovou
roli jako ve Windows).
- file soubor [soubor ...]
- urcuje klasifikaci souboru. Nejedna-li se o text, zjistuje prikaz "magicke cislo" na zacatku souboru a to pak porovna se souborem /etc/magic
- file -f soubor
- Ze souboru "soubor" se čtou jména souboru, ktere se mají klasifikovat. Co řádek, to jméno souboru.
/bin
/bin/ls
/usr/bin/ls
/dev/sda
$ file -f soubor
/bin: directory
/bin/ls: symbolic link to `/usr/bin/ls`
/usr/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
dynamically linked (uses shared libs), for GNU/Linux 2.6.16,
BuildID[sha1]=0x4cb12bd8e66f9102c0ba3a260298578b84dcad87, stripped
/dev/sda: block special
Co může program file vrátit (stručný výčet):
- English text
- Textový soubor, který obashuje jen anglické znaky
- ascii text
- Textový soubor, který obashuje jen ascii znaky
- c program text
- zdrojovy program v jazyce C
- command text
- povelova procedura v shellu
- data
- soubor obsahujici blize nespecifikovana binarni data
- directory
- adresare
- empty
- prazdny soubor
- block special
- blokovy specialni soubor
- character special
- znakovy specialni soubor
- Elf 32-bit executable
- prelozeny a slinkovany spustitelny soubor
- Elf 32-bit core file
- ulozeny obraz procesu v okamziku ukonceni procesu
- Elf 32-bit relocateble
- soubor obsahujici premistitelny modul
- Elf 32-bit dynamic lib
- dynamicka knihovna
Pokud se jedna o specialni zarizeni, za vystupem jsou dve cisla, tzv. major a
minor. Cislo major oznacuje typ zarizeni jako je disk nebo terminal. Cislo
minor oznacuje konkretni zarizeni. (Stejna cisla se vypisi i prikazem
ls -l
na
misto velikosti souboru)
crw------- 1 root root 5, 1 Aug 23 11:38 /dev/console
$ file /dev/console
/dev/console: character special (5/1)
Program df
Program df
zjišťuje volné místo na jednotlivých jednotkách (disky, CD, USB …).
SYNOPSIS
df [-h] [-T]
Program du
Program du
vrací velikost místa zabraného soubory v adresáři (a jeho podadresářích).
SYNOPSIS
du [-s] [-h] [adresar]
Program filesize
Program filesize
vrací velikost souboru.
Program touch
Program touch
mění čas změny a použití na aktuální čas. Neexistující soubor vytvoří.
SYNOPSIS
touch [-a [datum]] [-m [datum]] [-c] soubor [soubor ...]
OPTIONS
- -a
- zmeni se pouze cas pouziti
- -m
- zmeni se pouze cas modifikace
- -c
- zabrani vytvoreni neexistujiciho souboru
- datum
- Místo na aktuální čas se změní na tento datum.
Pokud například chceme změnit čas prístupu k souboru na 21. prosince
10:30, použijeme
touch -a 12211030 soubor
.
Chceme-li zmenit i rok, pridame dvojciferne cislo v rozsahu 70-99 na konec (1221103013)
Program cd
Příkaz cd
mění pracovní adresář.
SYNOPSIS
cd [adresar]
EXAMPLES
- cd cesta/cesta
- aktuálním adresářem se stane cesta/cesta
- cd -
- návrat do předchozího pracovního adresáře
- cd ~
- Aktuálním adresářem se stane domovská složka
- cd ..
- Aktuálním adresářem se stane nadřazená složka
Příkazy pushd, popd a dirs
Příkaz pushd
uloží do zásobníku adresář. Příkazem popd
se ze zásobníku odebere (a přejde se do odebraného adresáře). Příkaz dirs
vypíše zásobník adresářů.
Tyto příkazy se hodí, pokud často měníte aktuální adresář.
SYNOPSIS
pushd [directory] popd dirs
EXAMPLES
- pushd .
- Vloží do zásobníku aktuální adresář
- pushd
- Prohodí poslední dva adresáře v zásobníku z mění aktuální adresář
- dirs
- Vypíše zásobník adresářů
- popd
- Odebere ze zásobníku adresář a změní aktuální adresář
Program cp
Příkaz cp
kopíruje soubory nebo adresáře. První argument
je název souboru nebo adresáře, který se kopíruje, druhý argument je nový
název souboru nebo adresáře. Pokud je druhý argument existující adresář,
pak se data kopírují do tohoto adresáře se pod svým původním jménem.
SYNOPSIS
cp [-a] [-x] [-i] [-f] {-r adresar|soubor} {adresar|nove_jmeno_souboru}
EXAMPLES
- cp soubor1 soubor2
- zkopíruje soubor1 do soubor2
- cp -r adresar novy_adresar
- Kopíruje adresář se celým jeho obsahem
- cp --help
- Vypíše nápovědu
- cp -ax
- Vhodné volby pro zkopírování systému (zálohu)
Program mv
Program mv
přesouvá soubory. Chová se velmi podobně jako
cp
, jen místo kopírování soubory a adresáře přesouvá.
Dalším rozdílem třeba je, že při přesunu adrsáře se nepoužívá volba
-r
.
SYNOPSIS
mv [-i] [-f] {soubor|adresar} {adresar|nove_jmeno_souboru}
- mv -i
- interaktivně se ptá, zda má přepsat soubor, pokud se přesouvá do místa kde už soubor stejného jména existuje
- mv -f
- Program se naopak neptá a rovnou všechno přepíše.
Program mkdir
Program mkdir
vytváří adresáře. Program vytvoří pouze
adresář v existujícím adresáři, pokud není použita volba -p
.
S volbou -p
vytvoří všechny adresáře v zadané cestě.
SYNOPSIS
mkdir [-p] [-m XXX] adresar [adresar ...]
OPTIONS
- -p
- vytvoří adresář i s rodičovskými adresáři, pokud neexistují
- -m XXX
-
umožňuje vytvořit přístupová práva, stejně jako
chmod
.
Program rmdir
Program rmdir
maže prázdné adresáře.
Neprázdné adresáře je nutné smazat programem rm
s argumentem -r
.
SYNOPSIS
rmdir [-p] adresar [adresar ...]
EXAMPLES
- rmdir -p a/b/c
- Zruší všechny prázdné (!) adresáře v zadané cestě. (Totéž co
rmdir a/b/c a/b a
)
Program rm
Program rm
maže soubory a adresáře. Smazané soubory
už nejde obnovit, tak opatrně!
SYNOPSIS
rm [-i] [-f] {-r adresar| soubor} [adresar|soubor ...]
OPTIONS
- -r
- Rekurzivní mazání podadresářů.
- -i
- interaktivní režim, který se dotazuje před smazáním každého souboru.
- -f
- smaže všechny soubory bez ptaní. (Pokud si z nějakého svého
adresáře nebo souboru odeberete právo zápisu,
rm
se normálně před jeho smazáním zeptá (i bez volby-i
.
Program link
Program link
vytvoří pevný odkaz (hard link) nebo symbolický odkaz (soft link) na daný soubor.
Kazdy soubor je presne identifikovan cislem inode. Jmeno souboru odkazuje na toto cislo,
tudiz je mozne mit vice jmen odkazujicich na stejne cislo inode (hard linky).
Vsechny jmena reprezentuji jeden soubor a pokud se napriklad zmeni
pristupova prava u jednoho jmena, u druheho logicky take.
Vpodstatě každý soubor je hard link. Hard linky na jeden soubor můžou existovat jen
v rámci jednoho filesystému (tj. jen na jednom oddílu disku).
Ve většině případů není možné dělat hard linky na adresáře, ale jen na soubory.
Soft linky jsou soubory, které v sobě mají zapsaný název souboru, na který odkazují. Mohou odkazovat i na jiný souborový systém. Programy většinou místo soft linku pracují se souborem, na který soft link odkazuje. (Když otevřete v editoru soft link, otevře se vám soubor, na který link odkazuje, ne obsah soft linku).
Pozor! Pokud se soubor na který soft link odkazuje přesune, soft link bude ukazovat na neexistující soubor.
SYNOPSIS
ln [-n] [-s] [-f] soubor1 {link|adresar}
OPTIONS
Pokud je druhým jménem (existující) adresář, vytvoří se link v tomto adresáři stejného jména jako původní soubor.
- -f
- vytvori link, i kdyz soubor se jmenem linku jiz existuje, nebo na misto kde nemame pravo zapisu (a to bez ptani)
- -s
- vytvori symbolicky link, ktery narozdil od "hard link" nemusi byt na jednom systemu souboru (tj. na jednom disku, diskete ..)
Je mozne, aby hard link umoznoval pristup k souboru uzivateli, ktery nema pristup do adresare, v nemz se puvodni soubor nachazi. (Jinak řečeno, jeden hard link může být v přístupném a druhý v nepřístupném adresáři).
$ ls -li test1
278878 -rw-r--r-- 1 petr users 0 27. čen 13.40 test1
$ ln test1 test2
$ ln -s test1 test3
$ ls -li test[123]
278878 -rw-r--r-- 2 petr users 0 27. čen 13.40 test1
278878 -rw-r--r-- 2 petr users 0 27. čen 13.40 test2
278882 lrwxrwxrwx 1 petr users 5 27. čen 13.40 test3 -> test1
$ rm test1
$ ls -l test3
lrwxrwxrwx 1 petr users 5 27. čen 13.40 test3 -> test1
$ cat test3
cat: test3: Adresář nebo soubor neexistuje
Program find
Program find
slouží pro vyhledávání souborů.
SYNOPSIS
find [-P] [-L] [adresar ...] filter [akce]
OPTIONS
- -P
- Nikdy nenásleduj symbolické odkazy (defaultní chování).
- -L
- Následuj symbolické linky.
Pokud není uveden adresář, prohledává se aktuální adresář.
Filter se skládá z následujících možností, kde +-n označuje více než n (+n), méně než n (-n) nebo přesně n (n).
- -name jmeno_souboru
- Hledá soubor zadaného jména. Ve jméně je možné používat metaznaky (*,?,[a-z] atd.).
Pokud obsahuje jméno souboru metaznaky, mělo by být uzavřené v uvozovkách, aby
metaznaky neinterpretoval shell před tím, než jméno předá programu
find
. - -iname jmeno_souboru
- jako -name, jen se nerozlišují velikosti písmen v názvu souboru
- -type typ_souboru
-
Typ souboru:
b blokovy spec. soubor,
c znakovy spec. soubor,
p fifo (pojmenovany pipe),
d adresar,
f obycejny soub
- -links +-n
- soubory s požadovaným počtem linků.
- -user jmeno
- jmeno vlastnika (nebo jeho ciselny kod)
- -group jmeno
- soubory patřící skupině (jméno nebo číselný kód)
- -size +-n[k|M|G]
- velikost souboru. Je-li za číslem n znak k (M,G), bere se číslo jako kilobyte (megabyte, gigabyte).
- -amin +-n
- K souboru bylo naposledy přistoupeno před n minutami. (-n znamená méně než, +n znamená více než).
- -atime +-n
- hledaji se soubory, k nimz byl proveden poslední přístup před n dny. Zlomky dnů se ignorují, takže -atime +1 hlededá soubory s přístupem nejméně před dvěma dny.
- -cmin +-n
- Soubor byl naposledy změněn před n minutami.
- -mtime +-n
- hledaji se soubory, jejichz posledni modifikace byla …
- -newer jmeno_soub
- hledaji se soubory modif. pozdeji nez soubor (novejsi)
Zadané filtry se implicitně spoují logickým AND (tj musí vyhovět všechny).
- -o
- mezi jednotlivymi filtry znamena, ze soubor ma vyhovovat alespon jednomu (implicitne musi vyhovovat vsem zadanym vyrazum)
- !
- Neguje filter (soubor vyhovuje, pokud filter nevyhovuje). Uvádí se před filterem po obou stranach oddelen mezerou.
Akce se provádějí na souborech, které program find nalezne.
- -exec prikaz\;
-
Pro každý nalezeny soubor se provede uvedeny prikaz.
Pokud se uvnitr prikazu vyskytne dvojice slozenych zavorek {}, reprezentuji jmeno nalezeneho souboru.
Příkaz se ukončuje pomocí
\;
. Lomítko je nezbytné, aby středník neinterpretoval shell před spuštěním příkazufind
. - -ok prikaz\;
- jako -exec, ale pred kazdym prikazem se dotazuje, zda se má provést.
- zobrazi se cesta nalezeneho souboru. Pouziva se například ve spojení s -exec (jinak při použití exec se nalezené soubory na terminál nevypisují, provádí se jen „exec příkaz“).
- -delpth
-
nejprve se spracovavaji zaznamy v adrearich a pak teprve vlastni adresare.
Vhodne ve spojeni s argumentem
-cpio
pro prenos souboru v adresarich, pro ktere nemame pravo zapisu. - -cpio zarizeni
- zapise nalezene soubory na dane zarizeni ve formatu cpio (používá se na zálohování)
EXAMPLES
- find . -name "a*" -print
- zjisti vsechny soubory a podadresare aktualniho adresare, jejich jmena zacinaji na 'a'. Vyraz "a*" je v uvozovkach, aby shell neinterpretoval spec. znaky.
- find . -type d -exec ls -ld {}\;
- vypíše informace o vsech podadresarich aktualniho adresare
- find . \( -user jirka -o -user lada \) -print -exec rm {}\;
-
Smaže všechny soubory z aktuálního adrsáře, jejichž vlastníkem je jirka nebo lada.
Zpetne lomitko opet slouzi pro oznaceni spec. znaku - zavorky a středníku. - find /home/jirka /home/lada -size +10k -atime +5 -ok rm {}\;
- Maže všechny soubory ze zadaných adresářů, jejichž velikost je větší než 10KiB a jejich poslední čas přístupu je starší než 5 dní. Před mazáním se ptá zda se má mazání provést.
Programy basename a dirname
Program basename
vypíše soubor bez úvodních adresářů.
Program dirname
vypíše adresář bez souboru (odstraňuje poslední položku v cestě).
souboru.txt
$ echo `dirname /usr/bin/ls` bude as adresář a \"`basename /usr/bin/ls`\" soubor.
/usr/bin bude as adresář a "ls" soubor.