To byl root kořen
a kernel panic,
filesystem zbořen,
zbytek dat na nic.
I seslal bůh nesÄetnÄ› lásky,
přivezl stabilnà stroje,
RAID pole, záložnà pásky,
náhradnà naftové zdroje.
Nynà máme Äerstvou manu,
ApaÄ dvojka pÄ›knÄ› lÃtá,
nová verze Debianu
Äistým promptem správce vÃtá.
Jsou věci, které ve vás vzbudà přijemný pocit sotva je zahlédnete:
You have new mail in /var/spool/mail/honza
Žel platà to i naopak
make[2]: Leaving directory `/root/guituner_0.02/macros'
make[1]: *** [install-am] Error 2
make[1]: Leaving directory `/root/guituner_0.02/macros'
make: *** [install-recursive] Error 1
ZkouÅ¡el jsem nespoÄet způsobů jak softwarovÄ› prohodit stav dvÃÅ™ek CD mechaniky, ale pokaždé se naÅ¡la nÄ›jaká moucha a tÅ™ebaže to pár hodin Å¡lo, nakonec se hodnota stavu dvÃÅ™ek otoÄila vůÄi skuteÄnému stavu a tÃm pádem už s nimi neÅ¡lo hýbat. A dneska koneÄnÄ› nápad.
#!/bin/sh
# Skript na prohozenà stavu dvÃÅ™ek mechaniky
device=/dev/cdrom
delay=0.7 # Do kolika sec se dvÃÅ™ka urÄitÄ› nevysunou
statfile=/tmp/cdrom_stat # Soubor nesoucà stav dvÃÅ™ek
echo 'c' >$statfile # DvÃÅ™ka nejprve považujeme za zavÅ™ená
# Vysunout a ihned zapsat stav (nutné provést na pozadÃ)
eject $device && echo 'o' >$statfile &
# PoÄkat chvilku, než by skonÄil eject pÅ™i *otevÅ™ených* dvÃÅ™kách
sleep $delay
# Pokud je už teÄ mechanika otevÅ™ená,
# byla pravdÄ›podobnÄ› otevÅ™ená i pÅ™edtÃm --> zavÅ™Ãt ji.
[ "`cat $statfile`" = "o" ] && eject $device -t
Pokud spustÃme program eject, skonÄà až ve chvÃli, kdy jsou dvÃÅ™ka skuteÄnÄ› otevÅ™ená. Pokud tedy už otevÅ™ená jsou, program skonÄà téměř okamžitÄ›, v opaÄném pÅ™ÃpadÄ› mu to vÅ¡ak vÄ›tÅ¡inou trvá pÅ™es sekundu, než dvÃÅ™ka celá vyjedou. Jako prodlevu delay je proto tÅ™eba zvolit Äas, do nÄ›jž se zavÅ™ená dvÃÅ™ka urÄitÄ› nestihnou otevÅ™Ãt, ale pokud otevÅ™ená jsou, tak do této doby program eject spolehlivÄ› skonÄÃ. MnÄ› fungovaly hodnoty v intervalu <0.1; 1.1>, jiné nefungovaly vždycky. Levá mez je závislá na vytÞenà systému, které kolÃsá podstatnÄ› vÃc než rychlost otevÅ™enà dvÃÅ™ek, na nÞ závisà mez vpravo. Je proto spolehlivÄ›jšà volit trochu vyššà prodlevu než je průmÄ›r nejkratšà a nejdelšà funkÄnà prodlevy. Pokud má vaÅ¡e mechanika dvÃÅ™ka rychlejÅ¡Ã, prodlevu bude možná tÅ™eba malinko snÞit. Znà to vÅ¡echno trochu složitÄ›, ale prostÄ› tam mrsknÄ›te nÄ›jakou hodnotu a buÄ zabere nebo ji zmÄ›nÃte.
DokonÄil jsem BASH skript Svátek 1.1 (GZ, 4 KiB). Pro popis viz pÅ™edchozà verzi.
date.PÅ™epÃnaÄe se nezmÄ›nily, a program date podporuje formát MM/DD. Skript by proto mÄ›l být zpÄ›tnÄ› kompatibilnÃ.
$ echo "Dnes má svátek `svatek`, zÃtra `svatek "1 day"`"
Dnes má svátek Soňa, zÃtra Taťána
Nenà tomu tak dávno, co jsem se pokouÅ¡el napsat si svůj vlastnà jednoduchý konzolový pÅ™ehrávaÄ MP3 souborů. VýbÄ›r skladby mÄ›l obstarávat pÅ™Ãkaz select. Jaké ale bylo moje pÅ™ekvapenÃ, když jsem na výstupu obdržel výbÄ›r z nÄ›kolika desÃtek skladeb, aÄ v kýženém adresáři jich nebylo ani deset. PochopitelnÄ› – každou mezeru v názvu souboru chápal select jako oddÄ›lovaÄ. K Å™eÅ¡enà nepomohla ani konverze názvu pÅ™es sed, ani nejÅ¡ÃlenÄ›jšà kombinace uvozovek. Jednou z možnostà je doÄasnÄ› zmÄ›nit $IFS, ale to je nebezpeÄné. Alternativnnà řeÅ¡enà mezerového problému skýtá následujÃcà konstrukce:
find -name *.mp3 | while read; do
...
done
Podle flamewar, na nÞ jsem pÅ™i hledánà řeÅ¡enà narazil, bych uživatele Linuxu rozdÄ›lil do dvou skupin, podle toho, jak pojmenovávajà soubory:
Tito uživatelé se pÅ™izpůsobujà systému a zažitým UN*Xovým pravidlům, soubory pojmenovávajà tak, aby jejich skripty pracovaly bez komplikacÃ, i za cenu drobných úprav názvu souboru. NepÅ™ÃÄà se jim zamÄ›nit mezery za podtržÃtka Äi nahrazovat diakritické znaky jejich ASCII alternativami. Jejich skripty jim za odmÄ›nu nekomplikujà život neposluÅ¡nostÃ, nevýhodou ovÅ¡em je neúplná informaÄnà hodnota názvů souborů. NavÃc budou-li ji chtÃt navrátit, musejà to udÄ›lat ruÄnÄ›, což je napÅ™. u nÄ›kolika stovek MP3 skladeb bájeÄná zábava na dlouhé zimnà veÄery.
Snažà se naopak systém pÅ™izpůsobit sobÄ›. Jdou pÅ™es mrtvoly, jen aby se jejich soubor mohl v názvu hemžit mezerami, háÄky, Äárkami, a vÅ¡elijakými dalÅ¡Ãmi podivnostmi. ÄŒasto se pÅ™i tvorbÄ› skriptů potýkajà s problémy, ovÅ¡em Å™ešà je s obrovskou vytrvalostà a vÅ¡emi dostupnými prostÅ™edky. PÅ™edstava, že by se museli podÅ™Ãdit a upravit název svého souboru je pro nÄ› nesnesitelná a znamenala by kapitulaci.
PoÄasà se zjevnÄ› pořád nemůže rozhodnout, jestli už nám to léto utnout nebo ne. Nedávno se znova prudce ochladilo, a já jsem z toho opÄ›t marod. Když mÄ› ale nemoc pÅ™ipoutala ke klávesnici a šálku horkého Äaje, vykutil jsem pÅ™i té pÅ™Ãležitosti utilitu pro shell, která umà vyhledávat svátky. NÄ›co podobného už totiž dlouho marnÄ› shánÃm.
BASHový skript pro vyhledávánà svátku podle data a naopak. Rozbalte soubor svatek.gz (GZ, 5 KiB) a nastavte pÅ™Ãstupová práva pro spouÅ¡tÄ›nÃ:
$ gunzip svatek.gz
$ chmod u+x svatek
V této fázi už je skript použitelný. Jako argument lze zadat buÄ datum ve formátu MM/DD, nebo hledané jméno. Pokud neuvedete ani jedno z toho, použije se aktuálnà datum. Zapnete-li ukecaný pÅ™epÃnaÄ -v, bude u významných dnů na výstup pÅ™ipojeno upozornÄ›nÃ. PÅ™i vyhledávánà podle jména lze uplatnit pÅ™epÃnaÄ -d, který způsobÃ, že datum bude vypisováno ve formátu MM/DD (mÃsto implicitnÃho D. mÄ›sÃc).
$ svatek 10/14
Agáta
$ svatek Štěpán
26. prosinec
$ svatek -v Klaudie
5. květen
KvÄ›tnové povstánà Äeského lidu