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>

$ # vypíše všechny soubory v kořenovém adresáři začínající libovolným
$ # 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
$ find -type d 2>/dev/null

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ýstupu ls 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
$ ls -lFSr /boot/
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:

ZnakVý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.
$ cat soubor
/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)

$ ls -l /dev/console
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.
$ mkdir -m 750 -p adresar/novy_ard/novy_adr/novy_adr

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.
$ rm -rf / # smaže celý počítač včetně všech připojených jednotek

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).

 touch test1
$ 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
Výpisem ls -l -i zjistíme, že se zvětšíl počet linek, a že soubory test1 a test2 mají stejné i-number.
Cesta je v symbolickém linku zadána přesně tak, jak ji napíšete při jejím vytváření. Pokud třeba zadáte relativní cestu a link pak přesunete, pravděpodobně už nebude ukazovat tam, kam chcete. (Pokud přesunete link i odkazovaný soubor „stejně“, pak může relativní odkaz odkazovat správně, na rozdíl od absolutního odkazu, který ukazuje vždy na stejné místo, takže při přesunu odkazovaného souboru už neukazuje kam je potřeba).

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říkazu find.
-ok prikaz\;
jako -exec, ale pred kazdym prikazem se dotazuje, zda se má provést.
-print
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ě).

$ basename cesta/k/souboru.txt
souboru.txt
$ echo `dirname /usr/bin/ls` bude as adresář a \"`basename /usr/bin/ls`\" soubor.
/usr/bin bude as adresář a "ls" soubor.
Komentář Hlášení chyby
Created: 11.9.2005
Last updated: 5.12.2013
Tato stánka používá ke svému běhu cookies, díky kterým je možné monitorovat, co tu provádíte (ne že bych to bez cookies nezvládl). Také vás tu bude špehovat google analytics. Jestli si myslíte, že je to problém, vypněte si cookies ve vašem prohlížeči, nebo odejděte a už se nevracejte :-). Prohlížením tohoto webu souhlasíte s používáním cookies. Dozvědět se více..