T. I. N. T. F. M.

(This IsN't The F*cking Manual :)))

UNIX

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!!!

Az elején volt arról szó, hogy nincs alapvetően 'dir' utasítás a UNIXban, hanem egy alias van legfeljebb. De mi az az aljas??? Na, az 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. Ezeket definiálhatjuk helyben is, commandline-ból, vagy egy futatható fájból is, mely a bejelentkezéskor magától végrehajtódhat, ahogy egy jólnevelt loginscripttől elvárható, ilyenkor sokkal maradandóbb a hatás, mivel ha csak 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áljak

Némely scriptnél az alias neve, azonosítója után egyenlőségjel kell, némelyiknél nem. Az sh típusú shelleknék péel kell, a csh-féléknél csak símán az, hogy mit csinálljon (mondjuk idézőjelek közt).

Sh-type shells:
alias irc="finger hamster@master.fok.hu"
C-type shells:
alias irc 'finger hamster@lord.banki.hu' 
Nézzük meg inkább 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, de mi tudjuk, hogy a valóságban egy ls -l hajtódik végre. A síma FTP kliens helyett is egy másik változat, az ncftp című 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 mire
kiadásával lehet... De ha már egyszer így bennevagyunk a különböző shellek taglalásában, akkor térjünk rá ezek változóinak, satöbbi tárgyalására. Kétféle változó lehet, az egyik a shell belső változója, péel 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ó, amire 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.
Sh:
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. De mit is á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 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 UNIXocska 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 ezt érdemes beírni a loginsciptbe, bár esetleg még értelmesebb átállítani a terminál- vagy adott esetben kommunikációs programot... Ismétcsak az elején 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...!") Például szeretnénk egy program hibaüzeneteit egy fájlban tudni, mert ez a perverziónk, vagy é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ük
Ezekutá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.bemenet 
Ja, és hogy ez a proggi is szépen loggolja nekünk a hibákat? Na:
(proggy < ez.itt.biza.a.bemenet) 2>újabb.hibafájl
vagy másik példával:
crypt < text > kódolt.text
ami 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 root
Ez 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: mondjuk 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ék
Na jó, ez egy elég vad példa, mert a talk proggi, 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 ugye az ötlet é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é...

Vissza Előre