Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 4.5.0. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.
Byl vydán Mozilla Firefox 138.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 138 je již k dispozici také na Flathubu a Snapcraftu.
Šestnáctý ročník ne-konference jOpenSpace se koná 3. – 5. října 2025 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytvářejí všichni účastníci, se skládá z desetiminutových
… více »Richard Stallman přednáší ve středu 7. května od 16:30 na Technické univerzitě v Liberci o vlivu technologií na svobodu. Přednáška je určená jak odborné tak laické veřejnosti.
Jean-Baptiste Mardelle se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 25.04.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.
TmuxAI (GitHub) je AI asistent pro práci v terminálu. Vyžaduje účet na OpenRouter.
Byla vydána nová verze R14.1.4 desktopového prostředí Trinity Desktop Environment (TDE, fork KDE 3.5, Wikipedie). Přehled novinek i s náhledy v poznámkách k vydání. Podrobný přehled v Changelogu.
Bylo vydáno OpenBSD 7.7. Opět bez písničky.
V Tiraně proběhl letošní Linux App Summit (LAS) (Mastodon). Zatím nesestříhané videozáznamy přednášek jsou k dispozici na YouTube.
Doug McIlroy, který vynalezl unixové roury, řekl, že unixová filizofie je toto: Piš programy, které dělají jednu věc a dělají ji dobře. Piš programy tak, aby spolu spolupracovaly. Piš programy, které pracují s textovými proudy, protože to je univerzální rozhraní.
Proč tohle všechno? Je zde několik podstatných výhod.
Spoustu historických unixových utilit převzalo a (většinou) dle Single Unix Specification (SUS) implementovalo GNU. Díky tomu jsou tyto příkazy dostupné ve všech běžných distribucích GNU/Linuxu. Balíček obsahující tyto příkazy se jmenuje coreutils. V tomto seriálu se postupně budu zabývat jednotlivými příkazy z coreutils. Dozvíte se vždy něco z historie i z praxe.
Příkaz cat
slouží ke spojení nebo vypsání obsahu souborů (s libovolným obsahem). Název vznikl z anglického „catenate“ (spojit).
Standardních použití je několik. Pro prosté vypsání obsahu souboru na terminál použijeme:
cat soubor.txt
Pro spojení několika souborů (v daném pořadí) do jednoho lze použít:
cat soubor.txt soubor2.txt soubor3.txt > velky_soubor.txt
Dle standardu by měla každá implementace příkazu cat
podporovat kromě předvedených vlastností ještě přepínač -u
, který zajistí okamžitý výpis každého bytu ihned po jeho přečtení ze zdroje.
BSD a GNU (coreutils) verze programu cat
navíc přínášejí několik vlastních rozšíření.
Přepínač (GNU/BSD) | Popis |
-b (GNU má i --number-nonblank) | očísluje všechny neprázdné řádky |
-n (GNU má i --number) | očísluje všechny řádky |
-s (GNU má i --squeeze-blank) | nahradí více sousedících prázdných řádků za jeden |
-v (GNU má i --show-nonprinting) | zobrazí netisknutelné znaky (kromě tabů a konce řádků) |
-t | jako -v, ale navíc zobrazí taby jako ^I |
-e | jako -v, ale navíc zobrazí konce řádků jako $ |
Příkaz cat
bývá tak často používán zbytečně tam, kde není třeba, že dokonce vznikla zkratka UUOC (Useless Use of Cat, zbytečné používání cat
). Typické zbytečné použití cat
se objevuje v případech, kdy se člověk snaží poslat obsah jednoho souboru do roury ke zpracování jiným příkazem.
# za „grep“ si můžete dosadit libovolný příkaz, který pracuje se vstupem cat soubor.txt | grep "slovo"
Toto je ovšem zbytečné. Nejen proto, že obecně lze napsat kratší příkaz,
<soubor.txt grep "slovo" # nebo (běžnější ekvivalentní zápis) grep "slovo" soubor.txt
ale i proto, že se spustí jeden zcela zbytečný proces.
Ekvivalentem tohoto příkazu na operačních systémech VMS, CP/M, DOS, OS/2 a Windows je příkaz type
.
Když je řeč o utilitě cat
, sluší se zmínit i relevantní odvozené prográmky zcat
, bzcat
a xzcat
, sloužící k témuž účelu, ovšem pracující s komprimovanými soubory gzip, bzip2, lzma.
zcat soubor1.txt.gz soubor2.txt.gz > soubory.txt bzcat konfiguracni_soubor.conf.bz2 xzcat zdrojak.tar.xz | tar xfv -
Další odvozenou utilitou je tac
, který také spojuje soubory, ale vypisuje je po řádkách od poslední k první, z čehož vychází i název – tac
je totiž cat
pozpátku.
Utilita head
(angl. hlava, horní část) slouží primárně k zobrazení prvních několika řádků souboru (výchozí počet řádků k zobrazení je 10). Systém, který tento program obsahoval jako první, se jmenuje PWB/UNIX, jehož první verze vyšla v roce 1977.
Existují dva základní způsoby použití, první se používal spíše v minulosti.
# oba příkazy vypíšou prvních 15 řádků souboru head -15 soubor.txt head -n15 soubor.txt
Novější verze head
mají přepínač -c, který slouží k vypsání určitého počtu počátečních bytů. Podporují také záporné hodnoty jako argumenty přepínačů -c a -n, viz ukázku:
# vypíše soubor.txt, ale vynechá posledních 20 řádků head -n -20 soubor.txt # vypíše soubor2.txt, ale vynechá posledních 100 bytů head -c -100 soubor2.txt
Prográmek tail
(angl. ocas, zadní/spodní část) je podobný předchozímu příkazu head
, ale na rozdíl od něj funguje opačně, tedy zobrazuje posledních několik řádků. I tail
se poprvé objevil v PWB/UNIXu.
# vypíše posledních 10 řádků souboru tail soubor.txt # vypíše posledních 20 řádků souboru tail -n20 soubor.txt # vypíše soubor od 20. řádku dále tail -n +20 soubor.txt
Tolik k použitím obdobným příkazu head
. Tail má ještě jeden zajímavý přepínač, a tím je -f. Pomocí něj lze dosáhnout monitorování souboru. Funguje to tak, že sleduje nějaký soubor a postupně vypisuje obsah, který přibývá na jeho konec. Lze takto sledovat například systémový log.
tail -f /var/log/messages
Nástroj, který umožňuje takto monitorovat výstup příkazu, se jmenuje watch
a zmíním se o něm v některém z příštích dílů.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
ak sa tempo prilis nezrychli, tak sa aj nieco zaujimave naucim. je to predychatelnejsie ako man stranky. dik.
pokud Dejv vydrží, bude z toho povedenej seriálSestavujeme s Davidem seznam všech možných příkazů, o kterých by bylo fajn napsat (a pokusili jsme se je seskupit podle významu do článků). Vzhledem k tomu, jak je už teď ten seznam dlouhý, si myslím, že by se David nezlobil, kdyby se některých dílů chopili i jiní autoři. Pokud máte někdo zájem, ozvěte se na redakce AT abclinuxu.cz.
cat soubor.txt | grep "slovo"Tak tohle používám pořád a teď se dozvím, že je to "špatně"
Tak tohle používám pořád a teď se dozvím, že je to "špatně"neni to spatne... jenom si to mysli nekolik anticat-fasistu... :-]] ja ten zapis ,,.
cat foo | bar
'' mam radsi, protoze kdyz se ladi nejaka slozitejsi roura je mozne velice jednoduse vymenit vstup... napr. kdyz chcu udelat nejaky dump z logu tak si rouru odladim pro vstup head -n 100
a kdyz jsem spokojeny s vystupem prohodim jenom head
za cat
nebo treba zcat
a je vystarano...
navic, ne kazdy program ma jako argument vstupni soubor jako grep
... takze pouziti cat
je evidentne obecnejsi reseni
Toto je odpověď à la absurdní drama. David se snažil naznačit, že není potřeba si pamatovat způsob zadávání vstupního souboru.
Pokud si to čirou náhodou pamatuju, můžu napsat
grep franta /etc/passwd
Tady příslušný soubor otevře přímo grep. Pokud si pořadí parametrů pamatovat nechci, nikdo mě k tomu nenutí. Může to v konečném důsledku znamenat dokonce i méně práce pro můj počítač, pokud jde o počet současně existujících file descriptorů. Místo parametru použiji vymoženost zabudovanou přímo v shellu:
grep franta < /etc/passwd
Tady soubor otevře shell a grep bude prostě číst svůj standardní vstup. Žádný proces navíc, žádný file descriptor navíc.
Tohle je pravda a i tak jsem to z článku pochopil. Mně na tom ale vadí jedna věc. Když zapíšu
grep franta < /etc/passwd
tak to je v obráceném pořadí (kolony se čtou zleva doprava), takže třeba
grep franta </etc/passwd | sort | uniq
a když naopak zapíšu
</etc/passwd grep franta | sort | uinq
tak se mi nelíbí, že ta šipka směřuje na druhou stranu. A navíc, pokud budu vypisovat nějakej delší soubor, tak ta | to pěkně vizuálně oddělí.
Ale jinak se myslím všichni shodneme, že se tu bavíme o marginální okrajovosti a jde spíše jen o takové relaxační potlachání
kolony?
Ano, já se o tom vždycky učil jako o koloně.
Roura, trubka, kolona, anonymní roura, konvenční roura (anglicky pipeline) je v unixových systémech původním nástrojem pro spojování procesů do řetězce pomocí vzájemného propojení standardních proudů tak, že je vždy výstup (stdout) procesu nasměrován přímo do vstupu (stdin) následujícího procesu. Viz http://cs.wikipedia.org/wiki/Roura_%28Unix%29
Takže | je krásně česky pajpa a více zřetězených příkazů pomocí pajpy je kolona... Nebo třeba z http://www.kiv.zcu.cz/~txkoutny/common/ups/skoleni/skoleni-unix-3.html :
| roura (pipe) - řazení příkazů do kolony
Vím, o co jde ale „kolona“ zní naprosto příšerně
Mozno kolona je uplne poriadku ale ani mne sa velmi nepaci. Aj v Slovencine mame slova ktore su spisovne a "uplne vporaidku" ale nikto ich nepouziva napriklad:
posilnovna (nespravne posilovna), hovnik (nespravne pohovka), lezun (nespravne batola) a hranolceky (nespravne hranolky)...
Inak spisovny jazyk je vynalez akademikov, skutocny jazyk je taky ktory sa pouziva a ktorym sa ludia dorozumeju. Inak spisovna anglictina v podstate neexistuje takze neverte ucitelom anglictiny ak vam povedia ze sa nieco "takto" nehovori alebo ze je nieco nespravne - urcite sa da najst priklad kedy sa to tak pouziva ;)
Inak kolona mi evokuje anglicke colon [kolon] co je dvojbodka ;)
Pro mne je problém v něčem jiném. Potřebuju-li vložit filtr na začátek, tak při použití cat
mám
cat file | filter1 -args1 | filter2 -args2 ... cat file | filter0 -args0 | filter1 -args | filter2 -args2 ...
tj. jen vložím filtr tam, kam je potřeba. Oproti tomu bez cat
to vypadá takto:
filter1 -args1 <file | filter2 -args2 ... filter0 -args0 <file | filter1 -args1 | filter2 -args2 ...
tj. musím vytáhnout to přesměrování a přesunout ho před filtr, který byl původně první. A tohle nepohodlí mi za jeden ušetřený proces nestojí, zvlášť jde-li o interaktivní práci, kdy stejně počítač drtivou většinu času čeká na mne.
Ano, vím, že bash umožňuje napsat přesměrování před příkaz. Ale jednak to považuji za nechutnou prasárnu, jednak si moc nejsem jistý přenositelností této konstrukce.
<file filter1 -args1 | filter2 -args2 <file filter0 -args0 | filter1 -args1 | filter2 -args2Zdá se mi to takové nezvyklé, možná i hůř čitelné než s catem (možná je to proto, že mám v PS1 zobáček).
kamo, asi starnes.
njn, ak niekto vytahuje pri debate o scriptovani v shelly argument, ze pouzitie cat-u je neefektivne je to smiesne; cele scriptovanie v shelly je neefektivne a na komplexnejsie ulohy sa nehodi
+1, pametat si argumenty pre vstupny subor roznych programov je nad moje sily
Asi tak.
cat soubor.txt | grep slovo | …
mi přijde přehlednější – člověk vidí ty jednotlivé | a hned si to rozdělí na posloupnost příkazů.
Zápisem grep slovo < soubor.txt | …
se sice ušetří vytváření procesu cat
u, ale vetšinou je to úplně jedno.
Zápis grep slovo soubor.txt
mi přijde trochu proti té unixové filosofii, grep totiž musí umět pracovat se soubory, i když by stačilo, aby pracoval jen se standardním vstupem/výstupem a vše ostatní se řešilo rourami/přesměrováním.
Plus ještě další if-větvení + zpracování parametrů příkazové řádky + manuálové stránky + ošetření dalších chyb… je toho víc.
Na druhou stranu grep toho dělá víc než obyčejné grepování (např. rekurzivní procházení adresáře, kdy grepuje všechny soubory a na výstup vypisuje nejen řádky, ale i název souboru, ze kterého pocházejí), takže by se soubory pracoval tak jako tak.
BTW: když jsem si teď procházel zdrojáky grepu, tak jsem si všimul, že se tam definuje:
/* Long options equivalences. */ static struct option const long_options[] = { {"after-context", required_argument, NULL, 'A'}, {"basic-regexp", no_argument, NULL, 'G'}, {"before-context", required_argument, NULL, 'B'}, {"binary-files", required_argument, NULL, BINARY_FILES_OPTION}, {"byte-offset", no_argument, NULL, 'b'}, {"context", required_argument, NULL, 'C'}, {"color", optional_argument, NULL, COLOR_OPTION}, …
tedy parametry příkazové řádky a totéž potom v nápovědě:
printf (_("Usage: %s [OPTION]... PATTERN [FILE] ...\n"), program_name); printf (_("\ Search for PATTERN in each FILE or standard input.\n\ Example: %s -i 'hello world' menu.h main.c\n\ \n\ Regexp selection and interpretation:\n"), program_name); printf (_("\ -E, --extended-regexp PATTERN is an extended regular expression\n\ -F, --fixed-strings PATTERN is a set of newline-separated strings\n\ -G, --basic-regexp PATTERN is a basic regular expression\n\ -P, --perl-regexp PATTERN is a Perl regular expression\n")); printf (_("\ -e, --regexp=PATTERN use PATTERN as a regular expression\n\ -f, --file=FILE obtain PATTERN from FILE\n\ -i, --ignore-case ignore case distinctions\n\ …
A do třetice to musí být ještě v manuálové stránce.
Není na to nějaká knihovna nebo postup, abych definoval na jednom místě krátký parametr, dlouhý parametr a popis a nápověda a manuálová stránka se z toho jen vygenerovala?
Taky mi to připadá takový přehlednější a čistší. Jeden program dělá grepování a druhý čtení ze souboru. A upřímně řečeno, kdy naposledy jste někdo psal takovou kolonu, že by ten jeden proces navíc hrál tak zásadní roli? Ale líbí se mi to, že si každý může vybrat, ať je lenoch jako já, nebo anticat fašista
Ale nejvíc mě to štvalo, když jistý nejmenovaný profesor u zkoušky považoval přebytečné cat za chybu zhoršující známku o stupeň. Ale alespoň to oznámil předem...
Jo, možná to zní divně, ale je to tak Napsat jeden příkaz navíc je míň práce, než měnit něco, co používám už dlouho
Stará známá pravda říká, že línej se nejvíc nadře.
kravina, lenost je motor lidstva
nedavno jsem na mandrive objevil zkratku tailf, usetrim dva uhozy
ls-l
nebo cd..
which tailf
a vrátilo mi to /usr/bin/tailf
, což je normální binárka, alias by to asi takhle nenašlo.
Z man tailf:
It is similar to tail -f but does not access the file when it is not growing.
K tail -f existuje este tailf, ktory na rozdiel od prveho nemeni casy pristupu k sledovanemu suboru.
a existuje aj GNU extension tail -F, ktorá je pre sledovanie /var/log/* súborov podstatne výhodnejšia ako tail -f ....
tail
bych vypíchnul spíše -F. Ten zvládá i přesouvání souborů, což je u logů poměrně typické.
Nu, pekny navod. Ale nebyla zde nekde nejaka obdobna ucebnice?
Dobra. Omlouvam se. Ucebnice je vyrazne strucnejsi.
Velmi casto pouzivam:
cat /dev/sda1 > zaloha_windows_datum.bin
a nazpet
cat zaloha_windows_datum.bin > /dev/sda1
HDD oddil je vlastne "jenom" takovy "kus textu" .... zrovna u me ma 15 GB.
cp
. :-)
dd
s vhodně nastaveným bs=x
by měl být efektivnější, ne?
Tohle testuje jenom čtení, ale stejně:
$ dd if=záloha-2009-04-10.7z of=/dev/null bs=1M 9+1 vstoupivších záznamů 9+1 vystoupivších záznamů 10 333 503 bajtů (10 MB) zkopírováno, 0,00965979 s, 1,1 GB/s $ cat záloha-2009-04-10.7z | dd of=/dev/null bs=1M 9+1 vstoupivších záznamů 9+1 vystoupivších záznamů 10 333 503 bajtů (10 MB) zkopírováno, 0,0206071 s, 501 MB/s $ dd if=záloha-2009-04-10.7z bs=1M > /dev/null 9+1 vstoupivších záznamů 9+1 vystoupivších záznamů 10 333 503 bajtů (10 MB) zkopírováno, 0,00981492 s, 1,1 GB/s
$ <záloha-2009-04-10.7z dd bs=1M > /dev/null 9+1 vstoupivších záznamů 9+1 vystoupivších záznamů 10 333 503 bajtů (10 MB) zkopírováno, 0,00989328 s, 1,0 GB/s
>>> 1,1 GB/s ???
Ten soubor (if) mate predpokladam v ramdisku. Pac ta rychlost je opravdu monstrozni.
Jakou rychlosti poslete do /dev/null soubor vetsi velikosti (radove nekolik GB) a nebo rovnou filesystem (if=/dev/sd*) ?
Na ramdisku není, je to na ex4 na LVM na šifrovaném disku.
Ale nebylo to první čtení toho souboru, takže se data brala z diskové cache. První čtení bylo jen kolem 40 MB/s
$ dd if=soubor.bin bs=1M of=/dev/null 11+1 vstoupivších záznamů 11+1 vystoupivších záznamů 12 340 695 bajtů (12 MB) zkopírováno, 0,310885 s, 39,7 MB/s $ dd if=soubor.bin bs=1M of=/dev/null 11+1 vstoupivších záznamů 11+1 vystoupivších záznamů 12 340 695 bajtů (12 MB) zkopírováno, 0,0137188 s, 900 MB/s
Da se to tak nejak srovnat. Pokud bs neni prilis nizke (radove stovky bajtu a min - rychlost jde dolu) tak bych to povazoval za rovnocenne. Jinak samozrejme dd je nastroj primo pro tyto ucely.
pv
- pokud něco může trvat delší dobu, je dobré vidět progressbar.
dd
čku USR1, tak ti taky ukáže, kolik už toho zkopírovalo.
pěkne, to jsem neznal
anebo si nainstlalovat dd_rescue, pouzivat jej misto dd, na velke objemy dat se hodi lepe.
cat soubor.txt | grep "slovo"
Pouzivam vtedy ked ich robim viac, pricom manualne potrebujem zmenit "slovo". Vtedy v bash-i dam len sipku hore a mozem hned zmazat stare slovo a nahradit novym.
Ak ma subor.txt iba ~100 riadkov, je rozdiel vo "vykone" uplne zanedbatelny, ale rozdiel v editacii riadku nie. Cize vlastne "pomalsia" varianta je rychlejsia.
Mohol by som sice pouzit makro alebo mini script ale neoplati sa ;)
< soubor.txt grep "slovo"
priznam sa ze premerovanie na zaciatku som nepoznal a ani sa mi nezda velmi logicke.
kde vsade to funguje? je to iba bash-ovina?
echo ahoj > 1.txt > 2.txt > 3.txt(a totéž umí i obráceně s <)
zacinam sa zamotavat...
skusil som si v bashi tvoj priklad - len zo srandy:
$ echo 1 > 1 > 2 > 3
A vysledok:
$ cat 1
$ cat 2
$ cat 3
1
Otazka je: preco?
Podrobnejsia otazka je: preco su 1 a 2 prazdne a vysledok je az v 3 ?
Zjednodušená odpověď: protože přesměrování se vyhodnocují postupně a každé nové "přebije" předchozí. Podrobnější odpověď: každé přesměrování spočívá v něčem jako
int fd = open(fname, ...); dup2(fd, STDOUT_FILENO);
Takže ať jich napíšete, kolik chcete, nakonec pod deskriptorem 1 máte vždy ten poslední soubor. Z podobných důvodů 'cmd >file 2>&1
' přesměruje starndardní i chybový výstup do souboru, ale 'cmd 2>&1 >file
' přesměruje jen standardní výstup.
Velmi pekne dakujem za odpoved. Konecne tomu rozumiem. Doteraz som celkom nechapal preco "zalezi na poradi" - iba som tento fakt akceptoval. Priklad s dup2 to uplne vyjasnil (aj ked som pozrel zopar manualovych stranok pre dup2 aby som si vyjasnil ako to funguje).
Pre tych co tiez nechapu prikladam odkazy na manualove stranky:
http://www.opengroup.org/onlinepubs/009695399/functions/dup.html
http://www.mkssoftware.com/docs/man3/dup2.3.asp
http://linux.die.net/man/2/dup2
DIKI!!!
este som skusil
< soubor.txt v bashi aj v zsh: Bash nevypise nic, zsh vypise obsah suboru - ako cat ;)
A este jedna vec, najprv by bolo mozne dobre vysvetlil co tie rury (kolony) vlastne su a troch o standardnom vstupe a vystupe. Navyse tieto veci sa zavisle aj na pouzitom shelli takze by bolo asi dobre popisat aj shell - ale potom sa obavam ze by sa auto tak skoro ku cat nedostal...
Inak "Nie je všetko sh, čo sa blyští" - konkretne mam na mysli Ubuntu sh (=dash) a Fedora sh (=bash)... ;)
Díky, velmi zajímavý článek
-v
znamena vetsinou "verbose", ale koukam, ze u cat
to ma uplne jiny vyznam a na takove odchylky narazim casteji... :(