Hlavní navigace

Překlepy - je ten shell opravdu nejlepší?

Monika & Bogdan Pilchovi 21. 8. 2001

Tento článek je inspirován několika příběhy, které se odehrály za klávesnicí linuxového (případně i jiného) compu. Některé situace se mohou zdát legrační, jiné zase téměř tragické, ale jedno mají společné: rychlého, zbrklého a nedočkavého programátora :-)

Ten první by mohl mít nadpis: „Kterak si smazat $HOME a nevšimnout si toho“. To byl jeden student, který trávil dlouhé dny i noci v UNIXovém labu. Jednou tak sedím v labu a najednou slyším řev přicházejíci od počítače 195.113.16.93­. Přiběhnu a na terminálu zmíněného kolegy vidím následující řádky:

  [login@comp:~/adresar]$ rm -rf . netscape
  [login@comp:~/adresar]$

Identifikaci uživatele jsem zastřel záměrně, abych se vyhnul případným pokusům o vraždu. Jistě si každý představíte, co by se stalo, kdyby v těch řádcích chybělo `/adresar' :-). I tak, ten kolega nebyl nadšen ztrátou určitých souborů. Resume z toho vyplývající: „Nechápu, koho napadlo začínat názvy konfiguračních/skry­tých souborů tečkou!“ :)

Druhý příběh se malinko liší, i když ve své podstatě jsou všechny stejné – lidská chyba. Jeden člověk rád používal program ‚mc‘ (i takoví jsou bohužel mezi námi :-). Navíc ho velmi rád spouštěl z libovolného adresáře, ale zároveň chtěl, aby výchozí adresáře byly jiné než aktuální (z nějakého podivného důvodu). Tedy chtěl napsat následující příkaz

  $ mc adresar1 adresar2

I stal se překlep a stal se <Enter>, chyba první.

  $ mv adresar1 adresar2

Jelikož se nedělo to, co očekával, nenapadlo ho nic lepšího, než zmáčknout kurzor <Up> a <Enter> – chyba druhá. Resume z toho vyplývající: „Nechápu, jak mohlo někoho napadnout nazvat filemanager ‚mc‘, když klávesa ‚c‘ je tak blízko klávesy ‚v‘!“ :)

Třetí příběh není tolik destruktivní (i když není pravdou, že vůbec), ale spíše konstruktivno-destruktivně-legrační. Co tím myslím, hned vysvětlím. Jistý uživatel U pracoval na jistém projektu P v adresáři A. V tomto adresáři měl soubory S={souborNN.c, souborNN.o, …}. Jeho záměrem bylo slinkovat objektové soubory a následně je vypsat. Tedy zamýšlel následující sekvenci příkazů:

  $ ld -o output *.o
  $ ls -o output *.o

Možná už tušíte, co se stalo, a pravděpodobně tušíte správně. Na obrazovce se objevila malinko jiná sekvence příkazů:

  $ ls -o output *.o
  $ ld -o output *.o

Výsledek byl v podstatě stejný (skoro), takže uživatel U by si toho nevšiml, kdyby tam nebyl uživatel U', který vše pečlivě pozoroval a ihned upozorňoval na vše, co se mu nezdálo. Ponaučení z toho plynoucí: „Nemá cenu zkoušet uživatele U' z shellu, stejně vám na to neskočí!“ :)
POZOR: V tomto příkladu se v podstatě nestane nic špatného, až na to, že uživatel asi neuvidí informace, které chtěl, ale tento (i předchozí) příklad berte jako upozornění na to, že by se mohlo věnovat trochu více pozornosti pojmenovávání programů. Každý linuxák si určitě dokáže představit, jak by to vypadalo, kdyby se stále pokračovalo jako doposud a časem bychom měli mnoho dvoupísmenných příkazů, z nichž některé by dělaly velmi nebezpečné oprace :-)

Čtvrtý příběh je trochu drsnější. Drsnější proto, že uživatelem pracujícím byl root! A povedla se mu celkem hezká věc. Vytvářel startovací skripty pro určitou aplikaci v adresáři /opt/aplikace/etc a chtěl v adresáři /etc/rc.d smazat staré linky a následně tam zkopírovat nové. Napsal tedy následující příkazy:

  $ find /etc/rc.d -name \*$APPLICATION_VAR -exec rm {} \;
  $ cd /etc/rc.d
  $ ln -s /opt/aplikace/etc/*

ALE, jelikož zapomněl definovat proměnnou APPLICATION_VAR, byly zbylé dva příkazy celkem zbytečné. Shell totiž expandoval proměnnou APPLICATION_VAR na "" (nic), * expandoval na znak ‚*‘, parametry tedy byly naprosto v pořádku a program find je přijal bez problémů. Ovšem root nebyl až tak šťastný, že vše zafungovalo a že programy nehlásí žádné chyby. Myslím, že by byl mnohem šťastnější, kdyby se jeho Linux aspoň těch pár minut choval jako Windows (‚Jste si jisti…?‘, ‚Recycle bin‘, ‚Jste si jisti, že .. Recycle bin?‘, …). Ponaučení z toho plynoucí: „Když máte Linux a rádi používáte shell, neříkejte hop, ale koukejte raději na klávesnici, co píšete!“ :)

Na závěr vám prozradím, že až na jednu historku jsou všechny pravdivé a v podstatě přesně tak, jak jsou popsané, se také odehrály. A způsobily jejich autorům nemalé problémy. Také vás všechny prosím, abyste mi nepsali rozhořčené maily o tom, že tomu nerozumím a že to tak přece není (že Recycle bin není problém implementovat pro Linux, že je otřesné nemít alias rm=‚rm -i‘ alespoň pro roota apod.). Některé příběhy jsem zjednodušil záměrně, aby nebyly o technických detailech (to bych musel vypsat .bashrc a .bash_profile uživatelů a ‚set‘ a …), ale o tom, o čem být měly. Tedy prosím vás o jistou úroveň představivosti. Děkuji :)

Našli jste v článku chybu?

1. 3. 2006 22:30

...no to já si zase chtěl smazat /media a všechny připojující se věci dát sdandardně do /mnt. Tak jsem mkdirnul /mnt/hdablabla /mnt/blabla2...no a potom rm -R /media...Pochopitelně všechno jsem měl přimountovaný...J

24. 8. 2004 18:30

Jozef Drahovsky (neregistrovaný)

Podarila sa mi dalsia specialita, tento raz vdaka nie vzdy funkcenmu talcitku minus na klavesnici.
Chcel com napisat: kill -1 222
Ale napisal som: kill 1 222 (vypadlo minus)
Dosledok bol velmi neprijemny. Killol som proces cislo jedna, cize system a vzdialeny pocitac bol nedostupny.




Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Podnikatel.cz: Vládu obejde, kvůli EET rovnou do sněmovny

Vládu obejde, kvůli EET rovnou do sněmovny

DigiZone.cz: Česká televize mění schéma ČT :D

Česká televize mění schéma ČT :D

Vitalia.cz: Říká amoleta - a myslí palačinka

Říká amoleta - a myslí palačinka

Vitalia.cz: „Připluly“ z Německa a možná obsahují jed

„Připluly“ z Německa a možná obsahují jed

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

DigiZone.cz: ČT má dalšího zástupce v EBU

ČT má dalšího zástupce v EBU

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Lupa.cz: UX přestává pro firmy být magie

UX přestává pro firmy být magie

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Lupa.cz: Není sleva jako sleva. Jak obchodům nenaletět?

Není sleva jako sleva. Jak obchodům nenaletět?

Měšec.cz: Finančním poradcům hrozí vracení provizí

Finančním poradcům hrozí vracení provizí

Podnikatel.cz: Prodává přes internet. Kdy platí zdravotko?

Prodává přes internet. Kdy platí zdravotko?

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Lupa.cz: Avast po spojení s AVG propustí 700 lidí

Avast po spojení s AVG propustí 700 lidí

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte