Páginas

2008/03/24

Karaktere kateen eragileak-I.

Eragile horiek testu kateak kudeatzen laguntzen gaituzte , prozesu-errutinak kodifikatzeko beharra gabe; adibidez horien bitartez aldagai bat existitzen dela ziurta dezakegu, edo katearen zati bat hartu edo ezabatu patroi bat jarraituz, etabar
ADIBIDEAK
${aldag:-balio1} : aldag, baliogabea ez bada (existitzen bada) bere balioa itzultzen du, bestela balio1 ematen digu
${aldag:+balio1} : aldag, baliogabea ez bada (existitzen bada) balioa1 itzultzen du, bestela karaktere gabeko katea ematen digu, haua da: ""
${aldag:=balio1} : aldag, baliogabea ez bada (existitzen bada) bere balioa itzultzen du, bestela definitzen du aldag aldagaia eta balio1 esleizten zaio , balio1 itzultzeaz gain
${aldag:?mezua} : aldag existitzen bada eta ez da baliogabekoa bere balioa ematen digu, bestela aldag:mezua idazten du kontsolan eta scripta gelditzen du. Mezua ez badugu zehazten hurrengo hau izango da aterazten duena: parameter null or not set.
${aldag:desplaz:luzera} aldag aldagairen desplaz.karakterean hasten den eta luzera karaktere kopurua duen azpikatea ematen digu
Aplikazioak:
${egunak:--1} , horren emaitza -1 bada , esan nahi du egunak aldagaia ez dago definututa edota ez du baliorik esleitutua.
${egunak:-+1} , emaitza 1 bada, egunak aldagaiak badu balioren bat esleitutrik
${egunak:?'Kontuz: egunak aldagaiak balioa esleitu behar zaio!!'}, horren emaitza
egunak: Kontuz: egunak aldagaiak balioa esleitu behar zaio!! , bada hor geratzen da srcripta , lerro gehiago prozesatu gabe.
${helbidea:5:3} : demagun
helbidearen edukia Las mercedes,47-Getxo- string dela ; komandoaren emaitza izango litzateke mer
Pentsa ezazu ikasleen notekin fitxategia daukagula : notak.txt ; eta fitxategi horren egitura honako hau dela:
9,34 Koldo Rodriguez
4,56 Miren Pagazaurtundua
7,45 Miren Solaguren
.... ...................................
hau da ikasle bat lerro batean. n nota altuenak jakin nahi dugu( n ez bada zehazten , lehenengo 5 nota altuenak aterako dira).Horretarako hurrengo script hau presta dezakegu.

#!/bin/bash
# notaOnenak.sh scriptaren izena
# Bi parametro pasatu behar ditugu: noten fitxategia, eta n
# Hurrengo komandoarekin lor dezakegu eskatzen dena
sort -nr ${1:?' Noten fitxategia adierazi behar da!'} | head -${2:-5}
# hori da, baino ez
Egikaritzeko, notaOnenak.sh notak.txt 2 , lehenengo bi nota onenak jakiteko

2008/03/22

Aldagaiak Hedatu

Jakina da $aldagaia espresioak aldagaiaren edukia esan nahi duela , era batean esanda, $aldagaia idaztean aldagaiaren hedapena adierazi nahi dugu.
Esatebaterako, adina aldagairen balioa 12 bada $adina delakoak hedatzen du 12 baliora. Idazteko era hori beste baten laburpena da, batzutan ondo idazten ez badugu arazoak dakartzakigu.
Beraz, esan beharra dago $adina era ${adina} erari dagokiola. Noiz erabiltzen dira jakiteko , hona hemen adibide batzuk:
$ izena=Jon
$ deitura= Atxa
$ echo "${izena}_${deitura}
Azkeneko komandoaren emaitza honako hau izango zen: Jon_Atxa
Zer gertatuko litzateke hurrengo honekin?
$ echo "$izena_$deitura"
Emaitza Atxa izango litzateke, arrazoia hau da: Bash-ek $izena_ aldagaia bilatzen saiatuko da, existitzen ez denez ez du hedatuko eta $deitura aldagaiaren hedatzea egingo du.
Labur bliduz: nahasketak daudenean ${...} era erabili.
Beste egoera nahasgarria da posizio parametroak erabiltzen direnean, hau da $12 espresioa Bash-ek hurrengo hau egingo du: $1 aldagaia hedatu du eta jarraian 2 zenbakia idatziko du; ostera , ${12} 12.parametroaren balioara hedatuko du.

Bash Funtzioak

Funtzio bat komando multzo bat da, izen batez antzematen duena.Horrela esanda, sript baten antzekoa izango litzateke esan liteke, baina zenbait alde badaude; adibidez, script batean funtzioak exekuta daitezke script-ari dagokion tarte memorian aldagiak bailitzan.
Funtzio bat definitzeko bi era daude, biak baliokikeak direla.
function funtzio_izena{
...
bash komandoak
...
}

edo -----------------------------------------------------------

funtzio_izena(){
...
bash komandoak
...
}
Funtzioak definitzean inguru-aldagaiak bezala memorian biltzen dira, eta exekutatzeko funtzioaren izena komando lerroan idatzi baino ez da egin behar, dagozkion argumentuekin baldin baditu, jaikna.
Memorian zenbat funtzio dauzkagu jakiteko exekuta daiteke hurrengo komando hau declare -F. ( declare -f komandoak funtzioen inplementazioak ematen digu)
Bestalde, unset -f funtzio_izena egikarituz adierazitako funtzioa memoriatik ezabatzen da.
Gerta liteke izen bera duen script eta funtzioa existitzea ,zein izango zen lehenengoa exekutatzean arazoa sortuz.Bada, ez dago arazorik : kasu hauetan funtzioak lehentasuna du .
Ikus dezagun adibide bat: testu editore bat erailiz , kopiatu hurrengo testu hau:
#!bin/bash
# scrpit-aren izena agurra.sh
clear
echo " eginAgurra() funtzioa erabiliz agurtzen zaitut"
eginAgurra(){
echo " Kaixo $1 laguna"
echo "-----------------------------------------------"
}
eginAgurra #lerro honetan funtzioa exekutatzen da!!!
echo "Agur!!!"

Gorde agurra.sh izenarekin , ta betiko moduan x-baimena jarri exekutatu ahal izateko.Konprobatzeko script-a egikaritu , hurrengo hau idatziz: agurra.sh Pablo



Bash Funtzioak


Komandoen historia

Bash-ek erabili diren azkeneko komandoak metatzen ditu .bash_history fitxategian ( fitxategi hori pertsonala da, beraz "home" pertsonalean nork berea gordetzen du) .Ireki eta edita dezakegu edo zuzenean ikusi bere edukia zien den hisotory komandoarekin . Komando horrek .bash_history fitxategiaren edukia pantailatzen du, orduan gezi teklekin gora eta behera komandoetatik mugi gaitzeke; batean kokaturik ENTER tekla sakatuz komandoa exekutatzen da.
Komandoak exekutatzeko ! tekla ere erabili ahal da:
  • !! azkeneko komandoa exekutatzen du
  • !n :n.garren komandoa exekutatzen du
  • !hitza : hitza hitzez hasten den azkeneko komandoa exekutatzen da
Bestalde komandoen historian bilatu ahal dugu : CTRL+R tekla konbinazioa sakatuz gonbiteak (reverse-i-search) era hartzen du eta historian atzerantzako bilaketa egin dezakegu:ENTER sakatuz topatutako komandoa egikaritzen da,ESC tekla sakatuz komandoa editatzera pasatzen gara, CTRL+G bilaketa amaitzen da.

Komando Lerroa

Kontsola eran ari garenean lerroan zehar mugitzeko zenbait tekla konbinazio dauzkagu; ohikoena da [CTRL+C] uneko komandoa geratzeko.Baina gehiago, egon badaude : jakiteko hurrengo komando hau stty -a egikarituz ( kontuz! komando hori term-i dagokio, ez Bash-i) begibistan izango ditugu:
  • CTRL+C : uneko komandoa geldiarazteko
  • CTRL + \ : aurrekoak komandoa behar den moduan gelditzen du, baina arazo batzuengatik CTRL+C konbinazioak ez badu komandoa mozten erabili ahal dugu CTRL+\ konbinazioak non programa edo komandoa gelditzen duen baliaideak ez askatu arren
  • CTRL +D sarrera fluxua mozteko ( eof : end of file)
  • CTRL+U : kurtsorea dagoen puntutik lerroaren hasierako zatia ezabatzen du
  • CTRL + W : uneko posiziotik hitzaren hasierara arte ezabatzen du ( werase: word erase)
  • ......


2008/03/18

SAMBA -II-

SAMBA programari esker, sare batean Windows eta Linux sistemen artean zenbait errekurtso parteka daitezke. SAMBA-k smbd eta nmbd bi daemon horiek erabiltzen ditu. smbd daemon-ak 139 portua entzuten ditu bezeroen eskaerak, inprimaketa eta fitxategien partekatze zerbitzuak emateko, haatik nmbd besteak zerbitzariaren aldetik funtzionatzen du, 137 portuan entzutez.
SAMBA martxan jartzeko / geldarazteko
/etc/init.d/ smb script daukagu , start | stop | restart argumentuak emanez. Adibidea sudo /etc/init.d/smbd restart berabiatzeko smbf.conf fitxategia aldatu ondoren .
Beste alde batetik,
smbstatus komandoarekin Samba erabiltzen ari diren bezeroak zeintzuk diren berria daukagu.
Erabilera:
  1. Windowsetik erabiltzeko erraza da esportatutakoa publikoa denean. "Sare guneetara" jotzen dugu, bertan "sare osoa" ikertu eta hor agertuko zaigu smbf.conf fitxategian egindako aldaketaren arabera konpartitutako katalogoak edo inprimagailuak
  2. Linux-etik Bi kasu aipatu behar dira:
  • Linux eta Windows makina berean daudenean: kasu horretan ez dugu SAMBA erabili behar, zuzenean munta daiztezke Windows partizioak fstab fitxategian fat32 edo ntfs motakoak izanik
  • sare bereko makina ezbedinetan daudenean samba protokoloa erabili behar da : zerbitzarian samba paketea , eta bezeroan smbfs paketeak instalututa ondoren.Komando lerroan smbclient komandoak erabiliz Windowseko baliabideak eskura ditzakegu. Komandoaren sintaxia hau da: smbclient [baliabidea] [password] [aukerak]. Adibidea smbclient //192.168.168.72/printer -U erabiltzailea . Era gardenean egiteko smbmount komandoarekin lortzen da. adibidea:
smbmount //zerbitzaria/katlogoa /puntu/muntaketa -o username=erabiltzailea
Ikusten denez mount komandoaren sintaxiaren antzekoa du smbmount komandoak. Aurreko adibidean /puntu/muntaketa-n partetekatutako baliabideak ikusiko dira Linux makinan.Era automatikoa egitearren fstab fitxategian ,ohiko moduan, ikusi nahi dieren fitxategiak puntu batean muntatzen dira non fitxategi mota smbfs zehaztuko den


Sare Lokaleko Zerbitzua: SAMBA-I-

Sare lokalean aritzeko Linux-ex, bi zerbitzu eskaintzen digu : inprimaketa eta Windows-eko fitxategiak; hau da sare batean Windows eta Linux sistemak elkarbizitzen badira errekurtsoak parteka daitezke, smb eta nmbd daemonetan oinarritzen den SAMBA programa erabiliz. Programa horren helburua errekurtsok konpartitzea da: beraz, Linux-eko CDROM, inprimagailua edota sistema fitxategia Windows-eko makina batetik erabili ahal dira ; eta alderantziz Linux sistema batetik Windows zerbitzariak atzitu ditzakegu.
UBUNTUn samba paketea instalatu behar dugu esportazioak egiteko, hau da zerbitzarian, eta bezeroetan smbfs paketea, muntaketak egiteko . Gerta liteke makina bezero eta zerbitzaria izatea, kasu horretan bi pakete instalatzeko beharra dago.
Windowseko erabiltzaileek , Linux zerbitzariko errekurtsoak erabili ahal izateko kontu bat eduki behar dute, beraz sortuko diogu, bai Webmin interfza grafikoa erabiliz edo komando lerrotik . Kontua sortu baino lehen , beste zerbaiterako ez bada, komenigarria izango litazateke kontsola "ezkutaturik" edukitzea, modu horretan ez luke sisteman sartu izango . Hori lortzeko , kontua sortzean /bin/false eskaitzen zaio. Hori guztia egiteko:
sudo useradd -c Windows-erako erabiltzailea -s /bin/false erabiltzaile_izena
sudo passwd erabiltzaile_izena
( bitan errepikatu pasahitza)
Horrekin erabiltzailea sortu dugu Windws-eko makina batetik Linux ordenagailu baten esportatuko errekurtsoak erabili ahal izateko.
Bezeroaren aldetik, zenbait aldaketa aldaketa egin behar dira Linux makina sarean ikusgarri izan dadin . Hori , /etc/samba/smbf.conf fitxategia editatuz lortzen da. Fitxategi hori blokeka antolatuta dago , hona hemen esanguratsoenak:
  • [global] --> alderdi orokorrak
  • [homes] --> berez, samba programak /home karpeta eskuragarri jartzen du
  • [cdrom]--> berezitasu batzuk daude:
    • path = ...puntu muntaketa...
    • read only = yes ..edo no
    • public = yes ...
Demagun katalogo bat esportatu nahi dugula: aipatutako sekzioen antzeko bat gehitu beharko genioke smbf.conf fitxategiari. Adibidea : /usr/var katalogoa ikusgarri utzi nahi dugu
[fitxategiak]
path = /usr/var
read only = yes
create mode = 0750

[fitxategiak] : adierazten dugu sekzio berria hasten dela. "fitxategiak" erabiltzileek partekatutako katalogoa ikusiko duten izena izango da, hau da : sarean exploratzean fitxategiak hitza ikusten dutenean /usr/var katalogoko fitxategiak izango dira . Ez da esan behar izena beste bat izan daitekeela, [Linux_var] esaterako.


2008/03/13

NFS zerbitzua

NFS (Network File System) zerbitzuak makina baten partizioa beste makina batean muntazteko balio du , partizio lokala balitz bezala, hau da zerbitzu horren bitartez sarean zehar, zentzu zabalean, fitxategiak partekatu ahal ditugu. Sare zerbitzua da, TCP/IP protokoloa jarraituz. NFS zerbituak funtzionatu ahal izateko portmap zerbitzua instalaturik izan behar dugu aurretiaz. Zerbitzu hori jakiteko martxan dagoen , exekutatu ahal dugu hurrengo komando hau:
ps aux | grep portmap
Ateratzen den mezuan , ikusi beharko genuke portmat egikaritzen dagoen ala ez. Zerbitzu hori- portmap delakoa - RPC urruneko zerbitzariarekin konexioak egiteaz arduratzen da. Ubuntun nfs zerbitzaria instalatzeko nfs-kernel-server paketa eskuratu behar da, edo zuzenean
sudo apt-get install nfs-kernel-server
Instalazioa egin ondoren , portmat-aren zenbat instanzi exekutatzean dauden jakiteko :
rpcinfo -p
horren emaitza protokoloa, bertsioa, portua,.. balioen zerrenda izango da. Zerrenda horretan NFS zerbitzua agertu beharko zaigu, beste batzuen artean.
Konfigurazioa bi fitxategitan oinarritzen da:
  • zerbitzarian: /etc/exports
  • bezeroan : /etc/fstab
Irakurle adituak ikusten duenez, exports fitxategian partekatu nahi dugun katalogoa adierazteaz gain, norekin eta zein baimenekin esaten da. Demagun zerbitzariaren /tmp katalogoa sareko konputagailuetatik atzigarria izatea nahi dugula. Hori balitz, /etc/exports fitxategiari hurrengo lerro hau gehitu beharko genioke:
/tmp 192.168.4.0/24 (rw)
hau da, /tmp katalogoa atzitu ahal da , 192.168.4.0 sareko konputagailuetatik , irakurtzeko-r- eta idazteko -w- baimenak izanik.( Jakina, adibide bat da, beraz gure sarera egokitzeko beharra daukagu). Kasu horretan, sare osorako exportatu dugu, baina makina zehatz bati ( IP bati, finean) egin dezakegu , adibidez:
/tmp 192.168.4.34 (rw)
/tmp 192.168.4.34 (rw) 192.168.4.10(ro)
azken kasu hauetan , 192.168.4.34 Ip duen makinak atzitu ahal du, bigarren kasuan bi makinentzako
Labur bilduz, konpartitu nahi ditugun
zerbitzariaren fitxategiak /etc/exports fitxategian expreseki adierazi behar ditugu, norekin eta zein modutan ( read, write) aipatuz.
Bezeroaren albotik, /etc/fstab fitxategia aldatu behar dugu lerro bat gehituz.Gogora dezagun , fitxategi horretan muntaketu puntuak adierazten direla, hori izanda karpeta bat sortu behar dugu urruneko katalogoa finkatzeko . Demagun gure karpeta pertsonalean urruneko katalogoa "agertzea" nahi dugula:
sudo mkdir /home/jon/urruneko_tmp

hau da , /jon karpetan urruneko_tmp izeneko karpeta bat sortu dugu. Orain /etc/fstab fitxategia ireki eta lerro hau gehitu:( zerbitzariaren IP 192.168.4.1 baldin bada)
192.168.4.1:/tmp /home/jon/urruneko_tmp nfs,timeo=20,intr
Azken aldaketa horrek eraginik ahal izateko , exekutatu sudo mount -a ; muntaketa egitean akatsik ez badago gure urruenko_tmp katalogoan zerbitzariaren /tmp katalogoko fitxategiak begibistan egon beharko lirateke.
Gehitu diogun lerroaren sintaxia,hau da:
zerbitzaria:partekatu_katalogoa muntaketa_puntua aukerak
Aukerak hauek dira:
  • nfs : fitxategi sistema
  • rw : irakurri/idatzi baimenak
  • time0=x : x zenbat denbora zehar (segundu hammarretan), saiatuko den urruneko muntaketa egiten errore-mezua eman aurretik
  • noauto: erabiltzaile arruntek ezin dute muntaketa egin, administrailearen lana baita
  • ....



2008/03/05

Argmentuak pasatzen script bati

Komando-lerrotik script-ei pasatu ahal zaie, hurrengo adibidean azaltzen den moduan. Demagun bi zenbaki batu nahi ditugula; bi aukera ditugu:

  • definitu bi aldagai, zenbakiak jasotzeko , eta eragiketa egin:
#/bin/bash
# script-aren izena : batuketa.sh
zenbaki1=5
zenbaki2=3
batura=$zenbaki1+$zenbaki2
echo " Zenbakien batura $batura da"
#-------- amaiera------
Pentsa ezazu beste bi zenbaki batu nahi izanez gero , editatu beharko genuke eta balioak aldatu
  • eragiketa prestatu eta teminaletik zenbakiak eman.
#/bin/bash # script-aren izena : batuketa2.sh
batura=$1+$2
echo " Zenbakien batura $batura da"

Bigarren kasu honetan, balioak ez dira inon agertzen, beraz zein batura kalkulatzen da?. Hori jakiteko hobe da egikaritzea , horretarako hurrengo hau idatzi beharko genuke batuketa2.sh 7 8 , horrekin adierazten dugu $1 berdin 7 , eta $2 berdin 8 izango zirela; eta batuketa2.sh 20 67 idaztean $1 berdin 20 , eta $2 berdin 67 dira, hau da komando-lerrotik bi argumento pasatzen zaizkio batuketa.sh script-ari.
Bash-ek posiziozko arumentoak erabiltzen ditu, hau da, komando-lerroan agertzen den ordenean esleitzen zaizkie $1 , $2, ...$9 aldagaiei . Horretaz gain, $0 aldagaiak script-aren izena gordetzen du, eta $* edo $@ aldagaiek argumentoen zerrenda gordetzen dute.
Adibidea:
#/bin/bash
# script-aren izena proba.sh da
# scrip honetan $0, $1,.. erabiltzen dira
batura=$2+$3
echo "Kaixo $1, zure script-aren izena $0 da, pasatu didazu argumento hauek $@ "
echo " pasatutako zenbakien batura $batura da "
# ---------------- amaiera -------------------------
Exekutatzeko , proba.sh Koldo 12 97 , edo nahi den argumentuekin; beti $1 lehenengo parametroa izango da, $2 bigarrena eta $3 hirugarrena

2008/03/04

Teklatutik , aldagaiei balioak eman

Aldagaiak, definitu eta balioa esleitu egin dezakegu komando bakar batean. Adibidez adina=23 ; horrekin adina aldagaia definitzen da eta 23 balioa ematen zaio bidenabar.Baina gerta daiteke, aldagaiak edozein balioa hartzea geuk emanda, kasu horretan sarrera standarretik pasatzen zaio, interaktibitatea sortuz.Horretarako read komandoa erabiltzen da.
Egin proba hurrengo script-arekin:
#/bin/bash
echo " Idatzi zure izena :"

read zureIzena

echo "Idatzi zure adina :"

read adina

# pantaila ezabatzen dugu

clear

echo " Zu zara $zureIzena eta $adina urte dituzu"

echo " ezta?
"


Egikaratzen denean , Idatzi zure izena esaldia agertuko da pantailan ,eta hor geratzen da , teklatuan zerbait idatzi denaren zain; ENTER sakatu orduko , balioa zureIzena aldagaiak jasoko du; berdin adina aldagaiarekin

Bash Aldagaiak

Aldagaietan, balioak (zenbakiak, edto textua) bilzten dira, kalkuluak egiteko. Fisikoki, aldagaiak memoriako guneak dira , non balioak metatzen diren. Gune horiek izendatzen dira "izen" batez , eta izen horrekin identifakatzen dira , beraz aladagai informatikei buruz hitz egiten denean izena eta edukia bereiztu behar dira. Adibidea : herria1=Berango , eginez gero herria1 aldagaia definitutzen da, Berango balioarekin .Aldagaieren balioa errefrentziatu nahi bada $herria1 , idatzi behar dugu.
Idtaz dezagun programatxo bat. Ireki terminal bat , nahi duzun textu editorearekin ( gedit, adibidez)
laguna@LinuxUbuntu: gedit aldagaiak.sh
Agertzen den leihoan idatzi, hurrengo hau:
#/bin/bash #aaldagaien adibidea : hau komentarioa da
#-------------------------------------------
izena=Jon
abizena=Lopez
herria=Londres
echo " $Jon jaunak, $abizena du abizena , eta $herria -en bizi da "
#---- script-aren amaiera

Gorde, ezer barik. Betiko moduan, exekutatze baimenak ematen diogu:
laguna@LinuxUbuntu: sudo chmod a+x aldagaiak.sh
era horretan aldagaiak.sh fitxategia exekutagarri bihurtu dugu. ( ls -al komandoa egikarituz gero fitxategiak zerrendatuko dira, eta exekutagarriak direnak berde koloreaz bereziten dira)
Exekutatzeko, idatzi laguna@LinuxUbuntu : ./aldagaiak.sh , hurrengo emaitza hau pantailan izango dugu Jon jaunak Lopez du abizena, eta Londres -en bizi da

Oharra: laguna@LinuxUbuntu: dagoen prompt-a ( gonbitea) da

2008/03/01

7z

Tresna asko dauzkagu fitxategiak trinkotzeko/ destrinkotzeko , 7z da horietariko bat.Inoiz ez duzu ikusi 7z luzapena duen fitxategiren bat?. Bada, huek dira fitxategi trinkotuta , zip, rar, arj,.. bezalakoak; onena dela esaten duenik badago , hori esatera nik ez nuke ausartuko, baina kontua da inoiz halako fitxatgiren bat destrinkotzeko beharra daukagula nonbait; beraz tresna hori instalatu behar dugu Ubuntun berez ez baitago.
Hona hemen instalatzeko urratsak. Terminaletik
sudo apt-get install p7zip-full

Beste modu batean jaitsi tarball , ondoren
$ tar -xvjf p7zip_4.57_src_all.tar.bz2
$ cd p7zip_4.57
$ make all3
# make install

Testu eran funtzionatzen du, beraz zenbait aukera jakin behar ditugu.Duen sintaxia jakiteko terminaletik , sartu 7z komandoa , eta begibistan izango dituzu. Garrantzitsuenak dira :
e erauzteko
a trinkotzeko

Adibideak
:
  1. Demagun fitxategi.7z destrinkotu behar dugula , hurrengo komandoa sartu behar da komando-lerrotik 7z e fitxategi.7z
  2. Demagun fitxategi1.txt , itxategi2.txt , itxategi3.txt trinkotu nahi ditugula; erabili hurrengo komandoa 7za a fitx.7z fitxategi1.txt fitxategi2.txt fitxategi3.txt
  3. Demagun ariketak izeneko katalogoa konprimitu nahi dugula , erabili 7za a ariketa.7z ariketak