Byla vydána (𝕏) nová verze 24.7 open source firewallové a routovací platformy OPNsense (Wikipedie). Jedná se o fork pfSense postavený na FreeBSD. Kódový název OPNsense 24.7 je Thriving Tiger. Přehled novinek v příspěvku na fóru.
Binarly REsearch upozorňuje na bezpečnostní problém PKFail (YouTube) v ekosystému UEFI. Stovky modelů zařízení používají pro Secure Boot testovací Platform Key vygenerovaný American Megatrends International (AMI) a jeho privátní část byla při úniku dat prozrazena. Do milionů zařízení (seznam v pdf) po celém světě tak útočníci mohou do Secure Bootu vložit podepsaný malware. Otestovat firmware si lze na stránce pk.fail. Ukázka PoC na Linuxu na Windows na YouTube.
Mobilní operační systém /e/OS (Wikipedie) založený na Androidu / LineageOS, ale bez aplikací a služeb od Googlu, byl vydán ve verzi 2.2 (Mastodon, 𝕏). Přehled novinek na GitLabu. Vypíchnuta je rodičovská kontrola.
Společnost OpenAI představila vyhledávač SearchGPT propojující OpenAI modely umělé inteligence a informace z webů v reálném čase. Zatím jako prototyp pro vybrané uživatele. Zapsat se lze do pořadníku čekatelů.
Distribuce Linux Mint 22 „Wilma“ byla vydána. Je založená na Ubuntu 24.04 LTS, ale s desktopovým prostředím Cinnamon (aktuálně verze 6.2), příp. MATE nebo Xfce, balíkem aplikací XApp, integrací balíčků Flatpak a dalšími změnami. Více v přehledu novinek a poznámkách k vydání.
Příspěvek na blogu Truffle Security: Kdokoli může přistupovat ke smazaným a privátním repozitářům na GitHubu.
Byla vydána nová verze 14 integrovaného vývojového prostředí (IDE) Qt Creator. Podrobný přehled novinek v cgitu. Vypíchnout lze podporu rozšíření v Lua.
Byla vydána verze 1.80.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.
Apple oznámil, že v beta verzi spustil své Apple Maps na webu. Podporován je také webový prohlížeč Chrome. Ne však na Linuxu.
Portál Stack Overflow po roce opět vyzpovídal své uživatele, jedná se především o vývojáře softwaru, a zveřejnil detailní výsledky průzkumu. Průzkumu se letos zúčastnilo více než 65 tisíc vývojářů. Z Česka jich bylo 710. Ze Slovenska 246.
Jakým příkazem by se dalo udělat hromadné přejmenování souborů? Omylem jsem udelal MP3 s koncovkou *.OGG a potrebuji je hromadne prejmenovat na *.MP3. Zkousel jsem jen:
mv *.OGG *.MP3, ale to moc nefunguje.
rename 's/.OGG$/.MP3/' *.MP3
$ rename 'y/A-Z/a-z/' *
:-)
rename moje tvoje *
V Debianu je rename skript v perlu. Mělo by to jít asi takhle
rename 's/moje/tvoje/' *
Přinejmenším to tvrdí dokumentace.
$ mmv "moje*" "tvoje#1"
Ovsem jen rucne, ve skriptech se nerad spoleham na program, kterej nemusi kazdy mit.
$whatis mmv
mmv - move/copy/append/link multiple files by wildcard patterns
"Mmv moves (or copies, appends, or links, as specified) each source file matching a from pattern to the target name specified by the to pattern. This action is performed safely, i.e. without any unexpected deletion of files due to collisions. Furthermore, before doing anything, mmv attempts to detect any errors that would result from the entire set of actions specified and gives the user the choice of either proceeding by avoiding the offending parts or aborting."
Asi nic extra, proste mi to nekdo doporucil, bylo to maly a bylo to jako balik v debianu.
for i in `ls ~/tmp/tmp-nm/*.xxx` do let n=n+1 echo menim nazov suboru na $n.yyy mmv "*.xxx" "$n.yyy" echo $i done
Konstrukci for i in `ls ~/tmp/tmp-nm/*.xxx`
napiš vlastní krví na pergamen vyrobený z kůže 17 leté panny. Pergamen potři sádlem z netopýra a posyp práškem z kořene mandragory. O 3. ouplňku po božím hodě přesně o půlnoci sněz a ZAPOMEŇ!
Krom toho, že místo for i in `ls ~/tmp/tmp-nm/*.xxx`
by většina normálních lidí napsala přinejmenším for i in ~/tmp/tmp-nm/*.xxx
a zbavil se tak probl0mu s mezerama, nevím co by jsi s tím dělal, kdyby těch souborů v tom adresáři bylo pár tisícovek.
Mimoto ten tvůj script, kdyby dělal to co se tam snažíš napsat, tak by ze souborů a.xxx b.xxx c.xxx vyrobil jeden jediný soubor 1.yyy s obsahem c.xxx, o a.xxx a b.xxx by jsi nenávratně přišel a pak by se odporoučel. Naštěstí mmv by tě to nedovolil udělat. Pokud už se chceš tvářit, že mmv ani rename nemusí vždy existovat, tak co třeba takhle:
ls ~/tmp/tmp-nm/*.xxx | while read i; do mv $i ${i%xxx}yyy; done
for i in ~/tmp/tmp-nm/*.xxx; do mv $i ${i%xxx}yyy; doneTo s tím ls by mělo právě ten následek, že by přetekla příkazová řádka.
ls ~/tmp/tmp-nm/*.xxx
. Provede expanzi ~/tmp/tmp-nm/*.xxx
čímž mu může vzniknout první chyba a to překročení velikosti příkazové řádky 64KB. Provede exec ls s parametry vzniklími tou expanzí a výstup stdout odchytí a umístí do príkazového řádku for i in
čímž už potřetí vyrobíme ten samý seznam souborů, ale teď už s tím nepracuje jako se seznamem parametrů, ale kako textovým souborem! No a logicky ho zpracuje na nový seznam parametrů. Pro každý z těchto parametrů volý potom vnitřek smyčky. no a když přeskočíme ty nezajímavé věci tak při volání mmv provede znovu expanzi *.xxx v aktuálním adresáři (což jaksi není to co by jsi chtěl) no a nedej bože aby jsi byl zrovna v adresáři kde jsou nějaké soubory *.xxx protože se zase provede expanze (no a zase nesmý být překročena pamět pro příkazový řádek 64KB) no a s těmito paramatry je zavoláno mmv a nakonec se hodí 1.yyy (a při druhém volání 2.yyy) co s tím udělá mmv, no to ...
mv i$ `echo $i| sed 's/xxx$/yyy/'`použil
mv $i ${i%xxx}yyy(nemluvě o použití
filtr <soubor
místo cat soubor |filtr
a filtr <<<"nějaký text"
místo echo "nějaký text" | filtr
) to chce trochu praxe. Nemluvě o vychytávkách typu exec <soubora konstrukce
tar cf >(cd nekam; tar x) cosik(ekvivalent
tar c cosik | tar xC nekam
). Hold to není tak jednoduché. Takže ještě k tomu přejmenování (když se Yeti nebude zlobit, že to dělám v bashi a ne nějak přes filtry a xargs n=0 for i in ~/tmp/tmp-nm/*.xxx do let n++ mv "$i" "${i%/*}/$(printf "%03d" $n).yyy" done
Bohužel takový link neznám, ale matně si vzpomínám, že jsem na něco takového kdysi narazil. Možná by se dalo i něco najít u O'Reily.
Mě hodně pomáhá, když si představím jak by to tak asi mohlo být naprogramované a znalost střev unixu (třeba z Skočovský, L.:UNIX POSIX Plan 9). Shell je jak název napovídá jen obálka nad voláními jádra No a tak nejjednodušeji implementují to co je jednoduše převoditelné na volání jádra a všechno složitější se víc a víc od jádra vzdaluje. Vycházím z jednoduché premisy, že všichni programátoři jsou líní jako já a položím si jednoduchou otázku: Jak bych to naprogramoval, tak abych se nejmíň nadřel? Třeba cyklus
for i in list
- bash čte zdrojový text na svém vstupu, rozparsuje 'for' 'i' 'in', no tak si udělám proměnnou 'i' a budu čekat, že následuje nějaký seznam a teď to nejjednodužší co mě napadne, že udělám expanzi toho seznamu, jenže jsem zjistil, že to by mohlo taky zabrat příliš moc paměti. No tak jak by se to asi dalo jinak naprogramovat? No třeba, že bych bral jeden parametr (nebo výsledek expanze) po druhém a z každým pak prováděl to co najdu po do
? To samé by se dalo dělat, když tam bude substituce příkazu (bash(1)/Command Substitution
jako $(command)
nebo `command`
, to první používám radši, protože se to pak dá zanořovat). To by se dalo udělat třeba tak, že bych se odforkoval a pak četl postupně stdout toho subprocesu přes pipe a zacházel s tím jako s výsledkem expanze. To zní složitě, ale když si představím, jak by se to naprogramovalo, tak je to malý kousíček kódu v C s pár voláníma jádra, které všechno to složité udělají za mě.
No a tak postupuju, když něco nefunguje, nebo chci vědět jak to funguje a chci aby to fungovalo co nejlépe, nejrychleji, s nejmenšími nároky na paměť a podobně. Prostě se snažím představit jak to asi ti stejně líní programátoři naprogramovali. Ona lenost v programování, znamená méně kódu a tím méně chyb, méně spotřebované paměti a méně problémů. No a vo tom je unix.
ls *.ogg | sed 's/...$//'| xargs -i mv {}ogg {}mp3
Tiskni
Sdílej: