„It was as if firewalls were not a phenomenon relegated to the world of computers. He had a firewall himself, and he didn't always know how to get past it.“ Henning Mankell (Firewall)
maskot zápisníku

Chybějící Kousek Zápisník Antonína Daňka

Open Source, programování, internet,

kurzor

Upozornění na nový obsah pomocí RSS.

? Co je to RSS?

Upozornění na nový obsah pomocí e-mailu.


power-unix.jpg

Jazyk Unixů - efektivní používání Linuxu - 1. díl

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

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

datum 27.01 /2008 - 00:53 tag jazyk Unixů, programování, Linux komentář 2 komentáře (přečteno: 3396x)

Související články:

Feedburner

GEOrss, už ho máš?

WebExpo 2009

Nenechte si ujít

Nejčtenější články za poslední půlrok.

Nejkomentovanější články za poslední půlrok.

Nejčastěji komentující čtenáři za poslední půlrok.

Nejkvalitnější komentář

Antonín Daněk

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


Zaujal vás tento článek? Nezapomeňte, že je ve vaší moci ukázat stovkám dalších lidí, že tento článek se vám libí. Stačí kliknout na následující tlačítko. pridej.cz

Chcete být upozorňován(a) na nové texty? Pak si přidejte do své RSS čtečky zdroj pro články, bleskovy nebo komentáře a buďte tak informování o všem novém.

Neváhejte napsat k článku komentář (Co je to komentář ?), pokud máte k danému tématu co říci.

check


check



icon_smile.gif icon_sad.gif icon_biggrin.gif icon_confused.gif icon_cool.gif icon_twisted.gif icon_wink.gif icon_cry.gif icon_eek.gif icon_evil.gif icon_exclaim.gif icon_frown.gif icon_cheesygrin.gif icon_idea.gif icon_lol.gif icon_mad.gif icon_mrgreen.gif icon_neutral.gif icon_question.gif icon_razz.gif icon_redface.gif icon_rolleyes.gif icon_surprised.gif icon_arrow.gif icon_arrowd.gif icon_arrowl.gif icon_arrowu.gif


Prosím odpovězte na následující otázku (do formuláře zadejte pouze písmeno).

Jakou z následujících věcí by si vybral robot?
a) štěně b) kytičku od svého milého c) pečlivě naformátovaný soubor

Nápověda: Zkuste možnost c (ale uznám vám i b).


check


1

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

odpovědět

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

Vojtěch Havel

01.03 /2008 - 19:02


brak | průměr | kvalitní názor


2

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

odpovědět

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

Antonín Daněk

01.03 /2008 - 22:58

danek<zavináč>antonindanektečkacz

brak | průměr | kvalitní názor


Navrženo pro přenos v binární soustavě | Kdo stojí za tímto blogem? | © Antonín Daněk | Autorské dílo

TOPlist