Jestliže chcete umět používat Linux tak, aby vaše práce byla efektivní, musíte se chtě nechtě vzdát myši.

Někdy, když se člověk učí s novým operačním systémem, navykne k různým špatným zvykům, a pak už se jich těžko zbavuje. Z těchto špatných návyků pak mnohdy pramení i negativní názory na samotný systém.

Já jsem se začal učit jazyk Unixu, protože bych rád zefektivnil svojí práci s PC. V současné době buď používám Windows XP nebo Ubuntu, ale v podstatě tím samým způsobem, jako bych používal Windows. Obávám se, že je to tak s většinou amatérských uživatelů Linuxu, kteří přišli s příchodem Ubuntu.

Vytvoření stromu adresářů jediným příkazem.

Určitě to znáte: mkdir a; cd a; mkdir b; cd b; mkdir c; cd c; To je dost zdlouhavé, snad by bylo i rychlejší adresáře naklikat v GUI, kouzlo příkazového řádku je ta tam.

Jak to tedy udělat inteligentně? Stačí použít volbu -p.

Takto: mkdir -p a/b/c

Obzvláště užitečné je to potom u složitějších struktur s využitím složených závorek:

mkdir -p novy-web/{grafika/nahledy,vypocty/{php,JScript}} - Vytvoří adresář novy-web s podadresářema grafika a vypocty, grafika má podadresář nahledy, vypocty maji podadresare php a JScript.

Nepřesouvejte archivy do místa rozbalení.

Další známý špatný zvyk. Stáhnete si archiv, pak si ho přesunete tam, kde chcete mít soubory a rozbalíte.

Přitom stačí použít volbu -C (velké C).

tar xvf touny.tar.gz -C cilovy-adresar/ - Rozbalí archiv touny.tar.gz do adresáře zadaného za volbu -C.

Podmíněné příkazy.

Unix využívá logických pravd, které platí u operátorů jako jsou and (a,*,&&) či or (nebo,+,||).

  • Pro OR platí, že výsledek je pravdivý, je-li alespoň jeden ze sčítaných argumentů pravdivý.
  • Pro AND platí, že výsledek je pravdivý, jsou-li všechny ze sčítaných argumentů pravdivé.

Znamená to tedy, že pokud je při násobení první argument nulový, nemusím už zjišťovat hodnotu argumentu druhého, protože vím že výsledek bude nulový. Tím se řídí i Unix a dá se toho využít k vytvoření podmínky.

Například napíšeme-li: cd a/b/c && tar xvf /home/touny/touny.tar.gz

Pokud neexistuje adresář a/b/c, příkaz cd vrátí nepravdu. Je tedy jasné, že výsledek celé operace bude nepravdivý a archiv se nerozbaluje. (Kdyby se Unix neřídil těmito logickými pravdami, byl by archiv rozbalen do současného adresáře, ne do a/b/c.)

Pokud existuje adresář a/b/c, pak se do něj přesuneme a příkaz cd vrátí pravdu. Pro zjištění výsledku celé operace je tedy nutné provést další příkaz a do adresáře a/b/c je rozbalen archiv touny.tar.gz.

Sčítání se zase dá využít jako obrácená podmínka (když první argument je 0, je třeba vykonat další).

Například: cd a/b/c || mkdir -p a/b/c

Pokud tento adresář neexistuje, vrací příkaz cd nepravdu. Výsledek celé operace je tedy nejasný a musí se provést i druhý příkaz, vytvoří se adresář a/b/c. Pokud existuje, cd vrátí pravdu, je jasné že výsledek bude pravdivý a adresář už se nevytváří.

Celé se to dá samozřejmě krásně kombinovat a doufám že teď už všichni vidí, že příkazová řádka Unixů není jen ls -la. icon_smile.gif

Finální příklad:

cd /home/touny/a/b/c || mkdir -p /home/touny/a/b/c && tar xvf /home/touny/touny.tar.gz -C /home/touny/a/b/c/

Dokážete určit, jak je tento příkaz vyhodnocován? Jestli ano, pak vaše otevřená mysl pochopila logické operátory, gratuluji.

Pozor, nefunguje zde nic takového, jako je znaménková přednost. Příkaz se zkrátka vyhodnocuje od začátku do konce. Můžete si to vyzkoušet na tomto příkladě:

cd /home/touny/a/b/c || FALSE && tar xvf /home/touny/touny.tar.gz -C /home/touny/a/b/c/

Pokud by fungovala znaménková přednost, vyhodnocovaly by se nejdříve násobené arugemnty (to známe z matematiky). Adresář by tedy nebyl rozbalen, protože první je nulový (FALSE), a tak je výsledek jasný. Pokud ale tento příklad spustíte, zjistíte že se adresář rozbalí.

Příkaz je totiž vyhodnocován od začátku. Nejprve vrátí příkaz cd jedničku, která je sečtena s nulou (FALSE). Výsledek je jednička a tudíž se musí provést i třetí příkaz (rozbalení), abychom znali výsledek logického násobení.

Příště se pokusím více ukázat vaší moc, při znalosti jazyku Unixů. icon_twisted.gif

2 komentáře

Neváhejte napsat k článku komentář

Nevyplňujte:

  1. 1
    Vojtěch Havel

    Logické operátory opravdu usnadňují život - když si na ně zvyknete, není cesty zpět :-)

    Jednou jsem při práci na PC potřeboval nějak oznámit, až příjde jeden člověk na ICQ. Ani jsem nehledal, jak se nastavuje Pidgin tak, aby mě upozornil při příchodu tohoto konkrétního člověka, prostě jsem si napsal příkaz, který poslouchal na portu, na kterém poslouchal i Pidgin, výstup jsem přesměrovával rourou do grepu, který kontroloval přišlé pakety na UIN toho člověka - a když to číslo v paketu našel, spustil takový mnou napsaný malý notifikátor:

    # dumpcap -i eth0 -w - | grep "123456789" && /home/opensuse/C++/Qt/notify "Konečně přišel:-)"

    ...hrůza, když si uvědomím, jak bych to musel řešit v systému s né tak dobrým shellem :-D

    • Na komentář odpověděl(a) Antonín Daněk v komentáři #2
  2. 2
    Antonín Daněk

    danek<zavináč>antonindanektečkacz

    Tohle co jsi tu popsal je přesně to, k čemu bych se chtěl tímhle seriálem nakonec dostat. Když člověk umí takhle elegantně řešit problémy, tak si teprve může říkat uživatel Linuxu.

    Já sám jsem v začátcích a teď nějak nemám čas v tomhle seriálu pokračovat, ale všechno bude ... i dovolená v Bulharsku. icon_biggrin.gif

    • Tento komentář je reakcí na příspěvek #1, který napsal(a) Vojtěch Havel