Académique Documents
Professionnel Documents
Culture Documents
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.
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:)
A,ZonaSiete.ORGEditorsTeam.
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).
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.
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.
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.
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.
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:)
ainstalarMandrakepuedequeestemossalvados.
Noesmuycomn,perorarasvecessepodranperderlosdatosdenuestrodiscoduro.Evitemos
malesmayores,quenonoscuestanada,ysaquemosunacopiadelosdocumentosimportantesodel
trabajoquetenemosennuestrosistemaactual.Elrestodesoftwarepodramosreponerlodesdelos
discosdeinstalacin.Repetimosqueestonoesnadafrecuenteperopodraocurrir.
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.
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.
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.
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.
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.
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.
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
(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.
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.
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
~/.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
Obtener ayuda
ObviamenteestahasidounaintroduccinmuylivianaaVim.PeroVIMesmuchoms!.Yel
mejorpuntodepartidaesejecutarvimtutor.Estecomandoloquehaceesirguindonospasoa
pasoyconejemplos.Editandobuffers(ficheros)preparadosparaelcorrectoaprendizajedevim.
Vimesmuygrande,sepuedenhacermuchascosasconl.Esmuyrecomendableutilizarvimtutor
parainiciarseenestegraneditor.
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
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.
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 $
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
#
%cdrom
%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.
Enestecaptulovamosavercmomanejarlaentradaylasalidadelosdatosdesdelaterminal
BASH,anivelmsomenosbsico.
Comoves,pordefectoelcomandoechorecibelascadenasdetextoentrecomillas(simpleso
dobles),ysacapordefectoalapantallaloquelepasamoscomoargumento;aunquepuedeenviarla
salidaaotrossitios,comopodrscomprobarmsadelante.
Adelantndonosunpoco,elshellpuedehaceroperacionesaritmticasbsicas,ypodemos
aprovecharlasconelcomandoecho:
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.
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.
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.
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.
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.
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 "
" "
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.
Enelprimercaso,pedimosalsquelisteunarchivoexistente.Lolistaconxitoyportantoel
valorderetornovalecero.Enelsegundocasolepedimosquelisteunarchivoinexistente.Como
esonoesposible,elcomandonoterminaconxitoyelvalorderetornoesdistintodecero.
Lautilidaddeconocerelvalorderetornoalejecutarunprogramaennuestrosscriptssaltaalavista:
cuandoveamoslassentenciascondicionalespodremoshacerqueelscripthagaunacosauotraen
funcindesiunprogramaterminconxitoono.
Volveremosaverelvalorderetornocuandoestudiemoslasfunciones.
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
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 $?
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
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
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!
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)
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.
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
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.
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.
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
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.
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
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:
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.
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.
/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.
Introduccin
Yahemosvistoalgunoscomandostilesenloscaptulosanteriores.Comonuncadejaremosde
aprendercomandosnuevos,aquvanotroscuantosmsqueconvieneconocer.Ladescripcinque
sehaceaqudeellosesbastantebsica,perosiemprepuedesrecurrirasupginaman.Adems,en
estecaptuloseexplicancosasinteresantescomolagestindememoriaenLinux.
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.
wc(WordCount,contadordepalabras).Muestraelnmerodepalabras,bytesycaracteres
quecontieneunficherodeterminado.
strings.Muestraporpantallaloscaracteres"imprimibles"delosficherosbinarios.
tac.Haceexactamentelomismoquecatperomuestralaslneasenordencontrario(desdela
ltimahastalaprimera).
sort.Muestraelcontenidodeunfichero,peromostrandosuslneasenordenalfabtico.
df
df(DiskFree)nosinformadelespaciodisponibledelasunidadesdedisco(localesodered)que
tengamosmontadas.
# df
S.ficheros
/dev/hdd1
/dev/hda2
none
1K-blocks
6040288
11719052
128008
Unaopcintildelaquedisponeesm,quemostrarelespacioenMegaBytes.
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.
mc
Esteesunprogramaqueofreceunainterfazdeusuariobasadaentextobastantecmoda,
generalmenteparahaceroperacionesconficheros(especialmenterplicasdeundirectorioytodolo
quehayadebajodelocopiasgrandesdeunagranpartedelsistemadeficheros),oteneruna"vista
depjaro"delsistemadeficheros.
Suusoesintiutivo(ytodavamssencillositenemoshabilitadoslosserviciosderatnenla
consola),yporellonomerecemuchamsexplicacin.Recuerdaestecomandoporquenossertil
enelfuturo.
file
Estecomandonosindicarqutipodedatoscontieneelficheroquelepasemoscomoprimer
argumento.
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
Sep
Sep 5
Sep 5
Sep 5
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,
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.
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.
OtroaspectointeresanteyacomentadoesdefinirlavariabledesistemaPAGERcomo
/usr/bin/lessparapoderrecorrerlaspginasdelmanualcontodaslasfuncionesinteresantes
deless.Viendolaspginasdelmanualconlesspodemosusartodassustilesfuncionalidades,ya
descritasenlaComandostilesdeless.
AlgunasdistribucionesdeLinuxnotraeninstaladaslaspginasdelmanualencastellanopor
defecto,peropuedenteneresepaqueteenlosdiscosdeinstalacinoenInternet,llamado
generalmentemanpages-esonombressimilares.
5,UsuariosyGrupos.Permisos
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.
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'
echo -e "\n
44m
45m
46m
40m
47m";
41m
42m
43m\
$T
"
\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.
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.
|-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
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
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.
PRIORIDADesunvalorquevadesde20a+20(conelsignoincluido).20eslaprioridadms
alta(alcontrariodeloquecabrapensar),y+20lamsbaja.Slorootpuedeestablecerunproceso
aunaprioridadnegativa,losusuarioscomomximopuedenponerunprocesoenprioridad0.
COMANDOeselcomandoquequeremosejecutar(sloaplicableconnice),elmismocomandoque
ejecutaramosnormalmentecontodossusparmetrosyopciones.
PROCESO(sloaplicableconrenice)cambialaprioridaddelprocesocuyoPIDesPID_PROCESO
alnuevovalorindicado.
Introduccin
Hastaahorahemosvistocomomanejarnosconvarioscomandos,coneditoresdetexto,conlashell
yconelsistemaengeneral.Sinembargo,nosehaentradoenuntemabastantecomnenelmundo
delainformtica:lacompresindedatos.
Enestecaptulosepretendenensearlasutilidadesmscomunesdecompresinyarchivadode
ficherosydirectoriosdeLinux.Adems,estassoncomunesamuchos,pornodecirtodos,losUnix.
puedentomarcomoentradaundirectorioovariosficherosalavez.Poresoesimportantetar.Con
laayudadetarpodemosconvertirtodoundirectorioenunsoloficheroyunaveztenemosese
ficherogenerado,aplicarleunodelosalgoritmosdecompresin.
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
$
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
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:
Comoyahedichoantes,estasutilidadesnosonlibressongratuitasparausopersonal;perono
tenemosaccesoalcdigofuente.Asquedeberamosevitarutilizarestosformatosparacomprimir
nuestrosficheros.Yaqueademsdenoserformatoslibres,lacompresinesmuchomenorquecon
losformatoslibresquehemosvistoantes.
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.
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.
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.
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
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
[1]s:.*\[\([0-9]*\)\]\:.*$:\1:g
[2]s:\([a-zA-Z]\)\{3\}[
([^[]*\).*:\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"
.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.
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.
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
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.
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.
Poneroquitardeunrunlevelprogramasinstaladospornuestradistribucin.Estosyatendrn
unficherogeneralmente/etc/init.d/serviciodondeserviciosergeneralmente(y
estoesarbitrario,noesimprescindible)elnombreasociadoaldemoniooservicioqueinicie.
Poneroquitardeunrunlevelprogramasquehayamoscompiladodesdelasfuentes,creados
pornosotrososimilar.Enestecasonosotroscrearemoselscripten/etc/init.dylos
enlacessimblicos.
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.
EnRedHatysucedneos,estecomandoesequivalenteaservicemysqldstart.
Exactamentedelamismaformasepuededetenerunservicio:
# /etc/init.d/httpd stop
dentendraelserviciohttpdsuponiendoqueesteyaestuvieseiniciado.
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')
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>