(This IsN't The F*cking Manual)
UNIX
a la Hamster
Környezetvédelem
Sz'al akkor mindenki leült?
Hallotok engem?
Bocs, ha Te inkább a barátnôddel smúzolnál, akkor ne itt tegyed,
mert van aki másra figyelne... például a barátnôdre, és nem rám... Köszi!!!
Beszéljünk az alias-okról! Mi is az az alias? Na, az alias határozottan nem hasonlít egy vasúti viaduktra, sem egy szétrúgott telefonfülkére, hanem inkább egy előre definiált eljárásra. Definiálhatjuk őket helyben is, commandline-ból, vagy egy futatható fájból, mely a bejelentkezéskor magától végrehajtódik (ahogy egy jólnevelt loginscripttől elvárható), ilyenkor sokkal maradandóbb a hatás, mivel ha csak shell promptban adunk meg egy eljárást, az a kilépéskor elveszik.
De hogyan is néz ki egy ilyan alias? Általában
alias mire micsináljakAz sh típusú shelleknél az alias neve és funkciója közé egyenlőségjel kell, a csh-féléknél csak símán az, hogy mit csinálljon (mondjuk idézőjelek közt, ha szóköz is van benne).
alias irc="finger hamster@master.fok.hu"C-type shell:
alias irc 'finger hamster@lord.banki.hu'Nézzük egy példát:
master$ alias alias bye='mesg n;clear;exit' alias cp='cp -a' alias df='df -k' alias dir='ls -l' alias du='du -k' alias exit='mesg n;clear;exit' alias ftp='ncftp -u' alias logout='mesg n;clear;logout' alias ls='ls -F' alias more='less' alias mud='telnet unicorn.sch.bme.hu 6666' alias net='term < /dev/modem > /dev/modem 2> /dev/null&' alias reset='fixvt; reset' alias talk='ytalk'Ezesetben tehát használhatjuk a dir parancsot, amiről tudjuk, hogy a valóságban csak egy alias, és egy ls -l hajtódik végre. A síma ftp kliens helyett is egy másik változat, az ncftp indul. Aztán vannak itt más érdekes dolgok is, de azokat mindenki fejtse vissza magának. Ja, ilyen eljárást törölni az
unalias mirekiadásával lehet... De ha már egyszer így benne vagyunk a különböző shellek taglalásában, akkor térjünk rá ezek változóinak kitárgyalására. Kétféle változó létezik itt, az egyik a shell belső változója, például a PATH (ami kábé olyasmi, mint a PATH a DOSban, tehát egy program helyének keresését állíth...várjunk csak, ez a mondat tkp. milyen nyelven volt?!?...szóval olyasmi...), a másik a környezeti változó, amelyre mindenféle más programoknak lehet szüksége. Persze ha már többfajta shell van, miért is ne lenne többfajta értékadási mód? Hadd örüljünk... Míg a síma sh-shellekben egyszerűen
változó="érték"addig az csh-knál
set változó="érték"a módi... A környezeti vátozók beállítása is más-másképp zajlik.
export változó="érték"Csh:
setenv változó="érték"Persze időnként jól jön, ha valamit elszúrtunk, hogy kitörölhessük a változót. Sh bácsinál síma
unset változóelég, cshnál ellenben
unset változóés
unsetenv változóa nyerő. És persze ha a meglevő vátozók értékere vagyunk kíváncsiak, akkor (akárcsak az aliasnál) síma set, export ill. set, setenv (tehát a sasszeműek ebből kiszúrhatták, hogy nem adtunk meg változónevet) kiadásakor szépen kilistázza a dolgokat.
Még mit állítgassunk? Például ha idegesít, hogy a terminálunk hülyül, akkor szabad a vásár, nézzük meg, mi nem úgy működik, mint kéne, és állítsuk át (aztán kérjünk meg valakit, hogy hozza rendbe). A terminálbeállításokat az
stty(ne próbáld fonetikusan kimondani;-) című mesével nézhetjük meg, erre sok okos dolgot kiír, melyek jelentését egészséges nem bolygatni. Kiírja ellenben a vezérlőkarakterek beállításait, például hogy ^Z-re breakeljen, ^C-re program interrupt, DEL-re töröljön vissza egy karaktert, stb. Namármost ha a mi terminálunk a DEL gomb nyomására nem azt a DEL-t küldi, amit a UNIX-ocska elvár, akkor nem történik semmi (jobb esetben), vagy hülyeségeket ír ki. Ekkor megnézzük, hogy mit ír ki, és a DEL helyett beírjuk azt:
set stty erase amit.kiír.törlés.helyettÉs már (elvileg) mennie kell. Ha ezt gyakran akarjuk használni (pl. mindig), akkor érdemes beírni a loginsciptbe, esetleg még értelmesebb átállítani a terminál- vagy adott esetben kommunikációs programot... Néhány fejezettel ezelőtt beszéltem valamit átirányításokról. Ilyenkor más ki- vagy bemenetet adunk meg egy utasításnak, vagy programnak (ami itt elmeleti fogalom csak), mint amit alapvetően elvár... Élből három lényeges "csatornát" kell figyelnie a rendszernek egy utasításkor: az egyik a szabványos bemenet (stdin), a másik a hasonlóan szabványos kimenet (stdout) és van még a sírócsatorna, a stderr, amibe a panaszait nyomatja. Persze ezeknek van száma is (nehogymá' gépelni kelljen), 0, 1, 2. ("dehát ebben semmi logika nincsen...!" (C) Űrgolyhók) Például szeretnénk egy program hibaüzeneteit egy fájlban tudni, mert ez a perverziónk, vagy mert éppen nem figyelünk a progi futására állandóan:
program.ami.fut 2>ide.jönnek.a.hibák.a.franc.beléjükEzekután (az első adódó hiba felléptekor) létrejön egy fájl (aminek most olyan szép hosszú nevet sikerült adnom, hogy inkább nem is írom le mégegyszer (te hülye, hisz' most háromszor annyit írtál...)), és a hibák szépen belefolynak ebbe. Ha azt szeretnénk, hogy egy program a bemenetét egy már elkészített fájlból szedje:
proggy < ez.itt.biza.a.bemenetJa, és hogy ez a proggi is szépen loggolja nekünk a hibákat? Na:
(proggy < ez.itt.biza.a.bemenet) 2>újabb.hibafájlvagy másik példával:
crypt < text > kódolt.textami bemenetként fogja a text c. file-t, kódolja, és az eredményt megörökíti a kódolt.text-ben. Szép sorjában feldolgozza a kuttykuruttyokat... Az is átirányítás, amikor egy '|' (pipe) jelet rakunk egy utasítás, programnév elé indításkor. Ebből ő arra fog következtetni, hogy a végrehajtandó valami bemenete nem a megszokott forrás lesz, hanem az, ami a pipe-jel előtt van:
finger |mail rootEz kiad egy fingert, azaz megnezi, kik vannak a gépen, a finger parancs kimenetét pedig belenyomja egy a root-nak címzett levélbe. Egy értelmesebb (?) felhasználás: tegyük fel, hogy van egy olyan progid, amelynek futását loggolni akarod, az egész folyamatot meg akarod őrizni egy file-ban. Erre szolgál a tee nevezetű programocska. Ez békénhagyja az eredeti futást, tehát az rendesen ír a std outputra, stb, de közben bónuszként a megadott file-ba is elmenti a történéseket, például ha valami rejtélyes célból meg akarjuk örökíteni azt, hogy mi hogyan zajlik:
talk billg@command.com |tee gates_elleni_bizonyítékNa jó, ez egy elég vad példa, mert a talk program, amivel ugyebár más (akár más gépen található) userekkel folytathatunk társalgást, mindenféle szekvenciákat használ arra, hogy pozicionálja a szöveget, amit mi írunk, és amit a másik fél ír (sőt, ytalknál akár harmadik, n-edik emberét is:), de azért az ötlet ugye érthető? Persze ennél kicsikével többet bír el kedvenc oprendszerünk, mert ez eddig még nem is olyan nagy újdonság a DOS-hoz képest (az ugye más kérdés, hogy melyik volt előbb:)...
Azt már láthattuk, hogy több parancs egy sorból való végrehajtához a parancsok közé pontosvesszőt kell tenni. Ha több parancs köré zárójelet rakunk, akkor egy ezutáni átirányításkor nem a legutolsó ilyen parancs eredménye adódik át, hanem az egész zárójelbe zárt hóbelebancé...