Portál AbcLinuxu, 30. dubna 2025 18:04
Podrobnosti o práci s adresáři v postředí příkazové řádky. Jak adresáře vytvářet, mazat a jak se mezi adresáři přepínat a zjišťovat svou aktuální pozici.
Název příkazu mkdir
vychází z anglického make directory, což znamená vytvořit adresář. To je také to, co příkaz dělá – vytváří adresáře. Nic víc, nic míň.
# vytvoří adresář s názvem "novy_adresar1" mkdir novy_adresar1
Standard vyžaduje dostupnost dvou přepínačů. Přepínači -m lze jako argument zadat oprávnění, se kterými bude adresář vytvořen.
# vytvoří adresář s názvem "novy_adresar2" a právy 700 (drwx------) mkdir -m 700 novy_adresar2
Druhý standardní přepínač -p slouží k vytvoření adresáře i za cenu nutnosti vytvoření nadřazených adresářů. Ukážeme si to na příkladu. Představte si, že chcete vytvořit adresář dir1 a v něm dir2 a v něm dir3. Máte dvě možnosti
# složitější verze mkdir dir1 dir1/dir2 dir1/dir2/dir3 # kratší verze s použitím -p mkdir -p dir1/dir2/dir3
Standard udává, že s přepínačem -p se pro každý neexistující nadřazený adresář spustí následující příkaz, který vytvoří adresář s výchozím oprávněním (dle umask) a přidá k němu právo zápisu a spouštění (wx) vlastníkovi.
mkdir -p -m $(umask -S),u+wx adresar
GNU verze příkazu má navíc přepínač -v (--verbose), se kterým vypíše informaci o každém vytvořeném adresáři.
mkdir -pv a/b/c/d mkdir: created directory `a' mkdir: created directory `a/b' mkdir: created directory `a/b/c' mkdir: created directory `a/b/c/d'
Dalším GNU přepínačem je -Z (--context), který slouží k nastavení bezpečnostního kontextu SELinuxu. Na systémech bez SELinuxu toto selže s tím, že operace není podporována.
Příkaz mkdir
je dostupný i na OS/2 a operačních systémech od Microsoftu, kde se často používá zkrácený název md
.
Program rmdir
má název vycházející z anglického slova remove directory, což znamená smazat adresář. Program smaže zadané adresáře, ale jen pokud jsou prázdné.
# smaže adresář s názvem "prázdný adresář" (pokud je skutečně prázdný) rmdir "prázdný adresář" # selže při mazání neprázdného adresáře rmdir ~ rmdir: failed to remove `/home/dave': Directory not empty
Jediným standardizovaným přepínačem je -p, který slouží k mazání vnořených prázdných adresářů. Pro lepší představu toho, co se děje, do příkladu rovnou přidám přepínač -v, který je v implementaci od GNU dostupný pro výpis toho, co program dělá (tzn. které adresáře smazal).
rmdir -v -p a/b/c/d/ rmdir: removing directory, `a/b/c/d/' rmdir: removing directory, `a/b/c' rmdir: removing directory, `a/b' rmdir: removing directory, `a'
Když program při mazání adresářů narazí na to, že některý z nich není prázdný, mazání se přeruší.
rmdir -v -p a/b/c/d/ rmdir: removing directory, `a/b/c/d/' rmdir: removing directory, `a/b/c' rmdir: removing directory, `a/b' rmdir: failed to remove directory `a/b': Directory not empty
GNU rmdir
má navíc ještě přepínač --ignore-fail-on-non-empty sloužící k ignoraci chyb způsobených čistě jen tím, že adresář není prázdný.
Příkaz rmdir
je dostupný i na OS/2 a MS DOS/Windows, kde se často používá zkrácený název rd
.
Příkaz cd
slouží ke změně aktuálního pracovního adresáře. Název vychází z anglického change directory, což znamená změnit adresář.
Jak jste patrně již zaregistrovali, cesty lze konzolovým programům zadávat relativně i absolutně. Relativní cesty se zadávají relativně právě k aktuálnímu pracovnímu adresáři (anglicky current working directory).
Jako argument se příkazu cd
zadává cesta k novému pracovnímu adresáři.
# vstoupí do adresáře /home (existuje-li a máme-li k tomu právo) cd /home
Dva standardizované přepínače -L a -P určují, jak se příkaz postaví k symbolickým odkazům v cestě. Přepínač -L nenásleduje symbolické odkazy, dokud se nezpracují všechny skoky o adresář výše (tedy ..
). Přepínač -P dělá přesný opak. Nejdříve následuje symlinky a teprve poté řeší všechny ..
v cestě. Výchozí chování cd
, pokud nezadáte -L ani -P je, jako kdybyste zadali -L, jinak platí poslední ze zadaných přepínačů. Matoucí? Ukážeme si příklady.
# představme si, že máme v adresáři /tmp … cd /tmp # … symbolický odkaz "houmko" ukazující na náš domovský adresář ln -s ~ houmko # teď máme dvě možnosti: # 1) -L cd houmko # pracovní adresář bude /tmp/houmko # 2) -P cd -P houmko # pracovní adresář bude ~
Ukážeme si to ještě na jedné složitější ukázce.
mkdir /tmp/abc # vytvoří adresář /tmp/abc cd /tmp/abc # změní pracovní adresář na /tmp/abc ln -s ~ def # vytvoří symlink "def" odkazující na domovský adresář cd def # změní pracovní adresář na /tmp/abc/def mkdir ghi # vytvoří adresář /tmp/abc/def/ghi (~/ghi) cd ghi # změní pracovní adresář na /tmp/abc/def/ghi # když teď spustíme následující… cd -P ../.. # pracovní adresář bude /home # ale když použijeme -L (nebo nic)… cd ../.. # pracovní adresář bude /tmp/abc
Když cd
zadáme místo názvu adresáře spojovník (-), změní pracovní adresář na předchozí hodnotu a vypíše cestu nově nastaveného pracovního adresáře.
cd - # je tedy totéž jako cd "$OLDPWD" && pwd
Nezadáme-li příkazu žádný argument, pracovní adresář se změní na domovský adresář.
# změní pracovní adresář na ~ cd
Příkaz cd
zpravidla není program (nastavit pracovní adresář shellu přes jiný proces je běžným způsobem v podstatě nemožné), ale bývá vestavěným příkazem shellu.
Příkaz je dostupný nejen na Un*xech, ale i na MS DOS a Windows, OS/2, AmigaOS a dalších systémech.
Příkaz pwd
slouží k vypsání aktuálního pracovního adresáře. Název pwd vychází z anglického výrazu print working directory, což znamená vypsat pracovní adresář.
$ cd /tmp # jste-li v /tmp $ pwd # pwd vypíše /tmp /tmp
Tento příkaz má stejné přepínače jako cd
(-L a -P, přičemž chování -L je výchozí), které mají stejný význam.
$ ln -s / /tmp/root $ cd /tmp/root $ pwd /tmp/root $ pwd -L /tmp/root $ pwd -P /
Některé shelly implementují pwd
po svém jako vestavěný příkaz. Alternativně je možné využít například /bin/pwd
z GNU coreutils, který se ovšem (v době psaní článku) na mém systému nechová dle standardu, protože výchozí chování neodpovídá přepínači -L, ale -P. Samotné /bin/pwd
mi totiž při použití v předchozí ukázce vypíše /
, tzn. chybně následuje symlink.
Ekvivalentem pwd
na MS DOS (COMMAND.COM) a Windows (cmd.exe) je cd
(bez argumentů).
rmdir
má -p
stejně jako mkdir
, a to by se mi to zrovna nedávno hodilo.
Dobry strucny prehled.
Stalo by ale za to u kazdeho parametru psat i anglicke slovo, napr. u mkdir -p (p = parents), me osobne se zkratky nejlip pamatuji prave kdyz vim, co zkratka znamena, i kdyz je to anglicky.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.