Portál AbcLinuxu, 1. května 2025 04:55
V dalším dílu seriálu o základních příkazech pro práci v příkazové řádce se podíváme na dva jednoduché, ale zároveň velmi zdatné pomocníky: ls (výpis obsahu adresáře a informací o souborech) a ln (vytváření pevných a symbolických odkazů).
ls
je příkaz primárně sloužící k vypsání seznamu souborů v daném adresáři. Prvně se objevil v původní verzi AT&T UNIXu. Název vychází z podobného příkazu list segments, který byl obsažen v OS Multics. V tomto OS byl soubor synonymem k (paměťovému) segmentu.
Standardní použití vypadá následovně:
# vypíše aktuální pracovní adresář ls # vypíše daný adresář ls /dany/adresar/
Výpis (výstup příkazu) potom vypadá například takto (adresář /
):
bin dev home mnt proc sbin tmp var boot etc lib opt root sys usr
Jedním z nejčastěji používaných přepínačů je -l, který aktivuje podrobnější výpis:
ls -l /var/www/localhost/htdocs/vnstat/ total 148 -rw-r--r-- 1 dave home 4012 2009-04-09 13:37 config.php -rw-r--r-- 1 dave home 18038 2008-08-28 15:35 COPYING -rw-r--r-- 1 dave home 10525 2008-11-14 08:37 graph.php -rw-r--r-- 1 dave home 11857 2008-11-14 08:37 graph_svg.php -rw-r--r-- 1 dave home 5988 2008-11-03 19:08 index.php -rw-r--r-- 1 dave home 1622 2008-08-28 15:35 README -rw-r--r-- 1 dave home 58716 2008-11-03 19:08 VeraBd.ttf -rw-r--r-- 1 dave home 5954 2008-08-28 15:35 vera_copyright.txt -rw-r--r-- 1 dave home 2568 2008-11-14 08:37 vnstat.css -rw-r--r-- 1 dave home 6280 2008-11-14 08:37 vnstat.php -rw-r--r-- 1 dave home 2875 2008-11-14 08:37 vnstat_red.css
Vypíše kromě názvu souboru navíc ještě informaci o právech, vlastníka a skupinu, velikost v bytech a datum a čas poslední změny.
Dalším často používaným přepínačem je -a (resp. -A). Zajistí totiž výpis skrytých souborů, tj. souborů, jejichž název začíná tečkou. Přepínač -A vynechá výpis zvláštních adresářů .
(aktuální pracovní adresář) a ..
(adresář obsahující aktuální pracovní adresář).
Užitečná je občas možnost setřídit položky podle jiné vlastnosti než název souboru.
Přepínač | Alternativa | Popis |
-U | --sort=none | Vypne třídění |
-X | --sort=extension | Setřídí podle přípony souboru (například .txt) |
-S | --sort=size | Setřídí podle velikosti |
-t | --sort=time | Setřídí podle času |
-v | --sort=version | Setřídí podle verze |
Když není aktivován dlouhý formát výpisu (-l), lze použít -1 k docílení výpisu každé položky na nový řádek.
Přepínač -F (--classify) je zajímavý tím, že za název souboru přidá značku odpovídající vlastnosti, kterou soubor disponuje. Pokud jde o adresář, přidá se /, socket dostane =, spustitelný soubor *, pojmenovaná roura |, symbolický odkaz v krátkém výpisu @. Podobně se chová přepínač --file-type, ale s tím rozdílem, že neoznačuje spustitelné soubory. Ukázku vizte níže.
Nakonec nelze nezmínit pro uživatele velmi užitečnou podporu barvení výstupu. Ovládá ji přepínač --color, kterému lze předat ještě parametr (--color=parametr), který určuje, kdy se má výstup barvit. Parametr může mít hodnoty never (nikdy), always (vždy) a auto (automaticky se rozhodne, dle různých podmínek). Konfigurace barviček pro jednotlivé přípony a typy souborů je obvykle dostupná v souboru /etc/DIR_COLORS
, který používá utilita dircolors
, sloužící k nastavení proměnné LS_COLORS
, která ovlivňuje nastavení barev ve výpisu ls
. Ukázka:
bash-4.0$ ls --color=auto -lFG drwxr-xr-x 2 dave 112 2009-02-01 12:27 adresar/ -rw-r--r-- 1 dave 5527 2008-08-31 13:28 textak.txt -rwxr-xr-x 1 dave 2539230 2008-08-31 13:28 binarka.run*
Ekvivalentem tohoto příkazu na Windows je dir
, který mimochodem běžně funguje i na Linuxu.
ln
slouží k vytváření odkazů na soubory. Odkaz je anglicky link, z čehož vychází název programu.
Vytvářené odkazy mohou být buď pevné (tzv. hardlink), což je výchozí režim, nebo symbolické (tzv. symlink), což lze aktivovat přepínačem -s.
Pevné odkazy lze vytvářet jen v rámci souborového systému (oddílu) a jsou provázané s původním souborem. Data se po smazání původního souboru neztratí – k tomu dojde, teprve když jsou smazány i veškeré pevné odkazy. (Obvykle) nelze vytvářet pevné odkazy na adresáře.
Symbolický odkaz může ukazovat na soubory i adresáře, které nemusí být uložené na stejném souborovém systému. Tyto odkazy nejsou nijak provázané se soubory, na které ukazují, proto když smažete soubor, na který odkaz ukazuje, zbyde vám odkaz na neexistující soubor. K čistění rozbitých symlinků existují různé nástroje, například symlinks
nebo můj vlastní program lc
.
Nyní si předvedeme několik ukázek použití:
# vytvoří hardlink „hardlink.txt“ odkazující na „puvodni_soubor.txt“ ln puvodni_soubor.txt hardlink.txt # vytvoří symlink „root“ odkazující na kořenový adresář / ln -s / root # vytvoří v adresáři „cilovy_adresar“ relativní symlinky na „soubor.txt“ # a „adresar“ z aktuálního adresáře ln -s ../soubor.txt ../adresar cilovy_adresar/
Symbolické odkazy mohou být buď absolutní (s celou cestou), nebo relativní (vztažené k adresáři, ve kterém sídlí). Jaký odkaz použijeme, je na nás, rozhodujeme se dle situace. Pokud například víme, že původní soubor a odkaz budou vždy ve stejném adresáři (nebo např. vždy o adresář výše), potom je vhodné vytvořit relativní odkaz. Pokud ovšem děláme odkaz na úplně jiné místo v systému, je vhodnější použít absolutní odkaz.
# pracovní adresář = /home/dave # vytvoří relativní odkaz, který (aby fungoval) musí být vždy tam, kde původní soubor ln -s soubor.txt odkaz.txt # vytvoří absolutní odkaz, který můžeme přesunout kamkoliv a vždy bude odkazovat # konkrétně na „/home/dave/soubor.txt“ ln -s /home/dave/soubor.txt odkaz.txt
Standard u tohoto nástroje vyžaduje pouze dva přepínače, zmiňovaný -s pro vytváření symlinků a -f pro případné přepsání souboru odkazem.
# řekněme, že soubor link.txt již existuje # toto jej přepíše odkazem na soubor.txt ln -sf soubor.txt link.txt
Pěkné. K tomu ls bych dodal parametr -d. V případě adresáře pak nevypíše jeho obsah, ale vlastní adresář:
# ls -dl grub drwxr-xr-x 2 root root 4096 2009-10-13 00:02 grub # ls -l grub total 400 -rw-r--r-- 1 root root 63 2009-09-09 20:23 device.map -rw-r--r-- 1 root root 13840 2009-09-09 20:23 e2fs_stage1_5 .....
Opat jedno velke LOLNechápu. Proč jako? Knížka sice stará, ale perfektní.
ls -Z
;)
drwxr-xr-x 13 houska users 4096 24. pro 2007 gspca drwxr-xr-x 4 root root 4096 4. bře 2009 home drwxr-xr-x 14 root root 12288 9. říj 11.03 lib drwx------ 2 root root 16384 26. úno 2009 lost+found ...
2 (pro vlastní jméno a pro .. záznam)Je to pro jméno a pro . (jednu tečku), pokud má podadresář, tak +1 za každou dvoutečku v podřazeném adr.
Určitou "zvláštností" je, že velikost adresáře se obvykle nezmenšuje při vymazání souborů v něm.To je spíš problém implementace adresáře v příslušném souborovém systému - zatímco "klasické" soborové systémy vycházející z původního unixového soborového systému (UFS), tj. např. Ext2/3, to opravdu tak dělají, tak souborové systémy používající jiné metody interního uložení dat (napr. stromy, jako ReiserFS a mám pocit že i BtrFS a ZFS) většinou adresáře při odstranění položek zmenší.
když někdo otevře (fopen) soubor, pak se počet odkazů na inodu zvednePozor, toto není pravda. Lze vyzkoušet např. následujícím programem:
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int main() { struct stat st; int fd=open("filename", O_CREAT|O_EXCL, 0666); if(fd < 0) { perror("open"); return 1; } unlink("filename"); fstat(fd, &st); printf("%d", st.st_nlink); return 0; }
soucet velikosti souboru a adresaru uvnitrTen se zase dělá pomocí příkazu du -c.
du -sh
, vyplivne to jen výsledek bez spousty výpisů.
du -h --max-depth=1
... kdyz clovek zjistuje kterej adresar zabira nejvic mista
du dir | sort -n | tail -20
ln
by bylo vhodné upozornit, že první argument je při vytváření symbolického linku interpretován jinak než při vytváření hardlinku. Zatímco bez -s
je to soubor, který linkujeme, s přepínačem -s
určuje cíl linku. Takže vytváříme-li symbolický link jinde než v aktuálním pracovním adresáři, je potřeba psát cestu vzhledem k cílovému adresáři (kde vytváříme link), ne vzhledem k pracovnímu (jako je to u ln
, cp
apod.).
Často se opravdu jedná o kopie a nechci, aby se při změně jedné změnila i druhá.
Přesně, ono by to pak mohlo dopadnou jako v tom vtipu o norton commanderovi
Jestli vzděláváte lid prostý v užívání Unixových nástrojů, pak prosím opravdu o Unixové standardy. GNU is Not Unix.
-X, -U, -S ... kdo bude psát skripty podle vašeho článku opisujícího linuxové/GNU přepínače ls, ten se bude na Unixech divit, protože opravdu nedělají to, co je tady popsáno, pokud na té které variantě Unixu vůbec existují.
Jestli vzděláváte lid prostý v užívání Unixových nástrojů, pak prosím opravdu o Unixové standardy. GNU is Not Unix.
-X, -U, -S ... kdo bude psát skripty podle vašeho článku opisujícího linuxové/GNU přepínače ls, ten se bude na Unixech divit, protože opravdu nedělají to, co je tady popsáno, pokud na té které variantě Unixu vůbec existují.
Z toho vždycky rostu. Dělám hodně na AIXu a každou chvíli nadávám, jak jsou ty Unixy sto let za opicemi
No některé užitečné volby by mohli implementovat, neříkám, že úplně všechno. No a čisté vi je tragédie. Zvýrazňování syntaxe by se občas hodilo. Chápu, že z pohledu administrátora tam jsou super fičury, ale jako programátor to vidím trochu jinak. To je jako kdybych sedl z BMW do trabanta.Já bych to přirovnal, jako "přesednout si z BMW do náklaďáku nebo do traktoru". Tak, jako s BMW nebudete nikdy orat pole, tak nebudete nikdy s traktorem (nebo náklaďákem) s plně naloženou vlečkou lítat 200 km/h po dálnici a nebudete na něj balit rošťenky...
už vidím, jak si někdo koupí *PRODUKČNÍ* traktor, dá si tam klimatizaci, elektricky vyhřívané sedačky, rádio s CD přehrávačem, tónovaná skla atdJá dost dobře nechápu proč by to někdo dělal i u osobního *PRODUKČNÍHO* automobilu, ale budiž.
No některé užitečné volby by mohli implementovat, neříkám, že úplně všechno. No a čisté vi je tragédie. Zvýrazňování syntaxe by se občas hodilo. Chápu, že z pohledu administrátora tam jsou super fičury, ale jako programátor to vidím trochu jinak. To je jako kdybych sedl z BMW do trabanta.
Prostě potřeby jsou jiné, a tomu i odpovídá "uživatelský komfort" - už vidím, jak si někdo koupí *PRODUKČNÍ* traktor, dá si tam klimatizaci, elektricky vyhřívané sedačky, rádio s CD přehrávačem, tónovaná skla atd, když s ním bude jezdit 20 různých lidí polem nepolem, cestou necestou...
No když to má konkurence, tak proč ne? Ona třeba ta klimatizace v traktoru by se v parném létě mohla hodit.
Kéž by v Linuxu byla taková virtualizace, memory management a stabilita jako na AIXu!Jasně, že komerční unixy* mají něco do sebe a v určitých oblastech vynikají. To ale neznamená, že nejsou v jiných oblastech skutečně „sto let za opicemi“. Není to tak, že by byly jen jiné než Linux – Linux je skutečně v některých oblastech (tady např. shell a některé příkazy) výrazně lepší a modernější. *) i Solaris, nebo i jiné systémy jako třeba BSD
Linux je skutečně v některých oblastech (tady např. shell a některé příkazy) výrazně lepší a modernější.A proto se tomu neříká Linxu, ale GNU. Brání někdo stáhnout coreutils, přeložit je a nahradit tím ty původní bazmeky?
Brání někdo stáhnout coreutilsBrání někdo stáhnout coreutils či jiné GNU utility
Ano. Nemám roota a i kdybych měl, tak těch strojů, na kterých se pohybuji je spousta, a na produkci bych to stejně nedostal. Administrátoři to dělat nebudou, jednak je to nepálí, pak by to někdo musel zaplatit a je jasné, že systém bez externích programů o které by se museli starat se lépe administruje. V tomhle by právě měla vyjít vstříc IBM.Linux je skutečně v některých oblastech (tady např. shell a některé příkazy) výrazně lepší a modernější.A proto se tomu neříká Linxu, ale GNU. Brání někdo stáhnout coreutils, přeložit je a nahradit tím ty původní bazmeky?
ll
, který obvykle odpovídá příkazu ls -hal
... no ale to je detail.
ls -ltr |tail # Vypiš naposledy změněné soubory
ls -lt | head
-h, --human-readable with -l, print sizes in human readable format (e.g., 1K 234M 2G)
$ ls -l celkem 11292 drwx------ 2 tux tux 4096 2009-08-15 14:44 Desktop -rwxr-xr-x 1 tux tux 2795704 2009-08-29 18:59 gajim-0.11.4-1.x86.package ... $ ls -lh celkem 12M drwx------ 2 tux tux 4,0K 2009-08-15 14:44 Desktop -rwxr-xr-x 1 tux tux 2,7M 2009-08-29 18:59 gajim-0.11.4-1.x86.package
df -h
, spočítání velikosti adresáře du -sh
, nebo "emko" u výpisu volné paměti free -m
. Udělal jsem si na to aliasy, aby se mi to rovnou vypisovalo v těch přepočítaných jednotkách, je to čitelnější.
ls
je, ze nedovede vypsat pocet polozek v adresari. Pokud nekdo vi, jestli to jde, at se ozve. Ja pouzivamls | wc -l
ls | wc -l
funguje a není potřeba ls -1 | wc -l
.
-1
), ale trochu mi to přijde jako že se ten program pokouší myslet za uživatele.
ls | wc -l
trochu hral, tak jsem se nad tim taky zarazil a prepocitaval jsem vysledek rucne, abych se presvedcil, ze to opravdu funguje, i kdyz je to zvlastni (nectu si jen tak man
stranky z nudy, spis kdyz jen neco potrebuju, tudiz o nejakem interaktivnim modu taky nevim).
Rozbité symlinky jdou hledat a mazat přes GNU find:
find -P ~ -xtype l
find -P ~ -xtype l -delete
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.