476
© Antonio Castro Snurmacher  (2000)  http://www.ciberdroide.com/LLC/LLC.html CURSO DE LINUX PARA NOVATOS, BRUTOS Y EXTREMADAMENTE TORPES Autor: Antonio Castro Snurmacher. - 1 -

Curso linux a_castro

Embed Size (px)

Citation preview

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    CURSO DE LINUX PARA NOVATOS,

    BRUTOS Y EXTREMADAMENTE

    TORPES

    Autor:AntonioCastroSnurmacher.

    1

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    Primeraedicin(Nov2008)

    (PreviamentefuepublicadoenEne2000enformatohtmlenlawebhttp://www.ciberdroide.com)

    EstapginapuedeserredistribuidalibrementebajolostrminosdelalicenciaGPL.Vase(GPLtextooriginal)osiloprefiere(TraduccinespaolanooficialdelaGPL)Almargendelasobligacioneslegalesquesederivandelusodeestalicenciarogamossearespetadalareferenciaasulugardepublicacinoriginalwww.ciberdroide.com.yasuautororiginalAntonioCastroSnurmacher(Madrid01/01/2000).

    CopyrightMadrid(Enero2000).

    2

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    AusenciadeGaranta

    Estaausenciadegarantasehaceextensaacualquiertipodeusodeestematerialymuyespecialmentealasprcticas,ejercicios,ydeejemplosqueencuentreenestaspginas.DebertrabajarsiempresalvoindicacincontrariaconunSOLinuxyconunusuariodistintode'root'sinprivilegiosespeciales.Comodirectoriodetrabajoseprocurarusareldirectorio'/tmp'oalgnotroquenocontengainformacinvaliosa.Tampocoseconsiderabuenaideapracticarenunamquinaquecontengainformacinvaliosa.

    Todoestosonrecomendacionesdeprudencia.Encualquiercasosialgosalemaltodalaresponsabilidadsernicamentesuya.Enningncasopodrreclamaranadiepordaosyperjuiciosderivadosdelusodeestematerial.Abstngasedehacerprcticassinoestdispuestoaasumirtodalaresponsabilidad.

    s

    Notasdelautor:

    Estecursohasidoreeditadoparacambiarelformatodeltexto.Nosehatocadoapenaseltextoqueesdehaceochoaos.Estpendientedecorreccinortogrficaydeestilo.Peseasusfallos,hasidoampliamentedescargadoenInternet.LamayorpartedelcursoconservasuvigenciagraciasatratarlosfundamentosUNIXdelS.OLinux.ElcursoesunaintroduccingeneralalossistemasoperativotipoUnixengeneralyLinuxenparticular.

    Perdonelacrudezadenuestrottuloperocuandoterminelaprimerapartedeestecursosentirquehasuperadounadesagradablefasedesuexistenciaypodrrersedelafaltadeconocimientosdesuvecino.

    3

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    Cuandotermineustedlasegundapartenoscomosesentirusted,peroyomesentirfelizporquetodavanoestterminada,yparacuandodecidaterminarlaseguramentehabrquecambiaralgunascosas.Lasegundapartedeadministracinhaperdidomsvigenciaquelaprimeraquecontinuasiendobsica.

    Parauncorrectoaprovechamientodelcursoserecomiendaunalecturasecuencialdecadaunodeloscaptulosenordenestablecidoenestendice.(secuencialquieredecirprimeroel1,luegoel2,luegoel3,etc...)

    Efectivamenteesteltimocomentarioentreparntesisvaespecialmentededicadoanuestropblicopredilectoalquenosreferimosenelttulo,peroalgunoslistillostambindeberanprobarnuestrocurso.

    Lasconvencionesutilizadasenestecursoylametodologadetrabajotambinseexplicandeformaprogresivaporlocualsaltarseuncaptulopuedellevarleainterpretarerrneamenteelmaterialdelcurso.Posiblementeesteustedtentadodeempezardirectamenteporlasegundapartedelcursoperodemomentonosehaconsideradofacilitarestalabor.

    Estecurso,comoyahemoscomentado,constaporelmomentodedospartesbastantedistintas.

    d

    *LaprimeraparteIniciacinalSOLinuxasumeunnivelcerodeconocimientos.Nisiquieraasumiremosunaciertaexperienciaconordenadoresylascosasseexplicarnenestaprimerapartepasoapasofacilitandolomximoposiblelalabordelalumno.RomperemosalgunosmitosquepresentanaLinuxcomoSOparagurs.Enestapartenoentraremosnuncaaexplicarcosasquenecesitenforzosamenteunacuentadesuperusuario.Ello

    4

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    implicaraciertoriesgoyaquesetratadeunusuarioconpermisosenelsistemaparahacercosasdetodotipo.

    LasegundaparteUsuarioavanzadodeLinuxasumequeyahaasimiladolaprimerapartedelcursoyprobablementetodassusinseguridadeshabrndesaparecido.Estapartetocaralgunostemasmsrelacionadosconlaadministracindelsistemaypuntualmentenecesitaremosaccesoaunacuentadesuperusuario,peronoseruncursodeadministracindeLinux.ElobjetivonoesadministrarunsistemaconmuchosusuariossinolograrunrazonableniveldeautosuficienciaconLinuxconsiderandolasnecesidadesdeadministracindelsistemaenordenadorespersonalesconLinuxydebecontemplarsecomouncursointermedioentreuncursodeIniciacinyunodeAdministracin.

    Encualquiercasofinalizadoestecursoqueempiezadesdeunniveldeconocimientoscero,yqueavanzaconsolidandolosconceptospasoapaso.Peseaelloesuncursomuyambicioso.ConllograrconlunabasedeconocimientosqueledarnunagranseguridadalahoradeabordarcualquierdesafoenesteS.O.

    5

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    ndicedecontenidoPARTE(I)INICIACICIONALS.O.LINUX............................................7

    AQUIENVADIRIGIDOESTECURSO.............................................7INTRODUCCIONALINUX..............................................................12ALGUNOSCONCEPTOSBSICOS.................................................18ELMANUALDELSISTEMA............................................................26LASHELL...........................................................................................30INTRODUCCINALOSPROCESOS..............................................50MSSOBREPROCESOSYSEALES............................................57SISTEMADEFICHEROS(Primeraparte).........................................72SISTEMADEFICHEROS(Segundaparte)........................................87SISTEMADEFICHEROS(Terceraparte).......................................100ALGUNOSCOMANDOSTILES..................................................116EXPRESIONESREGULARES.........................................................148ELEDITORVI(Primeraparte).........................................................163ELEDITORVI(SegundaParte)........................................................187PROGRAMACIONSHELLSCRIPT(PrimeraParte)......................201PROGRAMACIONSHELLSCRIPT(SegundaParte)....................214EJERCICIOSRESUELTOSDESHELLSCRIPT...........................277

    PARTE(II)USUARIOAVANZADODELINUX...............................286INTRODUCCINALASEGUNDAPARTEDELCURSO..........286LAMEMORIAVIRTUALENLINUX............................................319LAPRIMERAINSTALACIONDELINUX....................................333TERMINALES...................................................................................354PROGRAMACIONDETAREASENELTIEMPO........................373INTRODUCCIONAREDES............................................................387ELARRANQUEENLINUXYCOMOSOLUCIONARSUSPROBLEMAS(PrimeraParte)..........................................................416ELARRANQUEENLINUXYCOMOSOLUCIONARSUSPROBLEMAS(SegundaParte).........................................................433CONSEJOSGENERALESPARACOMPILARKERNELS...........457

    6

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    PARTE(I)INICIACICIONALS.O.LINUX

    AQUIENVADIRIGIDOESTECURSO

    EstaprimerapartedelcursoesunaintroduccingeneralalossistemasoperativostipoUnixengeneralyLinuxenparticular.

    EstonopretendeserunHOWTOniunaFAQ,niunaguadeusuario,deprogramacin,odeadministracin.Tampocoesunaenciclopediasobreeltema.EstoesuncursodeiniciacindeUnixusandoLinuxparailustrarlosejemplos.

    Tampocoesunaguaparahacerlascosasarrastrandoysoltandodesdeunescritorio precioso. Linux tiene varios escritorios de este tipo peronosotrosusaremoslaconsola.Unescritoriopuedesermsagradableymsintuitivoperonotodaslascosaspuedenhacerseapretandounsolobotn.Ademsestoesuncursoyparaaprenderausarunescritorionohacefaltauncurso.

    Ustednonecesitaparaestaprimerapartedelcursoteneraccesoaunacuenta de administrador (root), ni tendr que usar ningn entorno deprogramacinsalvolapropiashell.

    Lo que se busca es consolidar unas bases tericas de los conceptosfundamentales comunes a los SO tipo Unix. Enunapalabra se buscacomprenderelfuncionamientodeesteSO.Apesardeellosuenfoqueesprctico porque se ilustran los conceptos con ejercicios y porque seprofundiza especialmente sobre los aspectos que pueden resultar deutilidadmsinmediataparaunnovato.

    NoprejuzgueaLinuxcomounsistemanoaptoparausted.

    Al finalizar la primera parte del curso usted tendr conocimientossuficientesparaentender comofuncionaLinuxparaunusoanivelde

    7

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    usuario normalito y podr utilizar el potentsimo lenguaje shellscript.Este lenguajey la basedeconocimientos deestecursole abrirnunaenormevariedaddeposibilidades.

    Pordecirlo dealgunamaneracuandotermine laprimera partedeestecursoserplenamenteconscientedelaenormepotenciayflexibilidaddeesteSOysesentircapazdehacercosasqueahoraquizsleparezcanimpensables.

    Esperamosqueestonoleconviertaenunrepugnantelistilloinformticoperoyadijimosquenonoshacemosresponsablesabsolutamentedenada.

    Cuando termine la segunda parte se sentir afortunado de ser un ...Mmmm...supervivientequellegalfinaldelcurso.

    Usaremosunlenguajeacordealafaltatotaldeconocimientosprevios,encambioasumiremosquepuedeusarunordenadorconLinuxinstaladoylistoparapracticar. Esdecir noexplicaremoscomose instala linuxnicomocrearunacuentadeusuarioperoasumiremosqueyadisponedeambascosasyqueescapazdeabrirunasesindetrabajo(esdecirhacerloginconunusuarioypasswordvlidas)

    Siesustedunvirtuosodelazadnylapala,enhorabuenaporqueestecursoeselindicadoparaustedperosustituyaesasherramientasporunordenador.LosejemplosyejerciciosestnpensadosparaquelospruebeensuordenadorconsuSOLinux,ylapala,azadnyotrasartessimilaresno le serndemuchautilidad para este curso. (Esperoque mi amigoDavidseenterebiendeestoltimo).

    Buenoconestetipodecomentariosquizspiensequeestecursoespocoserio.Elusodeunpoquitodehumorloharemosdurantelasprimerasleccionesparaquesesientamasrelajado.

    LinuxesunSOtipoUnixyporlotantosusconceptosmsbsicossoncomunes a los que incorpora cualquier sistema tipo Unix y resultan

    8

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    bastante distintos de otros conceptos que forman parte de la culturamicroinformticafundamentalmentedeMicrosoft.

    La documentacin de Linux es muy abundante, sin embargo muchasvecesseasumeunaculturageneraldeUnixquerealmentenosiempreexiste.LasgeneralidadesmsbsicasdeUnixmuchasvecessetratandeunmodosuperficial y pocosistemtico quizs porqueson temas muyviejos.

    Elcontenidodeestecursoesenmsdeun90%serviraparacualquierSOtipoUnixynosoloparaLinux.

    Enestecursoseexplicarnconceptosqueincidenelconocimientointernodelsistemaoperativo.AestasalturasmsdeunoempezarapreguntarsesirealmenteesnecesarioconocertodosestosdetallesparaunsimpleusodeunSO.Lociertoesqueactualmenteexistenescritoriosgrficosquepermitenhacerbastantescosasdeformaintuitiva.EnLinuxtenemosporejemplo KDEo GNOMEque permiten usar los programas de formamuchoms amistosa e intuitiva. Sin embargo la amistosidad tiene unprecio. Los entornos intuitivos no permiten hacer cualquier cosa yconsumenmuchosrecursosdeCPUymemoria.EnLinuxestosentornossonunaopcinnounaobligacin. Estecursoestaorientadoal usodeLinuxdesdelaconsola.ParasacarleelmximoprovechoyparaalcanzarciertodominiodellenguajeshellscriptnoquedamsremedioquetratarestostemasperoestamossegurosdequeunavezalcanzadoelfinaldeestecursotendrunavisindeUnixquelepermitiratreverseconcosasimpensablesahora.

    Tambinseproponeelaprendizajedeloscomandosmsinteresantesdelsistemaparapoderhacerungrannmerodecosasyalcanzarunaltoniveldeautosuficienciaensumanejo.

    Estecursoessuficienteparaqueunapersonaquenicamentepretendadefenderseenestesistemaoperativoconsigasupropsito,peroademspermite que el usuarioconozca aspectos queson imprescindibles parapoderavanzarmuchomsporsucuentasieseessudeseo.

    9

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    Seevitarenloposiblemencionaraspectosrelativosalaadministracindelsistemayaqueestoseraobjetodeotrocurso.

    Existen documentos que tratan de la administracin de Linux y de lainstalacindeLinux.

    Si usted pretende usar su propio SOLinux en su ordenador personalconvendraquecontinuaraaprendiendolaadministracindeunSOLinuxyaqueustedseraeladministradordesusistema.RecuerdequeLinuxnofueconcebidocomosistemamonousuario.Solounarecomendacinmuybsica.Tengaensuordenadorcomomnimodosusuarios.Unoseraelsuperusuario'root'concapacidadilimitadaparalobuenoyparalomaloyotro su usuario de trabajo normal. La razn es que una equivocacincometidadesdeunusuarionormalsolopuedetenermalasconsecuenciasparaelreadetrabajodeeseusuario.Porelcontrariounaequivocacindesde'root'puededestruirtodalainformacindesusistema.

    DadoquevamosausarLinuxdesdeconsolayalgunosusuariospuedentenerexperienciapreviaconMsdos,meparecenecesariohacerunanuevaadvertenciadestinadaaestosusuarios.

    El comportamiento del interprete de comandos de Msdos y de Linuxtienenalgunasemejanzaperoalgunascosasqueestamosacostumbradosausar en Msdos no son otra cosa que burdas imitaciones de lasextraordinariasposibilidadesdelinterpretedecomandosdeLinux.ComoconsecuenciadeestounintentodehacerenLinuxcosasparecidasalasquehacemosenMsdospuedellevaradesagradablessorpresasyaqueenLinux se requiere tener una idea de como funciona el interprete decomandos.

    Darunarelacindecomandosequivalentesentre(UnixoLinuxyMsdos)sin explicar nada ms puede llevar a confusiones peligrosas. Enotraspalabras,puedescagarlasitepasasdelisto.Enestesentidoloscomandosbsicosparaelmanejodeficheros'rm','mv',y'cp'nosedeberanusarsincomprender correctamente el funcionamiento bsico del interprete decomandosdeLinuxyenparticularcomoesteexpandelasordenes.

    10

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    Unintento deusar Linuxsin unpequeoes fuerzodeasimilacindealgunos conceptos puede llevar a situaciones muy frustrantes. ExisteinclusohoyendaunagrancantidaddeprofesionalesquehantenidoquetrabajardurantemesesoaosconalgnSOtipoUnixsinquenadielesexplicaralascuatrocosillasbsicasimprescindibles.Estoocurreporquepara otros SO resulta perfectamente posible aprender por uno mismopracticandoconelsistemaperoennuestraopininlosSOdetipoUnixrequieren la asimilacin de unos conceptos bastante simples pero enabsolutointuitivos.LosusuariosquetienenalergiaalosmanualesyquenorecibieronformacinparaUnixraramentelleganaentenderesteSOyeslgicoqueseencuentrenadisgustoyquemaldiganaesteSO.MuchosnoconsideraronnecesarioquefueraimportanteasimilarunosconceptosbsicospreviosyaquelaexperienciaanteriorconotrosSOmsintuitivoslesindujoapensarqueconelsimpleusodelSOpodranalcanzareseconocimientoporellosmismos.LosquetuvieronlasuertederecibirunbuencursooparalosquetuvieronlapacienciadeinvestigarporsucuentalosfundamentosdeesteSO,esfcilquelleguenaenamorarsedeel.Unixsiemprehadespertadoestasdosreacciones. Hayquienloadorayhayquienloodia.LosqueloadoranaseguranqueesunSOsencillo,elegante,potente y flexible. Los que lo odian dicen que es difcil de usar.Intentamosconestecursoquellegueapensarcomolosprimeros.

    11

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    INTRODUCCIONALINUX

    Unpocodehistoria

    Linuxesunkernel(unncleodeunsistemaoperativo)creadoporLinusTorwalds. Naci en Finlandia el 28 de Dic 1969 y estudi en launiversidaddeHelsinki.DesarrollLinuxporquedeseabadisponerdeunSOUnixensuPC.ActualmentetrabajaenlosEE.UU.

    LinusT.quisocompartirsucdigoparaquecualquierapudierausarloycontribuir a su desarrollo. Dado que en GNUya haban desarrolladobastantesherramientasparaUnixconlamismafilosofadesoftwarelibrepronto se consigui un SO Linux/GNU totalmente libre. Dos de lasherramientasmsimportantesaportadasporGNUfueronelinterpretedecomandos,yelcompiladordeC.

    En los comienzos Linuxera un sistemaprincipalmente adecuadoparahackersypersonasconmuchosconocimientostcnicos.Actualmenteyanoesas.Elcrecimientoennmerodeusuariosvienesiendoexponencialdesdesuscomienzosen1991.ActualmenteyaempiezaaservistocomounaalternativaalosSOdeMicrosoft.PuesestahistoriadelahistoriadeLinuxestancortacomosupropiahistoria,porlocualesteapartadoyaestambinhistoria.Nosedesmoralice.Sinohaentendidoesteltimojuegodepalabras,puedepasaralsiguienteapartadosinpreocuparsemuchoporello.

    Tiposdelicenciaslibres

    La licencia ms utilizada en Linux es la licencia GPLde GNU. Sinembargo hay otras licencias igualmente aceptables bajo el trmino desoftwarelibre.

    12

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    Unbuenlugarparainformarsesobrelostiposdelicenciaslibresesel'DebianPolicyManual' enestedocumentoseestablecenunoscriteriospara establecer si Debian considera o no libre una licencia. Esto sedescribeacontinuacindeformaresumida.

    Libertaddedistribucin

    Se refiere a la libertad de comercializar el software sin que seanecesariopagarderechosdeningntipo.

    Cdigolibre

    Seconsideraqueelcdigoeslibrecuandolosfuentessondedominiopblico.

    Integridaddelosfuentes

    Serecomiendanorestringirlosderechosdemodificacindelcdigofuente,aunqueseaceptanalgunasfrmulasquerestringenlaformadeefectuar ciertas modificaciones pero no entramos en estos detallesahora.

    Nodiscriminacinparagruposopersonas

    Lalicencianoconsideradistincinalgunaparaningntipodepersonaogrupo.

    Nodiscriminacinparaactividadopropsito

    Por ejemplo no se distingue entre uso comercial, domstico,educativo,etc.

    Distribucindelalicencia

    13

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    Lalicenciaafectaralassucesivasdistribucionesdelosprogramasdeformaautomticasinnecesidaddetrmitealguno.

    LalicencianodebedeserespecficadeDebian

    Esdecir DebiannoadmitiraunalicenciaqueimpidaelusodeunprogramafueradeladistribucinDebian.

    Lalicencianodebecontaminarotrosprogramas

    Lalicencianodebeimponerrestriccinalgunaaotrosprogramas.Porejemplonoseraadmisibleobligaraqueelprogramasolosepuedaredistribuirenunmedioquenocontengasoftwarecomercial.

    Ejemplosdelicenciaslibres

    GPL,BSD,yArtisticsonejemplosdelicenciaslibres.

    Cada licencia tiene sus peculiaridades. Por ejemplo si usteddesarrollaaplicaciones haciendo uso de fuentes protegidas pajo la licencia GPLestarasumiendoparatodosudesarrollolacondicindeGPL.EncambiopodradesarrollarsoftwarepropietarioderivadodefuentesbajolicenciaBSD.LaGPLsehahechomuypopular porqueprotegeel legadodelsoftwarelibreparaquecontinecomotal.

    QueesLinux/GNU

    QuizshaledoqueLinuxsignifica 'L'inux 'I's 'N'not 'U'ni'X'. PeroenrealidadLinuxesunncleodeSOtipoUnix.SucompatibilidadPosixesalta.ElSOsecomplementaconunaseriedeaplicacionesdesarrolladasporelgrupoGNU.Tantoestasaplicacionescomoelncleosonsoftwarelibre. Linux/GNU es un SO tipo Unix, SO Multiusuario, Multitarea,Multiprocesador,Multiplataforma,Multilingue,nacidoenlaredderedesInternet.

    14

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    UnixseoriginoenloslaboratoriosBelAT&Tacomienzosde1970yelMsdos tom muchas ideas de este SO pero sus planteamientos eranmucho ms modestos y solo se intento implementar unas burdasimitacionesdeunascuantasbuenasideasdeUnix.Elsistemaenrboldedirectorioslaredireccindeentradasalidaylaestructuradeuncomandoporejemplo.MsdosnacicomounjuguetitocomparadoconUnixyluegolanecesidaddemantenerlacompatibilidadconversionesanterioreshacondicionado fuertemente el crecimiento de Msdos primero y deWindowsdespus.PorelcontrarioUnixhamantenidolacompatibilidadconversionesanterioressinningnproblema.TradicionalmentelosSOUnixsehancaracterizadoporserpocointuitivosdecaraalusuario.Estoesta cambiando rpidamente porque Linux est ofreciendo cada vezentornos ms intuitivos para su utilizacin. Esto es resultado delacercamientoprogresivodeLinuxhaciaelusuariodomsticoyofimtico.

    Detodasformasexisteunabarreradetipocultural queconvienetenerpresente.Muchosusuarioshoyendasabenloquesignifica'formata:'.a:eselnombredeunaunidaddedisqueteenMsdosoenWindowsperoenLinux no existen unidades lgicas. En Linux deberamos hablar desistemasdeficherosenlugardeunidadeslgicasqueesunconceptomuydistinto.

    DistribucionesdeLinux

    LinuxesunncleodeunSOperoparatenerunSOoperativocompletohay que acompaarlo de un montn de utilidades, dotarlo de unaestructuradedirectorios,ascomodotarlodeficherosdeconfiguracin,yscripts paramuydistintas tareas. Unscript esunficheroquecontieneinstruccionesparaelintrpretedecomandos.Todasestascosasjuntasybienorganizadassonlascosasquedebeproporcionarunadistribucin.Algunas distribuciones incluyen software comercial de su propiedad.OtrasencambiosoloincorporansoftwareGPLosimilar.(softwarelibre)DistribucioneslibressonSlackwareyDebianporejemplo.DistribucionespropietariassonRedHat,SuSE,Caldera,Mandrakeetc.

    15

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    Cadadistribucin tiene sus propias caractersticas que la hacenms omenosadecuadaparaciertosusos.

    UnodelosaspectosmsimportantesdelasdistribucionesessusistemadeactualizacindepaquetesquepermiteactualizarelSOacadanuevaversinteniendoencuentalasdependenciasentreunospaquetesyotros.

    Lasaplicacionesenformatobinariopuedenfuncionarenunadistribucinyencambionofuncionarenotra.Sinembargopartiendodelosfuentesdeuna aplicacin casi siempre basta con recompilar la aplicacin paraobtenerunbinarioquefuncioneenesadistribucin.Estosedebealusodelibrerasdinmicasquepuedenvariardeunasdistribucionesaotras.Paraobtenerunbinarioquefuncioneencualquierdistribucinsepuedecompilarunaaplicacinestticamentelocualhacequeelejecutableseamucho mayor. Estos problemas estn en vas de solucin ya que lasdiferentesdistribucionesestnhaciendoesfuerzosdeestandarizacinparaque cualquier aplicacin pueda funcionar en cualquier distribucin deLinux.Entretodasellashayalgunasespecialmentefamosasporalgunauotrarazn.

    Slackware esunadistribucintotalmentelibreymuysencillaenelsentido de que est poco elaborada. Resulta adecuada paracacharrearconella.FuecreadaporPatricVolkerding.Fueunadelasprimerasytuvosupocadegranaugeperoactualmentehacedido protagonismo. No dispone de un buen sistema deactualizacin.

    Debian es unadistribucin totalmente libredesarrollada porungrupomuynumerosodecolaboradoresenelmspuroespritudeLinux.Sucalidadesextraordinaria.Setratadeunadistribucinmuyseriaquetrabajaporelplacerdehacerlascosasbienhechassin presiones comerciales de ningn tipo pero que resulta msadecuadaparausuariosconconocimientospreviosyaqueelgradode amistosidad en especial para los novatos deja bastante quedesearsisecomparaconalgunasdistribucionescomerciales.LosusuariostpicosdeDebiansonaquellosquetienencomomnimoalgnconocimientotcnicoyquetampocotienenreparosalahora

    16

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    deinvestigarunpocolascosas.ElidiomasobreelcualtrabajaysecoordinaelgrupoDebianeselInglesyporejemplolosbugsdebenser reportados en Ingles. La seguridad, y la deteccin yrpidacorreccindeerroressonsuspuntos fuertes. Soportaunenormenmerodepaquetes.Esunadistribucintremendamenteflexible.Susistemademantenimientodepaquetes'dpkg'tambinesdelomejor.

    RedHat esactualmenteladistribucinmsampliamentedifundidaaunque eso no significa que sea la mejor. Ofrece un entornoamigablequefacilitalainstalacin.Incorporasoftwarepropietariodegrancalidad. Elsistemadepaquetes 'RPM'esmuybuenoyutilizadoporungrannmerodedistribuciones.

    SuSE Es una distribucincomercial alemana que ha tenido uncrecimiento espectacular. Ofrece un entornomuyamigable quefacilita mucho la instalacin. Seguramente es la ms fcil deinstalarydemantener.CapacidaddeautodeteccindeHardware.Incorpora abundante software propietario de gran calidad. EngeneralsepuededecirqueesmuycompletaymuyrecomendableparacualquieraquenotengamuchosconocimientosdeLinux.

    Caldera Es una distribucin comercial. Ofrece un entornoamigablequefacilitalainstalacin.Incorporasoftwarepropietariodegrancalidad.

    Laeleccindeunadistribucinvienecondicionadapormuchosfactores.Haymuchasdistribucionesactualmenteycadapocoaparecennuevas.

    17

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    ALGUNOSCONCEPTOSBSICOS

    Visinpanormica:

    Ensumomentotrataremoslostemasabordadosenestecaptulodeformacompleta.Enestemomentodadoquepartimosdecerosehacenecesarioal menosesbozar unaserie deconceptos queson tanelementales quedifcilmentesepuedeexplicaralgosinhacerreferenciaaellos.

    Porotraparteestosconceptosestninterrelacionadosdetalformaquetampocosepuedeabordarningunodeellosendetalleenestemomento.PorellonuestroprimerobjetivoesofrecerunavisinpanormicadelSO.Porborrosaqueresultesiempresermejorestoqueempezardirectamenteabordandoendetallelostemas.

    UsaremosmuchasvecesdeformaindistintaUnixyLinux.Nosoncosasequivalentes pero en este curso consideraremos ambas cosas comoequivalentessalvoqueconcretemosdetallesespecficosdeLinux.ParanosotrosLinuxesunSOtipoUnixyprecisamentenoscentraremosenlosaspectos ms generales de estos sistemas operativos. Entre suscaractersticas ms destacables est la de ser un SO multitarea ymultiusuario. Unsistemamultitareaesaquelquepuedeejecutarvariosprocesos simultneamente. Para ello se puede usar uno o msprocesadoresfsicos.Enelcasodeunsoloprocesadorloqueocurreesqueeltiempodelprocesadorsevarepartiendoparaatenderlosdistintosprocesos creando la ilusin de que todo ocurre simultneamente. Unsistema multiusuario es aquel que est pensadopara ser utilizado porvariosusuariossimultneamente.Enlaprcticaunsistemamultiusuariorequierecapacidadmultitarea.EnelcasoconcretodeLinuxesademsunSOmultiplataformayaquepuedefuncionarendiferentesarquitecturas.

    18

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    Losconceptosquemencionemosenestecursoprocuraremosilustrarlosconejemplos.

    Elcomando'echo'esuncomandoquevamosausarmuchoparapracticar.Estecomandoselimitaavisualizarenpantallatodoaquelloqueselepasacomoargumentos.Poresonosresultarmuytil.

    Loprimeroquevamosapracticaryquenodebeolvidareselhechodeque en Unix los ficheros, comandos etc. deben indicarse exactamenterespetandoladiferenciaentremaysculasyminsculas.

    $ echo hola$ ECHO hola

    LasegundalneahabrproducidounmensajedeerrorporquenoexisteningncomandollamadoECHOconmaysculas.

    Variablesdeentorno:

    Empezaremoshablandodelasvariablessinprofundizarahoraenello.Unavariablesoloesunelementoquetieneunnombreyqueescapazdeguardarunvalor.Paradefinirunavariablebastaponersunombreunigualysuvalor.(Ojonodejarespacios).

    $ VAR33=valor_de_la_variable_VAR33

    EnUnixlasvariablesdelsistemasellamanvariablesdeentorno.Paraconsultarelvalordeunavariableseutilizaelnombredelavariableprecedidopor'$'.

    $ echo $VAR33

    Paravertodaslasvariablesysusvaloresseutilizaelcomandoset.

    19

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    Parahacerlavariable exportableseusael comando'export'. Sepuedehacerqueunavariableseadesololecturaconelcomando'readonly'.Estecomando sin parmetros mostrar todas las variables que son de sololectura.Pruebeestoscomandos:

    $ set$ readonly$ export

    Existenalgunasvariables predefinidas yhaytresvariables importantesquemencionaremosenseguidayqueson$PATH,$PS1y$PS2.

    Directorios:

    Aqutambintenemosquehacerunpequeoavancesobrelaestructuradedirectorios deUnixporquesi nopuedequenoseentienda lo quevamosahablarsobrelavariable$PATH.

    EnUnixlaestructuradedirectoriosesenformaderbolsimilaraladeMsdos.Dadoquelaestructuradedirectoriosseorganizacomolasramasdeunrbolparalocalizarunpuntocualquierahayqueutilizarcadaunode los directorios que conducen a ese punto desde el directorio raz.Nosotros lo llamaremoscaminoyenUnixse lesuele llamarpath. Seempiezaeneldirectoriorazrepresentadopor'/'yseavanzaporlasramasdeeserbolseparandocadaidentificadorporunnuevocarcter '/'. Deesta forma '/usr/local/bin' indica un lugar concreto en el rbol dedirectorios.QuizssepregunteporquUnixusa'/'enlugarde'\'comoenMsdos.RecuerdequeMsdosfueposterioraUnixyqueaBillGateslegusta inventar cosas totalmente nuevas y revolucionarias. Aunque elastutolectoryasehabrdadocuenta,adviertoalosdespistadosqueestoyironizando.

    Aprovechandoqueestamoshablandodedirectoriosmencionaremosquehaydirectoriosconsignificadoespecial.Esteldirectorioraz'/'queyahemosmencionado. Est el directorio 'home'queesel puntodondeel

    20

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    sistemanossitaparatrabajarcuandoentramosenl.RecordemosqueenUnixnormalmentenodisponemosdetodoelsistemaparanosotrossolos.Luegopodemoscambiardedirectoriodetrabajo.Eldirectoriodetrabajoactualserepresentacomodirectorio'.',Eldirectorioanteriorodirectoriopadredeestedirectorioserepresentapor'..'.Loscomandos'cd','mkdir'y'pwd' sirven para cambiar de directorio actual, crear un directorio yaveriguarenquedirectorionosencontramosactualmente.

    Estamosdandoideasenformaintuitiva.Enrealidadcuandodigo"...enque directorio nos encontramos actualmente ..." es una forma deexpresarse. Normalmente el usuario no estar en un directorio sinosentado en una silla sentado delante de una pantalla, pero la shellmantieneentodomomentoalgndirectorioabiertocomodirectoriodetrabajoactual.

    Comandos

    Uncomandoesgeneralmenteunficheroejecutablelocalizadoenalgunapartedenuestrosistema.Existeunavariablellamada$PATHquecontieneunalistadecaminosdebsquedaparaloscomandostodosellosseparadospor':'.Compruebeelvalordesuvariable$PATH.

    $echo$PATH

    Siuncomandonoestlocalizadoenningunodeesoscaminosdeberserreferenciadoindicandoelcaminocompletoyaquedeotraformanopodrserreferenciado.Siquieresaberdondeseencuentraunejecutableuseelcomandowhich.Estecomandobuscarenloscaminoscontenidosenlavariable$PATHhastaqueencuentreelcomandoyentoncesmostrarelcamino completo que conduce al comando. Puede ocurrir que uncomandoseencuentreduplicadoyquelosdossitiosdondeseencuentrefiguren en el $PATH. En ese caso se ejecutar el comando que seencuentreenelprimercaminoreferenciadoenel$PATH.Igualmenteelcomando which solo mostrar el primer camino referenciado en el

    21

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    $PATH.Estamosusandouncomandollamadoechoparamostrarvalores.Vamosalocalizarlo.

    $whichecho

    Echo esta situado en uno de los caminos contenidos en $PATH. Enresumidas cuentas $PATH es una variable que usa el interprete decomandosparalocalizarloscomando.Enlaleccinsiguientehablaremosde'man'.EsuncomandoquesirveparaconsultarelmanualenlneadeLinux.Puesbienexisteunavariablellamada$MANPATHquecontienelalistadeloscaminosdondeelcomando'man'debebuscarlaspginasdelmanual.Lavariable$MANPATHserusadaporelcomando'man'yquizsalgnotro.Lavariable$PATHserusadaporlashellyquizsporalgn otro comando como por ejemplo 'which' del cual acabamos dehablar.

    Somosconscientesdequenoestamosexplicandograncosaahora,perosonconceptosmuyelementalesquevamosautilizarantesdeexplicarenprofundidadtodoelsistemadeficherosdeUnix.

    Msadelantetambinhablaremosmsdetenidamentesobrelasvariablesde entorno. Estamos dando unos pequeos esbozos sobre algunascuestionesporquehaymuchainterrelacindeunosconceptosconotrosyresultaimposibleabordarnadaenprofundidadalprincipio.

    Usuarios

    Linuxesunsistemaoperativomultiusuarioyesoimplicaunafilosofadeuso muy distinta a la del tradicional ordenador personal. Cuando unusuario vaa usar un SOTipoUnix lo primero que necesita hacer esidentificarseparaserautorizadoaabrirunasesindetrabajo.Tambinesmultitareayporelloenelmismoinstantevariosprocesospuedenestarfuncionando y cada uno puede pertenecer a usuarios distintos. Lainformacinqueseguardaeneldiscodurotambinpuedeperteneceradistintosusuariosyparaevitarquetodoelloprovoqueconflictosexisten

    22

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    unosatributosdeusuarioqueseasocianalosficherosalosdirectorios,alosprocesos,etc.Enfuncindeestohaycosasqueestarnpermitidasaciertosusuariosyaotrosno.

    Losusuariospuedenestarorganizadosendiferentesgruposafindepodermanejar permisos a nivel de grupo. Esto se hace para simplificar laadministracindelsistema.

    LosusuariosylosgruposdentrodelsistemasemanejancomounnmerollamadoUIDyGIDrespectivamente.Losnmerosenunordenadorsemanejanconmuchamsfacilidadqueunliteral. PoresoelnombredeusuarioyelnombredegruposeguardarnsoloenunficherojuntoalnmeroUIDyGIDasociado,peroparaelsistemaunusuario,ungrupo,unproceso,unfichero,ymuchasotrascosasseidentificanporunaclavenumrica.Paraunordenadorresultamssencilloconsultarsielproceso456pertenecientealusuario105tienepermisodeescrituraenelfichero48964queconsultarsielusuario'pepito'pertenecientealgrupo'alumnos'tiene permiso de escritura en el fichero '/home/pepito/leccion005.txt'.Cuandoelordenadortienequemostrarinformacinenformatointeligiblebuscarladescripcincorrespondienteacadaclavenumrica.Cadaclaverecibe un nombre como por ejemplo los UID, GID que ya hemoscomentadootraseraporejemploelPID,paraprocesosyexistenotrasmuchasmsqueiremosaprendiendoyqueformanpartedelajergadeesteSO.

    Para ver los datos de identificacin relativos a su usuario pruebe losiguiente:

    $ id

    El comando 'id un' o el comando 'whoami' muestran su nombre deusuario.

    $ whoami

    23

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    Existe un usuario especial que goza absolutamente de todos losprivilegiosyquesellamaroot.SunmerodeusuarioesdecirsuUIDes0.

    ElNcleodelsistema(kernel)

    Elncleodelsistemallamadotambinkerneleselencargadoderealizarlamayoradefuncionesbsicasdelsistemaygestionaentreotrascosaslamemoria,losficheros,losusuarios,lascomunicaciones,losprocesos,etc.Lagestindeestascosassehacenpormediodeunlimitadonmerodefuncionesquesedenominanllamadasalsistemayquepuedenserusadasporlosprogramas.Losprocesosqueusanunallamadaalsistemacambiansumododeejecucin.Mientrasestnejecutandolallamadadelncleosedicequeestnenmodoncleoycuandoestnejecutandocdigoquenopertenecealncleosedicequeestnenmodousuario.Sondosnivelesdeejecucindistintosyaqueelmodoncleoesunmodoprivilegiado.Estogarantiza a nivel de hardware que ningnprogramade usuario puedaaccederarecursosgeneralesdelsistemaniinteractuarconotrosprocesosanoserqueuselasllamadasdelncleolascualesestablecernsitieneonopermisoparahacerciertascosas.Estoproporcionagranrobustezdefuncionamiento. Un programa mal diseado no perjudicar jams alsistema ni a otros procesos. Cada proceso tiene su propia zona dememoria y no puede acceder fuera de ella ni intencionadamente niaccidentalmente. Para que un programa pudiera tener un efectodestructivoenelsistematendraquepertenecera 'root' operteneceralpropioncleodelsistemaysoloeladministrador'root'puedealterareldicho ncleo. Si el ordenador aparece un buen da destrozado amartillazostambinbuscaranlaformadeculpara'root'paranoperderlacostumbre.

    Procesos

    Unprocesoadiferenciadeunprogramaesalgovivoesdeciralgoqueestfuncionando.Enunsistemamultitareacomoeste,unprogramapuededar lugar a varios procesos. A cada proceso le corresponder con un

    24

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    nmero de identificacin llamado PID que le identifica totalmente.Ademsdeestoseguardalainformacindeidentificacindelusuariopropietario.Cuandounusuarioejecutauncomandosearrancaelprocesocorrespondientedelcualgeneralmentepermanecercomopropietario.Esdecirelsistemanoaceptardenesannimas.Siemprefigurarunusuarioparahacercadacosa.EstoseindicaconunnmeroUIDparaidentificarelusuariocorrespondiente.NosiempreesteUIDsecorrespondeconelusuario quearranc el proceso. Por ello existe adems deunUIDunidentificadordeusuarioefectivo(EUID)queeselquerealmenteestenidoencuentaporelsistemaalahoradeconcederpermisoparahacerciertascosas. El EUIDde 'root' es 0. Ahora no importa comopero algunoscomandosdeformabiencontroladapodranconvertirnosvirtualmenteensuperusuarioshaciendoquesuEUIDvalga0.Estoserviraporejemploparapermitir hacercosasespecialesymuyconcretasnadamsqueencondiciones normales solo 'root' podra hacer. No hemos mencionadointencionadamentealgunascosas(comoporejemploelgrupodeusuario),porqueestamossimplificandomuchointencionadamenteparaintentarqueenestemomentosolocapteunaprimeraideageneral.

    Sisesienteunpocomareadoyconfusoreljeseyacostmbreseaestasensacin. Los primeros pasos suelen ser los ms complicados.EspecialmenteenUnixporquenofuediseadocomounsistemaintuitivo.

    25

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    ELMANUALDELSISTEMA

    man(1),apropos(1)

    Generalidadesdelmanual

    ManeselmanualenlneadetodoslossistemasoperativostipoUnix.Estanoeslaleccinmsatractivadeestecursoperosiqueesunadelasmsnecesarias.UnodelosobjetivosdelcursoesalcanzarciertoniveldeautosuficienciaenLinux.Mannoeslanicafuentedeinformacinperofrecuentementesueleserelprimersitiodondesesuelemirar.SiustedhaceunaconsultaenunalistadeusuariosdeinternetdeLinuxsobreuntemaquepodrahaberaveriguadoporsimismoconsultandoelmanualalguienlerecordar(entonomsomenosamabledependiendodeldaquetenga)queesainformacinestabaenelmanual.

    Sepuedenexplicarmuchascosassobremanperoesimprescindiblequepractiqueusted.Paraellodeunrpidoprimervistazoalapginamanrelativaalcomandoman.

    Mientras no indiquemos lo contrario conviene que pruebe todos loscomandosqueseindicanamododeejemplo.Sitieneposibilidaddeusardossesionesleresultarmscomodopracticarsobrelamarcha.Tecleeahoraelcomandosiguiente:

    $manman

    Habr vistoundocumentoqueexplicael usodemanyquetieneunaestructuracaractersticadetodaslaspginasman.

    26

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    Laspginasdelmanualutilizanunformateadordedocumentosllamadotroff.Permiteespecificarelestilodeundocumento.(Maneraenqueseven los ttulos, encabezados, prrafos, dondeaparecen los nmerosdepgina,etc.Debidoasuflexibilidadtroffresultabastantedifcildeusar.nroffygroffsirvenparalomismoperonoexplicaremossusdiferencias.Pensamosquesolonecesitar conocer suexistencia. Sino instala estosprogramasnopodrusarmanensuordenador.

    Otroejemplo.Paraobtenertodalainformacinrelativaalcomando'ls'hagalosiguiente:

    $manls

    Cuandonoseconoceexactamentelapalabraquesedeseabuscarsepuedebuscarporpalabraclave.Paraellousaremoslaopcink,ylaopcinf.Estaopcinnoestdisponibleenmuchossistemasdebidoaquehayquegenerar referencias y esto consume mucho espacio en disco. Eladministradorpuedegenerarlasreferenciasusandoelcomando'catman'

    Cuandonoconocemoselnombredeuncomandoytampocoencontramosnadaporpalabraclaveperosabemosqueesloquehacepodemosusarelcomando'apropos'.Comprubelotecleandolossiguientescomandos:

    $aproposman$aproposapropos$manapropos

    Si tiene su sistema Linux correctamente configurado para imprimirdocumentosenformatoPostScrippodrimprimirunapginadelmanualhaciendo

    $mantman|lpr

    27

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    Seccionesdelmanual

    Paraindicarenundocumentounareferenciaaunapginadelmanualsesueleindicarconelcomandoseguidodelaseccinentreparntesis.Elttulodeestaleccin'man(1)'esunejemplo.Paraconsultaruncomandoen una seccin concreta habra que teclear man . Veamos un par de ejemplos con printf(1) yprintf(3).

    $man1printf$man3printf

    Comohabrpodidoobservarserefierenacosasdistintas.EnelprimercasoprintfesuncomandoyenelsegundounafuncinestndardeCconelmismonombre.Sinoseindicalaseccinlabsquedasellevaacaboen todas las secciones de manual disponibles segn un ordenpredeterminado,yslosepresentalaprimerapginaencontrada,inclusosiesapginaseencuentraenvariassecciones.Porelcontrariousandolaopcinapresentar,secuencialmente,todaslaspginasdisponiblesenelmanual.Compruebeestoconlossiguientesejemplos:

    $manprintf$manaprintf

    Consultelasseccionesqueestndisponiblesensusistemaen man(1).Acabamosdeindicarloquesignificaman(1)asqueelastutolectoryadeberaestarmirandoenlaseccin1delmanual.

    Conclusiones

    ParafinalizartambinmencionaremosotrafuenteimportantedeconsultaenLinuxquesonlosHOWTOsylosFAQs.Estossondocumentosqueexplicancomohaceralgoolaspreguntasmsfrecuentesrelativasaundeterminado tema. Este tipo de documentos monotemticos son

    28

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    frecuentes en Linux. Proceden de contribuciones desinteresadas deusuarios bien informados y estn disponibles en distintos formatos(HTML.textoplano,etc).Suelensermsdidcticosquelaspginasdeman, pero man es la referencia obligada para cada comando y cadafuncinimportante. Nosevitatenerquerecordartodaslasopcionesdecada comando ya que frecuentemente cada comando tiene un ampliojuegodeopciones. Hayalgunosdocumentos enespaol especialmenteadecuadosparanovatos.

    Hemos visto unas pocas opciones del comando man. Intente utilizaralgunas otras opciones. Es importante que se familiarice con l. Laspginasmannoestnpensadasparaensear,perocadavezquetengaunadudadecomoseutilizaalgotendr querecurrir aellascomoprimerafuentedeinformacin.

    Con esto pretendemos que abandone usted algunas de sus viejascostumbres.Antesustedpensabadelasiguientemanera:

    Sifuncionaaceptablementeparaquetocarlo.

    Sinofuncionaapagamosyvolvemosaencender

    Sinadadeestosirvellamamosaunamigo.

    Ahora ya sabe que tambin puede optar por una lectura del manual.Hgalo pero consulte de momento solo la informacin relativa a losnmeros de seccin, partes de un manual, y las opciones a, k, t.Asumimosquenoesnecesariolalecturaenprofundidadporquehabrcosasqueaunnopuedeinterpretar.Tengaencuentaquepartimosdeunnivelcero.Annosabeustedloquesignificanalgunascosas.Poresounavezfinalizadoel cursoconvendr quevuelvaamiraresta pginamanrelativaalcomandomanparasacarlemsprovecho.

    29

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    LASHELL

    sh(1)ksh(1)csh(1)bash(1)

    IntroduccinalashelldeUnix

    ExistenvariasshellsparaUnix,KornShell(ksh),BourneShell(sh),CShell (csh), ymuchasms. Existenalgunasparapropsitosespeciales.PorejemplolaremoteShell(rsh)seutilizaparaejecutarcomandosenunordenadorremoto. LaSecureShell (Ssh)seutilizaparaestablecer unaconexinseguraconunordenadorremoto.

    LamsutilizadaenLinuxeslaBourneAgainSHell(bash).

    NosotrosdemomentovamosatratarprincipalmentelaBourneShellqueeslamsestndar.

    La KornShell y la Bash son distintos superconjuntos distintos de laBourneShell y por ello todo lo que se diga para la BurneShell servlidotambinparalaKornShellyparalaBash.

    EnLinuxsesueleusarlaBourneAgainSHell(bash),comosustitutadelaBourneShell (sh). Puntualmente tambin explicaremos algunapeculiaridaddelabash.

    Parasaberqueshellestusandoustedhagalosiguiente:

    $ps|grep$$

    Siaparecebashoshpuedecontinuarsinproblemasyaqueestusandounashelladecuadaparapracticarloquevieneacontinuacin.Encaso

    30

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    contrariotecleelcomando'sh'oelcomando'bash' antesdecontinuar.Vuelvaarealizarlacomprobacinanterioryverqueahoraestausandootrashell.

    EncualquiercasocualquierShellesunprogramanormalycorriente,peroincorporamuchosdelosconceptosmsprcticosdeUnix.NotienenadadeparticularquealgunossistemasincorporenalgunasShellsdistintas.

    UnaShellnoessolounintrpretedecomandos.UnaShellessobretodounintrpretedeunpotentelenguaje.

    Estructuradelalneadeorden

    Sabeustedloqueesunintroductor?(eningleslollamanprompt).Puesesaquelloqueelinterpretedecomandosmuestraparaindicarqueestesperandoaqueseintroduzcaunaorden.EnUnixelintroductordelaorden de comandos no es siempre el mismo. Por defecto suele venirconfiguradodistintosintroductoresparadistintosinterpretesdecomandosytambinseusaunintroductordistintoparaelusuarioroot.Sinembargoelintroductorpuedeservariadoyaqueesalmacenadoenunavariabledelsistema.Enrealidadlashellutilizadosintroductoresdistintos.Paravercualesestutilizandoahoratecleelosiguiente:

    $echo"Introductor1=$PS1"$echo"Introductor2=$PS2"

    Cuandoapareceelprimerintroductordelsistema$PS1indicaquelashellest esperando la introduccindeunaorden. Las ordenes se terminanmediante.Sidespusdepulsarlashellnoconsideraqueelcomandoestecompleto quedar esperando ms entrada mostrando el segundointroductor$PS2.

    Sialgunaveznoescapazdeterminarlaintroduccindeuncomandopruebeaabortarusando

    31

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    Unaordenconstardeunnmerovariabledeelementosseparadosporblancos,opor.

    En una orden se pueden distinguir comandos, opciones, argumentos,metacaracteres, comentarios, comandos internos...etc. Los blancos seusanparasepararlasopcionesyargumentospresentesenunalineadeordenes y usados de esta forma (comoseparadores) una secuencia deblancostieneelmismoefectoqueunosolo.(OjoenUnixlasmaysculasyminsculassonsignificativas.)

    Acontinuacinsemencionadeformanoexhaustivaloselementosdellenguajeshellscript.Nointentamosqueseaprendatodosestoselementosnivamosacomentarahoratodosellos.Bastarquesehagaunaideadequetiposdeelementospuedenintervenir.

    Comandos:

    Sonficherosejecutables.ParaquelashelllocaliceelcomandodeberestarenunsubdirectorioqueformepartedelavariablePATHodelocontrariodebeespecificarseelcaminocompleto.

    Opciones:

    Generalmentelasopcionesdeuncomandosonletrasprecedidasdeunsigno''.Enalgunoscomandossepuedenponervariasopcionescomovarias letras seguidas precedidas del signo ''. Algunas opcionespuedenvenir como '' yconcretamente enLinuxesmuyfrecuentepoderusarlasopcioneshelpyversionencasitodosloscomandos. Precisamente con la opcin help obtendremosgeneralmente la lista de opciones disponibles para un comando.Tambin es frecuente el uso de opciones precedidas por '+'. Enalgunoscomandoselordendelasopcionesesmuysignificativo.Nomerece la penahablar ms de esto ahoraporquevamosa usar unmontnde comandos conun montn de opciones en este cursoytendremosocasindepracticarmuchoconellas.

    32

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    Metacaracteres:

    Tienenunsignificadoespecialparalashellysonunodelossiguientescaracteres:

    ;&()|>>

    Operadoresdecontrol:

    ||&&&;;;()|

    argumentos:Son literales tomados como parmetros de entrada para algncomando.

    comentarios:Todo lo que sigue al carcter '#' hasta ser uncomentario.

    Palabrasreservadas:

    Sonpalabrasreservadasparaimplementarellenguajeshellscript.Sonpalabrasreservadas:

    case, do, done, elif, else, esac, fi, for, function, if, in, select, then,until,while,time.

    Comandosinternos:

    Comandos que estn implementados dentro de la propia shell. NonecesitanPATH.Ejemplosdecomandosinternosson:

    cd,exec,arg,eval,exit,...

    Paraunareferencia exacta y completa debera acudir a la pginamanbash(1)aunqueesoresultaraexcesivoenestemomento.

    33

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    Vamos a dar una serie de ejemplos para que los practique en suordenador.Noesnecesarioqueintroduzcaloscomentarios.

    $#Ordenconunnicocomandosinopcionesniargumentos$ls

    $#Ordensinocionesperocontresargumentos$ls./..

    $#Ordenconuncomandoyunaopcin$lsl

    $#Ordenconuncomandoytresopcionesindicadadevariasformas$#distintasperoequivalentesentresi.$lstrl$lsrtl$lsltr$lsltr$lsltr$lsltr$lsltr

    $#Opcionesqueempiezancon''$lshelp$lsversion$lscolor=auto

    $#Ejemplodeopcionesyargumentossensiblesalorden.$datednowR$datedRnow

    $#ejemplodeopcionqueempiezapor'+'$date+'%a%b%e%H:%M:%S%Z%Y'

    Expansindelalineadeorden:

    34

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    Existeundetallemuyimportanteenelfuncionamientodelashell.Unacosaesloquenosotrosescribimosyotraloquelashellordenaqueseejecute.Antesdequelashellejecutecomandoalgunoexpandelalneadeordenes.Esdeciresalneasetransformaenotralneamslarga.Laordenresultantepuedesermuylargaytenermuchosargumentos.Porejemploun'*'sersustituidoporlalistadeficherosqueseencuentreneneldirectorioactual.Quizsalguienencuentrequeexisteunparecidoconelusode'*.*'enMsdosporejemploperoelparecidoesmuysuperficialyengaoso.CuandoenUnixhacemos'ls*'elintrpretedecomandosexpandeelasteriscoyelcomandolsrecibeunalistadeficherosquetienequelistar.EnMsdoscuandohacemos'dir*.*'elinterpretedecomandosnoexpandenada.Elcomandodirrecibecomoargumentonolalistadeficherosquetienequelistarsinoun'*.*'yserelpropiocomandodirquientengaqueexpandirelargumentoparaobtenerlalistadeficherosquetienequelistar.PorlotantolaexpansinenUnixestcentralizadaenelinterpretedecomandoselcualpermitehacerexpansionesmuchomspotentesqueenMsdos.Uncomandonoesmsqueunejecutableylosejecutablesgeneralmenteadmitenargumentos.EnUnixloscomandostomanlosargumentosquelespasalashelldespusdelaexpansin.

    El'*'seexpandeenbasealosnombresdeficherospresentesennuestrodirectorioactual,sustituyndoseporunacadenadecaracterescualquieraquenoempieceporunpunto.

    Vamosarealizarunaprcticacompleta.Algunosdeloscomandosquevamosa usar como 'cd', 'mkdir', 'touch' yotrossoncomandosquenoexplicamos en este momento pero que servirn para situarnos en undirectoriodetrabajoycrearalgunosficherosparalaprctica.

    $comando...

    salidadelcomando...

    35

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    Ahora introduzca los comandos que indicamos a continuacin ycompruebelasalidaobtenida.

    $cd/tmp$mkdirpruebas$cdpruebas$#Yahemoscreadoundirectoriodepruebasyyaestamosdentrodel.$#Paracomprobarlohacemos$pwd/tmp/pruebas$#Ahoracreamosunosficherosparapracticar$touchkk1kk2kkkkkk.txtkk.docj2.txt.kk$echo*kk1kk2kkkkkk.txtkk.docj2.txt$echok*kk1kk2kkkkkk.txtkk.dox$echo*xtkk.txtj2.txt$echo*.

    $echo.*.kk$echo*.*kk.txtkk.docj2.txt

    Fjese que los resultados dependen de los ficheros existentes en eldirectorioactual.Losmismoscomandosrealizadosdesdeotrodirectoriodistintodaranotroresultado.

    Mantengalasesindelaprcticaenestepuntoporquecontinuaremoshaciendoalgunasprcticasmsdesdeestemismopunto.

    36

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    El'?'seexpandecomounnicocarcterytampocoexpandeunpuntoenel comienzo del nombre del fichero. Introduzca ahora los siguientescomandosycompruebelasalidaobtenida.

    $echo???kk1kk2$echokk?kk1kk2

    Acontinuacinnotecleenadayaqueelresultadoessolounahiptesis.Supongamosqueobtenemosunerrordeestetipo.

    $ls*ksh:/bin/ls:arglisttoolong

    Estosignificaqueel'*'seexpandeenunnmerodemasiadograndedeficherosyesoresultaunproblemaparael interprete decomandos. Laformadeobtenerlalistadeficherosserahaciendo:

    $ls

    Otambin.

    $ls.

    Siquisiramosaveriguarelnmerodeficherospodramoscontarloscon'wc'.Aquestamosusandoun'|'queaunnohemosexplicadoperoqueloexplicaremosenelprximocaptuloderedireccindeentradasalida.

    $ls|wcl

    37

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    PeculiaridadesdeexpansinenlabashdeLinux

    Solovamosamencionarunascuantasyremitimosallectoralapginadelmanualdebashparamsinformacin.

    Expansindecorchetes.

    Esteesuntipodeexpansinquenotieneparanadaencuenta losficherosexistenteseneldirectorioactual.

    $echoa{d,c,b}eadeaceabe

    Expansindelatilde.

    Estaesunacaractersticaespecial delashell deLinuxqueresultarealmentetil.Expandelatildecomodirectoriohome.

    $echo~$echo~root$echo~root/*

    ArithmeticExpansion.

    Estopermiteexpandirexpresiones$((expression))

    $echo$(((4+11)/3))5

    Enbash(1)enelapartadodeEXPANSIONsemencionanmscosas.

    38

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    Redireccindeentradasalida:

    Normalmente los procesoutilizan paraentrada ysalidadedatos unosdispositivos estndar. Son entrada estndar, salida estndar y salidaestndar de errores. Generalmente se utiliza comoentrada estndar laentradadetecladoycomosalidaestndarysalidaestndardeerroreslapantalla.Lasalidaestndarseusacomosalidanormaldedatosylasalidaestndardeerroresseusaparasacarmensajesqueindicanalgnerror,aunquetambinseusasimplementecomoflujoalternativoencasodequenoresultedeseablesumezclaconotrosdatosquedebensalirporsalidaestndar.

    Sepuedealterarflujodedatosquevadesdeundispositivoestndaraunprogramaoviceversapuedeser redirigidoa otrodispositivo, o aotroprograma,ofichero,etc.

    Desdelashellsepuedehacerestodevariasformas.

    >

    Redirigelasalidaestndaraunficheroodispositivo.

    >

    Redirigelasalidaestndaraunficherosinsobrescribirlo.Enlugardeelloaadealfinaldelmismo.

    &1

    Redirigelasalidaestandarddeerroresdondeestaredirigidolasalidaestndar.(0=entradaestndar,1=salidaestndar,2=salidadeerroresestndar)

    Ejemplos

    Laordensiguientenoproduceningnresultadovisibleporquelasalidaestndarseredirigealdispositivo/dev/null.Estedispositivoescomounpozosinfondo.AdiferenciadeunapapeleradeWindowsnosepuederecuperarluegonada.

    $date>/dev/null

    Ahoraunejemplocurioso.Elcomando'time'sirveparamedirconsumosdetiemposdeotroscomandosyparaevitarmezclasdedatosensalida

    40

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    estndarsedecidiquelasalidanormaldetimefueralasalidaestndardeerrores.

    $timewhoami>/dev/null

    Podemosverelconsumodetiempodelcomando'whoami'porqueestesaleporlasalidaestndardeerrores.Esunejemplodeutilizacindelasalidaestndardeerroresparasacarinformacinquenotienenadaqueverconningnerror.Sinembargotimeesuncomandointernoyporellolosiguientenofuncionaracomoustedpiensa.

    $timewhoami2>/dev/null

    Enestecasolaredireccinafectasoloalcomandowhoami.

    Loscomandos internos sonparte de la shell ypara redirigir susalidahabraqueredirigirlasalidacompletadelashell.Dejaremosestoparauncaptuloposterior.

    Antesdecontinuarvamosaasegurarnosqueestamosenunsitioseguroparatrabajar.

    $cd/tmp$mkdirpruebas>/dev/null$cdpruebas$#Paracomprobarqueestamosen'/tmp/pruebas'hacemos$pwd/tmp/pruebas

    Elcontenidode'/tmp'sueleservaciadocuandorearrancalamquinaoquizsenalgnotromomento. Contieneinformacintemporal. Hemosusado/dev/nullparaignorarlasalidadeerroresdelcomandomkdir.Siyaexista '/tmp/pruebas' mkdir habra dado un error pero nosotros lo

    41

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    ignoramosporquesolonosinteresaquelocreeencasodequenoexistayencasocontrariodaigual.Eldispositivo'/dev/null' tambinresultatilparasimularunaentradanuladedatos.Porejemploparacrearunficherovaci.Siyaestamossituadosen'/tmp/pruebas'pruebelosiguiente:

    $catkk$lslkk

    Elmismoefectopodramosconseguirusando.

    $>kk$lslkk

    Esto se puede utilizar para vaciar ficheros respetando los permisosoriginales.

    Vamosmirarelcontenidodeldirectorioraz

    $lsl

    Ahoraqueremosrepetir el comandoperoguardandoel resultadoenelficherokk

    $lsl/>kk

    Novemosnadaporquetodalasalidavaapararalfichero.Paravisualizarelcontenidodeunficherousaremoselcomando'cat'.

    $#Mostrarelcontenidodelficherokk.$catkk

    42

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    $#Equivalealanterior.$caterrores>salida$caterrores$catsalida

    Existeuncomando'yes'quesirveparagenerarcontinuamenterespuestasafirmativasenformadecaracteres 'y'yfinalesdelnea.Estecomandoestpensadoparaserusadocon'|'yproporcionarentradasafirmativasauncomando.Usaremoselcomando'head'quesirveparasacarporsalida

    43

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    estndarsolounaprimerapartedelosdatosdelaentrada.Lacantidaddatospuedeespecificarseennmerodelneasenbytes, etc.. Nosotrosvamosautilizarbytes.Lasalidade'yes'laentregaremosaheadparaquetomelos1000primeros bytes quepasamosal programa 'wc' paraquecuentelneaspalabrasycaracteres.

    $yes|headbytes=1000|wc5005001000Tuberarota

    Elcomando'yes'podrafuncionareternamente.Susalidaredirigidaporlasbuenasaunficherollenaraeldisco(cosanadadeseableporcierto)yacabara dando un error. En lugar de esto lo hemos redirigido a unprogramaqueaceptarsololos1000primeroscaracteresyluegocerrarsuentradaprovocandounerrordeTuberarota.

    Lashelltambinpermiteintroducirdatosenunaformaespecialquesellamadocumentoaqu.Paravariarunpocousaremosahoraelcomando'sort'quesirveparaordenar.Observequeenesteejemplounfindelneanoterminaelcomando.Porelloaparecerelintroductorsecundario$PS2quenosotrosindicamosconun'>'enamarillo.

    $ # Para ordenar unas lineas que introducimos en la propia linea de$ # ordenes usamos el operador '

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    yyyyzzzzz

    Operadorgrave:

    Cuando colocamos algo dentro de las comillas graves '`' la shell lointerpretaracomounacadenacuyovaloressustituidoporelresultadodeesecomandoqueproduceesecomandoensalidaestndar.

    $echodateproduce`date`

    dateproducelunene1020:59:12CET2000

    Elresultadoessolounejemploynopuedecoincidirexactamenteconelresultadoobtenidoporustedyaquedeberaponerlafechacorrectaensusistema.

    Quizaselejemploqueacabamosdeusarnoledeunaideaexactadelapotencia del operador grave. Recuerde que esto ocurre durante laexpansindelalneaderdenesantesdeejecutarseelcomandoecho.Porellopodemoshacercosascomolassiguientes.

    $#Ejecutamosdateyguardamoselresultadoenunficherocuyo$#nombreconstruimosenbaseanuestronombredeusuarioyal$#aodelafechaactual.$date>fichero`whoami``date+%Y`$lslfichero*$catfichero*

    Hemosusadouncomandoparaconstruirelnombredelficherodesalida.No mostramos los resultados pero confiamos en que ya los hacomprobado.

    45

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    Caracteresdeescape:

    Dado que la Shell interpreta caracteres. Blancos como separadores.Asteriscoseinterrogacionescomocomodines.Operadorgrave.Comillasdobles,Comillasnormales,$,etc...Seplanteaelproblemadequehacercuando queremos usar estos caracteres como tales sin que seaninterpretadosporlashell.Existenvariasformasdeescaparcaracteresparaquelashellnolosexpanda,ointerprete.

    Lashell noel nicoprogramaconcapacidaddeexpandir einterpretarcaracteres especiales. Por ejemplo find, egrep, sed, y otros tambininterpretanciertoscaracteresqueademspuedencoincidirconalgunosdelos que interpreta la shell. Para usar caracteres especiales que puedeninterpretarseporlashellhabrqueescaparlossiemprequedeseemosquelleguenalcomando.

    Vamosavertresformasdistintasdeescaparcaracteres:

    Cuando usamos las dobles comillas, los comodines asterisco,interrogacinycaracteresenblanconoseinterpretan,aunquesiseinterpretan'$',comillasgraves'`',yotros.

    Cuandousamoscomillassimplesserespetatodoelcontenidodelacadenasinexpandirnada.

    Cuando usamos el carcter '\' escapamos el carcter que vainmediatamente despus. Cuando es un carcter que tiene unsignificadoespecialparalashell,dejardeteneresesignificadoespecial.

    Vamosavertodoestoconunosejemplos:

    $#Laordensiguientemuestraelmismoliteralqueelentrecomillas.$echo"**?*"

    $#Enestecasolashellinterpreta`pwd`y$PATH,encambio'*'y$#'?'noseinterpretan.

    46

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    $echo"*?`pwd`$PATH"

    $#Enestecasoseconservatodoelliteralsininterpretar.$echo'*?`pwd`$PATH'

    $#Acontinuacinlaordenmostrardoscomillasdobles.$echo\"\"

    $#Elcaractertambinpuedeserescapadoyeneste$#casopuedeservirparaintroducircomandosmuylargosdeforma$#mslegible.Parahacerestapruebadeberpulsarlateclade$#justoacontinuacindelcaratcter'\'$lsl/|\$headn10|\$tee/tmp/resultado|\$wc

    Ejercicio:

    Lassiguientesrdenesproducenresultadoscuyaexplicacinnoresultatrivial.Estoesdebidoaquepermitimosconlaopcinequeelcomando'echo'interpretecaracteres.Porlotantoloqueocurreesqueprimeroelintrpretedecomandosinterpretaloscaracteresdelalneaderdenesyluegoel comandoecho interpreta los caracteres recibidos. Consulte lapginamandeecho(1)ybusquelaopcine.Ejecuteloscomandosqueleproponemosacontinuacineintenteexplicarlosresultados.Puedequenecesitepapelylpiz.

    $echoe\nn$echoe\\n

    47

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    $echoe\\\n

    $echoe\\\\n\n$echoe\\\\\n\n$echoe\\\\\\n\$echoe\\\\\\\n\$echoe\\\\\\\\n\\n

    Resumen

    HemosvistomuchascosasquenospermitenhacernosideadelapotenciadelaBourneShelldeUnix.LabashdeLinuxesunsperconjunto.Esdecirescompatibleperomspotente.

    Queremosresaltarqueparalaspersonasquehanconseguidoterminarestecaptuloyasehaconseguidoalgoimportante.PersonasacostumbradasalusosdeMsdoscometenbarbaridadesqueluegonisiquierasoncapacesdeexplicar. La clave muchas veces est en la expansin de la lnea derdenes.

    En realidad este tema no est agotado ni mucho menos y locompletaremosencaptulos posteriores aunque intercalaremosmaterialmsligeroporquenodeseamoshacerlesufrirdemasiado.Sololojustoyporellocreoqueeselmomentodeconfesarqueexistauntrucopararealizarmsfcilmenteelejercicioanterioraunquenolomencionamosantes porque habra resultado demasiado fcil y cmodo. Se trata deactivar la trazadela shell con 'set x'. Deesta formapodemosverelresultadodelaexpansindelneaderdenesprecedidaporelsigno'+'.

    $setx

    48

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    +setx$echoe\\\\\\\\n+echoe'\\\\n'\\n$set+x+set+x

    Puede utilizar este truco cuando no sepa que est ocurriendo con laexpansindeunalneaderdenesquenofuncionacomoustedpensaba.

    49

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    INTRODUCCINALOSPROCESOS

    Queesunproceso

    A estas alturas ms de uno empezar a preguntarse si realmente esnecesarioconocertodosestosdetallesparaunsimpleusodeunSO.EstecursoestaorientadoalusodeLinuxdesdelaconsolayresultanecesarioconocer estas cosas incluso para un usuario normalito. No vamos adescribir detalladamente como estn implementados los procesos enLinux.

    Quizsparauncursodeprogramacinavanzadasifueranecesario,perolo que nosotros vamos a describir es nicamente los detalles msimportantesdesdeunpuntodevistadidcticoyprcticoparaunusuarionormal.

    Enunsistemamultitareatodofuncionaconprocesosasqueconocerunoscuantos principios bsicos sobre procesos le resultar de la mximautilidad. En un sistema monotarea se usa frecuentemente el trminoprogramaindistintamenteparahablardeunprogramaenpapel,encdrom,endiscodurooenfuncionamiento.Enunsistemamultitareanosedebeusareltrminoprogramaparahablardelaejecucindelmismo.Ensulugar hablaremos de proceso indicando con ello que esta arrancado yfuncionando.Unprogramapuededarlugaravariosprocesos.Porejemploen un mismo instante varios usuarios pueden estar usando un mismoeditor.Unprocesopuedeestardetenidoperoadiferenciadeunprogramaexisteunainformacindeestadoasociadaal proceso.Unprogramaesalgo totalmente muerto. Un proceso detenido es ms bien como siestuvieradormido.

    Losprocesostienenorganizadalamemoriadeunaformaespecialmuyeficiente.Porejemplolaprtedecdigodelprocesoesunapartedesolo

    50

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    lecturaypuedesercompartidaporvariosprocesosalavez.Imaginemosquehayvariosusuariosenelsistemausandounmismoeditor.EnesecasoseraundesperdiciotenerlamismainformacindecdigodeeseprogramarepetidavariasvecesenmemoriayocupandounrecursotanvaliosocomoeslamemoriaRAM.

    Enelcasodetenervariosprogramasdistintosenejecucintambinsesuele dar el caso de que contengan partes comunes de cdigopertenecientes a libreras que contienengrancantidad defunciones depropsitogeneral. Parahacerunusoeficientedeestaslibrerasexistenlibrerasdinmicasdeusocompartido.EnLinuxelusodeestaslibrerasnoestorganizadodeunaformaunificadaparatodaslasdistribucionespor lo cual los ejecutables binarios pueden ser incompatibles entredistintasdistribuciones.Esteproblemasepuedesolucionarpartiendodelos fuentes y recompilando la aplicacin en nuestro sistema. Por estaraznunbinariodeRedHat,oSusepuedenofuncionarenSlackwareoenDebian.

    PIDyPPID

    A cada proceso le corresponder un nmero PID que le identificatotalmente.EsdecirenunmismomomentoesimposiblequeexistandosprocesosconelmismoPID.LomismoquetodoslosprocesostienenunatributoPIDqueeselnmerodeprocesoqueloidentificaenelsistematambinexisteunatributollamadoPPID.EstenmerosecorrespondeconelnmeroPIDdelprocesopadre.Todoslosprocesosdebendetenerunproceso que figure comopadre pero entonces que ocurre si un padremuereantesquealgunodesushijos?Enestoscasoselproceso'init'delcualhablaremosenseguidaadoptaraestosprocesosparaquenoquedenhurfanos.

    Elprocesoinit

    Cuandoarrancaelsistemasedesencadenaunasecuenciadeprocesosquea grandes rasgoses la siguiente. Primero secargael ncleo deLinux

    51

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    (Kernel) deunaforma totalmente especial y distinta a otros procesos.Dependiendo de los sistemas puede existir un proceso con PID=0planificador,oswapper.EnLinuxyencasitodoslossistemastipoUnixseguirunprocesollamado'init'.ElprocesoinittienePID=1.Leeunfichero llamado inittab dondese relacionan unaserie de procesos quedeben arrancarse para permanecer activos todo el rato (demonios).Algunos de ellos estn definidos para que en caso de morir seanarrancadosdenuevo inmediatamente garantizando la existencia deeseserviciodeformapermanente.

    Esdecir'init'esunprocesoquevaagenerarnuevosprocesosperoestanoesunacualidad especial. Esmuyfrecuente queunprocesocualquieragenerenuevosprocesosycuandoestoocurresedicequegeneraprocesoshijos.

    Estenoesuncursodeadministracinperodiremosqueainitselepuedeindicar que arranque el sistema de diferentes formas, por ejemplo enmodomonousuarioparamantenimiento. Esteesuncaptuloenelcualpueden surgir muchas preguntas retorcidas tales como, que pasa simatamosainit,oquieneselpadredeinit,perononosinteresaresponderaestoyaqueinitesunprocesomuyespecialysupadreanms.Encadasistemade tipo Unix las respuestas a cosas comoestas puedenvariarmuchoporquea ese nivel la implementaciones varanmucho. Ningnprogramanormalnecesitarusaresetipodeinformacin.Quedanmuchosdetalles interesantes relativos a temas de administracin. Los curiosossiempretienenelrecursodemirarlapginamandeinit(8)ydeinittab(5)peronosotrosnoinsistiremosmsenestetema.(Quealivioverdad?)

    UIDyEUID

    Los procesos tienen un EUID (Efectiv User Identif), y un UIDnormalmenteamboscoinciden.ElUIDeselidentificadordeusuariorealquecoincideconelidentificadordelusuarioquearrancelproceso.ElEUIDeselidentificadordeusuarioefectivoysellamaasporqueesel

    52

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    identificadorquesetieneencuentaalahoradeconsiderarlospermisosqueluegoexplicaremos.

    ElUIDesunodelosatributosdeunprocesoqueindicapordecirlodealgunamaneraquieneselpropietarioactualdeeseprocesoyenfuncinde ello podr hacer ciertas cosas. Por ejemplo si un usuario normalintentaraeliminarunprocesodelcualnoespropietarioelsistemanolopermitirmostrandounmensajedeerrorenelqueadviertaqueustednoeselpropietariodeeseprocesoyportantonoestautorizadoahaceresaoperacin.Porelcontrarioelusuariorootpuedehacerloquequieraconcualquier procesoyaqueel sistemanocompruebajams si root tienepermisosonoparahaceralgo. rootsiempretienepermisospara todo.Esto es cierto a nivel de llamadas del sistema pero nada impideimplementaruncomandoquehagacomprobacionesdepermisosinclusoconroot.AlgunoscomandosenLinuxtienenopcionesquepermitenhacerestascosasysolicitar confirmacinencasodedetectar unaoperacinpeligrosaoinfrecuente.

    ElUIDtambinesunatributopresenteenotroselementosdelsistema.Porejemplolosficherosydirectoriosdelsistematienenesteatributo.Deestaformacuandounprocesointenta efectuar unaoperacinsobreunfichero.ElkernelcomprobarsielEUIDdelprocesocoincideconelUIDdel fichero. Por ejemplo si se establece que determinado fichero solopuede ser leido por su propietario el kernel denegar todo intento delecturaaunprocesoquenotengaunEUIDigualalUIDdelficherosalvoquesetratedeltodopoderosoroot.

    Aunqueestamosadelantandocosassobreelsistemadeficherosvamosacontinuar con un ejemplo. Comprobaremos cual es el UID de sudirectoriohome.

    $ # Cambiamos el directorio actual a home$ cd$ # Comprobamos a quien pertenece 'uid' y 'guid'$ ls -ld .$ # Ahora obtenemos el 'uid' y el 'gid' con sus

    53

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    valores numricos.$ ls -lnd .

    Si su directorio home est configurado de forma lgica deberpertenecerle a usted. Si esto no es as reclame enrgicamente a suadministrador, pero si el administrador resulta ser usted sea msindulgente y limtese a corregirlo y no confiese su error a nadie. Enrealidad casi todo lo que se encuentre dentro de su directorio homedeberapertenecerleausted.Usteddebeserelpropietariodesudirectoriohomeporquedeotraformaydependiendodelospermisosasociadosaestedirectoriolosprocesosqueustedarranqueseveranobienincapacesdetrabajarconl,oloqueespeorcualquierapodrahacercualquiercosaconl.ComoeslgicohemosmencionadodepasadaeltemadepermisosdedirectoriosparailustrarunpocolautilidaddeluidperoestoseverendetalleenelcaptulodedicadoalsistemadeficherosdeLinux.

    Algunos ficheros ejecutables poseen un bit depermisos que hace quecambieelEUIDdelprocesoqueloejecuteconvirtindoseenelUIDdelpropietario del fichero ejecutado. Suenacomplicadopero no lo es. Esdecirimaginemosqueustedejecutauncomandopropiedadderootquetieneestebit.PuesbienenesemomentoelEUIDdesuprocesopasaraaserelderoot.Graciasaestounprocesopuedetomartemporalmentelaidentidad de otro usuario. Por ejemplo puede tomar temporalmente laidentidadderootparaadquirirprivilegiosdesuperusuarioyasaccederporejemploaficherosdelsistemapropiedadderoot.

    ElsistemarecibecontinuamentepeticionesdelosprocesosyelEUIDdelprocesodeterminar queel kernel leconcedapermisoparaefectuar laoperacindeseadaono.

    MuchasvecessorprendequeenLinuxapenasseconozcanunospocoscasosdevirus,mientrasqueenotrossistemasparecenestaralaordendelda. Es perfectamente posible realizar un virus que infecte unsistemaLinuxperodeunaformaodeotraeladministradortendraquedarlelos

    54

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    privilegiosqueleconviertenenpeligroso.Poresonoesfcilqueestosviruslleguenmuylejos.

    Comosecreaunnuevoproceso

    Elncleodelsistemallamadotambinkerneleselencargadoderealizarla mayora de funciones bsicas que gestiona entre otras cosas losprocesos.Lagestindeestascosassehacenpormediodeunlimitadonmero de funciones que se denominan llamadas al sistema. Estasllamadas al sistema estn implementadas en lenguaje C y hablaremosahoraunpocosobreunpardeellasllamadasfork()yexec().Silogramosquetengaunavagaideadecomofuncionanestasdosimportantsimasfunciones facilitaremos la compresin de muchas otras cosas msadelante.

    Lallamadaalsistemaexec()

    Cuandohablamosdeprocesodebeustedpensarsolamenteenalgoqueseestejecutandoyqueestvivo.Unprocesopuedeevolucionarycambiartotalmentedesdequearrancahastaquemuere.Lonicoquenocambiaenunprocesodesde que nace hasta quesemuere es su identificador deprocesoPID.Unadelascosasquepuedehacerunprocesoescambiarporcompletosucdigo. Porejemplounprocesoencargadodeprocesar laentradaysalidadeunterminal(getty)puedetransformarseenunprocesodeautentificacindeusuarioypassword(login)yesteasuvezpuedetransformarseenuninterpretedecomandos(bash).Silallamadaexec()fallaretornar un1.Estonoescursodeprogramacinasquenosdaigualelvalorretornadoperoloquesinosinteresaessaberquecuandoestallamadatienexitonoseproducejamsunretorno.Enrealidadnotendra sentido retornar a ningn lado. Cuando un proceso terminasimplementedejadeexistir.Enunapalabramuereyyaest.Lallamadaexec() mantiene el mismo PIDy PPIDpero transforma totalmente elcdigodeunprocesoenotroquecargardesdeunarchivoejecutable.

    Lallamadaalsistemafork()

    55

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    Laformaenqueunprocesoarrancaaotroesmedianteunallamadaalsistemaconlafuncinfork().Lonormalesqueelprocesohijoejecuteluegounallamadaalsistemaexec().fork()duplicaunprocesogenerandodos procesos casi idnticos. En realidad solo se diferenciaran en losvaloresPIDyPPID.Unprocesopuedepasaralprocesohijounaseriedevariables pero un hijo no puede pasar nada a su padre a travs devariables.Ademsfork()retornaunvalornumricoqueser1encasodefallo,perositienexitosehabrproducidoladuplicacindeprocesosyretornarunvalordistintoparaelprocesohijoqueparaelprocesopadre.Alprocesohijoleretornarelvalor0yalprocesopadreleretornarelPIDdel procesohijo. Despus dehacer fork() se puedenhacer variascosaspero lo primero queseutiliza despusdel forkes unapreguntasobreelvalorretornadoporfork()paraassabersieseprocesoeselpadreo el hijo ya que cada uno de ellos normalmente deber hacer cosasdistintas.Esdecirlapreguntaseradeltiposisoyelpadrehagoestoysisoyelhijohagoestootro.Confrecuenciaaunquenosiempreelhijohaceunexec()paratrasformarsecompletamenteyconfrecuenciaaunquenosiempreelpadredecideesperaraquetermineelhijo.

    Tambin normalmente aunque no siempre esta parte de la leccin esnecesarioreleerlamsdeunavez.

    Estamosdandopequeosdetallesdeprogramacinporqueenestasdosllamadasdelsistemasonmuysignificativas. Sufuncionamientoresultachocanteysucomprensinpermiteexplicarunmontndecosas.

    56

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    MSSOBREPROCESOSYSEALES

    Lasformasdecomunicacinentreprocesos

    Losprocesosnotienenunafacilidaddeacceso indiscriminadaa otrosprocesos.Elhechodequeunprocesopuedainfluirdealgunamaneraenotroesalgoquetienequeestarperfectamentecontroladopormotivosdeseguridad.Comentaremossolomuyporencimalasdiferentesformasdecomunicacinentreprocesos.

    1. Atravsdevariablesdeentorno:

    Soloesposibledepadresahijos.

    2. Medianteunaseal:

    Soloindicaquealgohaocurridoysolollevacomoinformacindeunnmerodeseal.

    3. Medianteentradasalida:

    Eslaformamscorrienteaniveldeshell.Yahemoscomentadoeloperadorpipe'|'queconectadosprocesos.

    4. MediantetcnicasIPCuotras:

    Semforos,Memoriacompartida,Colasdemensajes.

    5. Mediantesockets:

    Estesistematienelapeculiaridaddequepermitecomunicarprocesosqueestnfuncionandoenmquinasdistintas.

    57

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    Noprofundizamossobreestoporqueahoranoestamosinteresadosenlaprogramacin.Msadelantesicomentaremosbastantesobrevariablesyentradasalidaporquedaremosnocionesdeprogramacinenshellscript.Tambindaremosacontinuacinunospequeosdetallesquetienenqueverconel arranquedelsistemaporquetambinnosresultar util paracomprendercomofuncionanlascosas.

    Secuenciadearranqueenunasesindeconsola

    Para consultar la dependencia jerrquica entre unos procesos y otrosexisteenLinuxelutilsimocomandopstree.Noesesencialyquizsnolotengaustedinstaladoperoresultamuyprctico.Sidisponedelpruebeloscomandos'pstree',y'pstreep'.Nosotrosvamosamostrarelresultadodeamboscomandosenelsistemaqueestamosusandoenestemomentopara que en cualquier caso pueda apreciar el resultado pero lerecomendamos que lo instale si no disponede l ya que resulta muyprctico.Tambinpuedeusarcomosustitutode'pstree'elcomando'psaxf'peronoespereunresultadotanbonito.

    $ pstree

    init-+-apache---7*[apache] |-atd |-bash---pstree |-2*[bash] |-bash---vi |-bash---xinit-+-XF86_S3V | `-mwm-+-.xinitrc---xterm---bash | `-.xinitrc---xclock |-cron |-getty |-gpm |-inetd |-kflushd |-klogd |-kpiod |-kswapd |-kupdate |-lpd |-portmap

    58

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    |-postmaster |-sendmail |-sshd |-syslogd `-xfs

    Esteformatonosdaunrboldeprocesosabreviadoenelqueprocesosconelmismonombreyquetenganunmismopadreaparecerndeformaabreviada. Enel ejemploanterioraparece '2*[bash]' indicandoquehaydos procesos bashcomohijos de init, y tambin hayalgunosprocesoapachearrancados.Elqueexistanmuchosprocesosarrancadosnoindicanecesariamenteunalto consumodeCPU.Puedequeestn todoselloshaciendoelvago.Buenoenelcasodeapachequizsestnhaciendoelindio.(Estoltimoesunabromaquenohepodidoevitar).

    $ pstree -p

    init(1)-+-apache(204)-+-apache(216) | |-apache(217) | |-apache(218) | |-apache(219) | |-apache(220) | |-apache(1680) | `-apache(1682) |-atd(196) |-bash(210)---pstree(1779) |-bash(211) |-bash(212)---vi(1695) |-bash(215)---xinit(1639)-+-XF86_S3V(1644) | `-mwm(1647)-+-.xinitrc(1652)---xterm(1660)---bash(1661) | `-.xinitrc(1655)---xclock(1673) |-bash(214) |-cron(199) |-getty(213) |-gpm(143) |-inetd(138) |-kflushd(2) |-klogd(131) |-kpiod(4)

    59

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    |-kswapd(5) |-kupdate(3) |-lpd(153) |-portmap(136) |-postmaster(168) |-sendmail(179) |-sshd(183) |-syslogd(129) `-xfs(186)

    Enesteotroformato.AparececadaprocesoconsuPID.Podemosverqueel Proceso 'init' tiene pid=1yharealizadovarios forks() generandoprocesosconpid>1.EnalgunossistemaslageneracindenmerosdePIDparaprocesosnuevosserealizaensecuencia. Enotrosresulta unnmeroimpredecible.

    Entre los procesos generados por 'init' estn los procesos 'getty'. Searrancarun'getty'porcadaterminal.Esteprocesoconfiguralavelocidadyotrascosasdelterminal,mandaunsaludoyluegosetransformaconexecelproceso'login'.TodosestosprocesosseejecutanconEUIDyUID=0, esdecir comoprocesosdelsuperusuarioroot. Cuandoel proceso'login'conocenuestraidentidaddespusdevalidarusuariopasswordsetransformarconexecenlashellespecificadaeparanuestrousuarioelfichero/etc/passwd

    Paraverlalneaquecontienesusdatospruebeahacerlosiguiente:

    $grep`whoami`/etc/passwd

    La lnea tiene el siguiente formato.login:contrasea:UID:GID:nombre:dir:intrprete

    Vamos a suponer que su shell por defecto sea la bash. Si esta shellarrancara conel EUID=0 tendramos todos los privilegios del superusuarioperoestonoocurreas.EstashellyatendrnuestroUIDynuestro

    60

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    EUID.Vamosarepresentar todoestomarcandolospuntosenlosqueocurrealgnfork()conunsigno'+'.

    [init]-+fork()->[getty] | +fork()->[getty]-exec()->[login]-exec()->[bash]+fork()-exec()->[comando] | +fork()->[getty] |

    Lashellpuedearrancaruncomandomedianteunfork()yluegounexec()y esperar a que este muera. Recuerde que la funcin exec() no tieneretorno posible ya que finaliza con la muerte del proceso. En esemomentolashell detecta lamuerte desuhijoycontinuasuejecucinsolicitando la entrada de un nuevocomando. Cuando introducimos elcomando'exit'estamosindicandoalashellquefinaliceysupadre'init'seencargar de lanzar nuevo proceso 'getty'. Lgicamente 'exit' es uncomandointernodelashell.Quizslellamelaatencinquelamuertede'bash'termineprovocandounnuevo'getty'cuando'getty'pasa'login'yestea'bash'peroenestasecuenciagettyloginbashnohayningnfork()poresogetty,login,ybashsonenrealidadelmismoprocesoendistintosmomentosconelmismoPIDobtenidoenelfork()realizadopor'init'soloquehaidocambiandosupersonalidadmanteniendolamismaidentidad(mismoPID).Para'init'siempresetratdelmismohijoylamuertedecualquieradeellos(getty,loginobash)provocaquesearranqueunnuevo'getty'sobreesemismoterminalconelfindequeeseterminalnoquedesinservicio.

    LapresentacindelmensajedeLoginesmostradapor'getty'.Unavezintroducido el identificador de usuario ser 'login' quien muestre lasolicitud de introduccin de la password, y una vez introducido elpasswordser la shell quienmuestre el introductor decomandosperoestamoshablandosiempredelmismoproceso.

    Amodo de ejercicio compruebe estas cosas por usted mismo usandoalgunosdeloscomandosqueyaconoce.Parahacerestaprcticanobasta

    61

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    conusarunterminalremotosinoquenecesitarunPCcompletoparairhaciendocosasdesdedistintassesiones. Leproponemoshacerlo msomenosdelasiguientemanera:

    1. Entre en cada unode los terminales disponibles de formaquetodos los terminales estn ocupados por un intrprete decomandos.Bastarconhacerloginentodosellos.

    2. Luegocompruebequenohayningnproceso'getty'.3. Hagaunexitdesdeunodeestosterminales.4. Compruebe desde otro termina que ahora si existe un proceso

    'getty'yanotesupid.5. Introduzcaelnombredeusuarioeneseterminalquequedlibre.6. Compruebeahoradesdeotrasesinqueexisteunprocesologin

    conelPIDqueustedanot.7. Terminedeidentificarsetecleandolapassword8. Compruebedesdeotrasesinqueahoraexisteunashell conel

    PIDqueanotamos.

    Sinotieneelcomando'pstree'tendrqueusar'ps'peroconpstreepuedevermsfcilmenteloqueocurrirahora.

    9. Ahoratecleeelcomando'sleep222'desdelasesinquetieneelPIDanotadoporusted.

    10. Compruebedesdeotrasesinqueel interprete decomandosharealizadounfork()generandouncomandoqueestejecutandoelcomandoindicado.

    Sinohapodidorealizarelejercicioanteriortendrqueconfiarenquelascosassoncomodecimosyyaest.

    Comandops

    Muestralosprocesosactivos.Estecomandoesmuyutilparasaberquecomandosestnfuncionandoenundeterminadomomento.

    62

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    Siemprequesemencioneuncomandopuedeconsultarlapginamandelmismo.Enelcasode'ps'selorecomendamosyaqueesuncomandomuytilconunagrancantidaddeopciones.Nosotrosmencionaremosalgunosejemplosperoseaconsejaprobar'ps'probandolasdistintasopcionesquesemencionanenlapginadelmanual.

    Ejemplos:

    $ # Para ver todos sus procesos que estn $ # asociados a algn terminal.$ ps PID TTY STAT TIME COMMAND.......

    $ # Para ver todos sus procesos y los de otros $ # usuarios siempre asociados a algn terminal.$ ps a PID TTY STAT TIME COMMAND.......

    $ # Para ver todos sus procesos estn asociados o $ # no a algn terminal.$ ps x PID TTY STAT TIME COMMAND.......

    $ # Para ver todos los proceso asociados al $ # terminal 1$ ps t1 PID TTY STAT TIME COMMAND.......

    $ # Para ver todos los procesos del sistema.$ ps ax

    63

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    PID TTY STAT TIME COMMAND.......

    Estosejemplosqueacabamosdeverobtienenunmismoformatodedatos.Explicaremoselsignificadodeestosatributos.

    PID Eselvalornumricoqueidentificaalproceso.

    TTY

    Esel terminal asociadoaeseproceso. Losdemoniosdelsistemanotienenningnterminalasociadoyenestecampofigurarun?

    STAT

    Tiene tres campos que indican el estado del proceso(R,S,D,T,Z) (W) (N) La S indica que el proceso estsuspendido esperando la liberacin de un recurso (CPU,Entrada Salida, etc.) necesario para continuar.Explicaremossoloalgunosdeestosestadosensumomento.

    TIMEIndicaeltiempodeCPUquellevaconsumidoeseprocesodesdequefuearrancado.

    COMMAND

    Muestra el comando y los argumentos que le fueroncomunicados.

    Existen muchas opciones para el comandops queofrecenunformatodistinto.Lerecomendamosespecialmentequepruebe'psu','psl',y'psf'

    EnUnixloscomandossuelenservirparaunasolacosa,aunquesuelentener muchas opciones. La entrada de los comandos suele tener unaestructurasimpleylasalidadeloscomandostambin.Siuncomandonoencuentranadaquehacerexistelacostumbredequeterminedemodosilencioso. Todo esto permite que los comandos puedan combinarseenganchadolasalidadeunoconlaentradadeotro.Algunoscomandos

    64

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    estnespecialmentediseadosparaserusadosdeestaformayselessueledenominarfiltros.

    Lasalidadelcomando'ps'sepuedefiltrar con 'grep'paraquemuestresololaslneasquenosinteresan.

    Configuracindelterminal

    Conviene que comprobemos si su terminal est correctamenteconfigurado para poder interrumpir un proceso. Normalmente se usaperoestodependede la configuracinde su terminal. Si enalgnmomentosuterminalquedadesconfiguradohaciendocosasrarascomo por ejemplo mostrar caracteres extraos intente recuperar lasituacintecleandoel comando 'reset'. EstosoloesvlidoparaLinux.Para otros sistemas puedeser til 'stty sane' que tambin funciona enLinuxperonoestaneficazcomoelcomando'reset'.Paracomprobarlaconfiguracin de su terminal puede hacer 'stty a' aunque obtendrdemasiadainformacinquenoescapazdeinterpretar,podemosindicarlequesefijeenelvalorde'intr'.Deberavenircomo'intr=^C'.Sinololocalizahaga'sttya|grepintr'.Deestaformasoloobtendrunalnea.Paraconfigurarelterminaldeformaquepuedainterrumpirprocesosconpuedeintentarconfigurarsuterminalhaciendo'stty^V^C'.Elcarcternosemostrarenelterminalyaqueactaevitandoqueelsiguientecarcter(ennuestrocaso)noseainterpretadocomocarcterdecontrol.

    NopretendemosahoraexplicarlosterminalesdeLinuxperosiqueremosquecompruebesucapacidadparainterrumpirprocesosconyaqueusaremosestoenlasprcticasquesiguen.Unapruebainofensivaparacomprobar la interrupcion deunprocesoes el siguiente comandoqueprovoca una espera de un minuto. Deber introducir el comando einterrumpirloantesdequeeltiempoestablecido(60segundosseagote).

    $ sleep 60

    65

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    Sinohaconseguidointerrumpirelprocesonosigaadelanteparaevitarque alguna de las prcticas deje un proceso demasiado tiempoconsumiendorecursosdesumquina.Siestaustedsoloenlamquinaesotampocotendramuchaimportancia peroesmejor queaveriguelaformadeinterrumpirelprocesodelejemploanterior.

    Comandotime

    Da los tiempos de ejecucion. Este comando nos da tres valores cuyainterpretacines:

    real Tiempo real gastado (Duracin real)user Tiempo CPU de usuario.sys. Tiempo CPU consumido como proceso de kernel.

    (Es decir dentro de las llamadas al kernel)

    LamayoradeloscomandosestngranpartedeltiemposinconsumirCPUporquenecesitanesperarparahacerentradasalidasobredispositivoslentosqueademspuedenestarenusocompartidosporotrosprocesos.ExisteuncomandocapazdeesperartiemposingastartiempodeCPU.Setrata del comando 'sleep'. Para usarlo le pasaremos unargumento queindiqueelnmerodesegundosdedichaespera.

    PorejemplovamosacomprobarcuantaCPUconsumeunaesperade6segundosusandosleep

    $ time sleep 6

    real 0m6.021suser 0m0.020ssys 0m0.000s

    El resultado obtenido puede variar ligeramente en cada sistema perobsicamenteobtendruntiempo'real'deunos6segundosyuntiempodeCPU('user'+'sys')muypequeo.

    66

  • AntonioCastroSnurmacher(2000)http://www.ciberdroide.com/LLC/LLC.html

    Vamos a medir tiempos en un comando que realice operaciones deentradasalidaascomoprocesodedatos.

    $ time ls /* > /dev/null

    real 0m0.099suser 0m0.080ssys 0m0.010s

    Enestecomandover queelconsumototaldeCPUessuperioraldelcomandosleep.EncualquiercasoeltiemporealtardadoenlaejecucindelcomandoessiempremuysuperioralconsumodeCPU.

    Vamosaprobaruncomandoqueapenasrealiceotracosaqueentradasalida. Vamos a enviar 10Mbytes al dispositivo /dev/null. Existe uncomando'yes'queprovocalasalidacontinuadeuncarcter'y'seguidodeuncarcterretornodecarro.Estapensadoparasustituirlaentradadeuncomando interactivo en el cual queremos contestar afirmativamente atodo lo que pregunte. Nosotros filtraremos la salida de 'yes' con elcomando'head'paraobtenersololos10Mbytesprimerosproducidospor'yes'ylosenviaremosaldispositivonulo'/dev/null' quevieneaserunpozosinfondoenelcualpodemosintroducircualquiercosasinquesellene,peronopodremossacarabsolutamentenada.Enunapalabravamosaprovocarprocesodeentradasalidaperfectamenteintil.

    $ time yes | head --bytes=10000000 > /dev/null

    Tubera rota

    real 0m6.478suser 0m5.440ssys 0m0.900s

    67

  • AntonioCastroSnurmach