Vous êtes sur la page 1sur 131

MANUALDELINUXWWW.ZONASIETE.

ORG
Tabladecontenidos
1.Introduccin
IntroduccinaGNU/Linux,historiayculturadelSoftwareLibre
Sobreestemanual
ConceptosbsicosGNU/Linux
ElarranquedeLinux
Elsistemadearchivos
NombresdearchivosenLinux
ElsoftwareadicionalparaGNU/Linux
Losusuariosylospermisosdearchivos
ElarranquedeLinuxII
Nombramientodedispositivosyparticiones
2.Guainicialparalainstalacindeunadistribucin
Antesdeinstalar
Hardware
QuedarnosconloqueyatenemosennuestroPC
Elegirladistribucinqueinstalaremos
Guiasgeneralesparalainstalacin
RedimensionadodeparticionesWindowsconfips
Otrosconsejostiles
3.TerminaloSHELL
ConceptosbsicosdelaterminalBASH
Lasvariablesdeentorno.LavariablePATH
ComandosbsicosenlaterminalBASH
Referenciasrelativas
Elcomandocd
Archivosydirectorios
4.VIMbsico
Conceptosbsicos
CmofuncionaVIM?
ModoEdicin
Modocomandos
Elmodoespecial:VISUAL
~/.vimrc
Obtenerayuda
5.UsuariosyGrupos.Permisos
Usuarios
AdministracindeUsuarios.
Grupos
Administracindegrupos
Permisosydueos
Elcomandosu
SUID
sudo
6.Entradaysalida
Introduccinalosconceptosdeentradaysalida

Comandosprincipalesasociadosconlasalida
Pipesotuberas
OtrasutilidadesydetallesdelaE/Senelshell
moreyless
Comandostilesdeless
stderryotrasredirecciones
7.Introduccinalshellscripting
Nuestroprimerscriptenbash
Variables
Comandosposibles
Conceptodevalorderetorno
Pasaryprocesarargumentos
Evaluacindecondiciones
Estructurascondicionalesconif
Comprobarelvalordeunavariableconcase
Bucles
Buclesconfor
Buclesconwhile
Funciones
Unejemplocompleto
Conclusiones
8.InstalacindeSoftwareadicional
Introduccin
Mtodosdeinstalacin
Escogiendonuestromtodo(binariosvs.fuentes)
Binarios
Fuentes
Desinstalandoloinstalado
Binarios
Fuentes
UtilidadesGrficas
Consideracionessobreseguridad
Sistemasdepaquetesymanejodelibreras
ldconfigymssobrelibreras
9.Otroscomandostiles
Introduccin
ComandosrelacionadosconlaE/S
heady
tail
Elcomandocut
AlgunosotroscomandosrelacionadosconlaE/S
Comandosrelacionadosconlamemoriayeldisco
df
GestindememoriaRAMenLinuxyfree
du,usodelespaciodedisco
mc
file
Comandostilesvarios
gcc,elcompiladordeC
uname

which
touch
Comandosdeinformacinsobreusuarios,tiempoyfecha
Buscararchivos:find
y
locate
Usodefind
Usodelocate
manylaspginasdelmanual
Apagaryreiniciarlamquinadesdeelshell
10.PersonalizacindelshellBASH
Introduccin
Variablesinteresantes.PersonalizacindelPrompt.
Alias
Ficherosasociados
11.Procesos.Seales.
IntroduccinyConceptosBsicossobreProcesosyTareas
Procesos
Propiedadesdelosprocesos
Mostrandolosprocesosenejecucinysuspropiedades.
TareasdeBash.Programasenprimerysegundoplano.
Seales.
Prioridaddelosprocesos.Elcomandonice
12.Utilidadesdecompresinyempaquetadodeficherosydirectorios.
Introduccin
Visingeneraldelproblemaysusolucin
Utilidadesparalalneadecomandos
Comprimirydescomprimirunsolofichero
Comprimirydescomprimirdirectorioscompletos
Todojunto
Descomprimiendootrosformatos
13.Expresionesregularesysed
.
Introduccin
Pero,quessed
?
Y,qusonlasexpresionesregulares?
Muybonito,pero,cmofuncionatodoesto?
Primerospasosconsed
Conociendoalasexpresionesregulares
Ejemplosmselaboradosydivertidos
14.Scriptsdeiniciodelsistemayejecucinprogramadadecomandos.
Introduccin
Scriptsdeiniciodelsistema.Runlevels
Qusonlosrunlevels

.Directorios
init,elprimerproceso
Elficherodeconfiguracindeinit
:
/etc/inittab

Cambioderunlevel
Relecturadelficherodeconfiguracin
Modomonousuario
Msinformacin
Servicios,demonios
Quson

Aadiryquitarserviciosaunrunlevel
Arrancarypararserviciosporseparado
Crond,ejecucinprogramadaoperidicadecomandos
Ques?
Yestocmofunciona?
15.ShellscriptingII.
Introduccin
Glosariodetrminos
A.ZonaSiete.ORGEditorsTeam
Editoresenactivo
Editoresretirados
Colaboradores
B.GNUFreeDocumentationLicense
PREAMBLE
APPLICABILITYANDDEFINITIONS
VERBATIMCOPYING
COPYINGINQUANTITY
MODIFICATIONS
COMBININGDOCUMENTS
COLLECTIONSOFDOCUMENTS
AGGREGATIONWITHINDEPENDENTWORKS
TRANSLATION
TERMINATION
FUTUREREVISIONSOFTHISLICENSE
ADDENDUM:HowtousethisLicenseforyourdocuments
Listadetablas
1.1.EstructuradedirectoriosenLinux
4.1.ComandosmsusualesenVIM
6.1.rdenesmscomunesdeless
10.1.Combinacionesdecoloresenbash
13.1.Listadewildcardsparaexpresionesregulares
14.1.Valorespara

/etc/crontab

Captulo 1. Introduccin
Tabladecontenidos
IntroduccinaGNU/Linux,historiayculturadelSoftwareLibre
Sobreestemanual
ConceptosbsicosGNU/Linux
ElarranquedeLinux
Elsistemadearchivos
NombresdearchivosenLinux
ElsoftwareadicionalparaGNU/Linux
Losusuariosylospermisosdearchivos
ElarranquedeLinuxII
Nombramientodedispositivosyparticiones

EnestaparteteponemosaldasobrequesGNU/Linuxyalgunospequeosdetallesquehayque
conoceracercadelantesdecomenzarainstalarloousarlo.

Introduccin a GNU/Linux, historia y cultura


del Software Libre
Paraempezar,GNU/Linuxesunsistemaoperativo.Estosignificaqueesunconjuntode
instruccionesquenosvaapermitir"hacercosas",cualquiertipodetarea,connuestroordenador.
Suscaractersticasmsnotablesson:

ProvienedeUNIX,otrosistemaoperativo,yescasiunderivadodel.

EspartedelproyectoGNU,loquesignifica,entreotrasmuchascosas,queeslibreyque
muchasvecesnoestsobligadoapagarporl.Puedesusarlodemodogratutoyadems
puedesmodificarsucdigofuente,paraadaptarloatuspropiasnecesidadesoparacontribuir
ensucontinuodesarrollo,enelquetomanparteprogramadoresdetodoelmundo(tpuedes
serunodeellos).Antesdeseguirleyendoyaprendiendosobrel,convienequevisitesla
pginawebdelproyectoGNUenlaquesedanalgunosdetallessobrequeselproyecto,
qupuedeshaceryqunopuedeshacerconelcdigofuenteademsdealgunosotros
detallesimportantes.

Espotente,seguroyestable.Debidoaelloresultaunsistemaoperativoidealparaservidores
yaquecumplemuybienestafuncinaunquecomosistemaoperativodeoficina,de
escritorioodepublicacintambinesexcelente.

Existeninfinidaddeprogramasparacualquiertipodetareaquesequieradesarrollary
aunquemuchosdeellossongratuitos(noporellodemenoscalidadqueloscomerciales,
puesmuchasveceslossuperan),tambinexistenaplicacionescomerciales.

Esunsistemamultiusuariorealymultitareayfuncionademaneramuyproductivaenredes.
DesdesusracesUNIXsiemprelohasido.EndefinitivaLinuxponetodolobuenodelos
grandesUNIXyalgunascosasmsalalcancedetodoelmundo.Lovasadejarah?Lo
vasadesaprovechar?Unconsejo,yonolohara.

HablemosunpocodelahistoriadeGNU/Linux.Comencemospresentandoaquienpodemos
considerarcomoelcreadordeLinux.SunombreesLinusTrovalds.PuededecirsequeLinus
Trovaldscreestesistemaoperativoen1991.EscribiunKERNEL(parteprincipaldeunsistema
operativo)ylodejadisposicindesusamigosyluegodetodalaInternetparaquecualquiera
pudiesemejorarlo.SiempresehaseguidolareglaPOSIXparaqueelsistemaoperativosea
compatibleconotrosUNIXydeestamaneratenermayorsoftwareasudisposicin,yqueelquese
creeparaLinuxvalgatambinenotrosUNIX.Algntiempomstarde,paraadaptarelsistema
operativoyfacilitarlainstalacin,nacieronlascompaasdistribuidorasdeLinux.Entreellas
destacanRedHat,Debian,Caldera,SuSE,Mandrake...Estasdistribuidoraspuedencobrarpor
ofrecersusproductosenCDoenalgnotrosoporte,perodebenponersucdigoadisposicindel
pblico,sihanutilizadosoftwareGNU(bajolicenciaGPL,quediceentreotrascosasquesiusas
cdigoGPLentuprograma,tuprogramaseconvierteautomticamenteenGPL).Actualmente
LinusTorvaldssiguecoordinandoeltrabajodelosprogramadoresdetodoelmundoenelncleo
delsistemaoperativoparamejorarloyadaptarloalnuevohardware.
CabelaposibilidaddepreguntarseculeslamejordistribucindeLinux?GNU/Linuxtiene
muchasdistribuciones,yporlogeneral,noexisteunadistribucinmejorquelasdems,cadauna
deellastienesuspuntosafavorendeterminadosaspectos.As,Debianesunadistribucinqueno
esrealmentecomercialenscomolosonlamayoradelasotras.EldesarrollodeDebianesmuy

parecidoalvoluntariadoqueexisteeneldesarrollodelkerneldeLinux.Paralosqueseaproximan
porprimeravezaLinux,esciertoqueMandrake,sisetieneunamquinaconrecursossuficientes,
ofreceunainstalacinyconfiguracinsencillasyunentornogrficopersonalizadoidealparano
perdersealprincipio.Claroquesiempredependedetysitieneslaoportunidaddetratarconvarias
distribuciones,trabajaconlaquetesientasmscmodo.
Puedehaberproblemas?Dependiendodelhardwarequetengasentuordenador,porqueLinuxno
soportaalgunosdispositivoscomoWinmdems(mdemsdiseadosparafuncionarsloconM$
Windows,ensumayorainternos),algunastarjetasdesonido,etc.
PuedotenerWindowsyLinuxenlamismamquina?Claro!Comoveremosmsadelantelaclave
estenparticionareldiscoduro,paraqueWindowsuseunaparteyLinuxuseotra,demaneraque
nointerfieran.Tambincomoveremosdespus,elcargadordearranquedeLinuxtepermitirelegir
qusistemaoperativoiniciar.
EsperamosquetehayascomenzadoainteresarporGNU/Linux.DesdeZonaSiete,pretendemos
prestartetodalaayudaquepodamos:)

Sobre este manual


Estemanualpretendesernimsnimenosqueunareferenciaparaquecualquierusuarioquetenga
unadudapuedaconsultarloyresolverladelmodomsprcticoposiblegraciasalasexperiencias
aportadasporotrosusuarios.TambinestdirigidoalaspersonasquequierenaprenderLinuxy
hacerlosusistemaoperativodeescritoriodecadada.Enlaseccindeservidores,abordaremos
configuracionescomunesparalosprogramasyserviciosmscomunes.
EstemanualNOpretendecontradecirelcontenidodeladocumentacinoficialdelproyectoThe
LinuxDocumentationProject(tldp.org),sinocomplementarloatravsdenuestraspropias
experiencias.
Todoelquequierapuedesugerircorreccionesoescribirsobrealgunaseccinenparticular.Tu
ayudaahacerelproyectoGNU/Linuxcadavezmsgrandeesdesdeyaagradecida:)
EstemanualpuedeserredistribuidodeacuerdoconlascondicionesdictadasporlaGFDLensu
versinmsreciente.Aunas,elequipoderedaccinagradeceraquesehagareferenciaalorigen
deestemanual.
ElcopyrightdeestedocumentopertencealZonaSiete.ORGEditorsTeam,
(C)20012002ZonaSiete.ORGEditorsTeam
MsdetallessobrelosintegrantesenApndice

A,ZonaSiete.ORGEditorsTeam.

Conceptos bsicos GNU/Linux


EnestaseccinVamosatrataralgunascosasquetenemosquetenerclarasantesdeinstalary
comenzarautilizarLinux.Notienesqueaprenderlasdememoria(paraesoestestemanual),
simplementeleeestoconatencinyestarsendisposicindecontinuaraprendiendosobreLinux.

El arranque de Linux
Veamosquesloquepasacuandonuestramquinaarrancaytenemosqueelegirunsistema
operativo.CuandolaBIOSterminasuchequeo,empiezaabuscardndehaysoftwareparaser
ejecutado.SilosCDROMsnosondearranque,pasaalprimerdiscoduropordefecto.Enel
principiodeldiscodurooMBR(acurdate,lovasairmsdedosvecesconLinux)oenuna

particinquedainstaladoconLinuxuncargadordearranque.LosdosmsusadossonLILO(LInux
LOader)yGRUB.Nadamsarrancarseejecutaestecargadorcuyamisinpermitiralusuarioelegir
sistemaoperativodelosquetenemosennuestroordenadorquiereutilizar.Alinstalarse,LILO(o
GRUB)habrnsidoconfiguradosparapoderarrancarcualquiersistemaoperativoquetengamos
instalado,reconocelamayoradelosexistentes.SeleccionamosnuestraversindeLinuxyel
cargadordapasoalKerneldeLinuxqueempiezaahacersuschequeosyamontar(hacerutilizable)
elsistemadearchivos.

El sistema de archivos
Elsistemadearchivosesmsomenos"laformadeescribirlosdatoseneldiscoduro".Elsistema
dearchivosnativodeLinuxeselEXT2.Ahoraproliferanotrossistemasdearchivoscon
journalising(sisearrancasinhabercerradoelsistema,nonecesitanhacerunchequeosinoque
recuperanautomticamentesultimoestado),losmsconocidossonEXT3,ReiserFSyXFS.
LaestructuradedirectoriosquesigueLinuxesparecidaaladecualquierUNIX.Notenemosuna
"unidad"paracadaunidadfsicadediscooparticincomoenWindows,sinoquetodoslosdiscos
durosoderedsemontanbajounsistemadedirectoriosenrbol,yalgunosdeesosdirectorios
enlazanconestasunidadesfsicasdedisco.MUYIMPORTANTE:LasbarrasenLinuxaligualque
encualquierUNIXsoninclinadashacialaderecha,comosepuedevermsabajo(eseeselmotivo
dequeeninternetseaninclinadashacialaderechayaquenacibajoUNIXyenLinuxpodremos
aprovechartodassusventajas).Expliquemosestomsafondo,incluyendolosdirectorios
principales:
Tabla1.1.EstructuradedirectoriosenLinux
Directorio
/
/etc
/home
/bin
/dev
/mnt
/tmp
/usr
/usr/local
/sbin
/lib
/var
/proc

Descripcin
Eslarazdelsistemadedirectorios.AqusemontalaparticinprincipalLinuxEXT.
Contienelosarchivosdeconfiguracindelamayoradelosprogramas.
Contienelosarchivospersonalesdelosusuarios.
Contienecomandosbsicosymuchosprogramas.
Contienearchivossimblicosquerepresentanpartesdelhardware,talescomodiscos
duros,memoria...
Contienesubdirectoriosdondesemontan(seenlazacon)otrasparticionesdedisco
duro,CDROMs,etc.
Ficherostemporalesoderecursosdeprogramas.
Programasylibrerasinstaladosconladistribucin
Programasylibrerasinstaladosporeladministrador
Comandosadministrativos
Librerasvariasymdulos("trozos")delkernel
Datosvarioscomoarchivosdelog(registrodeactividad)deprogramas,basesdedatos,
contenidosdelservidorweb,copiasdeseguridad...
Informacintemporalsobrelosprocesosdelsistema(explicaremosestomsen
profundidadposteriormente).

Nombres de archivos en Linux


LosnombresdearchivosenLinux(comoentodoslosUNIX)distinguenmaysculasde
minsculas,estoes,son"casesensitive".LosarchivosREADME,readme,REadmeyrEadmepor

ejemplosonarchivosdistintosyporlotantoalsernombresdistintospuedenestarenelmismo
directorio.
EnLinuxlosarchivosnotienenporqutenerunaextensin.Lasuelenteneramodoorientativo,
peronoesenabsolutonecesario.Linuxsabequcontienecadaarchivoindependientementedecul
seasuextensin.Porcomodidad,podremosllamaratodosnuestrosarchivosdetextoconla
extensin.texto,oatodosnuestrosdocumentosconlaextensin.documento,deestamanera,
podremosluegoagruparlosmsfcilmente.
LosficherosydirectoriosocultosenLinuxcomienzansunombreporunpunto(.)
Losnombresdearchivosodirectoriospuedensermuylargos,demsde200caracteres,locualnos
dabastanteflexibilidadparaasociarelnombredeunarchivoaloquecontiene.Noobstante,hay
ciertoscaracteresquenuncasedeberanutilizaralahoradenombrarunarchivo.Unodeellosesel
espacio,nuncallamaremosaunficheroconunnombrequecontengaunespacio.Tampocoson
recomendadosotroscaracteresraroscomosignosdepuntuacin(aexcepcindelpunto),acentoso
la.EnalgunoscasosLinuxnisiquieranospermitirusarlos.LosrecomendablessonlasletrasA
Z,az,losnmeros(09),elpunto,elguin()yelguinbajo(_)paranombrarunarchivo.Los
acentosylatampocoserecomiendan.

El software adicional para GNU/Linux


Primero,hacernotarqueLINUXNOESWINDOWS.ElsoftwaredeWindowsnofuncionaren
Linux,hayproyectosdeemulacinalrespecto,quenorecomendamos.
ElsoftwareparaLinuxlopodemosencontrardedosformas:enunpaquetebinariooenunpaquete
consucdigofuente.
Los paquetes binarios
Existenvariostiposdepaquetesbinarios.Todostienenunacaractersticaencomn,yesque
contienencdigodemquina,nocdigofuente,poresocadatipodeprocesadornecesitasupropia
versindecadapaquete.AlhabervariasdistribucionesdeLinuxexistenvariostiposdepaquetes
binarios,habiendovariasdistribucionesquecompartensistemadepaquetes.Losmscomunesson:

LospaquetesRPM:LosusanlasdistribucionesRedHat,Caldera,Madrake,SuSEy
TurboLinuxentreotras.Suusoestmuyextendidoyesposibleinstalarestetipodepaquetes
mediantelaaplicacinrpm.Elnombredelospaquetesrpmesdeltipo
nombredelpaquete_version_plataforma.rpm

LospaquetesDebian(deb):LosusaladistribucinDebianysusderivadas.Esunsistemade
paquetesmuypotenteyquefacilitaengranmedidalaactualizacindelsistema,ademsde
resolverlasdependencias(qupaquetesnecesitanaquotros)ysatisfacerlasinstalando
todoslospaquetesnecesariosautomticamente.Laaplicacionesquegestionanestesistema
depaquetessellamanaptydpkg.LospaquetesDebiansesuelennombrardelaforma
nombredelpaquete_version_plataforma.deb

LospaquetestgzdeSlackwarelosusaladistribucindelmismonombre,ysiguenlos
principiosdelosdosanteriores,sonpaquetesbinariosaunquetienenunaestructuradistinta.

Los paquetes de cdigo fuente


Estospaquetescontienenlosarchivosquesalendelordenadordelprogramadoroprogramadores,lo
quequieredecirqueyahayqueaportaralgodenuestraparteparautilizarlosprogramasque
contienen.ElprocesodeinstalacindeestetipodepaquetesimplicatambinunaCOMPILACIN,

conceptoquevasaescucharmsdetresveces.Unacompilacinnospermitequeelprogramaque
vamosainstalarseoptimicetotalmenteparaeltipodecomponentesquetenemosennuestro
ordenadoryeltipodeversindeGNU/Linux.Esteprogramaquehemoscompiladocorrerms
rpidoquesinoshubiramoslimitadoainstalarunpaquetebinarionormal.Lacompilacindeun
programarequieredeunosCOMPILADORES,quesonunosprogramasquejuntoconunas
LIBRERASdelenguajesdeprogramacin,consiguentransformarelcdigofuenteenlenguajede
mquina.Trataremosmsadelantecmoinstalarsoftware.
SontambindeampliousolosSourceRPM,quesonpaquetesRPMperoqueenvezdeser
binarios,llevancdigofuente.Mediantelainstalacindeestetipodepaquetes,loquehacemoses
crearunnuevopaqueteoptimizado(compilarunnuevopaquete)paranuestramquina.Despus
instalamosesteltimo.
Meta-Paquetes
Conocemospormetapaqueteaaquellospaquetesenloscualesnohaycdigofuente,obinarios,
sinoreglassobreCMOconstruireinstalardichopaquete.Estospaqueteslosusandistribuciones
comoGentooLinux(http://www.gentoo.org),LinuxFromScratch
(http://www.linuxfromscratch.com)yalgunosotrossistemasoperativoscomoFreeBSD
(http://www.freebsd.org).Laventajaquetienenestospaquetesesquesonmuysencillosdegenerar,
losbinariosquedanoptimizadosparalamquinaquelosvaaejecutar,perocomotodo,estotiene
unacontrapartida....lasdistribucionesquelosusanpuedensermscomplicadasdemanejaryse
necesitanconexionesmuyrpidasyprocesadorespotentessinosequiereestarmuchotiempo
compilandolospaquetes.

Los usuarios y los permisos de archivos


Linuxesunsistemaoperativomultiusuario.Cadausuariogeneralmentetienesucarpetadeusuario
en/home/usuario.Pordefectoslopuedeescribir,modificaryborrararchivosdentrodeesta
carpeta.Ningnotrousuario(exceptoroot)puedeaccederalosarchivosquehayenestedirectorio,
nisiquierapuedeverculesson.Esteusuariopordefectopuedeleerenelrestodelascarpetas
quehayenelsistemadearchivosexceptoenladerootylasdeotrosusuarios.Todoslosprogramas
recuerdanlaspreferenciasdecadausuario,einclusounusuariopuedeinstalarunprogramasinque
losotrosusuariostenganaccesoal(vales,rootsitendr,los,losabemos:);aunqueinstalando
losusuariostienenmuchaslimitacionescomoveremosdespus.Unusuarionopuedecausarpor
estemotivodaoalsistemanicambiarsuconfiguracindeningunaforma.Yquinesesetalroot?
EncualquiersistemaUNIX,rootes"elquetodolopuede".Eslaexcepcinqueconfirmalaregla,
eselsuperusuariotodopoderosodeestossistemas.Cuandohagaslogincomorootenunamquina
GNU/Linux,sienteelpoderbajotusteclas.Puedeshacertodoloquesetepaseporlacabeza.Pero
ojo,tienespoderparalobuenoyparalomalo.Tienesaccesoatodoelsistema,perouna
equivocacin...serafatal.PuedescargarteelsistemaLinuxylospreciadosdatosyconfiguraciones
quetengasenl.Poresto,paratareasnormalesSIEMPREentraremosalsistemacomounusuario
normalporlosriesgosquesecorrentrabajandocomoroot.AdemsNUNCAusaremosInternet
comoroot.Inclusoalgunosprogramasnopermitenserejecutadosporrootpormotivosde
seguridad.Comoyahabrsadivinado,lacontraseaderootselaguardaunoenlacabezayse
aseguradequenoseleolvida,yporsupuestosepreocupaunodequenadiepuedaaccederaellaen
ningnficheroodequenolavencuandolaescribimos.Sisecreequelahanpodidoadivinaro
estncerca,secambia.Cuantomslarga,tediosaysinsentidoseaestacontrasea,msseguro
estarnuestrosistema.RecuerdaquetumquinaLinuxestanseguracomoseguraseatucontrasea
deroot.
Qusonlospermisos?Todosycadaunodelosarchivosydirectoriosdelrboljerrquicoque

montanuestrosistemaLinuxtienenpermisos.Estospermisosdicen,paracadausuariodelsistema,
sipuedeejecutarlo,sipuedeversucontenidoosipuedeborrarloomodificarlo.Delmismomodo,
cadaelementodelsistemadearchivostieneundueo.Pordefecto,estedueodelelemento(tanto
directoriocomoarchivo)tieneaccesototalalypuederealizartodaslasaccionesposibles
permitidas.Elrestodeusuariospuedenleeryejecutaresteelementopordefectoaunquetodoesto
sepuedecambiarparacadaunodeloselementos.Todoslosarchivosdelascarpetasdesistemay
configuracinsuelentenerarootcomopropietario.Losdelacarpetapersonaldecadausuario
tienenaeseusuariocomopropietario,peroelrestodeusuariosnormalesnotienenningnpermiso
sobreestoselementos,ylomismoocurreconlacarpetaderoot(queseencuentraenlaraz,en
/root).

El arranque de Linux II
Cuandoelkernelyahamontadoelsistemadearchivos,comienzanainicializarsealgunosprocesos
llamados"daemons"(demonios).Cadaunodeestosdemoniosseiniciacuandoelsistemaarrancay
durantesuvidavaacontrolarunprocesodeterminado,yvaapermanecerensegundoplano
(transparenteparaelusuario),novamosanotarqueseestejecutandoamenosquepidamos
informacinaesteproceso,lodetengamosoloreiniciemos.Algunosdeestosdemoniosson,por
ejemplo,elservidorweb,elservidordecorreo,elcortafuegos,elservidordenombresDNS...y
muchosotrosquegestionanvariastareas,ensumayoraserviciosdeservidorderedparaservirde
hostaotrasmquinas.Cuandotodosesosdemoniossehayancargado,aparecerantenosotrosuna
lneadetextodelogin(autentificacinenunsistema)obienunaventanadelogingrfico.Vamosa
empezarentrandocomousuarionormalprimero.

Nombramiento de dispositivos y particiones


DebemossaberdequmaneranombraLinuxalosdiscosdurosquetenemosconectadosanuestra
mquinaysobretodoasusparticiones.Todoslosdiscosduros(IDE)comienzansunombrecomo
hd.Unejemplodenombrecompletodediscoduroserahdaydelaprimeraparticindeesedisco
duroserahda1.
La'a'significaqueesediscoduroestconecatdoalIDE1comomaestro.Sifueraesclavotendrala
'b',ysiestuvieraconectadoalIDE2comomaestro,la'c',ysiestuvieraalIDE2comoesclavo,la'd'.
Elnmero1indicaqueeslaprimeraparticin(primariaynolgica)deldiscoduroencuestin.La
segundageomtricamentehablando(primaria)serala2yassucesivamente.Laprimeraparticin
lgicadeundiscodurosenombraconelnmero5,independientementedesiperteneceala
primaria1,2,34.Lasegundasenombraraconun6yassucesivamente.
Consaberloquesignificahda1ohdd2ohdc5essuficientedemomento.

Captulo 2. Gua inicial para la instalacin de


una distribucin
Tabladecontenidos
Antesdeinstalar
Hardware
QuedarnosconloqueyatenemosennuestroPC
Elegirladistribucinqueinstalaremos
Guiasgeneralesparalainstalacin
RedimensionadodeparticionesWindowsconfips

Otrosconsejostiles
Ahoraqueyanoshemosledolasseccionesanteriores(yestamosunpococonfusossieslaprimera
vezquetratamosconLinux),tenemosprimeramentequerelajarnos.Laverdadesque,mientras
estemosaprendiendoLinux,laprimeravezqueleamoscosasnuevas,nosvanaresultarunpoco
confusas.Lasegundavezquelasleamossenosclarificarunpoquitolacosa,ysilaspracticamos
unpocoydespusleemosporterceravezladocumentacindeloquehemospracticado,
obtendremosunagransatisfaccininterior:)yhabremoscomprendidoyaprendidoalgoms.As
querepetimos,nostranquilizamosynospreparamosparaelegirladistribucindeGNU/Linuxque
vamosainstalarennuestrosistema.

Antes de instalar
VeamosqunecesitamosparainstalarunadistribucindeLinuxennuestroPC.

Hardware
Comoveremosmsadelanteenestemanual,ysedescubrircuandosetengaexperienciaeneluso
yadministracindelossistemasLinux,esposibleinstalarLinuxdesdeenunequipo"antiguo"
hastaenlosgrandesservidoresconvariosmicroprocesadoresyvariosdiscosduros.Parainstalaren
unordenadorpocopotente,necesitaramosalgunosconocimientosparapersonalizarafondola
instalacinquesuponemosquenosetienenahora.Asquevamosabuscarunequipoenelqueuna
instalacinnormalfuncioneaunavelocidadaceptable.Esto,lgicamente,vaadependerdequ
fechasealadistribucinquevayamosainstalar.Cuantomsrecientesea,necesitaremosunequipo
mspotente.
Lasdistribucionesactuales(quizstengamosqueircambiandoesto;)puedencorrer
aceptablementeenunprocesadora450MHzy128MBdememoriaRAM.LamemoriaRAMvaa
serunfactorqueincrementeelrendimientodelsistemaLinuxenungranporcentaje,muchomsde
loquepudieraparecernosenunprincipio.
Encuantoalespacioendisco,estamosenlasmismas,dependerdeloquevayamosainstalar,pero
comoempezarmosporunainstalacinestndar(notocaremosmuchoenunprincipio),pondremos
unmnimode3GBdediscolibres.Sitienesmsespacio,puedesdejar56GBloscualestesern
suficientessitomaslainteligentedecisindeseguiradelanteconLinux:)

Quedarnos con lo que ya tenemos en nuestro PC


EscomnquecuandoempezamosconLinux,sisomosusuariosdeWindows,setengaunpocode
miedoalodesconocidoyapensar"podrseguirhaciendoestoconLinux?""Tardarmuchoen
adaptarme?"ycosasporelestilo.Tantoesas,quequerramosconservarnuestrainstalacinde
WindowsaltiempoqueinstalamosLinux.ComocomentamosenelCaptulo1,esoestotalmente
posible.LomsfcilesdejarespaciolibreennuestraparticinWindows,yconelprograma
'PartitionMagic',redimensionarnuestraparticindeWindowsdetalmodoquedejemosespacio
libreendiscosuficientecomoparaqueenlainstalacinllenemoseseespacioconlasparticiones
Linux.Claro,'PartitionMagic'esunprogramacomercial,yunpococaro,asquesinosepuede
contarconl,todavatenemosunaesperanzams.Estaesrealmentetediosayconsisteenusarun
programallamadofipsquevieneconalgunasdistribucionesdeLinux,cuyousodetallamosenlas
seccionessiguientesdeguainicialalainstalacin.Noobstante,lainstalacindeMandrake
tambinnospermiteredimensionarnuestraparticinWindows,incluyeenlainstalacinuninterfaz
paragestionarlasparticionesdediscosimilaraldePartitionMagicparaWindows,asquesivamos

ainstalarMandrakepuedequeestemossalvados.
Noesmuycomn,perorarasvecessepodranperderlosdatosdenuestrodiscoduro.Evitemos
malesmayores,quenonoscuestanada,ysaquemosunacopiadelosdocumentosimportantesodel
trabajoquetenemosennuestrosistemaactual.Elrestodesoftwarepodramosreponerlodesdelos
discosdeinstalacin.Repetimosqueestonoesnadafrecuenteperopodraocurrir.

Elegir la distribucin que instalaremos


Si,comosuponemospuestoqueestsleyendoesto,vaasertuprimerainstalacindeLinux,tendrs
queelegirunadistribucinquenoseademasiadoavanzadaytepermitainstalarsingrandes
dificultades.Hoyestonoesdificl,puestoquelamayoradedistrosseinstalandemaneramuy
sencilla.Podramoselegirentreunadelassiguientes:

MandrakeLinux:EstadistribucindeLinuxesdelasmsamigablessinosestamos
acercandoaLinuxlaprimeravez,calificadapormuchos(ycreemosqueacertadamente)
comolamssencillaparainiciarnos.Lanica"pega"(quenoloesrealmente)deesta
distribucinesqueinstalarunmontndecosasquepuedequenonecesitemos,peroesel
preciodeunainstalacinsencilla.Esporestoporloquedeberamostenerunamquina
potenteparainstalarestadistribucinsinquesenosvayaarrastrando.Ofreceunescritorio
muyagradableycompleto,ademsdevariosasistentessencillosparacambiarla
configuracindelhardware.
LaweboficialdeMandrakenospermitedescargarnossudistro.Deberemosbuscarlas
imgenesISO(archivos.iso)ydescargarlas.Enprrafossiguientescomentamosmsacerca
delasdescargas.EnlaweboficialdeMandraketambinpuedesinformartedelas
caractersticasdeestadistro.

RedHat/FedoraLinux:Fedoraesladistribucinlibre(gratuita)delacompaaRedHat,y
RedHatLinuxessudistribucincomercial.Ambassonsimilares,sobretododecaraal
usuariomedio.Podranserlasegundadistribucinmssencillaconlaquetrataryporlo
tantoigualdeindicadaparalainstalacin.EsalgomscomplicadaqueMandrakepara
empezar,aunqueladiferencianoesexcesivamentenotable.LaweboficialdeRedHatnos
ofreceinformacinsobreladistribucincomercialylawebdeFedoranosinformaynos
permitedescargarladistribucingratuta.

Sinoshemosdecididoadescargarladistribucin,nosaseguraremosdequetenemosunabuena
conexin:)porqueconunanchodebandadebajadade27KBytes/svamosatardarunas6horas
porCD.SitenemosencuentaquetantoMandrakecomoRedHatson3CDs....18horas!!yeso
conunabuenaconexin!!
Sitenemoslabuenaconexin,veamosquesloquetenemosquedescargar.Buscaremos,los
archivosISO(.iso),cadaunodeellosesunCDdelosqueluegograbremos.Asques,necesitamos
tenerunagrabadoradeCDs,unoscuantosCDsvrgenesyunprogramadegrabacinfuncionando
ennuestrosistemaoperativoactualparagrabarlasimgenesdeCDsISOalosCDsvrgenes.En
fin,comofuimoscocinerosantesquefrailes,enNeroparaWindowsesArchivo>GrabarImagen,
estoes,nobastacongrabarlocomosifueraunficheronormal,cadaprogramatienesumanerade
grabarestasimgenes,asquebuscaremosladelnuestroylasgrabaremos
SiestisenEspaa,unbuenmirror,rpidoyactualizado,esftp.rediris.es.Nosidentificaremos
comoanonymousdandocualquierpassword,ynosmoveremosporsusdirectorioshastaencontrar
losarchivos.isodelosdiscosdeladistribucinquequeremos.Entonceslosdescargaremoscon
algnprogramaquenospermitacontinuarladescargaencasodeproblemas.Cuandolastengamos
descargadaslasgrabaremos.

SinopuedesdescargarladistrodesdeInternet,puedescomprarlaencaja.Lasventajasde
comprarlasonrealmentemuchas,yesqueestarssegurodequelosdiscosnotendrnproblemasde
habersedescargado,tendrsmssoftwarequeconlasdownloadversions,soportepormailsitienes
dudasenlainstalacinporpartedelacompaaquecrealadistro,yquizslomejordetodo,un
montndemanualesimpresosconlosqueguiarteyaprenderausarLinuxpasoapasoyteneruna
referenciaimpresasilanecesitasposteriormente.Sijuntamostodo,elprecionoesexcesivo,ni
muchomenos(comparacon:Windows+Office+Photoshop+Softdedesarrollo+...,sera
muchsimodinero).Preciosaproximados;paraMandrakede60a70Euros(PowerPack)ypara
RedHatde40a50Euros(PersonalEdition).Sivasacomprarladistro,otraquepodrasevaluar
seraSuSELinux,quenoofrecelaposibilidaddedescargarlosCDsdeInternet,conunpreciode
40a50Euros(Personal).Ladecisinestuya,estsantetresbuenasdistribucionesqueteservirn
paraempezarconLinuxyparatutrabajodiarioconmultituddeherramientasdeconfiguracinyun
escritorioagradable.Cualquieradeellasseraunabuenaeleccin.
EnelmanualtambinvamosatratarladistribucinDebianGNU/Linux,esunadistribucindegran
calidadyqueofreceungranrendimiento,conunsistemadepaquetesparainstalarsoftwaremuy
avanzado.Noobstante,estadistribucinpuedeserdemasiadodifcilparainiciarnosenLinux,as
quepuedesempezarconunadelasanterioresyposteriormenteexperimentarconalguna
distribucinavanzadacomocomentaremosdespus:Debian,SlackwareoGentoo.

Guias generales para la instalacin


InstalarunadistribucindeLinuxesrealmentefcilennuestrosdas.Losinstaladoreshan
avanzadomuchoyhoyGNU/LinuxseasemejamsbienaunMacounWindowsqueaunsuper
UNIXdealtonivelenloquealainstalacinserefiere(nohaperdidopotencialporteneruna
instalacinsencilla;)).Seraunaprdidadetiempodescribirseccinporseccinlainstalacinde
cadaunadelasdistribucionesquerecomendamos,asqueloquevamosahaceresdarunos
consejosgeneralesqueteresolvernlasminimasdudasquepuedansurgirteinstalando.Puedes
buscarlosmanualesdeinstalacinenlosdiscosobienenlaswebsdelasempresasdistribuidorassi
creesnecesitarayudaextra.

Redimensionado de particiones Windows con fips


Comoyacomentamos,siqueremosconservarnuestraparticinWindowsalinstalarLinux,hayms
bienpocoquepodamoshacersinousamos'PartitionMagic'parahacermspequeanuestra
particinWindows.SivamosainstalarMandrakeLinuxnotendremosproblemasporquecomo
hemoscomentadoantes,incluyeunsoftquenospermitirhacermspequeanuestraparticin
Windowssinperdersusdatos,paradespuesenelespaciolibrecrearlasparticionesLinux.
fipsesunaalternativaquepasamosadescribir,aunquepuedeseralgotediosa.Estaherramienta,
aunquepuedequelaincluyanalgunasdistrosms,esoriginaldeRedHatLinux.

Sugerencia
Recuerdahacerunacopiadeseguridaddetutrabajoantesdeprocederconeste
mtodo
Estemtodoestlejosdesereminentementeprctico,ademsvamosatenerquedependerdelo
queWindowsquierahacerconnuestrasparticionesasquemejorserquerecemos:)
Procederemossiguiendoestospasos:
Sugerencia

Esposiblequeestonofuncioneenalgunasversionesde
Windows

EnDOS(ounaventanadeDOS)teclearemos:chkdsk

EjecutamoselscandiskenWindows(elcortosersuficiente)

CreamosundisquetedearranqueconelprogramaFIPSincluidogeneralmenteenelprimer
CDdeRedHatLinux,escribiendoenDOS:
C:\ format a:/s

AcontinuacinlecopiamoslosarchivosRestorbb.exe,Fips.exeyErrors.txt,localizados
generalmenteeneldirectoriodosutils/fips20delCD1deRedHatLinux.

DesactivamoslamemoriavirtualdeWindows.

Cerramostodoslosprogramasposiblesydefragmentamoseldiscoduroparamovertodos
susdatosalprincipio.

Reiniciamoselsistemayponemoseldiscodearranque.SinoapareceC:\escribimosalgo
comodir C:\yluegonosvamosaA:\dondeescribiremos:
A:\ fips

Conestoarranquermosfipsporfin.Sinonosdeja,probaremosaescribirlodesdeC:\

Confipsejecutndose,primeroelegimoseldiscoduroquequeremosusar.

Elegimoselnmerodeparticinquequeremosdividiryledecimosquesqueremos
comprobarlaparticin

Ledecimosquesqueremoshacercopiadeseguridaddelsectordeiniciodenuestrodisco
duro,sinsacareldisqueteledecimosquesconlateclaY.Senosofrecerelespacio
disponibleparacrearunanuevaparticin.Siesinsuficienteomenordelqueestenrealidad
significaquehayarchivosocultosquenohansidomovidosalprincipiodeldiscodurocon
ladefragmentacin,oseaquetendremosquebuscarlosyeliminarlos(ydespus
defragmentardenuevo,yadijimosqueestonoescosadecoserycantar...).

Decidimoseltamaonuevodelasparticionesconlasflechasizquierdayderecha,ycuando
tengamoselquebuscamos,presionaremosintro.Acontinuacinpodemosconfirmaro
cancelarlacreacindeparticiones,continuaremosconlateclaC.Yacontinuacinconla
teclaY.Estodo;cuandofinalicelatarea,elprogramasecerraryreiniciaremossinquitarel
disco.Luegoescribiremos
fips -t

paracomprobarquetodoestcorrecto.Sinofueraas,FIPSteayudaradejarlotodocomo
estaba.Bueno,ahoraquitamoseldiscoyreiniciamos,observandocomoWindowsarranca
normalmente.

Otros consejos tiles


Esposiblequedurantealgnmomentodelainstalacintesientasperdido,asqueaquvanuna
seriedeconsejosquetepuedenayudar.
Veamosalgosobrelossistemasdeficheros,lasparticionesyelcargadordeinicio.Mandrake,por
ejemplo,nosporporcionarlaopcinderedimensionarnuestrasparticionesWindowsparacrear

espaciolibreyaadirposteriormentelasparticionesparaLinux.Paraestodebemoscogerla
instalacinpersonalizada(avecesllamadaavanzada).Podemosvermsdetallesenla
documentacinonlinedeladistroenmandrake.com.EnelcasodeRedHatdeberamoselegirla
herramientaDiskDruidparacrearlasparticiones;peroconellayadeberemostenerespaciolibre
paracrearlasparticionesLinux,puestoqueestaherramientanonospermiteredimiensionarlas
particiones.Encuantoalossistemasdeficheros(lamaneradeescribirlosdatoseneldisco),
elegiremos,siestndisponibles,EXT3oReiserFS.Estossistemasdeficherosnonecesitanuna
comprobacinsielPCseapagainadecuadamente(tambinllamadosdejournalising).Crearemos
tresparticiones,unademayortamao(almenos3GB)dondeinstalaremoselsistema,otrade
tamaomediodependiendodeldiscoquedispongamos(muymnimamente1GB)dondese
guardarnlosdocumentosyconfiguracionesdelosusuarios,yotradeunos200MBparaSWAP
(intercambio).Sifueraposible,laparticinSWAPsecrearenotrodiscodistintoalaparticin
principal.Cuandolastengamoscreadas,lasherramientasdeparticionadodelosinstaladoressuelen
tenerunbotnllamadoModificaroalgoas.Ahpodremosescogeruntipodesistemadeficheros,
yelegirelpuntodemontaje.Paralaparticinprincipalescogeremos/comopuntodemontaje,
paraladetamaomedio(ladelosusuarios),elegiremoselpuntodemontaje/home,ylade
SWAPlediremosqueesdeltipoSWAPynoseleasignaningnpuntodemontaje.Enloque
respectaalcargadordeinicio,elegiremosGRUBsiestdisponible,ylediremosquequeremos
instalarloenelprimerodiscodurodenuestrosistema(alprincipiodel),estoes,porejemplo
/dev/hda.Crearemostambinundiscodeinicio,loetiquetaremosyloguardaremospara
arrancarLinuxencasodeproblemasdespus.
Otraspreguntasenlasquepodrasdudarseran,porejemplo,siquieresejecutarlasXalinicio.Para
empezarconLinux,respondes.ElservidorX,eselservidorgrficodeLinux.KDEyGNOME
sonentornosdeescritorio;instala,almenos,unodeellos.MozillayGaleonsonnavegadoresy
EvolutionyKMailsonclientesdeemail.Losinstaladoresnosdejarnprobarresolucionesy
profundidaddecoloresdistintasparalasX.
Deberaselegirunainstalacinpersonalizada,porquenoesnadacomplicadoaunqueassuene.No
instalesservidoresquenonecesites(eigualmenteconlosserviciosalinicio),puestoqueharnque
elsistemavayamslento.
Ahoralasdistribucionessonfcilesdeinstalar,asqueconestosconsejosnodeberastenerningn
problema:)parainstalartusistemaLinux.
LasprimerasvecesquearranquesLinux,antesdeseguirleyendo,investiga!,esunaformade
aprenderavercmofuncionaelescritorioquevayasausar.

Captulo 3. Terminal o SHELL


Tabladecontenidos
ConceptosbsicosdelaterminalBASH
Lasvariablesdeentorno.LavariablePATH
ComandosbsicosenlaterminalBASH
Referenciasrelativas
Elcomandocd
Archivosydirectorios
VeamosprimeroloqueesunaTERMINAL(ounSHELL,ounINTRPRETEDECOMANDOS,
amboscasisinnimosdeTERMINAL).Probablementemuchosestisacostumbradosausar
ENTORNOSGRFICOS(deventanas)comolosinterfacesdeWindowsodeMacOS,ysihabis
empezadoainvestigarelescritoriodeLinuxdespusdeinstalarvuestradistribucin,habrisvisto

quehayvariosescritoriosparausarenLinux.Losentornosgrficosnospermitenvercolores,e
interactuarconlosbotonesdelosprogramasparaelegiropciones.
Noobstante,lamaneramshabitualdeadministrarunamquinaLinux(instalarpaquetes,verlos
registrosdeactividad,crearomodificarusuarios...)suelehacersedesdeunterminalointrpretede
comandos,queesenmodotexto,ygeneralmentenosmuestraunPROMPTcomoahoraveremos.
Unpromptesloqueelintrpretedecomandosescribeautomticamenteencadalnaantesdeque
nosotrospodamosdarleinstruccionesmedianteCOMANDOS.Cadacomando,generalmente,
terminapresionandolateclaINTROparaquestesearecibidoporlamquinayejecutado.
Apartededarinstruccionesanuestramquina,desdeunaterminalpodremoseditartextos,archivos
deconfiguracin,apagaryreiniciarelsistema,instalarnuevosprogramas,leerelcorreo,conectaral
IRC,usarunnavegador...ymuchascosasms.Aprenderemosquelossistemasgrficosnoson
imprescindibles,yloqueesmejor,alfinalteterminargustandotodoestodeloscomandos(por
muchoqueahorapiensesqueno).Paraquetevayashaciendounaideadecmofuncionatodoesto
ylocomprendas,vamosapasaraexplicarcmofuncionalaterminalqueusanpordfecto
actualmentecasitodoslossistemasLinux.Enuncaptuloposteriorveremosdetenidamentelos
sistemasgrficosenLinux.

Conceptos bsicos de la terminal BASH


CuandoarranquemosnuestramquinaconLinuxyterminedecargartodoslosprocesosiniciales,o
bienveremosunapantallagrficadeloginounadetexto.Vamosaaprovecharestehechopara
sabercmopodemoscambiardeterminal(podemosusarvariasalavezeircambiandoentreellas).
PulsandolasteclasCtrl+Alt+F1accedemosalaprimeraterminal,pulsandoCtrl+Alt+F2accedemos
alasegunda,yassucesivamentehastaCtrl+Alt+F6(Podremosvolveralescritoriogrficocon
Ctrl+Alt+F7oavecesCtrl+Alt+F5).Esposiblequenopodamosaccederalaprimeraterminal
porquequizsestsiendoutilizadaporlosprocesosdelogingrficosiesqueyahemosingresado
desdeall.Lasterminalessesuelennombrartty0paralaprimera,tty1paralasegunda,yas
sucesivamente.Tambinesposible,comodescrubriremosluego,abrirunaterminalenotramquina
desdelanuestra,estoes,manejarlaremotamente.
Siemprequeestemosanteunanuevaterminal,veremosqueapareceantenosotrosalgocomo
NOMBREDEMIMQUINA login:.Encadaterminalseejecutaelprogramaqueproduceesta
salidaparaquenosAUTENTIFIQUEMOSenelsistema(estoes,paraquedemostremosquesomos
usuariosregistradosenelsistemayquepodemosusarlo).Elprogramasellamalogin,yesde
momentosloimportantequerecuerdesquehayunprogramaqueseejecutaencadaterminalyque
seencargadeautentificarnosenelsistema.Comovamosapracticar,NOentraremosalsistema
comoroot.Bien,entremosalsistemaenunadelasterminalesparapracticar:
NOMBREDEMIMQUINA login: minombredeusuario
Password: mipassword

Supongamosqueminombredeusuarioesnuestronombredeusuario(recuerdaqueLinux
distinguemaysculasyminsculasparalosusuariosylascontraseas).Despusdeintroducirlo
presionaremosINTRO,ydespusintroduciremosnuestracontrasea.Observaquenoaparecen
asteriscosmientrasintroducestucontrasea(estoesporseguridad,paraquenadieveacuntos
caracterestienetupassword),peropuedesborraryescribirnormalmente.Cuandohayasterminado,
presionaINTROdenuevo.
Secomprobarsinuestrousuarioycontraseasoncorrectos.Denoserasapareceralgocomo
Login incorrect. Please try again.Estosignificaquenuestronombredeusuarioo/y

contraseasonincorrectos,asquelointentaremosdenuevo.Cuandohagamosunlogin
satisfactorioenelsistema,senosmostraralgocomo:
User [miusuario] logged in. Last login was in [FECHA] from
[hostremoto_o_terminallocal]

Donde[miusuario]esminombredeusuarioenlamquina,[FECHA]eslafechadelltimo
ingresoalsistemay[nombre_de_host_remoto_o_terminal_local]eselnombredela
mquinadesdedondeingresamoslaltimavezenlanuestra,oelnombredelaterminallocalsiel
ltimologin;porejemplotty0.Enalgunoscasossenosindicarlasvecesquesehafalladoantes
deconseguirentrarconnuestronombredeusuario.Comoveremosdespus,podremossabersi
alguienintentahacersepasarpornosotrosconestainformacin.
Adems(comodespusveremosendetalle),lamquinanosinformardesitenemoscorreoo
correonuevoennuestrobuznlocal.PuedeseralgocomoNew mail for [misusuario]o
Mail for [miusuario],dependiendodesihaycorreonoledooledorespectivamente.Sino
lohayobiennosemuestranadaosemuestraalgocomoNo mail for [miusuario].
UnavezdentrodenuestrosistemaLinux,usandoBASH(justodespusdehacerlogin,pueses
BASHlaterminalpordefecto),senosmostrarlosiguienteencadalneaantesdequepodamos
introducirningncomando:
[miusuario@nombredemimquina directorioactual]$
miusuario@nombredemimquina /directorio/actual$

AestoquesemuestraantesdequepodamosintroduciruncomandolellamamosPROMPT.
AparecercadavezquepulsemosINTRO.Tambinpuedesapreciarquehemospuestodoslneas
deprompt.LaprimeradeellaseslaqueverssiusasunadistribucinRedHatobasadaenRedHat
(Mandrake,SuSE...).LasegundaeslalneaqueverssiusasunadistribucinDebianobasadaen
Debian.Analicemoslasdistintaspartesdelpromptmsdetenidamente:

miusuarioeselnombredeusuarioconelquehemosentradoalamquina.

nombredemimquinaeselnombredenuestramquinasineldominio(porejemplo,una
mquinallamadamaquina23.midominio.com,apareceraaqucomomaquina23).

directorioactualeselnombredeldirectorioactualenelqueestamossinlaruta
completa,sloeldirectorio.Comonadamsentraralsistema,estaremosen
/home/miusuario,lomsprobableesquemuestresolamentemiusuario.
/directorio/actuallaRUTACOMPLETAaldirectorioactual(explicacinms
abajo),queesloquemostrarnlasdistribucionesbasadasenDebian.Nadamsentrar
deberanmostrar/home/miusuario,peroahoraveremosporquestonoesas.

$indicaqueestamosenelsistemacomounusuarionormal,ynocomoroot.Si
entrsemoscomoroot,envezdeun$tendramosun#encadalnea,locualdebera
recordarnosque"tecleemosconcautela";)

Observaremosunejemplodeloquepasarasientrsemoscomoroot.Seraalgoas:
[root@mimquina root]#
root@mimquina /root#

Denuevo,lasegundalneaseraendistribucionesbasadasenDebian.Recordamosqueel
DIRECTORIOPERSONAL(directoriodondecadausuariopuedeescribirytienesusarchivosde
configuracinysutrabajo)derootes/root,mientrasqueparalosusuariosnormaleses
/home/nombredeusuario.Apreciamosqueahoralasealde"tecleaconcautela";)alfinal
delalnea,#,somosroot,tenemoslafuerza,perodebemosusarlaparabienpuestoqueesnuestra
mquina.
Encualquiermomento,cerraremosnuestrasesindeterminalescribiendologoutoexity
presionaremosINTRO.Elprogramadeloginselanzarautomticamenteypodremosentrarde
nuevoalamquinacomounusuariodistintoocomoroot.

Las variables de entorno. La variable PATH


Loprimeroquetienesquehacerestranquilizarte,puestoqueesrealmentemssencillodeloquesu
nombreaparenta.EstasvariablessepuedenllamartambinVARIABLESDESHELL.Y...ques
unvariable?UnaVARIABLEesunnombrealqueleasignamosunvalor.Unejemploseraasignar
alnombre"dias"elvalor"7".Esto,enbashunaveziniciadalasesinpodemosacerloas:
[usuario@maquina usuario]$ dias=7
$

dias=7

Apartirdeahora,paraentrarcomandos,lorepresentaremosdelasegundaforma;presentaremos$
siloscomandoshandeserejecutadosporunusuarionormalo#sihandeserejecutadosporroot,
enlugardemostrarentodosnuestrosejemplostodoelpromptcompleto.Debesrecordarqueel
comandoesloquevadetrsde$o#segncorresponda.
Sigamos.LoquehemoshechoarribahasidoASIGNARalnombre"dias"elvalorde"7".
AcabamosdecrearunaVARIABLEDEENTORNOconnombre"dias"yvalor"7".Sencillo,no?.
Podemosintroducirtextocomovalordeunavariableponindoloentrecomillas.Para"referirnos"a
lasvariablesdeentornopodemosusarelsmbolo$.Paramostrarelcontenidodeunavariable
usaremoselCOMANDOecho.As,porejemplo,paramostrarelvalordelavariablediasque
acabamosdecrear,escribiramos:
$ echo $dias

Locualnosdaracomosalidaunanuevalneaconelvalordedias,enestecaso,7.Nadams(por
ahora)detodoesto,simplementequenosvayasonando.
AhoradebemossaberqueBASHalmacenaalgunasvariablesdeentorno.Estasvariablesson
necesarias,ycontienen,porejemplo,eltipodesistemaoperativoqueseestusando,laversin,el
usuarioactivo,eldirectorioactual...
DetodasellasslonosinteresaporahoraunallamadaPATH(enmaysculas,enLinuxlos
nombreslasdistinguen,tambinenlasvariables).LavariablePATHesmuyimportante.Puedes
comprobarloquecontieneescribiendo:
$ echo $PATH
/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/home/usuario/bin

Comopodemosobservar,loquecontieneestavariablesonrutasdedirectoriosseparadaspordos
puntos./bin,/usr/bin,y/usr/local/binsonejemplosderutasdedirectorios.Paraqu
sirven?Essencillo.CuandointroducimosuncomandoenBASH(comolosqueahoravamosaver,

ycomoyahemosvistoconecho),sebuscaporelarchivodelmismonombrequeejecutaese
comando,entodoslosdirectoriosquelavariable$PATHtieneasignados.Siencuentraelarchivo
(quesellamaigualqueelcomandoquetecleemosycontieneunasinstrucciones)loejecutar.Sino
loencuentra,nosmostrarunmensajedeerror.Todoestopuedeparecercomplicado,perovers
quenoloesenabsoluto.
NotemosquesihacemoslogincomorootymostramoselcontenidodePATH,stacontienealgunas
cosasms,como/usr/sbiny/sbinporejemplo.Estosdirectoriosslolostendremossi
entramosdesdelapantalladelogincomoroot.
PeropodemosaadirmsdirectoriosanuestravariablePATH.Bienporquetrabajemosmuchocon
ellosoporqueesnecesarioparalaejecucindealgnprograma.Laformadehacerloesla
siguiente:
$ PATH="$PATH:/home/usuario/programas"

Recordamosquelaprimera$sloindicaqueestamostrabajandocomounusuarionormal?
Entoncesperfecto.Loquehaceestalneaessimple.AlcontenidodePATHaadeunosdospuntos
yacontinuacinaadeeldirectorioquenosotrosqueramosanuestraPATH.Elresultadoesquesi
mostramoshaoraelvalordePATHconechoobtendremostodoloquetenamosanteriormente
mseldirectorioquehemosaadido.
Paraaspectosmsavanzadossobrelasvariablesdeentornoylaprogramacinenshellsepueden
variosmanualesoguasenlossitiosdedocumentacinoficialdeLinux:TheLinuxDocumentation
ProjectoTLDPes(LuCAS).Detodosmodostrataremoslashellunpocomsafondoensecciones
posteriores.

Comandos bsicos en la terminal BASH


Ciertamente,todosestosconocimientosqueestamoscitandopuedencasisiempreaplicarseaotras
terminalescomosh,peronosreferimosaBASHporserlaquevienepordefectoconLinux.Ahora
vamosaexplicarelconceptodeDIRECTORIODETRABAJOodirectorioactual.Enestalnea:
[usuario@maquina usuario]$

estamostrabajandoeneldirectorio/home/usuario.Ququieredeciresto?Puesesfcil,que
podemos"hacerreferencia"aunarchivodesdeuncomandosimplementeconelnombredearchivo
ynosurutacompletasisteesten/home/usuarioporqueeseldirectoriodetrabajoactual.
Unejemplorpido,vamosaeditarunarchivoparacomprenderesto,notepreocupesporel
comandovim,puestoqueloveremosmsadelante.Siestamosen/home/usuarioytenemos
unarchivoquesellama/home/usuario/mitexto,paraeditarlo,bastaraconhacer:
[usuario@maquina usuario]$ vim mitexto

Comoestamostrabajandoeneldirectorio/home/usuarioyelarchivoquequeramoseditar
tambinesteneldirectoriodetrabajo,eleditorloencontrarasinproblemas.Estoseraequivalente
ahacer:
$ vim /home/usuario/mitexto

perocomoacabasdever,teclearlarutacompletanoesenabsolutonecesariosielobjetivode

nuestrocomandoesteneldirectoriodetrabajo.

Sugerencia
Puedessalirdeleditorpulsando:Esc :wq INTRO
ParamsinformacinsobreVIMmiraelCaptulo

4,VIM
bsico.

Referencias relativas
Esteconceptoestambinsencillo.Partimosdequeestamosotravezen/home/usuario(de
nuevonotepreocupesporvim,elcomandodeleditor,lousamoscomounejemploparaqueveas
lasreferencias,noesnecesarioquepruebesestoporquevamosaexplicarlomsadelante),y
queremoseditarunarchivoqueesten/home/usuario/documentos/mitexto.Alestaren
/home/usuario,bastaraconhacer:
$ vim documentos/mitexto

Locualseraequivalenteahacer:
$ vim /home/usuario/documentos/mitexto

Perocomoyahemosvisto,conlareferenciarelativaaldirectorioenelquenosencontramoses
suficiente.Porestoyahaspodidoobservarquepodemosreferirnosalosarchivosdedosformas
distintas:medianteunareferenciarelativaaldirectorioactualenelquenosencontramoso
medianteunaREFERENCIAABSOLUTA.Lasreferenciasabsolutascomienzansiempredesdela
razdelsistemadearchivos,/,yporesosiempreempiezancon/eindicanlaRUTACOMPLETA
alarchivoalquenosestamosrefiriendo.

El comando cd
Estesencillocomando,loquenosvaapermitirescambiarnuestrodirectoriodetrabajo(o
directorioactual).Esunaabreviatura(comomuchosotroscomandos)deloquehace,enestecaso
deChangeDirectory.Podemosnecesitarcambiarnuestrodirectoriodetrabajosivamosatrabajar
conmuchosarchivosqueestneneldirecotrioalquenoscambiamos,ynoqueremosteclear
siempressurutacompletaporresultarestodemasiadoincmodoylargo.Partimosde
/home/usuario,ynosqueremoscambiara/usr/local,queesdonderesidenmuchascosas
personalizadasdenuestrosistema.Sepodrahacerdelasiguienteforma:
[usuario@maquina usuario]$ cd /usr/local/

Yentoncesyaestaramosen/usr/local:
[usuario@maquina local]$

Sisimplementeescribimoscd,sinningnargumento(datoquenecesitauncomandoparaoperarde
unamanerauotra,conunarchivouotro...comodespusveremos),loqueharserllevarnosa
nuestrodirectoriopersonal:
[usuario@maquina local]$ cd
[usuario@maquina usuario]$

Comopuedesver,ahoranuestrodirectoriodetrabajoes/home/usuario,queesnuestro
directoriopersonal.
Perohayalgunascosasquenohemoscontadodelasreferenciasrelativas.Esquedospuntos
seguidos..serefierenaldirectorioinmediatamenteanterior(superior)alquenosencontramos,y
unpunto.serefierealdirectorioenelquenosencontramos(directorioactual).Siestandoen
/home/usuarioescribescd .,tedarscuentadequenocambiadedirectorio,sequedaenel
actual,delamismamaneraquesihubierashechocd ..tehabrallevadoa/home,eldirectorio
inmediatamentesuperior.Estosdoscomandosequivaldranacd ./ycd ../;eslomismo,pero
esrealenteconlabarracomodebenutilizarseestoscomandos(puestoquenosestamosrefiriendoa
directorios).Utilizarlossinella,puededarlugaraconfusinyequivocaciones(recuerdaquelos
archivosydirectoriosocultoscomienzansunombrepor.).Ahorayasabesqueparapoderira
/home/usuario/documentospodramoshaberhecho:
$

cd ./documentos

Locualnoesmuyeficienteenestecaso,perocomoveremosmsadelante,esdeobligada
utilizacinparaejecutaruncomandoeneldirectorioactualsiestedirectorioactualnoestenla
PATH.Porejemploparaejecutarunprograma(comoveremosmsadelante)queestuvieseen
/home/usuario,alnoestarestarutaen$PATH,necesitaramoshacerloas(estandoen
/home/usuario):
$ ./miprograma

Tehabrsdadocuentadequeconunareferenciarelativaesmscmodo,mssencilloyms
rpido.Sisimplementedijsemosdesde/home/usuariomiprogramaaBASH,nolo
encontrara,ynosdevolveraquenohaencontradoelcomando.Porqu?Puesesfcil,
/home/usuario,queesdonderesidemiprograma,noesten$PATH.Bueno,laejecucin
paradespus,ahorasigamos:
Desde/home/usuariopodramoshaberidoa/usr/localconunareferenciarelativa
tambin:
[usuario@maquina usuario]$ cd ../../usr/local

Estecomandosubedosniveles(aldirectorioinmediatamentesuperiora/home/usuario,quees
/home,yluegoaldirectorioinmediatamentesuperiora/homequees/;unaezallbuscamediate
referenciarelativaa/eldirectoriousr,yunavezdentro,medianteunareferenciarelativaal
directoriousr,buscaeldirectoriolocal.Enestecasoesmsrpidointroducircd
/usr/localqueusarunareferenciarelativaaldirectorioactual.Generalmente,usaremos
referenciasabsolutas(alsistemadearchivos,/)cuandoloquequeremosbuscar(enestecasoun
directorio)seencuentrevariosnivelesporencimadeldirectorioactual,oenunarutadistintacomo
enesteejemplo.

Archivos y directorios
Ahoravamosatrabajarconarchivosydirectorios,vamosacreardirectorios,losborraremos,
listaremosarchivos...Todoestonoesdifcildehacer.Sirecordamos,espreferiblequetrabajemos
comounusuarionormalynocomoroot,paranodaarnuestrosistemaporaccidenteintentando

borrarundirectorioimportante.Empezaremosconobtenerunlistadodeloscontenidosdel
directorio/.Estesehaceconelcomandols.Lasopciones(indicanalcomandolaformaenlaque
debetrabajar)quetieneelcomandolssonprincipalmente-ay-l.-aindicaquesemuestren
todoslosarchivos,inclusolosocultos,y-lmuestraunlistadolargo,condetallescomoelusuario
alqueperteneceelarchivo,lospermisosdeesearchivoyalgunascosasms.Losparmetrosque
tomalsprincipalmenteesundirectorio.Sinoseespecificaninguno,sacaunlistadodeldirectorio
actual.Veamosalgunosejemplos:
[usuario@maquina usuario]$ ls
Desktop Mail documentos kernelconfig programas proyectos
[usuario@maquina usuario]$

Estoesunlistadodelosarchivosydirectoriosquecontieneeldirectorioactual,enestecaso
/home/usuario.Enalgunasdistribuciones,losdirectoriosaparecenencolorazul,los
ejecutablesencolorverde,etc.peromuchasvecesnohaydistincin.
[usuario@maquina usuario]$ ls -l
total 44
drwx--S--drwx--S--drwxr-sr-x
-rw-r--r-drwxr-sr-x
drwxr-sr-x

3
2
3
1
4
7

usuario
usuario
usuario
usuario
usuario
usuario

usuario
usuario
usuario
usuario
usuario
usuario

4096
4096
4096
18417
4096
4096

Mar
Mar
Mar
Mar
Mar
Mar

28
28
28
27
28
28

10:51
01:40
10:24
21:31
10:28
00:18

Desktop
Mail
documentos
kernelconfig
programas
proyectos

Comopuedesver,laopcin-lnosdevuelveunlistadolargo,enelqueapreciamospermisos(que
explicaremosmsadelante),dueoygrupodearchivo,fecha,nombre,tamao,yalgunosotros
detalles.
[usuario@maquina usuario]$ ls -a
.
..
.DCOPserver_usuario
.DCOPserver_usuario_:0
.ICEauthority
.MCOP-random-seed
.Xauthority
.bash_history

.bash_logout
.bash_profile
.bashrc
.viminfo
.gtkrc-kde
.kde
.kderc
.mcop

.mcoprc
Mail
.mozilla
ccmsn
.ssh
documentos
kernelconfig
.wmrc
programas
.xchat
proyectos
.xsession-errors
Desktop

Aqupuedesverunlistadodetodoslosarchivosydirectorios,incluidoslosocultos.Podramos
emplearlasdosopcionesjuntas,comols -laols -al,loquenosdevolveraunlistadolargo
contodoslosarchivos,ocultosincluidos.Sitienescualquierdudaoquieressaberquparmetros
aceptauncomando,simplementeescribeecomando --helpyversunalistadeopcionesy
argumentosquepuedesusarconesecomando.Enelcasodels:
$ ls --help
Modo de empleo: ls [OPCIN]... [FICHERO]...
Muestra informacin acerca de los FICHEROs (del directorio actual por defecto).
Ordena las entradas alfabticamente si no se especifica ninguna de las
opciones -cftuSUX ni --sort.

Los argumentos obligatorios para las opciones largas son tambin obligatorios
para las opciones cortas.
-a, --all
no oculta las entradas que comienzan con .
-A, --almost-all
no muestra las entradas . y .. implcitas
--author
imprime el autor de cada fichero
-b, --escape
imprime escapes octales para los caracteres no
grficos
--block-size=TAMAO
utiliza bloques de TAMAO bytes
-B, --ignore-backups
no muestra la entradas que terminan con ~
-c
con -lt: ordena por ctime y muestra ctime (fecha
de ltima modificacin del fichero)
con -l: muestra ctime y ordena por nombre
en cualquier otro caso: ordena por ctime
-C
muestra las entradas por columnas
--color[=CUNDO]
especifica si se usar color para distinguir los
tipos de ficheros. CUNDO puede ser `never',
`always' o `auto'
-d, --directory
muestra las entradas de los directorios en lugar
de sus contenidos
-D, --dired
genera el resultado para el modo `dired' de Emacs
-f
no ordena, utiliza -aU, no utiliza -lst
-F, --classify
aade un indicador (uno de */=@|) a las entradas
--format=PALABRA
across -x, commas -m, horizontal -x, long -l,
single-column -1, verbose -l, vertical -C
--full-time
como -l --time-style=full-iso
-g
como -l, pero no muestra el propietario
-G, --no-group
no muestra la informacin del grupo
-h, --human-readable
muestra los tamaos de forma legible
(p.e. 1K 234M 2G)
--si
anlogo, pero utilizando potencias de 1000,
no de 1024
-H, --dereference-command-line sigue los enlaces simblicos en la lnea de
rdenes
--indicator-style=PALABRA aade un indicador con estilo PALABRA a los
nombres de las entradas: none (predeterminado),
classify (-F), file-type (-p)
-i, --inode
muestra el nmero de nodo-i de cada fichero
-I, --ignore=PATRN
no lista las entradas que coincidan (encajen)
con PATRN de shell
-k
como --block-size=1K
-l
utiliza un formato de listado largo
-L, --dereference
al mostrar la informacin de un fichero para un
enlace simblico, muestra la informacin del
fichero al que apunta el enlace en lugar de la
del propio enlace
-m
rellena el ancho con una lista de entradas
separadas por comas
-n, --numeric-uid-gid
como -l, pero muestra los UIDs y GIDs numricos
-N, --literal
muestra los nombres literalmente (no trata p.ej.
los caracteres de control de forma especial)
-o
como -l, pero no muestra el grupo
-p --file-type
aade un indicador (uno de /=@|) a las entradas
-q, --hide-control-chars
imprime ? en lugar de los caracteres no grficos
--show-control-chars
muestra los caracteres no grficos tal y como
son (predeterminado a menos que el programa sea
`ls' y la salida sea un terminal)
-Q, --quote-name
encierra los nombres de las entradas entre
comillas
--quoting-style=PALABRA utiliza el estilo de cita PALABRA para los
nombres de las entradas:
literal, locale, shell, shell-always, c, escape
-r, --reverse
invierte el orden, en su caso

-R, --recursive
-s, --size
-S
--sort=PALABRA

muestra los subdirectorios recursivamente


muestra el tamao de cada fichero, en bloques
ordena los ficheros por tamao
extension -X, none -U, size -S, time -t, version -v
status -c, time -t, atime -u, access -u, use -u
--time=PALABRA
muestra la fecha segn PALABRA, en lugar de la
fecha de modificacin:
atime, access, use, ctime status; utiliza
la fecha especificada como clave de ordenacin
si --sort=time
--time-style=ESTILO
muestra la fecha utilizando el estilo ESTILO:
full-iso, long-iso, iso, locale, +FORMATO
FORMATO se interpreta como en `date'; si FORMATO
es FORMATO1<nuevalnea>FORMATO2, FORMATO1 se
aplica a los ficheros no recientes y FORMATO2
a los ficheros recientes; si ESTILO est precedido
por `posix-', ESTILO surte efecto solamente fuera
del local POSIX
-t
ordena por la fecha de modificacin
-T, --tabsize=COLS
establece los topes de tabulacin a cada COLS
en lugar de 8
-u
con -lt: ordena por atime y muestra atime (fecha
de ltimo acceso al fichero)
con -l: muestra atime y ordena por nombre
en cualquier otro caso: ordena por atime
-U
no ordena; muestra las entradas en el orden del
directorio
-v
ordena por versin
-w, --width=COLS
establece el ancho de la pantalla en lugar del
valor actual
-x
muestra las entradas por lneas en vez de por
columnas
-X
ordena alfabticamente por la extensin de la
entrada
-1
muestra un fichero por cada lnea
--help
muestra esta ayuda y finaliza
--version informa de la versin y finaliza
TAMAO puede ser (o puede ser un entero seguido opcionalmente por) uno
de los siguientes: kB 1.000, K 1.024, MB 1.000.000, M 1.048.576, y as
en adelante para G, T, P, E, Z, Y.
Por defecto, no se emplea color para distinguir los tipos de ficheros. Esto
equivale a usar --color=none. Usar la opcin --color sin el argumento opcional
CUNDO equivale a usar --color=always. Con --color=auto, slo se muestran
los cdigos de color si la salida estndar est conectada a un terminal (tty).
Comunicar bugs a <bug-coreutils@gnu.org>.

(Laayudapuedenoestarencastellano).Comopuedesver,lacantidaddeopcioneses
impresionante.Tehemoscitadolasquedemomentotepuedensernecesarias.Esobvioquenoes
necesarioquerecuerdesningunaexceptolasdosvistas,cuandoelrestopuedesobtenerlasmediante
--help.Recuerdaquepuedeshacerestoconcasicualquiercomando.
Podramoslistarloscontenidosdeotrodirectoriosincambiarnosal:
$ ls /usr/local/
bin include lib man sbin share src

Pasemosaverahoracmopodemoscrearundirectorio.Comopiensoquehabrsintuido,nopuedes
crearundirectorioenunlugarenelquenotienespermisoparaello.Generalmente,unusuario
normalslotendrpermisoparaelloensudirectoriodeusuario,/home/usuario,asque
cmbiateahsinoesdondeests.Paracreardirectoriospodemosutilizartantoreferenciasrelativas
aldirectorioactualcomoreferenciasabsolutasalsistemadearchivos.Paracreardirectorios,basta
conusarelcomandomkdir.Crearemosundirectorioen/home/usuariollamadopruebas,y
otrodentrodeestellamadopruebas1comoejemplo:
$ cd /home/usuario

Primeraformadehacerlo:
$ mkdir pruebas
$ cd pruebas
$ mkdir pruebas1

Segundaformadehacerlo:
$ mkdir pruebas
$ mkdir pruebas/pruebas1

Terceraformadehacerlo:
$ mkdir /home/usuario/pruebas
$ mkdir /home/usuario/pruebas/pruebas1

Creoqueyalohasentendido,verdad?Puedesmoverteentreesosdirectoriosconelcomandocd
comoyaexplicamosantes,aspracticasunpoco.Ahoravamosamoverycopiararchivosaesos
directorios.Paramoverarchivosydirectoriosusaremoselcomandomv.Datecuentaqueeste
comandotambinnospermiterenombrarunarchivo.Supongamosquetenemosunarchivollamado
miarchivoen/home/usuario.Vamosarenombrarloaminuevoarchivo(es
recomendablenousarespaciosenlosnombresdearchivo,puedesusarguionesbajos(_)en
sustitucindelosespacios;asimismoesrecomendablecomoyatratabamos,nousaracentosenlos
nombresdearchivo):
$ cd /home/usuario

Primeraformadehacerlo:
$ mv miarchivo minuevoarchivo

Segundaformadehacerlo:
$ mv miarchivo /home/usuario/minuevoarchivo

Terceraformadehacerlo:
$ mv /home/usuario/miarchivo minuevoarchivo

...yasalgunasformasms,perocreoqueyalohasentendido,aqutambinpodemosemplear
referenciasrelativasaldirectorioactualyreferenciasabsolutasalsistemadearchivos.Podemos

renombrardirectoriostambin,ymoverlosunosdentrodeotros.Paramoverundirectoriollamado
programasyllevarlodentrodeotrollamadopruebas,haramosalgocomoesto:
$ mv programas pruebas/

Deestaformaeldirectorioprogramassequedadentrodepruebas.Comoves,elcomandomv
tomacomoprimerargumentoelficheroodirectorioorigen,ycomosegundoargumentoeldestino;
recurdalo.Podramosreestablecereldirectorioprogramasalnivelanteriordondeestaba:
$ cd pruebas/
$ mv programas ../

Comohabrspodidoapreciaryyahemosdicho,elcomandomvtomaprimeroloquesequiere
moverydespusadndesequieremover.Paradominarlototalmente,lomejoresquepractiques,
eslanicaformadecomprendercmosecomportabajodeterminadassituacionesestecomando,y
dequetlodomines.
Paraborrarundirectorio,siesteestavaco,usaremoselcomandormdir.Porejemplovamosa
borrarlosdirectoriospruebas1ypruebasquecreamosanteriormente.Sirecuerdas,
pruebas1estabadentrodepruebas:
$ ls
pruebas
$ rmdir pruebas
rmdir: `pruebas': El directorio no est vaco / Directory not empty
# Como ves, no podemos borrarlo porque no est vaco
$ cd pruebas/
$ ls
pruebas1
$ rmdir pruebas1
# pruebas1 est vaco y por lo tanto se borra
$ cd ../
$ rmdir pruebas
# Ahora pruebas est vaco y tambin se borra

(Laslneasquecomienzanpor#sonexplicacionesdelmanualparaquecomprendasloquepasa).
Estclaroquehacertodoestoparaborrarundirectorioytodoloquestecontenganoesdeltodo
cmodo.Unaslneasmsadelanteveremoscmoesposibleborrartodoundirectoriocontodolo
quecontengapordebajodel(siemprequetengamoslospermisosadecuadossobretodoloque
contieneysobreeldirectoriomismo).
Elcomandormnospermiteborrarunoovariosarchivos.Porejemplo,borraremoselarchivo
minuevoarchivo:
$ rm minuevoarchivo

Sitenemoslospermisosadecuadossobrel,minuevoarchivoserborrado,enlamayorade
loscasossinpreguntarnos,porlocualdebemostenerbastantecuidadoconloquehacemosconlos
archivosdenuestrosistema,porqueunavezborradosesimposiblevolverarecuperarlos(paraque
losborraramosentoncessisiguiesenestandoah?).Aligualquetodosloscomandosanteriores,rm
esmuypotenteysobretodomuyflexible.Veremoscmoescapazdeborrarundirectoriocontodo
loquetengapordebajo.

Paraestoseusa,principalmente,laopcin-r.Estaopcinledicearm(yaalgunosotros
comandos)queopereconrecursividad,estoes,quesevayaadentrandonivelporniveldebajodel
directorioquelehemosindicadoyquevayaborrandotodoloqueencuentreasupaso.Deeste
modo,eldirectoriopruebas/quetenamosantes,podramoshaberloborradoas:
$ rm -rf pruebas/

Laopcin-rcomohemosdichoirborrandotodo,terminandoporborrareldirectorio,ylaopcin
-fesparaquenonospreguntesiqueremosqueborreonocadasubdirectoriodelquenosotrosle
indicamos.Recuerdoqueelcaracter*hacereferenciaatodoslosarchivosdeundirectorioporlo
quesiquisieramoshaberborradotodoloquetuviesedentroeldirectoriopruebas/perosin
borrarste,podramoshaberhecho:
$ rm -rf pruebas/*

Laopcin-rnospermitedeigualformacopiarundirectorioentero.Pogamosquequeramos
copiareldirectoriopruebas(contodosucontenido)aunnuevodirectoriollamadopruebas2
quecrearemosalmismonivelquepruebas:
$ cp -rf pruebas/ pruebas2/

Msomenosyatienesunaideadecmosemanejaelsistemadearchivosdesdelaconsola.Para
entenderydominartodoestonohaymsquepracticarlo.Siquieressabercmocreararchivos,la
seccindeleditorvimpuedeservirte,ahoravamosacomentaralgunosdetallesmsparareferirnos
aarchivosenBASH.
Piensaquetenemosundirectorioquesellamamis libros.Comopuedesobservar,estenombre
dedirectoriotieneunespacio,locualnoesnadarecomendable.Lamanerade"nombrarlo"desdela
terminaleslasiguiente:mis\ libros.Elespaciosesustituyepor\ (barrainvertidayun
espacio).
Piensaahoraquetenemosquereferirnosaunarchivoquetienecincoletrasperoquedesconocemos
culeslaltima(ocualquiera)deestasletras.Porejemplo,unarchivoquesellamemaybe,
nosotrosdesconocemoslaletra"b".Podramosreferirnosalusandomay?e,ylaterminallo
encontrarainmediatamente.
Elasterisco*puedereferirseatodoslosarchivosdeundirectoriosilousamossolo.Porejemplo,
borramostodoslosarchivosdeundirectorio:
$ rm *

Obienpuedereferirseaarchivosquecontenganunacadenadecaracteresoqueempieceno
terminenporunadeterminadacadenadecaracteres.Porejemplotodoslosarchivosocultos(que
empiezanpor"."):
$ rm .*

Otroejemplo,borramostodoslosarchivosquecontenganlacadena"so"ensunombre:
$ rm *so*

Todoestoesmuysencillo.VamosaterminarconunafuncinmuyimportantedeBASH,quees

completarelnombredearchivoodirectoriopornosotros.Supongamosquequeremosentrarenun
directoriodentrodelactualquesellamahtml_docsyquenohayningnotrodirectorioque
empiecedemodoigualoparecido.Escribiremos:
$ cd html (presionamos el tabulador aqu)
# (entonces la lnea se nos queda:)
$ cd html_docs/

SipulsamosINTRO,noshabremoscambiadoaldirectoriohtml_docs/.Miraloqueacabamos
dedescubrir.Siestamosescribiendounnombredearchivoodedirectorioypresionamosel
tabulador,siesenombreexiste,BASHlorellenarpornosotros.Cmodo,no?Deestaformano
tendremosqueescribirloentero.Ahorasupongamosqueademsdehtml_docshayotro
directorioalmismonivelquesellamahtml_includes.Siescribimosahoracd htmly
presionamoseltabulador,nohabrsalidaporquenosabrculdeelloselegir.Lasolucinespulsar
eltabuladordosvecesynosmostrarlasopcionesquecoincidenconloquellevamosescrito,conlo
cualpodresmoseguirescribiendohastaquehayamoseliminadounadelasopcioensypulsemosel
tabuladordenuevosolounavez,entoncessquenosrellenarelnombredearchivoodirectorio.
Tenencuentaqueestosirveconcasicualquiercomandoyesindiferenteparareferenciasrelativas
aldirectorioactualoabsolutasdelsistemadearchivos,esmuytilypermiteahorrarmuchotiempo
yequivocacionesescribiendonombresdeficherosodirectoriosenlalneadecomandos.Sinduda,
unaimportantsimacaractersticaparalosquenonossobraeltiempo:)
YahemosdadounrepasitoaalgunascosasbsicasdelaterminalBASH.Porlomenosyanoests
perdido,practicatodoestounpoco,ytambinlelodevezencuando,porqueconformevayas
practicando,mejorcomprendersalgunascosasqueahoranoerescapazdecomprenderoasimilar
sinhabervistootrasprimero.EldominiodelaterminalBASHenunsistemaLinuxes
imprescindible,porque(afortunadamente)nohayGUIs(interfacesdeusuariogrficas)paratodolo
quepodemoshacerennuestrosistema.Verscomoaunqueeststrabajandoenmodogrficodentro
deunashorasounosdas,tendrsabiertacasisiempreunaventandelaterminalenmodogrfico
parahacertodasesascosasquesloesposible(ymseficiente)hacerlasdesdeunaterminaloque
sonmsflexiblesdesdelalneadecomandos.
AunquemstardeseguiremosviendocosasmsavanzadasdeBASH,comolapersonalizacindel
prompt(lepodremosdarcolores)olaasignacindevariablesdeentornoquepodamosnecesitar...y
muchoms.

Captulo 4. VIM bsico


Tabladecontenidos
Conceptosbsicos
CmofuncionaVIM?
ModoEdicin
Modocomandos
Elmodoespecial:VISUAL
~/.vimrc
Obtenerayuda

Conceptos bsicos
AlolargodelaadministracindeunsistemaLinuxpodemostoparnosconlanecesidaddeeditarun

ficherodeconfiguracinoalgoparecido.Bien,enLinuxhaymuchoseditoresquepuedensatisfacer
nuestrasnecesidades(nano,pico,jedit...).EnestecaptuloNOvamosacubrirunaguerratpica
"VIMvs.Emacs".Simplementemostraremosuneditormuypotenteyqueremosqueconestas
nocionescualquierusuariopuedabeneficiarsedelapotenciadeVIMsintenerqueentrarenmuchos
detallesniencosascomplicadas.
AntesdenadavamosaintroducirunpocosobrequesVIM,dedndevieneyquvamosa
aprenderenestecaptulo.
VIMesuneditordetextosparaLinux.EsunderivadodeVI,VIMsignificaVIiMproved,esdecir,
elmismoeditorVIperomejorado.Yenestecaptuloaprenderemosahacerunusobsicodeeste
fabulosoeditor.

Cmo funciona VIM?


VIMtienedosgrandesmodosparafuncionar,elmododeedicinyelmodocomandos.Parapasar
delmodocomandos(queesenelqueseiniciaVIM)almodoedicin,pulsamoslateclaIoInsert.
ParapasardelmodoedicinalmodocomandospulsaremoslateclaEsc.
ParainiciarVIM,haremoslosiguiente:
$ vim <fichero>

VIMiniciarenel'ModoEdicin'queexplicarenlasiguienteseccin.

Modo Edicin
Esteeselmodoenelquepodremoseditaruntexto,ocrearunonuevo...SipulsamoslateclaIo
InsertotravezcambiaremoselmodoInsertporelmodoReplace.Nocreoquehayaqueexplicar
mucholasdiferenciasentreinsertartextooreemplazareltexto.Paramovernosporelfichero
podemosutilzarlasflechas,Re.PgyAv.Pg.

Nota
Paravolveralmodocomandos,sirveconpulsarlateclaEsc.

Modo comandos
EsteeselmodomsinteresantedeVIM,conlpodemoshacercosasmuycuriosas,comopor
ejemplo,activarelresaltadodesintaxis,deshacer,abrirunnuevofichero,guardar,etc..
Enlasiguientetablaexplicarloscomandosquepuedenresultarmsinteresantes.
Tabla4.1.ComandosmsusualesenVIM
Comando
:w
:w[fichero]
:q
:q!
:wq

Descripcin
Guardaelbufferenelfichero
Guardaelbufferenfichero(comounSaveas...)
SalirdeVIM
SalirdeVIMsinguardarloscambios
Salvaryguardar

Ejemplodeuso(si
aplica)

:w~/ficherito

Comando
:u
CtrlR(^R)
:d:dN
:syntax[on|off]
:s/[patrn]/
[reemplazo]/g
:![comando]
[argumentos]
:+[nmero]
:[nmero]
:[nmero]
:+/[patrn]

Ejemplodeuso(si
aplica)

Descripcin
Deshacer

Rehacer

BorrarlalneacorrienteoborrarNlneasapartir
delaactual.
Activa/Desactivaelresaltadodesintaxis
Sustituye[patrn]por[reemplazo]enlalnea
actual.
Ejecuta[comando]pasndolelosargumentos
[argumentos]enelshell
Baja[nmero]lneas
Sube[nmero]lneas
Vaalalnea[nmero]
Busca[patrn]eneldocumento

:syntaxon
s/hoal/hola/g
:!gccgO0oprueba
prueba.c
:+256
:12
:1207
:+/dondetemetes

El modo especial: VISUAL


Paraentraraestemodotenemosquepulsarvenelmodocomandos.Parasalirdeelpulsaremos
Esc.
ElmodoVISUALnospermitireliminargrandesbloquesdetextosintenerqueirborrandolneaa
lnea.ParaelloentraremosenelmodoVISUAL(pulsandov)ynosmoveremosconloscursores
paraseleccionarelbloquequequeremoseliminar.Unaveztenemosseleccionadoelbloque,
pulsamosSupryyaest,VIMnosinformardequehemoseliminadounbloquede"n"lneas.

~/.vimrc
Vimcuentaconunficherodeconfiguracinen~/.vimrcquenospuedesermuyutilpara
personalizarnuestroVIM.CualquiercomandodeVIMsepuedeintroducirenl.Ademsdeesto,
haymuchasopcionesquepuedencambiarseyhastasentenciascondicionales(algoquequedafuera
delalcancedeestecaptulo).Cualquierlneaquecomiencecon"(comillas)serignoradaporVIM.
Aestolollamamoscomentarios.
Comoejemplomostraremoscomohabilitarelresaltadodesintaxisparatodoslosficherosqueabra
ellector:
" " "
" ~/.vimrc
" " "
"
" Activamos el resaltado de sintaxis
syntax on
" Activamos la barra de informacion
set ruler
" Desactivamos la compatibilidad con VI
set nocompatible
" El identado lo hace VIM
set autoindent

" Caractersticas especiales de VIM


if has("autocmd")
" Habilitamos caractersticas propias de cada tipo de fichero
filetype plugin indent on
" Volvemos a la ltima lnea que habamos editado.
" ( Juntar las 2 siguientes lneas en una )
autocmd BufReadPost * if line("'\"") > 0 &&
line ("'\"") <= line("$") | exe "normal g'\"" | endif
endif " has("autocmd")

Obtener ayuda
ObviamenteestahasidounaintroduccinmuylivianaaVim.PeroVIMesmuchoms!.Yel
mejorpuntodepartidaesejecutarvimtutor.Estecomandoloquehaceesirguindonospasoa
pasoyconejemplos.Editandobuffers(ficheros)preparadosparaelcorrectoaprendizajedevim.
Vimesmuygrande,sepuedenhacermuchascosasconl.Esmuyrecomendableutilizarvimtutor
parainiciarseenestegraneditor.

Captulo 5. Usuarios y Grupos. Permisos


Tabladecontenidos
Usuarios
AdministracindeUsuarios.
Grupos
Administracindegrupos
Permisosydueos
Elcomandosu
SUID
sudo
EnestecaptuloabordaremosuntemaescabrosoenLinux(quizasleinteresealosparanicos).
Permisos,usuariosygruposcomobienindicaelttulo.Unsistemamaladministradopodraser,y
dehechoesunautnticocoladero.Antetodoquisieraporfavorquereportislosposiblesfallos
tantodeestaseccincomodecualquierotra,yaqueestemanualpretendeserundocumentotil,
porloqueosdoylasgraciasporadelantado.Vamosaello.

Usuarios
Linuxesunsistemamultiusuarioporloqueesnecesariolaadministracin(segura)delosdistintos
usuariosquevanahacerusodelosrecursosdelsistema.Demomentonovamosadargrandes
nocionesdeseguridad,perosunaintroduccinalostiposdeusuariosyquprivilegiosdeben
tener.
Dentrodeunsistemaexistenalmenos3tiposdeusuarios.

Usuariosnormalesconmsomenosprivilegiosqueharnusodelosrecursosdelsistema.
Songeneralmenteinexpertosypropensosacausarproblemas.Simplementedebenpoder
usaralgunosprogramasydisponerdeundirectoriodetrabajo.

UsuariosdeSistemasonaquellosencargadosdelosdemoniosdelsistema,recordemosque

paraLinuxtodoesunfichero,elcualtieneundueoyesedueotieneprivilegiossobrel.
As,esnecesarioquealgnusuariodelsistemaposealosprocesosdelosdemonios,como
veremosmsadelante.
Resumiendo,esnecesarioqueparaalgunosserviciosdelsistemasecreenusuarios
(generalmenteparademonios).ComopuedeserelcasodeMail,irc...Estosusuariostendrn
losprivilegiosnecesariosparapoderhacersutarea,gestionarestosusuariosesdegran
importancia.Noobstante,estetipodeusuariosnonecesitaqueseleasigneunshell,puesto
quesimplementeposeernlosdemonios,peronosernecesarioquehaganloginenel
sistema.

ROOTEsteesdios;)Comoyahabisleidoencaptulosanteriorescuidadoconloquese
hacealentrarenelsistemacomoroot.llopuedetodo,enprincipionohayrestricciones
paraL(aunquealgunosprogramasnosavisarndequeestamoshaciendounaautntica
burradadesdeelpuntodevistadelaseguridad).

Ademsdelcriterioanterior,existeuncriteriosecundarioparaclasificaralosusuariosdeun
sistema.YavamosconociendolatendenciadelosUNIXyLinux,primero,porhacerquecasitodo
seaunfichero,ysegundo,porhacerqueabsolutamentetodotengaundueo(comoiremos
descubriendoamedidaqueusamoselsistema,nadasedejaalazarenesteaspecto),incluidoslos
procesosqueseestnejecutandoenelsistema.Otroconceptoquellevaaestasegundaclasificacin
es,eldelosusuariosdelosserviciosdelhost.Estetipodeusuariossimplementeaccede
remotamenteaalgunosserviciosdenuestramquina,talescomocorreoelectrnicooFTP.Estonos
llevaadefinir:

Usuariosdelogin.Estosprimeros,puedenhacerloginenelsistemayusarunashellenl.
Esdecir,tienenunashellvlidadeinicio(comoseindicamsabajo),generalmente,
/bin/bash.

Usuariossinlogin.Estetipodeusuarios,biensonusuariosdesistema,obienusuariosde
losserviciosdelhost.Enamboscasosnopuedenhacerloginenelsistemadirectamenteni
usarunshell.Enotraspalabras,notienenasignadounshellvlido.Sumisin,es"poseer"
algunosarchivosydirectoriosdelsistema,ymanejarlosrestringidamenteatravsde
algunosprogramas(elservidorFTP,elservidordecorreoelectrnico,etc.darnalos
usuariosdelosserviciosdelhostlosprivilegiossuficientes:almacenarmensajes,etc.).Enel
casodelosusuariosdesistema,poseernademsalgunosprocesos(enelcaptulode
procesosaprenderemosmsacercadeestesubtipoespecialdeusuarios).

Administracin de Usuarios.
Laadministracindeusuariosserealizaentodaslasdistribucionesdemaneramuyparecida,dada
laherenciaUNIX,aunqueenelfondotodashacenlomismo.Segnlapolticaquellevenlopueden
realizardeunamanerauotra,porloqueaquveremoslaformalaformainternadetrabajardelos
programasalahoradeaadiroquitarusuarios,yalfinalexpondremosejemplosconcretosdelas
distrosmsconocidas.
Cmoaadirunusuarioalsistema?Hayqueseguirunaseriedepasosquerelatamosa
continuacin.Peroantesveremoslaestructuradelosarchivosquevamosatocar.

/etc/passwordArchivoquemantienelabasededatosdelosusuariosdelsistemay
tienelasiguienteforma:
nombre_de_usuario:password(si es shadow ser
x):uid:gid:comentario:home_del_usuario:shell

Estoscamposson:

Nombre de UsuarioEselnombreconelqueentrarenelsistema.

PasswordLapalabradepasonecesariaparaentrar(cifrada).Sinuestrosistema
usashadow(explicadodespus),estecamposerunax

UID(UserID)Nmeroqueloidentificaenelsistema,recordemosquelos
ordenadoressellevanmejorconlosnmeros.

GID(GroupID)Nmeroqueidentificaalgrupoprincipalalqueperteneceel
usuario.

ComentarioOpcional,siesnecesarioaclararalgo,estosoloesparael
administrador,pueselsistemanolousa.

home_del_usuarioRutaabsolutadeldirectoriodetrabajodelusuario.

ShellIntrpretedecomandosdelusuario,queserelqueuseinmediatamente
despusdeentrarenelsistema,pordefectoes/bin/bash.Parausuariossinlogin,
aunquepuedequeahoranolonecesites,lashellnovlidatpicaparaponereneste
campoes/bin/false.

/etc/groupArchivodelosgruposdelsistema;desuadministracinyusohablaremos
enelsiguienteapartado.Elarchivotienelasiguienteestructura:
nombre_grupo:password:GID:lista_usuarios

Nombre del GrupoPordefectoconloscomandoshabitualessecreaungrupo


conelmismonombrequeelusuariocreado,aunquepuedenexistirotrosgruposcon
nombresespecficos.

passwordSeusaparadaraunaseriedeindividuosunmismodirectorioconuna
cuentacomn.

GID(GroupID)NmerodeIdentificacinenelSistemadelgrupo.

lista de usuariosquepertenecenalgrupo,separadosporcomas.

/etc/shadowParasistemasqueusenshadow,quenoesmsqueunamedidade
seguridad.Lossistemasquenousanshadowguardanelpassworden/etc/passwdpero
estearchivotienelapeculiaridaddequedebeserlegibleportodoelmundo,sino,nopodra
nihacerseunls.Estearchivopodracaerenmanosdeunusarioilegtimoyesteejercer
tcnicasdecrackeosobrelasclaves.Comosolucindelproblemaloquesehacees
almacenartodoslosdatosdelosusuariosenel/etc/passwordmenossuscontraseas;
quesealmacenanen/etc/shadow,elcualstienerestringidoslospermisosynoes
accesibleporlosusuariosnormales.
usuario:password:das del ltimo cambio: dias antes del
cambio:Dias despues del cambio: tiempo de aviso:dias antes de
la inhabilitacion: perido que lleva caducado:reservado:

UsuarioNombredelusuario

passwordAqus,eselpasswordcifrado.

Tiempo del ltimo cambio de passwordPeroeltiempocuentadesde


el1deenerode1970,comienzodelaeraUNIX.

Das antes del cambioPeriodo(endas)dondeelpassworddebeser


cambiado.

Dias despues del cambioEnlosdasdespusdondedebesercambiado.

Tiempo del avisoPeriodoenelqueelsistematienequeavisardela


necesidaddelcambio.

InhabilitacinDasantesdelainhabilitaciondelacuenta.

Perido caducadoDasdesdeel1deenerode1970enelquelacuentaest
deshabilitada.

Campo reservado

Bienahora,yaqueconocemoslaestructuradelosarchivos,creemosunnuevousuario,slo
tendremosqueusaruneditor,queporrazonesdeseguridadsonvipwparaelarchivo
/etc/passwdyvigrparaeditar/etc/group;ambosusancomoeditorelqueestenla
variable$EDITORdelsistema,ypasswdparacrearelpassword.Sigamoslossiguientespasos:
1. Loprimeroesentrarcomoroot
$ su password:
# vipw /etc/passwd

2. Antesdenada,elcomandosuseexplicaalfinaldeestecaptulo.Yaestamoseditandoel
fichero/etc/passwd,ahestarnlaslineasdeotrosusuariosqueyaestncreados.Esto
quesigueesunejemplo.
prueba:x:1005:1005::/home/prueba:/bin/bash

Hemosescritounnombrecualquiera(prueba),elpasswordleponemosxdadoqueesun
sistemaconshadow.Siqueremoscrearunacuentasincontrasea,enestecampoenvezde
laxnopondremosnada.ADVERTENCIA:Estoesunconsiderableriesgodeseguridad.
Inclusounacuentadeusuariopuedeusarseparahallarinformacintilparaposteriormente
poderatacarunsistema.
3. Ahorahayquetocaren/etc/groupparacrearelgrupodelusuario(todousuariotieneun
grupoprincipal),ledamoselmismonombrequealusuario,yelGIDquehemospuesto
antes,el1005.Porsupuesto,tantolosUIDcomolosGIDnopuedenestarrepetidos,asque
nosaseguramosdecogerunoquenoestyacogido.Entonces,hacemos:
# vigr /etc/group

prueba:x:1005:

4. Editamos/etc/shadow:
prueba:!:12173:0:99999:7:::

Buenolopeorsercalcularlafechadecreacinperosinorandomized():).Notadqueenel
campopasswordlehemospuesto!porqueahoraledaremosunpasswordconpasswd.
5. # passwd prueba
Enter new UNIX password:
Retype new UNIX password:

Ejecutamospasswdypasamoselnombredelusuariocomoargumento.
Introducimoselpasswordparaeseusuario,hayquedarsecuentadequeamedidaque
escribimos,porrazonesobviasdeseguridadnoseirescribiendonada.
Repetimoslapassword

Sinohayerror,listo.
6. Ahoraletenemosquecreareldirectoriodetrabajo,porconveniolosdirectoriosdetrabajo
delosusuariosnormalesestnbajo/home,ysuelenser/home/usuario.
# mkdir /home/prueba

7. Copiamoslosarchivosdeiniciodesde/etc/skel,quecontieneprincipalmentearchivos
deconfiguracinpordefecto.
# cp /etc/skel/.* /home/prueba

8. Yporltimo,hayquehacerquetomeposesindeloqueessuyo:
# chown prueba.prueba -R

/home/prueba

Esteltimocomandoseexplicamsadelante.Ahoraslofaltahacer:
# su - prueba
$

Tambin,envezdeusarsu,podemoshacerloginenelshelldirectamenteconelnuevo
usuariocreadoparacomprobarquelohemoshechocorrectamente.
EstoesloquehacecualquierLinuxparacrearunacuenta.Laformadeborrarunusuarioesigualde
fcil,borrndoloen/etc/passwd,/etc/groupyen/etc/shadow.Cualquierrastrodel
usuariodeberatambinsereliminado,ademsdequeserabastanterecomendable(sinonecesario)
hacerunabusquedadelosarchivosqueelusuariomantiene.Estabsquedapodraser:
# find / -uid uid_del_usuario > archivos_del_usuario

Deestamaneralospodemosguardar,revisaryhacerloconvenienteconlosarchivos.Mssobre
findenseccionesposteriores.
Acontinuacinveremosloscomandosquehacenestomismoyalgunadiferenciaentrelasdistintas
distribuciones.
Comandos de Administracin
Estoscomandosnospermitirncrear,borrarymodificarlascuentasdeusuariosenelsistema.
adduseryuseraddsondoscomandosquehacenprcticamentelomismo.Notaqueelestndares
useradd,adduserpuede,enalgunasdistribucionesserunsimpleenlaceauseradd,osimplemente
noexistir.Elcomportamientopordefectodeuseraddesmuysubjetivodependiendodela
distribucindeLinuxqueestemosusando.As,mientrasqueenalgunasdistribucionesharcasi

todoslospasosanteriorespornosotros,enotrassloaadirelusuarioa/etc/passwordy
/etc/shadow,teniendoquerealizarnosotroslospasosrestantes.Aunas,lasopcionesque
recibeuseraddrespondenigualentodaslasdistros.Comoyahemoshechoconalgnotrocomando,
puedesverlasopcionesdeuseraddmedianteman useradd,moverteconlasteclasde
direccinyvolveralshellpulsandolateclaQ.
Lasopcionesmscomunesparauseraddson:
# useradd -g users -d /home/usuario -s /bin/bash -m -k /etc/skel usuario

-gIndicaculeselgrupoprincipalalqueperteneceelusuario;enestecaso,users

-dEstableceelquesereldirectoriodetrabajodelusuario,porconvenioparausuarios
normales,es/home/nombre_de_usuario

-sEslashellpordefectoquepodrusarelusuariodespusdehacerlogin.Lonormales
quesea/bin/bash,estoes,elshellbash.

-m -kEstasdosopcionessecomplementan.Laprimera,hacequesecreeeldirectoriode
trabajodelusuarioenelcasodequeestenoexista.Lasegunda,copialosficherosdel
directorioespecificadoalquesehacreadodelusuario.

usuarioPorltimo,usuarioeselnombredelusuarioqueestamoscreando.

GAunqueestaopcinnoestenelcomandodeejemploquehemospuestoarriba,esmuy
til,puestoquepermiteespecificarlalistadegruposalaquetambinpertenecerelusuario
apartedelgrupoprincipal.Porejemplo-G audio,cdrom,dipaadidoenelcomando
anteriorharaqueusuariopertenecieseaestosgruposademsdealsuyoprincipal.

Siemprepodemosmatizardetallesenlacreacindeusuarioseditandolosficherosdeconfiguracin
queyaconocemos.
Lacuentadelusuarionoestaractivadahastaquenoleasignemosunpassword.Estolopodemos
hacervapassword nombre_de_usuario(paracambiarelpasswordprocederamos
exactamentedelamismaforma).Cualquierusuarionormalpuedecambiarsupasswordcuando
hayaentradoalsistema,bastandoenestecasoconescribirelcomandopasswordsinargumentos
niopciones.
Paradesactivarunacuentadeusuariosinnecesidaddeborraladelsistema,podemoseditar
/etc/passwdycambiarlaxporun!enelcampodelpassword.Lacuentasehabilitara
asignandounpasswordconpasswordobienvolviendoaponerlaxquehaba,quedandola
cuentaentoncesconelmismopasswordquetenaantesdedeshabilitarla.
Podramos,sinuestradistrodisponedeellas,utilizarlasherramientasinteractivasparacrear
usuarios(avecesinclusoexisteninterfacesgrficasdeventanasparagestionarusuariosygrupos,
soloaccesiblesporroot);generalmenteadduser.Aunquepuedenresultarmscmodas,siempre
esconvenientesaberelmtodogeneraldecreacindeusuarios,detalformaqueesos
conocimientosnosservirnparacualquierdistribucindeLinuxquevayamosausar.
Enalgnmomentopodramosnecesitareditarunacuentadeusuariocreada,oborrarla.Existen
tambincomandosdeadministracinestndaresparaesto;sonusermodyuserdel.Puedesver
suspginasdelmanualconman.Aunque,unavezms,editandolosficherosdeconfiguracinno
necesitarsmemorizaropcionesparaefectuaresoscambios.
Elcomandowhoamimuestraelnombredeusuarioqueestdentrodelsistemausandoelshell
desdeelqueselellama.

Grupos
Enlaadministracindegruposnovamosagastarmuchasenergasyaquenoes,enunnivelbsico,
algoexcesivamentecomplejo.
LosgruposesunamaneraenlossistemasmultiusuariocomoLinuxdeotorgarunaseriede
privilegiosaunconjuntodeusuariossintenerquedrselodeformaindivialacadauno.
Elficheroencargadodemantenerlosgruposdelsistemaes/etc/groupytambinhemosvisto
suestructura.Porloqueveremosloscomandosqueaaden,quitanymodificanlosgrupos;as
comonotasgeneralesenlagestindegrupos.
Hemosdichoquetodousuariotienesiempreungrupoprincipalalquepertenece.Haydos
posibilidadesparalosusuariosnormales:quetodostenganelmismogrupoprincipal(generalmente
users)oquecadausuariotengaungrupoprincipalespecfico(casisiempredelmismonombre
queelusuario).Estorespondealasnecesidadesdecadasistema.Enelprimercaso,losdirectorios
detrabajodelosusuariossuelenseraccesiblesporelrestodeusuarios(noeslomscomn);
mientrasqueenelcasodequecadausuariotengaungrupoprincipal,lonormalesquelos
directoriosdetrabajodecadausuarioseansloaccesiblesporeseusuario(queseslomscomn).
Lautilidaddelgrupoprincipaldeunusuarioseentendermejorcuandolleguemosalospermisos.
Adems,enelsistemahaymsgruposquelosprincipalesdecadausuario.Lamisindeestosotros
gruposesladeotorgarunospermisossimilaresalconjuntodeusuariosqueformanpartedelante
undirectorio,unarchivo,undispositivo,etc.
Esmuycomnlanecesidaddedaraunoscuantosusuariospermisosparaquepuedan,porejemplo,
leerlosdocumentosdeundirectoriodeterminado(porejemplo,informesdeunaempresa),al
tiempoquealrestodeusuariosno.As,podramoscrearungrupollamadocontables,yagregarlos
usuariosquesoncontablesaestegrupo.Despus,haramospertenecer(comoveremosenPermisos)
eldirectoriomencionadoaestegrupo,yledaramospermisosdelecturaparaelgrupo.
Ademsdeparacompartirarchivosodirectoriosentrevariosusuarios,existengruposcomo
audio,cdrom,ysimilares.Dispositivoscomolatarjetadesonido,elgrabadordeCDs,etc.tienen
comousuario"dueo"aroot,ycomogrupo"dueo"aunodeestosgrupos.As,paracadausuario
quequeramosquepuedausarlatarjetadesonido,debemosaadirloalgrupoaudio.

Administracin de grupos
Yahemosaprendidocmoestablecerelgrupoprincipaldeunusuario,ycmohaceralahoradesu
creacinquepertenezcaaotrosgruposadicionales;ascomoelfichero/etc/group.Asqueya
noquedamuchoenesteaspecto.
Paraaadirunusuarioaungrupodeformamanual,todoloquehayquehacereseditar
/etc/groupyaadiralusuarioalalistadelltimocampo.Siyahayusuarios,stosseseparan
concomas.
Siloquequeremosescrearunnuevogrupodeformamanual,lacosaesigualdesencilla.Aligual
queyahicimosagregandoelusuariopruebadeformamanual,aadiremosotraentradaaeste
ficheroconelnombredelgrupo,laxenelpassword,unGIDquenoestsiendousadoylalistade
usuariosdetrs.
Tambintenemoscomandosquehacenestomismo:groupadd,groupdelygroupmod.
groupaddsirveparacrearunnuevogrupo:
# groupadd -g gid grupo

Laopcin-gvaseguidadelGroupID(numrico)queasignaremosalgrupo,ygrupoeselnombre
delgrupocreado.Sinoindicamoslaopcin-g,elsistemaseleccionarpornosotrosunnmero
GIDquenoestsiendousado.
Lomismoquesabemosyasobrelaedicicinyborradodeusuariosesaplicablealosgrupos.Lo
msfcileseditarelfichero/etc/groupdirectamente;recordandoquesiquitamosungrupo,
ningnusuariopodrteneresegrupocomosugrupoprincipal;yademsquetendremosque
cambiarlospermisos(despusmsenesto)delosarchivosqueperteneciesenaestegrupopuesde
nohacerlolosestaramosdejandoasignadosaunGIDinexistenteparaelsistema,yestonoes
recomendable.
Uncomandocuriosoesgroups,quemostrarunalistadegruposalosqueelusuarioactual
pertenece.

Permisos y dueos
Todosycadaunodeloselementosdelsistema/deLinuxtienendueo,yaseanficheros,
directorios,oenlacesadispositivos.Porunlado,tienenunusuariodueo,yporotro,ungrupo
dueo.Elusuarioyelgrupoquesondueosdeunelementonotienenporquguardarunarelacin
deltipoqueelusuariodeberaestardentrodelgrupoocosasporelestilo.Sontotalmente
independientes.As,puedeexistirunficheroquetengacomousuariopropietarioausername,un
usuarionormal,ytenercomogrupopropietarioalgruporoot.
Cuandosetrabajaenelsistema,losprogramas"hacendueos"delosficheroscreadosdurantela
sesinalusuariodeestasesinyasugrupoprincipalpordefecto;aunqueestopuedecambiarse.Es
lgico,quelosficherosqueestnbajoeldirectoriodetrabajodeunusuariolepertenezcan.
Siemprequetratemosconpermisosycondueosdeelementos,debemostenersiemprepresenteel
hechodequeelsistemadeficherosdeLinuxesjerrquico;estoimplicaqueloscambiosque
hagamos,porejemplo,enundirectorio,puedeninfluirenelrestodeelementosqueestn
contenidosenunnivelinferioraste(losarchivosquecontiene,losdirectoriosquecontiene,loque
contienenesosotrosdirectorios,yassucesivamente).
Conunsimplels -lencualquierpartedelsistema,podemosverenlaformausuario grupo
losdueosdecadaelementoquesaleenellistadolargo.Entoncesyasabemoscmocomprobar
esto.
Elcomandochown(CHangeOWNercambiarpropietario)permitecambiarelpropietariodelos
elementosdelsistemadearchivos.Peroeslgicoquesisomosunusuarionormalnopodremos
cambiardepropietarioloselementosquepertenecenarootoaotrosusuarios.Encambio,como
rootpodremoscambiarelpropietariodecualquiercosa.Aqudescribimoslasopcionesmsusadas
deestecomando,peropuedesirmirandosupginadelmanualdelsistema.
# chown usuario elemento(s)
# chown usuario.grupo elemento(s)

Enelprimerodelosdoscomandosanteriores,elusuariodueodeelementos(s)sercambiadoa
usuario.Elgrupodeuodeelemento(s)seconservarelqueestuvieraantesdeintroducireste
comando.
Conrespectoalsegundocomando,actaexactamenteigualqueelanterior,conlapequea
diferenciaquetambincambiarelgrupodueodeelemento(s)pasandoasergrupo.Sislo
queremoscambiarelgrupodeunelementoolistadeellos,podemosusarelcomandochgrp.
# chgrp grupo elemento(s)

elemento(s)puedeserunalistadearchivosydirectorios,osimplementeunodeellos.Podemosusar
loswildcardsconocidos(comoporejemploelasterisco:*paraindicarvariosarchivosconunasola
expresin.Laimportanteopcin-Rpermitecambiardueosdedirectoriosydetodoloquetengan
debajo,esdecir,recursivamente:
# chown -R usuario.grupo directorio/

Estecomandocambiarelusuarioygrupodueostantodedirectorio/comodetodoloque
contengahastacualquiernivel,esdecir,todoloqueest"debajo"dedirectorio,yeldirectorio
mismocambiarndedueo.
Yparaqutodoestodelosdueosdearchivosydirectorios?Parapoderasignarpermisos
adecuadamente.
Unarchivotienedistintosnivelesdepermisos:lectura,escriturayejecucin.Lospermisossobreun
archivo(odirectorio)puedenserdistintosparaelusuariodueo,paralosusuariospertenecientesal
grupodueo,yporltimoparaelrestodelosusuariosdelsistema.As,podemoshacerqueel
usuariodueopuedeleer,escribir,yejecutarunfichero;queelgrupodueosolopuedaleerlo,y
queelrestodeusuariosdelsistemanotenganningnpermisosobrel,porejemplo.
Unabuenaasignacindedueosdeelementosjuntoconunapolticaadecuadadepermisossobre
estoselementos,permitenobtenerdoscosas:unsistemamultiusuario,yunsistemaseguro.
Sihacesunls -lenundirectorioquetengaalgunascosasversalgocomo:
$ ls -la bin/
drwxr-xr-x
drwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
lrwxrwxrwx

2
21
1
1
1
1
1

root
root
root
root
root
root
root

root
root
root
root
root
root
root

4096
4096
2872
94364
472492
10524
4

Apr
May
Jun
Jun
Jun
Jul
Feb

16 17:19 .
23 20:34 ..
24 2002 arch
25 2001 ash
25 2001 ash.static
19 2001 aumix-minimal
4 2002 awk -> gawk

Fjateenelcampodemsalaizquierdadellistado.Podemosvercomocuatrogrupos.Elprimero
esdeuncaractersolamente.Estecaracteresunadsielelementolistadoesundirectorio,unalsiel
elementoesunenlace,yunguin-sielelementoesunarchivonormal.
Acontinuacinhaytresgrupos.Cadaunodeestosgrupostienetresletras,pudiendoserestasrwxo
pudiendosersustituidasenalgncasoporunguin.Elprimerodeestosgruposindicalospermisos
quetienesobreelelementolistadosuusuariodueo;elsegundogrupoindicalospermisosque
tienensobreelelementolosusuariosquepertenezcanalgrupodueo,yeltercergrupoindicalos
permisosquetienensobreelelementoelrestodeusuariosdelsistema.
Enelcasodeunarchivoounenlace(sobrelosquehablaremosposteriormente),larencualquiera
deestos"grupos"indicaquesetienenpermisosdelecturasobreelelemento.Lawindicaquese
tienenpermisosdeescriturasobreelelemento,ylaxindicaquesetienenpermisosdeejecucin
sobreelelemento.Unguinsustituyendoacualquieradeestasletrasindicaquenosetieneel
permisoalqueestsustituyendo.As,veamosalgnejemplodellistadoanterior:
-rwxr-xr-x

1 root

root

2872 Jun 24

2002 arch

Esunarchivoporquesuprimercaracteresunguin.Suusuariodueoesroot,ysugrupodueoes
elgruporoottambin.roottienetodoslospermisossobrel:rwx,estoquieredecirquepuedeleer
elarchivoarch,escribirenlyejecutarlo.Elgruporootslolopuedeleeryejecutar,yelrestode
usuariosdelsistema,tambinslopuedenleerloyejecutarlo.
Elcasodelosdirectoriosesunpocodistinto.Lospermisosrwxparaundirectorio,indican:lary
laxparaelcasodeundirectoriodifcilmenteseentiendenseparadas.Sonnecesariasparaqueun
usuariopueda"examinar"esedirectorio,verloquetieneynavegarporl.Lawindicaqueel
usuarioqueposeaestepermisopuedecolocarnuevosarchivosenestedirectorio;ascomotambin
borrarlo.
Lomscomnesquelosdirectoriosquedebanpoderser"examinados"portodoslosusuarios
tenganpermisosr-xeneltercergrupodepermisos.Peroconestospermisosnopodrncolocar
nadadentrodeesedirectorio,aunquespodrnhacerlodentrodeundirectoriodenivelinferioren
elquestenganpermisosdeescritura.Tenencuentaquesitenemosporejemploundirectorio
llamadosuperior/ydentrodestetenemosundirectoriollamadopersonal/,yqueun
usuariotienenpermisosdeescrituraenestesegundodirectorio,queesdenivelinferior,parapoder
accederalyescribir,debeesteusuarioposeer,comomnimo,permisosr-xeneldenivel
superior,estoes,ensuperior/.Porotraparte,estoesabsolutamentelgico:cmovaapoder
escribirunusuarioenundirectoriosinopuedellegarhastal?Estomismotambinseaplicapara
lalectura.Porejemplo,elservidorwebnopodrservirundirectorioalaInternetsinodisponede
permisosr-xparalosdirectoriossuperioresal.
Paracambiarlospermisosdeloselementosdelsistemadeficheros,usamoselcomandochmod.
# chmod -R ABC elemento

LaopcinResopcional,ycumpleexactamentelamismafuncinqueenelcomandochown.AB
yCsonunnmerodeunacifrarespectivamente.Elprimernmerorepresentalospermisosque
estamosasignandoalusuariodueo,elsegundolosdelgrupodueo,yeltercerolosdelrestode
usuarios.Cadaunadelascifrasposiblescorrespondeconlospermisosdelusuarioenbinario;
aunqueesmsfcilaprendersequhacecadacifraquepasarlacifraabinariocadavezque
queramoscambiarlospermisosaalgo.Algunosejemplos:

El4enbinarioes100,portanto,lospermisosqueotorgasonr--,estoes,slolectura.

El5enbinarioes101,portanto,lospermisosqueotorgasonr-x,lecturayejecucin.

El6enbinarioes110,portanto,lospermisosqueotorgasonrw-,lecturayescritura.

El7enbinarioes111,portanto,lospermisosqueotorgasonrwx,lectura,escrituray
ejecucin.

Lospermisosdeejecucinsloseotorgarnaprogramasoscripts(conlosquetrataremosdespus);
yaquehacerloalosarchivosnormalescareceporcompletodesentido.As,uncomandodeejemplo
podraser:
$ chmod 640 mitexto

Estecomandoasignarapermisosdelecturaydeescrituraalusuariopropietario,ypermisosde
lecturaalosusuariosdelgrupodueo,yningnpermisoalrestodeusuariosparaelarchivo
mitexto.Puedesirhaciendopruebascombinandolosdistintosnmerosyverlospermisosque
otorganmediantels -l.Recuerdaquelosdirectoriosquequierasquepuedanser"examinados",
debetenerpermisosde"ejecucin"porpartedelosusuariosquequierasquepuedanaccedera
ellos,porejemplopodrasasignarlosconelnmero5.Alosqueademsquierasquepuedancrear

archivosenesedirectorio,podrasdarleesospermisosmedianteelnmero7.Conlaopcin-R
puedeshacerquelospermisosseasignendemodorecursivoaundirectorioyatodoloquehay
debajodel.
Unmodomuycomnparalosdirectoriosquedebanseraccesiblesportodoelmundoes755,de
formaqueelusuariodueopuedaademsescribir.Losdirectorios/home/usuariosuelentener
permisos750paraqueelrestodeusuariosnopuedanaccederaldirectoriodetrabajodeunusuario.

Aviso
Unamalaasignacindepermisospuededarlugaraataqueslocales,sidejamos
aalgunosusuariospermisosparamodificarpartesimportantesdelsistemade
ficheros.
Tencuidadocuandocambiespermisos,sobretodosieresroot.
Unmodomuycomndeaadirpermisosdeejecucinaunarchivo(generalmenteunscript)para
todoslosusuariosdelsistema,sintenerqueestarrecordandoqunmerosotorganpermisosde
ejecucin,esusarlaopcin+xdechmod,porejemplo:
$ chmod +x mi_script.sh

Estaformadeasignarpermisosesextensible,ysegnloscasos,mssencillaqueladelosnmeros.
Engeneralesas:
$ chmod ABC fichero

DondeAesu(usuario),g(grupo)obiena(todos).Cuandoesa,sepuedeomitir.
Bes+obien-,indicandoelprimeroaadirunciertopermisoyelsegundoquitarlo.
Cesr(lectura),w(escritura)obienx(ejecucin).
Ejemplos:
$ chmod g+w fichero
$ chmod -r fichero
$ chmod u+x fichero

Elprimercomandootorgapermisosdeescriturasobreficheroalosusuariosdelgrupoalqueel
ficheropertenece.
Elsegundocomandoeliminalospermisosdelecturasobreficheroatodoelmundo.
Eltercercomandodaalusuariodueodeficheropermisosdeejecucin.

El comando su
Elcomandosu(SetUser)estrelacionadoconelloginenelsistemayconlospermisos.Eluso
principaldeestecomandoesqueunusuarionormaladquieralospermisosdeotrousuariodel
sistema(incluidoroot)siempreycuandosepasupassword.
Esmuycomnque,sisomosnosotrosel"dueo"delacontraseaderoot,yportantolapersona
encargadadelaadministracindelsistema,trabajemosnormalmentecomousuarionormalpor
motivosdeseguridad.Peropodemosnecesitarconvertirnosenrootparaalgunatareaespecfica:
reiniciarelservidorweb,modificarlaconfiguracindelsistema...paradespusvolvera"ser"

nuestrousuarionormal.
$ su
Password: [ Escribimos el password de root ]
#

sullamado"asecas"comoenelejemploanteriorasumequeelusuarioactualquiereadquirirlos
permisosderoot.Siproporcionamoselpasswordadecuadoyalostendremos.Podemosahorahacer
lastareasdeadministracinquenecesitemos.Escribiendoexitvolveremosa"ser"nuestrousuario
normal.
Haygentequeconsideratiltenersiempre"ensegundoplano"unashellconpermisosderoot.Esto
sepuedeconseguirconloscomandossuspend,fgyjobs.Porejemplo:
$ su
Password: [ Password de root ]
# suspend
[1]+ Stopped
su
$
$ fg %1
#

Detenemoslashellconpermisosderootyladejamos"esperando".
Nosinformadequesedetuvo,yleasignaelnmerodereferencia1pararecuperarla
posteriormente.
Recuperamoslashellconpermisosderoot.

Mediantesuspendpodemosdetenerlashellconpermisosderootquearrancamosantesmediante
suyrecuperarlacadavezquenecesitemospermisosderootsinnecesidaddeteclearelpasswordde
nuevo.Escribiendoexitenlashellconpermisosderootpodramosabandonarladefinitivamente.
sunospermitetambinadquirirlospermisosdeotrosusuariosdelsistemasiemprequetengamos
supassword:
usuario@maquina $ su otrousuario
Password: [ Password de "otrousuario" ]
otrousuario@maquina $
otrousuario@maquina $ exit
usuario@maquina $

Ladiferenciaentresu usuarioysu - usuarioes,quemientrasqueconelprimercomando


simplementeadquirimoslospermisosdeusuario,conelsegundocomandoescomosiestuvisemos
haciendologindesdeelprincipioconusuario,as,todaslasvariablesdeentornoydemssern
cargadasigualquesihubisemoshechologinrealmente.Estotambinseaplicapararoot(su -).
Lashellquesearrancamediantelasegundaformasellamashelldelogin,ycomopuedes
comprobar,nosepuedesuspendercomohicimosanteriormente.Salimosdeellastambincon
exit.
Elusuariorootpuedeusarsuobiensu -sinnecesidaddeintroducirningnpasswordpara
adquirirenunshelllospermisosdecualquierusuariodelsistema.

SUID
Existeunatributoespecialenlospermisosparaquelosarchivosejecutablespuedanserejecutados
conlospermisosdesudueo,independientementedequinseaelusuarioqueloejecute.Estoes
consideradoporalgunoscomounabondaddelossistemasUNIX,mientrasqueporotrosse
consideraunodesuspocosfallos.Almargendeesedebate,anosotros,comousuariosnormales,
nosotorgaunaciertacomodidaddecaraaaplicacionescomolasqueaccedendirectamenteal
grabadordeCDsporejemplo,quenecesitanmuchasvecespermisosderoot.
As,enesteejemplodelasaplicacionesquegrabanCDs,asignaramossudueoaroot.Poniendoel
atributoSUIDaestasaplicaciones,cualquierusuarioquelasejecutase,loharaconpermisosde
root(yaqueenestecasoseraeldueodelarchivoejecutable).
Encasoscomoeste,aplicarlosatributosSUIDaalgunosprogramasresultatil.Perocuidado,
aunqueestoesunaposibilidadenLinux,esalgoquedebeevitarsesiemprequeseaposible.Esmuy
peligrosodesdeelpuntodevistadelaseguridaddelsistema.Alahoradeejecutarunusuario
normalunaaplicacinquetengaelatributoSUIDestablecido,ejecutaeseprocesovirtualmente
comoroot.Sitodovabien,notienenporquexistirproblemas.Perosilaaplicacintuvieseun
fallodurantesuejecucin,yretornaseinesperadamentealshellporejemplo,elusuarionormal
habraadquiridopermisosderoot!sinnecesidaddeconocersucontrasea,yconestopodrcausar
daosenelsistemayleernuestrainformacinconfidencial.
Cuandohacemosunls -lenundirectoriodondeexistaunprogramaqueseaSUID,enla
columnadondesemuestranlospermisos,envezdetenerunaxrepresentandolospermisosde
ejecucin,tendraunasindicandoqueeseprogramaesSUID,yqueparalosapartados
(propietario,grupopropietarioorestodeusuarios)dondeestesa"s",serposibleejecutarlocon
lospermisosdelusuariopropietario.
LaformadeasignarelatributoSUIDalosarchivosejectuableseslasiguiente:
# chmod +s /usr/bin/miprograma

Recuerdaqueesmejoreludirestemtodoporrazonesdeseguridad.

sudo
sudo(SUperuserDO)esunaherramietaquepermiteotorgaraunusuarioogruposdeusuarios
normales,permisosparaejecutaralgunoscomandoscomoroot(ocomootrosusuarios)sin
necesidaddeconocersupassword.EsposiblequenoestinstaladoentudistribucindeLinuxy
tengasqueinstalarlot.Encaptulosposteriorestienesinformacinsobrecmoinstalarsoftware
adicionalenelsistema.
Elfundamentodesudoresideensuficherodeconfiguracin,elfichero/etc/sudoers.Este
ficherotiene,enloscasosmssencillos,dospartes:unapartedealiasyotrapartedereglas.La
partedealias,loquehacees"agrupar"dealgunamaneralistasdeusuariosylistasdeaplicaciones
(inclusolistasdemquinasdeunared,peroestoesmsespecficoynoloexplicaremosaqu).La
partedereglasdefinequgruposdeusuariospuedenusarqugruposdeprogramasconpermisos
distintosdelossuyosyenqucondicionespuedenhacerlo.Unficherosencilloquenospodra
servirpodrasercomo:
#
# Parte de alias
#

Cmnd_Alias GRABAR = /usr/bin/cdrecord, /usr/bin/cdrdao


Cmnd_Alias APAGAR = /sbin/halt, /sbin/reboot
User_Alias USERSGRAB = usuario1, usuario2
#
# Parte de reglas
#
USERSGRAB

ALL = NOPASSWD: GRABAR

%cdrom
%apagar

ALL = NOPASSWD: GRABAR


ALL = NOPASSWD: APAGAR

Estoconrespectoalfichero/etc/sudoers.Enlapartedealias,Cmnd_Aliasindicaunalista
decomandos(programas)quesernluegoreferidosmedianteelnombrequeledemos(asginaralias
aqutienesimilitudconasignarvariablesdeentornoenelshell).User_Aliasagrupaaunalista
deusuariosbajounmismonombre(ennuestrocasoUSERSGRAB).
Encuantoalapartedereglas,primeroseespecificanlosusuarios(puedeserunaliasdefinido
anteriormentecomoenelprimercaso,obienpuedeserungrupodeusuariosdelsistema,
precediendosunombrepor%),elALLquesiguehacereferenciaaenqumquinaspodrnhacer
esto,yelNOPASSWD:indicaqueloharnconpermisosderootysinnecesidaddeteclearsu
password.Despusvieneelaliasconloscomandosquepodrnejecutarenlascondicionesque
hemosdado.
Recuerdaqueelfichero/etc/sudoersseeditaconelcomandovisudo,porrazonesde
seguridad,ycomoroot.sudonoalteralaestructuradepermisosdelsistemadeficherosdeLinux,
esdecir,pormuchoscambiosquehagamosenelficherodeconfiguracindesudo,lospermisosde
losprogramasseguirnsiendolosmismos.Ladiferenciaestenqueestos"permisosespeciales"
queestamosotorgandoaalgunosusuariosseaplicancuandoelprogramaquesequiereejecutarse
llamamediantesudo;as,unusuarioquequieraejectarelprogramacdrdaoconestospermisos
especialesdeberhacerloas:
$ sudo cdrdao [opciones]

Estoeslomsbsicoquenecesitassabersobresudoparaejecutaralgunoscomandoscmodamente
comousuarionormalaltiempoquemantieneslaseguridaddelsistema.sudoesunaherramienta
quepermiteconfiguracionesmuchomscomplejasquelasquehemosvistoaqu;siemprepuedes
leersuspginasdelmanualdelsistema(man sudoyman sudoers),ovisitarsupginaweb.

Captulo 6. Entrada y salida


Tabladecontenidos
Introduccinalosconceptosdeentradaysalida
Comandosprincipalesasociadosconlasalida
Pipesotuberas
OtrasutilidadesydetallesdelaE/Senelshell
moreyless
Comandostilesdeless
stderryotrasredirecciones

Enestecaptulovamosavercmomanejarlaentradaylasalidadelosdatosdesdelaterminal
BASH,anivelmsomenosbsico.

Introduccin a los conceptos de entrada y


salida
Esposiblequeyahayasvistoenalgnsitiolosterminosentradaysalidaaplicadosalmundodela
informtica(quizscomoI/Oinput/outputobienE/Sentrada/salida).
Enrealidadesalgomssimpledeloquepuedaparecer,comovamosavermedianteejemplos
sencillos.Cuandoestamosdentrodelsistemausandolaterminalbash,generalmentetecleamos
comandosparaqueseanejecutados.Elhechodequeestemossimplementepresionandoelteclado
implicaqueestamosentrandodatosalsistemamedianteelteclado.Cuandoenejemplosanteriores
hemosusadoelcomandols,haaparecidoenpantallaunlistadodearchivosydirectorios,
claramenteelsistemahaproducidosalidadedatosmedianteelmonitor.
Hemospuestodosejemplos,eltecladocomovaparaentrardatosalsistema(obienaunprograma,
comoyavimosconvim),yelmonitorcomovadesalidadelosdatos.Peronoson,nimucho
menos,lasnicasposibilidades.Losdistintospuertosfsicosdelordenadorpuedenservade
entradaodesalidadedatos,igualmenteconlatarjetadesonido,mdem,tarjetadered...
Aunqueloquenosinteresaenestaseccin,esmanejarlaentradaylasalidadedatosdeyentre
ciertosprogramas.Preguntascomo...yqupuedohacerconellistadoquemedaelcomandols
ademsdemostrarloporpantalla?oquotrasformasdepasardatosyopcionesalosprogramas
existenademsdelteclado?Atodoestoyaalgunosdetallesmsdaremosrespuestaeneste
captulo.
LossistemasUNIX(yporellotambinlosLinux),sonespecialmenteconocidosporsufacilidady
eficienciaparapasardatosentreprogramasyprogramasoentreprogramasydispositivos,siendo
estaunadesusmltiplesventajas.
Otrosconceptosimportantesdentrodeestossonlosdeentradaestndarysalidaestndar(stdiny
stdoutrespectivamente).Pordefecto,stdinapuntaalteclado(losdatos,setomangeneralmentepor
defectodelteclado),ystdoutapuntaalapantalla(pordefectolosprogramassuelenenviarlasalida
porpantalla).

Comandos principales asociados con la salida


Son,principalmenteecho,cat.
Enprimerlugar,echemosunvistazoalcomandoecho.Estecomandonospermite"imprimir"
cosasenlapantalla.
Veamosalgunosejemplos:
usuario@maquina ~ $ echo "Hola, usuario de Linux"
Hola, usuario de Linux

Comoves,pordefectoelcomandoechorecibelascadenasdetextoentrecomillas(simpleso
dobles),ysacapordefectoalapantallaloquelepasamoscomoargumento;aunquepuedeenviarla
salidaaotrossitios,comopodrscomprobarmsadelante.
Adelantndonosunpoco,elshellpuedehaceroperacionesaritmticasbsicas,ypodemos
aprovecharlasconelcomandoecho:

usuario@maquina ~ $ echo $[5*3]


15

Cambiemosdecomando,vamosaaprenderahoraelcomandocat.Esuncomandotilqueser
nuestroamigoapartirdeahora.
cattieneasociadalaentradaaltecladopordefecto,ylasalidaalapantalla.Asiquesilollamamos
sinargumentos,simplementetecleandocat,tecleamosypulsamosINTRO,volveraimprimiren
pantallacadalneaquenosotrostecleemos:
usuario@maquina ~ $ cat
Escribo esto
Escribo esto
Y escribo esto otro
Y escribo esto otro

ContinuarhastaquelemandemosdetenersemanteniendopulsadalateclaCONTROLy
presionandoalavezlateclaC.Puedeparecernospocotilelfuncionamientopordefectodel
comandocat.Peroobservemosahoraelfuncionamientomscomndeestecomando,quees
mostrarelcontenidodeunfichero:
usuario@maquina ~ $ cat directorio/mifichero
Esto es el contenido del fichero
mifichero que se encuentra en ~/directorio.

Esteeselusomsfrecuenteparaelcomandocat,tomarcomoentradaunficheroysacarsu
contenidoporlasalida.Pordefectoesporlapantalla,perodescubriremosdespusquepuedeenviar
elcontenidodeunficheroporotrasvas.
Comoyahabrsimaginado,losficherosdediscopuedenserobjetodeentrada(leersucontenido)o
desalida(escribirlasalidadeundeterminadocomandoaunfichero).Elcomandosiguiente,
touchnosdalaposibilidaddecrearunficherovacoconelnombrequenosotrosle
especifiquemos:
usuario@maquina ~ $ touch minuevofichero

Ascrearemosunficheronuevovacoalquepodremosposteriormenteenviarlasalidadenuestros
comandos.Silistaselficheroconls -l minuevofichero verscomoefectivamentesu
tamaoescero.Noobstante,touchpuedehaceralgunaotracosa,comoexplicaremosen
seccionesposteriores.
Otrocomandotileselcomandogrep.Estecomandopordefectoleedestdin(laentrada
estndar),yenvalosdatosalasalidaestndar(stdout).Elobjetivoprimordialdelcomandogrep
es,"devolver"laslneasquecontienenlacadenadetextoquelepasamosalprincipio.Porejemplo:
$ grep hola
Esta frase no contiene la palabra, por lo tanto no la repetir
Esta frase contiene la palabra hola, por lo que la repetir
Esta frase contiene la palabra hola, por lo que la repetir

Comoves,elcomandogrephaidentificadolaslneasquecontenianlapalabraquelepasamos
comoprimerargumento.

Pipes o tuberas
Hastaahorahemosestadopracticandodedndetomanlosdatosalgunasdelasutilidadesms
comunes,yhaciadndeenvansusalida.Losiguientequetenemosqueplantearnossera...no
podramos"conectar"dealgunaformalasalidadeunprogramayhacerqueotroprogramaleade
ella?
Efectivamente,podemosconseguiresto.Elcaracter|nospermitecrearestasconexionesentre
programasenelshell.Ejemplo:
$ cat mifichero | grep gato

Loqueestecomandoharserlosiguiente:Laprimeraparteantesdelabarravertical,conseguir
elcontenidodelficheromifichero,yconlabarravertical,enlugardesacarloporlapantalla,lo
enviaralaentradaestndar(stdin)detalformaqueelprogramagrepleerdesdestdinel
contenidodelficheromifichero.Elconceptodelefectoqueestoproduceesfcildeentender:el
comandoquevadetrsdelabarraleedelasalidaquedielcomandoanterior.Esobvioqueloque
obtendremossernlaslneasdelficheromificheroquecontienenlapalabra"gato"porla
pantalla(stdout).
Comoves,noestamospasandoningunaopcinnialcomandocatnialcomandogrep.Estoes
porqueelprimero(cat)envalasalidapordefectoastdout,ygrep,sirecuerdas,leepordefectode
stdin(quealusarlabarravertical,hemoshechoquestdinsealasalidadelprimercomandoynolas
lneasquetecleemosacontinuacincomohicimosanteriormente).Perolospipesconlabarra
verticalpodremosemplearlosconotrosprogramasquenotenganestecomportamientopordefecto,
estoes,quesusalidanoapuntepordefectoastdout(podraapuntar,porejemplo,aunfichero)o
quenoleanpordefectodestdin.Podremoshacerquetenganestecomportamientopasndoles
determinadasopcionessidisponendeellas.Esmuycomnlaopcin-(unsologuin)parahacer
queunprogramaleadestdinoescribaastdoutsitieneestafuncionalidad;seguroqueteencuentras
alguncomandoquetengaestaposibilidadmsadelante.
Otroscaracteresquenospermitencrear"pipes",son<y>.Generalmente,estepardecaracter
trabajanconunficheroaunladoyuncomandoaotro.Meexplico;veamosprimeroelcaracter<:
$ grep gato < mifichero

Estalneaesequivalentealadelejemploanterior.Elcontenidodelficheroqueponemosala
derechadelsignosevaalaentradaestndardelaqueleeelcomandoqueponemosasuizquierda,
porlotantoestalneaconseguiraexactamenteelmismoefectoqueladelejemploanterior.
Ahoraelsignocontrario.Alaizquierdadelsigno>ponemosuncomando,yaladerechaelnombre
delficheroalquequeremosqueseescribalasalidadelcomando.Porejemplo:
$ ls -la > listado

Lalistadelcontenidodeldirectorioactualqueelcomandolssacaranormalmenteporpantalla,en
vezdeesosehaescritoenelficherolistado.Sielficheronoexista,sehacreado,ysiexistay
tenacontenido,hasidosobreescrito,asiquetengamoscuidado.
Elusodelossignos>>juntos,tieneunafuncionalidadsimilaralusodeunsignosolamente,y
puedesernostilmuchasveces:
$ echo "Esta es otra lnea" >> texto

Vemosenquessimilaraloanterior;lalnea"Estaesotralneasehaescritoalficherotexto.Si
elficheronoexista,hasidocreado,yladiferencia,siexistaytenacontenido,lalneaseha
escritoalfinaldelfichero,debajodelcontenidoqueyatena.Estecomportamientonospuedeser
muytildecaraairaadiendolneasaunarchivosinnecesidaddetenerqueabrirloconuneditor.

Otras utilidades y detalles de la E/S en el shell


Aunqueesadelantarunpoquito,vamosavercmolaentradaestndar,lasalidaestndaryalguna
cosams"estn"enelsistemadearchivos.
Laentradaestndar(stdin)estenlazadamedianteeldispositivo(sobreloquesehablarms
adelante)/dev/stdin:
$ echo "hola" | cat /dev/stdin
hola

Conelcomandoecho,escribimoslapalabra"hola"alasalidaestndar,queconlabarravertical,
sepasaalaentradaestndar,perocomoleestamospasandounargumentoacat,leede
/dev/stdinque...sorpresa!haresultadoserlaentradaestndar.Sihubiesemosescritoelmismo
comandoquitando/dev/stdin,elresultadohabrasidoelmismo,puestoquesiacatnole
pasamosningnargumento,leedesdestdin.Notepreocupessinopuedescomprenderdeltodolo
quehaceesteejemplo,simplementetasocia/dev/stdinconlaentradaestndarquees
accesibledesdeelsistemadeficheros.
Lasalidaestndarestasociadaa/dev/stdout:
$ cat fichero > /dev/stdout
--contenido de fichero--

Aqu,estamosenviandoelcontenidodeficheroa/dev/stdoutque,curiosamente,igualque
enelcasoanterior,haresultado"conectar"conlasalidaestndar,estoes,lapantalla.
Porltimo,ospresentaremosanuestrobasureroparticular:),quees/dev/null.Nospuedeser
tilparacuandoqueramosdespreciarlasalidadeuncomando,quenisalgaporpantallaniquese
quedeescritoenunfichero,simplementequesepierda:
$ cat mimayorfichero > /dev/null

Unaventajade/dev/nullconrespectoalosbasurerosfsicosesquenuncasellena;),podemos
"arrojarle"todasalidaquequeramosdespreciar.

more y less
moreylesssondoscomandostilesalahoradepaginar.Paginaresverunarchivoounasalida
largaporpartes(opginas),puestoquedeotraformaslopodramosverelfinaldeestasalida
larga.Pongamosporejemploquequisisemosleerunarchivolargo.Comoyasabes,estopodras
hacerloconeleditorvim,perotambinpodrashacerloconcatylaayudadeestosdoscomandos:
$ cat archivolargo | more
$ more < archivolargo
$ more archivolargo

Comoyasabemos,losdosprimeroscomandossonexactamenteequivalentes.Peroeltercerotiene
unapequeadiferenciaconrespectoalosanteriores.Siintroducimosunodelosdosprimeroscon
unarchivolargo,entoncesveremosqueelprogramamorenosindicaenlaparteinferior"Ms"o
"More",ynadams;mientrasquesiintroducimoseltercercomando,enlaparteinferiordela
terminalnosaparecer"More(15%)",estoes,elporcentajedelficheroqueestamosmostrando.La
diferenciapuesentreestoscomandosesqueenlosdosprimeros,morenoconocelalongituddelos
datosquevienenporlastdin,simplementelosprocesaconformeelusuarioselopide;mientrasque
eneltercercaso,elfuncionamientodemoreesconocerlalongituddelficheroqueselepasacomo
primerargumento,ydespuspaginarloigualquehacaconlosdatosdestdin.Estoesimportante;
enUNIXyenLinuxpodemostrabajarconlastdinystdoutconformevayamosnecesitandosus
datos,sinnecesidaddesaberculessulongitudosinmiedodequeestosvayanaperderse.
Enloquerespectaalcomandomore,podemosseguirpaginandohaciaabajoconlabarra
espaciadora,hastallegaralfinaldelficheroodelosdatosdeentrada;obienpresionarlateclaqen
cualquiermomentoparaabandonarelprograma.
Elcomandolessesun"more"deGNUmejorado.Sirecuerdas,conmoreslopodamospaginar
haciaabajo,ybajarpginaporpgina.Conlesspodemoshaceralgunascosasms,comovolver
arribaoabajo,obajarosubirlneaporlnea.Sepuedeusarigualquelosejemplosanterioresdel
comandomore,conladiferenciadequeunavezqueestemosviendolaentradapaginada,adems
depoderbajarconlabarraespaciadora,podemossubirybajarconlasflechasdedireccin,obien
conlasteclasde"avanzarpgina"y"retrocederpgina"denuestroteclado.Enelmomentodesalir,
loharemosigualmentepresionandolateclaq.

Comandos tiles de less


Frenteamore,lessnosofrecealgunoscomandosquenosayudanabuscarcadenasypatrones
dentrodelbufferquelessestvisualizando.Comoyaescostumbreenestemanualos
proporcionamosunatablaconloscomandosmsutilizadosenless,porsupuestohaymuchosms,
perolaideanoesreproducirlapginadelmanual.
Parainvocaralesspodemoshacerloconunpipeodirectamenteas:
$ less fichero1 fichero2 fichero3

Tabla6.1.rdenesmscomunesdeless
Comando
:n
:p

Descripcin
Examinaelsiguienteficheroenlalistadeargumentosdeless
Examinaelficheroanteriorenlalistadeargumentosdeless

:efichero Examinaelficheropasadocomoargumento
ExaminaelprimerficherodelalistasiNnohasidoespecificado,en
casocontrarioexaminaelficheroqueestenlaposicinNdelalista.
:d
Eliminaelficheroqueseestexaminandodelalista
=o^Go Dainformacinadicionalsobreelficheroincluyendoelnombre,el
^F
nmerodelneael%...
!comando Nospermiteejecutarelcomandocomosiestuvieramosenunashell.!!
:xN

Ejemplode
usosiaplica

:e
/etc/xml/doc
book/catalog
:x6

=
!xmllint

Comando

Descripcin

Ejemplode
usosiaplica

ejecutarelltimocomandoejecutado.Siseincluyeenelcomandoel
smbolo%serreemplazadoporelficheroqueseestexaminandoen
valid
esemomento,y#porelultimoficheroexaminado.Sinoseespecificaun
noout%
comandodevolverunashellquesetomardelavariabledeentorno
SHELL.
Sebuscaenelficherolacadenaespecificadaporpatrn.Sinose
especificaningunpatrnseutilizarelltimopatrnbuscado.Siel
/patrn
primercaracterdepatrnesun*sebuscarelpatrnentodoslos
/*gfdl
ficherosdelalista.Labsquedaessiemprehaciaposicionesposteriores
alcursor,esdecir,haciaadelante.
?patrn
Idnticoentodoa/perolabsquedasehacehaciaatrs.
?fdisk
Sielbufferqueseestvisualizandonoesunficherosinoinformacin
sfichero
s~/temp/log
leidadeunpipepodemosguardarelbufferenfichero

Nota
Unaletraprecedidade^significaquehayquepulsarprimerolateclaCtrlde
formaque^Geslomismoquedecir:CtrlG

Nota
EsmuyutilajustarlavariabledeentornoPAGERaless(export
PAGER=/usr/bin/less)dadoqueaslaspginasdelmanualsemostrarncon
lessypodrsutilizarsusfuncionesdebsquedadepatrones.

Recuerdaquepuedesutilizarmoreylessconotroscomandosdistintosqueproduzcanmuchasalida,
yusarlosparaverlasalidadetalladamente.
Otropequeotruco,esquesiestsenunaterminal,puedesverlaslneasanteriores(queyanose
muestranenpantalla)manteniendopulsadalatecladelasmaysculas(noelbloqueode
maysculas)yacontinuacinpresionandolasteclas"avanzarpgina"y"retrocerpgina"detu
tecladoparamoverteporlneasanterioresdetusesinenunaterminal.

stderr y otras redirecciones


Hemosvistostdinystdout,entradaysalidaestndar,respectivamente.Sabemosqueelsiguiente
ejemplolistarloscontenidosdeldirectorioactualydespreciareselistado,envindoloa
/dev/null:
$ ls ./ > /dev/null
$ ls directorio_inexistente/ > /dev/null
ls: directorio_inexistente: No existe el fichero o el directorio.

Enelprimercaso,todofuecomoesperbamos,lasalidadellistadofuesimplementedespreciada.
Pero...quhapasadoenelsegundocaso?Conelsigno>ledecamosqueenviaselasalida
estndar,enestecaso,a/dev/null.Y,comonotehemosmentido,lasalidaestndarfuea/dev/null.
Loquehapasadoesqueelmensajedeerrornohaidoastdout;porquedehabersidoashabrasido
despreciado.Dndehaidoentonceselmensajedeerror?Essencillo,astderr.Lamayorade
losprogramasimprimenstderrporpantalla;aunquepodran(comohacenalgunos),escribirlos
mensajesdeerroraunfichero,oporquno,despreciarlos.

Algunosprogramashacenestascosasconstderr;cosasqueyahemosaprendidonosotrosahacer
constdout.Unasolucinposibleseraquestderrfueseastdout,yapartirdeah,nosotrosya
pudisemosredirigirstdoutcomosabemos.Conseguirestonoesdifcil,sehaceconeloperador
>&:
$ ls directorio_inexistente/ > /dev/null 2>&1

Ahorasserdespreciadastderr;peroanalicemosestecomandoporpartes,yentendmoslobien.
Debemossaberqueenl,"2"representaastderr,yque"1"representaastdout.Mscosas;este
comandotienedospartes.Laprimeraesls directorio_inexistente/ > /dev/nully
lasegundaes2>&1.Enlasredireccionesdesalidacomplejas,comoesesta,elshelllasinterpreta
"alrevs",estoes,dederechaaizquierda.Primerointerpretaloquehemosdichoqueeselsegundo
comando,yluegointerpretaelprimero.Loqueocurreentonceseslosiguiente:primero,stderrvaa
stdoutporelsegundocomandoqueseprocesaenprimerlugar,yluegostdout(queya"contiene"a
stderr)sevaa/dev/null.Entoncesconseguimoselefectodeseado,despreciartantostdoutcomo
stderr;aunquepodramoshaberhechootrascosasconellas,loimportanteesqueambas"salidas"
habranidoalmismositio.
Peropuedeocurrirte(ydehechoteocurrir),quedeseestratarporseparadostdoutystderr.Sise
entendielejemploanteriorestonodeberacausarproblemas.Vamosaponer,comocasoprctico,
quevamosalistarunaseriedearchivosodirectorios;losqueexistanseescribirnsusdetallesen
unfichero,ylosquenoobtendremoselerrorenotroficherodistinto:
$ ls -l fichero1 fichero2 fichero3 > existentes 2>inexistentes
$ ls -l fichero1 fichero2 fichero3 1>existentes 2>inexistentes

Estosdoscomandossonabsolutamenteequivalentes.Recordemosqueestetipodecomandosson
interpretadosdederechaaizquierda.Enelprimerodeellos,alprincipiostderrseescribiral
ficheroinexistentes,ydespuselresto(osea,stdout)seescribiralficheroexistentes.Enel
segundo,primero2(stderr)seescribirainexistentes,ydespus1(stdout)seescribiraexistentes.
Usandocualquieradeellos,alfinaltendremosenelficheroexistenteslosdetallesdelos
ficherosexistentesyenelficheroinexistenteselerrorproducidoporlosficheros(o
directorios)quenoexisten.Esteejemploesbastanteilustrativodecmopodemostratar
separadamentestderrystdout.
Porelmomentoyatienessuficienteentradaysalida.Verslasampliasposibilidadesqueteofrecen
estosconceptosmsadelantetrabajandoconotrosprogramas,oincluso,alahoradecrearlos
tuyos.

Captulo 7. Introduccin al shell scripting


Tabladecontenidos
Nuestroprimerscriptenbash
Variables
Comandosposibles
Conceptodevalorderetorno
Pasaryprocesarargumentos
Evaluacindecondiciones
Estructurascondicionalesconif
Comprobarelvalordeunavariableconcase
Bucles

Buclesconfor
Buclesconwhile
Funciones
Unejemplocompleto
Conclusiones
Siyahaspracticadounpococonelshellbash,tehabrsdadocuentadequesepuedenhacer
muchascosasinteresantesconl.Aunquehayveces,queparaconseguirdeterminadoresultado
necesitasintroducir,porejemplo,3o4comandos;otenemosqueevaluarunacondicin
manualmente(porejemplo,conlscomprobamosmanualmentesiunarchivoexiste).Losscripts
deshellnosdanlaposibilidaddeautomatizarseriesdecomandosyevalucionesdecondiciones.
Unscriptescomosellamaaunarchivo(oconjuntodearchivos)quecontieneinstrucciones(en
nuestrocasocomandosdebash),yquenecesitadeunprogramaayudanteparaejecutarse(en
nuestrocasolapropiaterminalbashserelprogramaayudante).Unscripttieneciertasimilitudcon
unprograma,peroexistendiferencias.Generalmente,losprogramasestnenlenguajedemquina
(lamquinaloentiendedirectamente),mientrasquelosscriptssonarchivosquecontienenen
formatotextoloscomandosoinstruccionesquelaaplicacinayudanteejecutar.
Aunqueenprincipioestopuederesultaruntantoabstracto,vamosaverlodespacioyconejemplos.
Sinohasprogramadonunca,enestecaptuloencontrarselaprendizajedelshellscriptingenbash
comounasencillaintroduccinalaprogramacin,queteayudaracomprenderdespuslos
fundamentosdeotroslenguajesdeprogramacin.Notepreocupes,porquelovamosaexplicartodo
deformasencillaynotequedarningunaduda.

Nuestro primer script en bash


Ahoraquehaspracticadoconbashyconeleditorvim,yaestspreparadoparacreartuprimer
scriptbash.Sirecordamos,unscripteraunarchivodetextoplanoconcomandos;asquehazvim
miscript.shyponenllosiguiente(loexplicaremosdetenidamenteacontinuacin):
#!/bin/bash
# Esta lnea ser ignorada
# Esta tambin
echo "Hola"
echo "Soy un script de shell."

Comoyasabemos,laextensinenlosarchivosenLinuxnotienesignificadotil.Esporconvenio
general,porloquealosscriptsdeshellselesllamaconlaextensin".sh"(deSHell).Deestemodo
identificaremosfcilmentenuestrosscriptsentreelrestodearchivosdeundirectorio.
Observemoslaprimeralnea:#!/bin/bash.Estalneaesuntantoespecial,yescaractersticade
todoslosscriptsenLinux,nosolamentelosdebash.Tras#!indicamoslarutaalaaplicacin
ayudante,laqueinterpretarloscomandosdelarchivo.Ennuestrocasoesbash,asqueponemos
ah/bin/bash,queeslarutahacialaaplicacinbash.Comomsadelantetendrstiempode
descubrir,hayotrostiposdescripts(Perl,Python,PHP...)paraloscualesdeberemosindicarla
aplicacinayudantecorrespondiente.
Comoves,noimportaquepongamoslneasenblanco,puessernignoradas.Podemosponerlas
despusdecadabloquedecomandosquetenganciertarelacin,paradarclaridadylegibilidadal
conjuntodecomandosdelscript.

Lasdossiguienteslneascomienzanporelcarcter#.Enlosscriptsdebash,laslneasque
comienzanconestesignosonignoradas,ysellamancomentarios.Podemosusarlasparaexplicar
quhaceelgrupodecomandossiguiente,detalformaquecuandoeditemoselscriptenelfuturo
nosseamsfcildescubrirquesloqueesthaciendoencadasitio;opodemosusarlosparadar
cualquierotrainformacinimportantedecaraalaedicindelarchivo.Veremosmsejemplosdela
utilidaddeloscomentariosdespus.
Lasdosltimaslneassondoscomandos,delosqueluegosernejecutadosporbash.Como
sabemos,elcomandoechosacaporstdout(pordefectoporpantalla)loquelepasemoscomo
argumento,enestecasodosfrases.Podemosaadircualquiercomandonormaldelosquehemos
visto,queserejecutadonormalmente.Despusescribiremosalgunosscriptsmscomplejos,para
quetehagasunaideadeparacuntopuedenservirnos.
Guardemoselscriptysalgamosdevim.(Msinformacin:Captulo

4,VIMbsico).Ahoralo
ejecutaremos.Laprimeraformadehacerloescomosigue:
$ bash miscript.sh
Hola
Soy un script de shell

Comoves,todosloscomandosdelscripthansidoejecutados.Aunquelaformamsfrecuentede
ejecutarscriptses,darlesprimeropermisosdeejecucin,comoyasabemosdelcaptulodeusuarios,
gruposypermisos:
$ chmod +x miscript.sh
$ ./miscript.sh
Hola
Soy un script de shell

Aldarlepermisosdeejecucin,podemosejecutarahoranuestroscriptcomosideunprograma
normalsetratase.Estoesposiblegraciasalaprimeralneadelscript,quehacequesellame
inmediatamentealaaplicacinayudanteparaprocesarloscomandos.Hemospodidoobservarquea
niveldelshell,nuestroscriptesunprogramacomootrocualquiera,quepodemosejecutareincluso
ponerloenalgndirectoriolistadoenlavariabledeentorno$PATH,comoporejemplo
/usr/local/binyejecutarlocomosideunprogramadelsistemasetratase,simplemente
tecleandosunombre.Creoqueyatevasimaginandolagranutilidaddelosscriptsdeshell...

Variables
Recordamosqueunavariableesunnombrealquelehacemoscorresponderunvalor.Estevalor
puedeserunvalornumricoobienunacadenadetextoindistintamenteenlosscriptsdeshell.Los
nombresdelasvariablesconvienequecomiencenporunaletra,despusveremosporqu.
Enelsiguienteejemploaprenderemosausarlasvariablesennuestrosscripts:
#!/bin/bash
# Script de muestra del uso de las variables
# Asignacin de una variable:
#
variable=5
otravariable=10
tercera=2

resultado1=$[5*10/2]
resultado2=$[$variable*$otravariable/$tercera]
echo
echo
echo
echo

" "
"El resultado de 5*10/2 es $resultado1 ,"
"que efectivamente coincide con $resultado2 "
" "

frase="Introduzca lo que usted quiera:"


echo $frase
read entrada_del_usuario
echo " "
echo "Usted introdujo: $entrada_del_usuario"
exit 0

Repasemoselejemplodespacio.Enprimerlugartenemoslalneaquesersiemprelaprimeraen
nuestrosscripts,yqueyaconocemos,laquediceculeselprogramaqueejecutarlasinstrucciones
delscript.
Siguiendotenemoslaasignacindealgunasvariables,estoes,estamosdandovaloraalgunas
variablesqueluegousaremos.Observaqueentreelnombreyelvalor,NOHAYESPACIOS,es
variable=valor.Procurarecordarlo.Ahoracadavariabletieneelvalorquelehemosasignado.
Podramoscambiarlosimplementedelamismaforma,peroponiendootrovalordistinto,que
sobreescribiraacualquieraquetuvieseanteslavariable.As,tercera=7haraqueelvalordela
variabletercerafuesedeahenadelante7.
Despusnosencontramosconelcomando$[ ],quenospermitehaceroperacionesaritmticas,
obteniendoelresultado.Despusveremosmsdetenidamenteelhechodequeuncomando
DEVUELVAunvalor.Demomentotratadecomprenderesteejemplo.Enlaprimeradeesaslneas,
lavariableresultado1sequedaconelvalorresultantedeefectuarlaoperacinentrelos
nmeros.Enlalneasiguiente,vemosqueparaREFERIRNOSalvalorquetieneunavariable,
colocamosdelantedesunombreelsigno$.Dondequieraquepongamosesesignodelantedel
nombredeunavariable,todoelloserreemplazadoporelvalordelavariable.As,laexpresinque
seevalaalfinaleslamismaqueladelalneaanterior,puestodaslasvariablesquedansustituidas
porsusvaloresrealesantesdequesehagalaoperacin.Comoves,esbastantesencillo.
Enlaslneassiguientesusamoselyaconocidocomandoecho.Esmuyconvenientequeen
nuestrosscriptspongamosentrecomillasloqueechodebesacarporpantalla.As,enlaprimera
lneatenemosunaformasencillaposibleparagenerarunalneaenblancoenlasalida,como
podremosapreciarcuandodespusejecutemoselscript.Comoves,dentrodelascomillasdel
argumentodeecho,podemoshacerqueaparezcaelvalordeunavariableprocediendocomoya
hemosaprendido.Elcomandoechosernuestromejoraliadoparahacerquenuestroscriptsaque
informacinporlapantalla.
Alavariablefraselevamosaasignarunacadenadetexto.Datecuentadequeestaveztampoco
hayespaciosenmediodelaasignacinyqueELTEXTOVASIEMPREENTRECOMILLAS,
pudiendosersimplesodobles.Laestructuraesentoncesvariable="texto".Enlalneasiguiente,con
elcomandoechodenuevo,podemossacarporpantallaeltextoquehabamosguardadoenla
variable.
Atencinalalneasiguiente.Elcomandoreadvaasernuestravadecomunicacinconel
usuarioennuestrosscripts.Funcionadeestemodo:primero,ponemosread,elcomandoquehace
todoeltrabajo,yacontinuacin,ponemoselnombredelavariabledondequeremosquelaentrada
delusuarioquedealmacenada(ennuestrocaso,lavariableesentrada_del_usuario).

Cuandoalahoradeejecutarse,elscriptllegueaesalnea,esperaraqueelusuarioescribaalgoy
presionelateclaINTRO.Enesemomento,loqueelusuarioescribiantesdedepresionarINTRO
quedarguardadoenlavariable,yluegopodremoshacerusodeestosdatosqueelusuario
introdujo,comohacemosenlalneasiguiente,sacarlosdenuevoporpantalla.
Porltimotenemoselcomandoexit.Estecomandoalfinaldelscriptnoesespecialmentetil,
perosipusisemoscualquiercosadebajodelyanoseraejecutada.Lousaremosdespuscuando
queramosque"sisedatalcondicin,entoncesqueelprograma(script)termine".
Paraterminardecomprenderestesegundoscriptdeejemplo,ponloenunficherollamado,por
ejemplo,variables.shconeleditorvim.Dalepermisosdeejecucincomohicimosantesy
despusejectalo:
$ ./variables.sh
El resultado de 5*10/2 es 25 ,
que efectivamente coincide con 25
Introduzca lo que usted quiera:
Yo tecleo esta frase
Usted introdujo: Yo tecleo esta frase.

Hacerscriptsdeshellnoesdifcil,perotampocosenacesabiendoescribirlos.Comohabrspodido
adivinar,lamejorformadeaprenderaescribirscriptses...escribiendoscripts!Asquedeberas
considerarcreartelostuyospropiosconlosconceptosquehemosaprendidoypracticaraspara
consolidarlos.

Comandos posibles
Unadudaquepuedesurgires...qucomandospuedoescribirenmisscripts?Tengoalguna
limitacin?
Deaquotradelasbondadesdelosscriptsenbash:todosloscomandosqueescribiremosenbash
puedenescribirseenunscriptdebash;estoincluyecualquierprograma,redireccionesdeentradao
salida,pipes,etc.Usandocomandosdelsistema,podemoshacerquenuestrosscriptshagancasi
cualquiercosaquenosotrosqueramos,yquesecomportencomosidecomplejsimosprogramasse
trataran.Estoes,paraborrarunficherodentrodeunscript,simplementenecesitamosusarel
comandorm,sinpreocuparnosporcmofuncionarminternamente.Conloscomandosqueahora
conocemos,nuestrosscriptspodrn:listarficherosodirectorios,borrar,despreciarsalidas,buscar
encadenasdetexto,pedirdatosalusuarioeinterpretarlos...
Lomejor,apartedeconseguirunasecuenciaautomatizada(nosernecesariotecleartodoslos
comandosquenecesitemosparaunadeterminadacosatodaslasveces;simplementelos
escribiremosenunscriptyloejecutaremosconunasolalneacadavezquelonecesitemos);esque
podemoshacerquelosargumentosquelepasemosauncomandoenelscriptseanvariables.Pocoa
pocoirscomprendiendoloventajosodequelosargumentosdelosprogramasqueejecutemosen
nuestrosscriptsseanvariables.
Hacernotarunacosa.Cuandounadenuestrasvariablesseaelargumentodeunprograma,ysilo
llamamosconmuchosargumentos,esmuyconvenienteparaevitarerroresextraos,entrecomillar
lavariable:
MI_VARIABLE=/un/directorio

# No muy adecuado:
ls -l $MI_VARIABLE
# Bastante mejor:
ls -l "$MI_VARIABLE"

Cuidado,enestecasolascomillasdebenserdobles.
Todavahaymuchoscomandosquenoconocemos,perocuandoaprendasalgunosnuevos,recuerda
quepuedenservirparadarfuncionalidadesextraatusscripts.

Concepto de valor de retorno


Cuandounprogramaterminadeejecutarse,devuelveoretornaunvalor.Enelcasodelos
programas,elvalorderetornoesunnmero.Elvalorescero(0)sielprogramafinalizconxitoo
distintodecerosielprogramanofinalizconxito.Cadaunodelosvaloresdistintosdecerova
asociadoaunacausadistinta(sabiendoestevalorpodramossaberporquraznfallelprograma),
peropuedequeporahoranolonecesites.
Elvalorderetornoesunconceptounpocoabstracto,peronoesdifcildecomprender.Elvalorde
retornonoseimprimeporlapantalla,esdecir,cuandounprogramaterminanosacaporpantallaun
cero,peronosotrospodemossaberculesesevalor.
Enelshellbash(yporextensin,ennuestrosscripts)elvalorderetornodelltimoprogramao
comandoejecutadoquedaalmacenadoenlavariableespecial$?.
Veamosunejemplo:
#!/bin/bash
echo "Listando archivo existente..."
ls archivo_existente
echo "El valor de retorno fue: $?"
echo " "
echo "Listando archivo inexistente..."
ls archivo_inexistente
echo "El valor de retorno fue: $?"
exit

Enelprimercaso,pedimosalsquelisteunarchivoexistente.Lolistaconxitoyportantoel
valorderetornovalecero.Enelsegundocasolepedimosquelisteunarchivoinexistente.Como
esonoesposible,elcomandonoterminaconxitoyelvalorderetornoesdistintodecero.
Lautilidaddeconocerelvalorderetornoalejecutarunprogramaennuestrosscriptssaltaalavista:
cuandoveamoslassentenciascondicionalespodremoshacerqueelscripthagaunacosauotraen
funcindesiunprogramaterminconxitoono.
Volveremosaverelvalorderetornocuandoestudiemoslasfunciones.

Pasar y procesar argumentos


Loscomandosqueejecutamosnormalmentepuedenrecibiropcionesyargumentos(parmetros),
comoporejemplols -l ./.Eneseejemplo,lseselcomando,lesunaopciny./esun
argumento.Enestaseccinveremoslasvariablesespecialesquenospermitirnluegohacerque
nuestrosscriptssecomportendelmismomodo,quepuedanrecogeropcionesyargumentos.
#!/bin/bash
echo "\$0 contiene $0"
echo "\$1 contiene $1"
echo "\$2 contiene $2"
echo "En total hay $# parametros"

Llamaaestescriptargs.shydalepermisosdeejecucin.Antesdeejecturalovamosaexplicarlo.
Enprimerlugartenemoslabarrainvertida\.Usaremoslabarrainvertidaparaescaparcaracteres
especiales.Siqueremossacarporpantallaconelcomandoechounascomillasounsignodel
dolar,lanicaformaesanteponindoleunabarrainvertida,deotromodoserainterpretadocomo
comillasdefindecadenadetextoocomovariablerespectivamente.
Luegotenemoslasvariables$N,dondeNesunnmeronatural:0,1,2,etc.$0contieneel
comandoejecutado,$1elprimerparmetro,$2elsegundoparmetro,yassucesivamente.
Porltimotenemoslavariableespecial$#.Estavariablecontieneunnmeroentero,quevaleel
nmerodeparmetrosquepasamosalscriptsincontar$0.Ejecutemoselscriptdedosformas
distintasparacomprendertodoesto:
$ ./args.sh
$0 contiene ./args.sh
$1 contiene
$2 contiene
En total hay 0 parametros

$ ./args.sh buenos dias


$0 contiene ./args.sh
$1 contiene buenos
$2 contiene dias
En total hay 2 parametros

Estasdosejecucioneshandebidoservirparailustrarcmofuncionanestasvariablesespecialespara
recibirparmetrosennuestrosscripts.Conformesigamosaprendiendoveremoscmopodemos
hacerquenuestroscriptsecomportedeunaformauotradependiendodelosparmetrosquesele
pasen.Cadavezms,nuestrosscriptsseirnpareciendoaprogramas"delosbuenos".
Todavahayms...puedequenoseteocurracmolistartodoslosparmetrosqueselepasenal
script,seancuantossean.shiftnosdalasolucin.Hayalgunascosasquedebemossaberantesde
poderusarshiftparalistarlosparmetrospasadosaunscript.Noobstante,hayunejemploen
Funciones,queaplicatantoafuncionescomoalscriptensmismo.

Variabledeproceso
Aunquetodavanohemosvistolosprocesos,debemoshacernotarqueexistela
variableespecial$!.EstavariablecontieneelIDdeprocesodelltimo

comandoejecutado.Todoestoserdetalladoenelcaptulodeprocesos.

Evaluacin de condiciones
Muchasvecesnossernecesariohacerquenuestroscriptsecomportedeunaformauotrasegnel
usuariointroduzcaunouotroargumento,osegnunavariabletengatalocualvalor.Enesta
seccinpasamosaverloscomandosyestructurasquenospermitenhaceresto.
Elcomandoquenospermiteevaluarcondicionesenbashestest.Elvalorderetornodetest
sercero(0)silaexpresinesVERDADERA(TRUE),yencambio,seruno(1)silaexpresin
quelepasamosatestesFALSA(FALSE).
LoquequeremosevaluarrecibeelnombredeEXPRESIN.testrecibelasexpresionesdeun
modountantoespecial.Enelsiguienteejemplocomprobamossidosnmerossonigualesono:
$
$
0
$
$
1

test 7 -eq 7
echo $?
test 7 -eq 8
echo $?

Primero,7 -eq 7esloqueseconocecomoexpresin.Deestaformatanpeculiaralprincipiole


decimosatestquecompruebesi7esiguala7(eq,abreviaturade'equals','esiguala').Asque
eseprimercomandoquieredecir:Es7iguala7?Comoves,testnohaproducidoningunasalida
porlapantalla,sinembargo,sicomprobamossuvalorderetorno,vemosqueescero(0),locual
indicaquelaexpresinesverdadera,7esiguala7,efectivamente.
Enelsiguientecomandoestamoscomprobandosi7esiguala8.Comoeradeesperar,elvalorde
retornodetestesuno(1),locualindicaquelaexpresinesfalsa;7noesiguala8.
Ahorasupnqueantesdetodosaquelloscomandoshacemos:
$
$
$
#

a=7
b=8
test $a -eq $a
Aqui seguiriamos con las dos variables

yquerepetimostodoloanterior,peroenvezdeusar7y8,usamoslasvariables$ay$b.Nohay
cambios,testreemplazalasvariablesporsuvalorydespusefectalacomprobacin,siendoel
resultadofinalelmismo.

Sugerencia
Paranotenerqueaprenderdememorialaformaenquehayqueintroducirlelas
expresionesatest,puedesconsultarlaspginasdelmanual,aunquetodava
nolohemosdescrito:man test
Puedesmoverteconlasflechasdedireccinyvolveralshellpulsandolatecla
q.
Entonces,paravercmoyquotrascosassepuedenevaluarcontest,esmuyrecomendable
seguirelconsejoarribaexpuesto.
Existeademsotraformadellamaratestquenoesconelcomando,yqueennuestrosscripts

puedeayudarnosaqueconunslogolpedevistanosdemoscuentadequeslaexpresinquese
evalua.Estaotraformaconsisteenponerentrecorchetes(yconespacio)laexpresinaevaluar:
$ [ 3 -gt 2 ]
$ echo $?
0

Estructuras condicionales con if


Hemosvistocmoevaluarcondicionescontest.Conlaayudadelasestructurascondicionales
quecrearemosconifyloqueyahemosaprendido,podremosporfinhacerquenuestrosscriptsse
comportendeunaformauotrasegnlascondicionesquenosotrosespecifiquemos.
Lasestructurascondicionalestienenesteaspecto:
if EXPRESION1; then
# Bloque 1
elif EXPRESION2; then
# Bloque 2
else
# Bloque 3
fi

Esteeselmodelomsgeneralcontodaslasopcionesposibles.Sielvalorderetornode
EXPRESION1escero,laslneasdecomandosde"Bloque1"sernejecutadas.Elrestodelbloque
ifserignoradoenesecaso.
SielvalorderetornodeEXPRESION1noescero,peroeldeEXPRESION2squeescero,
entoncesel"Bloque1"noserejecutado,mientrasqueel"Bloque2"squeserejecutado.El
"Bloque3"serignorado.Podemosponertantoselif'scomonecesitemos.
SiniEXPRESION1niEXPRESION2nicualquierotradeotroselif'squepongamosretornan
cero,entoncesel"Bloque3"serejecutado.
Usamosfiparaterminarlaestructuracondicional.
Comohabrssupuesto,lasEXPRESIONessoncomandoscontest.Veamosunejemplosencillo:
#!/bin/bash
echo "Intrduzca un numero: "
read input
if [ $input -lt 5 ]; then
echo "El numero era menor que 5"
elif [ $input -eq 5 ]; then
echo "El numero era 5"
elif [ $input -gt 5 ]; then
echo "El numero era mayor que 5"
else
echo "No intrudujo un numero"
fi

Enestesencilloejemplohacemosqueelusuariointroduzcaunnmeroquequedaguardadoenla
variable$input.Dependiendodesielnmeroesmenor,igualomayorque5,elscriptsecomporta
deunaformauotra(podemosaadirmslneasdecomandosdespusdelosecho'squeaparecen

ah).Sielusuarionointroducenadaointroduceunacadenadetexto,loquehaytraselseeslo
queserejecutado,puesningunadelascondicionesanterioressecumple.
Datecuentaqueenlasexpresionesentrecorchetespodranhabersesustituidosestoscorchetespor
test.
Detodosmodos,loselifyloselsesonopcionales,podemoscrearunaestructuracondicional
sinellossinolosnecesitamos.Comomuestra,elsiguienteejemplo:
#!/bin/bash
if [ $# -ne 2 ]; then
echo "Necesito dos argumentos, el primero"
echo "es el fichero donde debo buscar y"
echo "el segundo es lo que quieres que"
echo "busque."
echo " "
echo "Uso: $0 <fichero> <patron_busqueda>"
echo " "
exit
fi
FICHERO=$1
BUSQUEDA=$2
if [ ! -e $FICHERO ]; then
echo "El fichero no existe"
fi

exit

NUM_VECES=`cat "$FICHERO" | grep --count "$BUSQUEDA"`


if [ $NUM_VECES -eq 0 ]; then
echo "El patron de busqueda \"$BUSQUEDA\" no fue encontrado"
echo "en el fichero $FICHERO "
else
echo "El patron de busqueda \"$BUSQUEDA\" fue encontrado"
echo "en el fichero $FICHERO $NUM_VECES veces"
fi

Esteejemployasevapareciendoaunprogramadelosbuenos.Estudimosloendetalle:
Enprimerlugarcomprobamosquenoshanpasadodosargumentos:elficherodondebuscaryla
cadenadebsqueda.Sinoesas,leindicamosalusuariocmodebeejecutarelscriptysalimos.
Acontinuacincomprobamosqueelficheroexiste.Sinoesas,advertimosconvenientementey
salimos.
Ahoravienelalneaquehacetodoeltrabajo:NUM_VECES=`cat "$FICHERO" | grep
--count "$BUSQUEDA"`Alentrecomillarconlascomillasinclinadaselcomando,susalida,
envezdesalirporpantalla,quedarguardadaenlavariableNUM_VECES.As,mediantecatyel
pipe,grepcuentaelnmerodevecesqueelvalorde$BUSQUEDAestenelfichero,quenos
quedaguardadoen$NUM_VECES.
Losiguientehablaporssolo.
Colocaesaslneasenunscriptydalepermisosdeejecucin.Acontinuacin,ejectalodelas
distintasformasposibles:sinargumentos,conunficheroinexistente,condistintospatronesde

bsqueda,etc.
Dentrodeunbloquedeunaestructuracondicionalpuedesponerotra(ifsanidados),ydentrode
esaotrapuedesponerotrayassucesivamente.Tambinpodrsponercuandolasveamos,buclesy
otrasestructuras,ascomocondicionalesdentrodebucles,etc.Slolaprcticatedarlasuficiente
solturacomoparapoderhacerquetusscriptshaganautnticasvirgueras.Laprcticahaceal
maestro!

Comprobar el valor de una variable con case


Escribiendoscripts,esmuchasvecesnecesariocomprobarsielvalordeunavariablecoincidecon
algunodelosquenosotrosestbamosesperando,ysiases,actuardeunaformauotradependiendo
deestevalor.
Niquedecirtienequeesoesposiblehacerloconif,yelseif,peroexisteotraformams
eficienteycmodadehaceresto:conlaestructuracase.Seusacomosigue:
#!/bin/bash
case $VARIABLE in
valor1)
# Bloque 1
;;
valor2)
# Bloque 2
;;
.
.
.
.
*)
# Ultimo Bloque
;;
esac

valor1yvalor2sonvaloresquenosotrosesperamosquelavariablepuedacontener,yBloque1
yBloque2sonlosbloquesdecomandosconloquequeremosquesehagaencadacaso.Podemos
ponertantosvaloresreconociblescomoqueramos.Lospuntossonprecisamenteparaindicar
aquello.El*(asterisco)esuncomodnexactameteigualquehacamosmoviendonosentre
directoriosencaptulosanteriores,cualquiercosaquenohayacoincididoenalgunadelasdearriba
coincidiraqu.Estoescompletamenteopcional.Noobstante,enelejemplosiguientetedars
cuentadesuutilidad.
Losdos";;"esnecesarioqueseponganalfinaldecadaopcin.
#!/bin/bash
# case_arg.sh
if [ $# -lt 1 ]; then
echo "Error. Esperaba al menos un parametro"
exit 1
fi
case $1 in
--opcion1)

echo "--opcion1 es una opcion reconocida"


exit 0
;;
--opcion2)
echo "--opcion2 es una opcion posible"
exit 0
;;
linux)
echo "\"linux\" es un argumento reconocido"
exit 0
;;
*)
echo "Parametro no reconocido"
exit 1
;;
esac

Enesteejemplosehacequelasopcionestenganqueirprecedidasdeundobleguinenformalarga
(lanicaquereconoceremosenestecaso),deestaformadamosanuestroscriptunaspectoyun
comportamientoms"profesional".Losargumentosnosesuelenhacerprecederdeningnsigno;
aunquetodoestopuedesponerlocomotprefieras,loimportanteesqueapreciescmofunciona
estetipodeestructuracondicional.
Conexitsalimosdelscript,haciendoqueelvalordevueltosea0(xito)o1(error)segnlos
parmetrosfueranreconocidosono.
Dentrodecadaunodelosbloquesdecomandossepuedenponerestructurascondicionalesconif,
oinclusootrocase.

Bucles
Losbuclesenbashscriptingdifierenunpocodeloquesonenlamayoradeloslenguajesde
programacin,perovienenacumplirunamisinsimilar;asolucionarelproblemade"Quieroque
miscripthagaestomientrassedeestacondicin",o"Paracadaunodeloselementossiguientes,
quieroquemiscripthagaestootro".
As,tenemosdostiposdebuclesdiferentesenbash:forywhile.

Bucles con for


Delospropsitosexplicadosanteriormenteasolucionarporlosbucles,forvieneasolucionarel
segundo.Veamosalgunosejemplos:
$ for i in pedro pepe juan jose; do
> echo "Hola $i"
> done
Hola pedro
Hola pepe

Hola juan
Hoja jose

Enprimerlugarapreciamosquetodoloquesepuedehacerenunscripttambinsepuedehaceren
bash.Laestructuradeforeslasiguiente:
for nombre_var in LISTA ;
comando 1
comando 2
# Y asi los que queramos
done

do

nombre_vareselnombredeunavariable(elquenosotrosqueramos,ysloelnombre,no
precedidade$).LISTAesunalistadeelementos,queselapodemosdarcomoenelejemplo
anterior,ahenesecomando,opodemosponerunavariablequeyacontengaunalistadeelementos
(enestecasosquelaprecederamosde$,paraqueseareemplazadaporloselementosdelalista
quecontiene).Despusaprenderemosotrasformasposiblesdeexpresaresalista.
Conestebucleloqueconseguimoses:comando 1,comando 2,etc.seejecutantantasveces
comoelementoshayaenLISTA.Paralaprimeravez,$nombre_varvaldrelprimerelementode
lalista,paralasegundavezqueseejecutenloscomandosvaldrelsegundoelementodelalista,y
asisucesivamentehastallegaralltimoelementoenelqueelbuclehabrterminado(yelscript
seguirsuflujodeejecucinnormalhaciaabajo).Ahorayadeberamosentenderelejemplo
anterior.
LISTApuedeserunalistadearchivosdadaimplcitamente.Msconcretamente,podemosusarlos
wildcardsqueyaconocemosparareferirnosavariosarchivosconunnombreparecido:
#!/bin/bash
# Listador de archivos y directorios ocultos
DIR=$1
if [ -z $DIR ]; then
echo "El primer argumento debe ser un directorio"
exit 1
fi
if [ ! -d $DIR ]; then
echo "El directorio debe existir"
exit 1
fi
for i in $DIR/.*; do
echo "Encontr el elemento oculto $i"
done
echo "Saliendo..."

.*hacereferenciaatodoslosarchivosydirectoriosocultosde$DIR.Aldetectarforelwildcard,
sabrqueloselementosdelalistasoncadaunodelosarchivoscoincidentes.Ejecutaelejemplo
anteriorsiquieresvercmofunciona.Puedeshacerusoconestebucledeloqueyasabesde
wildcardsreferidosaarchivos.

ElelementoLISTAdelbuclefor,puedeseruncomandoentrecomilladoconcomillaslaterales;
uncomandotalquesusalidaseaunalistadeelementos.As,seralomismo:
for i in *; do

que:
for i in `ls`; do

Bucles con while


Elotrotipodebucleposibleenbashscriptingeselbuclewhile.Estebuclevieneacumplirconel
propsitode"quieroquesehagaestomientrasquesedestacondicin".Suestructuraesla
siguiente:
while test CONDICION; do
# Comandos a ejecutar
done

Comoyasabemosusarelbucleanterior,esteloentenderemosconalgunospocosejemplos:
#!/bin/bash
j=0
while [ $j -lt 10 ]; do
echo "j vale $j"
j=$[$j+1]
done
# Aqui sigue el flujo de ejecucion normal del script

Esteejemploesinteresante.Lacondicinparaqueelbuclesesigaejecutandoesquejvalgamenos
de10.Observalaformamediantelacualencadaciclodelbuclesumamos1alavariablej.
Tantoenelbucleforcomoenelwhile,podemosusarbreakparaindicarquequeremossalir
delbucleencualquiermomento:
#!/bin/bash
MINUM=8
while [ 1 ]; do
echo "Introduzca un nmero: "
read USER_NUM
if [ $USER_NUM -lt $MINUM ]; then
echo "El nmero intrododucido es menor que el mo"
echo " "
elif [ $USER_NUM -gt $MINUM ]; then
echo "El nmero introducido es mayor que el mo"
echo " "
elif [ $USER_NUM -eq $MINUM ]; then
echo "Acertaste: Mi nmero era $MINUM"

break
done

fi

# Comandos inferiores...
echo "El script sali del bucle. Terminando..."
exit

Lacondicinesqueelbucleseejecutesiempre(test1siempreretornarTRUE,yelbuclese
seguirejecutando).Pero,sielnmerointroducidoeselmismoqueelvalorde$MINUM,break
harquesesalgadeelbucleycontineejecutandoloscomandosinferiores.
Tenencuentaqueenbashscripting,usandolanotacin$[ ]parahacerclculosslopodemos
usarnmerosenteros.
Adems,dentrodeunbuclewhilesepuedeutilizarcualquieradeloselementosyaconocidos,
siemprequesehagacorrectamente.

Funciones
Sibienlasfuncionesenbashscriptingdifierendeloquesonenlamayoradeloslenguajesde
programacin,scomparten,encambio,surazndeserbsica.
Unafuncinenunscriptesunconjuntodelneas(comandos)alosqueselesdaunnombreespecial
ypuedenserejecutadosdesdecualquierpuntodelscriptmedianteelusodeesenombreespecial.
Noseconsideraunabuenaprcticarepetirendistintossitioslasmismaslneasdecdigo.As,se
agrupanenunafuncin,yLLAMANDOalafuncinporsunombre,esaslneassonejecutadas
dondequieraquelallamemos.
UnafuncinseDEFINEdelasiguienteforma:
function nombre_de_la_funcion () {
## Aqu van los comandos que se
## ejecutarn cuando llamemos a la
## funcin
}

nombre_de_la_funcionloelegimosnosotros,ylepodemosdarelnombrequequeramos,con
lasmismascondicionesqueelnombredeunavariable(noespacios,nocaracteresextraos,etc.).
Entrelasdosllaves({y})seintroducenloscomandosquesequierequeseejecutencuandola
funcinseallamada.
Unejemplosencillopodraserelsiguiente:
#!/bin/bash
# function1.sh
function uso
echo
echo
echo
echo
}

() {
"Este script recibe dos argumentos."
"El primero debe ser --opc1 u --opc2 ,"
"y el segundo debe ser un fichero existente."
"--"

if [ $# -ne 2 ]; then
uso
exit 1
fi
case $1 in
--opc1)

if [ -e $2 ]; then
echo "El script termin con xito"
exit 0
else
uso
exit 1
fi

;;
--opc2)

if [ -e $2 ]; then
echo "El script termin con xito"
exit 0
else
uso
exit 1
fi

;;
*)
;;

uso
exit 1

esac

Senecesitadefinirlafuncinantesdellamarla.Sellamaalafuncinsimplementeconelnombre
queledimos;esenombreseconvierteenun"comandoposible"queloquehaceesejecutarlas
lneasquehaydentrodelafuncin.
Denohaberusadoaqulasfunciones,tendramosquehaberreescritolosechoquedicencmose
usaelscriptunayotravezencadasitiodondeloshubisemosnecesitado.Mientrasnoseejecuteel
scriptconlosargumentosadecuados,llamamosalafuncinusoqueexplicaalusuariocmose
debellamarelscript.Estaestrategiaesmuyfrecuenteytilenscriptsmscomplejosconmuchas
opciones.
Podemosdefinirtantasfuncionescomonecesitemos,cadaunaconunnombredistinto.Adems,al
igualquelosscriptsdesdelalneadecomandos,lasfuncionespuedenrecibirparmetros,quese
procesandelamismaforma:$1 $2ydemssecorrespondenconelprimeryelsegundo
parmetropasadoalafuncinrespectivamente.
Alconvertirselafuncinenun"comandoposible"dentrodelscript,losparmetrosselepasan
igualqueacualquierotrocomando:
#!/bin/bash
function lista_parametros () {
echo "Se ha llamado a lista_parametros, con $#"
echo "parmetros. Mostrando los parmetros:"
echo " "
b=7

numparms=$#
local j=1
while [ $j -le $numparms ]; do
echo "El parmetro $j contiene $1"
shift
local j=$[$j+1]
done
}
lista_parametros a b c d dsfafd d
echo $b
echo $j

Lafuncinlista_parametrosenesteejemplorecibevariosparmetrosdelmismomodoque
cualquierotrocomandodentrodelscript,yseprocesanigualqueyaconocemosparalosscripts.
Aquhacemosusodeshiftdentrodelafuncin.Loqueshifthaceesque$1valga$2,que$2
valga$3,etc.paraasrecortarlalistadeargumentosunaposicinquitandoelprimerodeellos.
Quconseguimos?Puesessencillo,listamostodoslosparmetrosposibles,puestoque
imprimimoselprimeroporpantalla,luegoelprimerovaleelsegundo,queseimprimeporpantalla,
luegoelprimerovaleeltercero,quesevuelveasacarporpantalla,yascontantoscomotengamos.
shiftnosofreceunasavanzadasposibilidadesparaprocesarargumentos.Enesteejemplolo
hemosvistodentrodeunafuncin,perotodoestoestambinaplicableaunscriptensmismo,
fueradeunafuncin.
Paraterminarconesteejemplo,nosfijamosenlocal j=...,estosignificaquelavariable$j
sloexistedentrodelafuncin,dehecho,cuandohacemosecho $jfueradelafuncin,no
obtenemosningnvalor.Lavariable$b,alnoserDECLARADADEMBITOLOCAL,sino
GLOBAL,existedentrodelafuncinyfueradeella,comosepuedeapreciarejecutandoelscript.
Cualquierotravariableconvalorenelflujoprincipaldelscriptexistedentrodelasfuncionesque
definamos.
Hemosdichoquecadafuncinseconvierteenunaespeciede"comandoposible"dentrodelscript
dondeestdefinida.Comosideuncomandosetratase,yaligualquehacamosconexit 0o
exit 1enelflujoprincipaldelscript,podemoshacerquelallamadaaunafuncingenereun
valorderetornodexitoobiendeerror.Loconseguimosconelcomandoreturn.Seusa
exactamenteigualqueexitenelscript,perousaremosreturndentrodelasfunciones.
Usarlasfuncionesennuestrosscriptsnosdampliasposibilidadesenelsentidodereducirel
tamaodestos,yqueseanmsfcilesdeinterpretarsipasadountiempodebemosestudiarlosy
modificarlos.Adems,otraventajadeusarfuncionesparalneasqueserepitenesquesinolo
hicisemosyquisiramosmodificarelcomportamientodeesaslneas,deberamoshacerloentodos
ycadaunodelossitiosdondelashubisemospuesto.Conlasfunciones,simodificamoslaslneas
delafuncin,yaquedamodificadaentodoslossitios.

Un ejemplo completo
Ahoravamosaverendetalleunejemplodeunscriptqueusamuchascosasdelasaprendidasy
ademstieneunfinprctico:sirveparatranspasarlosarchivosdeunacmaradigitalaundirectorio
denuestramquina.Adems,lafuncinechocllamaalcomandoechoconlosargumentos

adecuadosparaquelasalidaseaconcolores(esperamoscomentarestoenotrocaptulo).Note
preocupessinocomprendesalgunoscomandosdelosusados,puessonmuyespecficos;lo
importanteesverquelacorrectacombinacindetodoloaprendidoterminaenscriptstilescomo
este:
#!/bin/bash
#
# Variables de configuracin
#
+ Acabado en / !!!!
DIRECTORIO_SALIDA=/home/camara/
#
#
# Funciones
#
function echoc()
{
case $2 in
"red")
echo -n "^[[01;31m"
;;
"green")
echo -n "^[[01;32m"
;;
"blue")
echo -n "^[[01;34m"
;;
esac
echo -n $1
if test $3 = 1
then
echo -n "^[[00m"
else
echo "^[[00m"
fi

}
#
#
function comp()
{
echoc "[" "blue" "1"
echo -n " "
if test $1 = 0
then
echoc "OK" "green" "1"
else
echoc "!!" "red" "1"
fi
echo -n " "
echoc "]" "blue" "0"
}
# Main
echo "Por favor, encienda la cmara y pngala en modo [|>]"
echo -n "Pulse una tecla para continuar"
read -n1
echo "."
echo -n "Montando la cmara... "
mount /camara 2>&1 > /dev/null

comp $?
echo "Copiando imgenes a /home/sergio/camara... "
for i in /camara/dcim/100nikon/*.jpg
do
NUEVO_NOMBRE=`basename $i | sed s:dscn:$DIRECTORIO_SALIDA:g`
echo -n "
$i -> $NUEVO_NOMBRE... "
cp $i $NUEVO_NOMBRE
comp $?
done
echo -n "Desmontando la cmara... "
umount /camara 2>&1 > /dev/null
comp $?
if [ `/etc/init.d/samba status | awk '{print $3}'` != "started" ]
then
echo "Iniciamos samba... "
/etc/init.d/samba start 2>&1 >/dev/null
comp $?
else
echo "Samba ya est iniciado."
fi
echo "Ya puede apagar la cmara con seguridad"

Conclusiones
Esimportantequepractiquesahacertuspropiosscripts,aunqueseansencillos,paraconsolidartodo
loaprendido.Sloconlaprcticallegarsadominarelbashshellscripting.
Recuerdalautilidaddelosscriptsalahoradeautomatizartareasquetenganquehacerse
frecuentemente;esmejorhacerunscriptquetecleartodosloscomandosnecesarioscadavezquelo
necesitemos.
Posteriormenteestudiaremoscron,queesundemonioqueejecutaloquequeramosaunahora
determinadaeinclusoperidicamente.Nosserespecialmentedeayudacrearscriptsque,por
ejemplo,hagancopiasdeseguridadautomticamente,ydrselosacronparaquelosejecute.
Otroscomandosqueiremosdescubriendonospermitirnhacerscriptsquedesempeentareasdelo
msvariado.

Captulo 8. Instalacin de Software adicional


Tabladecontenidos
Introduccin
Mtodosdeinstalacin
Escogiendonuestromtodo(binariosvs.fuentes)
Binarios
Fuentes
Desinstalandoloinstalado
Binarios
Fuentes
UtilidadesGrficas

Consideracionessobreseguridad
Sistemasdepaquetesymanejodelibreras
ldconfigymssobrelibreras

Introduccin
Enestecaptulotrataremosun'problema'alquecualquierusuariodeLinuxydesoftwarelibre
tendrqueenfrentarsetardeotemprano.
InstalarsoftwareadicionalenLinuxessencillo,sinembargo,dadaladiversidaddedistribucionesy
sistemasdeempaquetadodelsoftwarelasutilidadesquemanejandichospaquetessondistintas.

Mtodos de instalacin
Alahoradeinstalarsoftwareadicionalaladistribucinqueinstalemosnospodemosencontrarcon
variossistemasdepaquetes.Existen,agrandesrasgos,cuatrosistemasdepaquetesentodaslas
distribucionesdeLinux:RPM,DEB,TGZyEBUILD.Lostresprimerossonbinarios(verLos
paquetesbinarios),yelcuartosetratademetapaquetes(verMetaPaquetes).
Lospaquetesbinarioscontienenelsoftwareyaencdigodemquina(aexcepcindelosSource
RPMydemsqueserntratadosmstarde),ypondrnlosprogramasyficherosdeconfiguracin
enelsitioadecuadodelrboldedirectoriosparaquelosotrospaquetespuedanencontrarlos.Los
sistemasdepaquetesbinariosseapoyanenuna"basededatos"queguardaqupaquetesestn
instaladosyculesno,laversindeestos,etc...As,cuandoinstalamosunpaquetebinario,tal
comounRPMounDEB,ademsdecrearselosficherosnecesariosparaqueelsoftwarepueda
funcionar,seaadeaestabasededatosunaentradadiciendoqueelpaquetehasidoinstaladoy
asimismoseguardasunmerodeversin.Algoparecido(peronoigual)ocurreconlosebuildsde
Gentoo.
Conformetratesconestossistemasdepaquetestepodrocurrirquelosdatosdelabasededatosde
paquetesnocoincidanconloquerealmentehayenlamquina.Estopuedeocurrirmedianteel
borradoaccidentaldeficherossindesinstalaradecuadamenteunpaquete,oconflictosde
versiones...Encualquiercasodisponesdeopcionesquetepermiteninstalarodesinstalarpaquetes
inclusosilainformacindelabasededatosdepaquetesnoesdeltodocoherente.Adems,existen
comandospara"reconstruir"oarreglarlabasededatosdepaquetes.Laspginasmandelos
programasquesemencionanacontinuacinteaportarntodalainformacinquenecesitasal
respecto.
Ademsdelospaquetesdenuestradistribucindisponemosdeunospaquetesunpocoespeciales.
Estospaquetescontienenelcdigofuentepreparadoparacompilarseeinstalarseencualquier
distribucin.Porlogeneralnoesdifcilinstalarlosperopuededarbastantedolordecabezalas
primerasveces.Conestospaquetesnotodosonpenurias,tambintienensusventajas.Entrelas
ventajaspodemosdestacarelcontrolqueadquirimossobrelainstalacindelpaqueteysusbinarios,
ademsdelaposibilidaddehaceralgunoscambiosenelmismosinosinteresa(aplicandoparches).
Instalarsoftwaredeestemodonoimplicaqueseguardeinformacinenunabasededatosdeloque
sehaaadidoalsistemacomoocurreconlossistemasanteriores,porloquesielpaquetedecdigo
fuentenodisponedeunaopcinparadesinstalarlo,tendremosqueborrarlosficherosamanounoa
unoencasodequererquitarelsoftware.Estonoesmuycomnninecesarioenlamayoradelos
casos,porqueaunqueinstalemosunsoftware,mientrasnoloestemosejecutando"nonosmolesta",
elespacioocupadoendiscosuelesermuypequeo.

Escogiendo nuestro mtodo (binarios vs.


fuentes)
Comosehanombradoantes,hayquedecidirqumtodovamosautilizar.Enprincipiosiempre
deberemosoptarporlosbinariosdenuestradistribucinanoserquesepamosrealmenteloque
hacemos.
Compilarunprogramadesdelasfuentespuedesernostilenmquinasdondesenecesiteun
rendimientoextremooencasosenquenecesitemosaplicarparchesalpaquete.

Binarios
Sihemosescogidoestemtodo,debemossaberquelasutilidadesparamanejarlospaquetesvaran
segnladistribucinquetengamos.
Si tenemos RedHat
EnRedHatpodemosinstalarnuestrospaquetesdedosformasdistintaslaprimerapasaporbajarel
paqueteysusdependencias(unpaquetepuedenecesitarqueotrospaquetesestninstaladosantes
quel)deinterneteinstalarlasconelcomandorpm,ylaotraformaesinstalarunautilidadllamada
aptrpmquebajarautomticamenteelprogramaylasdependenciasquesenecesitenylas
instalarautomticamente.
Instalando RPMs con rpm

Nosepretendequeestemanualsutituyanimuchomenosacualquierdocumentacinescritade
rpm.rpmesextensoynosepuedetratarenunasubseccindeestemanual;lomejoresquele
echesunvistazoalapginadelmanualsinecesitasalgomsavanzado.Veamosunosejemplos:
# rpm -ivh mutt-1.4.1-1.i386.rpm
# rpm -Uvh mutt-1.5.1-1.i386.rpm

Instalaelpaquetemutt1.4.1.ParaquefuncionetienesquetenerelRPMenelmismo
directorioenelqueseejecutaelcomando.
Encasodequemuttyaestuvierainstaladoenelsistema,lomejorescorrerestecomando
puestoquesemantendrnalgunosficherosdeconfiguracin.Setratadelcomandopara
actualizarsoftware.

Otrasopcionestilesalahoradeinstalarconrpmsonforceynodeps.Laprimeraestilpara
reinstalarunpaquetecuandoelsistemanosdicequeestinstaladoperofaltaalgnfichero;yla
segundasirveparaquerpminstaleelpaqueteignorandosusdependencias.Estoltimoresultaren
queelsoftwarenofuncionarenlamayoradeloscasos,peroenelfuturopodrsdescubrirsu
utilidadportmismo.Estasdosopcionessepuedenaadirenconjuntoconlasyavistaspara
instalaroactualizarunpaquete.
TantoparaRedHatcomoparadistribucionesbasadasenesta,esposibleencontrarlosRPMsenlos
discosdeinstalacinbajoeldirectorioRedHat/RPMs/,sustituyendoRedHatporelnombredela
distribucinsinosetratadeRedHatLinux.
Unsitiowebmuycomnesrpmfind.net.AllsepuedeencontrarunbuscadordepaquetesRPMque
puedesacarnosalgunavezdeunapurosinecesitamosresolveralgunadependenciarara.No

obstante,debemostenercuidadoconloqueinstalamos,esrecomendableleerlasconsideracionesde
seguridadalfinaldeestecaptulo.
Puedesaveriguarsiunpaqueteestinstalandoconelcomandorpmqpaquete,dondepaquetees
elnombredelpaquetesinversin,porejemplorpmqsendmailnosdirasisendmailest
instaladoennuestrosistema.
Instalando RPMs con apt-rpm

Loprimeroserbajareinstalarelsoftwarenecesariodehttp://apt.freshrpms.net,paradespues
instalarlo.
Unaveztengasinstaladoaptdebesmodificarelfichero/etc/apt/sources.listparaque
quedemsomenosas(dependiendolaversindetudistribucin):
# Red Hat Linux 9
rpm http://ayo.freshrpms.net redhat/9/i386 os updates freshrpms
rpm-src http://ayo.freshrpms.net redhat/9/i386 os updates freshrpms
# Red Hat Linux 8.0
#rpm http://ayo.freshrpms.net redhat/8.0/i386 os updates freshrpms
#rpm-src http://ayo.freshrpms.net redhat/8.0/i386 os updates freshrpms

Unavezesttodobientendremosanuestradisposicin(entreotros)estoscomandos:
#
#
#
#

apt-get update
apt-get install paquete
apt-get upgrade
apt-cache search palabraclave

Estoactualizalalistalocaldepaquetesdisponibles.Cadavezquevayasainstalarunnuevo
paqueteesinteresantequeejecutesestecomando.
Estoinstalaunnuevopaquete.APTbajartodaslasdependenciasylasinstalar.
Simplementeelnombredelpaquete,sinversionesniextensiones.
Estecomandoactualizatodoslospaquetesquehayanuevoseninternet.Previamente
tendremosquehaberactualizadonuestralistalocalcon'aptgetupdate'.
Estecomandoofrecerunalistadepaquetesconunapequeadescripcinquecoincidancon
elcriteriodebsquedapalabraclave.

Siqueremosactualizarunsolopaqueteysusdependencias,primeroactualizaramoslalistalocalde
paquetes,ydespusharamosaptgetinstallpaquete(sinnmerodeversin).Siexistieseuna
versinmsrecientedeestepaqueteseinstalara.
TantorpmcomoaptrpmmodificanlamismabasededatosdepaquetesRPMcuandoinstalano
desinstalanpaquetes.Lapginamanderpmpuededartemsinformacinacercadelasopciones
disponibles.
Hayunaguamsdetalladadeestoen:http://linuxparatodos.com/linux/introaptrpm/

Si tenemos Debian
SinuestradistribucinesDebianoalgunabasadaenesta,lomejorquepodemoshaceresutilizar
aptgetparainstalarsoftware.Estadistribucinutilizatambinpaquetesbinarios,perosondistintos
delosRPMsysellamancomnmenteDEB.
Instalando DEBs con dpkg

AunqueestamaneradeinstalarsoftwareenDebianesunpocodesaconsejadamostrarelcomando
parainstalarunpaquete.debquehayamosdescargadodeinternet.dpkgtieneuncometidosimilar
alderpmenlasdistribucionesbasadasenRedHatadiferenciadequedpkgcomoeslgicoslo
trabajaconpaquetesbinariosDEB.
# dpkg -i paquete.deb

Instalando DEBs con apt-get

Elcasodeaptgetesidnticoaldeaptrpm.Loscomandosquepodremosusarson(entreotros):
#
#
#
#

apt-get update
apt-get install paquete
apt-get upgrade
apt-cache search palabraclave

Estoactualizalalistadepaqueteslocal.Cadavezquevayasainstalarunnuevopaquetees
interesantequeejecutesesteprograma.
Estoinstalaunnuevopaquete.APTbajartodaslasdependenciasylasinstalar.
Simplementeelnombredelpaquete,sinversionesoextensiones.
Estecomandoactualizatodoslospaquetesquehayanuevoseninternet.Previamente
tendremosquehaberactualizadonuestralistalocalcon'aptgetupdate'.
Estecomandoofrecerunalistadepaquetesconunapequeadescripcinquecoincidancon
elcriteriodebsquedapalabraclave.

Exactamenteigualqueocurraconaptrpm,aptgetnospermiteactualizarunpaqueteprevia
actualizacindenuestralistalocalconaptgetinstallpaquete.Tambin,elfichero
/etc/apt/sources.listcontienelasdireccioneseinformacindedndebajarlospaquetes.
EsmuycomnenlasdistribucionesDebian(tambinloesconaptrpmperonotanto),aadir
nosotrosmismoslneasalsources.listparapoderinstalarmedianteaptpaquetesquenoestn
enlasfuentesoficiales(nuevasversionesgeneralmente).Despusdeaadir(oquitar)lneasal
sources.listsedebeactualizarlalistadepaqueteslocal.
La base de datos de paquetes DEB

Tantolainstalacin/desinstalacindepaquetescondpkgcomoconapt,registransuscambiosenla
mismabasededatosdepaquetesDebian.dpkgeselprogramaquepermitehacerdistintas
operacionesconestabasededatos.Supginamantedarmsdetalles.

Si tenemos Slackware
LospaquetesenSlackwareusanunsistemabastantesimple.UnpaquetedeSlackwareesun
paquetetarcomprimidocongzip(VerCaptulo

12,Utilidadesdecompresinyempaquetadode
ficherosydirectorios.).Descomprimiendoamanounodeestospaqueteseneldirectorioraz(/)los
contenidosdeaqulsedistribuiranadecuadamenteenelsistema(porejemplolosbinariosen
/usr/bin,losficherosdeconfiguracinen/etc...).Peroademsdelsoftwareensestos
paquetescontieneninformacinextra,tilparalasutilidadesquegestionanlospaquetesbinariosde
estadistribucin.
Estonodebellevaraconfusinconlospaquetesdecdigofuente;unpaquetebinariodeSlackware
esjustamenteeso,aunquevengacomprimidocomohabitualmentedescargamoslospaquetesde
cdigofuente.
Lanomenclaturadelospaquetesesdeltiponombre-version-plataformaIDcompilacin.tgzporejemplocdrdao-1.1.7-i386-1.tgz

Aviso
LasutilidadesbsicasdepaquetesdeSlackwareNOGESTIONAN
DEPENDENCIASENTREPAQUETES,estoes,nosequejarnsiseinstalaun
paquetequedependedeotroquenoestinstalado.Obviamenteelsoftwaredel
primerpaquetenofuncionar.
Peroesposiblegestionarlasconotrasutilidadesdescritasenlaseccin
Gestindedependencias.Adems,comoirsdescubriendosiusas
habitualmenteSlackware,estonoesunadesventajaentodoslosaspectoscomo
pudierapareceralprincipio.
Instalando paquetes normalmente

Lautilidadinstallpkginstalaunpaqueteenelsistema.Unejemplosera,suponiendoquehemos
descargadoelficherodeInternetoestamoseneldirectoriodelCDROMdondeaqulseencuentra:
# installpkg cdrdao-1.1.7-i386-1.tgz

Opcionesinteresantesparaestardenson:

warnnoinstalaelpaqueteperonosinformadeloquepasarasiloinstalamos(ficheros
nuevososobreescritos).

rinstalarlospaquetesdeeldirectoriodetrabajoyademsrecursivamentelosquehayaen
directoriosinferioresquecoincidanconelnombredearchivoque,adems,puedecontener
loswildcardsyaconocidos.

Msopcionesdeestardenensupginaman
Actualizando paquetes

Sitenemosunpaqueteinstaladoynoshemoshechoconunaversinactualizada,debemosusarla
rdenupgradepkg<nombrefichero>paraactualizaralnuevonuestrosistema.
Eliminando paquetes

Lardenremovepkgseguidadelnombredelpaqueteaquitardelsistema(puedesersloel

nombre,sinversin,perotambinelnombredelficherocompletoqueseusparainstalarlotilsi
hayvariasversiones).
Delmismomodoqueinstallpkg,aqutambindisponemosdelaopcinwarnquenospermitever
qucambiaraennuestrosistemasindesinstalarelpaqueterealmente.
pkgtool, utilidad con mens

Ejecutandoestaordensinargumentosenunshellcomoroot,obtendremosunmencondiversas
opcionesquehablanporssolas.Nospermitirintuitivamenteinstalar,desinstalar,actualizar,ver
informacinolospaquetesinstalados,etc.
Conversor de paquetes RPM a TGZ

EstaposibilidadnossertilsitenemosunpaqueteRPMquenotienemuchasdependencias
(porquesilastiene,lastendremosquesatisfacercopiandolibrerasosimilarmanualmente,ylas
rutaspuedenserdistintasentrelasdistribuciones)ynopodemosconseguirunpaqueteSlackwarey
ademsnonosapetececompilarlo.
Silascondicionesanterioressecumplen,laordenrpm2tgzfichero.rpmnosgenerarunpaquete
.tgzquepodremosinstalarnormalmenteconlasutilidadesconcidas.
Gestin de dependencias

InternamenteSlackwaresqueconocequepaquetesdependendeculesotros,asquehay
utilidadesquenospermiteninstalarydesinstalargestionandolasdependenciasentrepaquetespara
quenosotrosnosolvidemosdeello.
Sinolamejor,unadelasmejoresesswaret.Parahacerlafuncionar,simplementeinstalaelpaquete
quepuedesdescargartedesdeladireccinanterioryeditaelfichero/etc/swaret.conf
LonicoquehayqueajustarenesteficheroeselnmerodeversindeSlackwarequesetiene,y
luegodescomentar(borrarlos#)delaslneasquecomienzanporROOTquenosinteresen.Estas
lneasrepresentanfuentesdesdelascualessedescargarnlospaquetesquesequieraninstalar(ysus
dependencias).
Acontinuacindeloanteriorsepuedenaadirrepositoriosdepaquetesnooficiales(como
LinuxPackages)mediantelaslneasREPOS_ROOT.Paramsopcionesconsultarloscomentarios
delrestodelfichero.
Parainstalarunpaquete:
# swaret --update
# swaret --install cdrecord

Laprimeralneaactualizaellistadodepaquetesconlosmsrecientesylasegundadescargae
instalaelpaquetecdrecord.Sihayvariasversionesdeestepaquetedisponiblessenospreguntar
unaporunasideseamosonoinstalarla.
Haymuchasmscosasqueestaherramientapuedehacer,haymsinformacinensupginaman.
SlackBuilds y creacin casera de paquetes

Unodelosprincipalesproblemasdeinstalarpaquetesdecdigofuenteesqueenalgunoscasos
puedenoserinmediatasudesinstalacin.Unaposiblesolucinescompilarelpaquetedecdigoya
partirdeestosbinarioscrearunpaqueteSlackware"casero".

Esteprocesoseescapaalniveldelrestodeestecaptuloyvienedetalladoperfectamenteen
LinuxPackages.netenlosdocumentosBuildingPackagesyThePerfectPackage;yhayalgunas
notasenSlackwareLinuxEssentials,librooficial.Alfinallautilidadmakepkg(versupginaman)
seutilizaparacrearelpaquete.
Esmuyhabitualqueesospasossesintenticenenunscriptdeshell(distintoparacadapaquete).Son
loqueseconocencomoSlackBuildsyesdeestemodocomosecreanlospaquetesoficialesde
SlackwareLinux.SepuedenencontraralgunosdeejemploenLinuxPackagesytambinenel
directoriodefuentes("source")delasreleasesdeSlackwareLinux.
Antesdedisponerteacrearteeltuyobuscabiennoseaquealguienhayahechoesetrabajoport(es
bastanteprobable).
Si tenemos Mandrake
Estadistribucintraeconsigounautilidadpropia,urpmi,quesirveparamanejarlasinstalaciones
desoftware.MandrakeguardagransimilitudconRedHat,ydehechoestbasadaenella.As,
urpmieselequivalentealaptgetdeRedHat,ycomoenelcasodeRedHat,urpmiinstala
automticamenteelpaqueteelegidoyresuelvesusdependencias.Adems,siguesiendoposible
instalarelpaqueteseleccionadoysusdependenciasamanoconlautilidadrpmyaqueMandrakela
traedeserie.
Instalando RPMs con rpm

AqunosencontramosenunasituacinexctamenteigualaladeRedHat.Parainstalaryactualizar
paquetes,podemosusar:
# rpm -ivh mutt-1.4.1-1.i386.rpm
# rpm -Uvh mutt-1.5.1-1.i386.rpm

Instalaelpaquetemutt1.4.1.ParaquefuncionetienesquetenerelRPMenelmismo
directorioenelqueseejecutaelcomando.
Encasodequemuttyaestuvierainstaladoenelsistema,lomejorescorrerestecomando
puestoquesemantendrnalgunosficherosdeconfiguracin.Setratadelcomandopara
actualizarsoftware.

ElrpmdeMandrake(ascomoeldeotrasdistros)aceptarexactamentelasmismasopcionesque
estndisponiblesenelrpmdeRedHatLinux.
Instalando RPMs con urpmi

Podremosapreciarlasimilituddefuncionamientoentrelasdistintasutilidades.Elcasodeurpmies
casiidnticoaldeaptget,peroaqulasfuentespredeterminadassonlosCDsdeinstalacin.Los
comandosquepodremosusarson,entreotros:
# urpmi.update -a
# urpmi paquete
# urpmi --auto-select

Estobuscaactualizacionesdentrodelasfuentesdesoftwarequeseencuentrenenunidades
noremovibles.SiademsdelosCDsdefuentesquetraepordefectomandrake,tienealguna

fuentequepuedahabersidoactualizada,esinteresanteejecutarestecomandoantesde
instalarunpaquete.

Esteinstalaunnuevopaquete.urpmibuscarentrelasfuentesdondeconseguirelpaquetey
susdependencias.Sinecesitaconseguiralgnpaquetedeunaunidadremovible,comopuede
serelCDROM,nospedirqueinsertemoseldiscocorrecto.
Estecomandoactualizatodoslospaquetesquehayanuevoslistadosenlasfuentes.

Aadiendo una nueva fuente de software

Amedidaquepasaeltiempo,vansaliendonuevasversionesdepaquetesconstantemente,y
seguramentenosinteresaractualizaralgunospaquetesconcretos,porejemplo,aquellosquems
utilicemos.
ParaelloMandraketieneunaramallamadaendesarrolloqueeslaquecuentaconlasversionesms
nuevasdelospaquetesdisponibles,aunnqueseanmspropensosacontenererroresaltratarsede
unaversindeMandrakeendesarrollo;MandrakeCooker.Mandrakedisponedediferentesmirrors
oservidoresrplica(espejos)quecontienenunalistaactualizadadelospaquetesdeMandrake
Cooker,quenosotrosusaremoscomofuentedesoftware.
Lasintaxisdelcomandoparaaadirunanuevafuentedesoftwareeslasiguiente:
# urpmi.addmedia [opciones] <nombre> <direccin> [with hdlist.cz]

Novamosaentrarenqueopcionesselepuedendarcomoargumentoalcomandourpmi.addmedia
puessesalefueradecontexto.Elnombreescomollamaremosaestanuevafuentedesoftware,yla
direccinesellugardondeseencuentralocalizadalamisma.Opcionalmente,podemosindicar
explcitamentecualeselficheroquecontienelalistadelospaquetesquesehallandentrodel
repositoriodesoftware.
Elficherohdlist.czespordefectoelqueconitenelalistadepaquetesdelrepositorio,pero
normalmenteexisteunalistadeuntamaoincreiblementemenorquenossirveparaelmismofin
peroquenosahorrartiempodedescargasilafuentedesoftwareseencuentraenInternet,yesun
archivonormalmentellamadosynthesis.hdlist.cz.
Contodo,elcomandoparaaadirunanuevafuentedesoftwaremandrakecookerpodraserel
siguiente,cambiandosiquiereselservidorespejoporelqueprefieras:
# urpmi.addmedia ftp-cooker
ftp://ftp.ciril.fr/pub/linux/mandrake-devel/cooker/cooker/Mandrake/RPMS with
synthesis.hdlist.cz

Creando nuestro propio repositorio de software

PosiblementenecesitemosdescargareinstalarnospaquetesRPMquenisiquieraseencuentren
dentrodelrepositoriodesoftwaredeMandrakeCooker.Paraesohayunasolucin:aadiruna
nuevafuentedesoftwarelocalizadaenundirectoriodenuestrodiscoduro,queesdondemeteremos
todosaquellospaquetesquenosdescarguemos.
Deestamaneraluegopodremosmanejarestospaquetesmedianteurpmi.

Puesbien,lospasosparacrearnuestrorepositoriodesoftwaresonlossiguientes:
# mkdir -p /usr/local/repositorio
# cd /usr/local/repositorio
# wget -c http://belnet.dl.sourceforge.net/sourceforge/gaim/gaim-0.661mdk9.1.i586.rpm
# genhdlist .
# urpmi.addmedia repositorio_local file://usr/local/repositorio with
synthesis.hdlist.cz
# urpmi gaim

Cremoseldirectoriodondesesituarelrepositoriodesoftwareynossituamosdentrodel.
Naturalmentesiyatenemosundirectorioparaelrepositoriononecesitamoscrearlo,perosi
entrardentrodel.
ParaseguirnecesitamosteneralgnpaqueteRPMdentrodelrepositoriodesoftware,asque
optamosporbajarnoselpaquetegaim(paralamensajerainstantnea),peropuedesometer
paquetesqueyatienesbajadosenotrolugar,ooptarpordescargarotro(s)paquetes(s)de
softwareenformatoRPM,esos.
Estepasoesmuyimportante,yaqueaqucreamoslalistadepaquetesqueurpminecesita
parapoderusaresterepositoriocomofuentedesoftware.
Hasdesaberquesicambiasalgodentrodelrepositorio(aades,borrasoactualizasun
paquete)siquieresqueurpmitengasubasededatosdepaquetesactualizadahasdevolvera
ejecutarestecomandodentrodeldirectoriodelrepositorio.

Conestecomandodejamoslistoyenfuncionamientonuestraflamanteycompletafuentede
softwarealalistadefuentesdeMandrake.
Finalmentepodemoscomprobarquelospaquetesquetenemosenelrepositoriosonvisibles
einstalablesmedianteurpmi,enhorabuena!

Si tenemos Gentoo
Instalando ebuilds del portage

Sitelashasarregladoparainstalarestadistribucin,esmsqueprobablequeyasepascomo
instalarydesinstalarsoftware,perovamosadescribirlosuperficialmente.
PodramosdefinirportagecomoelrbololistadepaquetesdisponiblesparaGentooLinux;loque
msomenosequivaldraalalistadepaqueteslocalquenombrbamosparaotrasdistribuciones.Si
quieresinstalarelltimosoftware,tendrsqueactualizarestalista:
# emerge sync

emergeeslaherramientaqueutilizaremosprincipalmenteparainstalarsoftwareenGentoo.Puedes
leersupginamanparamsdetallesdelosexplicadosaqu.Trasintroducirestecomandose
descargarlanuevalistadeebuilds.
Paraactualizartodoslospaquetesquetengannuevasversiones,tenemos:

# emerge -up system


# emerge -u system

Laprimeralneamostrarlospaquetesqueseactualizaran,ylasegundalosbajaraylosinstalara.
Siqueremosinstalarunpaquetequeestenelrboldeebuilds(portage).Instalaremoselprograma
con:
# emerge paquete

Exactamenteigualqueocurraconapt,emergebajar,compilar(ensucaso)einstalarlas
dependenciasdelpaqueteyluegoelpaquete.Siqueremosverculessonlasdependenciasdeun
determinadopaquete,podemosusarlaopcinp:
# emerge -p paquete

Podemosbuscarpaquetesporpalabrasclaveconlaopcins:
# emerge -s palabraclave

Unebuildesunodelosmetapaquetesqueinstalamosconemerge.Generalmenteelsoftwareser
compiladoennuestramquina,loqueimplicaunagrandiferenciaconlossistemasdepaquetes
descritosanteriormente;yesqueunpaquetepuedesercompiladoconsoporteosinsoportepara
otrosoftwaredistinto.Compilarloconsoporteparaesteotrosoftware,daralpaquete
funcionalidadesextra.Lamayoradelasvecesnosinteresaractivarelsoportedeunpaquetepara
elmayornmerodeprogramasquetengamosinstalados.Aquentranenjuegodoselementosmuy
importantesdelsistemadepaquetesdeGentoo:elfichero/etc/make.confylavariableUSE,
definidaenestemismofichero.Estavariablecontendrlospaquetesparalosquequeremosquese
habilitesoportecuandocompilemosotros.Haymultituddedocumentosquedescribentodoestoen
lawebdedocumentacindeGentooLinux.
Porltimo,podemosactualizarunsolopaquete(ysusdependenciasmedianteemergeupaquete,
dondepaqueteessimplementeelnombredelpaquetesinversionesniextensiones.
Instalando ebuilds no oficiales

SiloquequeremosesinstalarunpaquetequenoestenelarboldeGentoo(portage),loprimero
quetendremosquehaceresajustarlavariablePORTDIR_OVERLAYa/usr/local/portage.
Paraestotendremosqueeditarelfichero/etc/make.conf.
UnavezhemosajustadolavariablePORTDIR_OVERLAY,creamoseldirectorio,lacategoray
corremosunoscomandosquesonnecesariosparaevitarinstalarprogramastroyanizados.Sesupone
quequeremosinstalarssmtpqueestenlacategoranetmail.
#
#
#
#
#
#
#

mkdir -p /usr/local/portage
cd /usr/local/portage
mkdir -p net-mail/ssmtp/files
cd net-mail/ssmtp
cp /donde/este/ssmtp-2.60.3.ebuild ./
ebuild ssmtp-2.60.3.ebuild digest
ACCEPT_KEYWORDS="~x86" emerge ssmtp

Creamoseldirectoriodondepondremoslosebuildsycambiamosall
Creamoslacategorayeldirectoriodelpaqueteycambiamosaesteltimo.Adems
copiamosallelebuild.
Estepasoesmuyimportante,secreanunosficherosconhashesmd5paraevitarque
instalemosprogramastroyanizadosycosasas.
Conestecomandofinalmenteportageinstalaelpaqueteencuestin.

Caso especial, alien


Hayocasionesenqueunpaquetedesoftwarenoestdisponibleparaelsistemadepaqueterade
nuestradistribucin.Enestoscasoslaalternativaausartienenombrepropioysellamaalien.Alien
esunprogramaquetransformalospaquetesdeunsistemaaotro.
ComoejemplogeneraremosunRPMapartirdeunDEB
# alien --to-rpm mutt-1.5.4.deb

Opcionalmenteselepuedepasarelflagiparaquealieninstaleelpaquetegenerado
automticamente.
Alienseencuentraen:http://kitenet.net/programs/alien/

Fuentes
Encasodequevayamosacompilarunprogramapornuestracuentalomejoresqueleamoslos
ficherosdeayudaREADMEeINSTALLdelpaquete.Paradescomprimirloharemos(suponiendoel
archivodefuentesdescargadoeneldirectorioactual):
# tar zxf paquete-version.tar.gz

Sielpaqueteesun.tar.bz2haremos:
# tar jxf paquete-version.tar.bz2

Lospasos"genricos"son:
# ./configure
# make
# make install

Perocomolascosaspuedencambiarentreunospaquetesyotroslomejorquepodemoshaceres
leernoslosficherosdedocumentacinqueacompaenadichoprograma.

Nota
Paramsinformacinacercadequesunfichero.tar.gz,.tar.bz2y
cmotrabajarconellos,seexplicandetalladamenteenCaptulo

12,Utilidades
decompresinyempaquetadodeficherosydirectorios..

Desinstalando lo instalado
Binarios
Enlasdiferentessubseccionespondremoselcomandogenricoquehayqueejecutarsiqueremos
desinstalarunpaquetequeyaestinstalado.Avecessenosavisarqueotrospaquetesdependende
elpaquetequequeremosquitar;enesecaso,lomssencilloesquitarestospaquetesprimeroy
despusdesinstalarelquequeramosquitar.
RPMs
# rpm -evh paquete

EncasodeusaraptgetparaRPMstambiendisponemosdelcomando:
# apt-get remove paquete

DEBs
# apt-get remove paquete

TGZs
# removepkg paquete

EBUILDs
# emerge -C paquete

Fuentes
Eneldirectoriodondesedescomprimieronlasfuentesejecutamos:
# make uninstall

Utilidades Grficas
Enelcasodelasdistribucionesqueusanpaquetesbinarios,podemosmuchasvecesencontraruna
utilidadgrficaparainstalarydesinstalarpaquetesenlosmensdenuestrosescritorios.Parapoder
usarestasaplicaciones(quevaranennombreyfuncionamientoparacadadistribucinoversinde
lamisma)senospedirlacontraseaderoot.Estetipodeaplicacionespuedesernostilen
nuestrasprimerasetapasconLinuxsinecesitamosinstalarunpaqueteynotenemostiempode
mirarlasopciones.SiquieresaprenderausarLinux,estetipodeaplicacionessimplementesernun
recursodeusoespontneo.Lomejoresfamiliarizarseconlasutilidadescomentadas.

Consideraciones sobre seguridad


VenimosaprendiendoqueLinuxesunsistemasegurodadoqueesmultiusuario,yporesolos
usuariosnoprivilegiados(usuariosnormales)nopuedendaarlamquina.Aunquediscutiremosel
temadelaseguridadampliamenteenseccionesposteriores,dadoloanteriornoesposiblequeun
usuarionormalpuedainstalarunvirus(programadaino)ennuestramquina.
Hastaaqutodobien,perohayquedarsecuentadequeparainstalarsoftwareenlamquina
debemosserroot.Estoquieredecirqueinstalemoselpaquetedesoftwarequeinstalemos,nosenos
impondrningunarestriccin.Elnicoproblemaestenquealgnpaquetedesoftwareque
queramosinstalarpuedecontenervirusoprogramasespa.
Culeslasolucinaesteproblema?LanicasolucinaesteproblemaesinstalarSIEMPRE
SOFTWAREDESITIOSOFICIALESOCONFIABLES.Deestaformasabemosqueelsoftware
queinstalamosesseguro.
Quizsunosepuedapreguntar...nosolucionanlosantivirusesteproblema?LarespuestaesNO.
ExistenantivirusparaLinuxperosufuncionalidadnosueleseresta.Sediscutirmsadelantesobre
losantivirus.

Sistemas de paquetes y manejo de libreras


Laslibrerassonpartesdecdigousadospormuchosprogramasdiferentes.Poresto,muchasveces
algunospaquetesrequerirnotrospaquetesdeltipolib*.Todoslosficherosdelibrerasquese
instalanenelsistemacomienzansunombreporlibdebidoaunantiguoconvenioUNIX.
Lossistemasdepaquetesbinariosdelasdistribuciones(RPMyDEB)hacenunadistincinconlas
libreras.Podramosdecirqueunmismoconjuntodelibreras,lodividenendospaquetes,por
ejemplo,libncursesylibncurses-devel(olibncurses-devparaDebian).Para
instalarsoftwaremediantepaquetesquenecesitenestalibrera,bastaraconinstalargeneralmente
sloelprimerpaquete.Elsegundopaquete(devenDEBsodevelenRPMs),seconocecomo
ficherosdedesarrollo(development),yesnecesarioinstalarlosi,porejemplo,vamosacompilar
desdeelcdigofuenteunpaquetequenecesitelibncurses.As,esperfectamenteposibleque
haciendoun./configureparainstalardesdelasfuentessenosavisedequenosfaltalibncursessi
solamentetenemoselprimerpaqueteinstalado.

ldconfig y ms sobre libreras


Laslibrerascompiladas(yaencdigodemquina),estnen/usr/libsiseinstalarondesde
paquetesdeladistribucin,yen/usr/local/libsiseinstalarondesdefuentes,oun
subdirectoriodeestosdos,(aunquecon./configurehelpdescurbriremosopcionesquenos
permitenespecificartambindndequeremosqueseinstalentantolosprogramascomolas
libreras).SunombresueleserlibNOMBRE.so,obienlibNOMBRE.so.VERSION.La
extensin.soessimplementeunconvenioyesabreviaturadeSharedObject(ObjetoCompartido,
yasabemosporqu).
EnlossistemasLinux,lautilidadencargadademanejarlainstalacindelaslibrerasyproveeral
restodeprogramasinformacinsobresulocalizacinenelsistemadeficherosesldconfig.Esta
utilidadtieneunficherodeconfiguracin,/etc/ld.so.conf,dondeselistanlosdirectorios
quecontienenlibreras,porejemplo:
# cat /etc/ld.so.conf
/usr/kerberos/lib
/usr/X11R6/lib

/usr/lib/qt-3.1/lib
/usr/lib/mysql
/usr/lib/kde3
/usr/local/lib
/usr/lib/wine
/usr/lib

Aunquemuchasveceslainstalacinloharpornosotros,cuandoinstalemosnuevaslibreras
(especialmentedesdecdigofuente),esunabuenacostumbreaadireldirectoriodondesehan
copiadolaslibrerasaesteficherodeconfiguracin(sinoestah),ycorrercomorootelcomando
ldconfig.Sinolohacemosas,esposiblequealintentarinstalarotrosprogramasdesdefuentes,se
nosdigaquenopuedeencontrartalocullibrera.

Captulo 9. Otros comandos tiles


Tabladecontenidos
Introduccin
ComandosrelacionadosconlaE/S
heady
tail
Elcomandocut
AlgunosotroscomandosrelacionadosconlaE/S
Comandosrelacionadosconlamemoriayeldisco
df
GestindememoriaRAMenLinuxyfree
du,usodelespaciodedisco
mc
file
Comandostilesvarios
gcc,elcompiladordeC
uname
which
touch
Comandosdeinformacinsobreusuarios,tiempoyfecha
Buscararchivos:find
y
locate
Usodefind
Usodelocate
manylaspginasdelmanual
Apagaryreiniciarlamquinadesdeelshell

Introduccin
Yahemosvistoalgunoscomandostilesenloscaptulosanteriores.Comonuncadejaremosde
aprendercomandosnuevos,aquvanotroscuantosmsqueconvieneconocer.Ladescripcinque
sehaceaqudeellosesbastantebsica,perosiemprepuedesrecurrirasupginaman.Adems,en
estecaptuloseexplicancosasinteresantescomolagestindememoriaenLinux.

Comandos relacionados con la E/S


Deestoscomandoshemosconocidoyaunoscuantosenseccionesanteriores:echo,cat,more,less
ylasredireccionesmscomunes.Ahoraveremosalgunosms:

head y tail
headsirveparamostrar(oredirigiraotraparte)elprincipiodeunficheroodelainformacin
provenientedeunpipeotubera.tailtieneexactamenteelmismocometido,conladiferenciade
queesteltimo,loquemuestraeselfinal.Ejemplos:
$
$
$
$

head
head
tail
tail

mifichero
-n 30 mifichero | less
mifichero
-n 35 mifichero > final_de_mifichero

Mostrarporpantallalasprimeras10lneasdemifichero
Laopcin-nseusaparaindicaracontinuacinelnmerodelneasquesedebenmostrar
desdeelprincipiodelfichero(ocomoenestecaso,enviaraless).
Cumpleexactamentelamismafuncinquehead,adiferenciadequemostrarlas10ltimas
lneasdelfichero.
Escribirlas35ltimaslneasdemificheroenelficherofinal_de_mi_fichero.

Ademsdeleerdesdeunfichero,estosdoscomandospuedenleerdesdestdin,asquepodemos
"conectarlos"apipesotuberas.Supongamosqueestamosinstalandounprogramadesdeun
paquetedecdigofuente,yqueejecutamosmake.Imaginemosqueporcualquiermotivo,make
produjeseunalargusimasalidadeerrores,tantosquenopudisemosverculeselprimerodeellos.
Peronosotrosnecesitamossaberculfueelprimererroremitidoparapodersolucionarelproblema.
Asquepodramoshacer:
$ make 2>/dev/stdout 1>/dev/null | head -n 20

Atencinalaprimerapartedelcomando.Recordandoquelasredireccionesdeestetiposeprocesan
dederechaaizquierda(lasde1>...2>...),loquehacemosprimeroesdespreciarlasalidanormal,y
posteriormente,enviarstderr(lasalidaconerrores)alasalidaestndar,queconelpipese
convierteenlaentradaestndardelcomandohead,queleeautomticamentedeella,obteniendoas
nuestroresultado.(Notaquesihubiramospuestolasredireccionescambiadasdesitio,no
habramosobtenidosalidaalguna.)
Unaopcinrealmentetildetaileslaopcin-f.Conella,tailescribirelfinaldelficheroen
stdoutyademspermaneceractivo.Sialgoseaadealficherodesdeotrositiotambinlo
mostrar.Porejemplo,abreunaterminalyescribe:
$ touch fichero
$ for i in a b c d e f; do echo $i >> fichero; done
$ tail -f fichero
a
b
c

d
e
f

Mantnestaterminalabiertaypsateaotraterminal.Enestaotraescribe:
$ echo "hoooooola" >> fichero

Vuelveahoraalaprimeraterminalyobservacomohoooooolatambinhasidosacadopor
pantallaportailf.Estaopcinesespecialmentetilparaexaminarficherosdelog(registrode
actividad)delsistemamientrashacemoscambiosenlcomoveremosensumomento.

El comando cut
cuttienecomousoprincipalmostrarunacolumnadeunasalidadeterminada.Laopcin-dva
seguidadeldelimitadordeloscamposylaopcin-fvaseguidadelnmerodecampoamostrar.
Porejemplo:
$ cat /etc/passwd | head
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:100:sync:/bin:/bin/sync
games:x:5:100:games:/usr/games:/bin/sh
man:x:6:100:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
$ cat /etc/passwd | head | cut -d ":" -f 1,7
root:/bin/bash
daemon:/bin/sh
bin:/bin/sh
sys:/bin/sh
sync:/bin/sync
games:/bin/sh
man:/bin/sh
lp:/bin/sh
mail:/bin/sh
news:/bin/sh
$ cat /etc/passwd | head | cut -d ":" -f 1
root
daemon
bin
sys
sync
games
man
lp
mail
news

El"delimitador"pordefectoeseltabulador,nosotroslocambiamosconlaopcin-d.Tiene
algunasotrasopcionestiles,consultasupginaman.

Algunos otros comandos relacionados con la E/S


Elusoqueharsdeestoscomandossermsbienespordico,porloquesimplementeloscitamos.
Ensusrespectivaspginasmanencontrarsopcionesespecficasparaellos.

wc(WordCount,contadordepalabras).Muestraelnmerodepalabras,bytesycaracteres
quecontieneunficherodeterminado.

strings.Muestraporpantallaloscaracteres"imprimibles"delosficherosbinarios.

tac.Haceexactamentelomismoquecatperomuestralaslneasenordencontrario(desdela
ltimahastalaprimera).

sort.Muestraelcontenidodeunfichero,peromostrandosuslneasenordenalfabtico.

Comandos relacionados con la memoria y el


disco
Esposiblequenoseentiendaalgunacosa;msadelanteenelcaptulodedispositivossedespejarn
todaslasdudas.

df
df(DiskFree)nosinformadelespaciodisponibledelasunidadesdedisco(localesodered)que
tengamosmontadas.
# df
S.ficheros
/dev/hdd1
/dev/hda2
none

1K-blocks
6040288
11719052
128008

Used Available Use% Montado en


3247924
2485528 57% /
3526412
8192640 31% /home
0
128008
0% /dev/shm

Unaopcintildelaquedisponeesm,quemostrarelespacioenMegaBytes.

Gestin de memoria RAM en Linux y free


Enprimerlugar,entendamoscmosegestionalamemoriafsicadelsistemaenLinux.Elkernel
tiendeatomar,primeramente,lamemoriaquenecesitanlosprocesosquecorre.Conformeel
sistemaestenmarchamstiempo,elkerneltomaprcticamentelatotalidaddelamemoriafsica
existente,dejandoslamenteunoscuantosMBdememoriafsicamentelibres.Muchasvecesesto
llevaalosprincipiantesenLinuxaconfusin,llegandoacreerquelagestindelamemoriaque
haceLinuxnoeseficiente.
YparaquusaesamemoriarestanteLinux?Pueslausacomobuffers,estoes,guardadatospara
unmsrpidoaccesoaldiscoduro,datosdeprogramasqueseabrieron,porsisevuelvenaabrir,
queseinviertamuchomenostiempoenello,etc.Endefinitiva,aprovechalamemoriafsicamente
libreparaagilizartareasbsicas.Porotroladoestoesbastntelgico...paraqutesirveteneruna
grancantidaddememoriaRAMfsicalibre?Ysilausamosparahacerqueelsistemavayams
rpido?Muchomejor;),noteparece?
Silacargadetareas(procesos)queelsistematienequesoportarlocargayestosprocesos(o
programasejecutndose)necesitanestamemoriaqueseestusandocomobuffers,Linuxborra
estosbuffersdelamemoriaylaasignaalasnuevastareasquelanecesiten.

Endefinitiva,cmopodemossaberlamemoriaquetenemoslibreyloqueocupacadacosa
(procesosporunladoybuffersporotro)?Larespuestalatenemosenelcomandofree(lasalidapor
defectoesenKBs).
# free
total
Mem:
256016
-/+ buffers/cache:
Swap:
409648

used
251304
61552
2964

free
4712
194464
406684

shared
0

buffers
12236

cached
177516

Enelequipodeesteejemplo,hay256MBdeRAMfsicainstalada.Deellos,solamente4MB
estnlibres(deloquededucimosquelamquinallevatiempoencendidayquesehanescrito
buffersenpartedelaRAM).Enlalnea-/+ buffers/cachetenemosenusedlacantidadde
memoriaestimadaquelosprocesosdelsistemaestnusando,yenfree,lasumadelamemoria
usadaparabuffersycachmslafsicamentelibre.As,losprocesossloestnnecesitando60MB
deRAM,yelrestodememoriausadaestsimplementeagilizandoelsistema.
Ahoranosfijamosenlaltimalnea.AhtenemoselusodelaparticinSWAPdeintercambiode
datos.Estaesunabuenamedidaparasaberlo"cargado"queestnuestrosistema.Enestecasohay
escritosmenosde3MBenlamemoriaSWAP,loqueponedemanifiestoquelamquinaanda
holgada.Mstarde,enelcaptulodeprocesosdescubriremosotrosdatosquenospermitirn
hacernosunaideadelacargadelsistema.

du, uso del espacio de disco


Elcomandodunosindicaelespacioqueocupaundirectoriodelsistemadeficherosytodoloque
tienedebajodel.
Estanfcildeusarcomotil:dudirectorio/.
Conlpodemoscomprobardndeseacumulalamayorcantidaddeespacioendiscodenuestro
sistema.

mc
Esteesunprogramaqueofreceunainterfazdeusuariobasadaentextobastantecmoda,
generalmenteparahaceroperacionesconficheros(especialmenterplicasdeundirectorioytodolo
quehayadebajodelocopiasgrandesdeunagranpartedelsistemadeficheros),oteneruna"vista
depjaro"delsistemadeficheros.
Suusoesintiutivo(ytodavamssencillositenemoshabilitadoslosserviciosderatnenla
consola),yporellonomerecemuchamsexplicacin.Recuerdaestecomandoporquenossertil
enelfuturo.

file
Estecomandonosindicarqutipodedatoscontieneelficheroquelepasemoscomoprimer
argumento.

Comandos tiles varios


Algunosotroscomandostilesvariosquenoencajanenlascategorasdearriba.Losquenoqueden

descritosenestaseccin,esquevendrnexplicadoscondetalleenalgunaseccinposterior.

gcc, el compilador de C
Probablementeprofundicemosunpocomsenlprximamente,peroporsiquiereshaceralguna
cosaenCynosabestodavaculeselcompiladorenLinux,gcceselGNUCCompiler.Sinolo
tienes,necesitarsinstalarlodesdelosdiscosdetudistribucin.LamayoradelossistemasUNIX
respondernalcomandocccomoCCompiler,yejectuarnelcompiladorquehayainstaladoenel
sistema,enestecaso,gcc.
ParacrearunejecutabledesdelosficherosdecdigoC,bastaconquehagamos:
$ gcc fichero1.c fichero2.c [...] -o miejecutable

uname
Indicanombreyversindelsistemaoperativo.Usadoconlaopcin-amuestratodala
informacin.
$ uname -a
Linux hostname 2.4.21 #1 SMP Thu Sep 4 20:50:32 CEST 2003 i686 unknown

which
Lepasamoscomoprimerargumentouncomando,ynosdir,delosdirectoriosqueexistenen
$PATH,enculdeellosest,porejemplo:
$ which ls
/bin/ls

touch
touchcambialafechadecreacinodemodificacindeunarchivo.Sinoexiste,locreavaco.Lo
msconvenienteesleersupginadelmanual:mantouch

Comandos de informacin sobre usuarios, tiempo y fecha


Loscomandoswywhonosinformarndelosusuariosqueactualmenteestnusandolamquina,y
algunosdatosdeltiempoquellevanusndolaolosprocesosqueestnejecutando.
$ w
19:05:51 up 50 min, 4 users,
USER
TTY
FROM
user1 :0
user2 pts/0
:0.0
user2 pts/1
:0.0
user
pts/2
:0.0
$ who
ricardo :0
user1 pts/0
user2 pts/1
user2 pts/2

Sep
Sep 5
Sep 5
Sep 5

load average: 0.00, 0.02, 0.06


LOGIN@
IDLE
JCPU
PCPU WHAT
18:16
?xdm?
0.00s
?
18:18
0.00s 0.09s 0.00s w
18:31
4.00s 4.08s 4.06s vim chapter09.xml
18:33
32:03
6.90s 0.02s -bash

5 18:16
18:18 (:0.0)
18:31 (:0.0)
18:33 (:0.0)

Elcomandouptimenosinformardeltiempoquellevalamquinaencendida,ademsdealgunos
otrosdatos:
$ uptime
19:09:19 up 53 min,

4 users,

load average: 0.00, 0.00, 0.04

Elcomandodatemostrarlahoradelsistema,yadems,nospermitecambiarlaconlaopcin-s.
Uncomandoespecialmenteinteresanteesntpdate(probablementetengasqueinstalarlo).
SincronizalahoradelsistemaconunservidordehoradelprotocoloNTP.Haymuchainformacin
delprotocoloNTPdisponibleenlared.Loquenosinteresasaberesquehayunaseriedeservidores
queactualizansurelojinternomediantedispositivosdeGPS,asnosufrendesviacionesdetiempo.
nosotrospodemosbeneficiarnosdeello,conelcomandontpdateSERVIDORlahoradenuestro
sistemaseactualizarconladeSERVIDOR.EnEspaahayunoscuantos,comoejemplos:
hora.uv.eshora.rediris.esLgicamente,parapoderejecutarestecomandoypoder
cambiarlahoradelsistemadeberemosentrarcomoroot.Mstardeaprenderemosahacerque
estecomandoseejecuteencadainiciooperidicamente.
Elcomandowhoamimuestranuestronombredeusuario.

Buscar archivos: find y locate


EnLinuxtenemosdosopcionessiqueremosbuscararchivosennuestrosdiscos.Diferenenqueson
conceptostotalmentedistintosqueasuvezcumplennecesidadesdistintas.Enprimerlugar,findes
elcomandoqueseusaparabuscarnormalmenteenelsistemadeficheros,yloexaminacadavez
quequeremoshacerunabsqueda.
Elcomandolocatesecomplementaconelcomandoupdatedb.Esteltimocomando,cuandolo
ejecutamos(sinopcionesniargumentos),creaunaespeciede"basededatos"detodoslosficheros
ydirectoriosdelsistema.Deestemodo,cuandoqueremosbuscaralgoconlocate,simplementeeste
programabuscaenestabasededatos,locualesmuchomsrpidoquebuscarenelsistemade
archivosdirectamente.Obvimaneteestotieneuninconveniente;sinoactualizamosestabasede
datosconupdatedb,lainformacinquenosdarlocatenosercierta.

Uso de find
Elusomscomndeestecomandoeselsiguiente:
find <directorio> -name <nombre>

Elprimerargumento(directorio)eseldirectoriodesdeelquequeremosquesebusque(labsqueda
esrecursivapordefecto,buscartambinentodoslosdirectoriosquehayapordebajo),laopcin(
name)eselmododebsqueda(enestecasopornombre),yeltercerargumento(enestecaso
nombre)sonloscriteriosdebsqueda.Algunosejemplos:
# find /usr -name mozilla
/usr/bin/mozilla
/usr/lib/mozilla
# find /usr -name '*.so'
[... casi todas las libreras del sistema ...]

# find / -name
[... todos los
# find / -size
[... todos los

'*gtk*'
ficheros cuyo nombre contenga "gtk"...]
+3000k
ficheros de tamao >= 3000 KB ...]

Notaqueparapoderusarloswildcardsqueconocemos,simplementedebesencerrarelcriterioentre
comillassimples.Sepuedebuscarporcriteriosdemuchsimostipos,paramsdetalles,mirala
pginaman.Recuerdaquepuedesdetenerlabsquedaigualquedetenemoscualquierotrocomando
conControl+C,yredirigirlasalidacomotambinhemosaprendido;findpuedesermuytilentus
scripts.
Cuandosiendousuariosnormalesbusquemosficherosfueradenuestrodirectoriopersonal,senos
mostrarnalgunosmensajesdeerrorporquehabrdirectoriosalosquenotendremospermisopara
entrarabuscar(p.e./root).Estosmensajesdeerrornosdespistarnalahoradeinterpretarla
salida,asquepodemosenviarstderra/dev/null(yasabes,find...2>/dev/null).

Uso de locate
Enprimerlugar,ejecutaremoselcomandoupdatedbparaactualizarlabasededatos.Esunabuena
ideaponerestecomandoencroncomoveremosposteriormenteparaqueseejecute
automticamentetodoslosdasaunahoraenlaqueelsistemanotengamuchacarga.Estonos
permitiragilizarnuestrasbsquedas.
Acontinuacin,elusodelocatenoesnadadelotromundo.Adems,esmuchomenosflexibleque
find(locualesperfectamentecomprensibleunavezquenoshanexplicadosuformadefuncionar).
locateslosirveparabuscarficherospornombre,yentodoelsistemadearchivos.Ejemplos:
# locate so
[... muuucha salida ...]
# locate '*.so'
[... las libreras del sistema ...]

Lasimilitudconfindesqueloscriteriosconwildcardsdebenserentrecomilladosconcomillas
simples.Lasdiferenciasson:nonospermiteespecificardirectorio,buscaentodalarutaalfichero
(nosloenelnombredelfichero),yadems,silepasamosuncriteriosinwildcards,devolver
todoslosnombresdeficherocuyarutacompletacontentaesecriterio(nteseenelprimercomando
deejemplo),adiferenciadefindqueslodevolveralosficherosconesenombreexacto.

man y las pginas del manual


Yavenimosusandoestatilfuncionalidadalgntiempo.Esmuytildisponerdedocumentacinen
formatoelectrnicoenelsistema,deestaformanohayquememorizarlasopcionesdeuncomando
dememoria.
Existenvariasseccionesenelmanualdelsistema,cadaunadeellasdestinadaauntipode
comandos.Tambin,haypginasquedocumentanfuncionesdelenguajesdeprogramacinsiesta
documentacinestinstalada.Puedesverculessonestascategorasconmanman;ademsahhay
muchainformacininteresante.
Puedeocurrirqueexistandospginasdelmanualquesellamenigualyqueestnensecciones
distintas.manslomostrarlaprimeradeellas,asquesiqueremosunaespecfica,deberamos
indicarsuseccin(manSECCIONcomando).

OtroaspectointeresanteyacomentadoesdefinirlavariabledesistemaPAGERcomo
/usr/bin/lessparapoderrecorrerlaspginasdelmanualcontodaslasfuncionesinteresantes
deless.Viendolaspginasdelmanualconlesspodemosusartodassustilesfuncionalidades,ya
descritasenlaComandostilesdeless.
AlgunasdistribucionesdeLinuxnotraeninstaladaslaspginasdelmanualencastellanopor
defecto,peropuedenteneresepaqueteenlosdiscosdeinstalacinoenInternet,llamado
generalmentemanpages-esonombressimilares.

Apagar y reiniciar la mquina desde el shell


ElcomandopoweroffseencuentraenlamayoradelasdistribucionesLinuxysirveparaapagarla
mquina.Generalmenteelcomandohaltproduceelmismoefecto.rebootreinicialamquina.En
algunasdistribuciones,soloroottienepermisoparausarestoscomandospordefecto,asquesise
quierequeusuariosnoprivilegiadospuedanapagaroreiniciarelsistema,sedeberecurirasudoo
hacerSUIDestosarchivos,yavistoenCaptulo

5,UsuariosyGrupos.Permisos

Captulo 10. Personalizacin del shell BASH


Tabladecontenidos
Introduccin
Variablesinteresantes.PersonalizacindelPrompt.
Alias
Ficherosasociados

Introduccin
Todosloscaptuloshastaahora,hemosintentadodarunpuntodevistageneralparaLinuxy
tambinvlidoparamuchossistemasdetipoUnixy/oqueconformenconPOSIX.Paraello
decidimoshacerlobasndonossoloenlaconsoladeLinux.Queremoshacerleveralosusuariosque
laconsoladeLinuxesMUYMUYpotente,yquedesdeellapodemoshacer(casi)cualquiercosa
quesenosocurraonecesitemos,soloserequiereunabaseslida.
HastaahoraslohemoshabladodelshellBash,peronisiquierahemosprofundizadoenella.En
estecaptuloseintentarndarunasnocionesslidasparapersonalizarelshellBashqueesel
estndarenmuchossiestemasUnixyencasitodaslasdistribucionesdeLinux.
BASHesunaaplicacinUnix,ycomomuchasdeestasaplicaciones,sunombrenoesmsqueun
acrnimo,yenestecaso,BASHsignificaBourneAgainSHell.SetratadeunashelldeLinux
compatibleconPOSIXqueimplementapartedeloscomandosdeCshellytodalasintaxisde
BourneSHell.
Como(casi)todaaplicacin,tieneunosficherosde"configuracin",yciertas"funcionalidades"que
noestnclarasasimplevista.Mostraralgunasdeestascosaseselobjetivodeestecaptulo.

Variables interesantes. Personalizacin del


Prompt.
Comosehacomentadoenelcaptulo7(Captulo

7,Introduccinalshellscripting)enBASH
podemosutilizarvariablesque,normalmente,serntodasenmaysculas.Puesexistenciertas

variablesqueelshellbashutilizaparasufuncionamientotantointernocomodecaraalusuario.
Existentantovariablesdelectura,comovariablesdelecturaescritura.Lasvariablesdelectura
"simplemente"nosdarninformacinsobreelestadodelshellodelsistema,sinembargo,lasde
lecturaescrituranosvanapermitircambiarelcomportamientodebash
Elshellbash(comocasitodoslosshells)cuandorecibeunaorden(porejemplo,uncomando
pasadoporteclado)loprimeroquehaceesversilaordenestdentrodesusrdenesinternas(como
return,exit...),luegomiraenlosalias,ydespusbuscaelcomandoenel$PATH(Captulo

3,
TerminaloSHELL).Lasrdenes(ocomandos)internasseexplicaronenelcaptulo7(Captulo

7,
Introduccinalshellscripting),loscomandosmscomunessedescribieronenelcaptulo9
(Captulo

9,Otroscomandostiles)yenestecaptulovamosatratarlosalias.
Peroantesdetratarlosalias,vamosadarunavueltaporlasvariablesmsinteresantesdebashypor
susficherosdeconfiguracin.
Lavariablequemsllamalaatencinacualquierusuarioqueestpersonalizndoelshellbashesla
variable$PS1.Estavariabledescribeelpromptquebashmostraralusuarioantesdepedirun
comando:
usuario@host $ echo $PS1
\u@\h \$

Comohedichoantes,lasvariablesqueparaestonosinteresansonperfectamentemodificables,un
ejemplodeestosera:
usuario@host $ PS1="\u@\h: \w \$"
usuario@host: ~ $

Ahoravemoscmohacambiadoelprompt.Comoejemplosdepromptsmselaboradossepueden
probar:
usuario@host $ PS1="{\u@\h[\w] \$::- "
{usuario@host[~] $::- PS1="::\t\n::- \u@\h[\w]\$::- "
::HH:MM:SS
::- usuario@host[~]$::-

Enresumen,podemoshacerquenuestropromptcontengacualquiercaracterquenosotros
queramos,ademsdeinformacintil.Loscaracteresespecialesmsrelevantesquesecambianpor
informacintilalmostrarelpromptson:

\heselnombredehosthastaelprimerpunto.

\Helnombrecompletodelhost.

\nnuevalinea.

\seselnombredelshell,ennuestrocaso,"bash"

\teslahoraenformato24horas.

\ueselnombredeusuarioactual.

\veselnmerodeversindebash.

\weseldirectoriodetrabajoactual.

Dentrodeestavariable,PS1,tambinpodemoshacerquesesustituyalasalidadecualquier

comandoigualquehacemosenlosscripts.PruebaconPS1=$(date).
Podemoshacerquepartesdelpromptaparezcanencolor.Loquequeramosqueaparezcaentre
colores,loprecederemospor\[\033[COLORm\],teniendoencuentaquealfinaldelprompt
debemosreestablecerelcolornulosinoqueremosqueloscomandosqueescribamossalganen
color.Estoloconseguimoscon\[\033[0m\].COLORpuedeserunasecuenciaconformato
A;B,dondeAvale01yBvaledesde30a37.Cadaunadelascombinacionesposiblesresultaen
uncolordistinto.Prubalasparaencontrarelquebusques.Porejemplo:
$ PS1='\[\033[01;32m\]\u@\h \[\033[01;34m\]\W \$ \[\033[00m\]'
usuario@host directorio $ # "usuario@host" saldr en verde y "directorio"
en azul

Tabla10.1.Combinacionesdecoloresenbash
Combinacin
Color
0;30
Negro
0;31
Rojo
0;32
Verde
0;33
Marrn
0;34
Azul
0;35
Prpura
0;36
Cian
0;37
Grisclaro
1;30
Grisoscuro
1;31
Rojoclaro
1;32
Verdeclaro
1;33
Amarillo
1;34
Azulclaro
1;35
Prpuraclaro
1;36
Cianclaro
1;37
Blanco
Coloresdefondo
40
Negro
41
Rojo
42
Verde
43
Marrn
44
Azul
45
Prpura
46
Turquesa
47
Gris
Loscoloresdefondoseusanprecediendoelvalordelcolordelfondoalosyavistosparaelcolorde
lasletras.Porejemplo,\[\033[41;1;33m\]producirtextoamarillosobrefondorojo.Hay
quetenerencuentaque\033y\esonequivalentesypuedenusarseindistintamente.
Ademsestascombinacionesdecolorestambinseusanenotrascosas,comoporejemplola

variabledeentornoLS_COLORSquecontieneconqucolorsemuestracadatipodeelementopor
defecto.
HayalgunasmscombinacionesposiblesconcoloresydemsmodificacionesparalavariablePS1.
UndocumentomuyextensoalrespectoeselBashPromptCOMOquesepuedeencontrarenvarios
sitiosdelared.Deesedocumentoelsiguientescript,quesirveparaverlascombinaciones
disponibles:
#!/bin/bash
#
#
This file echoes a bunch of color codes to the
#
terminal to demonstrate what's available. Each
#
line is the color code of one forground color,
#
out of 17 (default + 16 escapes), followed by a
#
test use of that color on all nine background
#
colors (default + 8 escapes).
#
T='gYw'

# The test text

echo -e "\n
44m

45m

46m

for FGs in '


m' '
1m'
'1;32m' ' 33m'
' 36m' '1;36m'
do
FG=${FGs//
echo -en "

40m
47m";

41m

42m

43m\

' 30m' '1;30m' ' 31m' '1;31m' ' 32m' \


'1;33m' ' 34m' '1;34m' ' 35m' '1;35m' \
' 37m' '1;37m';
/}
$FGs \033[$FG

$T

"

for BG in 40m 41m 42m 43m 44m 45m 46m 47m;


do
echo -en "$EINS \033[$FG\033[$BG $T
done
echo;
echo

\033[0m";

done

LavariablePS2contieneelpromptcomplementario,porejemploelpromptqueaparececuando
escribimosunbucledirectamenteenlaterminal.
LavariablePROMPT_COMANDcontieneelcomandoqueseejecutarcadavezinmediatamente
antesdequebashmuestreelprompt.
LavariablePATHyasecomentconanterioridad.Contieneunalistadedirectoriosseparadospor
":"enlosquesebuscancomandos.Elordendebusquedaeslinealdesdeelprincipio,estoes,sihay
dosprogramasconelmismonombreendirectoriosdistintosyambosestnenelPATH,el
programadeldirectorioqueaparezcaprimeroenlavariableserelqueseejecute.Yavimosque
estosepodacomprobarconwhich<comando>.
LavariableEDITORcontienelarutaaleditorpordefecto.Lousanalgunosprogramasademsde
bash.
Haymuchasvariablesmscuyoconocimientonoesimprescindible.Puedesvertodaslasvariables
deentornoconelcomandoset.Lapginadelmanualdebashlasenumerayademscontiene
muchsimainformacinimportante.Esmuyconvenienteleerla:manbash

Alias
Unaliasnospermitenombrarauncomandocomonosotrosqueramos.Estilparaponer
nombresmscortosacomandoslargosobienparanotenerqueescribirtodaslasopcionesdeun
comandosilasusamossiempre.Porejemplo,laopcin--color=autodelsesmuycomn,as
queesbastantefrecuentehaceralgocomoesto:
$ alias ls='ls --color=auto'

As,cadavezqueescribamoslsenbash,stelointerpretarcomolscolor.Igualquepusimosls
enlaparteizquierdadelaasignacin,podramoshaberpuestocualquierotronombreque
quisisemos,porejemplo:
$ alias listar='ls -l --color=auto'

Ydesdeestoenadelanteusarlistarcomootrocomandocualquiera.Enlosaliascabenincluso
listasdecomandos,porejemplo:
$ alias comandos='comando1 && comando2'

dondecomando1ycomando2soncomandosconsusopcionesyargumentossiaplican.El&&
esloqueseconoceenbashcomounaLISTA.Estoes,seejecutarcomando1ysiterminacon
xito(devuelve0abash)entoncesseejecutarcomando2.Siuncomandoenunalistanotermina
conxito,entoncesnoseejecutarelresto.Sepuedenponermsdedoscomandos,porejemplo:
comando1&&comando2&&comando3
Sienunmomentodeterminadonosinteresaqueunaliasdejedeexistir,usaremosunaliasnombre,
dondenombreeselnombrequedimosalaliasquequeremosquedejedeexistir.
EnlapginadelmanualdebashtambinhayunaseccinsobreAliasyotrasobreListas.

Ficheros asociados
Hemosestadoviendocmopersonalizaralgunosaspectosdebashperosinembargohastaahoralos
perderamosalsalirdelaterminal.Bashleealgunosficherosencadainicio.Enestosficheros
podremoscolocarvariablesyaliasparanotenerquecambiarloscadavez.
Antesnecesitamossaberloqueesunshelldeentradaologinyunshellinteractivo.Unshellde
entradaeselqueobtenemostrashacerloginenelsistemaenlaconsola,yunshellinteractivoesel
queobtenemos,siestamosenmodogrficoyabrimosunxterm,osea,unaventanadeterminal.
Paralosshellsdeentradaodelogin,primeroseleeelfichero/etc/profilequecontiene
definicionesdevariablesyaliascomunesatodoslosusuariosdelsistema.Acontinuacinseleeel
fichero~/.bash_profile,eneldirectoriodecadausuario.Enestefichero,cadausuariodefine
susvarialesyalias,quesobreescribenalosde/etc/profile.
Paralosshellsinteractivos,sloseleeelfichero~/.bashrc,distintoparacadausuario.Puesto
quegeneralmentenosequiereunaconfiguracindistintaenunxtermoenunaterminaldelogin,es
bastantecomnponerlasdefinicionesdevariablesyaliasen~/.bash_profile,yque
~/.bashrcseparezcaa:
if [ -f /etc/profile ]; then
. /etc/profile

fi
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
source ~/.bash_profile

sourceinterpretaelarchivoqueselepasacomoprimerargumentocomordenesdebash.Es
prcticamenteequivalentealpunto.

Captulo 11. Procesos. Seales.


Tabladecontenidos
IntroduccinyConceptosBsicossobreProcesosyTareas
Procesos
Propiedadesdelosprocesos
Mostrandolosprocesosenejecucinysuspropiedades.
TareasdeBash.Programasenprimerysegundoplano.
Seales.
Prioridaddelosprocesos.Elcomandonice

Introduccin y Conceptos Bsicos sobre


Procesos y Tareas
Enelcaptulo5yahicimosunapequeaincursinalusodelosprocesos,peroenesteotrovamosa
hacerunaexplicacinmuchomsextensaquenosservirparamanejarnosentreprocesosytareas.
EnunsistemaLinux,quecomoyasabemosesmultitarea,sepuedenestarejecutandodistintas
accionesalapar,ycadaaccinesunproceso.Explicaremosenestecaptulocomomanejarlos
procesosyaprovecharlaspeculiaridadesdeLinuxenloreferentealacapacidadmultitarea,
activandoprocesosenprimerysengundoplano,mostrandolistasyrbolesdeprocesos,
suspendindolosyluegovolvindolosaactivar,matndolos,haciendoquesiganejecutndoseuna
vezsehallacerradosesinocambiandolaprioridaddelastareas.
Todoloanteriorloiremosdescubriendoensubseccionessucesivas.Demomentonoscentraremos
enverlomsbsico(conceptualmentehablando)deloqueesunproceso.Cuandoejecutamosun
comandoenelshell,susinstruccionessecopianenalgnsitiodelamemoriaRAMdelsistemapara
serejecutadas.Cuandolasinstruccionesyacumplieronsucometido,elprogramaesborradodela
memoriadelsistema,dejndolalibreparaquemsprogramassepuedanejecutaralavez.Cadauno
deestosprogramasquepasanalamemoriadelsistemaysonejecutadosesloqueconocemosconel
nombredePROCESO.Eltiempoqueesteprocesoestuvoenlamemoriadelsistemaejecutndose,
seconocecomoTIEMPODEEJECUCINdeunproceso.
LagestindeprocesosenLinuxnodifieredemasiadodelaquesehaceencualquierotrosistema
UNIX.As,elencargadodeasignarunapartedelamemoriaaunprocesoeselKERNELdeLinux
(partecentraldelSistemaOperativo),quiendecidecuntamemoriadaracadaprocesoycmo
repartirlacapacidaddelmicroprocesadorentrelosprocesosqueseestnejecutando.Unosprocesos
sernmsimportantesqueotros,ydealgunamaneratendrn"preferencia"alahoradepedir
cculosoinstruccionesalmicroprocesadorsobreotrosprocesos.Esteconceptosellama

PRIORIDADdeunproceso.Porlotanto,debequedarclaroqueeselkernelquien"manda"sobre
losprocesosycontrolasuejecucinsimultneayelrepartodelosrecursosdelamquina.
ComotodoenlossistemasUNIX,yporextensinenLinux,losprocesostambintienenundueo.
Esedueoeselusuarioqueejecutaelprogramaquedalugaralproceso.Estovieneaexplicarparte
delaseguridaddeLinuxencuantoapermisos.Comolosarchivos(ydispositivoscomoms
adelanteveremos)tienenunusuario,ungrupoyunospermisosdetermiandosasignados,ytambin
losprocesos,unprocesocontardecaraalsistemadeficherosconlospermisosquetengael
usuarioquelocre.Resumidamente,unproceso,respectoalsistemadeficheros,podrhacertanto
comoelusuarioalquepertenece.Unprogramaejecutadoporunusuarionoprivilegiadonunca
podrleeren/rootoborraroescribircosasen/usr/bin.Unusuarionormalnopodrtampoco
modificarparmetrosdeprocesosquenolepertenezcan.rootpodrejercercualquieraccinsobre
cualquierproceso.
Unprocesopuedecrearasuveznuevosprocesos.Enlaprctica,todoslosprocesossonhijosdel
primerprocesoejecutadoduranteelarranque,elproceso"init".As,unprocesohijo,apesardeser
unonuevo,guardaunarelacinconelprocesoquelocre(procesopadre).

Procesos
Propiedades de los procesos
Bsicamente,unprocesotieneestaspropiedades:

Unnmeroidentificador,(ProcessIDoPID),identificadordeproceso.Esnecesariopara
referirnosaunprocesoenconcretodelosvariosenejecucin.

UnPPID(Identificadordelprocesopadre),eselnmeroqueindicaquprocesocreal
procesoencuestin.

Unestado;habrmomentosenlosqueunprocesoseguirexistiendoenelsistema,perono
estarhaciendonadarealmente.PuedeestaresperandoaqueunaSEALleseaenviada
(sobreloquetrataremosmstarde)paravolverseactivo,oanosotroscomousuariosnos
puedeinteresardetenerloopausarlobajodeterminadascircunstancias.Losestadosms
importanessondormido(S),yenejecucin(R).

Undueo,generalmenteeselusuarioqueloejecut,ycomoyasedijo,elprocesohereda
lospermisosdelusuariodecaraalsistemadeficheros.SiunejecutableesSUID,al
ejecutarse,elprocesoresultanteadquierelospermisosdelusuariodueodelarchivo.
Generalmente,unusuarionormalnopuedeejercercontrolsobreprocesosquenole
pertenecen.

Unaprioridadquedeterminasuimportancia.Yavimosquenotodoslosprocesoseranigual
deimportantes.Veremoscmocambiarlaprioridaddeunprocesomsadelante.

Mostrando los procesos en ejecucin y sus propiedades.


Paraempezar,podemosverlastareasysussubtareasenunaestructuraanidadamedianteel
comandopstree.Alejecutarlo,veremosalgocomo:
# pstree
init-+-5*[agetty]
|-bdflush
|-cron

|-devfsd
|-eth0
|-gdm---gdm-+-X
|
`-gdmgreeter
|-keventd
|-khubd
|-kreiserfsd
|-kscand
|-ksoftirqd_CPU0
|-kswapd
|-kupdated
|-login---bash---pstree
`-syslog-ng

Asimismo,pstreepmuestraentreparntesiselnmeroidentificador(PID)delosprocesos,algo
muyimportantecuandoqueremospasardeactuardeformapasivaainteractuarconlosprocesos,
cosaquenormalmenteharemossealandosusPIDs.
Aunqueestainformacinestructuradaresultainteresante,existendosprogramasmuyconocidos
cadacualmsavanzadoquemuestranunacantidadingentedeinformacinsobrelosprocesos,
estossonpsytop.
psmuestraunalistadelosprocesosenejecucin.Pruebapsu,quemuestralosprocesosque
pertenecenalusuarioactual.Lacombinacinmshabitualdeopcionesespsaux,quemuestra
informacindetalladadetodoslosprocesosenejecucin.Algunosdeloscamposmsimportantes
mostradosporpsson:

USERusuariodueodelproceso.

PIDnmeroidentificadordelproceso.

%CPUporcentajedeusodelmicroprocesadorporpartedeesteproceso.

%MEMporcentajedelamemoriaprincipalusadaporelproceso.

VSZtamaovirtualdelproceso(loqueocuparaenlamemoriaprincipalsitodol
estuvieracargado,peroenlaprcticaenlamemoriaprincipalslosemantienelaparteque
necesitaprocesarseenelmomento).

RSStamaodelprocesoenlamemoriaprincipaldelsistema(generalmentesonKBytes,
cuandonolosea,seindicarconunaMdetrsdeltamao).

TTYnmerodeterminal(consola)desdeelqueelprocesofuelanzado.Sinoaparece,
probablementeseejecutduranteelarranquedelsistema.

STATestadodelproceso.

STARTcundofueiniciadoelproceso.

TIMEeltiempodeCPU(procesador)quehausadoelproceso.

COMMANDelcomandoqueinicielproceso.

LapginadelmanualdeLinuxsobrepsesespecialmentetil.Informasobreotrasopcionesy
propiedadesdelosprocesosendetalle.
Alfinyalcabo,loquepsnosmuestraesuna"instantnea"delosprocesosdelsistemaenel
momentoqueejecutamoselcomando,asqueapriorinopodremosverlaevolucin.

topeslaversininteractivadeps,ytienealgunasutilidadesinteresantesaadidas.Siloejecutamos
enunaterminalysinopciones,aparecerarribainformacindelsistema:usuarios,hora,
informacindeltiempodefuncionamientodelamquina,nmerodeprocesos,usodeCPU,usode
memoria(ntenselasconsidearcionesquehicimospreviamentesobrelagestindememoriaen
Linux),yusodelswap.Acontinuacintenemosunalistadeprocesossimilaralaquenosmostraba
psconladiferenciadequeestaseactualizaperidicamente,permitindonosverlaevolucindel
estadodelosprocesos.
Contop,tenemosdosposibilidadesdeespecificaropciones,bienenlneadecomandosenelshell,
obieninteractivamente(mientrasestenejecucinysinsalirdel).Lapginadelmanualdetop
estambinmuybuena,condescripcionesdetalladasdeloscamposydelasopciones,tantodelnea
decomandoscomointeractivas.Lelaypruebalasdistintasopciones.
# top
22:22:19 up 1 day, 9:41, 4 users, load average: 0.13, 0.06, 0.02
78 processes: 77 sleeping, 1 running, 0 zombie, 0 stopped
CPU states:
1.4% user,
3.6% system,
0.0% nice, 95.0% idle
Mem:
256192K total,
251776K used,
4416K free,
31684K buffers
Swap:
409648K total,
7112K used,
402536K free,
115516K cached
PID
414
2131
2129
618
2130
6
2085
1
2
3
4
5
50
84
109
190
193
196
199

USER
root
usuario
usuario
usuario
usuario
root
usuario
root
root
root
root
root
root
root
root
root
root
root
root

PRI NI SIZE RSS SHARE STAT %CPU %MEM


14 -10 59416 25M 8772 S<
0.9 10.3
19
0 1052 1052
820 R
0.7 0.4
14
0 6968 6968 4364 S
0.5 2.7
11
0 3988 3988 2408 S
0.3 1.5
11
0 6968 6968 4364 S
0.3 2.7
10
0
0
0
0 SW
0.1 0.0
10
0 6968 6968 4364 S
0.1 2.7
9
0
472 432
412 S
0.0 0.1
9
0
0
0
0 SW
0.0 0.0
19
19
0
0
0 SWN
0.0 0.0
9
0
0
0
0 SW
0.0 0.0
9
0
0
0
0 SW
0.0 0.0
9
0
0
0
0 SW
0.0 0.0
9
0
0
0
0 SW
0.0 0.0
9
0
0
0
0 SW
0.0 0.0
9
0
608 604
488 S
0.0 0.2
9
0 1248 1240
408 S
0.0 0.4
9
0 2816 2776 1728 S
0.0 1.0
9
0 2816 2776 1728 S
0.0 1.0

TIME COMMAND
3:12 XFree86
0:00 top
0:00 xmms
0:15 sawfish
0:00 xmms
1:31 kupdated
0:12 xmms
0:06 init
0:00 keventd
0:07 ksoftirqd_CPU0
0:10 kswapd
0:19 bdflush
0:00 khubd
0:00 kreiserfsd
0:00 eth1
0:01 syslogd
0:00 klogd
0:00 named
0:01 named

Tareas de Bash. Programas en primer y


segundo plano.
Elcontroldetareasesunainteresantecaractersticaquebashnosofrece.As,cadaprogramao
tuberaqueseejecutetieneasignadounnmerodetareaporpartedebash(diferentealPID).
Losprogramasquepodemosejecutardesdeunalneadecomandospuedenestarenprimero
segundoplano,ydehechopuedenpasardeunestadoaotro.Unaconsolaconcretaestbloqueada
cuandounprocesoestenprimerplano,mientrasquesiestensegundoplanolaconsolaestlibre
ypodemosteclearcomandosenella.
Estoestmsrelacionadoconlaterminalens(bashennuestrocaso)queconelconceptode
procesoquehemosaprendido.Normalmentealejecutaruncomandonorecuperamoselprompt

hastaquestenotermina.Lanecesidadquenossurgeespoderusaresaterminalsinabrirotra
nuevaalavezquenuestrocomandosiguehaciendoloquetengaquehacer.
Enbash,ponemosunatareaensegundoplanoaadiendoun&alfinaldelcomando.Elcomandose
ejecutamientraslaterminalquedalibre.
$ sleep 10 &
[1] 6190
$ # tras 10 segundos presionamos INTRO
[1]+ Done
sleep 10

Elcomandosleepsimplementeesperaelnmerodesegundosdelprimerargumento.Alejecutarlo
ensegundoplano,bashimprimelalnea[1] 6190ynosdevuelvealprompt,aunqueelcomando
sesigueejecutandoahoraensegundoplano.ElnmeroentrecorcheteseselNMERODE
TAREA(o,tambinllamadotrabajoojob)quebashleasignalpasarloasegundoplano,yel
nmeroquehayacontinuacin(6190)eselnmerodeprocesoquehageneradolaejecucindel
comando.CadavezquealpresionarINTROhaynovedadesenlagestindetareas,bashnos
informadeello.Enestecaso,haterminadolatarea[1].
Teniendounatareaensegundoplano,arrojarsusalidaalaterminalactualapesardetodo.
Podemosusarlasredireccionesqueyaconocemosparaevitarlo.
Pararecuperarunatareaensegundoplanoaprimerplano,podemosusarfg,seguidode%N,donde
Neselnmerodetareaquequeremosrecuperar,porejemplofg%2traeraaprimerplanola
segundatarea.
Conunatareaenprimerplano,podemosusarCtrl+Zyladetendremos.Ahorapodemoselegir
entrecontinuarconestatareaenprimerplano,omandarlaasegundoplano.Paracontinuarlaen
primerplano,teclearamosfg%1.Paraseguirlaensegundoplano,usaremosbg%1,suponiendo
queeslatareanmero1.
UncomandoejecutndoseenprimerplanopuedesercanceladoconCtrl+C,loqueasuvezhar
desapareceralprocesoresultantedelatabladeprocesosdelkernel.

Seales.
LasSEALESsonlaformaquetienenlosprocesosdecomunicarseentres,yelkernelde
comunicarseconellos.Existeunnmerodeterminadodesealesquesepuedenenviaraun
proceso,ycadaunadeellastienesobrelunaaccindistinta:pausarlo,reanudarlo,cancelarlo...
Conceptualmente,debemosentender,queunprocesorecibeunaseal,ytienepredeterminadauna
formadeactuaranteesaseal.As,hayunconjuntodesealesantelascualestodoslosprocesosse
comportanigual,sinembargo,haysealesantelasqueprocesosdistintossecomportarndemanera
distinta,einclusohabrprocesosqueignorendeterminadasseales.Habrotrasquenopodrn
ignorar(ladedetenerse,porejemplo)porquesoncomunesatodoslosprocesos.
LassealessedenotanporSIGNOMBRE,dondeNOMBREeselnombrequeseledaalaseal.
Adems,lassealesmsusadastienenunnmerodesealasociado.Veamoslasmscomunes:

SIGHUP(num1)Causaqueunproceso"relea"susarchivosdeconfiguracin.Todoslos
programasnoimplementanestaseal.

SIGINT(num2)Interrumpir(cancelar)unprograma.Eslasealqueseleenvaaun
procesocuandopresionamosCtrl+Centecladoconunprocesoenprimerplano.

SIGKILL(num9)"Matar"unproceso.Losprogramasnopuedendecidircmorespondera

estaseal,terminaninmediatamentecuandolareciben.Slodeberaserusadaenelcasode
necesitarterminarunprocesoquehadejadoderesponderynofuncionaadecuadamente.

SIGUSR1(num10)Sealdeusuario.Cadaprogramapuededecidircmoresponderaesta
seal.

SIGSEGV(num11)Sealdeviolacindesegmento(segmentationfault).Estaseallees
enviadaaunprocesocuandointentaaccederamemoriaque"noessuya",queestfuerade
lazonadememoriaqueeseprocesopuedeusar.Elprocesoesdetenidoinmediatamente.

SIGPIPE(num13)Tuberanoexistente.Estasealseenvaaunprocesoqueestaba
escribiendoaunatuberaopipecuandoeldestinodelatuberayanoexiste.

SIGTERM(num15)Terminar.Seenvaestasealaunprocesocuandoqueremosque
terminenormalmente,haciendoloquenecesiteantesdeterminar.

SIGCHLD(num17)Hijotermin.Estasealseenvaaunprocesopadreautomticamente
cadavezqueunprocesohijotermina.

Sepuedeverinformacinmsdetalladasobrelassealesconmansignal.
ElcomandokillSEALPIDeselqueseusaparaenviarsealesalosprocesos.Podemosindicar
variosPIDsparaquerecibanesasealenunsolocomandoseparndolosconespaciosalfinal.Son
equivalentes:
# kill -SIGKILL 1283
# kill -9 1283

MirarencadamomentoquPIDtieneelprocesooriginadoporuncomandopuedeserincmodo.
PoresoexisteelcomandokillallSEALnombre_comando,donde"nombre_comando"esel
nombredelcomandoquedilugaralprocesoencuestin.
Lapginadelmanualdekillesimportante,convieneconsultarla.

Prioridad de los procesos. El comando nice


Lomscomnestenermuchosprocesosalavezejecutndoseennuestramquina.Peronotodos
sonigualdeimportantes.Porejemplo,siestamosgrabandounCD,estedeberaserunprocesoms
importantequeelresto,porquesieldiscoduronoenvalosdatosalavelocidadsuficienteala
grabadora,perderemosnuestrodiscograbable.Asquelediremosalkernel:"sielprocesadorno
puedecontodo,loltimoquedebesretrasareslagrabacindelCD".Podramosnotarqueelresto
deaplicacionesvanmslentas,peroesonosgarantizaraenunamayormedidaquelagrabacinno
vaaserinterrumpida.
Laformadeconseguirestoes,ejecutandodesdeelprincipioelcomandointeresadomediantenice,
obien,conseguirsuPIDsiyaseestejecutandoyusarreniceparacambiarsuprioridad.
Algunosejemplos:
$
$

nice -n PRIORIDAD COMANDO


renice PRIORIDAD PID_PROCESO

PRIORIDADesunvalorquevadesde20a+20(conelsignoincluido).20eslaprioridadms
alta(alcontrariodeloquecabrapensar),y+20lamsbaja.Slorootpuedeestablecerunproceso
aunaprioridadnegativa,losusuarioscomomximopuedenponerunprocesoenprioridad0.

COMANDOeselcomandoquequeremosejecutar(sloaplicableconnice),elmismocomandoque
ejecutaramosnormalmentecontodossusparmetrosyopciones.
PROCESO(sloaplicableconrenice)cambialaprioridaddelprocesocuyoPIDesPID_PROCESO
alnuevovalorindicado.

Captulo 12. Utilidades de compresin y


empaquetado de ficheros y directorios.
Tabladecontenidos
Introduccin
Visingeneraldelproblemaysusolucin
Utilidadesparalalneadecomandos
Comprimirydescomprimirunsolofichero
Comprimirydescomprimirdirectorioscompletos
Todojunto
Descomprimiendootrosformatos

Introduccin
Hastaahorahemosvistocomomanejarnosconvarioscomandos,coneditoresdetexto,conlashell
yconelsistemaengeneral.Sinembargo,nosehaentradoenuntemabastantecomnenelmundo
delainformtica:lacompresindedatos.
Enestecaptulosepretendenensearlasutilidadesmscomunesdecompresinyarchivadode
ficherosydirectoriosdeLinux.Adems,estassoncomunesamuchos,pornodecirtodos,losUnix.

Visin general del problema y su solucin


Antesdeempezarconlistadosdeutilidades,rutas,binarios,ficherosynuevoscomandosque
puedenasustaracualquieravamosapresentardeunaformageneralelproblemaquequeremos
resolver.
Suponemosquetenemosciertosdatosquequeremosguardar,empaquetarocomprimirpara
llevarlosaunaunidaddebackup,paraenviarlosporcorreoelectrnico,paraadjuntarlosaun
trabajoosimplementeparatenerunacopiadeseguridaddealgosobreloquevamosatrabajar.
EnelmundoUnixpredominandosalgoritmosdecompresindedatosdistintos;estossongzipy
bzip2.Ambossonmuyeficientesynopodemosdecirqueunoseamejorqueotro.Presentan
grandesdiferenciasinternasperoaniveldeusuarioloquepodemosdeciresquebzip2comprime
msperoconsumedefinitivamentemsrecursosquegzipparacomprimir/descomprimirelmismo
fichero.
HistricamenteenelmundoUnixsehausadomucholautilidadtarparaenviarbackupsa
dispositivosdecinta.tarseencargadeunirunconjuntodeficherosenunosolo.Enprincipiotar
noproveecompresinalgunayaquelo"nico"quehaceesponerunficheroacontinuacindel
anteriorponiendoenmediounosseparadores.Aunquelaexplicacinnoesmuyrigurosa,nosvale
paraentenderelporqudetarhoyenda.
Losalgoritmosdecompresinquehemoscitadoantes(bzip2ygzip)solosoncapacesdeoperar
sobreunfichero;esdecir,tomanunficherodeentradaygeneranunficherocomprimido.No

puedentomarcomoentradaundirectorioovariosficherosalavez.Poresoesimportantetar.Con
laayudadetarpodemosconvertirtodoundirectorioenunsoloficheroyunaveztenemosese
ficherogenerado,aplicarleunodelosalgoritmosdecompresin.

Utilidades para la lnea de comandos


CualquierdistribucinmodernadeLinuxincluirtantotarcomolospaquetesconlaslibrerasy
utilidadesparacomprimirydescomprimirficherostantocongzipcomoconbzip2.Adems,
actualmentetarestmuyintegradoconambosalgoritmosdecompresinynosevitatenerque
utilizarcomandosalgomscomplicadosparacomprimirydescomprimirficheros
Loscomandosqueusaremosenestaseccinson:tar,gunzip,gzip,bzip2ybunzip2.Como
podemosversonnombresmuyintuitivos.Yatenemostodolistoparaempezaracomprimiry
descomprimirficherosydirectorios.Loprimeroqueharemosserelegirunficheroacomprimir;
porejemplo,/etc/passwd.

Comprimir y descomprimir un solo fichero


Paracomprimirelficheroquehemosescogidocongzipharemos:
$ gzip -c /etc/passwd > passwd.gz

Estohabrdejadounficherollamadopasswd.gzeneldirectoriodondeejecutamoselcomando.
Ahorapodemosprobaradescomprimirloyacomprobarsitodofuebien
$ gunzip passwd.gz
$ diff /etc/passwd passwd
$

Esmuyimportanteverqueelcomandogunzippasswd.gzhaborradodeldirectorioelfichero
passwd.gz.
Parahaceralgoparecidoconbzip2,podemoshacerloas:
$ bzip2 -c /etc/passwd > passwd.bz2
$ bzip2 passwd.bz2
$ diff /etc/passwd passwd
$

Comprimir y descomprimir directorios completos


Comoyahemoscomentadoantes,ningunodelosdosalgoritmosdecompresinqueveremos
soportatrabajarsobrevariosficherosalavez;sinoquesuentradaserunnicoficherosobreel
queseaplicarlacompresin.Siqueremoscomprimirdirectoriosenterosloquetenemosquehacer
esutilizartarparacrearunsoloficheroapartirdevariosabasedeconcatenarlos.
Paracrearunnicoficheroapartirdeundirectoriopodemoshacerlosiguiente:
$ tar cf directorio.tar directorio/

Obtendremoseneldirectoriounficherodirectorio.tarquecontienetodoelarbolde
directoriosquehubieracolgandodedirectorio/.Siqueremoscomprimiresteficherolo

podemoshacercomohemosvistoantes:
$ gzip directorio.tar

Ytendremosunficherollamadodirectorio.tar.gzquecontendrtodoelarbolde
directoriosqueoriginalmentecolgabadedirectorio/.Lomismopodramoshaberhecho
utilizandoelcomandobzip2enlugardegzipsiqueramosutilizarelalgoritmobzip2.
Paradesempaquetarelficherodirectorio.tarlopodemoshacerconelsiguientecomando:
$ tar xf directorio.tar

Todo junto
Comoyahemoscomentadoantes,actualmentetarestmuyintegradotantocongzipcomocon
bzipypodemoscomprimirydescomprimirdirectoriosenterosconsolouncomando.
Ademsdeensearcmocomprimirdeformasimple,tambienvoyamostrarcmobzip2
comprimenormalmentemsquegzipacostadeusarmsrecursosytiempo.Comopruebautilizar
eldirectorioquecontieneelcdigofuentedeestemanualyaqueas,ellectorpodrrepetirestos
comandosyobtendrresultadosmuysimilares.
Paracomprimirundirectoriocontarlohacemosas:
$ tar zcf manual-cvs.tar.gz manual
$ tar jcf manual-cvs.tar.bz2 manual

Seusa'z'paragzip
y'j'parabzip2

Paraverladiferenciadetamaospodemosusarlsl
$ ls -l manual-cvs.tar.*
-rw-r--r-1 ferdy
ferdy
-rw-r--r-1 ferdy
ferdy

331236 sep 18 03:11 manual-cvs.tar.bz2


477033 sep 18 03:13 manual-cvs.tar.gz

Comopodemosver,elficherocomprimidoconbzip2ocupabastantemenosqueelmismo
comprimidocongzip;sinembargo,quizellectorpudonotarquelaoperacinconbzip2tardms
tiempoencompletarse.
Porltimoveremoscmodescomprimirlosficherosquetenemos:
$ tar zxf manual-cvs.tar.gz
$ tar jxf manual-cvs.tar.bz2

Seusa'z'paragzip
y'j'parabzip2

Sisoloqueremosextraerunficheroodirectoriodelficherocomprimidolopodemoshacer
indicandoelnombrejustoalfinaldelcomando;porejemplo:

$ tar jxf manual-cvs.tar.bz2 manual.xml


$ ls manual.xml
manual.xml

Descomprimiendo otros formatos


Esmuytpicoquerercomprimir/descomprimirotrosformatosquesonmuyutilizadosenelmundo
Windowscomoloszipolosrar.LoprimeroquehayquedeciresqueLinuxSIpuededescomprimir
estosformatos;perolasutilidadesquelohacennosonlibres.
Paradescomprimirunficherozipvamosautilizarelcomandounzipyparadescomprimirlos
ficherosrarutilizaremoselunrar.
$ unzip fichero.zip
$ unrar fichero.rar

Comoyahedichoantes,estasutilidadesnosonlibressongratuitasparausopersonal;perono
tenemosaccesoalcdigofuente.Asquedeberamosevitarutilizarestosformatosparacomprimir
nuestrosficheros.Yaqueademsdenoserformatoslibres,lacompresinesmuchomenorquecon
losformatoslibresquehemosvistoantes.

Captulo 13. Expresiones regulares y sed.


Tabladecontenidos
Introduccin
Pero,quessed
?
Y,qusonlasexpresionesregulares?
Muybonito,pero,cmofuncionatodoesto?
Primerospasosconsed
Conociendoalasexpresionesregulares
Ejemplosmselaboradosydivertidos

Introduccin
Enestecaptulovamosatratarunaherramientamuypoderosa,lasexpresionesregularesysuuso
consed.Ahoraquiztodoestosueneachino,laideadeestecaptulonoesllegaraconvertirseen
unexpertoenexpresionesregularesy/osed,yaqueseescribenlibrosexclusivossobreexpresiones
regularesysobresed;pero,unavezacabado,setendrelconocimientosuficienteparaescribiry
leerexpresionesregularesquenosfacilitarnmuchastareas.
Aunquesedylasexpresionesregularesestnntimamenteligados,nodependenelunodelotro.
Podemosejecutarscriptsycomandossedsinnecesidaddetenerconocimientodeexpresiones
regulares,yviceversa.Podemosejecutaryutilizarexpresionesregularessinnecesidaddeinvocara
sed(porejemplodesdeperl).
Dadaestaindependencia,lasexpresionesregularessonmsunaideaqueunaimplementacin.Las
expresionesregulares,comoyaveremosmsadelante,sonpatronesquepodremosutilizarpara
buscar,sustituir...cadenasdetexto.Evidentemente,haymasimplementacionesdelasexpresiones
regulares(POSIX,Perl,...)peroaqulasqueexplicaremosestarnorientadasasuusoconsed.

Pero, qu es sed?
Elnombredesed,aligualqueotroscomandosUnix(yportantotambindeLinux),esunacrnimo
quesignificaStreamEDitor;esdecir,uneditordeflujos.sednosvaapermitireditarflujosdedatos
pasados,porejemplo,atravsdeunatubera(pipe,|).ParamsinformacinverPipeso

tuberas

.
sedesmuyutilparahacermodificacionesenflujosdedatosoenficherosdetexto(porejemplo).
Estasmodificacionespuedenseraadiroborrarunalnea,ounconjuntodeellas,buscary
reemplazarpatrones...
Porejemplo,esmuytpicoenalguienquehagawebsquerersustituirtodaslasetiquetas<b></b>
por<strong></strong>aexcepcindeaquellasqueseencuentren(porejemplo)detrsdeunpunto.
Siemprepodramosabrirnuestroeditorfavoritoeirhaciendobsquedasyreemplazoscomolocos.
Sinembargo,sedapoyndoseenlasexpresionesregularesescapazdesimplificarnosMUCHOla
tarea.

Y, qu son las expresiones regulares?


Aunquenodeberamostomarlocomounaverdadabsoluta,podemospensarenlasexpresiones
regularescomounaherramientaquenospermitebuscarcadenasdentrodeotrascadenasms
grandes.
Aunquelaexplicacindelprrafoanteriorparezcasimpleyburdaaprimeravista,realmentenolo
estanto.Elhechodebuscarcadenasesalgoquesedaadiarioenmuchasaplicaciones.Nosiempre
queremosbuscarcadenasporelmerohechodesabersiestnahono;otrasvecesqueremos,
adems,haceralgunamodificacinenesascadenas.O,porejemplo,podemosquererpartiruna
cadenagrandeenotrasmspequeasdadounpatrn.
Puesbien,lasexpresionesregularesnosonmsqueeso,patronesquepodremosbuscarencadenas
detexomsgrandesylargas.
Yaconocemosloquesonlasexpresionesregularesanivelconceptual,pero,evidentementeestose
traducealfinalenunconjuntodesignosconunasintxisyunagrmatica.Hayvariostiposde
expresionesregulares,peroenestecaptulosoloveremoslasexpresionesregularesparasu
utilizacinconsed.Estetipodeexpresionesregularesesmuysimilaralasexpresionesregularesde
Perl,peronoson'exactamente'iguales.

Muy bonito, pero, cmo funciona todo esto?


Aunquesedsepuedeutilizarsinnecesidaddetenerconocimientossobreexpresionesregulares,uno
desususosmscomunesesutilizarexpresionesregularesparahacersustitucionesybsquedasen
ficherosyflujosdetexto.
sedescapazdeejecutarun'pequeo'peropoderosolenguajedecomandosquenospermitir
manejarlosflujosapoyndonosendosbuffersprincipales.

Primeros pasos con sed


Paradarnuestrosprimerospasosconsedvamosahacerunasimplesustitucindetexto.Vamosa
sustituirenunficherotodaslasocurrenciasdeunapalabra,porejemplo'zonasiete'por
'ZonaSiete.ORG'.

Nota
EnPrimerospasosconsedalprincipioseverlasintaxisparautilizar

expresionesregularesmuysimples;alfinalsevernloscomandosdesedy
cmoutilizarambascosas(expresionesregularesycomandos)juntas.
Lasintaxisdesednormalmentees:
sed s/patrn/reemplazo/opcin

Asqueparahacernuestroreemplazopodemoshacer:
$ cat fichero | sed s/zonasiete/ZonaSiete.ORG/g > fichero.reemplazado

Ahoraenfichero.reemplazadotendremoselresultadodelcomando.
Sedtambiendisponedealgunoscomandoscomoelquesindarnoscuentahemosaprendido,el
comandodereemplazo(s).Losotrosdoscomandosqueaprenderemossonelcomandodeimprimir
(p)yeldeborrar(d).
Loscomandosdesedlosaplicaremossobreungrupodelneas.Esegrupolopodemosdefinircon
lmitesfijos(4,6)outilizandoexpresionesregulares.

Nota
Lasexpresionesregularesseestudianenlasiguienteseccin.Esnormalquelas
siguienteslneasnoseentiendancompletamente;detodasformasunavezse
entiendanlasexpresionesregulares,serinteresantevolveraestepuntopara
intentarentenderestosejemplos.
Siporejemploqueremoseliminarlaslneasvacasdeunficheropodemosusaralgocomo:
$ cat fichero | sed '/^[ ]*$/d' > fichero.reemplazado

Ycomoyaescostumbre,enfichero.reemplazadotendremoselresultadodelaoperacin.
Hemosvistocmodefinir,conunaexpresinregular,cmoelegirlaslneassobrelasqueactuar
sed.
Comoejemploparaterminardedemostrarestoserextraertodoslos'Subject'deunficherombox:
$ sed '/^Subject:.*/s/^[^:]*: \(.*\)$/\1/p;d' < mbox
Subject 1
Subject 2
Otro asunto
Re: Otro asunto
...

Alaadir;dloquehacemosesborrarlaslneasquenoconcuerdanconlaexpresinregular.Sino
lopusieramos,veramostodaslaslneasenlapantalla.

Conociendo a las expresiones regulares


Existenmuchosttulosquecubrenextensamentelasexpresionesregulares;dehechoexistenlibros
especialmente'gordos'quesolotratanlasexpresionesregulares.Aqudaremosunapequea
introduccinparahacerunaspequeasbsquedasysustituciones.
Lasexpresionesregularessonunaherramientaparadefinirpatronesdebsquedayreemplazo.En

ellassedefinenloquellamaremostomosquesernlaspartesquebuscaremos.Sesuponequelo
quebuscamosnoloconocemos(sinonolobuscaramos),asquetenemosquedefiniruntomo
paracadapartequebusquemos.Enlospatronespodemoshacerreferenciasa'uncaracter
cualquiera','elcomienzodelnea','elfinaldelnea'ycosasas.Paraesoseutilizancaracteres
reservadostambienconocidoscomowildcards.
Antesdemostrarunatablacontodosloswildcardsvamosaverunpequeoejemplosobrecomo
usardoswildcardsmuycomunes,elde'principiodelnea'(^)y'finaldelnea'($).
Porejemploparaaadiruntextoalcomienzodetodaslaslneaspodemoshacer:
$ cat loquesea | sed 's/^/Texto al comienzo:/g' > loquesea.nuevo

Loquehaceesreemplazarelcomienzodecadalneaconesetexto.Hemosentrecomilladola
expresinparanotenerproblemasconlashell.Esunabuenacostumbreelentrecomillarlas
expresionesdesed.
Veamoselmismoejemploperoalcontrario.Queremosaadiralgntextoalfinaldetodaslas
lneasdeunflujodedatos;loharemosconlasiguienteexpresindesed.
$ cat unfichero | sed 's/$/Esto se aade al final/g' > unfichero.nuevo

Antesdeseguir,decirquesedaceptalosdostiposdesintaxisquehayenelsiguienteejemplo:
sed s/patrn/reemplazo/opcin
sed s:patrn:reemplazo:opcin

Nota
Apartirdeahoralosejemplosutilizarnindistintamenteunadelaotra.De
todasformaslasegundaformaesmssimpledeleercuandohayque'escapar'
caracteres.

Quierodemorarunpardeprrafosyejemploslallegadadelatemidatabladewildcards.
Imaginemosquequeremosborrarcualquiersigno$alprincipiodeunalneaporunax.
Nuestroprimerintentopuedeserdeltipo:
sed 's:^$:x:g'

Perosilopensamosbien,estamosdiciendoalgocomo:'Reemplazatodaslaslneasquetenganjusto
despesdelcomienzo,elfinal,porunax'.Loquevieneaseralgocomo:'Reemplazalaslneas
vacasconunax'.Dehechopodemosescribirunaslneastrascorreresecomandoyveremosque
realmentenohemosconseguidoloquequeramos(reemplazarlos$inicialesporx).
$ sed 's:^$:x:g'
$a ver si funciona
$a ver si funciona
x

Comovemos,lalneaenblancolahareemplazadoporunax.loquesignificaquetenemosque
hacerleverdealgunaformaasedquequeremosquetrate$comounliteralynocomoelfinde

lnea.Estolovamosaconseguiraadiendouna'\'alcaracter:\$.
Asqueescribiramosnuestrapequeaexpresinregular:
$ sed 's:^\$:x:g'
$ahora no reemplaz la lnea vaca
xahora no reemplaz la lnea vaca

Apartirdeahoracualquiercaracterquequeramosquesedtratecomounliteralenlugardeun
wildcard,leaadiremosuna'\'delanteydiremosquelohemosescapado.Quizellectorhaya
notadoelsiguienteproblema:'Cmodecirleasedqueuna\esunliteralynoeselcaracterde
escape?'.Puestansimplecomoquehayqueescaparla\quedando:\\.
Imaginemosquequeremosquitarla\delcomienzodeunalnea.Escribiramosnuestraexpresin
regularas:
sed 's:^\\::g'

Paraterminardeconoceralasexpresionesregularesvamosapresentarlatabladewildcards.Todos
(ocasi)loscaracteresyestructurasdescritasenlatablasernexplicadasasquenodebeasustarse
ellector.
Tabla13.1.Listadewildcardsparaexpresionesregulares
Caracter/Est
ructura

Descripcin
Loscorchetesseutilizanpara
definirrangos

Ejemplo(s)

[0-9]o[a-zA-Z]ounomscompleto[AZa-z0-9,.-_]
ELEMENTO\{3,7\}harqueELEMENTO
Lasllavesseutilizanparadefinirel
tengaqueocurrirentre3y7veces.Y
nmerodevecesquehade
\{ \}
ELEMENTO\{4\}harqeELEMENTOtenga
repetirseunpatrn(oatmo).
queocurrirexactamente4veces.
Nospermitecrear'tomos'.Todolo \([0-9]*Hola\)Buscarunaposible
queestentreparntesisser
secuenciadenmerosprecediendoalapalabra
\( \)
consideradoun'tomo'.
Hola.
Indicaqueuntomooelemento
podronoexistiryencasode
*
ELEMENTO*
existirpodrocurrircualquier
nmerodeveces.
s:.::gBorrartodalaentrada.s:.*:A:g
Equivaleacualquiercaracter(uno Cambiarcadalneapor'A'.s:.:A:g
.
solo).
Cambiarcadacaracterdelaentradaporuna
'A'.
Simbolizaelprincipiodelnea.
^$simbolizaunalneavaca.
^
Creaunrangoquecontiene
[^xyz,]creaunrangoquecontieneatodos
cualquiercaractermenoslos
[^ ]
loscaracteresmenosax,ay,azya,.
especificadosentre[^y].
Simbolizaelfinaldelnea.
\.$concuerdaconlaslneasqueacabenen..
$
Paraextraerelcontenidoliteraldeunodelostomosutilizaremoslasintaxis:\ndondenesel
[ ]

nmerodeltomoquequeremosextraer.

Ejemplos ms elaborados y divertidos


Unavezconocemosbienalasexpresionesregularesnodebemostenermiedoaempezaraescribir
lasnuestras.Sinembargo,lasprimeraspuedenhacersemuyduras,asqueparaqueellectorse
sientaagustocreandoexpresionesregulares,hemosrecopiladoalgunosejemploselaboradose
inclusodivertidosparaponerenprcticalasexpresionesregulares.
Algunosdeestosejemplossepresentancomoejerciciosparaellector.Lobueno(omalo)delas
expresionesregularesesquehayvariasformasdellegaralmismositio.Sisedaconunasolucin
distintaalapropuesta,MNDANOSLAylaincluiremosencuantopodamos.(Paraponerteen
contactoconnosotros:Editoresenactivo).
Antesdemeternosconlosejercicios,vamosaveralgunospequeosejemplosbasadosenficheros
comunesdelsistemaquepermitirnallectorfamiliarizarseconlasexpresionesregularesysu
'jerga'.
Sedrealmenteesunminilenguajedeprogramacincapazdehacersustitucionesrealmente
complejasdeformamuyeficiente.Parairdemostrandosuusoutilizaremosunpequeoejemplo
incrementalparasacarlalistade'targets'deunMakefile.ComoejemploutilizaremoselMakefile
queseproveeconlasfuentesdeestemanual.
Lomejorpararesolverlosproblemasdeexpresionesregularesesseguirunesquemaparecidoal
siguiente:
Mtododeresolucindeproblemasdeexpresionesregulares
1.
2.
3.
4.

Visualizarlaentrada
Formalizar(enlenguajenatural!)lasolucin(reptelaenalto,sueleayudar)
Ajustarlaformalizacinalascaractersticasvistas
Generalizar(estepuedeserelpasomscomplicado)eimplementar

Noesunaregladeoro,niunmtodoinfalible,perosuelefuncionar.
Comoyahemoscomentado,laideaesextraersololostargetsdelMakefilequehayenlasfuentes
deestemismomanual.Loprimeroesformalizarlaexpresindeunaformageneraleirporpasos.
Algoasservir:Seleccionar las lneas que comienzan con un grupo
indefinido de caracteres distintos de espacio seguido de : y de
ellas extraer el grupo indefinido de caracteres distintos de :
seguido de : y texto libre hasta el final de lnea que hay al
comienzo de cada lnea. Imprimir esa lnea, borrar las dems.
Empezamosporseleccionarlaslneasquenosinteresan,esolopodemoshacerconunaexpresin
regulartalqueas:/^[^ ]*:/.
Sobreesaslneasdebemosejecutarelcomandodereemplazo(s)eimplementarlaexpresin
regularquehabamosformalizado.Lohacemosconcatenandoelcomandoalaexpresinanterior:
/^[^ ]*:/s/^\([^:]*\):.*$/\1/.
Unaveztenemoselcomandodereemplazodebemosejecutarsobreesaslneaselcomandopara
imprimirlas(p)yborrarelresto(d)estolopodemoshaceragregando:p;danuestro'script'ensed
yponerlotodojunto:
sed '/^[^ ]*:/s/^\([^:]*\):.*$/\1/p;d'

Siloejecutamosveremosalgocomo:
$ sed '/^[^ ]*:/s/^\([^:]*\):.*$/\1/p;d' < Makefile
.PHONY
all
single
multi
ps
pdf
comprimidos
check
txt
z7
clean
htmlclean
images
fo

Eltarget.PHONYesuntargetespecialasquenosinteresadeshacernosdel.Loharemos
incluyendounapequeamodificacin:
sed '/^[^ .]*:/s/^\([^:]*\):.*$/\1/p;d' < Makefile
Lossiguientesejerciciossedejancomotrabajoallector:

Importante
Esimportanteevitarlatentacindemirarlassoluciones.Detodasformasjusto
debajodelosejerciciosestescritalasolucin'formal'quehemos
implementado;yenunanotaalpie,lasolucin.Lasolucinformalnospuede
servircomopistaparaponernosaimplementarlaexpresinregulary,adems,
parainspirarnosenprximasexpresionesregulares.Decualquiermodo,es
mejorintentarnomirarambas.
ExtraerelPIDdeunalneadesyslog.Sepideextraerelnmerodeprocesodeunalneadellog
deldemoniosyslog.Unalneadedichologtienelasiguienteforma:
MES DIA HORA hostname proceso[PID]: MENSAJE

Lasolucinesfacil:Un conjunto indefinido y libre de caracteres, un [,


un grupo de dgitos del 0 al 9 de longitud indefinida, un ], un :
y texto libre hasta el final de la lnea. Extraer el PRIMER GRUPO.
[1]
Extraerelnombredeprocesodeunalneadesyslog.Continuandoconlalneadesyslog,ahora
serequiereextraerelnombredelproceso.
Parecidaalaanterior:Un grupo de tres letras maysculas o minsculas, un
espacio, un grupo de uno o dos dgitos, un espacio, dos grupos de
cualquier nmero de caracteres distintos de espacio, un espacio,
un grupo de cualquier nmero de caracteres distintos de [, texto
libre. Extraer el QUINTO GRUPO. [2]
Extraerlosbytesdelosficherosquecontieneundirectorio.Paraesteejercicioutilicelasalida
delcomando:lsl|grep^comoentradadesuexpresinregular.
Lasolucinpasaporimplementaralgocomo:4 grupos de un conjunto indefinido

de caracteres distintos de 'espacio' seguidos de un conjunto


indefinido de espacios; un grupo de nmeros indefinido y un
conjunto de caracteres libres hasta el final de la lnea. Extraer
el SEGUNDO GRUPO. [3]
Ahoraprobaremosconunejercicioincremental.Vamosaintentarparsearunadireccindecorreo
talycomoladefineelestndar(RFC822)vigenteenInternet.Segneseestndarunadireccin
tienelassiguientesformas:
parte_local@dominio.completo
<parte_local@dominio.completo>
'nombre_real' <parte_local@dominio.completo>
"nombre_real" <parte_local@dominio.completo>

Nota
Realmenteelestndardefinemsformas,peroparanocomplicarlo,lo
dejaremosah.Unacosapeculiaresquetantolapartelocalcomoeldominiono
puedencontenerciertoscaracteres.(espacios,comas,signosmayorymenor
que...)

Paraaadirleunapizcaderealismo,tomaremoslaentradacomosifueraelcontenidodeuna
cabeceradeunmensajedecorreoelectrnico(From:)deformaquenuestroscasosaanalizar
siendoFORMAlaformadeladireccinqueestemosusandoencadamomento:
From: FORMA
# ... y cualquier combinacin de maysculas y minsculas en la palabra From

Enestecasoiremosdelcasomssimplealmscomplicado;tomemos:From:
parte_local@dominio.completo.Estaserlaprimeradelascuatroexpresionesregulares
queharemos.
Estaesfacil:Un conjunto indefinido de letras maysculas y minsculas
seguido de : y seguido de un nmero indefinido de espacios.
Sustituir eso por NADA. Es decir, borrarlo. [4]
Tenemosquedarnoscuentaquenecesitamosunaexpresinregularqueseacapazdeextraerel
emaildecualquieradelasformasanteriores,asquedebeserlosuficientementegenrica.
Continuaremosconlasiguiente,estatambienessimple:Un conjunto indefinido de
letras maysculas y minsculas seguido de : y seguido de un nmero
indefinido de espacios. Un posible <. Un conjunto indefinido de
caracteres distintos de: espacio, coma, y >. Un posible >. Extraer
el SEGUNDO GRUPO. [5]
Comovamosaempezaratratarlascomillas("y')enlassiguientesexpresionesregularespara
seguirresolviendolasdistintasformasdelacabeceraFrom:,esmuyimportanteelentrecomillado
quehagamos.Noteellectorqueparamayorcomodidadyparaquelaconcentracinrecaigasobre
lasexpresionesregulares,heentrecomilladolassiguientessoluciones.
Latercerasecomplicaunpeln:Un conjunto indefinido de letras maysculas y
minsculas seguido de : y seguido de un nmero indefinido de
espacios. Un conjunto formado por ' cualquier nmero de caracteres
y ' que puede o no existir. Un conjunto formado por un nmero
indefinido de espacios. Un posible <. Un conjunto indefinido de

caracteres distintos de: espacio, coma, y >. Un posible >. Extraer


el CUARTO GRUPO. [6]
Laltimaesrelativamentesencillasiseconsiguilaanterior;solohayqueaadirlaposibilidadde
quelascomillassimples,tambinseandobles.
Paraterminar:Un conjunto indefinido de letras maysculas y minsculas
seguido de : y seguido de un nmero indefinido de espacios. Un
conjunto formado por ' o " cualquier nmero de caracteres y ' o "
que puede o no existir. Un conjunto formado por un nmero
indefinido de espacios. Un posible <. Un conjunto indefinido de
caracteres distintos de: espacio, coma, y >. Un posible >. Extraer
el CUARTO GRUPO. [7]

[1]s:.*\[\([0-9]*\)\]\:.*$:\1:g
[2]s:\([a-zA-Z]\)\{3\}[

]*\([0-9]\)\{1,2\} \([^ ]*\) \([^ ]*\) \

([^[]*\).*:\5:g
[3]s:^\([^

]*[ ]*\)\{4\}\([0-9]*\).*$:\2:g

[4]s:\([a-zA-Z]*\:[

]*\)::g

[5]s:\([a-zA-Z]*\:[

]*\)<\{0,1\}\([^ ,>]*\)>\{0,1\}:\2:g

[6]"s:\([a-zA-Z]*\:[

]*\)\('.*'\)\{0,\}\([ ]*\)<\{0,1\}\([^
>,]*\)>\{0,1\}:\4:g"
[7]"s:\([a-zA-Z]*\:[

]*\)\([\"'].*['\"]\)\{0,\}\([ ]*\)<\{0,1\}\([^
>,]*\)>\{0,1\}:\4:g"

Captulo 14. Scripts de inicio del sistema y


ejecucin programada de comandos.
Tabladecontenidos
Introduccin
Scriptsdeiniciodelsistema.Runlevels
Qusonlosrunlevels

.Directorios
init,elprimerproceso
Elficherodeconfiguracindeinit
:
/etc/inittab

Cambioderunlevel
Relecturadelficherodeconfiguracin
Modomonousuario
Msinformacin
Servicios,demonios
Quson
Aadiryquitarserviciosaunrunlevel
Arrancarypararserviciosporseparado
Crond,ejecucinprogramadaoperidicadecomandos
Ques?
Yestocmofunciona?

Introduccin
Ahoraqueconocemossuficientescomandoscomoparahacervariascosastilesenelsistema,
hacerquealgunosseejecutenautomticamenteesunanecesidadinmediata.
Unadelasformasposiblesesqueestoscomandosseejecutensiemprequearranquemoselsistema.
Laprincipalutilidaddetodoestosonlosdemonios(Quson),principalmentecomandosque
ofrecenservicios(web,ftp,correo...).Loidealseranotenerquepreocuparnoscadavezde
iniciarlos,sinoquesiempreestnactivos.Estoloconseguiremosconlosscriptsdeinicio.
Otradelasformaseshacerqueseejecutenperidicamente(unavezcadahora,unavezalda,
ciertosdasdelasemanaalahoraespecificada...).Elencargadodefacilitarnosestatareaseren
estecasoeldemoniocrond.

Scripts de inicio del sistema. Runlevels


LamayoradelasdistribucionesdeLinuxserigenporelSystemVInitparagestionarlosscriptsde
arranque,asqueesesteelsistemaquedescribimosaqu.Apesardetodohaypequeasdiferencias
deunadistribucinaotra,principalmenterelativasaenqudirectorioestndeterminadosficheros.
Encualquiercasonosondifcilesdeencontrar.Otrasdistribuciones,comoGentoooSlackware,
tienenelmtododeiniciobastantedistinto(GentooesSystemVmodificado,ySlackwareusael
BSDInit),asqueencasodenecesitarmsinformacinenestoscasos,lomsconvenientees
buscarladocumentacinespecficadeladistribucin.

Qu son los runlevels. Directorios


LosRUNLEVELSotambinllamadosNIVELESDEEJECUCINsonunconceptoimportanteen
lossistemasUNIXyporextensinenLinux.Hayvariosrunlevelsdisponibles,del0al6(puede
haberalgunoms,perogeneralmenteestossonlosqueseusan),ycadaunodeestosrunlevelses
unaconfiguracindearranquedistinta.Ququieredeciresto?Entendmoslobien.Pongamospor
casoquetenemosunamquinaquetienedosusos,PCdeescritorioyservidordered.
Estableceramosentoncesdosrunlevelsdistintos.Enunodeellosconfiguraramosparaarrancar
simplementeelservidorgrficoXWindowyunentornodeventanas,yenelotrolosdistintos
demoniosservidores:servidorweb,servidorDNS...
Cadaunodeestosrunlevelstendraunnmerodistinto.Siduranteunapocadeterminadala
mquinaslovaafuncionarcomoservidor,laconfiguraramosparausarelrunlevel
correspondiente,queslocargaraaliniciolosdemoniosdelosservidores,ynocargaraelservidor
grficodeventanasXWindowpuestoquenolonecesita.Siduranteotrapocavaafuncionarcomo
PCdeescritorio,laconfiguraramosparausarelotrorunlevelynosevitaramostenerqueestar
deteniendolosdemoniosquenonecesitamos.
Elrunlevel0esparaapagarlamquina,yelrunlevel6esparareiniciarla.Esobvioqueno
debemosponerelnmeroderunlevelpordefectoaningunodeestosdos;dehacerlo,elsistemano
llegaraaarrancar.Otrosrunlevelstpicossonel3yel5(generalmentesignificanarrancarel
sistemaenmodomultiusuario;avecespuedenserequivalentes,oel5arrancarelservidorgrficoX
yel3nohacerloelequivalenteenDebiansueleserel2).Elnivel1quedareservadoparaelmodo
monousuarioquenosservirparaadministrarlamquina;normalmenteestemodonotendrredy
pedirlapasswordderootantesdepermitirejecutarningncomando.
En/etc/init.dresidenunosscripts,unoporcadaservicio,queaceptansiempreunprimer
argumento,quepuedeser"start"o"stop"(arrancarodetenerelservicio).Encadarunlevel
podremosdecidirculesdeestosscriptsseejecutarnyculesno.

Parahaceresto,cadarunleveltieneundirectorioasociado,/etc/rcN.dobien
/etc/rc.d/rcN.ddependiendodeladistribucindeLinuxusada,dondeNeselnmerode
runlevelcorrespondiente.Dentrodecadaunodeellos,hayunaseriedeenlacessimblicosque
apuntanhacialosscriptsdelosserviciosen/etc/init.d.Paraunrunleveldeterminado,slo
habrenlacesparalosserviciosquesequieranejecutareneserunlevel.
LosnombresdeesosenlacessonANNservicio,dondeAesunaletra,yNNesunnmero.El
objetivodeestaformadenombrarlosesqueenunrunleveldeterminadoseejecutanenorden
alfabtico.As,paraunamismaletra,unnmerobajoindicaqueserejecutadoantes.

init, el primer proceso


Inmediatamentedespusdequeelkernelsecargueenmemoria,inicialiceelhardware
adecuadamente,ymonteelsistemadeficheros,elcomando/sbin/initdalugaralprimerproceso
delsistema,init,queeselpadredetodoslosprocesosyelencargadodegestionarla
configuracindelosrunlevelsparainiciarlosserviciosadecuados.
initleeelfichero/etc/inittab(comentadoacontinuacin).Deldeterminaculesel
runlevelpordefecto(enelqueiniciar),yalgunasopciones.
Antesdeiniciarelrunlevelcorrespondiente,lomscomnesqueseejecuteunscript
(independientementedelnmeroderunlevel).Elnombreylaubicacindeestescriptseespecifican
tambinen/etc/inittab.Sumisinesrealizartareasquesiempresonnecesarias;inicializarel
teclado,lospuertosserie,resolverlasdependenciasdelosmdulos,sincronizarelrelojdelsistema
conelrelojdelhardware,definirelnombredelhost...ycosassimilares.
Acontinuacin,initrecurrealosenlacessimblicosde/etc/rcN.d(oequivalente),ejecutando
cadaunodeellosconunprimerargumento,enestecaso,"start".
Estoarrancatodoslosservicioscorrespondientesdelrunlevel(creandolosnuevosprocesos
correspondientes).Seguidamenteejecutavariosterminalesqueesperanellogindelosusuarios(las
terminalesalasqueaccedemosconCtrl+Alt+F1...).Estotambinestdescritoenelfichero
/etc/inittab.
Elsistemayahaarrancadoyahoraesusable.

El fichero de configuracin de init: /etc/inittab


Enesteficherodefiniremosquesloqueelsistemaejecutarencadarunlevelytodosesos
extraosscriptsde/etc/init.dempezarnatenersentido.
Elficherotienediversasentradas,deltipo:
identificador:runlevels:accin:orden_a_ejecutar

Donde:

identificadoresunnombreasociadoacadalneadelficherogeneralmentenosuperior
a4caracteres.

runlevelsesunalistaderunlevels(todosseguidos)paraloscualesestalneasetendren
cuenta.

accinindicadequformaobajoqucondicionesseejecutaelcomandodelcampo
siguiente.

orden_a_ejecutareselcomandoqueseejecutaparaestaentradaenlosrunlevels
especificados.

Deloscamposanteriores,elcampoaccinmereceespecialinters,sobretodoporquealgunos
valoresdeestecampohacenqueseignoreelcamporunlevels.Lasdistintasopcionesdeeste
camposepuedenconsultarenlapginamaninittab.
Lomejoresveralgnejemplotpicodeunfichero/etc/inittabparavercmosecombinan
lasdiversasopciones.Esteficherosueletenercomentariosqueclarificancmoestndispuestoslos
scriptsdeinicioporladistribucindeLinuxqueestemosusando.Enelejemplo,losnmeros
indicadosrepresentanpuntosquesecomentanacontinuacin.
# Nmero de runlevel por defecto
id:2:initdefault:
# Script que se ejecuta siempre en cada inicio,
# independientemente del runlevel
si::sysinit:/etc/init.d/rcS # (Debian y similares)
si::sysinit:/etc/rc.d/rc.sysinit # (Redhat y similares)
# Comando para cada runlevel
# En RedHat y sucedneas es rc.d, Debian es init.d
l0:0:wait:/etc/rc.d/rc
l1:1:wait:/etc/rc.d/rc
l2:2:wait:/etc/rc.d/rc
l3:3:wait:/etc/rc.d/rc
l4:4:wait:/etc/rc.d/rc
l5:5:wait:/etc/rc.d/rc
l6:6:wait:/etc/rc.d/rc

0
1
2
3
4
5
6

# Qu hacer en todos los runlevels si se presiona la combinacin


# de teclas CTRL+ALT+DEL en una terminal
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
# Lanzar las terminales para el login de los usuarios
1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6

Estepodraserunficherodeconfiguracindeinitagrandesrasgos.Algunasdistribuciones
aadirnmscosas,porejemplopodranponeruncampoqueejecutasexdm(elprogramadelogin
grfico)enelrunlevelespecificado,mientrasqueotraspodrantenerlocomounservicioaparte.
Estudiemoselficheroporpartes:

Enelejemplo,elrunlevel2esenelqueiniciarelsistemapordefecto.Puedeeditarseeste
ficheroycambiarseporotro.

Existenunaseriedeoperaciones,comoyavimos,quesonnecesariasentodoslosrunlevels,
asqueelscriptindicadoenestalneaserejecutadoantesdecargarcualquierrunlevel(esto

locausa"sysinit"alestarenelcampoaccin).
Estoestresueltodeformasdistintasendistribucionesdistintas,peroelscriptindicado
tendrcomentariosyreferenciasquenosayudarnaentendercmofuncionaennuestro
sistema.
EnRedHatysimilares,esesteficheroelquecontieneloscomandosaejecutardirectamente.
EnDebian,elscriptejecutatodoslosscriptsquehayadentrodeldirectorio/etc/rcS.d
porordenalfabtico,locualresultaciertamentemsordenado.

Paracadarunlevelseejecutaelcomandorc(cuyalocalizacinpuedevariarsegnla
distribucin)conunargumento,elnmeroderunlevelencuestin.As,estecomandose
encargadeejecutarlosscriptsenlazadoseneldirectoriorcN.d,dondeNeselnmerode
runlevel,pasndolesgeneralmenteelargumento"start"parainiciarestosservicios.
Laaccin"wait"indicaainitquedebeesperaraquelaejecucinderctermine,estoes,a
quesehayaniniciadolosservicios.

EstalneaasociaeleventodelapulsacindelacombinacindeteclasCtrl+Alt+DELconel
comandoespecificado,enestecaso,reiniciarlamquinamedianteshutdown.
Estaslneasinicianlasterminalesenlosrunlevelsindicados.Elcomandoquelohacepuede
sergettyoalgunosimilar.tty1atty6sonlasterminaleslocalesaccesiblesmediante
Ctrl+Alt+F1aF6.tty7sueleestarreservadoparautilizarelservidorgrficoXWindow.
Estasterminalesesperanaquelesseaintroducidounnombredeusuarioydespusllamana
loginparaautentificaralusuarioydevolverleunashellvlidaencasodexito.Algunos
comandossimilaresagettypermitenlanzarterminalesenlospuertosserie(incluso
permitiranuniniciodesesinremotoatravsdelalneatelefnicamedianteunmdem).
Laaccin"respawn"indicaquesielprocesodelaterminalsedetiene(porejemplo,el
usuarioterminalasesinenunaterminal),sedebevolverainiciarpidiendounnombrede
usuariodenuevo.

Cambio de runlevel
Conelsistemaenmarcha,esposiblecambiarderunlevelenunmomentodeterminado.Esto
causarladetencindelosprocesosdelrunlevelactualeiniciarlosdelnuevorunlevel(sialguno
delosprocesosactualesescomnaambosrunlevelsnoserparadoyluegoiniciadodenuevo).Si
unprocesodelosquedebendetenersenolohace,sermatadoporinit.
EnunmomentodeterminadopuedeinteresarmsdetenerunsloprocesoqueefectuarunCambio
derunlevel.
Paracambiarderunlevelseutilizar:
# telinit -t SEC NUM

Enrealidad,esequivalenteteliniteinitenestecaso.Aunquetradicionalmentesevieneusando
telinitparacambiardeniveldeejecucin.

SECeselnmerodesegundosqueesperarinitaqueunprocesosedetengaantesdematarlo.Sino
seespecificaestaopcin,elnmerodesegundospordefectoes5.
NUMeselnmeroderunleveloniveldeejecucinalquesequierecambiar.
Unusuarionoprivilegiadonopodrcambiarderunlevel(porotraparteesobvio,sinole
pertenecenesosprocesosnotendrningnderechosobreellos).
Unclaroejemplodecambioderunlevelescuandoutilizamosalgunodeloscomandosquenos
permitenapagarlamquina.Endefinitivaloquehacenesuncambioalrunlevel6.

Re-lectura del fichero de configuracin


Sienalgninstantequeremosqueinitvuelvaaleerelficherodeconfiguracin,tendremosque
indicrselomediante:
# telinit q

Modo monousuario
Comocabaesperar,inittambinestrelacionadoconelestablecimientodelajerarquade
permisosaliniciodelsistema.Normalmenteseiniciarlamquinaenmodomultiusuariocontodas
lasventajasycaractersticasqueyahemosvisto.Sinembargo,existelaposibilidaddeiniciarla
mquinaLinuxenmodomonousuario.
Qupasaroquserviciosseinicializarnenmodomonousuariodependedecadadistribucinde
Linux.Enalgunasinclusoesposiblequesemuestreunpromptconpermisosderootsinnisiquiera
pedirunlogin.
Enprincipio,ponerunsistemaenmodomonousuariocarecedeutilidadprctica;aunquenoest
demssaberqueestaposibilidadexiste,ytambin,quenoessegura.

Ms informacin
Cadasistemapuedetenerunaconfiguracinligeramentedistintaenesteaspecto.Nuestropapel,si
administramosunamquina,esconocercmoestconfiguradoelarranqueparapodermodificarlo
segnnuestrasnecesidades.
Unabuenafuentedeinformacinalrespectosonloscomentariosquehayenlosficherosde
/etc/init.d(oequivalente)y/etc/initab,queenlamayoradelasocasionesexplican
cmosehapersonalizadoelarranqueporloscreadoresdeladistribucin.
Laspginasmandeiniteinittabsontambinreferenciaobligadasisedeseaprofundizarmsen
estosaspectos.

Servicios, demonios
Serviciosydemoniosguardanunaestrecharelacinconlosnivelesdeejecucin.Descubrmoslo.

Qu son
Elnombrede"servicio"esunpocoambiguoperogeneralmenteserefiereaundemoniodel
sistema.ElglosariodefineeltrminoDemonio.

Cadaunodeellostieneunarchivoasociadoen/etc/init.dquecomoyaseviesunscript
bashqueaceptaunargumento(podraser,almenos,"start"o"stop",aunquepuedenserotros
complementariosparaproveeralusuariodeopcionesadicionales,porejemplo"restart","status"...).
Estescriptasociadoejecutarelcomandoqueinicializaeldemonioconlasopcionesadecuadassi
selepasa"start"comoargumento.
Siobservascualquierscriptdeunservicioquehayainstaladotudistribucinpodrsentenderel
esquemageneralquesiguentodosellos.

Aadir y quitar servicios a un runlevel


Existendosposibilidadesdehaceresto.Unaeslavamanual(haremosenlacessimblicos),yla
otrausandolasvasquenosfacilitenuestradistribucin.
Veremosvarioscasos:

Poneroquitardeunrunlevelprogramasinstaladospornuestradistribucin.Estosyatendrn
unficherogeneralmente/etc/init.d/serviciodondeserviciosergeneralmente(y
estoesarbitrario,noesimprescindible)elnombreasociadoaldemoniooservicioqueinicie.

Poneroquitardeunrunlevelprogramasquehayamoscompiladodesdelasfuentes,creados
pornosotrososimilar.Enestecasonosotroscrearemoselscripten/etc/init.dylos
enlacessimblicos.

Fichero correspondinete en /etc/init.d


Laestructuradeestosficheroses,agrandesrasgos:
#!/bin/bash
# Comentarios de los autores
# Definicin de variables de shell que dicen dnde esta el
# ejecutable del demonio, el fichero de configuracin, o detalles
# de este estilo
# Comprobaciones de si existe el fichero ejecutable del programa,
# si existen los ficheros de configuracin, si determinados permisos
# tienen los ficheros adecuados, etc.
case "$1" in
start)
echo "Iniciando nombre_servicio... "
orden_de_shell # Comando que inicializa el servicio
;;
stop)
echo "Parando nombre_servicio... "
orden_de_shell # Comando que detiene el servicio
;;
restart)
echo "Reiniciando nombre_servicio... "
orden_de_shell # Comando que reinicia el servicio
;;
como:

# Otras opciones posibles aceptadas (diferentes para cada servicio)

# status: Dara informacin sobre el estado del servicio


# reload: Enviara una seal al proceso para releer la configuracin
*)
echo "Uso: $0 {start|stop|restart|(otras opciones)}
;;
esac
exit 0

orden_de_shelleselcomandocorrespondiente.Estecomandopuedeserdedostipos:

Directamentereferirsealprogramaeiniciarloconlasopcionesadecuadas.

Iniciarloindirectamentellamandoaunprogramaofuncindebash(segndistribucin)que
ademsdeejecutarloguardeenunficherosuIDdeprocesoparaposteriormentedetenerlo
conmsfacilidad.

Porejemplo,paraelsegundocaso,enDebianestelprogramastartstopdaemonyenRedHat(y
derivados)estdefinidaunafuncinBashen/etc/init.d/functionsllamadadaemon.En
elprimercasopuedesleersupginamanyenelsegundopuedesverdirectamentesudefinicinen
elficheroindicadoparavercmofunciona,ofijarteenscriptsdeinicioyacreados.
Cuandonoseusalasegundaopcin,paraterminarelprocesoseusaelcomandokillallpara
enviarleunasealindicandosloelnombredelproceso.
Servicios que instala nuestra distribucin
Estosyatienensuficheroen/etc/init.d.Seiniciarnenlosrunlevelsenlosquetenganenlace
simblicoeneldirectoriocorrespondienteasunmeroderunlevel.Porejemplo,aadamosel
servidorwebApacheparaqueseinicieenelrunlevel3:
# ln -s /etc/init.d/httpd /etc/rc3.d/S80httpd

"S80"esarbitrario(recuerdaqueseejecutanpororden),perodebeserlosuficientemente"alto"
paraquelosserviciosderedyaestniniciados.
Parahacerqueunservicionoseejecuteenelrunlevel3,borraremossuenlaceen/etc/rc3.d
Servicios nuevos
Conestonosreferimosalosdemoniosque,porejemplo,instalemoscompilandoelcdigofuente.
Esteprocedimientodeinstalacin,alcontrarioquelospaquetesdelasdistribuciones,nocreaun
ficheroadecuadoen/etc/init.d.
Esnuestroturno:miraremosladocumentacindelpaqueteparaverconqucomandoseiniciay
conculsedetiene,ycrearemosunficheroen/etc/init.dconlamismaestructuraqueelque
hemosvistoarriba.Ledaremospermisosdeejecucinylollamaremosconunnombrequenos
permitaidentificarloposteriormenteconeldemonioqueiniciar.
Acontinuacinseprocedeexactamenteigualqueenelapartadoanterior.
Ver los servicios que se iniciarn en un runlevel
Estansencillocomolistarlosenlacesquehayen/etc/rcN.ddondeNeselnmeroderunlevel.

Arrancar y parar servicios por separado


Conelsistemainiciadoenunrunleveldeterminado,puedesurgirnoslanecesidaddeactivaro
desactivarunsloservicio.Paraestoesobvioquenomerecelapenacambiarderunlevel.
Inclusopodemos,desdelaconsolacomoroot,ejecutarunkillparaterminarunservicio
refirindonosasuproceso;oponerelcomandodeldemonioquequeremosiniciaryhacerquese
ejecuteensegundoplano.
Noobstante,aunqueloanterioresperfectamentevlido,noesnecesarioquerecordemostodaslas
opcionesnecesariasdeundemonio,osuIDdeprocesosilosscriptsde/etc/init.dtienenya
estainformacin.
As,podramosiniciar,porejemplo,elservidordebasesdedatosMySQLcon:
# /etc/init.d/mysqld start

EnRedHatysucedneos,estecomandoesequivalenteaservicemysqldstart.
Exactamentedelamismaformasepuededetenerunservicio:
# /etc/init.d/httpd stop

dentendraelserviciohttpdsuponiendoqueesteyaestuvieseiniciado.

Crond, ejecucin programada o peridica de


comandos
Qu es?
Cronesunautilidad,presenteenlamayoradesistemasLinuxyUnix,quepermiteejecutar
comandosoprocesosconunafrecuenciadeterminada.
Estosepuedeaplicar,porejemplo,ahacerbackupsdeunacarpetadelsistematodoslosdasalas
12delanoche,comprobareltamaodeundirectoriooelespaciolibreendiscodelosusuariosdel
sistemayavisarcuandoestapuntodeagotarse,ejecutarunrevisordecorreocomofetchmailymil
usosms:todoquedalimitadoportuimaginacin;)

Y esto cmo funciona?


Cronsecomponeprincipalmentede2elementos:cron,elDemonio,yelarchivodeconfiguracin
/etc/crontab.
Sipretendemosaadir,quitaromodificarlastareasqueejecutarcron,sepuedehacerusodel
siguientecomando:
$ crontab -e

conelcualseabriruneditorypodremoscambiarnuestastareasenelcron.Ladiferenciaentre
editarelarchivo/etc/crontabdirectamenteyutilizarelcomandocrontaberadicaenquecon
esteltimonohacenfaltaprivilegiosderootUsuariosyaqueestaremoseditandounarchivode
configuracinespecficoparanuestrousuario.Unavezquesehaacabadodeeditarelarchivo,al
guardarlo,crontabseencargadeintegrartodoencron.Cmoeditarlo?Puesbien,hayunaforma

definidadehacerloenlaquecadalneatieneesteorden:
minuto hora dia_del_mes mes dia_de_la_semana comando

Yestossonlosposiblesvaloresparacadaelemento:
Tabla14.1.Valorespara/etc/crontab
Minuto
Entre0y59
Hora
Entre0y23
Diadelmes
Entre1y31
Mes
Entre1y12
Diadela
Entre0y6.El0correspondealDomingo,el1alLunesyashastael6que
semana
correspondealSbado
Comando
Setratadelcomandoocomandosaejecutar.
Sinoquieresespecificarunvalorconcretoparaalgunadelasvariables,sedebecolocarelsigno*el
cualsignificaalgoascomo"todos"losvalores.Siloquequieresesespecificarunrango,hasde
usarelsignodeestemodo:0569osimilar.Siporelcontrariodeseasindicarvariosvalores
porseparadopuedeshacerusodelascomas:4,7,9,15.Ysiquieresexcluiralgnvalorseusa/:0
5/4demodoqueseejecutarde0a5exceptoel4(dependedesiterefieresaminutos,horas,dias
delasemana...).Elsigno/tambinpuedeserusadoparadeterminarintervalos,porejemplocada15
minutos:*/15.
OtroaspectoatenerencuentaesquesielcomandonoestenelPATHdeberserespecificadocon
surutacompleta.Veamosalgunosejemplos:
0,5,10,15,20,25,30,35,40,45,50,55 * * * * fetchmail
*/5 * * * * fetchmail

Enestosejemplos,seejecutarelprogramafetchmailtodoslosdasdelmes,todoslosdasdela
semana,todoslosmeses,cadahora,cada5minutos.
0 4 * * * fetchmail

Elcomandoseejecutartodoslosdasalas4:00delamaana.
0 12 * * 3 shutdown -h now

Conestalnea,elcomputadorseapagartodoslosMircolesalas12delmedioda.

Glosario de trminos
AlgunasdelasdefinicionesestnsacadasdelglosariodetrminosdeE.C.O.L

A
Adduser
Elcomandoadduserloutilizaroot,oalguienquetengaautoridadparaello,conelfinde
crearunnuevousuario.Alcomandoadduserlesigueelnombredecuentaquesevaacrear.

Cabedestacarqueenalgunasdistribucionesestecomandoacambiadosunombrepor
useradd.Lasintaxisdeestecomandovendraaserporejemplo:
addusernombre_usuario
Alias
Elcomandoaliasseusaparacrearaliasonombresalternativosparacomandos.
Generalmente,estosaliassonabreviaturasdelverdaderocomando.Dichosaliassesituanen
el.bashrcdecadausuario,porejemploaliasrmd="rmRf"haraquealteclearel
comandormdnosborraraloqueindiquemosenmodorecursivo.
Apropos
Elcomandoapropossignificaliteralmenteapropiadoorelativo(aotros).Cuandolesigueun
parmetro,buscarenlaspginasmanentradasqueincluyanelparmetro.Bsicamente,con
estoserealizaunabsquedadepalabrasclaveentodaslaspginasman.Eselequivalentedel
comandomankparametro.

B
Bash
(BourneAgainSHell)Intrpretedecomandos.Eselshellpordefectoenlamayoradelas
distribucionesdeGNU/Linuxdehoyenda.Seencargadeinterpretarloscomandosdel
usuarioparallamaralosprogramasqueestnenlosdirectoriosdelavariable$PATHoenlos
alias,apartedeejecutarsuspropioscomandos:asignacindevariables,bucles,etc.
Buffer
Segneldiccionario,"memoriaintermedia".Esunamemoriaqueciertosprogramasusanpara
diversasfunciones,normalmenteparaguardardatosenmemoriaparasuusoenunplazocorto
detiempo.
BIOS
SigladeBasicInput/OutputSystem(sistemadeentrada/salidabsico).Seutilizapararealizar
todaslasfuncionesnecesariasparacolocarenestadoinicialelhardwaredelsistemacuandose
conectaalaalimentacindeenerga.ElBIOScontrolaelprocesodearranque,proporciona
rutinasdeentrada/salidadebajonivel(deaqusunombre)y(usualmente)permitequeel
usuariomodifiquelosdetallesdelaconfiguracindelhardwaredelsistema.

C
Cat
catleindicaalsistemaque"concatene"elcontenidodeunarchivoconlasalidaestndar,
normalmentelapantalla.Siesearchivoesbinario,elcomandocatsepuedeliarylasalida
puedenosermuysugerente.Generalmente,esteprocesotambinesmuyruidoso.Loqueen

realidadocurreesqueelcomandocatestdesplazndoseporloscaracteresdelarchivo,yel
terminalesthaciendotodoloquepuedeparainterpretarymostrarlosdatosdelarchivo.
Tendrabsicamenteunformatodeltipocatfichero.
Cdigofuente
Elformatoentendibleporlaspersonasdelasinstruccionesqueconformanunprograma.
Tambinseleconocecomofuentesosourcecode.
Comando
Medioporelcualseleordenaunaaccindeterminadaalsistemaoperativoatravsdeun
intrpretedecomandos,talycomopuedeserBash.
Compilar
Procesoporelcualse"traduce"unprogramaescritoenunlenguajedeprogramacinaloque
realmenteentiendeelordenador.

D
Demonio
Apartedelsignificadoquetodosconocemos,enUnix/Linuxseconocecomounprogramaque
permaneceensegundoplanoejecutandosecontinuamenteparadaralguntipodeservicio.
Ejemplosdedemonio,sonlosservidoresdecorreo,impresora,sistemasdeconexioncon
redes,etc.
Dependencias
Cuandoserefiereapaquetes,lasdependenciassonrequerimientosqueexistenentrepaquetes.
Porejemplo,elpaquete"foo"puederequerirficherosquesoninstaladosporelpaquete"bar".
Enesteejemplo,"bar"debeestarinstalado,puessino"foo"tendrdependenciassinresolver.
Normalmente,RPMnopermitirqueseinstalenpaquetescondependenciassinresolver.
Distribucin
Unsistemaoperativo(engeneralLinux),quesehaempaquetadoparafacilitarsuinstalacin.
Distro
VerDistribucin.
DNS
DomainNameServer.Servidordenombresdedominio.Servicioderedquenosfacilitala
busquedadeordenadoresporsunombrededominio.Seencargatantodetraducirnombresa
direccionesIPcomodelpasocontario.

E
Entrada/Salidaestndar
Pordefectolaentradadedatosestndarseestableceeneltecladoylasalidadedatosestndar
enlapantalladelmonitor,estolopodemosvariaratravsdetuberas.Porejemplo,podemos
hacerquelaentradaseaelratnylasalidalaimpresora.
ExpresinRegular
Conjuntodecaracteresqueformanunaplantillaparabuscaryreemplazarcadenasdetexto
dentrodetextosmslargos.

F
FSF
FreeSoftwareFoundation.Fundacinquepretendeeldesarrollodeunsistemaoperativolibre
tipoUNIX.FundadaporRichardStallman,empezcreandolasherramientasnecesariaspara
suproposito,demodoquenotuvieraquedependerdeningunacompaiacomercial.Despus
vinolacreacindelncleo,quetodavaseencuentraendesarrollo.

G
GNU
GnuisNotUnix.ProyectodelaFSFparacrearunsistemaUNIXlibre.
GNU/Linux
SistemaoperativocompuestodelasherramientasGNUdelaFSFyelncleodesarrolladopor
LinusTorvaldsysuscolaboradores.
GPL
GeneralPublicLicense.UnadelasmejoresaportacionesdelaFSF.Esunalicenciaque
protegelacreacinydistribucindesoftwarelibre.

H
Hardware
Elhardwareeselsoportefsicodeunacomputadora,secomponedediferentesdispositivosde
hardwarequepuedenestardentroofueradelacajadelacomputadora.Dentrodelhardware
entranlaplacabase,lacpu,lamemoria,elteclado,elratn...
Host
Unhostesunacomputadoraqueseencuentradentrodeunared,yqueofrecealgntipode
servicioorecursoalresto.

I
Intrpretedecomandos
VerShell.
IP
LasdireccionesIP(InternetProtocol)sonelmtodomedianteelcualseidentificanlos
ordenadoresindividuales(o,enunainterpretacinmsestricta,lasinterfacesdereddedichos
ordenadores)dentrodeunaredTCP/IP.TodaslasdireccionesIP(versin4,lamsutilizada
actualmente)consistenencuatronmerosseparadosporpuntos,dondecadanmeroest
entre0y255.
Aveces,laabreviaturaIPpuedesignificar"IntelectualProperty",oloqueeslomismo,
PropiedadIntelectual.
ISP
SiglasdeInternetServiceProvider.EmpresauorganizacinqueofreceaccesoaInterneta
usuariosfinalesycorporativos.

K
Kernel
Parteprincipaldeunsistemaoperativo,encargadodelmanejodelosdispositivos,lagestin
delamemoria,delaccesoadiscoyengeneraldecasitodaslasoperacionesdelsistemaque
permaneceninvisiblesparanosotros.

L
Libreras
Serefierealconjuntoderutinasquerealizanlasoperacionesusualmenterequeridasporlos
programas.Laslibreraspuedensercompartidas,loquequieredecirquelasrutinasdela
libreriaresidenenunficherodistintodelosprogramasquelasutilizan.Lasrutinasdelibreria
puedenenlazarseestticamentealprograma,encuyocasoseagreganfsicamentelascopias
delasrutinasqueelprogramanecesita.Estosbinariosenlazadosestticamentenorequieren
delaexistenciadeningnficherodebibliotecaparapoderfuncionar.Losprogramas
enlazadosconbibliotecascompartidasnofuncionarnamenosqueseinstalenlaslibrerias
necesarias.
Login
Programaencargadodelavalidacindeunusuarioalaentradaalsistema.Primeropideel
nombredelusuarioydespuescompruebaqueelpasswordseaelasignadoaeste.
Logout

logoutseutilizaparasalirdeunsistemacomousuarioencurso.Sieselnicousuarioque
estregistrado,sedesconectardelsistema.

M
Mdulos
Unmduloesunconjuntoderutinasquerealizanfuncionesaniveldesistema,yquepueden
cargarseydescargarsedinmicamentedesdeelncleocuandosearequerido.Losmdulos
confrecuenciacontienencontroladoresdedispositivos,yestnfuertementeligadosala
versindelncleo;lamayoradelosmdulosconstruidosconunaversindadadencleo,no
secargarndemaneraapropiadaenunsistemaquecorraunncleoconversindistinta.
Multitarea
Capacidaddeunsistemaparaeltrabajoconvariasaplicacionesalmismotiempo.
Multiusuario
Capacidaddealgunossistemasparaofrecersusrecursosadiversosusuariosconectadosa
travesdeterminales.

N
Ncleo
VerKernel.

P
Paquete
Ficheroquecontienesoftware;estescritoenunciertoformatoquepermitelafcil
instalacinyborradodelsoftware.
Particin
Elsegmentodelespaciodealmacenamientodeunaunidaddediscoquepuedeaccederse
comosifueseundiscoentero.
PATH
Variabledelentorno,cuyovalorcontienelosdirectoriosdondeelsistemabuscarcuando
intenteencontraruncomandooaplicacin.Vienedefinidaenlosficheros.bashrco
.bash_profiledenuestrodirectoriohome.
PPP
PointtoPointProtocol.Protocolodetransmisindedatos,utilizadoenlamayoriadelas

conexionesainternetdomsticas.
Proceso
Programaenejecuccindentrodeunsistemainformtico.
Pipe
VerTubera.
Password
Palabraclavepersonal,quenospermiteelaccesoalsistemaunavezautentificadaconlaque
poseeelsistemaenelficheropasswd.
POSIX
POSIXeselacrnimodePortableoperatingsysteminterface,unafamiliadeestndaresde
llamadasalsistemadefinidosporelIEEE,intentaestandarizarlasinterfacesdelossistemas
operativosparaquelasaplicacionescorranendistintasplataformas.Estosestndares
surgierondeunproyectodeestandarizacindeAPIsydescribenunconjuntodeinterfacesde
aplicacinaplicablesaunagranvariedaddeimplementacionesdesistemasoperativos.El
trminoPOSIXfuesugeridoporRichardStallmanenrespuestaalademandadelaIEEEque
requeraunnombrefacilmentememorizable.
Prompt
Elprompteslosiguientequevemosalentraralsistema,unalineadesdedondeelsistemanos
indicaqueestalistopararecibirordenes,quepuedesertansencillacomo:$autoconfoalgo
mascomplejacomo:amphora:1505200:home/israel:$Enlamayoradelasshells
(incluidabash),espersonalizable.

R
root
PersonaopersonasencargadasdelaadministracindelsistemaTieneTODOelprivilegio
parahacerydeshacer,porloquesuusoparatareasquenoseanabsolutamentenecesariases
muypeligroso.
Recursosdelsistema
EnglobaalamemoriaRAM,elprocesadoryotrosdispositivosdehardwarecomoeldisco
duro.Delosrecursosdelsistemadependeeldesempeodelordenador.

S
SistemaOperativo(S.O.)

UnSistemaOperativo(S.O.)esunprograma(oconjuntodeprogramas)decontrolquetiene
porfinfacilitarelusodelacomputadorayconseguirquestaseutiliceeficientemente.As,
tambinreneunconjuntodefuncionesoprogramasquehacenlavidadelprogramadorms
fcil,ysirvecomoplataformaenlaquebasarse,paranotenerquereinventarlaruedacon
cadaprogramaquesecree.
Shell
Traducidodelinglsconchaocaparazn.Elshelleselintrpretedecomandosquese
estableceentrenosotrosyelkernel.Haymuchostiposdeshellcadaunoconsuspropias
caractersticas,sinembargoelestndarenGNU/Linuxeselshellbashyaqueeselqueforma
partedelproyectoGNU.
Script
Unscriptesunficherodetextoquecontieneunconjuntodecomandos/instruccionesescritos
enunlenguajeinterpretadocualquieraquesea,comopuedeserBash.Lapeculiaridaddelos
scriptsesquesonprogramasquenoestncompilados,sinoquecontienenelcdigofuentedel
programa,queesinterpretadoypasadoaunlenguajequelacomputadorapuedacomprender
cadavezquesemandanejecutar.
Shellscripting
Elshellscriptingeselartedeprogramarscriptenunashell.
Shellscriptsoscriptsdeshell
ProgramaescritoparaserinterpretadoporunashelldeunSO,especialmenteUnix.
Swap
Espaciodediscoduroqueutilizaelkernelencasodenecesitarmasmemoriadelaque
tengamosinstaladaennuestroordenador.

T
Tubera
Lastuberassoncomoconexionesentreprocesos.Lasalidadeunprocesolaencadenamos
conlaentradadeotro,conloquepodemosprocesarunosdatosenunasolalineadecomando.
Terminal
Unaterminalesuntecladoyunapantallaconectadosporcableuotromedioaunsistema
UNIX/Linux,haciendousodelosrecursosdelsistemaconectado.

U
UNIX

SistemaOperativocreadoporAT&Tamediadosdelos70.

W
Wildcards
Laswildcardssonunoscaracteresespecialesusadoscomnmentedentrodebsquedasde
ficherosporsunombreconcomodines.Porejemplo,sibuscamosporunarchivonombrado
como'r?te'enunSistemaOperativotipoUnix,nospuedeencontrararchivosdenombre'rute',
'rote','rzte',etc.ElasteriscoenUnixseutilizaparasubstituir"cualquiercosa",porejemplo
'archivo_*_inet'puedeencontrarnoscualquierarchivoqueempiecepor'archivo_'ytermine
por'_inet'(comoporejemplo'archivo_de_inet','archivo_sdsfhy_inet'o'archivo__inet')

Apndice A. ZonaSiete.ORG Editors Team


Tabladecontenidos
Editoresenactivo
Editoresretirados
Colaboradores
Aquestnlistadostodosloseditoresquehanayudado,porpocoquesea,aescribirestemanual.
Algunossiguenescribiendo,otrosporrazonesdiversassehantomadountiempodedescanso;quiz
indefinido.Detodasformasqueremosagradecerlesatodossutrabajoyaquesinellosestetrabajo
nohabrasidoposible.
ZonaSiete.ORGEditorsTeam<zonasiete@ferdyx.org>

Editores en activo
Lossiguienteseditoresestnenactivo:

RicardoCerveraNavarro<ricardo@zonasiete.org>

FernandoJ.PeredaGarcimartn<ferdy@ferdyx.org>

EduardoGonzlezLpezdeMurillas<freenix@coaxion.org>

NovilaLpez<jaguar@forodelinux.org>

AntonioHernndezGonzlez<toyohg@terra.es>

Editores retirados
Muchasgraciasatodos,teneislapuertaabiertasidecidsvolver:

AitorMorenoMartnez<zesder@supercable.es>

IgnacioHernnJerez<herje@zonalinux.org>

EduardoRoblesElvira<edulix@tumundoweb.com>

IvnCalleCabrero<ivy@ferdyx.org>

Colaboradores
Personasquenoshanechadounamanoenmomentospuntuales:

SergioPeredaGarcimartn<sergio@ferdyx.org>

AlejandroCadavidLpez<acadavid@gmail.com>

Vous aimerez peut-être aussi