Byla vydána nová verze 9.16 z Debianu vycházející linuxové distribuce DietPi pro (nejenom) jednodeskové počítače. Přehled novinek v poznámkách k vydání.
Americká vláda se po převzetí zhruba desetiprocentního podílu ve výrobci čipů Intel chystá na další investice do vybraných firem. Na sociální síti Truth Social to napsal prezident Donald Trump. Jeho ekonomický poradce Kevin Hassett v rozhovoru v televizi CNBC řekl, že nemusí jít pouze o firmy z technologického sektoru, ale i z jiných odvětví.
V Amsterdamu probíhá Open Source Summit Europe. Organizace Linux Foundation představuje novinky. Pod svá křídla převzala open source dokumentovou databázi DocumentDB.
Přesně před 34 lety, 25. srpna 1991, oznámil Linus Benedict Torvalds v diskusní skupině comp.os.minix, že vyvíjí (svobodný) operační systém (jako koníček, nebude tak velký a profesionální jako GNU) pro klony 386 (486), že začal v dubnu a během několika měsíců by mohl mít něco použitelného.
86Box, tj. emulátor retro počítačů založených na x86, byl vydán ve verzi 5.0. S integrovaným správcem VM. Na GitHubu jsou vedle zdrojových kódů ke stažení také připravené balíčky ve formátu AppImage.
Vláda Spojených států získala desetiprocentní podíl v americkém výrobci čipů Intel. Oznámili to podle agentur americký prezident Donald Trump a ministr obchodu Howard Lutnick. Společnost Intel uvedla, že výměnou za desetiprocentní podíl obdrží státní dotace v hodnotě 8,9 miliardy dolarů (zhruba 186 miliard Kč). Částka podle Intelu zahrnuje dříve přislíbené subvence 5,7 miliardy dolarů z programu CHIPS na podporu výroby čipů v USA,
… více »Organizace Apache Software Foundation (ASF) vydala verzi 27 integrovaného vývojového prostředí a vývojové platformy napsané v Javě NetBeans (Wikipedie). Přehled novinek na GitHubu. Instalovat lze také ze Snapcraftu a Flathubu.
Knihovna FFmpeg byla vydána ve verzi 8.0 „Huffman“. Přibyla mj. podpora hardwarově akcelerovaného kódování s využitím API Vulcan, viz seznam změn.
Národní úřad pro kybernetickou a informační bezpečnost (NÚKIB) vydal Zprávu o stavu kybernetické bezpečnosti ČR za rok 2024 (pdf). V loňském roce NÚKIB evidoval dosud nejvíce kybernetických bezpečnostních incidentů s celkovým počtem 268. Oproti roku 2023 se však jedná pouze o drobný nárůst a závažnost dopadů evidovaných incidentů klesá již třetím rokem v řadě. V minulém roce NÚKIB evidoval pouze jeden velmi významný incident a významných incidentů bylo zaznamenáno 18, což oproti roku 2023 představuje pokles o více než polovinu.
Byl publikován aktuální přehled vývoje renderovacího jádra webového prohlížeče Servo (Wikipedie). Servo mimo jiné nově zvládne animované obrázky APNG a WebP.
find
, který slouží k vyhledávání souborů. Představíme jak standardní verzi, tak GNU rozšíření.find
je velice schopný vyhledávací nástroj, který poslouží jak pro jednoduché vyhledávání na základě názvu souboru, tak pro složité hledání na základě dalších údajů a podmínek. Jeho název vychází z anglického slova, které znamená „najít“.
Na GNU/Linuxu se často setkáte s GNU verzí této utility, která rozšiřuje schopnosti programu mimo rozsah standardu.
Základní použití programu vypadá takto:
# vypíše všechny soubory a adresáře v domovském adresáři (rekurzivně) find ~/ # najde v aktuálním pracovním adresáři všechny soubory a adresáře s názvem končícím na „.pdf“ find -name '*.pdf'
Jak vidíte, pomocí přepínače -name
lze vyhledávat soubory na základě (části) jejich názvu. Název adresáře, ve kterém chceme hledat, zadáváme vždy jako první (pokud jej vynecháme, použije se pracovní adresář). Předvedeme si, jak vyhledávat podle jiných kritérií, než je název souboru.
# vyhledá všechny symbolické odkazy v adresáři /tmp find /tmp -type l # vyhledá všechny adresáře a soubory s oprávněním 755 v nadřazeném adresáři find .. -perm 755 # vyhledá všechny soubory patřící uživateli „dave“ a skupině „home“ find -type f -user dave -group home
Jak je vidět na poslední ukázce, kritéria vyhledávání lze kombinovat. Zadáte-li je takto za sebou, find
bude hledat položky odpovídající všem kritériím. Jenže co když nám jde o to najít vše kromě položek splňujících dané kritérium? A co když chceme najít soubor, který splňuje buď jedno, anebo jiné kritérium? I toto find
zvládá a my si ukážeme jak na to. Přepínač -o představuje logický OR („nebo“), takže stačí, když platí výraz před tímto přepínačem nebo za ním, aby daný soubor odpovídal kritériím vyhledávání.
# vyhledá adresáře, které mají oprávnění 777 nebo patří uživateli „dave“ (nebo splňují obě podmínky) find -type d -perm 777 -o -user dave # vyhledá vše kromě obyčejných souborů find ! -type f # vyhledá soubory, které patří uživateli „dave“, a zároveň „adresáře“ s oprávněním 775 a skupinou jinou než „home“ find '(' -type f -user dave ')' -o \( -type d -perm 775 ! -group home \) # najde soubory s příponou .pdf či .ps find -type f -name '*.pdf' -o -name '*.ps'
Na ukázce jsem předvedl, že je možné používat i priority (závorky), které známe z matematiky nebo programování. Je však nutné je escapovat přidáním zpětného lomítka před závorku nebo je umístit mezi uvozovky či apostrofy. Je to nutné z toho důvodu, že jinak by shell interpretoval závorky po svém, přičemž takto je předá programu. Vykřičník slouží k negaci výrazu.
Teď si předvedeme jeden ze způsobů, jak pro každý nalezený soubor vyhovující daným kritériím spustíme program, kterému předáme název souboru jako argument. Ukázka převede všechny nalezené MP3 soubory na WAV pomocí programu lame
.
# vypisuje pouze výstup programu lame find -type f -name '*.mp3' -exec lame --decode "{}" \; # lame nic nevypisuje, pouze find vypisuje názvy souborů, když jsou zpracovávány find -type f -name '*.mp3' -exec lame --decode --silent "{}" + -print
Používá se tedy přepínač -exec
, za který napíšeme příkaz, který chceme spustit, i s argumenty, přičemž řetězec {}
je před spuštěním nahrazen za název souboru, který by byl jinak právě vypsán na výstup. Konec příkazu značíme středníkem, který musí být escapovaný, jinak by jej shell bral jako ukončení příkazu. V případě, že ukončujeme argumenty hned za uvedením {}
, můžeme místo středníku použít znak „+“. V ostatních případech znak plus není nijak zvláštně zpracováván.
Chceme-li být opatrnější, můžeme místo -exec
použít -ok
, který se před každým spuštěním příkazu nejdříve zeptá, zda jej chcete skutečně spustit. Přepínač -ok
nemusí podporovat ukončování pomocí znaku „+“ (např. GNU verze to nepodporuje), proto je lepší používat „;“.
Ukážeme si ještě, jak vyhledávat podle několika dalších kritérií. Nejdříve dle velikosti souborů pomocí přepínače -size
.
# hledá soubory větší než 500 bytů (chceme-li vyhledávat v bytech, za číslo přidáme znak "c") find / -type f -size +500c # vyhledá soubory velké přesně 2 kB find .. -type f -size 2048c # vyhledá soubory menší než 10 MB find adresář/ -type f -size -10485760c
Vyhledávat lze i podle času poslední změny (pomocí -mtime
), času vytvoření (-ctime
) a času posledního přístupu k souboru (-atime
). Těmto přepínačům předáváme počet dní (od doby spuštění příkazu). Pokud před tento počet dní n připojíme „+“, znamená to „více než n dní“ a opak platí pro „-“, podobně jako u přepínače -size
.
# hledá soubory naposledy změněné před více než deseti dny find -type f -mtime +10 # hledá adresáře vytvořené před méně než dvěma týdny find -type d -ctime -14
Ještě lze využít přepínač -newer
, kterému se předává soubor, jehož čas poslední změny se použije jako referenční pro vyhledávání souborů novějších, než je ten daný.
# hledá soubory a adresáře s časem posledním změny pozdějším, než má „soubor.txt“ find -newer soubor.txt
Chceme-li vyhledat soubory či adresáře, které mají neplatné UID nebo GID (vlastníka či skupinu), použijeme přepínače -nouser
a/nebo nogroup
.
# vyhledá všechny soubory či adresáře bez platného vlastníka či skupiny find -nouser -o -nogroup
Měl bych zmínit přepínač -H
, který mění chování programu při rekurzivním průchodu adresářů. Bez tohoto přepínače nebo s -L
, což je výchozí chování, find
nenásleduje symbolické odkazy, přičemž s -H
ano. Máte-li tedy adresář, který obsahuje tři soubory a jeden symbolický odkaz na jiný adresář, find -H
prohledá i adresář, na který odkaz směřuje.
Běžně se find
nejdříve zpracuje explicitně zadaný adresář (nebo „.“, pokud nebyl žádný zadán) a teprve potom teprve jeho obsah. Chceme-li z nějakého důvodu, aby tomu bylo naopak, můžeme použít přepínač -depth
.
Jak jsem již zmínil, implementace od GNU obsahuje poměrně mnoho rozšíření, které standard neuvádí. Podíváme se na několik z nich.
Často se nám může hodit vyhledávání podle názvu souboru, přičemž nezáleží na velikosti písmen. Toho lze docílit přepínačem -iname
.
Chceme-li nalezené položky rovnou mazat, můžeme zadat přepínač -delete
.
Pro ovlivnění rekurze lze použít přepínače -mindepth
(minimální hloubka) a -maxdepth
(maximální hloubka).
# vyhledává pouze v adresáři aktuálním a jeho podadresářích, ale dále nezajde find -mindepth 1 -maxdepth 2
Přepínač -execdir
je podobný jako -exec
, ale spouští příkaz z adresáře, ve kterém se nachází daný soubor či adresář.
Chceme-li, aby find
vypisoval názvy souborů oddělené znakem NULL (\0), což se hodí některým externím utilitám (například xargs
s přepínačem -0), předáme přepínač -print0
.
Přepínačem -size
lze zadávat velikost v příhodnějších jednotkách, než jsou byty.
# hledá soubory větší než 1 GB find -type f -size +1G
Komplexnějšího vyhledávání na základě názvů souborů lze docílit použitím regulárních výrazů. Daný výraz zadáme přepínači -regex
a typ regulárního výrazu můžeme zvolit přepínačem -regextype
.
find
toho umí ještě mnohem více, můžete se o tom přesvědčit sami při čtení manuálové stránky.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
Název adresáře, ve kterém chceme hledat, zadáváme vždy jako první (pokud jej vynecháme, použije se pracovní adresář).To vynechání je AFAIK právě GNU rozšíření a pokud nemáte GNU tak bude find kousat. Jinak pointa je v tom, že těch cest může být jedna a více.
find /bin /usr/bin -name find
V případě, že ukončujeme argumenty hned za uvedením {}, můžeme místo středníku použít znak „+“.Tady by se hodilo říci, že plus mění postup volání programu:
find /bin -exec prog '{}' ';' => prog /bin/bash prog /bin/cp ...
find /bin -exec prog '{}' '+' => prog /bin/bash /bin/cp ...Hodilo by se srovnání s
-execdir
.
Dále by se hodilo vysvětlit co je to -print
, -printf
a -print0
. A že -print
je default. To -print0
tam sice máte ale není z toho člověk moc moudrý.
#!/bin/sh find . -name "$1"Používám ho denně, například:
git add `sifi HlubokoVBalíčcíchPohřbenýSoubor.java` xdg-open `sifi HlubokoVBalíčcíchPohřbenýSoubor.java`
git add **/HlubokoVBalíčcíchPohřbenýSoubor.java xdg-open **/HlubokoVBalíčcíchPohřbenýSoubor.javaNení to lepší? (Nějaký novější bash to už prý umí také)
find -depth -mindepth 1 -maxdepth 5 \( -type f -o -type l \) \( -name '*.docx' -o -iname '*.doc' \) -delete
Oveľa lepšie je: - napísať si kratší find * s pár parametrami * jeho výsledok: 1) prochádzať v cykle 2) vypísať si medzivýsledky!
ls -lR | grep foojednodušší než
find . -name '*foo*'ale chápu že to může chápat někdo jiný :)
find
tedy bude pracovat s tím klasickým vlastníkem a skupinou, ale nebude umět třeba vypsat jen soubory, ke kterým má v ACL nastavená práva určitá skupina.
find -iname *.pdf
a find -iname '*.pdf'
Na dotaz s temi apostrofy mi to vrati vice vysledku, ale nechapu proc.
Muzete mi to nekdo prosim vysvetlit ?
find
je opravdu čistě GNU/Linuxová záležitost. Na ostatních UNIXových či UNIX-like systémech se chová naprosto jinak a spoustu věcí neumí.
Pokud chcete psát cross-platform skripty, je lepší se find
u vyhnout.
Nekamenujte mě. Píšu to jen proto, že seriál se jmenuje Unixové nástroje, nikoli Linuxové nástroje.
Jinak uznávám, že GNU verze je prostě nejlepší a preferuju ji. Bohužel né všude je k dispozici… iconv
em soubor z jednoho kódování do toho samého a tak podobně. Upravit skript tak, aby mu tyto drobnosti nevadily, je v pohodě. V případě find
u je to kolikrát major redesign (a následný major rewrite).