Linux

Úterý, 26. červen 2007

Z bídy ven

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á.

V rubrice Linux, 22.01 | Trvalý odkaz | Komentáře (3)

Neděle, 6. srpen 2006

Kontrast pocitů

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

V rubrice Linux, 12.45 | Trvalý odkaz | Komentáře (2)

Neděle, 16. červenec 2006

Prohození stavu dvířek CD mechaniky

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

Prodleva jako řešení

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.

V rubrice Linux, 22.16 | Trvalý odkaz | Komentáře (4)

Úterý, 28. březen 2006

Svátek 1.1

Dokončil jsem BASH skript Svátek 1.1 (GZ, 4 KiB). Pro popis viz pÅ™edchozí verzi.

Změny

  • Datum může být nyní v jakémkoli formátu podporovaném programem date.
  • Jména mÄ›síců jsou ovlivnÄ›na locales (dříve byl použit vestavÄ›ný seznam mÄ›síců).

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í.

Příklad

$ echo "Dnes má svátek `svatek`, zítra `svatek "1 day"`"
Dnes má svátek Soňa, zítra Taťána

V rubrice Linux, 14.46 | Trvalý odkaz | Komentáře (3)

Sobota, 4. únor 2006

Mezera v názvu souboru

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:

Pragmatici

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.

Jazykospytci, lokalizátoři

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.

V rubrice Linux, 15.43 | Trvalý odkaz | Komentáře (0)

Úterý, 27. září 2005

Svátky pro BASH

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.

Popis

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).

Příklady

$ svatek 10/14
Agáta
$ svatek Štěpán
26. prosinec
$ svatek -v Klaudie
5. květen
Květnové povstání českého lidu

V rubrice Linux, 01.46 | Trvalý odkaz | Komentáře (0)

Rubriky

Navigace

Hledání