Dnes a zítra probíhá vývojářská konference Google I/O 2025. Sledovat lze na YouTube a na síti 𝕏 (#GoogleIO).
V Bostonu probíhá konference Red Hat Summit 2025. Vybrané přednášky lze sledovat na YouTube. Dění lze sledovat na síti 𝕏 (#RHSummit).
Společnost Red Hat oficiálně oznámila vydání Red Hat Enterprise Linuxu 10. Vedle nových vlastností přináší také aktualizaci ovladačů a předběžné ukázky budoucích technologií. Podrobnosti v poznámkách k vydání.
Tuto sobotu 24. května se koná historicky první komunitní den projektu Home Assistant. Zváni jsou všichni příznivci, nadšenci a uživatelé tohoto projektu. Pro účast je potřebná registrace. Odkazy na akce v Praze a v Bratislavě.
Troy Hunt představil Have I Been Pwned 2.0, tj. nový vylepšený web služby, kde si uživatelé mohou zkontrolovat, zda se jejich hesla a osobní údaje neobjevily v únicích dat a případně se nechat na další úniky upozorňovat.
Microsoft představil open source textový editor Edit bežící v terminálu. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.
V Seattlu a také online probíhá konference Microsoft Build 2025. Microsoft představuje své novinky. Windows Subsystem for Linux je nově open source. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.
Z příspěvku Turris Sentinel – co přinesl rok 2024 na blogu CZ.NIC: "Za poslední rok (únor 2024 – únor 2025) jsme zachytili 8,3 miliardy incidentů a to z 232 zemí a z jejich závislých území. Tyto útoky přišly od 6,2 milionu útočníků (respektive unikátních adres). SMTP minipot je stále nejlákavější pastí, zhruba 79 % útoků bylo směřováno na tento minipot, 16 % útoků směřovalo na minipot Telnet, 3 % útoků směřovaly na minipot HTTP a 2 % na minipot FTP. Dále jsme zaznamenali 3,2 milionu unikátních hesel a 318 tisíc unikátních loginů, které útočníci zkoušeli."
Byla vydána (Mastodon, 𝕏) nová verze 3.0.4 svobodné aplikace pro úpravu a vytváření rastrové grafiky GIMP (GNU Image Manipulation Program). Přehled novinek v oznámení o vydání a v souboru NEWS na GitLabu. Nový GIMP je již k dispozici také na Flathubu.
Byla vydána nová stabilní verze 7.4 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 136. Přehled novinek i s náhledy v příspěvku na blogu.
Příkaz at
slouží k naplánování pozdějšího spuštění příkazů. Anglický název příkazu v tomto kontextu překládáme jako předložku „v“ (ve významu v kolik hodin).
Implementace v Unix-like systémech obvykle sestává ze služby (démona) atd
a uživatelského příkazu at
. Služba běží neustále a spouští naplánované úlohy, když přijde čas. Tím se uživatel nemusí zabývat. Podstatné je pro nás, jak to naplánovat. Proto si popíšeme použití příkazu at
.
Ve výchozím režimu čte at
seznam příkazů, které má spustit, ze standardního vstupu (stdin) a jako argument očekává čas, kdy je má spustit. Chceme-li tedy spustit příkaz pokus
přesně za hodinu, můžeme to naplánovat takto:
echo pokus | at now + 1 hour
Tím jsme si ukázali, že čas spuštění lze zadávat i relativně. Zadávání času spuštění je velice obecné a když si vymyslíte něco, co dává aspoň trochu smysl, at
to pravděpodobně pochopí.
# spustí ,echo $USER >> /tmp/users‘ zítra v 18:00 echo 'echo $USER >> /tmp/users' | at 1800 tomorrow # spustí ,paludis -s‘ v 17:00 (pokud tento čas ještě nenastal, tak dnes, jinak zítra) echo 'paludis -s' | at 17:00 # spustí zadané příkazy 20. července v 17:00 at 5pm jul 20 <<! updatedb sync !
Přepínač -f umožňuje zadat cestu k souboru obsahujícímu seznam příkazů, jejichž spuštění má at
naplánovat. Místo standardního vstupu se tedy čte z daného souboru.
# spustí příkazy ze souboru za týden v tento čas at -f soubor.at next week
Přepínač -m zajistí odeslání e-mailu danému uživateli po dokončení jeho příkazů. Pokud výstup příkazů nebyl přesměrován jinam, bude přiložen v e-mailu.
Nyní bych se měl zmínit o frontách a manipulaci s nimi. Všechna dosavadní ukázková volání příkazu at
přidávají příkazy do výchozí fronty (zvané „a“). Chceme-li vypsat seznam položek ve frontě, použijeme přepínač -l (a chceme-li vypsat jinou frontu než výchozí, tak ještě -q).
# přidá daný příkaz do fronty „x“ echo lsmod | at -m -q x now + 1 minute # vypíše položky všech front at -l # vypíše položky fronty zvané „x“ at -l -q x
Další věc je odebírání položek z fronty. Když se spleteme a naplánujeme nesmysl nebo si časem rozmyslíme spouštění dané věci, tak se bude hodit přepínač -r. Problém je, že verze at
, která je obvykle k nalezení na linuxových systémech, se zde trochu rozchází se standardem Single UNIX Specification a žádný přepínač -r nemá. Používáme proto příkaz atrm
, kterému zadáme ID položek, jež chceme z fronty smazat. ID položek zjistíme výše zmiňovaným příkazem at -l
(příp. nestandardně pomocí atq
).
# smaže z fronty položky s ID 10, 12 a 15 atrm 10 12 15
Mimochodem, Windows NT/2000/XP/7 mají také příkaz at
(podobný cron
u), ten je ovšem zastaralý – nahradil jej schtasks (resp. GUI nadstavba Task Scheduler).
Program sleep
nedělá nic (čeká) po uživatelem danou dobu. Název vychází z anglického slova, které v překladu znamená „spát“.
Nezasvěcenému uživateli se takový popis může zdát zvláštní a řekne si: „K čemu je příkaz, který nic nedělá?“ Představte si kupříkladu situaci, kdy je třeba spouštět nějaký příkaz každých 10 minut. Vyřešit to lze takto:
while true; do příkaz sleep 600 # čas v sekundách done
Chceme-li třeba za 15 sekund ukončit proces X serveru (to se někdy hodí při řešení problémů se vstupními zařízeními), můžeme také použít sleep
:
# za 15 sekund pošle signál SIGKILL všem běžícím instancím X serveru sleep 15 ; killall -9 X
Tolik k praktickému využití. Ještě by se slušelo zmínit, že verze programu sleep
, se kterou se setkáte, se může (a pravděpodobně bude) lišit od té standardní (dle SUS). Standard totiž říká, že program by měl pracovat s jedním celočíselným nezáporným argumentem, který udává, kolik sekund se má čekat. Jenže třeba sleep
z GNU coreutils podporuje i zadávání minut, hodin a dnů (připojením písmene „m“, „h“ nebo „d“ za číslo). Další odlišností této verze je možnost zadat desetinné číslo.
# spí 1 den, 5 hodin, 2 minuty, 10 sekund, 200 milisekund sleep 1d 5h 2m 10.2s # spí 6 sekund a 300 milisekund sleep 0.1m 0.3s
Příkaz wait
čeká, dokud se neukončí proces s daným PID běžící na pozadí daného shellu a poté se sám ukončí. Název programu je opět anglické slovo, která znamená „čekat“.
Jak jsem naznačil, wait
umí čekat pouze na procesy spuštěné na pozadí shellu, ze kterého wait
spouštíme. Předvedeme si spuštění programu na pozadí:
sleep 100 &
Představte si, že jsme místo programu sleep
spustili na pozadí něco smysluplného. Teď když spustíme wait
bez argumentů, tak bude čekat na ukončení všech procesů běžících na pozadí shellu. Když jako argumenty zadáme jednotlivé PID, bude se čekat pouze na jim odpovídající procesy. Pokud proces s daným PID neexistuje, wait
by se měl chovat jako kdyby proces existoval a okamžitě vracel návratovou hodnotu 127. Návratová hodnota programu je obecně ta, kterou vrátí proces, jehož PID je uvedeno jako poslední v seznamu argumentů. Je-li spuštěn bez argumentů, vrací 0.
V Bashi se PID posledního procesu spuštěného na pozadí shellu uchovává v proměnné $!
, takže lze provést následující:
lame --decode nejaka.mp3 nejaky.wav &> /dev/null & echo -n "Převádím MP3 na WAV… " wait $! && echo "OK" || echo 'chyba!'
V praxi se tento příkaz používá převážně neinteraktivně, tedy ve skriptech.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
while sleep x; do ...; done
while true
. Kdyby tam byl nekonečný for, tedy for((;;))
, tak by to bylo o něčem jiném.
for((;;))
občas nebyla sranda a musel jsem držet ctrl+c, zatímco u while true
to stačilo jen zmáčknout.
Teď sem si i uvědomil že jsem reagoval docela zcestně na tvůj původní komentář, takže si mě radši nevšímej lame --decode nejaka.mp3 nejaky.wav &> /dev/null & echo -n "Převádím MP3 na WAV… " wait $! && echo "OK" || echo 'chyba!'tohle je blbost $! vrati pid prikazu echo .... spravne melo byt
lame --decode nejaka.mp3 nejaky.wav &> /dev/null & PID=$! ... echo -n "Převádím MP3 na WAV… " wait $PID && echo "OK" || echo 'chyba!'
$!
obsahuje ID procesu, který byl naposledy spuštěn na pozadí (tedy s &
).
echo -n Převádím... lame ... >/dev/null && echo hotovo || echo chybaTedy alespoň pokud není třeba dělat mezitím něco dalšího.
wait $! && echo "OK" || echo 'chyba!' protože to je wait $! && (echo "OK" || echo 'chyba!') nikoliv "klasické" if then else wait $! && (echo "OK") || (echo 'chyba!')takže teoreticky pokud selže echo OK, objeví se "chyba!", ovšem nikoliv chyba v převodu mp3, ale chyba ve výpisu na obrazovku, což nemusí být to, co autor zamýšlel. V praxi echo OK většinou neselže, ale nepřipadá mi vhodné to takto psát...
Problém je, že verze at, která je obvykle k nalezení na linuxových systémech, se zde trochu rozchází se standardem Single UNIX Specification a žádný přepínač -r nemá.
Až tak obvyklé to nebude - v SuSE ho podporuje, v Red Hatu ho podporuje, ve Slackware IIRC taky (nebo aspoň podporovala, když jsem ho používal). Vlastně si nevzpomínám na žádnou konkrétní distribuci, kde by defaultní implementace at přepínač -r
nepodporovala.