Post on 24-Sep-2015
Redirecciones
1.Fundamentos
Las redirecciones son una de las ms importantes posibilidades proporcionadas por el shell. Por redireccin seentiendelaposibilidadderedireccionarlavisualizacindelapantallahaciaunfichero,unaimpresoraocualquierotroperifrico,losmensajesdeerroreshaciaotrofichero,desustituirlaintroduccinvatecladoporelcontenidodeunfichero.
Cualquierflujodedatosenentradaosalidadecomandopasaporuncanal.Comosucedeconelagua,esposibledesviarelcursodelosdatoshaciaotrodestinoodesdeotrafuente.
Linuxutilizacanalesdeentradas/salidasparaleeryescribirsusdatos.Pordefecto,elcanaldeentradaeselteclado,yel canaldesalida, lapantalla.Loserrores,direccionadospordefectoa lapantalla, son tratadoscomouncanalespecial.
Esposible redireccionar estos canaleshacia ficheroso flujode textodemanera transparentepara los comandosLinux.
2.Ensalida
Sepuedeutilizarelcarcter>pararedireccionarlasalidaestndar(laquevanormalmenteenlapantalla).Luegoseindicaelnombredelficherodondesecolocarnlosresultadosdesalida.
$ ls -l > resultado.txt $ cat resultado.txt total 1 -rw-r--r-- 1 Administ ssh_user 0 Jul 4 12:04 PEPITO -rw-r--r-- 1 Administ ssh_user 0 Jul 25 15:13 resultado.txt -rw-r--r-- 1 Administ ssh_user 171 Jul 25 15:13 test.txt
Si no existe, se crear el fichero. Si existe, se sobreescribir su contenido, incluso si el comando tecleado no escorrecto.Elshellempiezaprimeroporcrearelficheroyluegoejecutaelcomando.
Esunaspectoimportantedelasredirecciones:seinterpretanlasredireccionesdederechaaizquierda,yseinstalanlasredireccionesANTESdelaejecucindeloscomandos.Hayquecrearelficheroantesdepoder
escribirenl.Deahque,inclusosielcomandoesfalso,secreaosechafaelfichero...
Paraaadirdatosacontinuacindelfichero,osea,sinsobreescribirlos,seutilizaladobleredireccin>>.Seaadeelresultadodelcomandoalfinaldelfichero.
$ ls -l > resultado.txt $ date >> resultado.txt $ cat resultado.txt total 1 -rw-r--r-- 1 Administ ssh_user 0 Jul 4 12:04 PEPITO -rw-r--r-- 1 Administ ssh_user 0 Jul 25 15:13 resultado.txt -rw-r--r-- 1 Administ ssh_user 171 Jul 25 15:13 test.txt Thu Jul 25 15:20:12 2002
3.Enentrada
Loscomandosqueesperandatosoparmetrosdesdeeltecladopuedentambinrecibirlosdesdeunficherousandoelcarcter
La redireccinerror.log $ cat error.log rmdir: `directorio2: No such file or directory
Puederedireccionarlosdoscanalesdesalidaaunnicoficheroponindolosenrelacin.Paraello,seutilizael>&.Tambinesimportantesaberenqusentidoelshellinterpretalasredirecciones.Elshellbuscaprimeroloscaracteres,>>alfinaldelalnea,yaquelasredireccionessuelenestaralfinaldecomando.Porlotanto,siustedquiereagruparlosdoscanalesdesalidaydeerrorenunmismofichero,hayqueprocedercomoacontinuacin.
$ ls -l > resultado.txt 2>&1
Seredireccionalasalida2hacialasalida1porlotanto,losmensajesdeerrorpasarnporlasalidaestndar.Luegose redirecciona el resultado de la salida estndar del comando ls hacia el fichero resultado.txt. Este ficherocontendr,porlotanto,alavezlasalidaestndarylasalidadeerror.
Puedeutilizarlosdostiposderedireccinalavez:
$ wc < resultado.txt > cuenta.txt $ cat cuenta.txt 4 29 203
6.Aperturadecanales
Existentrescanalesestndaresysenumerande0a2.As,0.Elcomandoexecpermiteabrirotrossietecanalesnumeradosde3a9.Porlotanto,haydiezcanalesentotal.
Ustedpuedee,incluso,debeconsiderar,enelmarcodelosprocesos,sacaralgunosresultadosporelcanal3,otrosporel4,yassucesivamente.Loscanalesestnabiertosparalaentradaylasalida.
$ exec 3>dump.log $ ls -l >&3 $ cat dump.log total 3952 -rw-r--r-- 1 seb users 167212 oct 9 09:27 battlestar_1280.jpg
- 2 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0YpY6BqXVwM+ICwA=-enidentnumber
Pgina 2
drwxr-xr-x 2 seb users 4096 mar 4 08:51 bin drwxr-xr-x 8 seb users 4096 mar 4 08:45 cxoffice drwx------ 2 seb users 4096 mar 10 12:29 Desktop drwx------ 13 seb users 4096 mar 6 11:49 Documents -rw-r--r-- 1 seb users 0 mar 11 11:34 dump.log -rw-r--r-- 1 seb users 3785296 dic 12 15:15 e3555_EeePC4G.pdf drwxr-xr-x 3 seb users 4096 mar 10 11:16 Games drwxr-xr-x 5 seb users 4096 mar 10 11:16 karchiver-3.4.2.b4 -rw-r--r-- 1 seb users 358 mar 11 08:51 lista -rw-r--r-- 1 seb users 608 mar 11 09:14 tmpgrp -rw-r--r-- 1 seb users 1555 mar 11 09:15 tmppwd
Todo lo que se escribir en el canal 3 se escribir en el fichero dump.log. Luego se puede cerrar el canalrelacionndoloconunseudocanal(canaldecierre).
$ exec 3>&-
7.Filtro:definicin
Unfiltro(ouncomandofiltro)esunprogramaquesabeescribiryleerdatosporloscanalesestndaresdeentradaysalida.Modificaotratasiesprecisoelcontenido.wcesunfiltro.Lepresentamosalgunos:more(muestralosdatospginaporpgina),sort(ordenacindelosdatos),grep(criteriosdebsqueda).
8.Pipelines/tuberas
Lasredireccionesdeentrada/salidatalescomolasqueacabadeverpermitenredireccionarlosresultadoshaciaunfichero.Luegosepuedeinyectaresteficheroenunfiltroparaextraerleotrosresultados.Estoobligaatecleardoslneas: unapara la redireccinhacia un fichero, otra para redireccionar este ficherohacia el filtro. Las tuberas opipespermitenredireccionarelcanaldesalidadeuncomandohaciaelcanaldeentradadeotro.Elcarcterquelopermite|estaccesibleconlacombinacin[AltGr]1delostecladosespaoles.
$ ls -l > resultado.txt $ wc < resultado.txt
seconvierteen
$ ls -l | wc
Esposiblecolocarvarios|enunamismalnea.
$ ls -l | wc | wc 1 3 24
Elprimercomandonotieneporquserunfiltro.Noeselcasomshabitual.Loimportanteesquesedebefacilitarunresultado.demparaelltimocomando,quepuedeserporejemplouncomandodeedicinoimpresin.Finalmente,elltimocomandopuedeserobjetodeunaredireccinensalida.
$ ls -l | wc > resultado.txt
- 3 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0YpY6BqXVwM+ICwA=-enidentnumber
Pgina 3
Filtrosyherramientas
Unfiltro(ouncomandofiltro)esunprogramaquesabeescribiryleerdatosporloscanalesestndaresdeentradaysalida.Modificao trata si esprecisoel contenido.wc esun filtro. Lasherramientasno siempre se comportan comofiltros. Permitenundeterminadonmerodeaccionesen ficherosy su contenido, como,por ejemplo, dar formatooimprimir.
1.Extraccindelosnombresyrutas
Elcomandobasenamepermiteextraerelnombredelficheroenunaruta.
$ basename /tmp/seb/lista lista
Elcomandodirnameefectalocontrario,extraelaruta.
$ dirname /tmp/seb/lista /tmp/seb
2.Bsquedadelneas
Se tratadeextraer lneasdeun fichero segnvarios criterios. Paraello, usteddisponede tres comandos:grep,egrepyfgrep,queleenlosdatosobiendesdeunficherodeentrada,obiendesdeelcanaldeentradaestndar.
a.grep
Lasintaxisdelcomandogrepesgrep [Opciones] modelo [Fichero1...].
Elmodelosecomponedecriteriosdebsquedaqueseparecenmuchoa loscriteriosyaexpuestosparavi,porejemplo.Nohayqueolvidarquesedebeinterpretarestoscriteriosconelcomandogrep,ynoconelshell.Porlotanto,hacefaltacerrartodosloscaracteres.
$ cat fic4 Cerdo Ternera Buey rata Rata buey $ grep "^[bB]" fic4 Buey buey
Elcomandogreptambinpuedetomaralgunasopcionesinteresantes.
l vefectalabsquedainversa:sevisualizantodaslaslneasquenocorrespondenaloscriterios.
l cslodevuelveelnmerodelneasencontradas,sinmostrarlas.
l inodiferencialasmaysculasdelasminsculas.
l nindicaelnmerodelneaparacadalneaencontrada.
l lenelcasodeficherosmltiples,indicaenquficherosehaencontradolalnea.
$ grep -i "^b" fic4 Buey buey
- 1 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0Ynbd0rvVwM+ICwA=-enidentnumber
Pgina 4
b.egrep
Elcomandoegrepextiendeloscriteriosdebsquedaypuedeaceptarunficherodecriteriosenentrada.EquivaleaungrepE.Empleacomocriteriosexpresionesregulares.
egrep -f fichero_criterio Fichero_bsqueda
nicamentebuenas tardesy buenasnochesque empezarn por unamayscula o unaminscula si estnsolosenunalnea:
^[bB]uenas(tardes|noches)$
VerificacinmuyescuetadelavalidezdeunadireccinIP:
echo $IP | egrep ([0-9]{1,3}\.){3}[0-9]{1,3}
Estalneasedescomponedelamanerasiguiente:
l ([09]{1,3}\.){3}:www.xxx.yyy.
l [09]:uncarcterentre0y9
l {1,3}:repetidoentreunaytresveces,porlotanto:x,xxoxxx
l \.:seguidodeunpunto
l {3}:elconjuntotresveces
Luego[09]{1,3}:.zzz
l [09]:uncarcterentre0y9
l {1,3}:repetidoentreunaytresveces
Carcterespecial Significado
| Olgico,laexpresincolocadaantesodespusdebedesaparecer.
(...) Agrupacindecaracteres.
[...] Uncarctertieneestaposicinentrelosindicados.
.(punto) Cualquiercarcter.
+ Repeticin,elcarctercolocadoantesdebeapareceralmenosunavez.
* Repeticin,elcarctercolocadoantesdebeaparecerdeceroanveces.
? Elcarctercolocadoantesdebeaparecerunavezcomomximo.
{n} Elcarctercolocadoantesdebeaparecerexactamentenveces.
{n,} Aparecenvecesoms.
{n,m} Apareceentrenymveces.
^ Enprincipiodecadena.
$ Enfinaldecadena.
- 2 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0Ynbd0rvVwM+ICwA=-enidentnumber
Pgina 5
c.fgrep
Elcomandofgrepesungrepsimplificadoyrpido(fastgrep)yequivaleaungrepF.Aceptatambinunficherodecriteriosdebsqueda,perodebetratarsedecriteriossimples,sincaracteresespeciales.Introduzcaenelficherodecriterioslneassencillas(textoycifras),unabsquedaporlnea.Fgrepvaabuscarenunficherometaounflujoenentradalaslneasquecorrespondenacadaunodeloscriterios.
3.sed
El aprendizaje de sed requerira todo un libro. Sed es un editor de flujo (Stream Editor) que permite filtrar ytransformartexto.Esunpococomouneditorquepermitemodificartextovacomandosdescripts,peroenunpasoysinedicininteractiva.Utilizaunjuegoextendidodecomandosprocedentedeleditored.Susintaxisbsicaes:
sed -e arch
Parautilizarsed,hayqueaprenderyentender lasexpresionesregulares.Elcuadrodelcomandoegrepretomalasintaxisbsicadelasexpresiones.Cualquierlibrosobresedpartedeestasexpresionesyrecprocamente.
Sedseutilizamuyamenudoparasustituirvaloresporotros(sustitucin)osuprimirlneasparticulares(aunquesepodrautilizargrepenestecaso).Lasintaxisbsicadesustitucineslasiguiente:
s///[g]
Lag finalpermite realizarunasustitucinsobre toda la lneaencasodehayavarias coincidencias.Aqu tieneunejemploquesustituye__NOMBRE__porPepito:
$ echo "Me llamo __NOMBRE__. Te llamas __NOMBRE__?" | sed -e s/__ NOMBRE__/Pepito/ Me llamo Pepito. Te llamas __NOMBRE? $ echo "Me llamo __NOMBRE__. Te llamas __NOMBRE__?" | sed -e s/__ NOMBRE__/Pepito/g Me llamo Pepito. Te llamas Pepito?
Puede colocar un valor numrico en el campo nuevo para precisar, si la bsqueda comporta varios elementosagrupadosporparntesis,enquelementodelosbuscadosdebetrabajar.Aqutenemosunejemplosencilloqueaadeasteriscosalrededordelnombrepepito:
$ echo pepito | sed -e "s/\(pepito\)/**\1**/" **pepito**
Parasuprimirtodaslaslneasvacasoquecontienennicamenteespacios:
$ sed -e /^ *$/d fichero
4.Columnasycampos
Elcomandocutpermiteseleccionarcolumnasycamposenunfichero.
a.Columnas
Lasintaxiseslasiguiente:
cut -cColumnas [fic1...]
Unacolumnaeslaposicindeuncarcterenlalnea.Elprimercarctereslacolumna1elsegundo,lacolumna2,yassucesivamente.Unalneade80caracteresdisponede80columnas.Lanumeracinempiezaa1.Eselmtodoidealparaficherosplanosyconformatofijo,dondecadacampoempiezayterminaconposicionesdadas.
Elformatodeseleccindecolumnaeselsiguiente:
l unacolumnasola(p.ej.c2paralacolumna2)
- 3 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0Ynbd0rvVwM+ICwA=-enidentnumber
Pgina 6
l unintervalo(p.ej.c24paralascolumnas2,3y4)
l unalistadecolumnas(p.ej.c1,3,6paralascolumnas1,3y6)
l lostresalavez(p.ej.c13,5,6,12).
$ cat lista Producto precio cantidades ratn 30 15 disco 100 30 pantalla 300 20 teclado 45 30
$ cut -c1-5 lista Produ ratn disco panta tecla
$ cut -c1-3,10-12,15 Prorx cantidades rat0 15 dis0 30 pan0 20 tec530
b.Campos
El comando cut tambin permite seleccionar campos. Se deben delimitar estos campos por defecto por unatabulacin, pero el parmetro -d permite seleccionar otro carcter (espacio, ). La seleccin de los campos esidnticaaladelascolumnas.
Elcarcterseparadordebesernico.Noesposibleponernidos,nitres,niunacadenadeseparadores.Paraeliminarloscaracteresmltiples,utilicetr.Asimismo,elseparadorpordefectoeslatabulacin.Ahora
bien,pordefectosesustituyenlastabulacionesconespaciosdentrodeloseditores...
cut -dc -fCampos [fic1...]
Lepresentamosunosejemplos.Elficherolistacontienecamposseparadosportabulaciones.
$ cat lista Producto precio cantidades ratn 30 15 duro 100 30 disco 100 30 pantalla 300 20 teclado 45 30 tarjeta 45 30
$ cut -f1 lista Producto ratn duro disco pantalla teclado tarjeta
$ cut -f1,3 lista Producto cantidades ratn 15
- 4 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0Ynbd0rvVwM+ICwA=-enidentnumber
Pgina 7
duro 30 disco 30 pantalla 20 teclado 30 tarjeta 30
Observeque,siinvierteelordendeloscampos(f3,1),noobtendrelefectodeseado:loscampossalensiempreenelsentido1,3.
Acontinuacinvemoscmoaislarlosnombresdeungrupoysusidentificadoresrespectivos:
$ cat /etc/group seb@slyserver:~> cat /etc/group at:!:25: audio:x:17: avahi:!:106: beagleindex:!:107: bin:x:1:daemon cdrom:x:20: console:x:21: daemon:x:2: dialout:x:16:seb,esteban,enrique,public disk:x:6:
$ cut -d: -f1,3 /etc/group at:25 audio:17 avahi:106 beagleindex:107 bin:1 cdrom:20 console:21 daemon:2 dialout:16 disk:6
Sinohaydelimitador(tabulacinuotro)enunalnea,cutmuestratodalalnea.
5.Recuentodelneas
Elcomandowc(wordcount)permitecontarlaslneas,laspalabrasyloscaracteres.
wc [-l] [-c] [-w] [-w] fic1
l -l:cuentaelnmerodelneas
l -c:cuentaelnmerodebytes
l -w:cuentaelnmerodepalabras
l -m:cuentaelnmerodecaracteres
$ wc lista 12 48 234 lista
Elficherolistacontiene12lneas,48palabrasy234caracteres.
6.Ordenacindelneas
- 5 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0Ynbd0rvVwM+ICwA=-enidentnumber
Pgina 8
El comando sort permite ordenar las lneas. Por defecto, la ordenacin se hace sobre toda la tabla en ordencreciente. La ordenacin es posible a partir de uno o varios campos. El separador de campos por defecto es latabulacino,almenos,unespacio.Sihayvarioscampos,elprimeroeselseparadorlosdemssoncaracteresdelcampo.
LasintaxisdesorthaevolucionadodesdehacevariosaosyLinuxhaaplicadounestndar.Adems,yanoutilizalaantiguasintaxisbasadaen+/.Ensulugar,hayqueutilizarelparmetro-k.Lanumeracindeloscamposempiezacon1.
sort [opciones] [-k pos1[,pos2]] [fic1...]
$ cat lista ratn ptico 30 15 duro 30giga 100 30 duro 70giga 150 30 disco zip 12 30 disco blando 10 30 pantalla 15 150 20 pantalla 17 300 20 pantalla 19 500 20 teclado 105 45 30 teclado 115 55 30 tarjeta sonido 45 30 tarjeta vdeo 145 30
Acontinuacinvemoscmoordenarporordenalfabticoapartirdelaprimeracolumna:
$ sort -k 1 lista disco blando 10 30 disco zip 12 30 duro 30giga 100 30 duro 70giga 150 30 pantalla 15 150 20 pantalla 17 300 20 pantalla 19 500 20 ratn ptico 30 15 tarjeta sonido 45 30 tarjeta vdeo 145 30 teclado 105 45 30 teclado 115 55 30
Ejemplo:ordenacinnumricaapartirdelospreciosporproductosenordendecreciente:
$ sort -n -r -k 3 lista pantalla 19 500 20 pantalla 17 300 20 pantalla 15 150 20 duro 70giga 150 30 tarjeta vdeo 145 30
Algunosparmetros
Opcin Papel
d Dictionnarysort(ordenacindediccionario).Slotomacomocriteriodeordenacinlasletras,lascifrasylosespacios.
n Ordenacinnumrica,idealparalascolumnasdecifras.
b Ignoralosespaciosalprincipiodelcampo.
f Nohaydiferenciasentremaysculasyminsculas(conversinenminsculasyluegoordenacin).
r Reverse,ordenacinenordendecreciente.
tc Nuevodelimitadordecampoc.
- 6 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0Ynbd0rvVwM+ICwA=-enidentnumber
Pgina 9
duro 30giga 100 30 teclado 115 55 30 teclado 105 45 30 tarjeta sonido 45 30 ratn ptico 30 15 disco zip 12 30 disco blando 10 30
Tambinesposibleejecutarlaordenacindesdeundeterminadocarcterdeuncampo.Paraello,debeespecificarel.pos:k1.3empezarlaordenacinapartirdeltercercarcterdelcampo1.
7.Supresindelaslneasrepetidas
El comando uniq permite suprimir las lneas repetidas en flujos en entrada o ficheros ordenados. Por ejemplo, acontinuacin semuestra cmo sacar nicamente la lista de los GID realmente utilizados como grupo principal deusuarios:
$ cut -d: -f4 /etc/passwd | sort -n | uniq 0 1 2 7 8 12 13 14 25 49 51 62 ...
8.Unindedosficheros
a.Enloscamposcomunes
Elcomandojoinpermiteefectuarlaunindedosficherosenfuncindeuncampocomn.Sedebenordenarlosdosficherosenloscamposespecificadosenlaunin.
join [-tc] [-1 n] [-2 m] fic1 fic2
Laopcin-tindicalosseparadores,-1elcampodelprimerficheroy-2elcampodelsegundofichero,enloscualesefectuar launin.Observequejoingestionamal losduplicadosypuedequesedetengacomoconsecuenciadeello.
Esposiblequeelcomando joinnoleproporcioneelresultadoesperado.Laraznesquesedetieneencuantonoencuentracorrespondenciaentredoslneas.
b.Lneaalnea
Elcomandopasteagrupanficherosenuno.Paraello,concatenalaslneasdecadaunodelosficherosenunasolalnea: lnea1 de fic1 con lnea2 de fic2, lnea3 de fic 3, y as sucesivamente. Es un poco lo contrario de cut. Elseparadorpordefectoeslatabulacin,peropuedeprecisarundelimitadorcon-d.
$ cat fic1 lista_a lista_b lista_c
$ cat fic2 lista_a2
- 7 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0Ynbd0rvVwM+ICwA=-enidentnumber
Pgina 10
lista_b2 lista_c2
$ paste -d: fic1 fic2 lista_a:lista_a2 lista_b:lista_b2 lista_c:lista_c2
9.Divisindeunficheroenpartes
a.Recortar
Aqutenemosuncomandomuyprctico,split,quepermiterecortarungranficheroenvariostrozosconuntamaodeterminado.Lossistemasdeficherosnosontodosigualesfrentealtamaomximodeunfichero.BajoLinux,elproblema no es habitual, ya que un sistema de ficheros de tipo ext3 puede soportar ficheros de 1 TB (TB =TeraByte 1 Terabyte = 1024 GB), o sea, el equivalente a unos 130 DVD de doble capa. Pero las bandasmagnticas,oenmenormedidalosdiscosremovibles,nodisponendeestaposibilidad.
Se suelen formatear las llavesUSBoundiscoexterno conun sistemade ficherosde tipoVFAT,procedentedelmundo de Microsoft. Este sistema de ficheros, que procede de DOS y luego de Windows 9x, garantiza unacompatibilidadentretodoslossistemas(Unix,Windows,MacOS),yaquequienpuedelomspuedelomenos.VFAT(omsbienFAT16oFAT32)soportanicamenteficherosdeuntamaomximode4 GB.UnaimagenISOdeDVDounacarpetadecopiadeseguridadnopuedeentrarenelloenunsolobloque.Por lo tanto,hace faltadividirelficheroenvariaspartes.
split [-l n] [-b n[bkm] [fichero [prefijo]]
Elcomandopuedefuncionarsegndosmodos:
l recorteporlneascon-l:losficherosensalidatendrntodosnlneasdetexto(salvoelltimosisedaelcaso)
l recortea tamao fijo con-b: los ficheros tendrn todosun tamao fijodenbytes.El sufijob indicauntamaodenbloques(512bytes),kindicankB(1024bytes)ymindicanMB(1024kB).
Comocualquierfiltro,splitpuedecogerunflujodeentrada,comoeselcasosinoseprecisaningnfichero,osihayunguin.Unprefijodefineelnombredelosficherosensalida.Aqutenemosunficherode1GBacortarenpartesde150MB.Elprefijoesfic.Cadaficheroensalidasellamaficaa,ficab,ficac,ficad,yassucesivamente.
$ ls -l granfichero -rw-r--r-- 1 seb users 1073741824 mar 12 19:47 granfichero $ split -b 150m granfichero fic $ ls -l fic* -rw-r--r-- 1 seb users 157286400 mar 12 20:15 ficaa -rw-r--r-- 1 seb users 157286400 mar 12 20:15 ficab -rw-r--r-- 1 seb users 157286400 mar 12 20:15 ficac -rw-r--r-- 1 seb users 157286400 mar 12 20:16 ficad -rw-r--r-- 1 seb users 157286400 mar 12 20:16 ficae -rw-r--r-- 1 seb users 157286400 mar 12 20:16 ficaf -rw-r--r-- 1 seb users 130023424 mar 12 20:16 ficag
b.Reconstruir
Unalneabastaparareconstruirunficherodivididoconlaayudadelasredirecciones:
$ cat fic* > newfic $ ls -l newfic -rw-r--r-- 1 seb users 1073741824 mar 12 20:47 newfic
10.Sustitucindecaracteres
- 8 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0Ynbd0rvVwM+ICwA=-enidentnumber
Pgina 11
a.Listadecaracteres
Elcomandotrpermitesustituirunoscaracteresconotrosysloaceptadatosqueprovengandelcanaldeentradaestndar,nodelosficheros.
tr [opciones] original destino
El original y el destino representan uno o varios caracteres. Se sustituyen los caracteres originales con los dedestinoenelordenindicado.Loscorchetespermitendefinirintervalos.
Porejemplo,parasustituirlaoporlaeylaiporlaa:
$ cat lista | tr "oi" "ea" Predut ebjete precie cantadades raten ptaque 30 15 dure 30gaga 100 30 dure 70gaga 150 30 dasce zap 12 30 dasce blande 10 30 pantalla 15 150 20 pantalla 17 300 20 pantalla 19 500 20 teclade 105 45 30 teclade 115 55 30 tarjeta senade 45 30 tarjeta vadee 145 30
Conestecomando,puedeconvertirunacadenaenmaysculasoenminsculas.
$ cat lista | tr "[a-z]" "[A-Z]" PRODUCTO OBJETO PRECIO CANTIDADES RATN PTICO 30 15 DURO 30GIGA 100 30 DURO 70GIGA 150 30 DISCO ZIP 12 30 DISCO BLANDO 10 30 PANTALLA 15 150 20 PANTALLA 17 300 20 PANTALLA 19 500 20 TECLADO 105 45 30 TECLADO 115 55 30 TARJETA SONIDO 45 30 TARJETA VDEO 145 30
Sobretodo,tradmitedosparmetros,-s(squeeze)y-d(delete),quepermitensuprimircaracteres,duplicadosono.Esperfectoenelcasodeseparadoresmltiples.AcontinuacindamosunejemploprcticoenelcualsebuscaaislarladireccinIPdeunamquina.
$ /sbin/ifconfig eth0 eth0 Vnculo encap:Ethernet HWaddr 00:13:D3:D7:A4:6C inet adr:10.9.238.170 Bcast:10.9.239.255 asque:255.255.252.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:15054381 errors:0 dropped:0 overruns:0 frame:0 TX packets:4991811 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:1000 RX bytes:4157389034 (3964.7 Mb) TX bytes:374974072 (357.6 Mb) Interrupcin:22 Direccin bsica:0xcc00
Sloleinteresalalneaquecontieneinet:
$ /sbin/ifconfig eth0| grep "inet " inet dir:10.9.238.170 Bcast:10.9.239.255 Mscara:255.255.252.0
ParaaislarladireccinIPcolocadadespusdeinet dir:elseparador:puedeparecerinteresante,peroenestecasouncutnosdevolvera10.9.238.170 Bcast,loquenoconviene.Laartimaaconsisteensustituirtodoslosespaciosporunsolo:.Elparmetro-ssustituyeunacadenadencaracteresidnticosporunosolo.Sinose
Suprimirlasrepeticiones
- 9 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0Ynbd0rvVwM+ICwA=-enidentnumber
Pgina 12
precisa,eselmismocarcterencasocontrario,setratadeuncarcterdesustitucindeterminado.
$ /sbin/ifconfig eth0| grep "inet " | tr -s " " ":" :inet:dir:10.9.238.170:Bcast:10.9.239.255:Mscara:255.255.252.0
Yaslofaltacontar:ladireccinIPestencuartaposicin(elprimercampoantesdelprimer:estvaco).
$ /sbin/ifconfig eth0| grep "inet " | tr -s " " ":" | cut -d: -f4 10.9.238.170
b.Tabulacionesyespacios
Lamayora de los editores sustituyen las tabulaciones por espacios. Ahora bien, algunos comandos esperan aobtenertabulacionescomodelimitadoresdecampos(eselcasodecut).Sinopuedeapaarsecontr,tieneasudisposicindoscomandosparaestecasoespecfico.
El comando expand convierte las tabulaciones en espacios. El comando unexpand convierte los espacios entabulaciones.Osea,elficherolistasegnelmodeloanterior,enelcualseseparanlascolumnasporespaciosenlugardetabulaciones.Enelprimercaso,elresultadonoeselesperadoparanada.Elcomandocutintentasacareltercercampodeunficherotabulado.Comonohaytabulaciones,muestratodalalnea.
$ cut -f1 lista Producto objeto precio cantidades ratn ptico 30 15 duro 30giga 100 30 duro 70giga 150 30 disco zip 12 30 disco blando 10 30 ...
Elcomandounexpandconelparmetro-asustituyetodaslassecuenciasdealmenosdosespaciosporelnmeronecesariodetabulaciones.Estavezelresultadoescorrecto.
$ unexpand -a lista | cut -f1 Producto ratn duro duro disco disco ...
11.Visualizacindetexto
a.Enpantallacompleta
Nada impide desviar cualquier flujo para visualizarlo en la pantalla o por impresora. Aqu presentamos algunoscomandos.
l pginaporpgina:pg,more,less
l enbloque:cat
l alrevs:tac
l endumphexadecimal:hexdump
l creacindeunbanner:banner
l formateoparaimpresin:pr
- 10 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0Ynbd0rvVwM+ICwA=-enidentnumber
Pgina 13
l numerarlaslneas:catnonl
b.Elprincipiodeunfichero
Paraverelprincipiodelcontenidodeunfichero,utiliceelcomandohead.
head [-c nbcar] [-n nblneas] [fic1...]
Elparmetro-cpermiteprecisarelnmerodebytesdeencabezamientoavisualizar.Pordefectosevisualizandiezlneas.Elparmetro-npermiteindicarelnmerodelneasavisualizar.Esposibleindicardirectamenteelnmerodelneas:
head [-nblneas] [fic1...]
$ head -3 lista Producto objeto precio cantidades ratn ptico 30 15 duro 30giga 100 30
c.Finymododeesperadefichero
Paraverlasltimaslneasdeunfichero,utiliceelcomandotail.
tail [+/-valor[b/c]] [-f] [fic1...]
Aligualqueparahead,pordefectosevisualizanlasdiezltimaslneas.Elvalor-numlneaspermitemodificaresteestado.Usecparaindicarunnmerodecaracteres.Unabindicaunnmerodebloques(512bytesporbloque).
Un+invierteelordendelcomandoyseconvierteenunhead (tail +10 head -n 10).
Finalmente, laopcin -f deja el fichero abierto.Si se insertams informacin en l (por ejemplo, un ficheroderegistros),sevisualizarsucontenidoentiemporealenlapantallahastaqueelusuariolointerrumpademaneravoluntaria([Ctrl]C).
$ tail -5 lista pantalla 19 500 20 teclado 105 45 30 teclado 115 55 30 tarjeta sonido 45 30 tarjeta vdeo 145 30
$ tail -10c lista eo 145 30
d.Darformatoaunasalida
El comandocolumn permite dar formato de tabla a la salida de un comando. La opcin -t determina cuntascolumnas se mostrarn en la salida y aade espacios para alinearlas. La opcin -s permite indicar cul es elseparador.
$ column -s: -t /etc/group root x 0 daemon x 1 bin x 2 sys x 3 adm x 4 seb tty x 5 disk x 6 lp x 7
12.Duplicacindelcanaldesalidaestndar
- 11 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0Ynbd0rvVwM+ICwA=-enidentnumber
Pgina 14
En algunos casos, como por ejemplo en la generacin de ficheros de registros, puede ser necesario colocar elresultadodeuncomandoenunficheroyalavezfiltrarestemismoresultadoconotrocomando.Paraello,utiliceelcomando tee, que permite duplicar el flujo de datos. Este comando lee el flujo de datos que proviene de otrocomandoporel canaldeentrada, loescribeenun ficheroy restituyeeste flujode forma idnticaporel canaldesalida.Pordefecto,elficherogeneradosobrescribeelantiguosiexiste.
tee [-a] nombre_fic
Elparmetro-asignificaappend.Enestecaso,nosesobrescribeelfichero,sinoqueseinsertalainformacinalfinal.Porejemplo,supongamosquequiereobtenerenunficherolalistadelosnombresdeusuarioyquealmismotiemposevisualicesunmeroenlapantalla.
$ cat /etc/passwd | cut -d: -f1 | tee users | wc -l 65 $ cat users root nobody nobodyV daemon bin uucp uucpa auth cron
lp tcb ...
13.Comparacindeficheros
Los dos comandos que permiten comparar el contenido de dos ficheros, o de un fichero y de un flujo, son loscomandosdiffycmp.
a.diff
Elcomandodiffindicalasmodificacionesquehayqueaportaralosdosficherosenentradaparaquesucontenidoseaidntico.
diff [-b] [-e] fic1 fic2
Laopcin-bpermiteignorarlosespacios(blank),ylaopcin-epermitegenerarunscripted(noloutilizaremos).Estecomandodevuelvetrestiposdemensajes:
l APPEND: lnea1 a lnea3,lnea4, ex 5 a 6,8significa:enlalnea5defic1hayqueinsertarlaslneas6a8defic2paraquesuscontenidosseanidnticos.
l DELETE: lnea1,lnea2 d lnea3, ex 7,9 d 6 significa: se deben suprimir las lneas 7 a 9 de fic1, noexistendetrsdelalnea6defic2.
l CHANGE: lnea1,lnea2 c lnea3,lnea4, ex 8,12 c 9,13significa:sedebeintercambiarlaslneas8a12defic1contralaslneas9a13defic2.
En todos los casos, el signo las lneas de fic2concernientes.
$ cat lista Producto objeto precio cantidades ratn ptico 30 15 duro 30giga 100 30 duro 70giga 150 30 disco zip 12 30 disco blando 10 30 pantalla 15 150 20
- 12 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0Ynbd0rvVwM+ICwA=-enidentnumber
Pgina 15
pantalla 17 300 20 pantalla 19 500 20 teclado 105 45 30 teclado 115 55 30 tarjeta sonido 45 30 tarjeta vdeo 145 30
$ cat lista2 Producto objeto precio cantidades ratn botones 30 15 duro 30giga 100 30 duro 70giga 150 30 disco zip 12 30 disco blando 10 30 pantalla 15 150 20 pantalla 17 300 20 pantalla 19 500 20 pantalla 21 500 20 teclado 105 45 30 teclado 115 55 30
Elficherolistaeseloriginal.Enlista2sehamodificadolasegundalnea,sehaaadidounalneapantallaysehansuprimidolasltimasdoslneas.
$ diff lista lista2 2c2 < ratn ptico 30 15 ---
> ratn botones 30 15 9a10 > pantalla 21 500 20 12,13d12 < tarjeta sonido 45 30 < tarjeta vdeo 145 30
l 2c2:sedebenintercambiarlaslneas2delistaylista2(debenconcordaroenpticooenbotones).
l 9a10:despusdelalnea9delista(pantalla19),hayqueaadirlalnea10(pantalla21)delista2.
l 12,13d12: se deben suprimir las lneas 12 y 13 de lista (tarjeta de sonido y vdeo), ya que no existendespusdelalnea12delista2.
b.cmp
Elcomandocmpcomparalosficheroscarcterporcarcter.Pordefecto,elcomandoseparaencuantoencuentralaprimeradiferenciaeindicalaposicin.
cmp [-l] [-s] fic1 fic2
El parmetro -l detalla todas las diferencias en tres columnas. La primera columna representa el nmero decarcterlasegunda,elvaloroctalASCIIdelcarctercorrespondientedefic1,ylatercera,elvaloroctalASCIIdelcarctercorrespondientedefic2.
Laopcin-sdevuelvenicamenteelcdigodeerror(novisible),alquesepuedeaccederporecho$?.
$ cmp lista lista2 lista lista2 differ: char 38, line 2 $ cmp -l lista lista2 38 157 142 39 160 157 40 164 165 41 151 164 42 161 157 43 165 156 44 145 163 182 143 145
- 13 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0Ynbd0rvVwM+ICwA=-enidentnumber
Pgina 16
183 154 143 ...
14.Plazodeespera
Elcomandosleeppermiteesperarelnmerodesegundosindicados.Elscriptseinterrumpeduranteestetiempo:elnmerodesegundosyunenterocomprendidoentre0ycuatromilmillones(136aos).
$ sleep 10
- 14 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0Ynbd0rvVwM+ICwA=-enidentnumber
Pgina 17
Losprocesos
1.Definicinyentorno
Un proceso representa un programa en curso de ejecucin y, al mismo tiempo, todo su entorno de ejecucin(memoria,estado,identificacin,propietario,padre...).
Losdatosdeidentificacindeunprocesoson:
l UnnmerodeprocesonicoPID(ProcessID):senumeracadaprocesoUnixconelfindepoderdiferenciarlodelosotros.Elprimerprocesoiniciadoporelsistemaes1,ysetratadeunprocesollamadogeneralmenteinit.SeutilizaelPIDcuandosetrabajaconunproceso.Iniciar10veceselmismoprograma(mismonombre)produce10PIDdiferentes.
l Un nmero de proceso padre PID (Parent Process ID): cada proceso puede iniciar otros procesos, susprocesos hijos (child process). Cada proceso hijo debe contener, entre toda su informacin, el PID delprocesopadrequeloinici.TodoslosprocesostienenunPPIDsalvoelproceso0,queesunseudoprocesoquerepresentaeliniciodelsistema(creael1init).
l Unnmerodeusuarioyunodegrupo:correspondealUIDyalGIDde lacuentadeusuarioque iniciaelproceso.Elsistemaloutilizaparadeterminar,atravsdelacuenta,lospermisosqueelprocesotieneparaacceder a los recursos. Los procesos hijos heredan ambas cuentas. En algunos casos (que veremosmsadelante)sepuedemodificarestecomportamiento.
l Duracinyprioridaddelproceso: laduracindelprocesocorrespondeal tiempodeejecucinconsumidodesdelaltimainvocacin.Enunentornomultitarea,eltiempodeprocesadorsecomparteentrelosprocesosynotodostienenlamismaprioridad.Losprocesosdemsaltaprioridadsonejecutadosprimero.Cuandounprocesoestinactivo,suprioridadaumentaconelfindetenerlaoportunidaddeserejecutado.Cuandoestactivo, su prioridad baja con el fin de dejar paso a otro. Es el planificador de tareas del sistema el quegestionalasprioridadesylostiemposdeejecucin.
l Directoriode trabajoactivo: trassu inicio, seconfiguraeldirectorioactualdelproceso(desdeel cual seinici).Estedirectorioservirdebaseparalasrutasrelativas.
l Ficheros abiertos: tabla de los descriptores de ficheros abiertos. Por defecto al principio slo hay trespresentes:0,1y2 (los canalesestndares).Concadaaperturade ficheroodenuevocanal, la tabla serellena.Alcierredelproceso,secierranlosdescriptores(enprincipio).
l Puedeencontrarmsinformacin,comoeltamaodelamemoriaasignada,lafechadeiniciodelproceso,elterminaldeatribucin,elestadodelproceso,losUIDefectivoyreal,ascomolosGIDefectivoyreal.
2.Estadosdeunproceso
Durantesuvida(tiempoentreelinicioylasalida)unprocesopuedepasarpordiversosestadosoprocessstate:
l ejecucinenmodousuario(usermode)
l ejecucinenmodoncleo(kernelmode)
l enesperaE/S(waiting)
l dormido(sleeping)
l listoparalaejecucin(runnable)
l dormidoenelswap(memoriavirtual)
l nuevoproceso
- 1 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0YsKJ3MvVwM+ICwA=-enidentnumber
Pgina 18
l findeproceso(zombie).
3.Ejecucinensegundoplano
Segnlovistoanteriormente,dadoqueelentornodetrabajoesmultitarea,hayundeterminadonmerodeprocesosque seejecutanyaen sumquina sinqueusted lovea.Delmismomodo,el shell queutilizaesen smismaunproceso.Cuandoinsertauncomando,elshellcreaunnuevoprocesoparaejecutarlo,esteprocesoseconvierteenunprocesohijodelshell.Unaveziniciado,hayqueesperaralfinaldesuejecucinparainiciarelsiguiente(exceptoutilizandoparaencadenarloscomandos).
Nada impide al shell esperar el mensaje del proceso terminado para dejar paso: de hecho, una vez iniciado elcomando,elshellpuedeautorizarlainsercindeunnuevocomandosinesperarelfinaldelaejecucindelcomandoanterior.Paraello,bastainsertar,despusdehabertecleadoelcomando,elampersand&.Enestecaso,elshellyelcomandoiniciadofuncionarnenparalelo.
$ ls -R / > ls.txt 2/dev/null & [1] 21976 $ [1] Done ls -l -R / > ls.txt 2/dev/null $ ls fic1 fic3 lista ls.txt dir1 users fic2 fic4 lista2 mypass pepito.tar.gz
Justodespusde la insercin, apareceuna cifra.Hayque recordarlo, yaque se tratadel PIDdel nuevoprocesoiniciadoensegundoplano.Despusdeotrainsercin,unlneaDoneindicaqueeltratamientosedaporfinalizado.Elvalor[1]espropiodeunshellparticular(ksh).
Algunasobservacionesencuantoalusodelinicioensegundoplano:
l Elproceso iniciadoen segundoplanonodeberaesperar serotro shell, dadoque seproducira confusinentreestecomandoyelpropioshell.
l Elprocesoiniciadonodeberamostrarresultadosenlapantallaporqueentraranenconflictoconlosdelshell(porejemplo,aparicindeunalneaenmediodeunainsercin).
l Finalmente,cuandosesaledelshell,sesaletambindetodossushijos:enestecaso,noabandoneelshellenmitaddeunprocesamientoimportante.
4.Background,foreground,jobs
Puederetomarelcontroldelshellsihainiciadounprocesoensegundoplano.Puedepararlodemaneratemporaltecleando[Ctrl]Z:
$ sleep 100 [1]+ Stopped sleep 100
- 2 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0YsKJ3MvVwM+ICwA=-enidentnumber
Pgina 19
Sehaparadoelproceso:sehasuspendidosuejecucinhastaquevuelvaaponerloenprimerplanoconelcomandofg(foreground):
$ fg sleep 100
Cuandoejecutauncomando,obtieneunnmeroentrellaves:eselnmerodejob.Puedeobtenerunalistadetodaslastareasconelcomandojobs.
$ jobs [1]- Stopped sleep 100 [2]+ Stopped sleep 100
Loscomandosbgyfgpermitenactuarenestosjobstomandocomoparmetrosunmero.Seejecutaelcomandobgenunjobparadoparainiciarlodenuevoensegundoplano.Sevuelveainiciareljob2ensegundoplano:
$ bg 2 [2]+ sleep 100 & $ [2]+ Done sleep 100
5.Listadelosprocesos
Elcomandops(processstatus)permiteobtenerinformacinsobrelosprocesosencurso.Siseejecutasolo,visualizanicamentelosprocesosencursoiniciadosporelusuarioydesdelaconsolaactual.
$ ps PID TTY TIME CMD 4334 pts/1 00:00:00 bash 5017 pts/1 00:00:00 ps
Paraobtenermsinformacin,utiliceelparmetro-f.
ps -f UID PID PPID C STIME TTY TIME CMD seb 4334 24449 0 09:46 pts/1 00:00:00 /bin/bash seb 5024 4334 0 10:51 pts/1 00:00:00 ps -f
Elparmetro-edainformacinsobretodoslosprocesosencurso.
$ ps -ef UID PID PPID C STIME TTY TIME CMD ...
seb 26431 1 0 Mar04 ? 00:00:30 kded [kdeinit] seb 26436 26322 0 Mar04 ? 00:00:03 kwrapper ksmserver seb 26438 1 0 Mar04 ? 00:00:00 ksmserver [kdeinit] seb 26439 26424 0 Mar04 ? 00:00:50 kwin [kdeinit seb 26441 1 0 Mar04 ? 00:00:28 kdesktop [kdeinit] seb 26443 1 0 Mar04 ? 00:03:40 kicker [kdeinit] seb 26453 1 0 Mar04 ? 00:00:00 kerry [kdeinit seb 26454 26424 0 Mar04 ? 00:00:01 evolution seb 26465 26424 0 Mar04 ? 00:00:11 kde-window-decorator seb 26467 1 0 Mar04 ? 00:00:02 gconfd-2 12 seb 26474 1 0 Mar04 ? 00:00:01 knotify [kdeinit] seb 26485 1 0 Mar04 ? 00:03:06 beagled ...
Elparmetro-upermiteprecisarunalistadeunoovariosusuariosseparadosporunacoma.Elparmetro-gefectalomismoperoparalosgrupos,-tparalosterminalesy-pparaunosPIDdeterminados.
$ ps -u root PID TTY TIME CMD 1 ? 00:00:05 init 2 ? 00:00:00 kthreadd 3 ? 00:00:00 migration/0 4 ? 00:00:09 ksoftirqd/0
- 3 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0YsKJ3MvVwM+ICwA=-enidentnumber
Pgina 20
5 ? 00:00:23 events/0 6 ? 00:00:00 khelper 25 ? 00:00:00 kblockd/0 26 ? 00:00:00 kacpid 27 ? 00:00:00 kacpi_notify 130 ? 00:00:00 cqueue/0 131 ? 00:00:00 kseriod 156 ? 00:00:22 kswapd0 157 ? 00:00:00 aio/0...
Finalmenteelparmetro-lofrecemsinformacintcnica.
$ ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 1000 4704 24449 0 75 0 - 1213 wait pts/3 00:00:00 bash
Acontinuacinpresentamoseldetalledealgunascolumnas.
6.Paradadeunproceso/seales
Esposibledetenerunprocesoenprimerplanoconlacombinacindeteclas[Ctrl]Z.Cuandounprocesoseejecutaensegundoplano,nolopuedepararcualquiercombinacindeteclas,almenosqueseutiliceelgestordejobsconfgybg.Puede resultarnecesariomandarle sealesespecialesaeseprocesoensegundoplano.Paraello,hayqueemplear el comando kill. A diferencia de lo que parece indicar su nombre, el papel de este comando no esobligatoriamentedestruiroterminarunproceso(recalcitranteono),sinomandarsealesalosprocesos.
kill [-l] -Num_seal PID [PID2...]
Lasealesunodelosmediosdecomunicacinentrelosprocesos.Cuandosemandaunasealaunproceso,stedebeinterceptarlayreaccionarenconsecuencia.Sepuedenignoraralgunasseales,perootrasno.SegnlosUnix,sedisponedeunnmeromsomenosimportantedeseales.Senumeranynombranlasseales,perocuidado:sibien los nombres suelen ser comunes de un Unix a otro, los nmeros no lo son obligatoriamente. La opcin -lpermiteobtenerlalistadelasseales.
Columna Definicin
UID UserID,nombredelusuario.
PID ProcessID,nmerodelproceso.
PPID ParentProcessID,nmerodelprocesopadre.
C Factordeprioridad,cuantomsgrandeeselvalor,mselevadaeslaprioridad.
STIME Horadeiniciodelproceso.
TTY Nombredelterminaldesdeelcualseejecutelproceso.
TIME Duracindetratamientodelproceso.
CMD Comandoejecutado.
F Banderasdelproceso(saledelmbitodeestelibro).
S EstadodelprocesoS(sleeping)R(running)Z(zombie).
PRI Prioridaddelproceso.
NI Nice,incrementoparaelscheduler.
Seal Papel
- 4 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0YsKJ3MvVwM+ICwA=-enidentnumber
Pgina 21
$ sleep 100& [1] 5187 $ kill 5187 $ [1]+ Completado sleep 100 $ sleep 100& [1] 5194 $ kill -9 5194 [1]+ Proceso parado sleep 100
7.nohup
Cuandosesaledelshell(exit,[Ctrl]D...)semandalaseal1SIGHUPaloshijosparaqueterminenellostambin.Cuandoseiniciaunprocesolargoensegundoplanoyelusuarioquieresalirdelshell,entoncesseparaesteprocesoyhabrquevolveraempezarlo.Lamaneradeevitarestoesiniciarelprocesoconelcomandonohup.Enestecaso,elprocesoiniciadonoreaccionarmsalasealSIGHUP,yporlotantopodrsalirdelshell,elcomandoseguirsuejecucin.
Pordefecto,loscanalesdesalidayerrorestndaresseredirigenhaciaunficheronohup.out,salvosiseprecisalaredireccindemaneraexplcita.
$ nohup ls -lR / & 10206 $ Sending output to nohup.out
Cuandounprocesohijofinaliza,mandaunasealSIGCHLDasuprocesopadre.Salvocasoexcepcional(unproceso padre desvinculado del hijo), el proceso padre debe obtener tantosSIGCHLD comohijos inici o
comoSIGHUPemiti.Sielpadreterminaantesqueloshijos,stosseconvertirnenprocesoszombis:lassealesSIGCHLD son enviadas a... nadie. El proceso hijo ha finalizado correctamente, hamuerto, no consume ningnrecurso.Noselopuedematar(yaqueestmuerto),perosigueocupandounaentradaenlatabladelosprocesos.initlorecupera,ycomoestsiempreenespera,elzombipuedeterminarpordesaparecer.
8.niceyrenice
El comando nice permite iniciar un comando con una prioridadms baja para permitir a otros posibles procesosejecutarsemsrpidamente.
nice [-valor] comando [argumentos]
Unvalorpositivocausarunabajadadeprioridadunonegativo,elaumentodelaprioridad(siestautorizado).Elvalordebeestarcomprendidoentre20y20.Cuantomselevadoeselvalor,menoreslaprioridad.
$ nice -10 ls -lR / >lista 2>/dev/null& 10884 $ ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 80808001 U N+ 75 10884 10822 28.5 54 10 0 848K aa3b3a9c ttyp4 0:03.32 ls
1(SIGHUP) ElpadremandaHangUpatodossushijoscuandotermina.
2(SIGINT) Interrupcindelprocesopedido(tecla[Supr],[Ctrl]C).
3(SIGQUIT) demSIGINT,perocongeneracindeunCoreDump(ficherodedepuracin).
9(SIGKILL) Sealquenosepuedeignorar,fuerzaelprocesoaterminardemaneraexpeditiva.
15(SIGTERM) Sealmandadapordefectoporelcomandokill.Pidealprocesoterminarconnormalidad.
- 5 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0YsKJ3MvVwM+ICwA=-enidentnumber
Pgina 22
Elcomandorenicefuncionaunpococomonice,peropermitemodificarlaprioridadenfuncindeunusuario,ungrupoounPID.Elprocesodebeestaryaejecutndose.
renice [-n prio] [-p] [-g] [-u] ID
Laprioridaddebeestarentre20y20.Elusuarioestndarslopuedeutilizarlosvaloresentre0y20quepermitenbajarlaprioridad.Laopcin-pprecisaunPID,-gunGIDy-uunUID.
9.time
El comando timemide las duraciones de ejecucin de un comando, lo que es ideal para conocer los tiempos deejecucin,ydevuelvetresvalores:
l real:duracintotaldeejecucindelcomando
l user:duracindeltiempodeCPUnecesarioparaejecutarelprograma
l system:duracindeltiempodeCPUnecesarioparaejecutarloscomandosrelacionadosconelOS(llamadasalsistemadentrodeunprograma).
Elresultadoapareceporelcanaldeerrorestndar2.Sepuedetenerunaindicacindelacargadelamquinaporelclculoreal/(user+system).Sielresultadoesinferiora10,lamquinadisponedeunbuenrendimientomsallde20,lacargadelamquinaesdemasiadopesada(rendimientoreducido).
$ time ls -lR /home ...
real 4.8 user 0.2 sys 0.5
- 6 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0YsKJ3MvVwM+ICwA=-enidentnumber
Pgina 23
Mstodavadelbash
1.Alias
Un alias es un atajo a un comando y a sus posibles parmetros. Se define con el comandoalias. Utilizado sinargumentos,listalosaliasdisponibles.
$ alias alias ..=cd .. alias ...=cd ../.. alias cd..=cd .. alias dir=ls -l alias l=ls -alF alias la=ls -la alias ll=ls -l alias ls=ls $LS_OPTIONS alias ls-l=ls -l alias md=mkdir -p alias o=less alias rd=rmdir ...
Ustedpuedecrearsuspropiosalias.
$ alias deltree=rm -rf
2.Agrupacindecomandos
Elencadenamientodecomandosesposiblecon.Tambinesposibleagruparloscomandos.Cuandoejecutaloscomandossiguientes:
$ uname -a ; pwd ; ls -l >resultado.txt &
Se ejecuta nicamente el ltimo comando en segundo plano y slo se redirecciona su resultado en el ficheroresultado.txt.Unasolucinsera:
$ uname -a >resultado.txt & ; pwd >>resultado.txt & ; ls -l >>resultado.txt & [1] 18232 [2] 18238 [3] 18135
Esunasolucincomplejaynofuncionarsiempre.Adems,inclusosiseinicianloscomandosdemanerasecuencial,seejecutantodosenparalelo.Elprimeroquefinaliceserelprimeroenescribirenelfichero.Lasolucinconsisteenutilizarparntesis.
$ (uname -a ; pwd ; ls -l) > resultado.txt & [1] 18239 $ [1] Done ( uname -a; pwd; ls -l ) > resultado.txt
Entodosloscasos,seiniciantodosloscomandoscolocadosentreparntesisconunsubshell,queluegoejecutarloscomandosprecisadosdemanerasecuencialtalcomoestindicado.As,laredireccinconciernealconjuntodeloscomandos y nada impide lanzar este subshell en segundo plano.De hecho, se distingue claramente un solo PID18239durantelaejecucindeloscomandos.
Otraposibilidadconsisteenutilizar llaves{...}.Enestecaso,noseejecutarningnsubshell,ysiseejecutauncomandointerno(cduotro),conciernealshellactivo.Sedebecolocarlallavedecierrejustodespusdeun.
$ { uname -a; pwd; ls -l; } > resultado.txt
Sepuedecomprobarladiferenciafcilmenteentrelasdossintaxisconexit.Elprimerejemploparecenohacernada,mantenindoseenelshellhijo.Elsegundosaledesushell.
- 1 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0Yr5VJ+7VwM+ICwA=-enidentnumber
Pgina 24
$ (exit) $ { exit; }
Cuidado con los parntesis, en particular en programacin. Como se lanza la agrupacin dentro de otroproceso,lasposiblesvariablesmodificadasdentrodelaagrupacinnosernvisiblesunavezterminadala
ejecucin.
3.Relacinyejecucincondicional
Adems del encadenamiento clsico, se puede relacionar y ejecutar los comandos de manera condicional. Lacondicindeejecucindeuncomandoeselxitoonodelanterior.Unavezejecutado,cadacomandodevuelveuncdigoderetorno,engeneral0sitodohasalidobien,1o2encasodeerror.Elshellpuederecuperarestevalorconlavariable$?.
$ ls ...
$ echo $? 0
Loscaracteres&&y||permitenefectuarunaejecucincondicional.
comando1 && comando2 comando1 || comando2
Seejecutarelcomandocolocadodespusde&&nicamentesielcomandoanteriorhadevuelto0(xito).Sloseejecutarelcomandocolocadodespusde||sielcomandoanteriorhadevueltoalgodiferentea0.
$ grep "ratn" lista && echo "Ratn encontrado" || echo "Ratn no encontrado" ratn ptico 30 15 Ratn encontrado $ grep "memoria" lista && echo "Memoria encontrada" || echo "Memoria imposible de encontrar" Memoria imposible de encontrar
- 2 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0Yr5VJ+7VwM+ICwA=-enidentnumber
Pgina 25
Lasvariables
Se distinguen tres tipos: usuario, sistema y especiales. El principio consiste en poder asignar un contenido a unnombredevariable,engeneralunacadenadecaracteresovaloresnumricos.
1.Nomenclatura
Unnombredevariablesobedeceaciertasreglas:
l Sepuedecomponerdeletrasminsculas,maysculas,cifras,caracteresdesubrayado.
l Elprimercarcternopuedeserunacifra.
l Eltamaodeunnombresueleserilimitado(peronohayquepasarsetampoco).
l Las convenciones quieren que las variables de usuario estn en minsculas para diferenciarlas de lasvariablesdesistema.Aeleccindelusuario.
2.Declaracinyasignacin
Sedeclaraunavariableencuantoseleasignaunvalor.Seefectalaasignacinconelsigno=,sinespacioantesnidespusdelsigno.
var=Hola
3.Accesoyvisualizacin
Puedeaccederalcontenidodeunavariablecolocandoelsigno$delantedelnombredelavariable.Cuandoelshellencuentrael$,intentainterpretarlapalabrasiguientecomosifueraunavariable.Siexiste,entoncessesustituyeel$nombre_variableporsucontenido,oporuntextovacoenelcasocontrario.Sehablatambindereferenciadodevariable.
$ ruta=/tmp/seb $ ls $ruta ...
$ cd $ruta $ pwd /tmp/seb $ cd $ruta/dir1 $ pwd /tmp/seb/dir1
Paravisualizar la listade lasvariables, seutilizael comandoenv.Muestra lasvariablesdeusuarioydesistema,nombreycontenido.
$ env LESSKEY=/etc/lesskey.bin NNTPSERVER=news INFODIR=/usr/local/info:/usr/share/info:/usr/info MANPATH=/usr/local/man:/usr/share/man KDE_MULTIHEAD=false SSH_AGENT_PID=26377 HOSTNAME=p64p17bicb3 DM_CONTROL=/var/run/xdmctl XKEYSYMDB=/usr/share/X11/XKeysymDB HOST=p64p17bicb3 SHELL=/bin/bash TERM=xterm PROFILEREAD=true
- 1 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0YoYSgv7VwM+ICwA=-enidentnumber
Pgina 26
HISTSIZE=1000 ...
Unavariablepuedecontenercaracteresespeciales,particularmenteelespacio.Elejemplosiguientenofunciona:
$ c=Hola amigos : not found $ echo $c
Para hacer que funcione, hay que cerrar los caracteres especiales uno por uno, o colocarlos entre comillas oapstrofes.
c=Hola\ Amigos # Solucin pesada c="Hola amigos" # Solucin correcta c=Hola amigos # Solucin correcta
Laprincipaldiferenciaentrelascomillasylosapstrofeseslainterpretacindelasvariablesydelassustituciones."ysecierranmutuamente.
$ a=Julio $ b=Csar $ c="$a $b conquist la Galia" $ d=$a $b conquist la Galia $ echo $c Julio Csar conquist la Galia $ echo $d $a $b conquist la Galia $ echo "Linux es genial" Linux es genial $ echo Linux "demasiado bien" Linux "demasiado bien"
4.Supresinyproteccin
Sesuprimeunavariableconelcomandounset.Puedeprotegerunavariableenmodoescrituraycontrasusupresinconelcomandoreadonly.Unavariableenmododeslolectura,inclusovaca,esexclusiva.Noexisteningnmediodesustituirlaenescrituraydesuprimirla,salvosaliendodelshell.
$ a=Julio $ b=Csar $ echo $a $b Julio Csar $ unset b $ echo $a $b Julio $ readonly a $ a=Nern a: is read only $ unset a a: is read only
5.Export
Pordefectounavariableesaccesiblenicamentedesdeelshelldondehasidodefinida.Elsiguienteejemplodeclaralavariableaenelentornodelshellactualyluegotratadevisualizarsuvaloratravsdeunscriptlanzadodesdeestemismoshell.Elscriptnoreconocelavariablea:nosevisualizanada.
$ a=Julio $ echo echo "a=$a" > ver_a.sh $ chmod u+x ver_a.sh $ ./ver_a.sh a=
El comandoexport permite exportar una variable demanera que su contenido sea visible por los scripts y otrossubshells. Se puedenmodificar las variables exportadas en el script, pero estasmodificaciones slo se aplican al
- 2 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0YoYSgv7VwM+ICwA=-enidentnumber
Pgina 27
scriptoalsubshell.Estavez,elprimerscriptpuedeaccederalavariableaexportada.Perolasmodificacionessiguenlocalesenelscript.Unavezstehaterminado,lamodificacindesaparece.
$ export a $ ./ver_a.sh a=Julio $ echo a=Nern ; echo "a=$a" >> ver_a.sh $ ./ver_a.sh a=Julio a=Nern $ echo $a Julio
6.Llaves
Lasllavesbsicas{}permitenidentificarelnombredeunavariable.Imaginemoslavariableficheroquecontieneelnombredeficherolista.Ustedquierecopiarlista1enlista2.
$ fichero=lista $ cp $fichero1 $fichero2 cp: operando fichero que falta Para saber ms, haga: cp --help.
Nofunciona,yaquenoseinterpreta$ficherosino$fichero1y$fichero2,quenoexisten.
$ cp ${fichero}2 ${fichero}1
Enestecaso,estalneaequivalea:
$ cp lista2 lista1
7.Llavesysustitucincondicional
Lasllavesdisponendeunasintaxisparticular.
{variable:Sustitucin}
Segnelvalorolapresenciadelavariable,esposiblesustituirsuvalorporotro.
$ echo $nombre
$ echo ${nombre:-Juan} Juan $ echo $nombre
$ echo ${nombre:=Juan}
Sustitucin Significado
{x:-texto} Silavariablexestvacaoesinexistente,eltextocogersusitio.Encasocontrario,eselcontenidodelavariableelqueprevaldr.
{x:=texto} Silavariablexestvacaoesinexistente,eltextocogersusitioyseconvertirenelvalordelavariable.
{x:+texto} Silavariablexestdefinidaynovaca,eltextocogersusitio.Enelcasocontrario,unacadenavacacogesulugar.
{x:?texto} Silavariablexestvacaoesinexistente,seinterrumpeelscriptysevisualizaelmensajedetexto.Sieltextoestausente,sevisualizaunmensajedeerrorestndar.
- 3 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0YoYSgv7VwM+ICwA=-enidentnumber
Pgina 28
Juan $ echo $nombre Juan $ echo ${nombre:+"Valor definido"} Valor definido $ unset nombre $ echo ${nombre:?Variable ausente o no definida} nombre: Variable ausente o no definida $ nombre=Juan $ echo ${nombre:?Variable ausente o no definida} Juan
8.Variablesdesistema
Ademsdelasvariablesqueelusuariopuededefinirporsmismo,seiniciaelshellconunciertonmerodevariablespredefinidas tiles para ciertos comandos y accesibles por el usuario. Se puedemodificar el contenido de estasvariables de sistema, pero hay que ser cuidadoso, ya que algunas tienen una incidencia directa sobre elcomportamientodelsistema.
9.Variablesespeciales
Variable Contenido
HOME Rutadeaccesodeldirectoriodeusuario.DirectoriopordefectoencasodeusodeCD.
PATH Listadedirectorios,separadospor:,dondeelshellvaabuscarloscomandosexternosyotrosscriptsybinarios.Labsquedasehaceenelordendelosdirectoriosinsertados.
PS1 PromptString1,cadenaquerepresentaelpromptestndarvisualizadoenlapantallaporelshellenesperadeinsercindecomando.
PS2 PromptString2,cadenaquerepresentaunpromptsecundarioencasodequesedebacompletarlainsercin.
IFS InternalFieldSeparator,listadeloscaracteresqueseparanlaspalabrasenunalneadecomandos.Pordefectosetratadelespacio,delatabulacinydelsaltodelnea.
MAIL Rutayficheroquecontienelosmensajesdelusuario.
SHELL Rutacompletadelshellencursodeejecucin.
LANG Definicindelidiomaautilizar,ascomodeljuegodecaracteres.
USER Nombredelusuarioencurso.
LOGNAME Nombredelloginutilizadodurantelaconexin.
HISTFILE Nombredelficherodelhistorial,engeneral$HOME/.sh_history.
HISTSIZE Tamaoennmerodelneasdelhistorial.
OLDPWD Rutadeaccesodeldirectorioalquesehaaccedidoanteriormente.
PS3 Definelalneadecomandosparaescribirunselect.
PWD Rutaactual.
RANDOM Generaycontieneunnmeroaleatorioentre0y32767.
- 4 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0YoYSgv7VwM+ICwA=-enidentnumber
Pgina 29
Setratadevariablesaccesiblesnicamenteparalecturaycuyocontenidosuelesercontextual.
$ echo $$ 23496 $ grep memoria lista $ echo $? 1 $ grep ratn lista ratn ptico 30 15 $ echo $? 0 $ ls -lR >pepito.txt 2>&1 & 26675 $ echo $! 26675
10.Longituddeunacadena
Esposibleobtenerlalongituddeunacadenaconelcarcter#.
$ a=Julio $ echo "Longitud de $a: ${#a}" Longitud de Julio: 5
11.Tablasycampos
Linuxcuentacondosmediosparadeclararunatabla:lautilizacindeloscorchetes[ ]ylacreacinglobal.Elprimerelementoes0elltimo,1023.Paraaccederalcontenidodelatabla,hayqueponerlavariableYelelementoentrellaves{}.
$ Nombre[0]="Julio" $ Nombre[1]="Romn" $ Nombre[2]="Francisco" $ echo ${Nombre[1]} Romn
o:
$ Nombre=(Julio Romn Francisco) $ echo ${nombre[2]} Francisco
Paralistartodosloselementos:
$ echo ${Nombre[*]} Julio Romn Francisco
Paraconocerelnmerodeelementos:
$ echo ${#Nombre[*]} 3
Variable Contenido
$? Cdigoderetornodelltimocomandoejecutado.
$$ PIDdelshellactivo.
$! PIDdelltimoprocesoiniciadoensegundoplano.
$- Lasopcionesdelshell.
- 5 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0YoYSgv7VwM+ICwA=-enidentnumber
Pgina 30
Sielndiceesunavariable,nosepone$delante:
$ idx=0 $ echo ${Nombre[idx]} Julio
12.Variablestipadas
Lasvariablespuedenserdetiponumricoentero(integer)conelcomandotypeset i.Laventajaesquepermiteefectuarclculosycomparacionessinpasarporexpr.Elcomandoleto((...))permiteclculossobrevariables.
$ typeset -i resultado $ resultado=6*7 $ echo $resultado 42 $ resultado=Error ksh: Error: bad number $ resultado=resultado*3 126 $ typeset -i add $ add=5 $ let resultado=add+5 resultado=resultado*add $ echo $resultado 50
Operador Papel
+ - * / Operacionessencillas
% Mdulo
< > = Comparaciones,1siverdadero,0sifalso
== != Igualodiferente
&& || Comparacionesrelacionadasconunoperadorlgico& | ^ LgicobinarioANDORXOR
- 6 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0YoYSgv7VwM+ICwA=-enidentnumber
Pgina 31
Configuracindelbash
1.Ficherosdeconfiguracin
Sepuedelanzarelshellbashenvariosmodos:
l shellinteractivadeconexin(loginshell)
l shellinteractivasimple
l shellnointeractiva
l elmodosh
l etc.
Segnsumododelanzamiento,elshellvaabuscaryejecutarvariosscriptsyficherosdeconfiguracin.Unficherodeconfiguracin es un script de shell, una secuencia de comandos individuales que tiene como meta configurar elentornodelusuario.
a.Shelldeconexin
Selanzaelshelldeconexindespusdelainsercindelloginydelacontraseaenlaconsola.Correspondealquesehaprecisadoal finaldecada lneade/etc/passwd.Enestemodo,elshellbuscaejecutar,enesteordenysiestnpresentes:
l /etc/profile
l ~/.bash_profile
l ~/.bash_login
l ~/.profile
Enelmomentodedesconectarse,intentaejecutar:
l ~/.bash_logout
b.Shellsimple
El shell interactivo simple corresponde a la ejecucin del bash en una ventana (xterm, konsole), una consola omanualmente(teclearbashenunaconsola).Enestecaso,sloseejecutarelficherosiguientesiexiste:
l ~/.bashrc
Observe que en muchas distribuciones Linux, .bashrc es llamado o bien por .bash_profile, o bien poretc/profileyqueporlotantoeslaconfiguracinubicadaen.bash_profilelaquesiempreserinvocada.
c.ModoBourneshell
CuandoseiniciaelbashenmodoBourneShellmedianteelcomandosh,enshelldeconexinono,intentaejecutarlosficherosenesteorden:
- 1 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0YugA6QvWwM+ICwA=-enidentnumber
Pgina 32
l /etc/profile
l ~/.profile
d.Modonointeractivo
Sepuedeiniciarelshellenmodointeractivo.Sueleserelcasocuandoustedejecutaunscript.Enestecaso,nohayningn script ejecutado por defecto en el momento del inicio salvo si usted especifica una variable llamadaBASH_ENVquecontienelarutadeunscript.Enestecasobashcargayejecutaesteficheroantesdecomenzarconlaejecucindelscriptodelcomando.
2.Comandosset
Elshelldisponedeunadecenasdeopcioneslamayoradeellassepuedenconfigurarconlaayudadelcomandoset.Lasquesiguenrepresentanunmeroresumen.Elantesdeunaopcinlaactiva.Un+ladesactiva.
Elmanualdelshellleproporcionartodaslasopcionesposibles.
Opcin Resultado
a/oallexport Seexportarntodaslasvariablesdemaneraautomtica.
u/onounset Pordefecto,elshelltratalasvariablesinexistentescomocadenasvacas.Estaopcinproduceunerrorsilavariablenoexiste.
x/oxtrace Muestratodosloscomandosamedidaqueseejecutan:idealalprincipiodelscriptparadepuracin.
ovi Usodelalneadecomandosconlasintaxisdevi.
oemacs Usodelalneadecomandosconlasintaxisdeemacs.
C/onoclobber Prohbelasredireccionesensalidasielficheroyaexiste.
history Autorizalagestindelhistorial.
- 2 - ENI Editions - All rights reserved - Noe Fernando Solis May
enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAABGNjA5ODQ4IC0gTm9lIEZlcm5hbmRvIFNvbGlzIE1heSAtIDg2MTk1YmFjLTFkOTEtNGQzZC05YzE5LTU2NGNkOWE5YWY0YugA6QvWwM+ICwA=-enidentnumber
Pgina 33
5.1_Requisitos y objetivos(1)5.2_El shell bash(1)5.3_La gestion de los ficheros(1)5.4_Buscar ficheros(1)5.5_El editor vi(1)5.6_Redirecciones(1)5.7_Filtros y herramientas(1)5.8_Los procesos(1)5.9_Mas todavia del bash(1)5.10_Las variables(1)5.11_Configuracion del bash(1)5.12_Programacion shell(1)5.13_SQL(1)