Sie sind auf Seite 1von 303

Curso de Linux para novatos, brutos y

extremadamente torpes
Curso de Antonio Castro Snurmacher
Nota:
Este curso procece de la web http://www.ciberdroide.com en formato html y ha sido recopilado en formato PDF
por http://www.educasitio.com para sus lectores a fecha del escrito de !sta nota ha sido imposible contactar con
dicha web por no estar operati"a ni tampoco con el autor para determinar el copyrih#t de !sta obra lo $nico %ue
sabemos es %ue el autor es Antonio Castro Snurmacher. Para cual%uier reclamaci&n contactar en
http://www.educasitio.com
donde tambi!n encontraras otros cursos manuales tutoriales y "ideotitorila'les totalmente #ratis.
Ad"ertencia:
En !sta recopilaci&n pueden faltar al#unas im(#enes %ue no ha podido recuperarse del ori#inal y tampoco estan
los resultados de los test %ue propone el autor a$n as) creemos %ue la calidad de !ste curso no %ueda mermada por
ello.
1. Introduccin
Este curso es una introducci&n #eneral a los sistemas operati"o tipo *ni+ en #eneral y ,inu+ en
particular. -ue de momento consta de dos partes.
Perdone la crude'a de nuestro t)tulo pero cuando termine la primera parte de este curso sentir( %ue
ha superado una desa#radable fase de su e+istencia y podr( reirse de la falta de conocimientos de su
"ecino.
Cuando termine usted la se#unda parte no se como se sentir( usted pero yo me sentir! feli' por%ue
toda")a no est( terminada .
Para un correcto apro"echamiento del curso se recomienda una lectura secuencial de cada uno de
los cap)tulos en orden establecido en este indice. .secuencial %uiere decir primero el / lue#o el 0
lue#o el 1 etc...2
Efecti"amente este $ltimo comentario entre par!ntesis "a especialmente dedicado a nuestro p$blico
predilecto al %ue nos referimos en el t)tulo pero al#unos listillos tambi!n deber)an probar nuestro
curso.
,as con"enciones utili'adas en este curso y la metodolo#)a de traba3o tambi!n se e+plican de forma
pro#resi"a por lo cual saltarse un cap)tulo puede lle"arle a interpretar erroneamente el material del
curso. Posiblemente este usted tentado de empe'ar directamente por la se#unda parte del curso pero
de momento no se ha considerado facilitar esta labor.
Este curso como ya hemos comentado consta por el momento de dos partes bastantante distintas.
,a primera parte Iniciacin al SO Linux asume un ni"el cero de conocimientos. Ni si%uiera
asumiremos una cierta e+periencia con ordenadores y las cosas se e+plicar(n en esta primera
parte paso a paso facilitando lo m(+imo posible la labor del alumno. 4omperemos al#unos
mitos %ue presentan a ,inu+ como S5 para #ur$s. En esta parte no entraremos nunca a
e+plicar cosas %ue necesiten for'osamente una cuenta de superusuario. Ello implicar)a cierto
ries#o ya %ue se trata de un usuario con permisos en el sistema para hacer cosas de todo tipo.
,a se#unda parte Usuario avanzado de Linux asume %ue ya ha asimilado la primera parte
del curso y probablemente todas sus inse#uridades habr(n desaparecido. Esta parte tocar(
al#unos temas m(s relacionados con la administraci&n del sistema y puntualmente
necesitaremos acceso a una cuenta de superusuario pero no ser( un curso de administraci&n
de ,inu+. El ob3eti"o no es administrar un sistema con muchos usuarios sino lo#rar un
ra'onable ni"el de autosuficiencia con ,inu+ considerando las necesidades de
administraci&n del sistema en ordenadores personales con ,inu+ y debe contemplarse como
un curso intermedio entre un curso de 6niciaci&n y uno de Administraci&n.
2. !"#$ %I& I'ICI!CI(' !L SO LI'U) %! *ui+n va
diri,ido este curso&
Esta primera parte del curso es una introducci&n #eneral a los sistemas operati"o tipo *ni+ en
#eneral y ,inu+ en particular.
Esto no pretende ser un 75895 ni una FA- ni una #u)a de usuario de #ro#ramaci&n o de
administraci&n. 9ampoco es una enciclopedia sobre el tema. Esto es un curso de iniciaci&n de *ni+
usando ,inu+ para ilustrar los e3emplos.
9ampoco es una #u)a para hacer las cosas arrastrando y soltando desde un escritorio precioso. ,inu+
tiene "arios escritorios de este tipo pero nosotros usaremos la consola. *n escritorio puede ser m(s
a#radable y m(s intuiti"o pero no todas las cosas pueden hacerse apretando un solo bot&n. Adem(s
esto es un curso y para aprender a usar un escritorio no hace falta un curso.
*sted no necesita para esta primera parte del curso tener acceso a una cuenta de administrador
.root2 ni tendr( %ue usar nin#$n entorno de pro#ramaci&n sal"o la propia shell.
,o %ue se busca es consolidar unas bases te&ricas de los conceptos fundamentales comunes a los S5
tipo *ni+. En una palabra se busca comprender el funcionamiento de este S5. A pesar de ello su
enfo%ue es pr(ctico por%ue se ilustran los conceptos con e3ercicios y por%ue se profundi'a
especialmente sobre los aspectos %ue pueden resultar de utilidad m(s inmediata para un no"ato.
No pre3u'#ue a ,inu+ como un sistema no apto para usted.
Al finali'ar la primera parte del curso usted tendr( conocimientos suficientes para entender como
funciona ,inu+ para un uso a ni"el de usuario normalito y podr( utili'ar el potent)simo len#ua3e
shell:script. Este len#ua3e y la base de conocimientos de este curso le abrir(n una enorme "ariedad
de posibilidades.
Por decirlo de al#una manera cuando termine la primera parte de este curso ser( plenamente
consciente de la enorme potencia y fle+ibilidad de este S5 y se sentir( capa' de hacer cosas %ue
ahora %ui'as le pare'can impensables.
Esperamos %ue esto no le con"ierta en un repun#nante listillo inform(tico pero ya di3imos %ue no
nos hacemos responsables absolutamente de nada.
Cuando termine la se#unda parte se sentir( afortunado de ser un ..... ... ;mmm ...super"i"iente %ue
lle#& al final del curso.
*saremos un len#ua3e acorde a la falta total de conocimientos pre"ios en cambio asumiremos %ue
puede usar un ordenador con ,inu+ instalado y listo para practicar. Es decir no e+plicaremos como
se instala linu+ ni como crear una cuenta de usuario pero asumiremos %ue ya dispone de ambas
cosas y %ue es capa' de abrir una sesi&n de traba3o .es decir hacer lo#in con un usuario y password
"(lidas2
Si es usted un "irtuoso del a'ad&n y la pala en hora buena por%ue este curso es el indicado para
usted pero sustituya esas herramientas por un ordenador. ,os e3emplos y e3ercicios est(n pensados
para %ue los pruebe en su ordenador con su S5 ,inu+ y la pala a'ad&n y otras artes similares no le
ser(n de mucha utilidad para este curso. .Espero %ue mi ami#o Da"id se entere bien de esto $ltimo2.
<ueno con este tipo de comentarios %ui'as piense %ue este curso es poco serio. El uso de un po%uito
de humor lo haremos durante las primeras lecci&nes para %ue se sienta mas rela3ado.
,e proponemos un sencillo test para comprobar si su ni"el es el adecuado.
Se=ale las respuestas %ue a su 3uicio son correctas y lue#o compruebe pulsando el bot&n de
resultado del test.
>> >> 0 ? 0 @ A >>
>> >> Albert Einstein descubri& la Penicilina. >>
>> >> En la ,una no hay aire respirable. >>
>>
>> >>
>>
En hora buena podemos continuar con el curso. Pondremos de "e' en cuando al#unos tests pero no
ser(n tan tri"iales como este.
,inu+ es un S5 tipo *ni+ y por lo tanto sus conceptos m(s b(sicos son comunes a los %ue incorpora
cual%uier sistema tipo *ni+ y resultan bastante distintos de otros conceptos %ue forman parte de la
cultura microinform(tica fundamentalmente de ;icrosoft.
,a documentaci&n de ,inu+ es muy abundante sin embar#o muchas "eces se asume una cultura
#eneral de *ni+ %ue realmente no siempre e+iste. ,as #eneralidades m(s b(sicas de *ni+ muchas
"eces se tratan de un modo superficial y poco sistem(tico %ui'as por%ue son temas muy "ie3os.
El contenido de este curso es en m(s de un BCD ser"ir)a para cual%uier S5 tipo *ni+ y no solo para
,inu+.
En este curso se e+plicar(n conceptos %ue inciden el el conocimieto interno del sistema operati"o. A
estas alturas m(s de uno empe'ar( a pre#untarse si realmente es necesario conocer todos estos
detalles para un simple uso de un S5. ,o cierto es %ue actualmente e+isten escritorios #r(ficos %ue
permiten hacer bastantes cosas de forma intuiti"a. En ,inu+ tenemos por e3emplo EDE o FN5;E
%ue permiten usar los pro#ramas de forma ucho m(s amistosa e intuiti"a. Sin embar#o la
amistosidad tiene un precio. ,os entornos intuiti"os no permiten hacer cual%uier cosa y consumen
muchos recursos de CP* y memoria. En ,inu+ estos entornos son una opci&n no una obli#aci&n.
Este curso esta orientado al uso de ,inu+ desde la consola. Para sacarle el m(+imo pro"echo y para
alcan'ar cierto dominio del len#ua3e shell:script no %ueda m(s remedio %ue tratar estos temas pero
estamos se#uros de %ue una "e' alcan'ado el final de este curso tendr( una "isi&n de *ni+ %ue le
permitir( atre"erse con cosas impensables ahora.
9ambi!n se propone el aprendi'a3e de los comandos m(s interesantes del sistema para poder hacer
un #ran n$mero de cosas y alcan'ar un alto ni"el de autosuficiencia en su mane3o.
Este curso es suficiente para %ue una persona %ue $nicamente pretenda defenderse en este sistema
operati"o consi#a su prop&sito pero adem(s permite %ue el usuario cono'ca aspectos %ue son
imprescindibles para poder a"an'ar mucho m(s por su cuenta si ese es su deseo.
Se e"itar( en lo posible mencionar aspectos relati"os a la administraci&n del sistema ya %ue esto
ser)a ob3eto de otro curso.
E+isten documentos %ue tratan de la administraci&n de ,inu+ y de la instalaci&n de ,inu+.
Si usted pretende usar su propio S5 ,inu+ en su ordenador personal con"endr)a %ue continuara
aprendiendo la administraci&n de un S5 ,inu+ ya %ue usted ser)a el administrador de su sistema.
4ecuerde %ue ,inu+ no fu! concebido como sistema monousuario. Solo una recomendaci&n muy
b(sica. 9en#a en su ordenador como m)nimo dos usuarios. *no ser)a el superusuario GrootG con
capacidad ilimitada para lo bueno y para lo malo y otro su usuario de traba3o normal. ,a ra'&n es
%ue una e%ui"ocaci&n cometida desde un usuario normal solo puede tener malas consecuencias para
el area de traba3o de ese usuario. Por el contrario una e%ui"ocacion desde GrootG puede destruir toda
la informaci&n de su sistema.
Dado %ue "amos a usar ,inu+ desde consola y al#unos usuarios pueden tener e+periencia pre"ia
con ;sdos me parece necesario hacer una nue"a ad"ertencia destinada a estos usuarios.
El comportamiento del interprete de comandos de ;sdos y de ,inu+ tienen al#una seme3an'a pero
al#unas cosas %ue estamos acostumbrados a usar en ;sdos no son otra cosa %ue burdas imitaciones
de las e+traordinarias posibilidades del interprete de comandos de ,inu+. Como consecuencia de
esto un intento de hacer en ,inu+ cosas parecidas a las %ue hacemos en ;sdos puede lle"ar a
desa#radables sorpresas ya %ue en ,inu+ se re%uiere tener una idea de como funciona el interprete
de comandos.
Dar una relaci&n de comandos e%ui"alentes entre .*ni+ o ,inu+ y ;sdos2 sin e+plicar nada m(s
puede lle"ar a confusiones peli#rosas. En otras palabras puedes ca#arla si te pasas de listo. En este
sentido los comandos b(sicos para el mane3o de ficheros GrmG Gm"G y GcpG no se deber)an usar sin
comprender correctamente el funcionamiento b(sico del interprete de comandos de ,inu+ y en
particular como este e+pande las ordenes.
*n intento de usar ,inu+ sin un pe%ue=o es fuer'o de asimilaci&n de al#unos conceptos puede
lle"ar a situaciones muy frustrantes. E+iste incluso hoy en d)a una #ran cantidad de profesionales
%ue han tenido %ue traba3ar durante meses o a=os con al#$n S5 tipo *ni+ sin %ue nadie les
e+plicara las cuatro cosillas b(sicas imprescindibles. Esto ocurre por%ue para otros S5 resulta
perfectamente posible aprender por uno mismo practicando con el sistema pero en nuestra opini&n
los S5 de tipo *ni+ re%uieren la asimilac)on de unos conceptos bastante simples pero en absoluto
intuiti"os. ,os usuarios %ue tienen aler#ia a los manuales y %ue no recibieron formaci&n para *ni+
raramente lle#an a entender este S5 y es l&#ico %ue se encuentren a dis#usto y %ue maldi#an a este
S5. ;uchos no consideraron necesario %ue fuera importante asimilar unos conceptos b(sicos
pre"ios ya %ue la e+periencia anterior con otros S5 m(s intuiti"os les indu3o a pensar %ue con el
simple uso del S5 podr)an alcan'ar ese conocimiento por ellos mismos. ,os %ue tu"ieron la suerte
de recibir un buen curso o para los %ue tu"ieron la paciencia de in"esti#ar por su cuenta los
fundamentos de este S5 es f(cil %ue lle#en a enamorarse de el. *ni+ siempre ha despertado estas
dos tipo de reacciones. 7ay %uien lo adora y hay %uien lo odia. ,os %ue lo adoran ase#uran %ue es
un S5 sencillo ele#ante potente y fle+ible. ,os %ue lo odian dicen %ue es dificil de usar.
6ntentamos con este curso %ue lle#ue a pensar como los primeros.
-. Introduccin a Linux
SlacHwareI es una distribuci&n totalmente libre y muy sencilla en el sentido de %ue est( poco
elaborada. 4esulta adecuada para cacharrear con ella. Fue creada por Patric JolHerdin#. Fu! una de
las primeras y tu"o su epoca de #ran au#e pero actualmente ha cedido prota#onismo. No dispone de
un buen sistema de actuali'aci&n.
Libertad de distribucin
Se refiere a la libertad de comerciali'ar el software sin %ue sea necesario pa#ar derechos de
nin#$n tipo.
Cdi,o libre
Se considera %ue el c&di#o es libre cuando los fuentes son de domini& p$blico.
Inte,ridad de los .uentes
Se recomienda no restrin#ir los derechos de modificaci&n del c&di#o fuente aun%ue se
aceptan al#unas f&rmulas %ue restrin#en la forma de efectuar ciertas modificaciones pero no
entramos en estos detalles ahora.
'o discriminacin para ,rupos o personas
,a licencia no considera distinci&n al#una para nin#$n tipo de persona o #rupo.
'o discriminacin para actividad o propsito
Por e3emplo no se distin#ue entre uso comercial dom!stico educati"o etc.
/istribucin de la licencia
,a licencia afectar( a las sucesi"as distribuciones de los pro#ramas de forma autom(tica sin
necesidad de tr(mite al#uno.
La licencia no debe de ser espec0.ica de /ebian
Es decir Debian no admitir)a una licencia %ue impida el uso de un pro#rama fuera de la
distribuci&n Debian.
La licencia no debe contaminar otros pro,ramas
,a licencia no debe imponer restricci&n al#una a otros pro#ramas. Por e3emplo no ser)a
admisible obli#ar a %ue el pro#rama solo se pueda redistribuir en un medio %ue no conten#a
software comercial.
$1emplos de licencias libres
FP, <SD y Artistic son e3emplos de licencias libres.
Cada licencia tiene sus peculiaridades. Por e3emplo si usted desarrolla aplicaciones haciendo uso de
fuentes prote#idas ba3o la licencia FP, estar( asumiendo para todo su desarrollo la condici&n de
FP,. En cambio podr)a desarrollar software propietario deri"ado de fuentes ba3o licencia <SD. ,a
FP, se ha hecho muy popular por%ue prote3e el le#ado del software libre para %ue continue como
tal.
Debian I es una distribuci&n totalmente libre desarrollada por un #rupo muy numeroso de
colaboradores en el m(s puro espiritu de ,inu+. Su calidad es e+traordinaria. Se trata de una
distribuci&n muy seria %ue traba3a por el placer de hacer las cosas bien hechas sin presiones
comerciales de nin#$n tipo pero %ue resulta m(s adecuada para usuarios con conocimientos
pre"ios ya %ue el #rado de amistosidad en especial para los no"atos de3a bastante %ue desear
si se compara con al#unas distribuciones comeriales. ,os usuarios t)picos de Debian son
a%uellos %ue tienen como m)nimo al#$n conocimiento t!cnico y %ue tampoco tienen reparos
a la hora de in"esti#ar un poco las cosas. El idioma sobre el cual traba3a y se coordina el
#rupo Debian es el 6n#les y por e3emplo los bu#s deben ser reportados en 6n#les. ,a
se#uridad y la detecci&n y r(pida correccion de errores son sus puntos fuertes. Soporta un
en&rme n$mero de pa%uetes. Es una distribuci&n tremendamente fle+ible. Su sistema de
mantenimiento de pa%uetes GdpH#G tambi!n es de lo me3or.
4ed7at I es actualmente la distribuci&n m(s ampliamente difundida aun%ue eso no si#nifica
%ue sea la me3or. 5frece un entorno ami#able %ue facilita la instalaci&n. 6ncorpor( software
propietario de #ran calidad. El sistema de pa%uetes G4P;G es muy bueno y utili'ado por un
#ran n$mero de distribuciones.
SuSE I Es una distribuci&n comercial alemana %ue ha tenido un crecimiento espectacular.
5frece un entorno muy ami#able %ue facilita mucho la instalaci&n. Se#uramente es la m(s
facil de instalar y de mantener. Capacidad de autodetecci&n de 7ardware. 6ncorpor(
abundante software propietario de #ran calidad. En #eneral se puede decir %ue es muy
completa y muy recomendable para cual%uiera %ue no ten#a muchos conocimientos de
,inu+.
Caldera Es una distribuci&n comercial. 5frece un entorno ami#able %ue facilita la
instalaci&n. 6ncorpor( software propietario de #ran calidad.
,a elecci&n de una distribuci&n "iene condicionada por muchos factores. 7ay muchas
distribuciones actualmente y cada poco aparecen nue"as.
Si lo %ue desea saber es cual es la distribuci&n con la me3or relaci&n calidad precio y %ue adem(s se
a3uste a sus necesitades consulte Comparaci&n de distribuciones ,inu+I
,a cantidad de informaci&n sobre ,inu+ en 6nternet es enorme. E+iste una a#enda de direcciones de
internet relati"as a ,inu+ y clasificadas por temas. ,e recomendamos %ue #uarde la direcci&n de
esta a#enda Donde ,inu+I en su na"e#ador.
#est
Puede comprobar sus conocimientos respondiendo el si#uiente test.
Para ello seleccione las opciones %ue se a3usten a la "erdad y lue#o pulse el boton para "er el
resultado de su test.

/ El S5 ,inu+ se inspir& en ;SD5S
0 Debi(n no dispone de un buen sistema de actuali'ac)on de pa%uetes
1 El interprete de comandos forma parte del nucleo de ,inu+
A ,inus tu"o %ue desarrollar no solo el nucleo sino un compilador de C
K ,inus 9or"alds fund& FN* para desarrollar software #ratuito
L *na distribuci&n or#ani'a el software libre disponible y crea
software adicional para %ue todo funcione como un S5 completo
M Debian solo traba3a con pro#ramas %ue usen la licencia FP,
2. !l,unos conceptos b3sicos
Jisi&n panor(mica:
En su momento trataremos los temas abordados en este cap)tulo de forma completa. En este
momento dado %ue partimos de cero se hace necesario al menos esbo'ar una serie de conceptos %ue
son tan elementales %ue dificilmente se puede e+plicar al#o sin hacer referencia a ellos.
Por otra parte estos conceptos est(n interrelacionados de tal forma %ue tampoco se puede abordar
nin#uno de ellos en detalle en este momento. Por ello nuestro primer ob3eti"o es ofrecer una "isi&n
panor(mica del S5. Por borrosa %ue resulte siempre ser( me3or esto %ue empe'ar directamente
abordando en detalle los temas.
*saremos muchas "eces de forma indistinta *ni+ y ,inu+. No son cosas e%ui"alentes pero en este
curso consideraremos ambas cosas como e%ui"alentes sal"o %ue concretemos detalles espec)ficos
de ,inu+. Para nosotros ,inu+ es un S5 tipo *ni+ y precisamente nos centraremos en los aspectos
m(s #enerales de estos sistemas operati"os. Entre sus caracter)sticas m(s destacables est( la de ser
un S5 multitarea y multiusuario. *n sistema multitarea es a%uel %ue puede e3ecutar "arios procesos
simultaneamente. Para ello se puede usar uno o mas procesadores f)sicos. En el caso de un solo
procesador lo %ue ocurre es %ue el tiempo del procesador se "a repartiendo para atender los distintos
procesos creando la ilusi&n de %ue todo ocurre simultaneamente. *n sistema multiusuario es a%uel
%ue est( pensado para ser utili'ado por "arios usuarios simultaneamente. En la pr(ctica un sistema
multiusuario re%uiere capacidad multitarea. En el caso concreto de ,inu+ es adem(s un S5
multiplataforma ya %ue puede funcionar en diferentes ar%uitecturas.
,os conceptos %ue mencionemos en este curso procuraremos ilustrarlos con e3emplos.
El comando GechoG es un comando %ue "amos a usar mucho para practicar. Este comando se limita a
"isuali'ar en pantalla todo a%uello %ue se le pasa como ar#umentos. Por eso nos resultar( muy util.
,o primero %ue "amos a practicar y %ue no debe ol"idar es el hecho de %ue en *ni+ los ficheros
comandos etc.. deben indicarse e+actamente respetando la diferencia entre may$sculas y
min$sculas.
N echo hola
N EC75 hola
,a se#unda linea habr( producido un mensa3e de error por%ue no e+iste ni#$n comando llamado
EC75 con may$sculas.
Jariables de entorno:
Empe'aremos hablando de las "ariables sin profundi'ar ahora en ello. *na "ariable solo es un
elemento %ue tiene un nombre y %ue es capa' de #uardar un "alor. Para definir una "ariable basta
poner su nombre un i#ual y su "alor. .53o no de3ar espacios2.
N JA411@"alorOdeOlaO"ariableOJA411
En *ni+ las "ariables del sistema se llaman "ariables de entorno. Para consultar el "alor de una
"ariable se utili'a el nombre de la "ariable precedido por GNG.
N echo NJA411
Para "er todas las "ariables y sus "alores se utili'a el comando set.
Para hacer la "ariable e+portable se usa el comando Ge+portG. Se puede hacer %ue una "ariable sea de
solo lectura con el comando GreadonlyG. Este comando sin par(metros mostrar( todas las "ariables
%ue son de solo lectura. Pruebe estos comandos:
N set
N readonly
N e+port
E+isten al#unas "ariables predefinidas y hay tres "ariables importantes %ue mencionaremos en
se#uida y %ue son NPA97 NPS/ y NPS0.
Directorios::::A%u) tambi!n tenemos %ue hacer un pe%ue=o a"ance sobre la estructura de directorios
de *ni+ por%ue si no puede %ue no se entienda lo %ue "amos a hablar sobre la "ariable NPA97.
En *ni+ la estructura de directorios es en forma de arbol similar a la de ;sdos. Dado %ue la
estructura de directorios se or#ani'a como las ramas de un arbol para locali'ar un punto cual%uiera
hay %ue utili'ar cada uno de los directorios %ue conducen a ese punto desde el directorio rai'.
Nosotros lo llamaremos camino y en *ni+ se le suele llamar path. Se empie'a en el directorio rai'
representado por G/G y se a"an'a por las ramas de ese arbol separando cada identificador por un
nue"o caracter G/G. De esta forma G/usr/local/binG indica un lu#ar concreto en el arbol de directorios.
-ui'(s se pre#unte por%u! *ni+ usa G/G en lu#ar de GPG como en ;sdos. 4ecuerde %ue ;sdos fu!
posterior a *ni+ y %ue a <ill Fates le #usta in"entar cosas totalmente nue"as y re"olucionarias.
Aun%ue el astuto lector ya se habr( dado cuenta ad"ierto a los despistados %ue estoy ironi'ando.
Apro"echando %ue estamos hablando de directorios mencionaremos %ue hay directorios con
si#nificado especial. Est( el directorio rai' G/G %ue ya hemos mencionado. Est( el directorio GhomeG
%ue es el punto donde el sistema nos situa para traba3ar cuando entramos en !l. 4ecordemos %ue en
*ni+ normalemente no disponemos de todo el sistema para nosotrso solos. ,ue#o podemos cambiar
de directorio de traba3o. El directorio de traba3o actual se representa como directorio G.G El directorio
anterior o directorio padre de este directorio se representa por G..G. ,os comandos GcdG GmHdirG y GpwdG
sir"en para cambiar de directorio actual crear un directorio y a"eri#uar en %ue directorio nos
encontramos actualmente.
Estamos dando ideas en forma intuiti"a. En realidad cuando di#o Q ... en %ue directorio nos
encontramos actualmente ...Q es una forma de e+presarse. Normalmente el usuario no estar( en un
directorio sino sentado en una silla sentado delante de una pantalla pero la shell mantiene en todo
momento al#$n directorio abierto como directorio de traba3o actual.
Comandos
*n comando es #eneralmente un fichero e3ecutable locali'ado en al#una parte de nuestro sistema.
E+iste una "ariable llamada NPA97 %ue contiene una lista de caminos de bus%ueda para los
comandos todos ellos separados por G:G. Compruebe el "alor de su "ariable NPA97.
N echo NPA97
Si un comando no est( locali'ado en nin#uno de esos caminos deber( ser referenciado indicando el
camino completo ya %ue de otra forma no podr( ser referenciado. Si %uiere saber donde se
encuentra un e3ecutable use el comando which. Este comando buscar( en los caminos contenidos en
la "ariable NPA97 hasta %ue encuentre el comando y entonces mostrar( el camino completo %ue
conduce al comando. Puede ocurrir %ue un comando se encuentre duplicado y %ue los dos sitios
donde se encuentre fi#uren en el NPA97. En ese caso se e3ecutar( el comando %ue se encuentre en
el primer camino referenciado en el NPA97. 6#ualmente el comando which solo mostrar( el primer
camino referenciado en el NPA97. Estamos usando un comando llamado echo para mostrar "alores.
Jamos a locali'arlo.
N which echo
Echo esta situado en uno de los caminos contenidos en NPA97. En resumidas cuentas NPA97 es
una "ariable %ue usa el interprete de comandos para locali'ar los comando. En la lecci&n si#uiente
hablaremos de GmanG. Es un comando %ue sir"e para consultar el manual en linea de ,inu+. Pues
bien e+iste una "ariable llamada N;ANPA97 %ue contiene la lista de los caminos donde el
comando GmanG debe buscar las p(#inas del manual. ,a "ariable N;ANPA97 ser( usada por el
comando GmanG y %ui'as al#$n otro. ,a "ariable NPA97 ser( usada por la shell y %ui'as por al#$n
otro comando como por e3emplo GwhichG del cual acabamos de hablar.
Somos conscientes de %ue no estamos e+plicando #ran cosa ahora pero son conceptos muy
elementales %ue "amos a utili'ar antes de e+plicar en profundidad todo el sistema de ficheros de
*ni+.
;(s adelante tambi!n hablaremos m(s detenidamente sobre las "ariables de entorno. Estamos
dando unos pe%ue=os esbo'os sobre al#unas cuestiones por%ue hay mucha interrelaci&n de unos
conceptos con otros y resulta imposible abordar nada en profundidad al principio.
*suarios
,inu+ es un sistema operati"o multiusuario y eso implica una filosof)a de uso muy distinta a la del
tradicional ordenador personal. Cuando un usuario "a a usar un S5 9ipo *ni+ lo primero %ue
necesita hacer es identificarse para ser autori'ado a abrir una sesi&n de traba3o. 9ambi!n es
multitar!a y por ello en el mismo instante "arios procesos pueden estar funcionando y cada uno
puede pertenercer a usuarios distintos. ,a informaci&n %ue se #uarda en el disco duro tambi!n
puede pertenecer a distintos usuarios y para e"itar %ue todo ello pro"o%ue conflictos e+isten unos
atributos de usuario %ue se asocian a los ficheros a los directorios a los procesos etc. En funci&n de
esto hay cosas %ue estar(n permitidas a ciertos usuarios y a otros no.
,os usarios pueden estar or#ani'ados en diferentes #rupos a fin de poder mane3ar permisos a ni"el
de #rupo. Esto se hace para simplificar la administraci&n del sistema.
,os usuarios y los #rupos dentro del sistema se mane3an como un n$mero llamado *6D y F6D
respecti"amente. ,os n$meros en un ordenador se mane3an con mucha m(s facilidad %ue un literal.
Por eso el nombre de usuario y el nombre de #rupo se #uardar(n solo en un fichero 3unto al n$mero
*6D y F6D asociado pero para el sistema un usuario un #rupo un proceso un fichero y muchas
otras cosas se identifican por una cla"e num!rica. Para un ordenador resulta m(s sencillo consultar
si el proceso AKL perteneciente al usuario /CK tiene permiso de escritura en el fichero ARBLA %ue
consultar si el usuario GpepitoG perteneciente al #rupo GalumnosG tiene permiso de escritura en el
fichero G/home/pepito/leccionCCK.t+tG. Cuando el ordenador tiene %ue mostrar informaci&n en
formato inteli#ible buscar( la descripci&n correspondiente a cada cla"e num!rica. Cada cla"e recibe
un nombre como por e3emplo los *6D F6D %ue ya hemos comentado otra ser)a por e3emplo el P6D
para procesos y e+isten otras muchas m(s %ue iremos aprendiendo y %ue forman parte de la 3er#a de
este S5.
Para "er los datos de identificaci&n relati"os a su usuario pruebe lo si#uiente:
N id
El comando Gid :unG o el comando GwhoamiG muestran su nombre de usuario.
N whoami
E+iste un usuario especial %ue #o'a absolutamente de todos los pri"ile#ios y %ue se llama root. Su
n$mero de usuario es decir su *6D es C.
El N$cleo del sistema .Hernel2
El n$cleo del sistema llamado tambi!n Hernel es el encar#ado de reali'ar la mayor)a de funciones
b(sicas del sistema y #estiona entre otras cosas la memoria los ficheros los usuarios las
comunicaciones los procesos etc. ,a #est)on de estas cosas se hacen por medio de un limitado
n$mero de funciones %ue se denominan llamadas al sistema y %ue pueden ser usadas por los
pro#ramas. ,os procesos %ue usan una llamada al sistema cambian su modo de e3ecuci&n. ;ientras
est(n e3ecutando la llamada del n$cleo se dice %ue estan en modo n$cleo y cuando est(n e3ecutando
c&di#o %ue no pertenece al n$cleo se dice %ue est(n en modo usuario. Son dos ni"eles de e3ecuci&n
distintos ya %ue el modo n$cleo es un modo pri"ile#iado. Esto #aranti'a a ni"el de hardware %ue
nin#$n pro#rama de usuario pueda acceder a recursos #enerales del sistema ni interactuar con otros
procesos a no ser %ue use las llamadas del n$cleo las cuales establecer(n si tiene o no permiso para
hacer ciertas cosas. Esto proporciona #ran robuste' de funcionamiento. *n pro#rama mal dise=ado
no per3udicar( 3am(s al sistema ni a otros procesos. Cada proceso tiene su propia 'ona de memoria
y no puede acceder fuera de ella ni intencionadamente ni accidentalmente. Para %ue un pro#rama
pudiera tener un efecto destructi"o en el sistema tendr)a %ue pertenecer a GrootG o pertenecer al
propio nucleo del sistema y solo el admiministrador GrootG puede alterar el dicho nucleo. Si el
ordenador aparece un buen d)a destro'ado a martilla'os tambi!n buscaran la forma de culpar a GrootG
para no perder la costumbre.
Procesos
*n proceso a diferencia de un pro#rama es al#o "i"o es decir al#o %ue est( funcionando. En un
sitema multitarea como este un pro#rama puede dar lu#ar a "arios procesos. A cada proceso le
corresponder( con un n$mero de identificaci&n llamado P6D %ue le identifica totalmente. Adem(s
de esto se #uarda la informaci&n de identificaci&n del usuario propietario. Cuando un usuario
e3ecuta un comando se arranca el proceso correspondiende del cual #eneralmente permanecer(
como propietario. Es decir el sistema no acepta &rdenes an&nimas. Siempre fi#urar( un usuario para
hacer cada cosa. Esto se indica con un n$mero *6D para identificar el usuario correspondiente. No
siempre este *6D se corresponde con el usuario %ue arrancaro el proceso. Por ello e+iste adem(s de
un *6D un identificador de usuario efecti"o .E*6D2 %ue es el %ue realmente es tenido encuenta por
el sistema a la hora de conceder permiso para hacer ciertas cosas. El E*6D de GrootG es C. Ahora no
importa como pero al#unos comandos de forma bien controlada podr)an con"ertirnos "irtualmente
en superusuarios haciendo %ue su E*6D "al#a C. Esto ser"ir)a por e3emplo para permitir hacer cosas
especiales y muy concretas nada m(s %ue en condiciones normales solo GrootG podr)a hacer. No
hemos mencionado intencionadamente al#unas cosas .como por e3emplo el #rupo de usuario2
por%ue estamos simplificando mucho intencionadamente para intentar %ue en este momento solo
capte una primera idea #eneral.
Si se siente un poco mareado y confuso rela3ese y acostumbrese a esta sensaci&n. ,os primeros
pasos suelen ser los m(s complicados. Especialmente en *ni+ por%ue no fu! dise=ado como un
sistema intuiti"o.
#est
Puede comprobar sus conocimientos respondiendo el si#uiente test.
Para ello seleccione las opciones %ue se a3usten a la "erdad y lue#o pulse el boton para "er el
resultado de su test.

/ ,os comandos internos no usan la "ariable PA97
0 El directorio actual de traba3o es el G..G
1 El P6D de un proceso arrancado por GrootG "ale C
A El E*6D y el *6D de un proceso no tienen por%ue coincidir
K El multiproceso re%uiere "arios procesadores
L El modo n$cleo es un modo pri"ile#iado
4. 5anual online de Linux
el rinc&n del no"ato I.
>> >> Se pueden e+plicar muchas cosas sobre man pero es imprescindible %ue practi%ue usted. Para
ello de un r(pido primer "ista'o a la p(#ina man relati"a al comando man. ;ientras no indi%uemos
lo contrario con"iene %ue pruebe todos los comandos %ue se indican a modo de e3emplo. Si tiene
posibilidad de usar dos sesiones le resultar( m(s comodo practicar sobre la marcha. 9eclee ahora el
comando si#uiente:
>> N man man
>>
7abr( "isto un documento %ue e+plica el uso de man y %ue tiene una estructura caracter)stica de
todas las p(#inas man. >>
,as p(#inas del manual utili'an un formateador de documentos llamado troff. Permite especificar el
estilo de un documento. .;anera en %ue se "en los t)tulos encabe'ados parrafos donde aparecen
los n$meros de p(#ina etc. Debido a su fle+ibilidad troff resulta bastante dificil de usar. nroff y
#roff sir"en para lo mismo pero no e+plicaremos sus diferencias. Pensamos %ue solo necesitar
conocer su e+istencia. Si no instala estos pro#ramas no podr( usar man en su ordenador.
5tro e3emplo. Para obtener toda la informaci&n relati"a al comando GlsG ha#a lo si#uiente:
>> N man ls >>
Cuando no se conoce e+actamente la palabra %ue se desea buscar se puede buscar por palabra cla"e.
Para ello usaremos la opci&n :H y la opci&n :f. Esta opci&n no est( disponible en muchos sistemas
debido a %ue hay %ue #enerar referencias y esto consume mucho espacio en disco. El administrador
puede #enerar las referencias usando el comando GcatmanG
Cuando no conocemos el nombre de un comando y tampoco encontramos nada por palabra cla"e
pero sabemos %ue es lo %ue hace podemos usar el comando GaproposG. Compruebelo tecleando los
si#uientes comandos:
>> N apropos man
N apropos apropos
N man apropos
>>
Si tiene su sistema ,inu+ correctamente confi#urado para imprimir documentos en formato
PostScrip podr( imprimir una p(#ina del manual haciendo
>> N man :t man > lpr
>>
>> N man / printf
N man 1 printf
>>
Como habr( podido obser"ar se refieren a cosas distintas. En el primer caso printf es un comando y
en el se#undo una funcion estandar de C con el mismo nombre. Si no se indica la secci&n la
b$s%ueda se lle"a a cabo en todas las secciones de manual disponibles se#$n un orden
predeterminado y s&lo se presenta la primera p(#ina encontrada incluso si esa p(#ina se encuentra
en "arias secciones. Por el contrario usando la opci&n :a presentar( secuencialmente todas las
p(#inas disponibles en el manual. Compruebe esto con los si#uientes e3emplos:
>> N man printf
N man :a printf
>>
Consute las secciones %ue est(n disponibles en su sistema en man%1&. Acabamos de indicar lo %ue
si#nifica man./2 as) %ue el astuto lector ya deber)a estar mirando en la secci&n / del manual.
7emos "isto unas pocas opciones del comando man. 6ntente utili'ar al#unas otras opciones. Es
importante %ue se familiarice con !l. ,as p(#inas man no est(n pensadas para ense=ar pero cada
"e' %ue ten#a una duda de como se utili'a al#o tendr( %ue recurrir a ellas como primera fuente de
informaci&n.
Con esto pretendemos %ue abandone usted al#unas de sus "ie3as costumbres. Antes usted pensaba
de la si#uiente manera:
Si funciona aceptablemente para %ue tocarlo.
Si no funciona apa#amos y "ol"emos a encender
Si nada de esto sir"e llamamos a un ami#o.
Ahora ya sabe %ue tambi!n puede optar por una lectura del manual. 7a#alo pero consulte de
momento solo la informaci&n relati"a a los n$meros de secci&n partes de un manual y las opciones
:a :H :t. Asumimos %ue no es necesario la lectura en profundidad por%ue habr( cosas %ue aun no
puede interpretar. 9en#a en cuenta %ue partimos de un ni"el cero. A$n no sabe usted lo %ue
si#nifican al#unas cosas. Por eso una "e' finali'ado el curso con"endr( %ue "uel"a a mirar esta
p(#ina man relati"a al comando man para sacarle m(s pro"echo.
#est
Puede comprobar sus conocimientos respondiendo el si#uiente test.
Para ello seleccione las opciones %ue se a3usten a la "erdad y lue#o pulse el boton para "er el
resultado de su test.

/ ,a secci&n para 3ue#os es la L
0 Para sacar todas las secciones relati"as a una palabra se usa la opcion :t
1 ,as p(#inas de man tienen solo tres partes .N5;<4E S6N5PS6S y DESC46PC65N2
A Para buscar por palabra cla"e se usa la opci&n :H
K ,a opci&n :H re%uiere unos indices %ue %ui'as est!n suprimidos por%ue ocupan mucho espacio de
disco duroG
6. 'ociones b3sicas sobre el interprete de comandos
Introduccin a la s7ell de Unix
E+isten "arias shells para *ni+ Eorn:Shell .Hsh2 <ourne:Shell .sh2 C:Shell .csh2 y muchas m(s.
E+isten al#unas para prop&sitos especiales. Por e3emplo la remote:Shell .rsh2 se utili'a para e3ecutar
comandos en un ordenador remoto. ,a Secure Shell .Ssh2 se utili'a para establecer una cone+ion
se#ura con un ordenador remoto.
,a m(s utili'ada en ,inu+ es la <ourne:A#ain S7ell .bash2.
Nosotros de momento "amos a tratar principalmente la <ourne Shell %ue es la m(s est(ndar.
,a Eorn:Shell y la <ash son distintos supercon3untos distintos de la <ourne:Shell y por ello todo lo
%ue se di#a para la <urne:Shell ser( "(lido tambi!n para la Eorn:Shell y para la <ash.
En ,inu+ se suele usar la <ourne:A#ain S7ell .bash2 como sustituta de la <ourne:Shell .sh2.
Puntualmente tambi!n e+plicaremos al#una peculiaridad de la bash.
Para saber %ue shell est( usando usted ha#a lo si#uiente:
N ps > #rep NN
Si aparece :bash o :sh puede continuar sin problemas ya %ue est( usando una shell adecuada para
practicar lo %ue "iene a continuaci&n. En caso contrario tecle el comando GshG o el comando GbashG
antes de continuar. Juel"a a reali'ar la comprobaci&n anterior y "er( %ue ahora esta usando otra
shell.
En cual%uier caso cual%uier Shell es un pro#rama normal y corriente pero incorpora muchos de los
conceptos m(s pr(cticos de *ni+. No tiene nada de particular %ue al#unos sistemas incorporen
al#unas Shells distintas.
*na Shell no es solo un interprete de comandos. *na Shell es sobre todo un interprete de un potente
len#ua3e.
$structura de la linea de orden
Sabe usted lo %ue es un introductor S .en in#les lo llaman prompt2. Pues es a%uello %ue el interprete
de comandos muestra para indicar %ue est( esperando a %ue se introdu'ca una orden. En *ni+ el
introductor de la orden de comandos no es siempre el mismo. Por defecto suele "enir confi#urado
distintos introductores para distintos interpretes de comandos y tambi!n se usa un introductor
distinto para el usuario root. Sin embar#o el introductor puede ser "ariado ya %ue es almacenado en
una "ariable del sistema. En realidad la shell utili'a dos introductores distintos. Para "er cuales est(
utili'ando ahora teclee lo si#uiente:
N echo Q6ntroductor /@NPS/Q
N echo Q6ntroductor 0@NPS0Q
Cuando aparece el primer introductor del sistema NPS/ indica %ue la shell est( esperando la
introducci&n de una orden. ,as ordenes se terminan mediante . Si despu!s de pulsar la shell no
considera %ue el comando este completo %uedar( esperando m(s entrada mostrando el se#undo
introductor NPS0.
Si al#una "e' no es capa' de terminar la introducci&n de un comando pruebe a abortar usando
TCtrl:CU
*na orden constar( de un n$mero "ariable de elementos separados por blancos o por TtabU.
En una orden se pueden distin#uir comandos opciones ar#umentos meta:caracteres comentarios
comandos internos...etc. ,os blancos se usan para separar las opciones y ar#umentos presentes en
una linea de ordenes y usados de esta forma .como separadores2 una secuencia de blancos tiene el
mismo efecto %ue uno solo. .53o en *ni+ las may$sculas y min$sculas son si#nificati"as.2
A continuaci&n se menciona de forma no e+austi"a los elementos del len#ua3e shell:script. No
intentamos %ue se aprenda todos estos elementos ni "amos a comentar ahora todos ellos. <astar(
%ue se ha#a una idea de %ue tipos de elementos pueden inter"enir.
Comandos8
Son ficheros e3ecutables. Para %ue la shell localice el comando deber( estar en un subdirectorio %ue
forme parte de la "ariable PA97 o de lo contrario debe especificarse el camino completo.
Opciones8999::;eneralmente las opciones de un comando son letras precedidas de un si,no <9<.
$n al,unos comandos se pueden poner varias opciones como varias letras se,uidas precedidas
del si,no <9<. !l,unas opciones pueden venir como <99=opcion>< y concretamente en Linux es
muy .recuente poder usar las opciones 997elp y 99version en casi todos los comandos.
recisamente con la opcin 997elp obtendremos ,eneralmente la lista de opciones disponibles
para un comando. #ambi+n es .recuente el uso de opciones precedidas por <?<. $n al,unos
comandos el orden de las opciones es muy si,ni.icativo. 'o merece la pena 7ablar m3s de esto
a7ora por*ue vamos a usar un montn de comandos con un montn de opciones en este curso
y tendremos ocasin de practicar muc7o con ellas.
;eta:caracteres :
#ienen un si,ni.icado especial para la s7ell y son uno de los si,uientes caracteres8
@ A % & B > > =espacio> =tab>
5peradores de control:
BB A AA @ @@ % & B =nueva9linea>
Ar#umentos::::VVSon literales tomados como par(metros de entrada para al#$n comando.
Comentarios8999::#odo lo *ue si,ue al car3cter <C< 7asta =nueva9linea> ser3 un comentario.
Palbras reser"adas:
Son palabras reservadas para implementar el len,ua1e s7ell9script. Son palabras reservadas8
case, do, done, eli., else, esac, .i, .or, .unction, i., in, select, t7en, until, D7ile, time.
Comandos internos:
Comandos *ue est3n implementados dentro de la propia s7ell. 'o necesitan !#E. $1emplos
de comandos internos son8
cd, exec, ar,, eval, exit,...
ara una re.erencia exacta y completa deber0a acudir a la p3,ina man bas7%1& aun*ue eso
resultar0a excesivo en este momento.
Famos a dar una serie de e1emplos para *ue los practi*ue en su ordenador. 'o es necesario
*ue introduzca los comentarios.
G C Orden con un Hnico comando sin opciones ni ar,umentos
G ls
G C Orden sin ociones pero con tres ar,umentos
G ls . I ..
G C Orden con un comando y una opcin
G ls 9l
G C Orden con un comando y tres opciones indicada de varias .ormas
G C distintas pero e*uivalentes entre si.
G ls 9trl
G ls 9rtl
G ls 9ltr
G ls 9l 9t 9r
G ls 9l 9t 9r
G ls 9lt 9r
G ls 9l 9tr
G C Opciones *ue empiezan con <99<
G ls 997elp
G ls 99version
G ls 99colorJauto
G C $1emplo de opciones y ar,umentos sensibles al orden.
G date 9d noD 9"
G date 9d 9" noD
G C e1emplo de opcion *ue empieza por <?<
G date ?<Ka Kb Ke KE8K58KS KL KM<
E+pansi&n de la linea de orden:
$xiste un detalle muy importante en el .uncionamiento de la s7ell. Una cosa es lo *ue nosotros
escribimos y otra lo *ue la s7ell ordena *ue se e1ecute. !ntes de *ue la s7ell e1ecute comando
al,uno expande la linea de ordenes. $s decir esa linea se trans.orma en otra linea m3s lar,a.
La orden resultante puede ser muy lar,a y tener muc7os ar,umentos. or e1emplo un <:< ser3
sustituido por la lista de .ic7eros *ue se encuentren en el directorio actual. Nuizas al,uien
encuentre *ue existe un parecido con el uso de <:.:< en 5sdos por e1emplo pero el parecido es
muy super.icial y en,aOoso. Cuando en Unix 7acemos <ls :< el intreprete de comandos
expande el asterisco y el comando ls recibe una lista de .ic7eros *ue tiene *ue listar. $n 5sdos
cuando 7acemos <dir :.:< el interprete de comandos no expande nada. $l comando dir recibe
como ar,umento no la lista de .ic7eros *ue tiene *ue listar sino un <:.:< y ser3 el propio
comando dir *uien ten,a *ue expandir el ar,umento para obtener la lista de .ic7eros *ue
tiene *ue listar. or lo tanto la expansin en Unix est3 centralizada en el interprete de
comandos el cual permite 7acer expansiones muc7o m3s potentes *ue en 5sdos. Un comando
no es m3s *ue un e1ecutable y los e1ecutables ,eneralmente admiten ar,umentos. $n Unix los
comandos toman los ar,umentos *ue les pasa la s7ell despu+s de la expansin.
$l <:< se expande en base a los nombres de .ic7eros presentes en nuestro directorio actual,
sustituy+ndose por una cadena de caracteres cual*uiera *ue no empieze por un punto.
Famos a realizar una pr3ctica completa. !l,unos de los comandos *ue vamos a usar como
<cd<, <mPdir<, <touc7< y otros son comandos *ue no explicamos en este momento pero *ue
servir3n para situarnos en un directorio de traba1o y crear al,unos .ic7eros para la pr3ctica.
Las lineas *ue empiecen con G comando ... son comandos *ue debe introducir salvo *ue se
trate de un comentario.
Las lineas en amarillo salida del comando ... son la salida obtenida.
$sto no *uiere decir *ue siempre *ue pon,amos un comando vayamos a poner a continuacin
su salida en amarillo pero si la ponemos es para *ue compruebe lo *ue debe obtener.
!7ora introduzca los comandos *ue indicamos a continuacin y compruebe la salida
obtenida.
G cd Itmp
G mPdir pruebas
G cd pruebas
G C Ma 7emos creado un directorio de pruebas y ya estamos dentro de +l.
G C ara comprobarlo 7acemos
G pDd
ItmpIpruebas
G C !7ora creamos unos .ic7eros para practicar
G touc7 PP1 PP2 PPPP PP.txt PP.doc 12.txt .PP
G ec7o :
PP1 PP2 PPPP PP.txt PP.doc 12.txt
G ec7o P:
PP1 PP2 PPPP PP.txt PP.dox
G ec7o :xt
PP.txt 12.txt
G ec7o :.
G ec7o .:
.PP
G ec7o :.:
PP.txt PP.doc 12.txt
Qi1ese *ue los resultados dependen de los .ic7eros existentes en el directorio actual. Los
mismos comandos realizados desde otro directorio distinto dar0an otro resultado.
5anten,a la sesin de la pr3ctica en este punto por*ue continuaremos 7aciendo al,unas
pr3cticas m3s desde este mismo punto.
$l <R< se expande como un Hnico car3cter y tampoco expande un punto en el comienzo del
nombre del .ic7ero. Introduzca a7ora los si,uientes comandos y compruebe la salida
obtenida.
G ec7o RRR
PP1 PP2
G ec7o PPR
PP1 PP2
! continuacin no teclee nada ya *ue el resultado es solo una 7ipotesis. Supon,amos *ue
obtenemos un error de este tipo.
G ls :
Ps78 IbinIls8 ar, list too lon,
$sto si,ni.ica *ue el <:< se expande en un nHmero demasiado ,rande de .ic7eros y eso resulta
un problema para el interprete de comandos. La .orma de obtener la lista de .ic7eros ser0a
7aciendo
G ls
o tambi+n.
G ls .
Si *uisieramos averi,uar el nHmero de .ic7eros podr0amos contarlos con <Dc<. !*ui estamos
usando un <B< *ue aun no 7emos explicado pero *ue lo explicaremos en el prximo cap0tulo de
redireccin de entrada salida.
G ls B Dc 9l
Peculiaridades de e+pansi&n en la bash de ,inu+
Solo vamos a mencionar unas cuantas y remitimos al lector a la p3,ina del manual de bas7
para m3s in.ormacion.
$xpansin de corc7etes.
$ste es un tipo de expansin *ue no tiene para nada en cuenta los .ic7eros existentes en el
directorio actual.
G ec7o aSd,c,bTe
ade ace abe
$xpansin de la tilde.
$sta es una caracter0stica especial de la s7ell de Linux *ue resulta realmente util. $xpande la
tilde como directorio 7ome.
G ec7o U
G ec7o Uroot
G ec7o UrootI:
!rit7metic $xpansion.
$sto permite expandir expresiones G%%expression&&
G ec7o G%%%2?11&I-&&
4
$n bas7%1& en el apartado de $)!'SIO' se mencionan m3s cosas.
"edireccin de entrada salida8
'ormalmente los proceso utilizan para entrada y salida de datos unos dispositivos estandar.
Son entrada estandar, salida estandar y salida estandar de errores. ;eneralmente se utiliza
como entrada estandar la entrada de teclado y como salida estandar y salida estandar de
errores la pantalla. La salida estandar se usa como salida normal de datos y la salida estandar
de errores se usa para sacar mensa1es *ue indican al,Hn error, aun*ue tambi+n se usa
simplemente como .lu1o alternativo en caso de *ue no resulte deseable su mezcla con otros
datos *ue deben salir por salida estandar.
Se puede alterar .lu1o de datos *ue va desde un dispositovo estandar a un pro,rama o
viceversa puede ser rediri,ido a otro dispositivo, o a otro pro,rama, o .ic7ero, etc..
/esde la s7ell se puede 7acer esto de varias .ormas.
>
"ediri,e la salida est3ndar a un .ic7ero o dispositivo.
=
"ediri,e la entrada est3ndar tom3ndola desde un .ic7ero.
B
Comunica dos procesos por medio de entrada salida. O1o no con.undir con 5sdos. $n Unix
los procesos comunican directamente pas3ndose los datos directamente sin crear nin,Hn
.ic7ero temporal. $l proceso *ue lee *uedara en espera mientras el el proceso *ue escribe
manten,a abierto el dispositivo de salida est3ndar incluso si moment3neamente no se produce
salida. Cuando el proceso escritor termina cierra todos sus .ic7eros y el proceso lector acusar3
la condicin como un .in de datos de entrada.
>>
"ediri,e la salida est3ndar a un .ic7ero sin sobreescribirlo. $n lu,ar de ello aOade al .inal del
mismo.
==QI'
"ediri,e entrada est3ndar desde la propia linea de ordenes. %$n lu,ar de QI' se puede usar
cual*uier literal&.
2>
"ediri,e la salida est3ndar de errores a un .ic7ero o dispositivo.
2>A1
"ediri,e la salida estandard de errores donde esta rediri,ido la salida estandard. %VJentrada
estandar, 1Jsalida est3ndar, 2Jsalida de errores est3ndar&
$1emplos
La orden si,uiente no produce nin,Hn resultado visible por*ue la salida est3ndar se rediri,e
al dispositivo IdevInull. $ste dispositivo es como un pozo sin .ondo. ! di.erencia de una
papelera de WindoDs no se puede recuperar lue,o nada.
G date > IdevInull
!7ora un e1emplo curioso. $l comando <time< sirve para medir consumos de tiempos de otros
comandos y para evitar mezclas de datos en salida estandar se decidi *ue la salida normal de
time .uera la salida estandar de errores.
G time D7oami > IdevInull
odemos ver el consumo de tiempo del comando <D7oami< por*ue este sale por la salida
estandar de errores. $s un e1emplo de utilizacin de la salida estandar de errores para sacar
in.ormacin *ue no tiene nada *ue ver con nin,Hn error. Sin embar,o time es un comando
interno y por ello lo si,uiente no .uncionar0a como usted piensa.
G time D7oami 2> IdevInull
$n este caso la redireccin a.ecta solo al comando D7oami.
Los comandos internos son parte de la s7ell y para rediri,ir su salida 7abr0a *ue rediri,ir la
salida completa de la s7ell. /e1aremos esto para un cap0tulo posterior.
!ntes de continuar vamos a ase,urarnos *ue estamos en un sitio se,uro para traba1ar.
G cd Itmp
G mPdir pruebas > IdevInull
G cd pruebas
G C ara comprobar *ue estamos en <ItmpIpruebas< 7acemos
G pDd
ItmpIpruebas
$l contenido de <Itmp< suele ser vaciado cuando rearranca la m3*uina o *uizas en al,Hn otro
momento. Contiene in.ormacin temporal. Eemos usado IdevInull para i,norar la salida de
errores del comando mPdir. Si ya exist0a <ItmpIpruebas< mPdir 7abr0a dado un error pero
nosotros lo i,noramos por*ue solo nos intersa *ue lo cree en caso de *ue no exista y en caso
contrario da i,ual. $l dispositivo <IdevInull< tambi+n resulta Htil para simular una entrada
nula de datos. or e1emplo para crear un .ic7ero vaci. Si ya estamos situados en
<ItmpIpruebas< pruebe lo si,uiente8
G cat = IdevInull > PP
G ls 9l PP
$l mismo e.ecto podr0amos conse,uir usando.
G > PP
G ls 9l PP
$sto se puede utilizar para vaciar .ic7eros respetando los permisos ori,inales.
Famos mirar el contenido del directorio raiz
G ls 9l
!7ora *ueremos repetir el comando pero ,uardando el resultado en el .ic7ero PP
G ls 9l I > PP
'o vemos nada por*ue toda la salida va a parar al .ic7ero. ara visualizar el contenido de un
.ic7ero usaremos el comando <cat<.
G C 5ostrar el contenido del .ic7ero PP.
G cat PP
G C $*uivale al anterior.
G cat = PP
G C arecido a los dos anteriores. IdevItty es un dispositivo *ue
G C se identi.ica como nuestro terminal.
G cat = PP > IdevItty
#ambi+n podemos visualizar la salida de un comando a la vez *ue ,uardamos la salida en un
.ic7ero. $l comando tee actua como un bi.urcacin.
G ls 9l I B tee PP1
G cat PP1
"ecuerde *ue lo *ue si,ue a un <B< 7a de ser siempre un e1ecutable.
G touc7 PP
G date B PP
$sto 7abr3 dado un error. robemos a7ora a rediri,ir la salida estandar de errores a un
.ic7ero y la salida estandar a otro.
S touc7 PP
G date B PP 2> errores > salida
G cat errores
G cat salida
$xiste un comando <yes< *ue sirve para ,enerar continuamente respuestas a.irmativas en
.orma de caracteres <y< y .inales de linea. $ste comando est3 pensado para ser usado con <B< y
proporcionar entradas a.irmativas a un comando. Usaremos el comando <7ead< *ue sirve para
sacar por salida estandar solo una primera parte de los datos de la entrada. La cantidad datos
puede especi.icarse en nHmero de lineas en bytes, etc.. 'osotros vamos a utilizar bytes. La
salida de <yes< la entre,aremos a 7ead para *ue tome los 1VVV primeros bytes *ue pasamos al
pro,ramas <Dc< para *ue cuente lineas palabras y caracteres.
G yes B 7ead 99bytesJ1VVV B Dc
4VV 4VV 1VVV
#uber0a rota
$l comando <yes< podr0a .uncionar eternamente. Su salida rediri,ida por las buenas a un
.ic7ero llenar0a el disco %cosa nada desable por cierto& y acabar0a dando un error. $n lu,ar de
esto lo 7emos rediri,ido a un pro,rama *ue aceptar3 solo los 1VVV primeros caracteres y
lue,o cerrar3 su entrada provocando un error de #uber0a rota.
La s7ell tambi+n permite introducir datos en una .orma especial *ue se llama documento9
a*ui. ara variar un poco usaremos a7ora el comando <sort< *ue sirve para ordenar. Observe
*ue en este e1emplo un .in de linea no termina el comando. or ello aparecer3 el introductor
secundario GS2 *ue nosotros indicamos con un <>< en amarillo.
G C ara ordenar unas lineas *ue introducimos en la propia linea de
G C ordenes usamos el operador <==< se,uido de una clave de
G C .inalizacin, de la entrada.
G sort ==QI'
> aaaaa
> cccccc
> zzzzz
> bbbb
> yyyy
> QI'
aaaaa
bbbb
cccccc
yyyy
zzzzz
Operador ,rave8
Cuando colocamos al,o dentro de las comillas ,raves <X< la s7ell lo interpretara como una
cadena cuyo valor es sustituido por el resultado de ese comando *ue produce ese comando en
salida est3ndar.
G ec7o date produce
XdateX
date produce
lun ene 1V 2V84Y812 C$# 2VVV
$l resultado es solo un e1emplo y no puede coincidir exactamente con el resultado obtenido
por usted ya *ue deber0a poner la .ec7a correcta en su sistema.
Nuizas el e1emplo *ue acabamos de usar no le de una idea exacta de la potencia del operador
,rave. "ecuerde *ue esto ocurre durante la expansin de la linea de ordenes antes de
e1ecutarse el comando ec7o. or ello podemos 7acer cosas como las si,uientes.
G C $1ecutamos date y ,uardamos el resultado en un .ic7ero cuyo
G C nombre construimos en base a nuestro nombre de usuario y al
G C aOo de la .ec7a actual.
G date > .ic7ero9XD7oamiX9Xdate ?KMX
G ls 9l .ic7ero9:
G cat .ic7ero9:
Eemos usado un comando para construir el nombre del .ic7ero de salida. 'o mostramos los
resultados pero con.iamos en *ue ya los 7a comprobado.
Caracteres de escape8
/ado *ue la S7ell interpreta catarteres. Zlancos como separadores. !steriscos e
interro,aciones como comodines. Operador ,rave. Comillas dobles, Comillas normales, G,
etc... Se plantea el problema de *ue 7acer cuando *ueremos usar estos caracteres como tales
sin *ue sean interpretados por la s7ell. $xisten varias .ormas de escapar caracteres para *ue
la s7ell no los expanda, o interprete.
La s7ell no el el Hnico pro,rama con capacidad de expandir e interpretar caracteres
especiales. or e1emplo .ind, e,rep, sed, y otros tambi+n interpretan ciertos caracteres *ue
adem3s pueden coincidir con al,unos de los *ue interpreta la s7ell. ara usar caracteres
especiales *ue pueden interpretarse por la s7ell 7abr3 *ue escaparlos siempre *ue deseemos
*ue lle,uen al comando.
Famos a ver tres .ormas distintas de escapar caracteres8
Cuando usamos las dobles comillas, los comodines asterisco, interro,acin y caracteres en
blanco no se interpretan, aun*ue si se interpretan <G<, comillas ,raves <X<, y otros.
Cuando usamos comillas simples se respeta todo el contenido de la cadena sin expandir nada.
Cuando usamos el car3cter <[< escapamos el car3cter *ue va inmediatamente despu+s. Cuando
es un car3cter *ue tiene un si,ni.icado especial para la s7ell, de1ar3 de tener ese si,ni.icado
especial.
Famos a ver todo esto con unos e1emplos8
G C La orden si,uiente muestra el mismo literal *ue el entre comillas.
G ec7o \: : R :\
G C $n este caso la s7ell interpreta XpDdX y G!#E, en cambio <:< y
G C <R< no se interpretan.
G ec7o \: R XpDdX G!#E\
G C $n este caso se conserva todo el literal sin interpretar.
G ec7o <: R XpDdX G!#E<
G C ! continuacin la orden mostrar3 dos comillas dobles.
G ec7o [\[\
G C $l caracter =nueva9linea> tambi+n puede ser escapado y en este
G C caso puede servir para introducir comandos muy lar,os de .orma
G C m3s le,ible. ara 7acer esta prueba deber3 pulsar la tecla de
G C =nueva9linea> 1usto a continuacin del caratcter <[<
G ls 9l I B [
G 7ead 9n 1V B [
G tee ItmpIresultado B [
G Dc
$1ercicio8999Las si,uientes ordenes producen resultados cuya explicacin no resulta trivial.
$sto es debido a *ue permitmos con la opcin 9e *ue el comando <ec7o< interprete caracteres.
or lo tanto lo *ue ocurre es *ue primero el interprete de comandos interpreta los caracteres
de la linea de rdenes y lue,o el comando ec7o interpreta los caracteres recibidos. Consulte la
p3,ina man de ec7o%1& y bus*ue la opcin 9e. $1ecute los comandos *ue le proponemos a
continuacin e intente explicar los resultados. uede *ue necesite papel y lapiz.
G ec7o 9e [n
n
G ec7o 9e [[n
G ec7o 9e
G ec7o 9e
[n G ec7o 9e
[n G ec7o 9e
[
G ec7o 9e
[
G ec7o 9e
[[n
4esumen
Eemos visto muc7as cosas *ue nos permiten 7acernos idea de la potencia de la Zourne9S7ell
de Unix. La bas7 de Linux es un supercon1unto. $s decir es compatible pero m3s potente.
Nueremos resaltar *ue para las personas *ue 7an conse,uido terminar este cap0tulo ya se 7a
conse,uido al,o importante. ersonas acostumbradas al usos de 5sdos cometen barbaridades
*ue lue,o ni si*uiera son capaces de explicar. La clave muc7as veces est3 en la expansin de la
linea de ordenes.
$n realidad este tema no est3 a,otado ni muc7o menos y lo completaremos en cap0tulos
posteriores aun*ue intercalaremos material m3s li,ero por*ue no deseamos 7acerle su.rir
demasiado. Solo lo 1usto y por ello creo *ue es el momento de con.esar *ue exist0a un truco
para realizar m3s .acilmente el e1ercicio anterior aun*ue no lo mencionamos antes por*ue
7abr0a resultado demasiado .3cil y cmodo. Se trata de activar la traza de la s7ell con <set 9x<.
/e esta .orma podemos ver el resultado de la expansin de linea de rdenes precedida por el
si,no <?<.
G set 9x
? set 9x
G ec7o 9e
? ec7o 9e <[[[[n<
[[n
G set ?x
? set ?x
uede utilizar este truco cuando no sepa *ue est3 ocurriendo con la expansin de una linea de
ordenes *ue no .unciona como usted pensaba.
9est
uede comprobar sus conocimientos respondiendo el si,uiente test.
ara ello seleccione las opciones *ue se a1usten a la verdad y lue,o pulse el boton para ver el
resultado de su test.
1 Un comentario consiste en un C al principio de la linea
2 man 997elp obtiene la lista de opciones *ue se pueden usar con el comando 7elp
- $l orden de las opciones de un comando es indi.erente
2 ec7o a:b lista los .ic7eros del sistema *ue empiezan por a y terminan por b
4 $l operador B conecta la entrada y salida de dos procesos a trav+s de un .ic7ero temporal
6 ec7o \G!#E XdateX\ y ec7o <G!#E XdateX< producir3n id+ntico resultado
] ec7o \:\ y ec7o <:< producir3n id+ntico resultado
]. Introduccin a los procesos
Nu+ es un proceso
A estas alturas m(s de uno empe'ar( a pre#untarse si realmente es necesario conocer todos estos
detalles para un simple uso de un S5. Este curso esta orientado al uso de ,inu+ desde la consola y
resulta necesario conocer estas cosas incluso para un usuario normalito. No "amos a describir
detalladamente como est(n implementados los procesos en ,inu+.
-ui'as para un curso de pro#ramaci&n a"an'ada si fuera necesario pero lo %ue nosotros "amos a
describir es unicamente los detalles m(s importantes desde un punto de "ista did(ctico y pr(ctico
para un usuario normal.
En un sistema multitarea todo funciona con procesos as) %ue conocer unos cuantos principios
b(sicos sobre procesos le resultar( de la m(+ima utilidad. En un sistema monotarea se usa
frecuentemente el t!rmino pro#rama indistintamente para hablar de un pro#rama en papel en
cdrom en disco duro o en funcionamiento. En un sistema multitarea no se debe usar el t!rmino
pro#rama para hablar de la e3ecuci&n del mismo. En su lu#ar hablaremos de proceso indicando con
ello %ue esta arrancado y funcionando. *n pro#rama puede dar lu#ar a "arios procesos. Por e3emplo
en un mismo instante "arios usuarios pueden estar usando un mismo editor. *n proceso puede estar
detenido pero a diferencia de un pro#rama e+iste una informac)on de estado asociada al proceso. *n
pro#rama es al#o totalmente muerto. *n proceso detenido es m(s bien como si estu"iera dormido.
,os procesos tienen or#ani'ada la memoria de una forma especial muy eficiente. Por e3emplo la
p(rte de c&di#o del proceso es una parte de solo lectura y puede ser compartida por "arios procesos
a la "e'. 6ma#inemos %ue hay "arios usuarios en el sistema usando un mismo editor. En ese caso
ser)a un desperdicio tenener la m)sma informaci&n de c&di#o de ese pro#rama repetida "arias "eces
en memoria y ocupando un recurso tan "alioso como es la memoria 4A;.
En el caso de tener "arios pro#ramas distintos en e3ecuci&n tambi!n se suele dar el caso de %ue
conten#an p(rtes comunes de c&di#o pertenecientes a librer)as %ue continen #ran cantidad de
funciones de prop&sito #eneral. Para hacer un uso eficiente de estas librer)as e+isten librer)as
din(micas de uso compartido. En ,inu+ el uso de estas librer)as no est( or#ani'ado de una forma
unificada para todas las distribuciones por lo cual los e3ecutables binarios pueden ser incompatibles
entre distintas distribuciones. Este problema se puede solucionar partiendo de los fuentes y
recompilando la aplicaci&n en nuestro sistema. Por esta ra'&n un binario de 4ed7at o Suse puede
no funcionar en SlacHware o en Debian.
I/ y I/
A cada proceso le corresponder( un n$mero P6D %ue le identifica totalmente. Es decir en un mismo
momento es imposible %ue e+istan dos procesos con el mismo P6D. ,o mismo %ue todos los
procesos tienen un atributo P6D %ue es el n$mero de proceso %ue lo identifica en el sistema tambien
e+iste un atributo llamado PP6D. Este n$mero se corresponde con el n$mero P6D del proceso padre.
9odos los procesos deben de tener un proceso %ue fi#ure como padre pero entonces %ue ocurre si un
padre muere antes %ue al#uno de sus hi3os S En estos casos el proceso GinitG del cual hablaremos en
se#uida adoptar( a estos procesos para %ue no %ueden huerfanos.
$l proceso init
Cuando arranca el sistema se desencadena una secuencia de procesos %ue a #randes ras#os es la
si#uiente. Primero se car#a el nucleo de ,inu+ .Eernel2 de una forma totalmente especial y distinta
a otros procesos. Dependiendo de los sitemas puede e+istir un proceso con P6D@C planificador o
swapper. En ,inu+ y en casi todos los sistemas tipo *ni+ se#uir( un proceso llamado GinitG. El
proceso init tiene P6D @ /. ,ee un fichero llamado inittab donde se relacionan una serie de procesos
%ue deben arrancarse para permanecer acti"os todo el rato .demonios2. Al#unos de ellos est(n
definidos para %ue en caso de morir sean arrancados de nue"o inmediatamente #aranti'ando la
e+istencia de ese ser"icio de forma permanente.
Es decir GinitG es un proceso %ue "a a #enerar nue"os procesos pero esta no es una cualidad especial.
Es muy frecuente %ue un proceso cual%uiera #enere nue"os procesos y cuando esto ocurre se dice
%ue #enera procesos hi3os.
Este no es un curso de administraci&n pero diremos %ue a init se le puede indicar %ue arran%ue el
sistema de diferentes formas por e3emplo en modo monousuario para mantenimiento. Este es un
cap)tulo en el cual pueden sur#ir muchas pre#untas retorcidas tales como %ue pasa si matamos a
init o %uien es el padre de init pero no nos interesa responder a esto ya %ue init es un proceso muy
especial y su padre a$n m(s. En cada sistema de tipo *ni+ las respuestas a cosas como estas pueden
"ariar mucho por%ue a ese ni"el la implementaciones "ar)an mucho. Nin#$n pro#rama normal
necesitar( usar ese tipo de informaci&n. -uedan muchos detalles interesantes relati"os a temas de
administraci&n. ,os curiosos siempre tienen el recurso de mirar la p(#ina man de init.R2 y de
inittab.K2 pero nosotros no insistiremos m(s en este tema. .-ue ali"io "erdad S2
UI/ y $UI/
,os procesos tienen un E*6D .Efecti" *ser 6dentif2 y un *6D normalmente ambos coinciden. El
*6D es el identificador de usuario real %ue coincide con el identificador del usuario %ue arranc& el
proceso. El E*6D es el identificador de usuario efecti"o y se llama as) por%ue es el identinficador
%ue se tiene en cuenta a la hora de considerar los permisos %ue lue#o e+plicaremos.
El *6D es uno de los atributos de un proceso %ue indica por decirlo de al#una manera %uien es el
propietario actual de ese proceso y en funci&n de ello podr( hacer ciertas cosas. Por e3emplo si un
usuario normal intentara eliminar un proceso del cual no es propietario el sistema no lo permitir(
mostrando un mensa3e de error en el %ue ad"ierta %ue usted no es el propietario de ese proceso y por
tanto no est( autori'ado a hacer esa operaci&n. Por el contrario el usuario root puede hacer lo %ue
%uiera con cual%uier proceso ya %ue el sistema no comprueba 3am(s si root tiene permisos o no para
hacer al#o. root siempre tiene permisos para todo. Esto es cierto a ni"el de llamadas del sistema
pero nada impide implementar un comando %ue ha#a comprobaciones de permisos incluso con root.
Al#unos comandos en ,inu+ tienen opciones %ue permiten hacer estas cosas y solicitar
confirmaci&n en caso de detectar una operaci&n peli#rosa o infrecuente.
El *6D tambi!n es un atributo presente en otros elementos del sistema. Por e3emplo los ficheros y
directorios del sistema tienen este atributo. De esta forma cuando un proceso intenta efectuar una
operaci&n sobre un fichero. El Hernel comprobar( si el E*6D del proceso coincide con el *6D del
fichero. Por e3emplo si se establece %ue determinado fichero solo puede ser leido por su propietario
el Hernel dene#ar( todo intento de lectura a un proceso %ue no ten#a un E*6D i#ual al *6D del
fichero sal"o %ue se trate del todo poderoso root.
Aun%ue estamos adelantando cosas sobre el sistema de ficheros "amos a continuar con un e3emplo.
Comprobaremos cual es el *6D de su directorio home.
N W Cambiamos el directorio actual a home
N cd
N W Comprobamos a %uien pertenece GuidG y G#uidG
N ls :ld .
N W Ahora obtenemos el GuidG y el G#idG con sus "alores num!ricos.
N ls :lnd .
Si su directorio home est( confi#urado de forma l&#ica deber( pertenecerle a usted. Si esto no es as)
reclame en!r#icamente a su administrador pero si el administrador resulta ser usted sea m(s
indul#ente y limitese a corre#irlo y no confiese su error a nadie. En realidad casi todo lo %ue %ue se
encuentre dentro de su directorio home deber)a pertenecerle a usted. *sted debe ser el propietario
de su directorio home por%ue de otra forma y dependiendo de los permisos asociados a este
directorio los procesos %ue usted arran%ue se "er)an o bien incapaces de traba3ar con !l o lo %ue es
peor cual%uiera podr)a hacer cual%uier cosa con !l. Como es l&#ico hemos mencionado de pasada el
tema de permisos de directorios para ilustrar un poco la utilidad del uid pero esto se "er( en detalle
en el cap)tulo dedicado al sistema de ficheros de ,inu+.
Al#unos ficheros e3ecutables poseen un bit de permisos %ue hace %ue cambie el E*6D del proceso
%ue lo e3ecute con"irtiendose en el *6D del propietario del fichero e3ecutado. Suena complicado
pero no lo es. Es decir ima#inemos %ue usted e3ecuta un comando propiedad de root %ue tiene este
bit. Pues bien en ese momento el E*6D de su proceso pasar)a a ser el de root. Fracias a esto un
proceso puede tomar temporalmente la identidad de otro usuario. Por e3emplo puede tomar
temporalmente la identidad de root para ad%uirir pri"ile#ios de superusuario y as) acceder por
e3emplo a ficheros del sistema propiedad de root.
El sistema recibe continuamente peticiones de los procesos y el E*6D del proceso determinar( %ue
el Hernel le conceda permiso para efectuar la operaci&n deseada o no.
;uchas "eces sorprende %ue en ,inu+ apenas se cono'can unos pocos casos de "irus mientras %ue
en otros sistemas parecen estar a la orden del d)a. Es perfectamente posible reali'ar un "irus %ue
infecte un sistema ,inu+ pero de una forma o de otra el administrador tendr)a %ue darle los
pri"ile#ios %ue le con"ierten en peli#roso. Por eso no es facil %ue estos "irus lle#uen muy le3os.
Como se crea un nuevo proceso
El n$cleo del sistema llamado tambi!n Hernel es el encar#ado de reali'ar la mayor)a de funciones
b(sicas %ue #estiona entre otras cosas los procesos. ,a #est)on de estas cosas se hacen por medio de
un limitado n$mero de funciones %ue se denominan llamadas al sistema. Estas llamadas al sistema
est(n implementadas en len#ua3e C y hablaremos ahora un poco sobre un par de ellas llamadas
forH.2 y e+ec.2. Si lo#ramos %ue ten#a una "a#a idea de como funcionan estas dos important)simas
funciones facilitaremos la compresi&n de muchas otras cosas m(s adelante.
La llamada al sistema exec%&
Cuando hablamos de proceso debe usted pensar solamente en al#o %ue se est( e3ecutando y %ue est(
"i"o. *n proceso puede e"olucionar y cambiar totalmente desde %ue arranca hasta %ue muere. ,o
$nico %ue no cambia en un proceso desde %ue nace hasta %ue se muere es su identificador de
proceso P6D. *na de las cosas %ue puede hacer un proceso es cambiar por completo su c&di#o. Por
e3emplo un proceso encar#ado de procesar la entrada y salida de un t!rminal .#etty2 puede
transformarse en un proceso de autentificacion de usuario y password .lo#in2 y este a su "e' puede
transformarse en un interprete de comandos .bash2. Si la llamada e+ec.2 falla retornar( un :/. Esto
no es curso de pro#ramaci&n as) %ue nos da i#ual el "alor retornado pero lo %ue si nos interesa es
saber %ue cuando esta llamada tiene !+ito no se produce 3am(s un retorno. En realidad no tendr)a
sentido retornar a nin#$n lado. Cuando un proceso termina simplemente de3a de e+istir. En una
palabra muere y ya est(. ,a llamada e+ec.2 mantiene el mismo P6D y PP6D pero transforma
totalmente el c&di#o de un proceso en otro %ue car#ar( desde un archi"o e3ecutable.
La llamada al sistema .orP%&
,a forma en %ue un proceso arranca a otro es mediante una llamada al sistema con la funci&n forH.2.
,o normal es %ue el proceso hi3o e3ecute lue#o una llamada al sistema e+ec.2. forH.2 duplica un
proceso #enerando dos procesos casi id!nticos. En realidad solo se diferenciaran en los "alores P6D
y PP6D. *n proceso puede pasar al proceso hi3o una serie de "ariables pero un hi3o no puede pasar
nada a su padre a tra"!s de "ariables. Adem(s forH.2 retorna un "alor num!rico %ue ser( :/ en caso
de fallo pero si tiene !+ito se habr( producido la duplicaci&n de procesos y retornar( un "alor
distinto para el proceso hi3o %ue para el proceso padre. Al proceso hi3o le retornar( el "alor C y al
proceso padre le retornar( el P6D del proceso hi3o. Despu!s de hacer forH.2 se pueden hacer "arias
cosas pero lo primero %ue se utili'a desp$es del forH es una pre#unta sobre el "alor retornado por
forH.2 para as) saber si ese proceso es el padre o el hi3o ya %ue cada uno de ellos normalmente
deber( hacer cosas distintas. Es decir la pre#unta ser)a del tipo si soy el padre ha#o esto y si soy el
hi3o ha#o esto otro. Con frecuencia aun%ue no siempre el hi3o hace un e+ec.2 para trasformarse
completamente y con frecuencia aun%ue no siempre el padre decide esperar a %ue termine el hi3o.
9ambi!n normalmente aun%ue no siempre esta parte de la lecci&n es necesario releerla m(s de una
"e'.
Estamos dando pe%ue=os detalles de pro#ramaci&n por%ue en estas dos llamadas del sistema son
muy si#nificati"as. Su funcionamiento resulta chocante y su comprensi&n permite e+plicar un
mont&n de cosas.
#est
Puede comprobar sus conocimientos respondiendo el si#uiente test.
Para ello seleccione las opciones %ue se a3usten a la "erdad y lue#o pulse el boton para "er el
resultado de su test.

/ *n pro#rama no puede #enerar un nue"o proceso si ya hay uno e3ecutandose con el mismo
pro#rama.
0 No puede haber dos procesos con el mismo PP6D.
1 El E*6D es uno de los identificadores %ue usa el Hernel para decidir sobre permisos.
A ,as llamadas al sistema son funciones %ue se e3ecutan dentro del Hernel.
K *n proceso %ue hace Ge+ecG cambia su c&di#o por el contenido en un e3ecutable.
L *n proceso %ue hace GforHG obtiene un nue"o proceso id!ntico a si mismo sal"o en su P6D y su
PP6D.
M ,a primera instrucci&n e3ecutada por un proceso es la primera instrucci&n del c&di#o de su
pro#rama.
^. 53s sobre procesos y seOales
Las .ormas de comunicacin entre procesos
,os procesos no tiene una facilidad de acceso indiscriminada a otros procesos. El hecho de %ue un
proceso pueda influir de al#una manera en otro es al#o %ue tiene %ue estar perfectamente controlado
por moti"os de se#uridad. Comentaremos solo muy por encima las diferentes formas de
comunicaci&n entre procesos.
A tra"!s de "ariables de entorno:
Solo es posible de padres a hi3os.
;ediante una se=al:
Solo indica %ue al#o ha ocurrido y solo lle"a como informaci&n de un n$mero de se=al.
;ediante entrada salida:
Es la forma m(s corriente a ni"el de shell. Xa hemos comentado el operador pipe G>G %ue conecta dos
procesos.
;ediante t!#nicas 6PC u otras:
Sem(foros ;emoria compartida Colas de mensa#es.
;ediante socHets:
Este sistema tiene la peculiaridad de %ue permite comunicar procesos %ue est!n funcionando en
m(%uinas distintas.
No profundi'amos sobre esto por%ue ahora no estamos interesados en la pro#ramaci&n. ;(s
adelente si comentaremos bastante sobre "ariables y entrada salida por%ue daremos nociones de
pro#ramaci&n en shell:script. 9ambien daremos a continuaci&n unos pe%ue=os detalles %ue tienen
%ue "er con el arran%ue del sistema por%ue tambi!n nos resultar( util para comprender como
funcionan las cosas.
Secuencia de arran*ue en una sesin de consola
Para consultar la dependencia 3er(r%uica entre unos procesos y otros e+iste en ,inu+ el util)simo
comando pstree. No es esencial y %ui'as no lo ten#a usted instalado pero resulta muy pr(ctico. Si
dispone de !l pruebe los comandos GpstreeG y Gpstree :pG. Nosotros "amos a mostrar el resultado de
ambos comandos en el sistema %ue estamos usando en este momento para %ue en cual%uier caso
pueda apreciar el resultado pero le recomendamos %ue lo instale si no dispone de !l ya %ue resulta
muy pr(ctico. 9ambien puede usar como sustituto de GpstreeG el comando Gps a+fG pero no espere un
resultado tan bonito.
N pstree
init:?:apache
MVYapacheZ
>:atd
>:bash
pstree
>:0VYbashZ
>:bash
"i
>:bash
+init:?:[FRLOS1J
> \:mwm:?:.+initrc
+term
bash
> \:.+initrc
+clocH
>:cron
>:#etty
>:#pm
>:inetd
>:Hflushd
>:Hlo#d
>:Hpiod
>:Hswapd
>:Hupdate
>:lpd
>:portmap
>:postmaster
>:sendmail
>:sshd
>:syslo#d
\:+fs
Este formato nos da un arbol de procesos abre"iado en el %ue procesos con el mismo nombre y %ue
ten#an un mismo padre aparecer(n de forma abre"iada. En el e3emplo anterior aparece G0VYbashZG
indicando %ue hay dos procesos bash como hi3os de init y tambien hay al#unos proceso apache
arrancados. El %ue e+istan muchos procesos arrancados no indica necesariamente un alto consumo
de CP*. Puede %ue est!n todos ellos haciendo el "a#o. <ueno en el caso de apache %ui'as est!n
haciendo el indio. .Esto $ltimo es una broma %ue no he podido e"itar2.
N pstree :p
init./2:?:apache.0CA2:?:apache.0/L2
> >:apache.0/M2
> >:apache.0/R2
> >:apache.0/B2
> >:apache.00C2
> >:apache./LRC2
> \:apache./LR02
>:atd./BL2
>:bash.0/C2
pstree./MMB2
>:bash.0//2
>:bash.0/02
"i./LBK2
>:bash.0/K2
+init./L1B2:?:[FRLOS1J./LAA2
> \:mwm./LAM2:?:.+initrc./LK02
+term./LLC2
bash./LL/2
> \:.+initrc./LKK2
+clocH./LM12
>:bash.0/A2
>:cron./BB2
>:#etty.0/12
>:#pm./A12
>:inetd./1R2
>:Hflushd.02
>:Hlo#d./1/2
>:Hpiod.A2
>:Hswapd.K2
>:Hupdate.12
>:lpd./K12
>:portmap./1L2
>:postmaster./LR2
>:sendmail./MB2
>:sshd./R12
>:syslo#d./0B2
\:+fs./RL2
En este otro formato. Aparece cada proceso con su P6D. Podemos "er %ue el Proceso GinitG tiene pid
@ / y ha reali'ado "arios forHs.2 #enerando procesos con pid U /. En al#unos sistemas la #eneraci&n
de n$meros de P6D para procesos nue"os se reali'a en secuencia. En otros resulta un n$mero
impredecible.
Entre los procesos #enerados por GinitG est(n los procesos G#ettyG. Se arrancar( un G#ettyG por cada
terminal. Este proceso confi#ura la "elocidad y otras cosas del terminal manda un saludo y lue#o se
transforma con e+ec el proceso Glo#inG. 9odos estos procesos se e3ecutan con E*6D y *6D @ C es
decir como procesos del superusuario root. Cuando el proceso Glo#inG conoce nuestra identidad
despu!s de "alidar usuario password se transformar( con e+ec en la shell especificada e para
nuestro usuario el fichero /etc/passwd
Para "er la linea %ue contiene sus datos pruebe a hacer lo si#uiente:
N #rep \whoami\ /etc/passwd
,a linea tiene el si#uiente formato. lo#in:contrase=a:*6D:F6D:nombre:dir:int!rprete
Jamos a suponer %ue su shell por defecto sea la bash. Si esta shell arrancara con el E*6D @ C
tendr)amos todos los pri"ile#ios del super usuario pero esto no ocurre as). Esta shell ya tendr(
nuestro *6D y nuestro E*6D. Jamos a representar todo esto marcando los puntos en los %ue ocurre
al#$n forH.2 con un si#no G?G.
YinitZ:?forH.2:UY#ettyZ
>
?forH.2:UY#ettyZ:e+ec.2:UYlo#inZ:e+ec.2:UYbashZ?forH.2:e+ec.2:UYcomandoZ
>
?forH.2:UY#ettyZ
>
,a shell puede arrancar un comando mediante un forH.2 y lue#o un e+ec.2 y esperar a %ue este
muera. 4ecuerde %ue la funci&n e+ec.2 no tiene retorno posible ya %ue finali'a con la muerte del
proceso. En ese momento la shell detecta la muerte de su hi3o y continua su e3ecuci&n solicitando la
entrada de un nue"o comando. Cuando introducimos el comando Ge+itG estamos indicando a la shell
%ue finalice y su padre GinitG se encar#ar( de lan'ar nue"o proceso G#ettyG. ,&#icamente Ge+itG es un
comando interno de la shell. -ui'as le llame la atenci&n %ue la muerte de GbashG termine pro"ocando
un nue"o G#ettyG cuando G#ettyG pas& a Glo#inG y este a GbashG pero en esta secuencia #etty:lo#in:bash
no hay nin#$n forH.2 por eso #etty lo#in y bash son en realidad el mismo proceso en distintos
momentos con el mismo P6D obtenido en el forH.2 reali'ado por GinitG solo %ue ha ido cambiando su
personalidad manteniendo la misma identidad .mismo P6D2. Para GinitG siempre se trat& del mismo
hi3o y la muerte de cual%uiera de ellos .#etty lo#in o bash2 pro"oca %ue se arran%ue un nue"o G#ettyG
sobre ese mismo terminal con el fin de %ue ese terminal no %uede sin ser"icio.
,a presentaci&n del mensa3e de ,o#in es mostrada por G#ettyG. *na "e' introducido el identificador
de usuario ser( Glo#inG %uien muestre la solicitud de introducci&n de la password y una "e'
introducido el password ser( la shell %uien muestre el introductor de comandos pero estamos
hablando siempre del mismo proceso.
A modo de e3ercicio compruebe estas cosas por usted mismo usando al#unos de los comandos %ue
ya conoce. Para hacer esta pr(ctica no basta con usar un terminal remoto sino %ue necesitar( un PC
completo para ir haciendo cosas desde distintas sesiones. ,e proponemos hacerlo m(s o menos de la
si#uiente manera:
/. Entre en cada uno de los terminales disponibles de forma %ue todos los terminales esten ocupados
por un interprete de comandos. <astar( con hacer lo#in en todos ellos.
0. ,ue#o compruebe %ue no hay nin#$n proceso G#ettyG.
1. 7a#a un e+it desde uno de estos terminales.
A. Compruebe desde otro termina %ue ahora si e+iste un proceso G#ettyG y anote su pid.
K. 6ntrodu'ca el nombre de usuario en ese terminal %ue %ued& libre.
L. Compruebe ahora desde otra sesion %ue e+iste un proceso lo#in con el P6D %ue usted anot&.
M. 9ermine de indentificarse tecleando la password
R. Compruebe desde otra sesi&n %ue ahora e+iste una shell con el P6D %ue anotamos.
Si no tiene el comando GpstreeG tendr( %ue usar GpsG pero con pstree puede "er m(s facilmente lo %ue
ocurrir( ahora.
B. Ahora teclee el comando Gsleep 000G desde la sesi&n %ue tiene el P6D anotado por usted.
/C. Compruebe desde otra sesi&n %ue el interprete de comandos ha reali'ado un forH.2 #enerando un
comando %ue est( e3ecutando el comando indicado.
Si no ha podido reali'ar el e3ercicio anterior tendr( %ue confiar en %ue las cosas son como decimos
y ya est(.
Comando ps
;uestra los procesos acti"os. Este comando es muy util para saber %ue comandos est(n
funcionando en un determinado momento.
Siempre %ue se mencione un comando puede consultar la p(#ina man del mismo. En el caso de GpsG
se lo recomendamos ya %ue es un comando muy util con una #ran cantidad de opciones. Nostros
mencionaremos al#unos e3emplos pero se aconse3a probar GpsG probando las distintas opciones %ue
se mencionan en la p(#ina del manual.
E3emplos:
N W Para "er todos sus procesos %ue est(n
N W asociados a al#$n terminal.
N ps

P6D 99X S9A9 96;E C5;;AND
.......
N W Para "er todos sus procesos y los de otros
N W usuarios siempre asociados a al#$n terminal.
N ps a

P6D 99X S9A9 96;E C5;;AND
.......
N W Para "er todos sus procesos est!n asociados o
N W no a al#$n terminal.
N ps +

P6D 99X S9A9 96;E C5;;AND
.......
N W Para "er todos los proceso asociados al
N W terminal /
N ps t/

P6D 99X S9A9 96;E C5;;AND
.......
N W Para "er todos los procesos del sistema.
N ps a+

P6D 99X S9A9 96;E C5;;AND
.......
Estos e3emplos %ue acabamos de "er obtienen un mismo formato de datos. E+plicaremos el
si#nificado de estos atributos.
P6D Es el "alor n$merico %ue idenfica al proceso.
99X Es el terminal asociado a ese proceso. ,os demonios del sistema no tienen nin#$n terminal
asociado y en este campo fi#urar( un S
S9A9 9iene tres campos %ue indican el estado del proceso .4SD9]2 .82 .N2 ,a S indica %ue el
proceso est( suspendido esperando la liberaci&n de un recurso .CP* Entrada Salida etc2 necesario
para continuar. E+plicaremos solo al#unos de estos estados en su momento.
96;E 6ndica el tiempo de CP* %ue lle"a consumido ese proceso desde %ue fu! arrancado.
C5;;AND ;uestra el comando y los ar#umentos %ue le fueron comunicados.
E+isten muchas opciones para el comando ps %ue ofrecen un formato distinto. ,e recomendamos
especialmente %ue pruebe Gps uG Gps lG y Gps fG
En *ni+ los comandos suelen ser"ir para una sola cosa aun%ue suelen tener muchas opciones. ,a
entrada de los comandos suele tener una estructura simple y la salida de los comandos tamb)en. Si
un comando no encuentra nada %ue hacer e+iste la costumbre de %ue termine de modo silencioso.
9odo esto permite %ue los comandos puedan combinarse en#anchado la salida de uno con la entrada
de otro. Al#unos comandos est(n especialmente dise=ados para ser usados de esta forma y se les
suele denominar filtros.
,a salida del comando GpsG se puede filtrar con G#repG para %ue muestre solo las l)neas %ue nos
interesan.
Con.i,uracin del terminal
Con"iene %ue comprobemos si su terminal est( correctamente confi#urado para poder interrumpir
un proceso. Normalmente se usa TCtrl:CU pero esto depende de la confi#uraci&n de su terminal. Si
en al#$n momento su terminal %ueda desconfi#urado haciendo cosas raras como por e3emplo
mostrar caracteres e+tra=os intente recuperar la situaci&n tecleando el comando GresetG. Esto solo es
"(lido para ,inu+. Para otros sistemas puede ser util Gstty saneG %ue tambi!n funciona en ,inu+ pero
no es tan efica' como el comando GresetG. Para comprobar la confi#uraci&n de su terminal puede
hacer Gstty :aG aun%ue obtendr( demasiada informaci&n %ue no es capa' de interpretar podemos
indicarle %ue se fi3e en el "alor de GintrG. Deber)a "enir como Gintr @ ^CG. Si no lo locali'a ha#a Gstty
:a > #rep intrG. De esta forma solo obtendr( una linea. Para confi#urar el terminal de forma %ue pueda
interrumpir procesos con TCtrl:CU puede intentar confi#urar su terminal haciendo Gstty ^J^CG. El
car(cter TCtrl:JU no se mostrar( en el terminal ya %ue actua e"itando %ue el si#uiente carater
.TCtrl:CU en nuestro caso2 no sea interpretado como caracter de control.
No pretendemos ahora e+iplicar los t!rminales de ,inu+ pero si %ueremos %ue compruebe su
capacidad para interrumpir procesos con TCtrl:CU ya %ue usaremos esto en las pr(cticas %ue si#uen.
*na prueba inofensi"a para comprobar la interrupcion de un proceso es el si#uiente comando %ue
pro"oca una espera de un minuto. Deber( introducir el comando e interrumpirlo antes de %ue el
tiempo establecido .LC se#undos se a#ote2.
N sleep LC
TCtrl:CU
Si no ha conse#uido interrumpir el proceso no si#a adelante para e"itar %ue al#una de las pr(cticas
de3e un proceso demasiado tiempo consumiendo recursos de su m(%uina. Si esta usted solo en la
m(%uina eso tampoco tendr)a mucha importancia pero es me3or %ue a"eri#ue la forma de
interrumpir el proceso del e3emplo anterior.
Comando time
Da los tiempos de e3ecucion. Este comando nos da tres "alores cuya interpretacion es:
real 9iempo real #astado .Duraci&n real2
user 9iempo CP* de usuario.
sys. 9iempo CP* consumido como proceso de Hernel.
.Es decir dentro de las llamadas al Hernel2
,a mayor)a de los comandos est(n #ran parte del tiempo sin consumir CP* por%ue necesitan
esperar para hacer entrada salida sobre dispositi"os lentos %ue adem(s pueden estar en uso
compartidos por otros procesos. E+iste un comando capa' de esperar tiempo sin #astar tiempo de
CP*. Se trata del comando GsleepG. Para usarlo le pasaremos un ar#umento %ue indi%ue el n$mero de
se#undos de dicha espera.
Por e3emplo "amos a comprobar cuanta CP* consume una espera de L se#undos usando sleep
N time sleep L
real CmL.C0/s
user CmC.C0Cs
sys CmC.CCCs
El resultado obtenido puede "ariar li#eramente en cada sistema pero b(sicamente obtendr( un
tiempo GrealG de unos L se#undos y un tiempo de CP* . GuserG ? GsysG 2 muy pe%ue=o.
Jamos a medir tiempos en un comando %ue realice operaciones de entrada salida as) como proceso
de datos.
N time ls /V U /de"/null
real CmC.CBBs
user CmC.CRCs
sys CmC.C/Cs
En este comando "er( %ue el consumo total de CP* es superior al del comando sleep. En cual%uier
caso el tiempo real tardado en la e3ecuci&n del comando es siempre muy superior al consumo de
CP*.
Jamos a probar un comando %ue apenas realice otra cosa %ue entrada salida. Jamos a en"iar
/C;bytes al dispositi"o /de"/null. E+iste un comando GyesG %ue pro"oca la salida continua de un
caracter GyG se#uido de un caracter retorno de carro. Esta pensado para sustituir la entrada de un
comando interacti"o en el cual %ueremos contestar afirmati"amente a todo lo %ue pre#unte.
Nosotros fitraremos la salida de GyesG con el comando GheadG para obtener solo los /C;bytes
primeros producidos por GyesG y los en"iaremos al dispositi"o nulo G/de"/nullG %ue "iene a ser un
po'o sin fondo en el cual podemos introducir cual%uier cosa sin %ue se llene pero no podremos
sacar absolutamente nada. En una palabra "amos a pro"ocar proceso de entrada salida
perfectamente inutil.
N time yes > head ::bytes@/CCCCCCC U /de"/null
9uber)a rota
real CmL.AMRs
user CmK.AACs
sys CmC.BCCs
Podemos hacer un consumo fuerte de CP* si for'amos a c(lculos masi"os %ue no ten#an apenas
entrada salida. Por e3emplo podemos poner a calcular el n$mero P6 con 1CC cifras decimales. GbcG es
un comando %ue consiste en una calculadora. Admite uso interacti"o pero tambien acepta %ue le
pasemos las operaciones desde otro proceso combinando entrada salida.
N time . echo Qscale@1CC_ AVa./2Q > bc :l 2
1./A/KB0LK1KRBMB101RAL0LA11R10MBKC0RRA/BM/LB1BB1MK/CKR0CBMABAAKB01CMP
R/LACL0RL0CRBBRL0RC1AR0K1A0//MCLMBR0/ARCRLK/10R01CLLAMCB1RAALCBKKCKRP
001/M0K1KBACR/0RAR///MAKC0RA/C0MC/B1RK0//CKKKBLAAL00BARBKAB1C1R/BLAAP
0RR/CBMKLLKB11AAL/0RAMKLAR011MRLMR1/LK0M/0C/BCB/AKLARKLLB01ALC1ARL/CP
AKA10LLAR0/11B1LCM0LC0AB/A/0M0
real Cm0.K0Rs
user Cm0.K0Cs
sys CmC.C/Cs
En un Pentium 0CC;h' este comando tard& 1 se#undos para 1CC cifras y 0C se#undos usando LCC
cifras. Decimos esto para %ue "ea %ue el tiempo %ue se tarda aumenta e+ponencialmente y %ue
dependiendo de la potencia de su ordenador puede suponer bastante tiempo de proceso. -ui'as
ten#a %ue "ariar el n$mero de cifras si#nificati"as para poder medir tiempos con comodidad.
Este comando GtimeG es un comando interno pero en ,inu+ tambi!n hay un comando e+terno
llamado de la misma forma. Para poder e3ecutarlo con esta shell deber)a incluir el camino completo.
No deseamos abusar de su escaso GtimeG as) %ue no lo comentaremos. Para buscar en el man el
comando GtimeG %ue hemos e+plicado o de cual%uier otro comando interno tendr)a %ue mirar en la
p(#ina del manual de bash.
Comando Pill
Este comando se utili'a para matar procesos. En realidad en"ia se=ales a otros procesos pero la
acci&n por defecto asociada a la mayoria de las se=ales de uni+ es la de finali'ar el proceso. ,a
finali'aci&n de un proceso puede "enir acompa=ada del "olcado de la informaci&n del proceso en
disco. Se #enera un fichero GcoreG en el directorio actual %ue solo sir"e para %ue los pro#ramadores
localicen el fallo %ue pro"oc& esta prusca finali'aci&n del proceso. Por e3emplo si el proceso intenta
acceder fuera del espacio de memoria concedido por el Hernel recibir( una se=al %ue lo matar(. ,o
mismo ocurrir( si se produce una di"isi&n por cero o al#$n otro tipo de error irrecuperable.
*n proceso uni+ puede capturar cual%uier se=al e+cepto la se=al B. *na "e' capturada la se=al se
puede acti"ar una rutina %ue puede pro#ramarse con toda libertad para reali'ar cual%uier cosa.
GHillG por defecto es GHill :/KG en"ia un S6F9E4; y #eneralmente pro"oca cierre ordenado de los
recursos en uso. Esta se=al puede ser i#norada o puede ser utili'ada como un a"iso para terminar
ordenadamente. Para matar un proceso resulta recomendable en"iar primero un Hill :/K y si no se
consi#ue nada repetir con Hill :B. Este $ltimo :B en"ia S6FE6,, %ue no puede ser i#norada y
termina inmediatamente. Solo fallara si no tenemos permisos para matar ese proceso pero si es un
proceso nuestro Hill :B resulta una opci&n se#ura para finali'ar un proceso.
,as se=ales actuan frecuentemente como a"isos de %ue ha ocurrido al#o. E+isten muchos tipos de
se=ales para poder distin#uir entre distintas cate#or)as de incidencias posibles.
Comando nice
El multiproceso esta implementado concediendo ciclicamente la CP* en roda3as de tiempo a cada
proceso %ue esta en e3ecuci&n.
E+isten dos numeros de prioridad. ,a prioridad N6CE y la prioridad concedida por el Eernel
mediante un al#oritmo. Esta $ltima no tiene por%ue coincidir con nice y puede "aler mas de 1B. En
cambio el comando nice solo acepta "alores comprendidos entre C y 1B siendo 0C el "alor por
defecto. Cuando nice sube el "alor si#nifica %ue el proceso tiene ba3a prioridad. El comando Gnice
:/CG incrementara el "alor nice en /C .es decir ba3a la prioridad2. Para ba3ar el "alor de nice .Es
decir para subir la prioridad2 hace falta permisos de superusuario.
En un sistema con poca car#a de traba3o no se notar( apenas diferencia al e3ecutar un comando con
ba3a prioridad o con alta prioridad. Pero en un sistema con la CP* sobrecar#ada los comandos
e3ecutados con prioridad m(s ba3a se "eran retrasados. ya %ue el Hernel conceder( m(s tiempo de
CP* a los procesos con prioridad m(s alta.
7ay otros comandos de inter!s. Por e3emplo GtopG muestra los procesos %ue mas CP* est!n
consumiendo. G"mstatG saca informaci&n del consumo de memoria "irtual.
7ay %ue tener en cuenta %ue el sistema #asta recursos en la #esti&n de los procesos. Por e3emplo si
estamos compartiendo una m(%uina con otros usuarios y tenemos %ue reali'ar /K compilaciones
importantes terminaremos antes haciendolas en secuencia una detras de otra %ue lan'andolas todas a
la "e'. ,a a"aricia de %uerer usar toda la CP* posible para nosotros puede conducir a una situaci&n
en la cual ni nosotros ni nadie sacar( #ran pro"echo de la CP*. El sistema reali'ar( una cantidad
enorme de traba3o improducti"o destinado a mantener simultanemente funcionando una #ran
cantidad de procesos %ue #astan mucha CP* y mucha memoria. ,a m(%uina comien'a a usar el
disco duro para suplir la falta de 4A; y comien'a a #astar casi todo el tiempo en el intercambio de
la 4A; con el disco duro. A esta situaci&n se la denomina swapin#.
Comando renice
Sir"e para cambiar la prioridad de un proceso. Si#ue la misma filosofia %ue el comando nice pero
hay %ue identificar el o los procesos %ue deseamos cambiar su prioridad. Se puede cambiar la
prioridad de un proceso concreto dado su P6D o los procesos de un usuario dando su *6D o todos
los procesos pertenecientes a un determinado #rupo. dando su F6D. 9anto el comando nice como el
comando GreniceG tienen mayor inter!s para un administrador de sistemas %ue para un usuario
normal. Consulte las p(#inas del manual para m(s detalles.
#est
Puede comprobar sus conocimientos respondiendo el si#uiente test.
Para ello seleccione las opciones %ue se a3usten a la "erdad y lue#o pulse el boton para "er el
resultado de su test.

/ GinitG es un proceso %ue muere despues de iniciali'ar el sistema.
0 *n hi3o puede comunicarse con su padre a tra"es de "ariables de entorno.
1 En el arran%ue de una sesi&n G#ettyG es padre de Glo#inG y Glo#inG ser( padre de la GshellG.
A El comando Gsleep LCG #astar( un minuto de tiempo de CP*.
K Para matar un proceso con"iene hacer GHill :BG y si no es suficiente se hace lue#o un GHill :/KG
L El comando Gnice :/CG decrementa el "alor de N6CE.
Y. Sistema de Qic7eros %rimera parte&
Introduccin
Este es sin duda uno de los cap)tulos con mayor inter!s pr(ctico.
A menudo la palabra fichero se puede usar de dos formas. Ficheros en sentido amplio como
cual%uier cosa %ue tiene nombre en un sistema de ficheros y otra como ficheros propiamente dichos
%ue m(s tarde llamaremos ficheros re#ulares. Estos $ltimos son la clase de ficheros m(s normalitos
y sir"en para contener informaci&n le#ible o e3ecutable.
Se trata de una coincidencia de nombres especialmente lamentable por%ue dificulta mi traba3o de
e+plicar ahora las cosas.
Por e3emplo cuando hablamos de #eneralidades para los nombres de ficheros y cuando hablemos de
tipos de ficheros estaremos hablando de ficheros en sentido amplio en cambio cuando hablamos de
diri#ir la salida a un fichero o cuando decimos %ue leemos un fichero nos referimos a ficheros
propiamente dichos es decir ficheros re#ulares %ue son los %ue se usan normalmente como
contenedores de informaci&n.
,as palabras no siempre si#nifican lo mismo usadas en diferentes conte+tos as) %ue nosotros
confiaremos en su capacidad de deducci&n y usaremos indistintamente la palabra fichero para
ambas cosas aun%ue reconocemos %ue es una costumbre %ue no facilita las cosas pero por des#racia
"er( este t!rmino utili'ado en diferentes sitios usado para ambas cosas. No se preocupe y ten#a
paciencia al fin y al cabo si ya ha lle#ado hasta a%u) su sa#acidad a %uedado pr(cticamente
demostrada.
Comprender( todo esto cuando hablemos de tipos de ficheros.
Para poner a prueba una "e' m(s su sa#acidad .santa paciencia la suya2 usaremos el t!rmino
ficheros en sus dos acepciones para describir una clase de ficheros llamada directorios.
,os directorios pueden considerarse como una clase de ficheros %ue pueden contener toda clase de
GficherosG .en sentido #eneral2 incluidos nue"os directorios lo cual hace %ue la estructura final ten#a
estructura similar a la de un arbol.
,as ramas de un arbol forman la estructura de todo el arbol y de forma muy similar los directorios
forman el arma'&n de toda la estructura del sistema de ficheros.
*n sistema de ficheros en *ni+ tiene esta estructura de (rbol y el punto de ori#en se llama root
.ra)'2 y se caracteri'a por%ue el padre de GrootG resulta ser el mismo GrootG y se simboli'a por G/G.
Xa sabemos %ue esto es raro pero no pre#unte como al#uien puede ser padre de si mismo. Esto
sencillamente es un truco para rematar la estructura de todo el (rbol de al#una forma.
53o el super usuario tambi!n se le llama GrootG pero no tiene nada %ue "er con esto. Es solo otra
molesta coincidencia.
'ombres de .ic7eros
*n nombre de fichero "alido para el n$cleo de ,inu+ puede contener cual%uier car(cter sal"o el
caracter G/G y sal"o el carter GPCG .caracter nulo2. Sin embar#o no es prudente usar caracteres
especiales interpretados por la shell .NQG`W.2VYZab etc..2 9ampoco debe empe'ar por el
car(cter G:G %ue puede ser confundido con una opci&n. Por e3emplo si llamamos a un fichero G:rG no
solo no podremos borrarlo sino %ue se puede confundir con la peli#ros)sima opci&n G:rG de borrado
recursi"o.
Cuando un usuario es dado de alta se define la shell por defecto %ue usar( y el directorio de entrada.
Este directorio de entrada al sistema ser( el "alor de la "ariable N75;E.
En cada directorio hay dos entradas como m)nimo %ue son G.G y G..G %ue referencian respecti"amente
al directorio actual y al directorio padre. .Cuando no tenemos en la "ariable NPA97 referenciado el
subdirectorio actual tendremos %ue e3ecutar los comandos de nuestro directorio actual mediante
./comando2
El car(cter G/G se utili'a para separar los diferentes componentes de un nombre de fichero y por eso
no se puede usar como pare de un nombre de fichero. El carter nulo se usa como fin de cadena en en
len#ua3e C %ue es el len#ua3e en el %ue est( escrito el S5. Por eso tampoco se puede usar ese
caracter como nombre de fichero.
Cuando usamos un nombre de fichero %ue empie'a por G/G se llama nombre de camino completo o
nombre de camino absoluto. Si por el contrario empie'a por G.G por G..G o por un nombre se
denominar( nombre de camino relati"o por%ue su utili'aci&n depende del subdirectorio actual
donde nos encontremos. ,a $ltima parte del nombre despu!s del $ltimo car(cter G/G se llama nombre
base. basename./2.
N W E3emplo de uso del comando basename
N basename /usr/include/sys/si#nal.h
si#nal.h
,os ficheros %ue empie'an por G.G no tienen realmente nada de especial. Xa e+plicamos %ue la shell
no e+pande los nombres de estos ficheros y al#unos comandos como GlsG y otros los consideran de
una forma especial. Por e3emplo al usar el comando GlsG sin par(metros no muestra esos ficheros. Por
todo ello aparentan ser in"isibles cuando en realidad son al#unos comandos como GlsG y el propio
GbashG %uienes los tratan de forma especial. ;uchos ficheros %ue son de uso particular de al#unos
pro#ramas se usan de esta forma para %ue el usuario pueda i#norarlos en condiciones normales.
En GmsdosG e+iste un concepto llamado e+tensi&n. Corresponde con un m(+imo de tres caracteres
despu!s del $ltimo punto en un nombre de fichero. En *ni+ los nombres pueden tener "arios puntos
y despu!s del $ltimo punto puede haber m(s de tres caracteres alfanum!ricos ya %ue no e+iste el
concepto de e+tensi&n. De e+istir nombres %ue terminan de una cierta forma puede tener si#nificado
especial para al#unos pro#ramas pero no para n$cleo .Hernel2 y tampoco para el interprete de
comandos.
,o %ue si tiene un tratamiento especial a ni"el de sistema operati"o son los caracteres G/G %ue
for'osamente indican los elemento de un camino formado por la sucesi&n de caracteres. Es decir
ser( imposible crear un fichero con nombre G+/aG dentro de un directorio por%ue el sistema
interpretar)a %ue %ueremos crear un fichero GaG dentro de un directorio G+G.
Comandos para mane1ar el sistema de .ic7eros
4elaci&n de comandos m(s importantes para mane3ar el sistema de ficheros.
ls TlistaU ;uestra el contenido de directorio actual.
cd TdirU Cambiar a un subdirectorio.
mHdir Tlista:dirU Crea uno o mas directorio.
rmdir Tlista:dirU <orra uno mas directorios.
cp TlistaU Copiar uno o mas ficheros al ultimo de la lista.
Si mas de dos el ultimo debe ser un directorio.
m" TlistaU mo"er o renombrar ficheros o directorios al ultimo
nombre de la lista.
Si mas de dos el ultimo debe ser un directorio.
rm TlistaU borrar la lista de ficheros.
ln Crear un enlace a un fichero
touch Crea un fichero "ac)o o modifica la fecha de un fichero
pwd muestra el camino absoluto del directorio actual.
chmod Cambia los permisos de un fichero.
chown Cambia el propietario de un fichero.
ch#rp Cambia el #rupo de un fichero.
du TficheroU 5cupaci&n de un fichero
tree ,istado recursi"o
tree :d ;ostrar (rbol de directorios
file TficheroU 5btiene informaci&n sobre el tipo de Ficheros
4ecuerde %ue tiene a sus disposici&n el comando GmanG para consultar las distintas opciones de cada
uno de estos comandos.
!lias para el uso de los comandos m3s .recuentes
El comando GcdG es un comando interno %ue sir"e para cambiar de directorio actual. E+iste otro
comando interno llamado GaliasG %ue sir"e para al#o %ue no tiene %ue "er con el sistema de ficheros
y sin embar#o lo mencionaremos a%u) por ra'ones pr(cticas.
En muchos sistemas parecer( %ue e+iste la disponibilidad de usar un comando GllG %ue sir"e para
mostrar un directorio con abundante informaci&n. En realidad se trata de un alias. *sted puede
"erificar los alias definidos para su usuario tecleando GaliasG sin ar#umentos. Feneralmente se usa
para abre"iar el uso de comandos muy utili'ados. Esto puede resultarle de inter!s para personali'ar
su entorno.
Cuando el interprete de comandos arranca se e3ecutan una serie de ficheros G/etc/profileG
Gc/.bashOprofileG Gc/.bashOlo#inG y Gc/.profileG en este orden. En G.bashOprofileG suele e+istir una parte
%ue pre#unta por la e+istencia de un Gc/.aliasG y en caso afirmati"o lo e3ecuta. Este fichero G.aliasG
contiene una serie de comandos de alias %ue permanecer(n disponibles durante su sesi&n de traba3o
con esa shell.
Podr)a parecer %ue estamos obsesionados con la shell y %ue no sabemos hablar de otra cosa pero
solo %ueremos proporcionarle ahora unos conse3os pr(cticos %ue le faciliten el uso de su sistema.
Para ello tendr)a %ue editar el fichero G.aliasG presente en su N75;E y a=adir las l)neas si#uientes:
alias ll@Gls :lrt ::color@autoG
alias ll.@Gls :adlrt ::color@auto .Ya:'A:]C:BZVG
alias ls@Gls ::color@autoG
alias ls.@Gls :adrt ::color@auto .Ya:'A:]C:BZVG
alias md@GmHdirG
alias m"@Gm" :iG
alias rd@GrmdirG
alias rm@Grm :iG
Puede e3ecutar el fichero G.aliasG para definir todos estos alias
N . .alias
5 puede e3ecutar cual%uiera de estos comandos alias ahora mismo por e3emplo
N alias ll@Gls :lrt ::color@autoG
,ue#o teclee el comando GaliasG. Comprobar( %ue %ueda definido. 9eclee el nue"o comando GllG y
compruebe su efecto.
El bash solo e+pande los alias de la primera palabra de un comando y solo cuando no "an
entrecomillados. Por eso cuando definimos un alias %ue sustituye a un comando .Por e3emplo Qls@Gls
::color@autoGQ2 tendremos %ue usar GlsG entre comillas simples o dobles para si no deseamos %ue se
produ'ca la e+pansi&n del alias.
Para eliminar una definici&n de alias utilice el comando GunaliasG En nuestro caso.
N unalias ll
Para no tener %ue teclear manualmente cada "e' cada uno de estos alias es para lo %ue sir"e el
fichero G.aliasG.
Si no sabe editarlo tendr( %ue esperar a %ue e+pli%uemos el mane3o del editor G"iG y "ol"er a esta
secci&n para modificar su fichero G.aliasG. ,os alias ser(n definidos la pr&+ima "e' %ue entre en una
nue"a sesi&n. E+plicaremos las "enta3as de usar al#unos de los alias %ue acabamos de proponerle.
ll ,os ficheros m(s interesantes son #eneralmente los m(s recientes y para e"itar %ue desapare'can
durante un scroll lar#o los mostraremos en $ltimo lu#ar. ,a opci&n de color auto colorea la salida
del comando $nicamente si la salida ocurre en el terminal.
ll. Sir"e para listar ficheros %ue empie'an por un punto y despu!s tienen una letra o d)#ito como
se#undo car(cter. Normalmente los ficheros de confi#uraci&n de su usuario se encuentran en su
N75;E y utili'an nombres de este tipo %ue no aparecen en la e+pansi&n de un GVG.
rm Este alias e"ita usar GrmG tal cual est( a=adi!ndole la opc)on :i para confirmar antes de borrar.
4ealmente $til. Es muy recomendable usar GrmG por defecto de esta forma. Si no desea ser
interro#ado a cada fichero si realmente desea borrarlo o no utilice este alias tal como est( pero
a=adiendo la opci&n :f. rm :f Tlista:de:ficherosU borrar( silenciosamente todo lo %ue usted ordene
%ue no tiene %ue coincidir con todo lo %ue usted supone %ue ha ordenado. En especial si no pone
cuidado al usar la e+pansi&n de ordenes de la shell.
,a respuesta a la pre#unta de como recuperar un fichero borrado accidentalmente es... GDe nin#una
formaG.
Cosas simp(ticas de *ni+ y ,inu+.
Puede %ue sepa de al#uien %ue en cierta ocasi&n recuper& una informaci&n "aliosa usando trucos o
herramientas especiales pero no cuente con ello. 7ay pro#ramas de borrado %ue usan papeleras y
%ui'(s piense en poner un alias de rm para %ue use uno de estos pro#ramas. Esto introduce
ineficiencia en el sistema pero puede hacerse a ni"el de usuario. ,o m(s correcto es usar una buena
pol)tica de copias de se#uridad.
m" Se trata de mo"er informaci&n pero aplicamos el mismo principio %ue para GrmG.
$1emplos de uso de los comandos estudiados
E3ecutaremos paso a paso una serie de comandos y comprobaremos lo %ue ocurre.
N W Crearemos un alias para ls con al#unas opciones
N alias ll@Gls :lrt ::color@autoG
N W Creamos en /tmp una serie de directorios anidados
N cd /tmp
N mHdir HHHH
N cd HHHH
N W Consultamos en %ue directorio estamos situados
N pwd
/tmp/HHHH
N W Continuamos creando ficheros y directorios
N echo ++ U HH/
N echo ++ U HH0
N echo ++ U HH1
N mHdir HHHH
N W *samos el alias por primera "e' para "er el contenido
N W del directorio actual.
N ll
total A
rw:r::r:: / acastro acastro 1 abr /L 0C:C/ HH/
rw:r::r:: / acastro acastro 1 abr /L 0C:C/ HH0
rw:r::r:: / acastro acastro 1 abr /L 0C:C/ HH1
drw+r:+r:+ 0 acastro acastro /C0A abr /L 0C:C/ HHHH
N W Continuamos creando ficheros y directorios
N cd HHHH
N echo ++ U HH/
N echo ++ U HH0
N echo ++ U HH1
N mHdir HHHH
N cd HHHH
N echo ++ U HH/
N echo ++ U HH0
N echo ++ U HH1
N cd /tmp/HHHH
N W El alias ll corresponde con el comando ls con una serie de
N W opciones pero podemos a=adir nue"as opciones. Por e3emplo
N W podemos hacer un listado recursi"o de toda la estructura de
N W ficheros y directorios %ue cuel#a del directorio actual.
N W /tmp/HHH
N ll :4 .
total A
rw:r::r:: / acastro acastro 1 abr /L 0C:C/ HH/
rw:r::r:: / acastro acastro 1 abr /L 0C:C/ HH0
rw:r::r:: / acastro acastro 1 abr /L 0C:C/ HH1
drw+r:+r:+ 1 acastro acastro /C0A abr /L 0C:C1 HHHH
HHHH:
total A
rw:r::r:: / acastro acastro 1 abr /L 0C:C1 HH/
rw:r::r:: / acastro acastro 1 abr /L 0C:C1 HH0
rw:r::r:: / acastro acastro 1 abr /L 0C:C1 HH1
drw+r:+r:+ 0 acastro acastro /C0A abr /L 0C:CA HHHH
HHHH/HHHH:
total 1
rw:r::r:: / acastro acastro 1 abr /L 0C:CA HH/
rw:r::r:: / acastro acastro 1 abr /L 0C:CA HH0
rw:r::r:: / acastro acastro 1 abr /L 0C:CA HH1
N W Con el comando tree y la opci&n :d podemos "er la estructura
N W simplemente con los directorios y como est(n colocados.
N tree :d
.
\:: HHHH
\:: HHHH
0 directories
N W Para "er la estructura completa usamos el comando
N W tree sin opciones. Jemos ahora tambien los ficheros.
N tree
.
>:: HH/
>:: HH0
>:: HH1
\:: HHHH
>:: HH/
>:: HH0
>:: HH1
\:: HHHH
>:: HH/
>:: HH0
\:: HH1
0 directories B files
N W Con find podemos buscar usando muchos criterios. Por e3emplo
N W por nombre.
N find . :name GHHVG
./HH/
./HH0
./HH1
./HHHH
./HHHH/HH/
./HHHH/HH0
./HHHH/HH1
./HHHH/HHHH
./HHHH/HHHH/HH/
./HHHH/HHHH/HH0
./HHHH/HHHH/HH1
N W Podemos buscar por fecha de modificaci&n comparanda con la
N W fecha de otro fichero. Por e3emplo %ue ficheros son m(s
N W recientes %ue G./HHHH/HH0G S
N find . :newer ./HHHH/HH0
./HHHH
./HHHH/HH1
./HHHH/HHHH
./HHHH/HHHH/HH/
./HHHH/HHHH/HH0
./HHHH/HHHH/HH1
N W Podemos comprobar la ocupaci&n de los directorios
N du .
A ./HHHH/HHHH
R ./HHHH
/0 .
Para borrar todo esto se suele usar la opci&n de borrado recursi"o. No debe usar esta opci&n como
root sin estar muy se#uro de lo %ue hace. Esta opci&n borra recursi"amente y es muy peli#rosa
por%ue un error puede borrar recursi"amente desde un lu#ar e%ui"ocado un mont&n de informaci&n.
No es necesario borrar nada por%ue en /tmp la informaci&n suele borrarse durante el arran%ue. Si
%uiere intentarlo con las precauciones mencionadas teclee Grm :fr /tmp/HHHHG. Si lo prefiere puede
de3arlo sin borar ya %ue no ocupa casi nada y se borrar( la pro+ima "e' %ue se "ac)e el G/tmpG %ue
ser( se#uramente cuando "uel"a a arrancar el ordenador.
Para %ue los comandos anteriores puedan funcionar correctamente deberemos tener los permisos
adecuados sobre los ficheros y los subdirectorios.
E"identemente hay muchos m(s y no podemos e+plicarlos todos ahora pero %ui'(s sea bueno
mostrar una pe%ue=a lista de al#unos de ellos %ue "eremos m(s adelante en posteriores cap)tulos.
sum 5btiene un "alor de checHsum
cHsum 5btiene un "alor de checHsum lar#o y por tanto m(s se#uro
#'ip Compresor de FN*
find <uscar ficheros
tar Empa%ueta ficheros y directorios en un solo fichero.
cpio Empa%ueta ficheros y directorios en un solo fichero.
Sistema plano de .ic7eros
,a estructura en forma de (rbol tiene el incon"eniente de %ue se re%uiere ir recorriendo el (rbol para
ir locali'ando cada uno de los elementos. Por ello se hace necesario un sistema mucho m(s directo.
A cada ficheros se le asocia un n$mero para poder locali'arlo directamente. Dicho n$mero se llama
inodo. ,os n$meros de inodos son el )ndice del sistema plano de ficheros tambi!n llamado por ello
tabla de inodos Cada fichero de cada sistema de ficheros tiene un inodo distinto sal"o %ue se trate
de un enlace r)#ido .hard linH2. Sin embar#o hay inodos %ue no se corresponden con nin#$n fichero.
*n fichero en sentido estricto indica capacidad de contener una secuencia de bytes.
*n inodo indica b(sicamente la capacidad de tener un nombre asociado al sistema de ficheros.
*n fichero tiene asociadas funciones de posici&n y de lectura y escritura de informaci&n dentro del
fichero. *n inodo es una referencia muy directa a un fichero y a #randes ras#os tiene asociadas
funciones %ue permiten mane3ar y construir la estructura de (rbol del sistema de ficheros.
#ipos de .ic7eros
4e#ular. Son meros almacenes de informaci&n. Al#unos contiene c&di#o e3ecutable.
Directorios Son una tabla con n$meros de inodos y nombres de ficheros.
Ficheros especiales. Pueden ser dispositi"o tipo car(cter o dispositi"o de blo%ues. El mane3o de
estos ficheros depende del dispositi"o en particular.
Fifo son pipes con nombre. Son propios de System J y en <SD no e+isten pero en ,inu+ si est(n
disponibles.
Enlaces simb&licos .symbolic linHs2. Son ficheros %ue contiene un puntero a otro fichero %ue podr)a
perfectamente estar en un sistema de ficheros distinto.
El SoHet es un fichero especial de A.1 <SD y se utili'a para comunicar procesos %ue pueden estar en
m(%uinas distintas.
Enlaces r)#idos .hard linHs2. 4ealmente es un $nico fichero %ue puede ser "isto con distintos
nombres dentro de un mismo sistema de ficheros. Es decir se pueden obser"ar como si fueran
ficheros id!nticos con el mismo inodo. ,a informaci&n reside en un mismo lu#ar y lo %ue ocurra
aparentemente en un sitio ocurrir( instant(neamente en el otro lu#ar. ,os enlaces de este tipo no
pueden ocurrir entre sistemas de ficheros distintos. No todos los sistemas de ficheros soportan hard
linHs ya %ue es un concepto muy li#ado a los S5 tipo *ni+.
Feneralmente los diferentes tipos de ficheros son capaces de aceptar operaciones de apertura
cierre lectura y escritura de forma similar. Por ello se puede rediri#ir una entrada y una salida a
diferentes tipos de ficheros. Parte de la enorme potencia y fle+ibilidad de los S5 tipo *ni+ residen
en este hecho. Fracias a esto la combinaci&n de entradas salidas entre procesos ficheros
dispositi"os etc.. resulta muy sencilla y fle+ible. E+iste una sal"edad importante. ,os directorios en
este sentido son totalmente especiales y un intendo de escribir en un directorio dar( siempre un
error aun%ue sea reali'ado por GrootG. No tiene sentido permitirlo. ,os directorios se crean borran y
modifican con comandos espec)ficos para ellos.
N echo U .
bash: .: Es un directorio
!tributos de .ec7a en .ic7eros
En *ni+ y ,inu+ los ficheros en sentido amplio tienen asociadas siempre tres fechas. En realidad
estas fechas est(n almacenadas internamentte como el n$mero de se#undos transcurridos desde el G/
de Enero de /BMCG.
*na de ellas indica el tiempo del $ltimo acceso reali'ado sobre ese fichero. ,a otra indica la fecha
de creaci&n .en realidad es la fecha del $ltimo cambio de estado2 de ese fichero y la $ltima y %ui'(s
m(s importante .es la %ue "emos al consultar con Gls :lG2 indica la fecha de la $ltima modificaci&n.
En realidad si cambiamos el estado de un fichero por e3emplo cambiando permisos o el propietario
se modificar(n las fechas de creaci&n y del $ltimo acceso. Por eso la fecha %ue hemos denominado
de creaci&n puede ser posterior a la fecha de modificaci&n del fichero.
Cuando se crea un fichero las tres fechas tendr(n el mismo "alor. Cuando se lee un fichero se
modifica la fecha de acceso del mismo pero acceder al nombre de un fichero o consultar el estado
de un fichero no modifica nin#una fecha. Su fecha de acceso tampoco ya %ue en realidad lo %ue se
hace es leer la informaci&n del directorio %ue lo contiene el cual si %ue "er( modificada su fecha de
acceso.
,as fechas de modificaci&n asociadas a los directorios cambian con las altas o ba3as de los
elementos dentro del directorio. Esto es debido a %ue dichas operaciones se consideran como si
fueran escrituras en el fichero especial de tipo directorio. *n directorio es al fin y al cabo una
simple tabla. Esto lo recordaremos cuando hablemos de permisos asociados a directorios.
Para modificar las fechas de modificaci&n y de acceso de un fichero se puede usar el comando
touch./2
#est
Puede comprobar sus conocimientos respondiendo el si#uiente test.
Para ello seleccione las opciones %ue se a3usten a la "erdad y lue#o pulse el boton para "er el
resultado de su test.

/ El car(cter GVG no es utili'able en un nombre de fichero.
0 ,os nombres de ficheros %ue comien'an por un punto ser(n i#norados por el Hernel.
1 *n nombre de fichero no puede contener m(s de un punto.
A *n nombre de fichero no puede contener un espacio.
K alias es un comando interno.
L alias sin par(metros muestra todos los alias definidos en la sesi&n.
M Para borrar ficheros y directorios se usa GrmG y GrmdirG respecti"amente.
R Para renombrar ficheros y directorios se usa Gm"G y Gm"dirG respecti"amente.
B Para borrar recursi"amente se usa Grm :iG.
/C ,a orden Gcp se#/VG copia todos los ficheros %ue hay en se# al directorio actual.
// *n linH simb&lico puede hacer referencia a un fichero de otro sistema de ficheros.
/0 El sistema plano de ficheros de #estiona mediante la tabla de inodos.
/1 *n enlace r)#ido puede hacer referencia a un fichero de otro sistema de ficheros.
/A <orrando enlaces r)#idos en cual%uier orden se conser"a la informaci&n hasta %ue no se borra el
$ltimo enlace.
/K El comando Gecho fffffffff U ffG Crear( un fichero GffG de tipo Fifo.
/L El comando Gecho fffffffff U ffG Crear( un fichero GffG de tipo 4e#ular.
1V. Sistema de Qic7eros %Se,unda parte&
ermisos de .ic7eros
*saremos el t!rmino fichero en su sentido m(s amplio. Es decir %ue el tema de permisos es
aplicable a distintos tipos de ficheros con al#unas mati'aciones %ue e+plicaremos m(s adelante. ,os
ficheros tienen muchos atributos adem(s de su nombre. Para "er los m(s si#nificati"os haremos:
N ls :l /
Supon#amos %ue tenemos el si#uiente fichero llamado GHHHHHG
:rw+rw+rw+ / root root /AMAC abr /K /0:CK HHHHH
^^^^^^^^^^ ^ ^ ^ ^ ^ ^ ^ ^ ^
>>>>>>>>>> > > > > > > > > >nombre del fich.
>>>>>>>>>> > > > > > > > >
>>>>>>>>>> > > > > > > > >minutos : Fecha y
>>>>>>>>>> > > > > > > >Ohora : hora de la
>>>>>>>>>> > > > > > >d)a del m!s : $ltima
>>>>>>>>>> > > > > >m!s : modificaci&n
>>>>>>>>>> > > > >
>>>>>>>>>> > > > >O 9ama=o en bytes
>>>>>>>>>> > > >
>>>>>>>>>> > > >Onombre del #rupo
>>>>>>>>>> > >nombre del propietario del fichero
>>>>>>>>>> >
>>>>>>>>>> >On$mero de enlaces r)#idos .hard linHs2
>>>>>>>>>>
>>>>>>>>>>OCC/ permiso de e3ecuci&n para : *n usuario
>>>>>>>>>CC0 permiso de escritura para : cual%uiera
>>>>>>>>OCCA permiso de lectura para :
>>>>>>>
>>>>>>>C/C permiso de e3ecuci&n para : *n usuario
>>>>>>OC0C permiso de escritura para : pertene
>>>>>CAC permiso de lectura para : ciente al
>>>> : #rupo
>>>>
>>>>O/CC permiso de e3ecuci&n para : El usuario
>>>0CC permiso de escritura para : propieta
>>OACC permiso de lectura para : rio
>
>tipo de fichero
: Fichero re#ular .fichero normal2
d Directorio
l Enlace simb&lico
p Fifo con nombre
b Dispositi"o de blo%ues
c Dispositi"o de caracteres
En in#l!s se usan los t!rminos owner #roup y others para desi#nar respecti"amente al propietario
al #rupo y a cual%uier usuario.
Notaci&n num!rica para permisos
4ecuerde %ue tambi!n tenemos %ue pensar en la posibilidad de %ue mi ami#o Da"id acostumbrado
al uso del a'ad&n decida hacer este curso y ten)amos un compromiso de e+plicar las cosas partiendo
de cero. ,os permisos de los ficheros son almacenados en formato binario y se puede referenciar
num!ricamente. Jimos %ue a cada permiso indi"idual le asociabamos un n$mero de tres d)#itos
formado por dos ceros y un tercer n$mero %ue pod)a ser unicamente / 0 o A. Por e3emplo el
permiso de escritura para un usuario cual%uiera era CC0. Con estos n$meros se puede codificar los
permisos de la forma %ue indicamos en el si#uiente e3emplo:
r w + : : w + : r : + Esto e%ui"aldr)a a un permiso M1K
A 0 / : C 0 / : A C / . A?0?/ C?0?/ A?C?/ @ M1K 2
,os permisos tambi!n pueden representarse como una secuencia de bits. *n bit es un "alor %ue solo
puede "aler C o /. En el caso anterior podr)amos representarlo de la forma /// C/C /C/ donde /
indica %ue si hay permiso C %ue no lo hay y la posici&n de cada C y cada / representa a cada uno de
los permisos.
UmasP
Es un comando interno del bash. Se utili'a cuando se crean ficheros.
No podemos profundi'ar mucho en temas de matem(tica binaria por%ue nos saldriamos del tema
pero la umasH se aplica mediante una operaci&n llamada AND N59.
Consiste en tomar a umasH como una m(scara donde los bits a / especifican los bits de permisos
%ue se pondr(n a cero.
Por e3emplo si %ueremos abrir un fichero con permisos LLA y tenemos una umasH de C00
obtendremos un fichero LAA.

LLA //C //C /CC
C00 CCC C/C C/C

LAA //C /CC /CC
Esto tiene la utilidad de prote#er el sistema frente a cierto tipo de descuidos durante la creacion de
ficheros.
Por e3emplo supon#amos %ue un administrador de un sistema considera %ue por defecto todos los
ficheros %ue el crea deber)an carecer de permisos de e3ecucion y de escritura para todo el mundo y
%ue para los usuarios de su mismo #rupo de ber)an de carecer de permiso de e3ecuci&n. Para ello
establecer( una GumasH @ C01G. Es decir una umasH %ue elimina los permisos : : : . : w : . : w +
Para un script %ue #enere ficheros %ue solo deban ser accesibles para el usuario %ue los ha #enerado
usar)amos. GumasH @ CMMG
Comando c7mod
Este comando sir"e para alterar una serie de atributos del fichero E+iste dos formas de usarlo. *na
indicando el tipo de acceso y a %uien lo %ueremos conceder o eliminar. E+isten una serie de
atributos %ue se pueden modificar usando este comando.
CACCC Set uid on e+ecute.
C0CCC Set #id on e+ecute.
C/CCC Sa"e te+t on ima#e after e+ecution.
CCACC r Permiso de lectura para el propietario .owner2
CC0CC w Permiso de escritura para el propietario
CC/CC + Permiso de e3ecuci&n para el propietario
CCCAC r Permiso de lectura para el #rupo .#roup2
CCC0C w Permiso de escritura para el #rupo
CCC/C + Permiso de e3ecucion para el #rupo
CCCCA r Permiso de lectura para cual%uiera .others2
CCCC0 w Permiso de escritura para cual%uiera
CCCC/ + Permiso de e3ecucion para cual%uiera
,os atributos Set uid Set #id y Sa"e te+t no los e+plicaremos de momento.
Consulte las p(#inas del manual relati"as a este comando. Como de costumbre el manual resulta
imprescindible a la hora de recordar la utili'aci&n de un comando pero no a la hora de comprender
conceptos nue"os. No se preocupe con los e3ercicios %ue le proponemos a continuaci&n
comprender( perfectamente:
N cd /tmp
N echo U HH
N
$ chmod 777 kk
$ ls -l kk
-rwxrwxrwx .... .... ......
$
N chmod MCM HH
N ls :l HH
:rw+
rw+ .... .... ......
N
$ chmod 421 kk
$ ls -l kk
-r
w
x .... .... ......
$
N chmod /0A HH
N ls :l HH
+:w:r:: .... .... ......
N
$ # 'chmod 0 kk' equivale a 'chmod 000 kk'
$ chmod 0 kk
$ ls -l kk
.... .... ......
$
N chmod ?r HH
N ls :l HH
:r::r::r:: .... .... ......
N
$ chmod +x kk
$ ls -l kk
-r-xr-xr-x .... .... ......
$
N chmod :r HH
N ls :l HH
+::+::+ .... .... ......
N
$ chmod u+r kk
$ ls -l kk
-r-x--x--x .... .... ......
$
N chmod a:+ HH
N ls :l HH
:r
.... .... ......
N
$ chmod g+x kk
$ ls -l kk
-r
x
.... .... ......
$
N chmod o?+ HH
N ls :l HH
:r
+::+ .... .... ......
N
$ chmod a+rwx kk
$ ls -l kk
-rwxrwxrwx .... .... ......
rm kk
Comando chown
El comando 'chown' sirve para cambiar el UID y el GID de un
fichero. Esto solo se puede hacer si tenemos los permisos para
ello. Normalmente su uso est reservado a 'root' y por ello no
diremos nada ms. Es muy posible que si usted usa Linux en un
ordenador personal necesite algunos de estos conocimientos pero se
sale de los propsitos de este curso. Le basta con saber que
existe y para que sirve.
Concesin de acceso por parte del kernel
Explicaremos el funcionamiento de los permisos de la forma ms
precisa que nos sea posible.
Para ello usaremos unas abreviaturas que ya conocemos.
EUID es el Identificador de usuario efectivo de un proceso
EGID es el Identificador de grupo efectivo de un proceso
UID en un fichero es un atributo que identifica al propietario.
GID en un fichero es un atributo que identifica al grupo del
propietario.
En realidad hablamos de propietario como el usuario que creo el
fichero. El Kernel realizar el siguiente test para conceder a un
proceso el acceso de cierto tipo a un fichero.
Si el EUID del proceso es 0 se da acceso. (root puede hacer lo que
sea)
Si el EUID del proceso es igual al UID del owner (propietario del
fichero) se concede el acceso si los permisos de usuario rwx son
los adecuados.
Si el EUID del proceso es distinto al UID del owner, y si el EGID
del proceso es igual al GID del owner, se concede el acceso si los
permisos de grupo rwx son los adecuados.
Si el EUID del proceso es distinto al UID del owner, y si el EGID
del proceso es distinto al GID del owner, se concede el acceso si
los permisos de others rwx son los adecuados.
NOTA el comando rm permite borrar cualquier fichero sea cual sean
los permisos cuando el proceso tiene un EUID coincidente con el
propietario del fichero. Unicamente ocurre que si el fichero esta
protegido contra escritura suele pedir (dependiendo de la
configuracin) confirmacion antes de borrarlo. El permiso para
borrar un fichero no se guarda como atributo del fichero. Esto se
hace a nivel de directorio y pasamos a explicarlo inmediatamente.
Significado de los permisos en directorios
Para entender como funcionan los permisos aplicados a un
directorio hay que imaginar que un directorio es un fichero normal
que solo contiene una tabla en la que se relacionan los ficheros
presentes en ese directorio. En todos los directorios existen
siempre un par de entradas obligadas que son '.' y '..' para el
directorio actual y para el directorio padre respectivamente.
Vamos a explicarlo sobre la marcha a la vez que hacemos el
ejercicio. Recuerde usar un usuario normal (distinto de root) para
realizar los ejercicios.
$ cd /tmp
$ mkdir kk
$ cd kk
$ echo > k1
$ echo > k2
$ cd /tmp
$ chmod 777 kk
$ Para "er como ha %uedado los permisos hacemos ...
N ls :ld HH
drw+rw+rw+ 0 ..... ...... HH
N Para ver que ficheros contiene el directorio kk hacemos ...
$ ls kk
k1 k2
Si un directorio no tiene permiso de lectura, resultara imposible
para cualquier comando incluido ls averiguar cual es su contenido.
Sin abandonar la sesin anterior continuamos el ejercicio
$ W./2#
$ Eliminamos los premisos de lectura del directorio HH
N chmod :r HH
N ls :ld HH
d:w+:w+:w+ 0 ..... ...... HH
N ls :l HH
ls: HH: Permiso dene#ado
N En este intante podemos entrar dentro del directorio
$ 6ncluso podemos crear un nue"o fichero pero ya no podemos
N Saber cual es el contenido del directorio.
$ cd kk
$ pwd
/tmp/kk
$ echo > k3
$ ls -l
ls: .: Permiso denegado
$ 7emos podido meternos dentro del directorio HH por%ue aun
N Tenemos permiso para ello pero seguimos sin poder saber
$ cual es su contenido.
N cd /tmp
Si no se tiene permiso de e3ecucion en un directorio no se podra hacer cd a ese directorio ni a
nin#uno de los directorios %ue cuel#an de el. Esto imposibilita todas las operaciones %ue utilicen ese
directorio como parte del camino
Sin abandonar la sesi&n anterior continuamos el e3ercicio
N #(2)W
N Ahora eliminamos permiso de ejecucin
$ chmod -x kk
$ ls -ld kk
d-w--w--w- 2 ..... ...... kk
$ 6ntentamos entrar
N cd HH
bash: cd: HH: Permiso dene#ado
N No hemos podido entrar
$ rm kk/k2
bash: cd: kk: Permiso denegado
$ 9ampoco nos de3a borrar el fichero desde fuera
N W
N Recuperamos permiso de ejecucin
$ chmod +x kk
$ ls -ld kk
d-wx-wx-wx 2 ..... ...... kk
$ rm kk/k2
$ ls kk
k1
Si no tiene permiso de escritura no se podra dar altas, baja o
modificaciones en la tabla lo que se traduce en que no se pueden
borrar sus ficheros ni crear otros nuevos, ni renombrar ficheros.
Sin abandonar la sesin anterior continuamos el ejercicio
$ W.12#
$ Ahora eliminaremos permisos de escritura
N chmod LLL HH
N ls :ld HH
dr:+r:+r:+ 0 ..... ...... HH
N Ahora no tenemos permiso de escritura
$ cd kk
$ ls
rm: borrar `k1'? (s/n) s
rm: k1: Permiso denegado
$ echo > k3
bash: k3: Permiso denegado
$ touch k3
touch: k3: Permiso denegado
$ Sin permiso de escritura en el directorio no se pueden
N Crear ficheros nuevos dentro de el ni borrar ficheros
$ Pero los ficheros son perfectamente accesibles
N echo Q;ensa3e de pruebaQ U H/
N cat H/
;ensa3e de prueba
N Vamos a limpiar
$ chmod 777 /tmp/kk
$ rm /tmp/kk/*
$ rmdir /tmp/kk
Setuid y Setgid
Cada proceso tiene un (R)UID, (R)GID, EUID, y EGUID. Cada fichero
tiene un UID y un GID owner.
El comando 'chmod 4000' pone el bit setuid . Esto hace que el
proceso que ejecuta este comando temporalmente cambie su EUID
tomando el valor UID del fichero. Es decir el proceso sufre un
cambio de personalidad y se convierte en la persona que figura
como propietaria de ese fichero. Para ello lgicamente ese fichero
deber ser un ejecutable. El comando passwd sirve para cambiar la
clave. Se trata de un comando propiedad de root con setuid. Por lo
tanto mientras estamos ejecutando este comando adoptamos la
personalidad de 'root'. Gracias a ello se nos permite acceder a la
clave para modificarla y gracias a que ese comando no permite
hacer nada ms que eso se evita que este proceso con personalidad
de 'root' pueda hacer otras cosas.
Busque el comando 'passwd' en su sistema. Podra estar en
'/usr/bin/passwd' pero si no se encuentra en ese sitio puede
localizarlo con 'which passwd'
Haga un ll para comprobar sus permisos y ver que es propiedad de
'root' y que tiene una 's' en lugar de una 'x' en la parte de los
permisos para el propietario.
rwsr-xr-x 1 root root 28896 jul 17 1998
/usr/bin/passwd
El comando 'chmod 2000' pone el bit setgid on execute. Hace algo
parecido al anterior pero a nivel de grupo. Es decir el proceso
que ejecuta este comando temporalmente cambie su EGID tomando el
valor GID del fichero. Por ejemplo el comado lpr no solo nos
convierte en 'root' cuando lo ejecutamos sino que nos cambia el
grupo por el grupo de impresin.
-rwsr-sr-x 1 root lp 14844 feb 7 1999
/usr/bin/lpr
El comando 'chmod 1000' pone el bit sticky. Se usa poco y tena
ms utilidad en sistemas Unix ms antiguos. Sirve para que el
proceso permanezca en memoria RAM todo el rato mientras se est
ejecutando. Normalmente cuando muchos procesos usan la memoria RAM
se van turnando en su uso y se descargan a disco para ceder su
espacio en memoria RAM a otros procesos. Con el uso de este bit se
evita la descarga a disco. Es una forma de aumentar la velocidad
de ese proceso.
Para ver el aspecto de estos permisos realice el siguiente
ejercicio. Realice siempre los ejercicios desde un usuario normal
distinto de root.
$ cd /tmp
$ echo > kk
$ chmod 4000 kk
$ ll kk
S
1 ..... ..... kk
$ chmod 4100 kk
s
1 ..... ..... kk
$ chmod 2000 kk
S
1 ..... ..... kk
$ chmod 2010 kk
s
1 ..... ..... kk
$ chmod 1000 kk
T 1 ..... ..... kk
$ chmod 1001 kk
t 1 ..... ..... kk
Test
Puede comprobar sus conocimientos respondiendo el siguiente test.
Para ello seleccione las opciones que se ajusten a la verdad y
luego pulse el boton para ver el resultado de su test.

1 'chmod 742 kk' pone los permisos -rwxr
w- al fichero 'kk' .
2 'chmod 777 kk ; chmod a-w kk' equivale a chmod 555 kk'.
3 Si un fichero no tiene permisos de lectura nadie podr leerlo.
4 Si un directorio tiene permisos d-wx-wx-wx los usuarios
normales
solo podrn acceder los ficheros que contiene si conocen sus
nombres.
5 Para hacer cd /dir1/dir2/dir3/dir4 necesitamos
permisos de ejecucion para cada uno de los directorios .
6 Para hacer 'echo > fich1' necesitamos siempre permisos de
escritura
en el directorio actual. Si fich1 existe tambin se requiere
permiso de
escritura para fich1.
7 Si nuestra umask valiera 777 los ficheros se crearian siempre
con todos los permisos.
11. Sistema de Qic7eros %#ercera parte&
#ipos de enlaces %linPs& y su mane1o
,a palabra linH es in#lesa y para el concepto %ue "amos a tratar podr)amos traducirla por enlace.
7ay dos tipos de enlaces llamados Ghard linHG y Gsymbolic linHG. Podriamos traducirlo por enlace
r)#ido y por enlace simb&lico. El t!rmino enlace simb&lico se usa con frecuencia en espa=ol y
parece muy adecuado pero realmente no e+iste una traducci&n para hard linH tan aceptada. Nosotros
emplearemos el t!rmino r)#ido para hard %ue literalmente si#nifica duro.
Xa hemos mencionado al#unas cosas sobre ellos pero sin profundi'ar demasiado.
El mane3o de ambos tipos de enlaces se hace con el comando GlnG. Como es habitual un repaso a la
p(#ina man de este comando es muy recomendable. ,a creaci&n de un enlace r)#ido y uno
simb&lico es muy similar. ,a diferencia es %ue para el enlace simb&lico tendremos %ue usar la
opci&n :s.
Como es habitual asumimos %ue las pr(cticas se reali'ar(n desde un usuario distinto de root.
N cd /tmp
N mHdir /tmp0
N cd tmp0
N echo ++++ U e3C
N Ahora creamos un par de enlaces rgidos con ej0
$ ln ej0 ej1
$ ln ej0 ej2
$ Creamos tambi!n un enlace simb&lico e3s/ a e3C
N ln :s e3C e3s/
N mHdir dir/
N Tambin creamos un enlace simblico dir2 a dir1
$ ln -s dir1 dir2
$ ls -l
drwxr-xr-x 2 pepe user 1024 may 18 17:28 dir1
lrwxrwxrwx 1 pepe user 4 may 18 17:28 dir2 -> dir1
rw-r--r-- 3 pepe user 1 may 18 17:26 ej0
rw-r--r-- 3 pepe user 1 may 18 17:26 ej1
rw-r--r-- 3 pepe user 1 may 18 17:26 ej2
lrwxrwxrwx 1 pepe user 3 may 18 17:28 ejs1 -> ej0
Con esto acabamos de crear dentro de tmp un directorio tmp2 y
dentro de el hemos creado ya algunos ficheros, algunos directorios
y unos cuantos enlaces rgidos y simblicos. Los enlaces rgidos
no muestran nada particular listados con 'ls -l' pero los enlaces
simblicos vienen acompaados de una flecha que apunta a otro
nombre de fichero.
El fichero 'ej0' lo hemos creado con un contenido 'xxxx' para ver
que pasa con ese contenido ms adelante. El nombre de usuario
'pepe' y el nombre de grupo 'users' son ficticios y en su sistema
obtendr otra cosa. Hay una columna de nmeros a continuacin de
los permisos. Se trata de una columna que indica el nmero de
enlaces rgidos que estn asociados a un mismo fichero. En el caso
de 'ej0', 'ej1', 'ej2' aparece un 3 y est claro porque son
enlaces creados por nosotros pero el directorio 'dir1' tiene un 2.
Esto significa que existe otro enlace rgido para ese directorio
que nostros no hemos creado. Se ha creado automticamente al crear
'dir1'. Acuerdese que todos los directorios se crean con un par de
entradas que son '.' y '..' El 2 por lo tanto en este caso se debe
a la entrada '.' dentro del propio 'dir1' y si dentro de 'dir1'
existieran directorios habra que contabilizar cada uno del los
'..' de los directorios hijos como enlaces rgidos de 'dir1'. Un
fichero se corresponde con un nico inodo. Es decir tiene una
nica entrada en la tabla plana del sistema de ficheros, pero
quizs aparezca varias veces en distintas partes del sistema de
ficheros, o con distinto nombre. Si esto ltimo no le ha quedado
claro vuelva a leerlo despus de finalizar este captulo porque
vamos a seguir exiplicando que es un enlace rgido. Ahora
retomamos la prctica en el punto donde la dejamos y continuamos.
$ cat ej0
xxxx
$ echo kkkkkkkkk > ej1
$ cat ej0
kkkkkkkkk
$ cat ejs1
kkkkkkkkk
Vemos que el contenido de los distintos enlaces con 'ej0' es
idntico, y si modificamos el contenido de cualquiera de ellos se
afectar instantaneamente el contenido de los restantes. En
realidad la informacin es accesible desde distintos nombres de
ficheros pero no son copias sino que se trata de la misma unidad
de informacin. Continuamos con el ejercicio.
$ rm ej0
$ cat ejs1
cat: ejs1: No existe el fichero o el directorio
$ cat ej1
kkkkkkkkk
Aqu ya vemos una diferencia. Pese a que 'ej1' se cre como un
enlace de 'ej0', 'ej1' mantiene accesible la informacin incluso
aunque desaparezca 'ej0'. Eso es porque en el caso de los enlaces
rgidos da igual cual es el enlace o fichero original. Son
totalmente equivalentes y la informacin solo desaparecer del
sistema cuando el ltimo enlace rgido sea eliminado. La
diferencia con el enlace simblico es que actua simplemente
accediendo al nombre del fichero que tiene almacenado en su
interior. Por eso en el caso que acabamos de ver 'ejs1' queda
apuntando a 'ej0' que es un fichero que ya no existe. Continuamos
con el ejercicio y ahora usaremos una opcin para 'ls' que no
habamos visto antes. Se trata de la opcin -i que sirve para
visualizar el nmero de inodo.
Un inodo es una clave numrica para el acceso al sistema plano de
ficheros donde cada punto capaz de recibir o entregar informacin,
tiene una nica clave. Por eso los distintos enlaces rgidos
contienen el mismo valor de inodo. Lo de recibir o entregar
informacin se traduce en chorros de bytes producidos en
operaciones de lectura escritura pero estas funciones pese a
manejarse siempre igual realizan cosas muy distintas dependiendo
del tipo de fichero. Un fichero regular es un almacn de
informacin. Otros tipos de ficheros no son meros contenedores de
bytes. Por ejemplo los dispositivos especiales de bloques o de
caracteres pueden verse como emisores y receptores de bloques o
caracteres respectivamente asociados a un dispositivo. Tampoco son
meros contenedores de bytes los sockets, enlaces simblicos, fifos
con nombre, etc. Salvo los directorios, todos son capaces de
recoger chorros de bytes o de entregar chorros de bytes o ambas
cosas a la vez y lo ms importante, todos ellos tienen asociado un
inodo y al menos un nombre de fichero colgando de alguna parte de
sistema de ficheros. Los directorios no se pueden manejar con
funciones clsicas de lectura escritura. Tienen sus propias
funciones especficas para manejo de directorios.
$ ls -li
73449 drwxr-xr-x 2 pepe user 1024 may 18 17:28 dir1
59173 lrwxrwxrwx 1 pepe user 4 may 18 17:28 dir2 -> dir1
59171 -rw-r--r-- 2 pepe user 10 may 18 17:30 ej1
59171 -rw-r--r-- 2 pepe user 10 may 18 17:30 ej2
59172 lrwxrwxrwx 1 pepe user 3 may 18 17:28 ejs1 -> ej0
Como se puede ver 'ej1' y 'ej2' tienen el mismo valor de 59171 que
en su sistema ser otro valor cualquiera. En este momento despus
de borrar 'ej0' figuran con el valor 2 para el nmero de enlaces
rgidos asociados. Vamos a mover el enlace simblico 'ejs1' a
'dir1' pero vamos a usar 'mv ejs1 dir2' en lugar 'mv ejs1 dir1'
pero debera dar lo mismo ya que 'dir2' es un enlace simblico a
'dir1'.
$ mv ejs1 dir2
$ #
$ Comprobamos el resultado
N ls :li
M1AAB drw+r:+r:+ 0 pepe user /C0A may /R /M:10 dir/
KB/M1 lrw+rw+rw+ / pepe user A may /R /M:0R dir0 :U dir/
KB/M/ :rw:r::r:: 0 pepe user /C may /R /M:1C e3/
KB/M/ :rw:r::r:: 0 pepe user /C may /R /M:1C e30
N ls dir0
e3s/
N ls :li dir/
KB/M0 lrw+rw+rw+ / pepe user 1 may /R /M:0R e3s/ :U e3C
7emos comprobado %ue un enlace simb&lico se ha comportado i#ual %ue si fuera el propio
directorio apuntado. En realidad podemos actuar a todos los efectos como si se tratara del "erdadero
fichero en lu#ar de un enlace simb&lico sal"o en el momento de su creaci&n y en el momento de su
destrucci&n. ,a operaci&n GrmG sobre un fichero simb&lico no actua sobre el fichero apuntado sino
sobre el propio enlace simb&lico destruyendolo.
Ahora tenemos Gdir0/e3s/ :U e3CG pero Ge3CG ni si%uiera e+iste. Jamos a cambiar el nombre de Ge30G
%ue era un enlace r)#ido de Ge3CG por Ge3CG.
N m" e30 e3C
N cat dir0/e3s/
cat: dir0/e3s/: No e+iste el fichero o el directorio
<ueno este error es l&#ico por%ue el enlace Gdir0/e3s/G apunta a Ge3CG y no importa %ue estemos en el
mismo directorio %ue Ge3CG sino %ue Gdir0/e3s/G y Ge3CG est!n en el mismo directorio. ,os enlaces son
siempre relati"os al sitio donde se encuentra el propio enlace. En caso contrario podr)a resultar
#racios)simo pero poco pr(ctico por%ue dependiendo de donde estu"ieramos nosotros . m(s
e+actamente dependiendo del directorio actual del proceso %ue lo use2 apuntar)a a un directorio
distinto cada "e'.
De todas formas comprobemoslo trasladando Ge3CG a Gdir0G y obser"ando como ha %uedado todo.
N m" e3C dir0
N cat dir0/e3s/
HHHHHHHHH
N ls :li
M1AAB drw+r:+r:+ 0 pepe user /C0A may /R /M:1A dir/
KB/M1 lrw+rw+rw+ / pepe user A may /R /M:0R dir0 :U dir/
KB/M/ :rw:r::r:: 0 pepe user /C may /R /M:1C e3/
N ls :li dir0
KB/M1 lrw+rw+rw+ / pepe user A may /R /M:0R dir0 :U dir/
N rmdir dir0
rmdir: dir0: No es un directorio
N rm dir0
N ls :li
M1AAB drw+r:+r:+ 0 pepe user /C0A may /R /M:1A dir/
KB/M/ :rw:r::r:: 0 pepe user /C may /R /M:1C e3/
N ls :li dir/
KB/M/ :rw:r::r:: 0 pepe user /C may /R /M:1C e3C
KB/M0 lrw+rw+rw+ / pepe user 1 may /R /M:0R e3s/ :U e3C
5onta1e de dispositivos
Pueden e+istir "arios sistemas de ficheros cada uno en un dispositi"o o partici&n distinta pero para
hacerlo accesible ha de ser montado dentro del sistema principal de ficheros. Para ello se utili'an
los comandos GmountG y GumountG.
E+plicaremos esto un poco m(s. Supon#amos %ue dispone de un dis%uete en el %ue desea #uardar
informaci&n accesible como parte del sistema actual. En ;SD5S se acceder)a a la unidad %ue
representa este dispositi"o mediande el comando a: o b: por e3emplo. En *ni+ esto no ocurre
por%ue ese pat!tico in"ento llamado unidad l&#ica no e+iste.
Perd&n por lo de pat!tico pero es %ue en ;SD5S y en 8indows cambias las cosas de sitio y
terminas reinstalando todo.
Supon#amos %ue tenemos en un dispositi"o cdrom cinta dis%uete o lo %ue sea la si#uiente
estructura de directorios.
.
>:: Fuia:del:en4559ador:0.R
>:: curso
>:: #lupOC.L:/./:html:/./
>:: lipp:/./:html:/./
>:: manOinstalOdebianO0/
>:: no"ato:a:no"ato
\:: rhl:i#:L.Ces
>:: cpps
\:: icons
Para poder acceder a esta informaci&n tendr)amos %ue reali'ar una operaci&n de montado sobre
al#$n punto de nuestro sistema de ficheros actual. Por e3emplo si disponemos de un directorio
G/misc/no"atoG podriamos montar en ese punto nuestro dispositi"o y en ese caso la operaci&n ser)a
como en#anchar un arbol en la rama de otro arbol. De esta forma para el sistema ser)a como si el
arbol creciera.
.
\:: misc
\:: no"ato
>:: Fuia:del:en4559ador:0.R
>:: curso
>:: #lupOC.L:/./:html:/./
>:: lipp:/./:html:/./
>:: manOinstalOdebianO0/
>:: no"ato:a:no"ato
\:: rhl:i#:L.Ces
>:: cpps
\:: icons
Si el administrador considera %ue montar y un dispositi"o no entra=a ries#os para el sistema
concedera permisos para %ue esto pueda ser reali'ado por los usuarios. Por e3emplo un
administrador puede considerar %ue los usuarios solo puedan montar la unidad de cdrom.
En un entorno multiusuario y multiproceso no interesa hacer efecti"a las actuali'aciones sobre un
dispositi"o de forma instantanea sino %ue se intenta optimi'ar los accesos al dispositi"o. Por eso si
escribimos en un dispositi"o de lectura escritura como por e3emplo un dis%uete y sacamos dicho
dis%uete antes de desmontarlo lo m(s probable es %ue al#unas operaciones de escrituras %ueden sin
reali'ar por%ue estaban simplemente #uardadas en memoria a la espera de ser reali'adas. Cuando se
desmonta un sistema de ficheros se escriben las operaciones pendientes sobre ese dispositi"o y
entonces puede ser e+traido del sistema sin peli#ro.
/irectorio Iproc
Este directorio es un directorio muy especial. Es un directorio en el cual est( montado un sistema de
ficheros "irtual. En realidad muestra informaci&n %ue no reside en nin#$n dispositi"o sino %ue es
elaborada por el propio Hernel. Por ello se trata de falsos archi"os. Su ocupaci&n en disco es C. Sir"e
para comprobar la confi#uraci&n y el funcionamiento del Hernel. No entraremos ahora a comentarlo
en detalle por%ue este tema es de inter!s para administradores del sistema. ,o %ue nos interesa
comentar es %ue a%u) la presentaci&n en forma de sistema de ficheros es una simulaci&n y se hace
as) para %ue pueda ser mane3ada e+actamente de la misma forma %ue si realmente estu"iera
contenida en directorioss y ficheros.
Al#unos de estos ficheros son de solo lectura otros son de lectura y escritura y permiten cambiar la
confi#uraci&n del Hernel sin detenerlo. E"identemente todo ello est( confi#urado con los permisos
adecuados para mantener la se#uridad del sistema.
Si miramos dentro del directorio G/procG "eremos %ue hay un mont&n de directorios cuyo nombre es
un n$mero. Estos directorios representan cada uno a un proceso por su pid. Xa hemos estudiado el
proceso init en cap)tulos anteriores as) %ue "amos a poner un e3emplo.
Pruebe a hacer lo si#uiente:
N cat /proc///status
5btendr( la informaci&n de estado m(s importante del proceso init. Adem(s de contribuir a la
cultura #eneral sobre nuestro sistema lo %ue hemos mencionado sobre G/procG nos sir"e para
introducir el si#uiente tema.
Sistema de .ic7eros virtual
En ,inu+ un sistema de ficheros puede corresponderse f)sicamente y l&#icamente con cosas muy
distintas. Acabamos de "er %ue el directorio G/procG aparentemente est( or#ani'ado como si fuera un
sistema de ficheros id!ntico a los %ue residen en disco duro y sin embar#o se trata de al#o
totalmente distinto. *n sistema de ficheros puede residir en memoria en una partici&n de disco
duro en un dispositi"o raid formado por "arios discos duros funcionando en paralelo y con un
sistema de redundancia en dis%uetes en cdroms en un dispositi"o remoto conectado a red etc..
9ambi!n se puede implementar un sistema de ficheros dentro de un fichero. Por e3emplo umsdos es
un sistema de ficheros linu+ implementado dentro de un fichero msdos. 4ealmente es una soluci&n
muy poco eficiente pero pone de relie"e la fle+ibilidad del sistema "irtual de ficheros. *n sistema
de ficheros puede tener un formato interno %ue no siempre es el mismo. ,inu+ puede mane3ar
sistemas de ficheros de otros sistemas operati"os. En resumen lo %ue ,inu+ ofrece con su sistema
ficheros "irtual .JFS2 es un sistema unificado de acceso a toda una "ariedad de recursos muy
distintos. Esto es posible por%ue se definen una serie de funciones para mane3ar un sistema de
ficheros #en!rico. En *ni+ cada sistema de ficheros tiene asociado un sistema plano de ficheros.
,as estructuras pueden ser diferentes para cada tipo de sistema de ficheros pero las funciones %ue
lo mane3an %uedan unificadas por el .JFS2
$structura estandar del sistema de .ic7eros de Linux
E+iste un documento GfsstndG donde se describe una recomendaci&n para estandari'ar la estructura
del sistema de ficheros de ,inu+ para las distintas distribuciones. Nosotros "amos a resumir
bre"emenente la informaci&m m(s importante. *n detalle mayor ser)a necesario si este curso fuera
un curso de administraci&n del sistema.
Este $ltimo cap)tulo no e+plica conceptos nue"os pero ser"ir( para %ue comprenda lo %ue tiene en
su sistema. Puede in"esti#ar todo lo %ue %uiera por su cuenta siempre %ue use un usuario normalito
sin pri"ile#ios. Si al#una "e' se siente perdido solo tiene %ue introducir el comando GcdG para "ol"er
a casita.
Puede haber diferencias importantes en la estructura #eneral del sistema de ficheros entre unas
distribuciones y otras pero en lineas #enerales el aspecto de la disposici&n de los directorios m(s
importantes ser)a m(s o menos el si#uiente_
.
>:: bin
>:: sbin
>:: tmp
>:: boot
>:: de"
>:: etc
>:: home
>:: lib
> >:: modules
> \:: security
>:: home
> >:: ftp
> >:: httpd
> >:: luis
> >:: ms%l
> >:: pili
> \:: sHeleton
>:: root
>:: usr
> >:: bin
> >:: sbin
> >:: [//4L
> > >:: bin
> > >:: include
> > >:: lib
> > \:: man
> >:: local
> > >:: bin
> > >:: doc
> > >:: man
> > >:: lib
> > >:: src
> > \:: tmp
> >:: doc
> >:: include
> >:: info
> \:: src
> \:: linu+
>:: proc
\:: "ar
>:: cache
>:: catman
>:: lib
>:: local
>:: locH
>:: lo#
>:: run
>:: spool
> >:: cron
> >:: lpd
> >:: mail
> \:: m%ueue
\:: tmp
Si obser"a diferencias con la estructura de ficheros de su distribuci&n no debe preocuparse esto es
solo un e3emplo. Comentaremos el cometido de los directorios m(s si#nificati"os.
$l directorio raiz
Para arrancar el sistema debe estar presente lo suficiente como para montar G/usrG y otras partes no:
esenciales del sistema de archi"os. Esto incluye herramientas informaci&n de confi#uraci&n y del
car#ador de arran%ue .boot loader2 y al#una otra informaci&n esencial al arrancar.
Para habilitar la recuperaci&n y/o la reparaci&n del sistema estar( presente en el sistema de archi"os
ra)' a%uellas herramientas %ue un administrador e+perimentado necesitar)a para dia#nosticar y
reconstruir un sistema da=ado.
,os errores del disco %ue corrompen la informaci&n en el sistema de archi"os G/G son un problema
mayor %ue los errores en cual%uier otra partici&n. *n sistema de archi"os G/G .rai'2 pe%ue=o es menos
propenso a corromperse como resultado de un fallo del sistema.
,a principal preocupaci&n %ue se usa para balancear las anteriores consideraciones %ue fa"orecen
el colocar muchas cosas en el sistema de archi"os ra)' es la de mantener G/G .rai'2 tan pe%ueno como
sea ra'onablemente posible.
/
El Directorio 4a)'
bin <inarios de comandos esenciales
boot Archi"os est(ticos de car#ador de arran%ue.boot:loader2
de" Archi"os de dispositi"os
etc Confi#uraci&n del sistema local:m(%uina
home Directorios home de los usuarios
lib ,ibrer)as compartidas
mnt Punto de monta3e de particiones temporales
root Directorio ho#ar del usuario root
sbin <inarios del sistema esenciales
tmp Archi"os temporales
usr Se#unda 3erar%u)a mayor
"ar 6nformaci&n "ariable
La 1erar*u0a Iusr.
G/usrG es la se#unda mayor secci&n del sistema de archi"os. G/usrG es informaci&n compartible de solo
lectura esto si#nifica %ue G/usrG debe ser compartible entre "arias ma%uinas %ue corren ,6N*[ y no
se debe escribir. Cual%uier informaci&n %ue es local a una m(%uina o "ar)a con el tiempo se
almacena en otro lu#ar.
Nin#$n pa%uete #rande .como 9e[ o FN*Emacs2 debe utili'ar un subdirectorio directo ba3o G/usrG
en "e' debe haber un subdirectorio dentro de G/usr/libG .o G/usr/local/libG si fu! instalado
completamente local2 para ese prop&sito con el sistema [ 8indow se hace una e+cepci&n debido a
un considerable precedente y a la pr(ctica ampliamente aceptada.
/usr
Se#undo mayor punto de monta3e .permanente2
[//4L Sistema [ 8indow Jersion // release L
[1RL Sistema [ 8indows Jersion // release K en plataformas [ RL
bin ,a mayor)a de los comandos de usuario
dict ,istas de palabras
doc Documentaci&n miscel(nea
etc Confi#uraci&n del Sistema .todo el site2
#ames due#os y binarios educacionales
include Archi"os header incluidos por pro#ramas C
info Directorio primario del sistema FN* 6nfo
lib ,ibrer)as
local derar%u)a local ."ac)a 3usto despu!s de la instalaci&n principal2
man ;anuales en l)nea
sbin <inarios de Administraci&n del Sistema No:Jitales
share 6nformaci&n independiente de la ar%uitectura
src C&di#o fuente
/usr/local: derar%u)a local
,a 3erar%u)a G/usr/localG est( para ser utili'ada por el administrador del sistema cuando se instale el
software localmente. Necesita estar a sal"o de ser sobreescrito cuando el software del sistema se
actuali'a. Puede ser usado por pro#ramas y por informaci&n %ue son compartibles entre un #rupo de
m(%uinas pero no se encuentran en G/usrG.
/usr/local derar%u)a local.
bin <inarios solo:locales
doc Documentaci&n local
etc <inarios de confi#uraci&n solo:local
#ames due#os instalados localmente
lib ,ibrer)as para /usr/local
info P(#inas de info local
man derar%u)as de p(#inas de manual para /usr/local
sbin Administraci&n del sistema solo:local
scr C&di#o fuente local.
Este directorio debe estar "ac)o al terminar de instalar ,6N*[ por primera "e'. No debe haber
e+cepciones a la re#la e+cepto %ui'( los subdirectorios "ac)os listados. ,a derar%u)a /"ar
El sistema necesita con frecuencia una 'ona de traba3o temporal. Si solo se re%uiere usar un espacio
por un corto periodo de tiempo se puede usar G/tmpG pero muchas "eces la informaci&n con"iene
mane3arla y almacenarla en un lu#ar m(s permanente. El sistema puede sufrir una caida repentina y
el contenido de G/tmpG puede ser borrado durante el arran%ue o depurado re#ularmente mediante
al#$na tarea peri&dica. Por el contrario G/"arG contiene todo tipo de informaci&n al#una de ella puede
ser importante. Por e3emplo informaci&n "ital para el mantenimiento de la #esti&n de pa%uetes de la
distribuci&n o mensa3es pendientes de ser en"iados por correo archi"os y directorios en fila de
e3ecuci&n informaci&n de bit(cora administrati"a y archi"os temporales y transitorios aun%ue se
asume %ue su permanencia ser( mayor %ue G/tmpG
/"ar 6nformaci&n "ariable
catman P(#inas del manual formateadas localmente
lib 6nformaci&n del estado de aplicaciones
local 6nformaci&n "ariable del software de /usr/local
locH Archi"os de blo%ueo
lo# Archi"os de bit(cora
named Archi"os DNS solo red
nis Archi"os base de datos N6S
preser"e Archi"os almacenados despu!s de una falla de e+ o "i
run Archi"os rele"antes a procesos e3ecut(ndose
spool Directorios de traba3os en fila para reali'arse despu!s
tmp Archi"os temporales utili'ado para mantener /tmp pe%ue=o
#est
Puede comprobar sus conocimientos respondiendo el si#uiente test.
Para ello seleccione las opciones %ue se a3usten a la "erdad y lue#o pulse el boton para "er el
resultado de su test.

/ Cuando se crea un directorio se crea tambien un
par de enlaces simb&licos %ue apuntan a G.G y a G..G .
0 Suponiendo %ue Gfich/G Gfich0G y Gfich1G tienen
el mismo "alor de inodo su contenido ser( id!ntico.
1 Suponiendo %ue Gfich/G Gfich0G y Gfich1G tienen
el mismo "alor de inodo y %ue cada uno tiene un
tama=o de /C;bytes al borralos recuperaremos 1C;bytes
A En el caso de los enlaces simb&licos da i#ual cual es
el enlace o fichero ori#inal.
K No se puede establecer enlaces r)#idos entre distintos
sistemas de ficheros.
L Para acceder a un sistema de ficheros hay %ue montarlo en al#$n punto del sistema de ficheros
rai'.
M *n sistema de ficheros siempre reside en disco.
12. !l,unos comandos Htiles
9enemos una e+celente noticia para sus neuronas. En este cap)tulo no introduciremos conceptos
nue"os.
,e proporcionaremos una lista alfab!tica de comandos %ue puedan resultarle de utilidad. Entre estos
comandos no encontrar( comandos internos de la shell ni comandos relacionados con la
pro#ramaci&n o administraci&n de su sistema. Solo incluiremos los comandos de usuario de uso
m(s frecuente. En el tema de comunicaciones solo mencionaremos unos pocos comandos b(sicos.
Nos limitaremos a indicar bre"emente para %ue se usan. En al#unos de ellos pondremos al#$n
e3emplo pero los detalles tales como forma de uso y opciones deben consultarse en el manual. El
ob3eti"o es simplemente %ue cono'ca la e+istencia de los comandos %ue pueden resultarle de mayor
utilidad en este momento.
4ecuerde %ue un n$mero entre par!ntesis a continuaci&n de un comando indica el n$mero de
secci&n en el man.
Dado %ue no "amos a mencionar en este momento nin#$n comando interno del interprete de
comandos bash lo %ue si podemos indicarle es la forma de saber cuales son y como obtener
informaci&n sobre cual%uiera de ellos. <astar( con teclear el comando GhelpG. Si %uiere obtener m(s
informaci&n sobre cual%uiera de ellos teclee Ghelp comandoG.
E3emplo:
N help > less
N help cd
Di3imos %ue no e+plicar)amos nin#$n comando interno pero en realidad GhelpG es un comando
interno y tenemos %ue a=adir %ue admite el uso de meta caracteres.
N help help
N help Valias
No se "a a estudiar en detalle nin#$n comando en este cap)tulo ya %ue se trata de tener una "isi&n de
con3unto. Por ello cuando lle#uemos a un comando %ue mere'ca ser e+plicado con mayor
profundidad nos limitaremos a decir para %ue sir"e y le de3aremos con la miel en los labios con un
oportuno QSe estudiar( m(s adelanteQ.
Seleccin de los comandos externos de usuario m3s Htiles
apropos at at% atrm awH banner batch bc cal cat ch#rp chmod chown cHsum clear
cp cpio cut date df diff du echo e#rep emacs en" e+ e+pr false f#rep file find
fin#er free ftp fuser #awH #rep #'ip head hostname id info ispell Hill Hillall less
ln locate lp% lprm ls mail man mHdir more m" nice nohup passwd paste pr ps
pstree pwd renice reset rm rmdir rsh script sed sleep sort split stty su tail talH
tee telnet test tload top tr true "i w wc whatis whereis who whoami write +ar#s
'cat 'diff '#rep 'less 'more
,os comandos awH cpio e#rep f#rep find #awH #rep sed sort test y "i ser(n tratados en detalle
en cap)tulos posteriores.
apropos./2
Xa comentamos este comando en el cap)tulo dedicado al manual online de uni+. Sir"e para ayudar a
locali'ar un comando %ue no sabemos e+actamente como se escribe. Solo se usa para la b$s%ueda la
descripci&n corta %ue fi#ura al principio de la p(#ina del manual y hay %ue usar palabras completas
y no secuencias de caracteres. Por e3emplo si nuestro manual est( en in#les podr)amos buscar
compresores con:
N apropos compress
at./2
Se utili'a para pro#ramar un comando para %ue se e3ecute en un determinado momento. Este
comando no admite inter"alos de tiempo menores a un minuto. ,a salida deber( estar rediri#ida ya
%ue se e3ecutar( en se#undo t!rmino sin un terminal asociado. *na "e' e3ecutado este comando
de"uel"e un n$mero de tarea y el momento en el cual se acti"ar( el comando. E3emplos:
N echo Gdate U /tmp/salidaG > at now ? / minute
N echo Gdate U /tmp/salidaG > at R:/Kam Saturday
N echo Gdate U /tmp/salidaG > at noon
N echo Gecho feli' a=o nue"o U /de"/consoleG > at //:KB Dec 1/
N echo Gbanner a comer U /de"/consoleG > at /:KKpm
at%./2
Permite "er la cola de tareas pendientes.
N at%
atrm./2
Permite cancelar una tarea pro#ramada y pendiente de e3ecutarse m(s tarde.
N atrm /RR
awH./2
Se trata de un pro#rama %ue implementa un len#ua3e para tratar ficheros de te+to estructurados en
campos y re#istros. Es muy potente y se estudiar( m(s adelante.
banner./2
Para #enerar cabeceras con letras #randes. E3emplo:
N banner hola
W W W
# # # # # # #
W W W W W
W W W W W
# # # # # # #
# # W W
batch./2
Es un comando muy similar al comando at pero no re%uiere la indicar el momento en ese caso se
e3ecutar( en un momento con ba3a car#a. E3emplo:
N echo Gdate U /de"/consoleG > batch
bc./2
Es una calculadora de precisi&n arbitraria. .Es decir con toda la precisi&n %ue uno %uiera2 Se puede
usar interacti"amente o admitir comandos por la entrada est(ndar. Admite e+presiones bastante
comple3as y sentencias condicionales y de repetici&n %ue constituyen un potente len#ua3e de
pro#ramaci&n para esta calculadora. Por e3emplo calcular el n$mero P6 con 1CC cifras decimales.
N echo Qscale@1CC_ AVa./2Q > bc :l
1./A/KB0LK1KRBMB101RAL0LA11R10MBKC0RRA/BM/LB1BB1MK/CKR0CBMABAAKB01CMP
R/LACL0RL0CRBBRL0RC1AR0K1A0//MCLMBR0/ARCRLK/10R01CLLAMCB1RAALCBKKCKRP
001/M0K1KBACR/0RAR///MAKC0RA/C0MC/B1RK0//CKKKBLAAL00BARBKAB1C1R/BLAAP
0RR/CBMKLLKB11AAL/0RAMKLAR011MRLMR1/LK0M/0C/BCB/AKLARKLLB01ALC1ARL/CP
AKA10LLAR0/11B1LCM0LC0AB/A/0M0
cal./2
Calendario E3empos:
N cal
N cal 0CCC
cat./2
,ee uno o m(s ficheros y los saca por la salida est(ndar.
N cat fichero/ fichero0 U fichero/OmasO0
ch#rp./2
Permite cambiar el atributo de #rupo de uno o m(s ficheros. Solo el propietario del fichero o un
usuario pri"ile#iado puede usarlo.
chmod./2
Permite el cambio de los permisos asociados a un fichero. Solo el propietario del fichero o un
usuario pri"ile#iado puede usarlo.
N chmod ?r /tmp/fich
N chmod u?r /tmp/fich
N chmod MMC /tmp/fich
N chmod a:w+a?r /tmp/fich
chown./2
Permite cambiar el propietario actual de un fichero. Solo el propietario del fichero o un usuario
pri"ile#iado puede usarlo. 9ambien permite cambiar el #rupo.
N chown usuario fichero
N chown usuario:#rupo fichero
cHsum./2
5btiene un c&di#o .C4C2 %ue est( dise=ado para detectar "ariaciones en la informaci&n por
problemas en la #rabaci&n o transmisi&n de datos.
N cHsum fichero
clear./2
,impia el contenido de la consola.
cp./2
Copia ficheros. Si se utili'a con un par de ar#umentos tomar( el inicial como ori#en y el final como
destino. Si el se#undo ar#umento es un fichero entonces sobreescribir( su contenido. Si se usa con
m(s de un ar#umento el $ltimo ha de ser obli#atoriamente un directorio.
N cp fich/ fichdest
N cp fich/ dirdest
N cp fich/ fich0 fich1 dirdest
cpio./2
Admite una lista de nombres de ficheros para empa%uetarlos en un solo fichero. Es un comando
muy potente y "ers(til. dunto con tar se usa entre otras cosas para hacer copias de se#uridad. Suele
usarse mucho en combinaci&n con find. ,o estudiaremos m(s adelante.
cut./2
Permite e+traer columnas o campos desde uno o m(s ficheros.
N cut :d: :f/ /etc/passwd
N cut :d: :fL /etc/passwd
date./2
5btiene la fecha. ,as opciones permiten obtener distintos formatos de salida.
N date
dom 3un // /R:/M:/A CES9 0CCC
N date ?QDX/Dm/Dd D9Q
0CCC/CL/// /R:/L:AB
N date ?Ds
BLCMAC0R1
df./2
6nforma de la utili'aci&n de disco en las particiones %ue est(n montadas.
N df :a
diff./2
Sir"e para locali'ar diferencias entre dos ficheros de te+to.
N diff fich/ fich0
du./2
Permite a"eri#uar la ocupaci&n de espacio de todo a%uello %ue cuel#a de un determinado directorio.
Este comando con"iene usarlo de "e' en cuando para locali'ar directorios demasiado car#ados de
informaci&n.
N du :s .
N du .
N du :s V > sort :n
echo./2
Permite sacar mensa3es por salida est(ndar.
e#rep./2
Es una "ariedad del comando #rep %ue permite el uso de e+presiones re#ulares e+tendidas. Sir"en
para buscar cadenas de te+to o secuencias de caracteres en ficheros. Se estudiar(n m(s adelante.
emacs./2
Es un editor multiprop&sito.
en"./2
5btiene la lista de "ariables de entorno y sus "alores.
e+./2
Es un editor interacti"o similar al "i. En ,inu+ e+iste una "ersi&n me3orada llamada el"is.
e+pr./2
Es un e"aluador de e+presiones.
N e+pr P. KK ? 1/ P2 / 1
0R
false./2
Solo tiene sentido usarlo en pro#ramaci&n y retorna un c&di#o de retorno %ue indica error. En otras
palabras no solo no hace nada sino %ue adem(s siempre lo hace mal. Parece absurdo pero tiene su
utilidad. Si no fuera s) no e+istir)a y no es el $nico comando de este tipo.
f#rep./2
Es una "ariedad del comando #rep. Sir"en para buscar cadenas de te+to o secuencias de caracteres
en ficheros. Se estudiar(n m(s adelante.
file./2
Sir"e para a"eri#uar el tipo de fichero pasado como ar#umento. Distin#ue muchos tipos de ficheros.
N file fich
N file dir/ fich0
find./2
Permite locali'ar ficheros dentro de la estructura de directorios. Es tremendamente "ers(til y se
estudiar( m(s adelante.
N find /"ar :name GV.lo#G
fin#er./2
Sir"e para a"eri#uar %uien est( conectado al sistema.
N fin#er
N fin#er :l
free./2
Proporciona estad)sticas de uso de la memoria del sistema.
ftp./2
Comando para intercambiar ficheros entre distintos ordenadores.
fuser./2
6ndica %ue proceso est( usando un fichero o un directorio.
N fuser /
#awH./2
Es la "ersi&n FN* de awH. Se trata de un pro#rama %ue implementa un len#ua3e para tratar ficheros
de te+to estructurados en campos y re#istros. Es muy potente y se estudiar( m(s adelante.
#rep./2
dunto a e#rep f#rep y r#rep sir"en para buscar cadenas de te+to o secuencias de caracteres en
ficheros. Se estudiar(n m(s adelante.
#'ip./2
Compresor des:compresor de #nu. Se puede usar directamente sobre un fichero o por el contrario
puede usarse como filtro. Cuando se usa directamente sobre un fichero se modificar( el nombre del
fichero a=adiendo .#' para indicar %ue est( comprimido o se eliminar( cuando sea descoprimido.
N ls :l / U directorioOrai'
N #'ip directorioOrai'
N #'ip :d directorioOrai'.#'
N #'ip T directorioOrai' U directorioOrai'.#'
N #'ip :d T directorioOrai'.#' U directorioOrai'
head./2
Permite sacar las primeras lineas de un fichero.
hostname./2
5btiene el nombre de la m(%uina.
id./2
De"uel"e informaci&n de identidad de a%uel %ue lo e3ecuta.
info./2
Es un lector de hiperte+to de FN*. ;uchos pro#ramas de FN* incluyen documentaci&n en
formato info. ,os hiperte+tos son te+tos %ue incluyen enlaces sub:men$s y otros elementos %ue
facilitan una lectura no secuencial. Por e3emplo el html es otro formato de hiperte+to.
ispell./2
Es un comprobador orto#r(fico %ue puede ser acoplado a di"ersos editores como por e3emplo al "i.
E+isten diccionarios orto#r(ficos para distintos len#ua3es.
Hill./2
En")a una se=al a un proceso. Se llama Hill por%ue #eneralmente se usa para QmatarQ procesos.
4e%uiere %ue se cono'ca el identificador del proceso P6D.
Hillall./2
Como el anterior pero permite pasar el nombre del comando y Qmatar(Q a todos los procesos %ue
ten#an ese nombre.
less./2
Es un pa#inador %ue puede usarse en sustituci&n del pa#inador more.
N less fichero
N cat fichero > less
ln./2
Crea enlaces r)#idos y enlaces simb&licos %ue son cosas %ue ya hemos estudiado.
locate./2
Permite la locali'aci&n r(pida de ficheros en su sistema de ficheros. Se utili'a una base de datos %ue
debe de ser actuali'ada re#ularmente mediante el comando updatedb. Este $ltimo lo reali'ar( root
cuando lo crea oportuno o me3or aun estar( pro#ramado en el sistema para %ue se e3ecute
peri&dicamente. ,a idea es la si#uiente. Para locali'ar un fichero se suele e3ecutar el comando find
capa' de e+plorar todo el (rbol del sistema de ficheros pero esta operaci&n es muy costosa por%ue
re%uiere abrir y cerrar cada uno de los directorios en los %ue busca informaci&n. El comando
updatedb hace esto mismo pero #uardando el resultado de toda la e+ploraci&n en una base de datos
muy compacta donde se puede buscar con enorme rapide'. ,a des"enta3a es %ue la informaci&n de
b$s%ueda tendr( cierta anti#eedad y %ue no se #uardan todos los atributos del fichero por lo %ue
resulta imposible buscar usando criterios para esos atributos. Por ello usaremos locate para ciertas
b$s%uedas aun%ue al#unas "eces tendremos %ue usar find.
lp%./2
6nforma sobre el estado de la cola de impresi&n. ;uestra las tareas %ue est(n el la cola su
identificador num!rico orden tama=o y propietario.
lprm./2
Permite cancelar tareas de impresi&n usando el identificador num!rico obtenido con lp%..
ls./2
5btiene un listado de los ficheros de un directorio. 9iene una #ran cantidad de opciones.
mail./2
Se usa para en"iar un correo electr&nico. Su mane3o comparado con otros pro#ramas de correo
electr&nico no resulta muy ami#able pero no solo sir"e para usarlo en modo interacti"o. Se le puede
pasar por la entrada est(ndar el contenido de un mensa3e. *na aplicaci&n de esto es %ue podemos
coleccionar mensa3es cortos por e3emplo para suscribirse o de:suscribirse de listas de correo.
N echo unsubscribe l:linu+ > mail ma3ordomofcal"o.teleco.ulp#c.esI
N mail :s unsubscribe debian:user:spanish:re%uestflists.debian.or#aI
man./2
Este fu! el primer comando %ue se estudi& en este curso y no nos cansaremos de recomendarle %ue
se familiarice con el. ,a informaci&n de estas p(#inas del manual no suele resultar muy did(ctica.
En ,inu+ no "ienen apenas e3emplos. A pesar de ello suele traer informaci&n completa de opciones
y formas de uso.
mHdir./2
Crea uno o m(s directorios. ,os permisos depender(n de el "alor actual de GumasHG. Esto ya lo
"imos en cap)tulos anteriores. Para eliminar un directorio se usar( GrmdirG.
N mHdir dir/ dirA/dir</dirC/dir0 dir1
more./2
Es un pa#inador mucho m(s sencillo %ue el sofisticado GlessG.
N ls > more
N more fichero
m"./2
Se utili'a para renombrar directorios y ficheros o para trasladarlos de un lu#ar a otro. Con"iene
usarlo con precauci&n por%ue se presta a obtener resultados diferentes en funci&n de la e+istencia o
no de un fichero o directorio de destino. ;o"er un fichero a otro %ue ya e+iste supondr)a
sobreescribirlo as) %ue un error puede pro"ocar perdida de informaci&n. Cuando se usan m(s de dos
ar#umentos en ,inu+ se obli#a a %ue el $ltimo sea un directorio de destino lo cual pre"iene errores.
N m" fich/ fichC/
N m" dir/ dirC/
N m" fich/ fich0 dir/ dir0 fich1 fichA dirCC/
nice./2
A un usuario normal le permitir( ba3ar la prioridad de los proceso lan'ados con este comando. Solo
root puede usarlo para aumentar la prioridad. *na "e' %ue un comando ha sido lan'ado se puede
modificar su prioridad con renice.
N nice comando
nohup./2
,os comandos lan'ados con nohup no terminan al abandonar la sesi&n. Se puede usar combinado
con la e3ecuci&n en bacH#round.
N nohup Fenera6nforme;ensual U informeC/:CK:0CCC.out `
N W lo#out
N e+it
passwd./2
Permite cambiar nuestra cla"e de acceso al sistema. Con"iene no ol"idar la cla"e. Feneralmente
para e"itar ol"idos los usuarios eli#en cla"es demasiado sencillas. Dependiendo del ni"el de
se#uridad confi#urado en el sistema este podr)a recha'ar cla"es demasiado sencillas. No con"iene
usar cla"es cortas ni palabras %ue puedan ser locali'adas en un diccionario ni fechas o nombres
relacionadas con datos de alto si#nificado personal. Palabras escritas al re"!s tampoco son se#uras.
6ntercalar al#$n car(cter de puntuaci&n al#una may$scula o al#$n d)#ito suele ser una buena
pr(ctica. fo9o_0/ pon.K.mar Mli:b4os <ueno si el ordenador es de uso personal y solo tienen acceso
personas de confian'a tampoco hay %ue ser demasiado paranoico.
paste./2
Se usa para combinar columnas de distintos ficheros en uno solo. Jiene a ser lo contrario del
comando cut.
N who > paste : :
pr./2
Permite pa#inar un te+to incorporando cabeceras.
N ls /V/V > pr :h e3emplo:pr :o K :l 1K > less
ps./2
Permite obtener informaci&n de los procesos en e3ecuci&n. Dependiendo lo %ue nos interese e+isten
di"ersas opciones para una #ran "ariedad de formatos y de selecci&n de la informaci&n de salida.
pstree./2
;uestra la 3erar%u)a entre procesos mostrando las relaciones de parentesco entre ellos.
N pstree
N pstree :p
,a opci&n :p es muy $til para a"eri#uar el pid de un proceso.
pwd./2
Este comando retorna el lu#ar donde nos encontramos.
N pwd
Se puede usar por e3emplo para #uardar el lu#ar donde estamos ahora con ob3eto de retornar ala
mismo lu#ar m(s tarde.
N A-*6@\pwd\
N cd /tmp
N ls
N cd NA-*6
renice./2
Es parecido a nice pero act$a sobre un proceso %ue ya fue arrancado con anterioridad. Por e3emplo
hemos lan'ado un proceso %ue consume muchos recursos y lle"a mucho tiempo. En lu#ar de pararlo
podemos ba3arle la prioridad para %ue #aste muchos recursos. .Cuando decimos recursos nos
referimos a uso de memoria uso de CP* etc2 *n super usuario como root puede incrementar la
prioridad usando un n$mero ne#ati"o. *n usuario normal solo podr( decrementar la prioridad
usando un n$mero positi"o. En cual%uier caso se re%uiere conocer el pid del proceso %ue deseamos
modificar y solo podremos hacerlo si es un proceso nuestro. Por e3emplo "amos a suponer %ue el
P6D de ese proceso %ue deseamos ba3ar de prioridad es el MMR.
N renice ?/K MMR
reset./2
Puede ocurrir %ue el terminal %uede des:confi#urado por al#una ra'&n. Esto se debe a %ue un
terminal interpreta comandos en forma de secuencias de caracteres. Esto permite mostrar colores
mane3ar el cursor y una serie de cosas m(s. Cuando accidentalmente en"iamos al terminal un
fichero binario %ue contiene caracteres de todo tipo en cual%uier orden es bastante normal %ue el
terminal %uede inutili'able. ;uchas "eces se puede recuperar introduciendo el comando reset.
rm./2
Xa hemos e+plicado y usado este comando. Sir"e para borrar ficheros.
rmdir./2
Xa hemos e+plicado y usado este comando. Sir"e para eliminar directorios %ue deben de estar
"ac)os.
rsh./2
Permite siempre %ue ten#amos permiso e3ecutar un comando en un ordenador distinto. Se puede
usar para transferir #randes cantidades de informaci&n a tra"!s de la red. Por e3emplo ima#inemos
%ue %ueremos sacar una copia de se#uridad #uardando la informaci&n en una unidad de cinta %ue se
encuentra en un ordenador distinto. En ese caso se lan'an dos comandos simult(neos
comunic(ndolos con un pipe. *n comando se e3ecutar( en el ordenador remoto con rsh y el otro se
e3ecuta en local. Ambos procesos %uedan comunicados por entrada salida pero eso implica %ue esa
comunicaci&n "ia3ar( a tra"!s de la red.
N # Para salvar
$ tar cf - . | rsh remotehost dd of=/dev/tape
$ W Para recuperar
N rsh remotehost dd if@/de"/tape > tar +f :
,a forma de combinar comandos en uni+ conectando entrada salida permite hacer muchas "eces
cosas sorprendentes como en este caso. E+isten un comando similar %ue hace lo mismo pero la
informaci&n "ia3a encriptada a tra"!s de la red. Se trata de GsshG.
script./2
Este es un comando realmente curioso. Su utilidad principal es #rabar una sesi&n. ,an'a una
subshell %ue se e3ecutara en un pseudo:terminal. Este palabro no deseamos e+plicarlo ahora pero
mientras estamos en esa subshell todos los caracteres recibidos por el terminal son #rabados en un
fichero. Para terminar se teclea e+it. Es $til para memori'ar sesiones de traba3o.
sed./2
Este es un editor de flu3o. Dicho de otra forma es un editor %ue est( pensado para usarlo como flu3o.
De esta forma se puede usar como una poderosa herramienta para transformar te+to. Se estudiar(
m(s adelante.
sleep./2
Sir"e para esperar sin consumir recursos. El proceso %ueda dormido durante el n$mero de se#undos
indicado.
N echo hola_ sleep K _ echo %ue tal
sort./2
Este comando permite ordenar lineas de te+to. Se puede usar como filtro. Se estudiar( m(s adelante.
split./2
Este comando sir"e para partir en tro'os m(s pe%ue=os un fichero #rande. Para "ol"er a obtener el
fichero ori#inal bastar( con usar el comando GcatG
N split ::bytes@K0m fichero#rande parte
Este comando trocea fichero#rande en tro'os de K0;bytes %ue se #uardan en ficheros %ue empie'an
con el prefi3o GparteG se#uido de una numeraci&n secuencial.
stty./2
Sir"e para comprobar el estado actual del terminal y para cambiar la confi#uraci&n del mismo. Se
puede cambiar el si#nificado de al#unos caracteres de control establecer el n$mero de filas y
columnas del terminal la "elocidad de transmisi&n etc. Para comprobar el estado actual teclee lo
si#uiente.
N stty :a
su./2
Permite cambiar de usuario. ,o %ue se hace es lan'ar una subshell. 7ay dos formas de hacerlo. Gsu
nue"ousuarioG y Gsu : nue"ousuarioG. Si no usamos la se#unda forma solo cambiar( el usuario
efecti"o pero el entorno del proceso se mantiene. Si por el contrario se usa la se#unda forma se
e3ecutar(n los scripts de inicio de sesi&n para el nue"o usuario y tendremos una sesi&n id!ntica a la
obtenida con la entrada con lo#in para ese nue"o usuario. Para terminar esa sesi&n bastar( hacer
e+it.
N su nue"ousuario
N su : nue"ousuario
Para un usuario normal se solicitar( la password del nue"o usuario.
tail./2
As) como head ser")a para obtener las primeras l)neas de un fichero tail sir"e para obtener las
$ltimas l)neas de un fichero
N tail fichero
9ail tiene una opci&n muy $til para mostrar %ue es lo %ue est( pasando en ficheros %ue se est(n
#enerando o %ue crecen continuamente.
N tail :f fichero
Este comando no termina nunca y muestra el final del fichero %uedando a la espera de mostrar el
resto de mismo a medida %ue se #enere. Para terminar hay %ue matarlo con Ctrl:C.
talH./2
Permite abrir una sesi&n de charla interacti"a con otro usuario.
tee./2
Este comando se utili'a para obtener una bifurcaci&n en un flu3o de entrada salida. Act$a como una
deri"aci&n en forma de G9G.
N ll > tee todos:fich > tail U ultimos:fich
telnet./2
Permite abrir una sesi&n de traba3o en otra m(%uina.
N telnet localhost
Con esto podemos probar telnet conect(ndonos con nuestra propia m(%uina. A continuaci&n saldr(
la solicitud de lo#in.
test./2
Se usa para e"aluar e+presiones. Se usa mucho en la pro#ramaci&n shell:script. ,o %ue se usa es su
c&di#o de retorno. 9iene dos formas de uso Gtest e+presi&nG o GY e+presi&n ZG
N test Q0Q @ Q1Q
N echo NS
N test Q0Q @ Q0Q
N echo NS
N A@11K
N <@11K
N Y QNAQ @ QN<Q Z
N echo NS
Se estudiar( m(s adelante.
tload./2
Con"ierte el terminal en un monitor semi:#r(fico %ue indicar( el ni"el de car#a del sistema. Se
interrumpe con Ctrl:C. Si el sistema no est( traba3ando demasiado no "er( nada demasiado
interesante.
N ls /V/V U /de"/null 0U`/ `
N tload :d 0
top./2
;uestra informaci&n de cabecera con estad)sticas de uso de recursos. .n$mero de procesos y en %ue
estado est(n consumo de CP* de memoria y de swap2. Adem(s muestra informaci&n muy
completa sobre los procesos %ue est(n consumiendo m(s recursos. Si el ordenador "a muy lento por
e+ceso de traba3o podemos hacernos una idea muy buena de los moti"os usando este comando. En
realidad este comando es muy $til para el administrador del sistema pero los usuarios %ue
comparten el uso de un sistema con otros usuarios tambi!n tienen %ue usar los recursos del sistema
de forma inteli#ente ba3ando la prioridad de tareas poco ur#entes y %ue consuman mucho. En
especial no resulta buena idea lan'ar muchas tareas pesadas de forma simultanea aun%ue sean
ur#entes por%ue se per3udica el rendimiento #lobal del sistema %ue #astar( e+cesi"o tiempo en
labores improducti"as de #esti&n de procesos.
N top
Para salir hay %ue pulsar G%G.
tr./2
Se utili'a para sustituir car(cter.
N W Pasar a may$sculas
N tr GYa:'ZG GYA:]ZG T fichero U nue"ofichero
N W Eliminar el car(cter G:G
N tr :d : T fichero U nue"ofichero
true./2
Este comando es el contrario del comando GfalseG. Solo tiene sentido usarlo en pro#ramaci&n y
retorna un c&di#o de retorno %ue indica !+ito. En otras palabras no hace pero al menos lo hace
correctamente.
"i./2
Este es un editor muy potente y presente en todos los sistemas de tipo *ni+. Se estudiar( m(s
adelante.
w./2
;uestra informaci&n de usuarios actualmente conectados mostrando momento de inicio de sesi&n y
el consumo de CP* %ue se ha reali'ado.
N w
wc./2
Este es un comando %ue se usa bastante. Sir"e para contar caracteres palabras y lineas en un fichero
o en un flu3o de entrada salida.
N wc fichero
N cat fichero > wc
whatis./2
Sir"e para mostrar la bre"e descripci&n de un comando %ue fi#ura en las p(#inas del manual
N whatis ls
N whatis whatis
who./2
Saca la informaci&n de %uienes est(n conectados al sistema.
N who
whoami./2
Para a"eri#uar %uien es usted en ese momento. En un pro#rama puede ser interesante comprobar
%uien lo est( e3ecutando.
N whoami
whereis./2
Sir"e para locali'ar un comando en el sistema siempre %ue este est! locali'ado en NPA97
N whereis ls
N whereis whereis
write./2
Siempre %ue se ten#a permiso permite en"iar mensa3es a otro usuario.
N write root
+ar#s./2
Sir"e para pasar ar#umentos a un comando mediante entrada salida.
N echo G:lG > +ar#s ls
Cosas como estas a=aden bastante potencia al len#ua3e shell:script.
'...
7ay una serie de comandos. G'cat 'more '#rep 'less 'diffG %ue permiten traba3ar directamente con
ficheros comprimidos con #'ip en la misma forma %ue lo har)amos directamente con Gcat more
#rep less y diffG respecti"amente.
N 'less documento.t+t.#'
1-. $xpresiones re,ulares
Introduccin
Jamos a e+plicar las e+presiones re#ulares por%ue se utili'an a menudo desde una #ran "ariedad de
aplicaciones en los S5 tipo *ni+ como ,inu+. Permiten reconocer una serie de cadenas de
caracteres %ue obedecen a cierto patr&n %ue llamamos e+presi&n re#ular. Por e3emplo si deseamos
buscar lineas %ue conten#a las palabras GholaG o Gadi&sG en los ficheros del directorio actual haremos:
N e#rep Ghola>adi&sG V
No todos los comandos usan de forma id!ntica las e+presiones re#ulares. Al#unos de los comandos
%ue usan e+presiones re#ulares son G#repG Ge#repG GsedG G"iG y Gle+G. Este $ltimo en linu+ se llama
Gfle+G y es un anali'ador sint(ctico muy potente pero no lo e+plicaremos por%ue para usarlo hay %ue
saber len#ua3e GCG. Actualmente al#unos len#ua3es modernos como el GperlG incluyen capacidad de
mane3ar e+presiones re#ulares lo cual les da una #ran potencia y para len#ua3es m(s anti#uos como
el GCG e+isten librer)as para poder usar e+presiones re#ulares. En resumen las e+presiones re#ulares
est(n sinedo incorporadas en distintos sitios y ya no est(n limitadas a su uso en S5 tipo *ni+. Cada
comando o aplicaci&n implementa la e+presiones re#ulares a su manera aun%ue en #eneral son todas
bastantes parecidas. Por e3emplo G#repG permite usar e+presiones re#ulares sencillas mientras %ue
Ge#repG es capa' de usar e+presiones re#ulares m(s comple3as. 5tros comandos adaptan el uso de
e+presiones a sus particulares necesidades y por ello si bien se puede hablar en #eneral de ellas hay
%ue tener en cuenta las peculiaridades de cada caso %ue deber(n ser consultadas en las pa#inas del
manual de cada comando. ,as e+presiones re#ulares "ienen a ser una especie de len#ua3e y cada
comando usa su propio dialecto. En realidad las diferencias entre los distintos dialectos suelen ser
muy pocas. Por e3emplo si un comando usa los par!ntesis y adem(s admite el uso de e+presiones
re#ulares e+tendidas se establecer( una forma de distin#uir si los par!ntesis deben ser interpretados
como patr&n de la e+presi&n re#ular o como otra cosa. Para ello se suele usar los par!ntesis
precedidos del car(cter escape GPG. Jamos a tomar a Ge#repG y GsedG como comandos para aprender
e+presiones re#ulares por%ue este curso tiene un enfo%ue pr(ctico. *saremos el comando Ge#repG
con distintos patrones y "eremos cuando cumple y cuando no cumple y de esa forma se entender(
perfectamente.
Operadores usados en expresiones re,ulares.
V El elemento precedente debe aparecer C o m(s "eces.
? El elemento precedente debe aparecer / o m(s "eces.
. *n car(cter cual%uiera e+cepto salto de linea.
S 5perador unario. El elemento precedente es opcional
> 5 uno u otro.
^ Comien'o de linea
N Fin de linea
Y...Z Con3unto de caracteres admitidos.
Y^...Z Con3unto de caracteres no admitidos.
5perador de ran#o
....2 A#rupaci&n.
P Escape
Pn 4epresentaci&n del car(cter fin de linea.
Pt 4epresentaci&n del car(cter de tabulaci&n.
Esta lista no es completa pero con esto es suficiente para hacer casi todo lo %ue normalmente se
hace con e+presiones re#ulares.
E3emplos para cada operador con Ge#repG
Empe'aremos usando un e3emplo lo m(s sencillo posible para ilustrar cada uno de estos operadores
E3emplo para el operador GVG con el patr&n GabVcG
Este patr&n locali'ar( las cadenas de caracteres %ue
empiecen por GaG %ue contin$en con C o m(s GbG y
%ue si#an con una GcG.
,a A falla por%ue la GaG y la GcG no "an se#uidas ni
e+isten caracteres GbG entre ambas. ,a K falla por no
tener una sola GcG. y la L tiene los caracteres adecuados
pero no en el orden correcto.

N e#rep GabVcG TTF6N
T / ac
T 0 aac
T 1 abbbc
T A a+c
T K aaab
T L cba
T M aacaa
T F6N
/ ac
0 aac
1 abbbc
M aacaa
E3emplo para el operador G?G con el patr&n Gab?cG
Este patr&n locali'ar( las cadenas de caracteres %ue
empiecen por GaG %ue contin$en con / o m(s GbG y
%ue si#an con una GcG.
Solo la l)nea 1 cumple la e+presi&n re#ular.

N e#rep GabVcG TTF6N
T / ac
T 0 aac
T 1 abbbc
T A a+c
T K aaab
T L cba
T M aacaa
T F6N
1 abbbc
E3emplo para el operador G.G con el patr&n Ga..cG
Este patr&n locali'ar( las cadenas de caracteres %ue
empiecen por GaG %ue contin$en con dos caracteres
cuales%uiera distintos de salto de l)nea y %ue si#an
con una GcG.
N e#rep Ga..cG TTF6N
T aCCc
T a++c++
T aacc
T abc
T ac
T a+++c
T F6N
aCCc
a++c++
aacc
E3emplo para el operador GSG con el patr&n GabScdG
Este patr&n locali'ar( las cadenas de caracteres %ue
empiecen por GaG y %ue opcionalmente contin$en con
una GbG y %ue contin$e con los caracteres GcdG.

N e#rep GabScdG TTF6N
T abcd
T acd
T cd
T abbcd
T F6N
abcd
acd
E3emplo para el operador G>G con el patr&n Gab>cdG
Este patr&n locali'ar( las cadenas de caracteres %ue
conten#an GabG GcdG o G/01G

N e#rep Gab>cd>/01G TTF6N
T +++ab'''
T +++cdHHH
T badc
T dbca
T +/01'
T F6N
+++ab'''
+++cdHHH
+/01'
E3emplo para el operador G^G con el patr&n G^abcG
Este patr&n locali'ar( las lineas %ue empiecen
por GabcG.
N e#rep G^abcG TTF6N
T abcdef#h
T abc ++
T CCabc
T F6N
abcdef#h
abc ++
E3emplo para el operador GNG con el patr&n GabcNG
Este patr&n locali'ar( las lineas %ue terminen
por GabcG.
N e#rep GabcNG TTF6N
T abcd
T CCCabc
T ++abc+
T abc
T F6N
CCCabc
abc
E3emplo para el operador GY ZG con el patr&n GCYabcZCG
Este patr&n locali'ar( las cadenas %ue ten#an un GCG
se#uido de un car(cter %ue puede ser GaG GbG o GcG y
se#uido de otro GCG.
N e#rep GCYabcZCG TTF6N
T CabcC
T CaC
T CbC
T CcC
T +a+
T F6N
CaC
CbC
CcC
E3emplo para el operador G^G .ne#aci&n2 dentro de GY ZG
con el patr&n GCY^abcZCG
Este patr&n locali'ar( las cadenas %ue ten#an un GCG
se#uido de un car(cter %ue no podr( ser ni GaG ni GbG
ni GcG y se#uido de otro GCG.
N e#rep GCY^abcZCG TTF6N
T CabcC
T CaC
T CCC
T +C+C+
T CcC
T F6N
CCC
+C+C+
E3emplo para el operador G:G .ran#o2 dentro de GY ZG
con el patr&n GCYa:'ZCG
Este patr&n locali'ar( las cadenas %ue ten#an un GCG
se#uido de una letra min$scula y se#uido de otro GCG.

N e#rep GCYa:'ZCG TTF6N
T CaC
T CCC
T C]C
T +C+C+
T F6N
CaC
+C+C+
E3emplo para el operador G.2G .a#rupaci&n2 con el
patr&n GC.abc2SCG
Este patr&n locali'ar( las cadenas %ue ten#an un GCG
se#uido opcionalmente de la secuencia abc y se#uido
de otro GCG.
N e#rep GC.abc2SCG TTF6N
T hhCChh
T sCabcCs
T sCabCs
T Cabc
T F6N
hhCChh
sCabcCs
E3emplo para el operador GPG .escape2 con el
patr&n GCP.abcP2SCG
Este patr&n locali'ar( las cadenas %ue ten#an un GCG
se#uido opcionalmente de G2G y se#uido de otro GCG.

N e#rep GCP.abcP2SCG TTF6N
T C.abc2C++
T C.abcC++
T hhCChh
T F6N
C.abc2C++
C.abcC++
!mpliando conocimientos sobre <e,rep<
7emos aprendido cosas de e#rep para ilustrar el uso de las e+presiones re#ulares pero tanto #rep
como e#rep permiten el uso de ciertas opciones %ue a$n no hemos comentado y %ue no "amos a
ilustrar con e3emplos por%ue no est(n relacionadas con las e+presiones re#ulares. Solo "amos a
se=alar las opciones m(s $tiles para %ue las cono'ca.
i <usca i#norando diferencias entre may$sculas y min$sculas.
w Para for'ar %ue la cadena reconocida sea una palabra completa.
l No muestra el contenido de la linea encontrada pero si %ue muestra el fichero %ue contiene la
cadena buscada. Esto es $til cuando deseamos buscar entre muchos ficheros de los cuales al#unos
son binarios por%ue la muestra del contenido de un fichero binario puede desconfi#urar el terminal.
n ;uestra el n$mero de l)nea dentro del fichero para ayudar a su locali'aci&n.
" En lu#ar de sacar la lineas %ue cumplen la b$s%ueda sacar( las %ue no cumplen.
Para un mayor detalle consultar las p(#inas del manual. Se trata de un comando de #ran utilidad y le
recomendamos %ue practi%ue por su cuenta con el. E+)sten "arias modalidades de este comando.
#rep Comando b(sico.
e#rep Jersi&n #rep para uso de e+presiones re#ulares e+tendidas.
f#rep Jersi&n #rep interpreta los patrones no como e+presiones re#ulares sino como cadenas de
caracteres fi3as.
r#rep Permite buscar recursi"amente en "arios ficheros recorriendo un arbol de directorios.
*so de e+presiones re#ulares en GsedG
Ahora "eremos unos e3emplos con GsedG. Este comando es capa' de editar un flu3o o chorro de
caracteres lo cual es de enorme utilidad dado %ue muchos comandos se comunican a tra"!s de
entrada salida mediante chorros de caracteres. No podemos "er todas las posibilidades de GsedG
por%ue lo %ue nos interesa es su uso con e+presiones re#ulares. Para ello usaremos un nue"o
operador G`G %ue en la parte de substituci&n de GsedG indica la parte %ue coincide con la e+presi&n
re#ular.
Para usar GsedG se pone como primer ar#umento a continuaci&n del comando la orden adecuada.
5pcionalmente se puede poner un se#undo par(metro %ue indicar)a el nombre de un fichero. De no
e+istir ese se#undo par(metro esperar( la entrada por la entrada est(ndar.
Se intentan reconocer las secuencias m(s lar#as posibles ^ y N no consumen car(cter GPnG si.
Empe'amos con una sustituci&n sencillita.
N echo Qabc/01AdefQ > sed Qs/YC:BZYC:BZV/N*;E45/Q
abcN*;E45def
Ahora usamos el operador G`G. 5bser"e como se sustituye por el patr&n reconocido.
N echo Qabc/01AdefQ > sed Qs/YC:BZYC:BZV/T`U/Q
abcT/01AUdef
Despu!s eliminamos la secuencia num!rica.
N echo Qabc/01AdefQ > sed Qs/YC:BZYC:BZV"
abcdef
Vamos a comprobar que en las expresiones regulares se intenta siempre reconocer la secuencia
ms larga posible.
$ echo "000x111x222x333" | sed "sx.!x"#$"
000"x111x222x$333
Vamos ahora a traba%ar sobre un fichero. &omo siempre recordamos que traba%e con un usuario
sin pri'ilegios ( dentro de tmp. )a sabe como hacerlo as* que cambie ahora a tmp antes de
continuar. +ara suprimir del fichero la palabra ,-ola, en las lineas de la 3 a la ..
/ &reamos un ficherito de prueba
$ cat ""012 $ prueba3sed.txt
" -ola este es un fichero con datos de prueba
" -ola otra 'e4.
" -ola otra 'e4.
" -ola otra 'e4.
" -ola otra 'e4 ( otra ( otra ( otra ( otra ( otra.
" 0in de los datos de prueba
" 012
$ sed "35.s-olaQ prueba:sed.t+t
7ola este es un fichero con datos de prueba
7ola otra "e'.
otra "e'.
otra "e'.
7ola otra "e' y otra y otra y otra y otra y otra.
Fin de los datos de prueba
El fichero no ha cambiado. El resultado sale por salida est(ndar. Ahora "eamos %ue pasa si
intentamos sustituir la palabra GotraG por la palabra GunaG en todo el fichero.
N sed Qs/otra/una/Q prueba:sed.t+t
7ola este es un fichero con datos de prueba
7ola una "e'.
7ola una "e'.
7ola una "e'.
7ola una "e' y otra y otra y otra y otra y otra.
Fin de los datos de prueba
Jemos %ue solo se ha cambiado la primera ocurrencia de cada l)nea. Para obtener el resultado
deseado tendr)amos %ue usar la # al final.
N sed Qs/otra/una/#Q prueba:sed.t+t
7ola este es un fichero con datos de prueba
7ola una "e'.
7ola una "e'.
7ola una "e'.
7ola una "e' y una y una y una y una y una.
Fin de los datos de prueba
!mpliando conocimientos sobre <sed<
7emos aprendido cosas de sed para ilustrar el uso de las e+presiones re#ulares pero sed tiene
muchas m(s posibilidades %ue a$n no hemos comentado. Comentaremos solo al#o m(s pero sin
e+tendernos demasiado. En sed se pueden especificar "arias instrucciones separando con G_G cada
una de ellas o usando la opci&n :e antes de cada instrucci&n. 9ambi!n podemos apro"echar el
se#undo introductor de la shell.
N sed Qs/otra/"e'/# _ s/"e'/pe'/#Q prueba:sed.t+t
7ola este es un fichero con datos de prueba
7ola pe' pe'.
7ola pe' pe'.
7ola pe' pe'.
7ola pe' pe' y pe' y pe' y pe' y pe' y pe'.
Fin de los datos de prueba
W 6d!ntico resultado podr)amos haber conse#uido usando
N sed :e Qs/otra/"e'/#Q :e Qs/"e'/pe'/#Q prueba:sed.t+t
W *na tercera forma para conse#uir lo mismo
N sed Q
T s/otra/"e'/#
T s/"e'/pe'/#
T Q prueba:sed.t+t
9ambi!n podemos obtener el mismo resultado usando la opci&n :f y un fichero de instrucciones
para GsedG.
N cat TTF6N U prueba:sed.sed
T s/otra/"e'/#
T s/"e'/pe'/#
F6N
N sed :f prueba:sed.sed prueba:sed.t+t
E+isten posibilidades m(s a"an'adas para usar GsedG pero con lo %ue hemos mencionado se pueden
hacer muchas cosas.
Podemos eliminar los blancos a principio y al final de linea as) como sustituir mas de un blanco
se#uido por un solo blanco.
N cat TTF6N U trim.sed
T s/^ Vg
" s !$#
T s/ V/ /#
T F6N
Si necesita hacer al#una transformaci&n y no encuentra la forma facil de hacer con sed piense %ue
%ui'(s necesite usar "arias transformaciones en cadena.
Wg/bin/bash
echo _ echo
W Filtraremos la salida del comando cal para %ue el d)a de
W hoy resalte enmarcada entre corchetes.
W
W Primero obtenemos el d)a del m!s
D6A;ES@\date G?DdG\
W Asi no "ale. 7ay %ue eliminar los posibles ceros a la
W i'%uierda obtenidos W en la "ariable D6A;ES.
W *samos para ello printf./2
D6A;ES@\printf Dd ND6A;ES\
W 4esaltar el d)a del m!s correspondiente al d)a de hoy
W Si es el $ltimo d)a del mes .patr&n G Y01ZYC:BZNG2 a=adiremos
W un blanco al final y as) usaremos siempre como patr&n de
W sustituci&n el d)a m!s .ND6A;ES2 entre dos caracteres blancos
W sin %ue eso pro"o%ue errores en el $ltimo di( del mes.
cal > head :n /
cal > tail :n M > sed Gs/ / ?/#G > sed Gs/^ /?/#G > P
sed Gs/ / /#G > sed Gs/?/ /#G > sed Gs/N/` /G > P
sed Gs/^/ /G > sed Qs/ ND6A;ES /PYNaD6A;ESbPZ/Q
W 9ra'as
cal > tee tra'a./ > P
tail :n M > tee tra'a.0 > P
sed Gs/ / ?/#G > tee tra'a.1 > P
sed Gs/^ /?/#G > tee tra'a.A > P
sed Gs/ / /#G > tee tra'a.K > P
sed Gs/?/ /#G > tee tra'a.L > P
sed Gs/N/` /G > tee tra'a.M > P
sed Gs/^/ /G > tee tra'a.R > P
sed Qs/ ND6A;ES /PYNaD6A;ESbPZ/Q U tra'a.B
,as $ltimas l)neas las hemos a=adido simplemente para anali'ar paso a paso como se "a
transformando la salida ori#inal del comando cal del cual en primer lu#ar ya hemos separado la
primera l)nea. ,as distintas etapas %uedan re#istradas en tra'a./ a tra'a.R.
tra'a./ contiene la salida del comando cal.
April 0CC0
S ; 9u 8 9h F S
/ 0 1 A K L
M R B /C // /0 /1
/A /K /L /M /R /B 0C
0/ 00 01 0A 0K 0L 0M
0R 0B 1C
En tra'a.0 se ha eliminado la primera l)nea.
S ; 9u 8 9h F S
/ 0 1 A K L
M R B /C // /0 /1
/A /K /L /M /R /B 0C
0/ 00 01 0A 0K 0L 0M
0R 0B 1C
En tra'a.1 se ha sustituido toda secuencia de
dos blancos por G ?G
S ?; 9u ?8 9h ?F ?S
? ?/ ?0 ?1 ?A ?K ?L
M ?R ?B /C // /0 /1
/A /K /L /M /R /B 0C
0/ 00 01 0A 0K 0L 0M
0R 0B 1C
En tra'a.A sustituimos los blancos a comien'o de
l)nea por G?G
?S ?; 9u ?8 9h ?F ?S
?? ?/ ?0 ?1 ?A ?K ?L
?M ?R ?B /C // /0 /1
/A /K /L /M /R /B 0C
0/ 00 01 0A 0K 0L 0M
0R 0B 1C
Fracias a los pasos anteriores ya tenemos una
estructura de l)neas formada por dos caracteres
distintos de blanco separadas por un blanco y
precisamente este blanco en tra'a.K lo sustituimos
por dos blanco para dar ensanchar toda la salida.
?S ?; 9u ?8 9h ?F ?S
?? ?/ ?0 ?1 ?A ?K ?L
?M ?R ?B /C // /0 /1
/A /K /L /M /R /B 0C
0/ 00 01 0A 0K 0L 0M
0R 0B 1C
Ahora ya no son $tiles los G?G y los sustituimos
por blancos. En tra'a.L ya tenemos la salida
ensanchada.
S ; 9u 8 9h F S
/ 0 1 A K L
M R B /C // /0 /1
/A /K /L /M /R /B 0C
0/ 00 01 0A 0K 0L 0M
0R 0B 1C
En tra'a.M no se aprecia la diferencia pero
si %ue e+iste. cal termina las l)neas
inmmediatamente despues del n$mero y no hay
ra'&n para %ue lo ha#a de otra manera pero a
nosotros nos con"iene %ue absolutamente todos
los n$meros ten#an un blanco a la i'%uierda
y otro a la derecha para %ue a la hora de
enmarcar el n$mero solo ten#amos %ue sustituir
blancos y no se desalineen las columnas. Por
ello aun%ue no se aprecie en tra'a.M hemos
a=adido un blanco al final de las l)neas.
S ; 9u 8 9h F S
/ 0 1 A K L
M R B /C // /0 /1
/A /K /L /M /R /B 0C
0/ 00 01 0A 0K 0L 0M
0R 0B 1C
Ahora en tra'a.R se "e como hemos a=adido un
blanco a la i'%uierda.
S ; 9u 8 9h F S
/ 0 1 A K L
M R B /C // /0 /1
/A /K /L /M /R /B 0C
0/ 00 01 0A 0K 0L 0M
0R 0B 1C
Por $ltimo bastar( sustituir el d)a del m!s
entre blancos por el d)a de m!s entre corchetes.
S ; 9u 8 9h F S
/ 0 1 A K L
M R B /C // /0 /1
/A /K /L /M /R /B Y0CZ
0/ 00 01 0A 0K 0L 0M
0R 0B 1C
6ndependientemente de %ue a usted se le ocurra otra soluci&n me3or se trataba de practicar con sed
y con siete seds encadenados pensamos %ue ya habr( saciado su sed de sed./2.
De todas formas si lo %uiere m(s bonito y cortito pruebe esto otro.
ESC@\echo :e QPC11Q\
cal > sed Qs/N/` /Q > sed Qs/ ND6A;ES / NESCY/mNaD6A;ESbNESCYCm /Q
Xa nos salimos del tema pero si esto ha despertado su curiosidad mire consoleOcodes.A2
#est
Puede comprobar sus conocimientos respondiendo el si#uiente test.
Para ello seleccione las opciones %ue se a3usten a la "erdad y lue#o pulse el boton para "er el
resultado de su test.

/ YC:Ba:'A:]ZYa:'A:]ZV 4econocer)a los patrones GC9A1MG G0KFE<G y G,*6SG
0 PYY/:BZVPZ 4econocer)a los patrones GYC1AZG GY100ZG y GYZG
1 YA:]ZY^A:]C:BZ 4econocer)a los patrones GA+G G<'G GFpG y G[+G
A YFfZY6iZYNnZ 4econocer)a la palabra GfinG en may$sculas en min$sculas o con me'cla de ambas.
K W.V 4econocer)a comentario en shell:script
L ^YC:BZ 4econocer)a las lineas %ue empiecen por al#o distinto de un n$mero
M A./0>0/2S< 4econecer)a las secuencias GA/0<G GA<G o GA0/<G
R /2N 4econocer)a las l)neas terminadas en G2G
B YC:BZYC:BZV E%ui"ale a YC:BZ?
/C :S..YC:BZ?2>.YC:BZVP.YC:BZ?2
.YeEZY:?ZSYC:BZ?2S2 4econocer)a un n$mero decimal.
// CYC:MZV 4econocer)a un n$mero 5ctal .Solo d)#itos entre C y M2
12. $l editor vi %rimera parte&
Introduccin
En primer lu#ar "amos a dedicar bastante esfuer'o a e+plicar por%ue aprender G"iG. -ui'(s pens& %ue
este cap)tulo no era para usted por%ue ya sabe usar otro editor. 9ambi!n "amos e+plicar la
necesidad de dedicar dos lar#os cap)tulos a este editor.
Cuando finalice este cap)tulo podr( editar sus ficheros con G"iG y hacer bastante traba3o $til pero para
ello %ui'as necesite al#o m(s de esfuer'o %ue en cap)tulos anteriores y no por%ue sea dificil sino
por%ue tendr( %ue practicar bastante por su propia cuenta.
5tra cosa ser( sacarle el m(+imo partido a G"iG. En un se#undo cap)tulo dedicado a G"iG "eremos
opciones m(s a"an'adas. Son opciones %ue %ui'(s no necesite usar tan frecuentemente pero cuando
ten#a oportunidad de usarlas comprender( la potencia el editor G"iG.
;uchos editores actuales permiten usar distintos tipos de letras y #eneran documentos con un
aspecto precioso %ue adem(s coincide lo %ue se "e en pantalla cuando se edita y con lo %ue saldr(
por la impresora. Est( claro %ue G"iG no sir"e para esto. G"iG est( dise=ado para editar ficheros en
formato de te+to est(ndar. Pero aun%ue solo sir"a para este formato de te+to lo hace muy bien y
siempre tendremos oportunidad de usarlo por%ue a un compilador o a un interprete le da i#ual la
est!tica.
Son muchos los editores disponibles en ,inu+ pero desde un principio di3imos %ue este curso podr)a
ser"ir en #ran medida para aprender otros S5 tipo *ni+. El editor G"iG est( presente desde hace
mucho tiempo en un mont&n de sistemas tipo *ni+. A%u) e+plicaremos solo unos pocos aspectos de
G"iG con la idea de %ue pueda reali'ar con ra'onable soltura la edici&n de un te+to en G"iG. Con muy
pocos comandos de G"iG se pueden hacer muchas cosas y G"iG es un editor %ue para ciertas tareas
resulta de una potencia incre)ble. El %ue escribe estas lineas lo est( haciendo con G"iG y lle"a muchos
a=os usando este editor pr(cticamente para casi todo y le saco un #ran partido pero cada "e' %ue
me encuentro con al#ui!n %ue sabe bastante de G"iG aprendo al#o nue"o. G"iG es un editor muy
pr(ctico sin tener %ue conocerlo a fondo pero en manos de un e+perto resulta de una eficacia
espectacular.
G"iG es un editor de lineas interacti"o y ha sido muy criticado. *na de las ra'ones para ello es %ue
tiene "arios estados o formas de funcionamiento y si uno pasa de un estado a otro sin darse cuenta y
continua tecleando cosas puede ocurrir un pe%ue=o destro'o en el fichero %ue est( editando. 5tro
incon"eniente de G"iG es %ue re%uiere un po%uito de aprendi'a3e. 7ay much)sima #ente %ue est(
acostumbrada a usar otros editores m(s intuiti"os y por%ue no decirlo m(s c&modos y recha'an a
G"iG como al#o prehist&rico. 5tra cosa %ue suele criticarse es %ue se usan letras del teclado para
cosas tan normales como el mo"imiento del cursor y la pa#inaci&n del te+to pero este es un claro
e3emplo del condicionamiento de la cultura de ;icrosoft y de los PCs. G"iG fue dise=ado para %ue se
pudiera usar en una #ran "ariedad de sistemas y terminales. El uso de las teclas de flechas puede
lo#rarse mediante la adecuada confi#uraci&n de G"iG. *no de los puntos fuertes de G"iG es su
adaptabilidad.
-ui'(s una de las m(s poderosas ra'ones para aprender G"iG es %ue G"iG forma parte de la cultura de
los S5 tipo *ni+. ;uchas personas acostumbradas a traba3ar por e3emplo con 8indows asumir(n
como est(ndar cosas %ue no lo son y cuando se encuentran al#o diferente intentan apro"echar al
m(+imo sus conocimientos anteriores.
Feneralmente e+iste una e+a#erad)sima tendencia a continuar usando el primer editor %ue se
aprendi& y lue#o se cambia solo de editor obli#ado por circunstancias poderosas. Nosotros hemos
decidido %ue en posteriores lecciones asumiremos %ue usted ya sabe usar G"iG. Pronto tendr( %ue
hacer sus primeros pro#ramas en shell:script. Entonces necesitar( un editor y nada me3or %ue G"iG.
En este curso se le da mucha importancia a la cultura *ni+. Para una persona %ue aprende G"iG
sur#en "arias oportunidades para aplicar lo %ue sabe en comandos distintos de G"iG. ,a forma de
traba3ar de G"iG ha tenido mucho impacto en otros pro#ramas. Puede encontrar 3ue#os ho3as de
c(lculo utilidades etc %ue usan cosas parecidas a G"iG. Xa "imos GsedG %ue usa comandos similares a
al#unos comandos de G"iG y ahora "amos a "er a continuaci&n al#unas nociones de otro editor .GedG2
%ue es otro buen e3emplo de lo %ue estamos comentando.
<ed< versus <vi<
Dado %ue G"iG est( pensado para su uso interacti"o desde un terminal no resulta muy apropiado de
usar en combinaci&n con otros pro#ramas mediante redirecci&n de entrada salida. En el cap)tulo
anterior de e+presiones re#ulares "imos como GsedG se pod)a usar como filtro de entrada salida.
E+iste un editor llamado GedG %ue es capa' de editar te+to en modo no interacti"o. Para ello se suele
recurrir a un script %ue proporcionar( a GedG las instrucciones adecuadas. Somos de la opini&n de %ue
las lecciones %ue no de3an "er r(pidamente cual es su utilidad y %ue no se practican est(n
condenadas al ol"ido. Por eso %ueremos e"itar %ue piense en t!rminos de Qpara %ue necesito yo
conocer esto de edQ. Por eso m(s tarde comentaremos al#o de GdiffG combinado con GedG. As)
comprender( me3or la utilidad del editor GedG.
Ahora "amos a #enerar un fichero Ge3emplo.t+tG con unas pocas lineas para hacer unas pocas
pr(cticas..
N cd /tmp
N cat TTF6N U e3emplo.t+t
U No ol"ide "isitar nuestra web
U http://www.ciberdroide.comI
U y esto es todo.
U F6N
Jamos a sacar una copia para comprobar lue#o los cambios.
N cp e3emplo.t+t e3emplo.t+t.ori#inal
Ahora #eneramos un fichero con las instrucciones para editar el fichero anterior. Deseamos %ue
primero localice la linea %ue contiene Gwww.ciberdroide.comG y a continuaci&n a=ada una linea
.comando GaG2 G.9ienda Jirtual de ,inu+2G. Salimos al modo comandos .comando G.G2 Sal"amos
.comando GwG2 y salimos .comando G%G2.
N cat TTF6N U e3emplo.ed
U /www.ciberdroide.com/
U a
U .9ienda Jirtual de ,inu+2
U .
U w
U %
U F6N
N ed e3emplo.t+t T e3emplo.ed
M1
http://www.ciberdroide.comI
BB
Jeamos como ha %uedado.
N cat e3emplo.t+t
No ol"ide "isitar nuestra web
http://www.ciberdroide.comI
.9ienda Jirtual de ,inu+2
y esto es todo.
Podemos "er las diferencias con el ori#inal usando el comando GdiffG. El comando diff es un
comando %ue sir"e para se=alar diferencias entre dos ficheros pero con la opci&n :e estas diferencias
se e+presan en una forma adecuada para ser interpretadas por GedG. Jeamos como funciona.
N diff :e e3emplo.t+t.ori#inal e3emplo.t+t
0a
.9ienda Jirtual de ,inu+2
.
Jamos a partir del fichero ori#inal y le "amos a pasar por la entrada est(ndar $nicamente las
diferencias obtenidas con Gdiff :eG
N cp e3emplo.t+t.ori#inal e3emplo0.t+t
N diff :e e3emplo.t+t.ori#inal e3emplo.t+t U e3emplo.diff
N cat e3emplo.diff
0a
.9ienda Jirtual de ,inu+2
.
Jemos %ue falta las instrucciones GwG y G%G para sal"ar y salir respecti"amente as) %ue las a=adimos
al fichero Ge3emplo.diffG.
N cat TTF6N UU e3emplo.diff
U w
U %
U F6N
N cat e3emplo.diff
0a
.9ienda Jirtual de ,inu+2
.
w
%
Xa tenemos todas las instrucciones necesarias. Jamos a aplicar los cambios con GedG.
N ed e3emplo0.t+t T e3emplo.diff
M1
y esto es todo.
BB
N cat e3emplo0.t+t
No ol"ide "isitar nuestra web
http://www.ciberdroide.comI
.9ienda Jirtual de ,inu+2
y esto es todo.
En lu#ar de #uardar "arias "ersiones de un #ran fichero %ue sufre pe%ue=as diferencias de "e' en
cuando se podr)a #uardar una sola "ersi&n y unos pe%ue=os ficheros con esas diferencias ocurridas
entre una "ersi&n y la si#uiente. De esta forma podr)an aplicarse secuencialmente para ir
recuperando sucesi"amente las "ersiones anteriores en caso de necesidad. Cuando se desarrolla una
aplicaci&n se "an introduciendo sucesi"amente cambios en los pro#ramas y para poder recuperar
"ersiones anti#eas habr)a %ue ir sal"ando y conser"ando cada nue"a "ersi&n. ,os pro#ramas %ue se
utili'an para el mantenimiento de distintas "ersiones de una aplicaci&n suelen basarse en esta idea
para ahorrar espacio de almacenamiento.
<vim< versus <vi<
En ,inu+ e+iste un editor G"iG muy me3orado %ue se llama G"imG. Este editor es muy similar a G"iG pero
con importantes me3oras. ,a m(s importante sin lu#ar a dudas es la capacidad de deshacer
retrocediendo uno a uno en los $ltimos cambios reali'ados. Esto permite recuperar a%uello de los
destro'os %ue di3imos antes. 9ambi!n permite resaltar la sinta+is de ciertos ficheros como. shell:
script html len#ua3e C y otros muchos len#ua3es. Este y otros detalles lo hacen muy adecuado para
pro#ramar. El mane3o del cursor en los distintos modos del editor resulta mucho m(s c&modo y un
mont&n de cosas m(s.
;as adelante "eremos %ue se pueden usar distintas opciones para %ue el editor funcione en la forma
%ue nosotros %ueramos. G"imG puede e3ecutarse en modo compatible G"iG .:set compatible2 pero es
me3or usar el modo no compatible %ue nos proporcionar( las a#radables "enta3as sobre el G"iG
tradicional %ue antes comentamos. .:set nocompatible2 Feneralmente en ,inu+ se instala G"imG como
sustituto de G"iG de forma %ue aun%ue usted teclee G"iG en realidad puede estar e3ecutando G"imG o
Gel"isG u otros similares. Sal#amos de dudas:
N "i :S > less
Solo si le in"ita a usar la opci&n G:hG h(#alo.
N "i :h > less
Compruebe en las primeras lineas si se trata de G"imG. Si ya ha entrado por error en editor sal#a
mediante TESCU :%TEN9E4U Continuemos a"eri#uando cosas.
N whereis "i
N whereis "im
N whereis el"is
N man "i
N man "im
N man el"is
N man e+
N man "iew
N man ed
Ahora si "amos a entrar y a salir en el editor.
N "i
Xa est( dentro del editor. Compruebe si sale informaci&n relati"a al tipo de editor y sal#a tecleando
G:%G Para si#nificar %ue estamos en el editor G"iG pondremos el fondo a'ul oscuro y las letras en
amarillo son las %ue salen en pantalla y en blanco las %ue introducimos nosotros.
J6; : Ji 6;pro"ed
c
c "ersion K.1
c by <ram ;oolenaar et al.
c
c Jim is freely distributable
c type :help u#andaTEnterU if you liHe Jim
c
c type :%TEnterU to e+it
c type :helpTEnterU or TF/U for on:line help
c type :help "ersionKTEnterU for "ersion info
c
c
:%
Cuadro resumen para el uso de <vi<
A continuaci&n se describen una serie de comandos de uso frecuente en G"iG. Se destacan los %ue se
consideran m(s importantes con un mayor numero de asteriscos. En una primera lectura le
recomendamos %ue empiece a utili'ar y a aprender a%uellos comandos marcados con G:< *ue son los
m3s importantes. Le aconse1amos *ue no pase de leccin 7asta *ue no se aprenda como
m0nimo los comandos cali.icados con <VG. Al final del cap)tulo como es costumbre pondremos un
test pero solo haremos pre#untas sobre comandos calificados con G:< *ue ser3n los *ue
practicaremos de .orma especial en este cap0tulo.
Eemos a,rupado toda esta in.ormacin en un Hnico cuadro para *ue sea su c7uleta, para usar
y aprender <vi<. Solo se incluyen los comandos *ue suponemos ser3n de la mayor utilidad para
un usuario novato y dado *ue 7ay varias .ormas de 7acer una misma cosa 7emos ele,ido por
usted y 7emos clasi.icado de .orma totalmente sub1etiva una serie de comandos para *ue
inicialmente ten,a *ue aprender solo un reducido nHmero de ellos. #ambi+n se incluyen otros
comandos para *ue pueda ser usado como un cuadro de consulta bastante completo.
V ::U Comando de uso imprescindible.
99> Comando de uso muy .recuente.
: 99> Comando de uso no tan .recuente.
BB
,6NEA DE C5;AND5S
BB
BB V >> "i >> Editar un nue"o fichero >>
>> : BB vi =.ic7ero> BB $ditar un .ic7ero. %Si el .ic7ero es de solo lectura lo editara en modo solo
lectura. BB
BB : BB vi =.ic7ero1> =.ic7ero2> =.ic7ero-> ... BB $ditar varios .ic7eros sucesivamente. BB
BB >> "i :4 TficheroU >> Editar en modo solo lectura. >>
>> BB vi 9r =.ic7ero> BB $ditar recuperando modi.icaciones no salvadas. BB
BB
;5D5 C5;AND5S
Se pasa desde el modo entrada %insercin o reemplazo& mediante =$SC>.
BB
BB
;o"imientos del cursor
BB . BB
BB >> h >> Car(cter anterior >>
>> BB =$'#$"> BB Linea si,uiente BB
BB >> 3 >> ,inea si#uiente >>
>> BB P BB Linea anterior BB
BB >> TESPAC65U >> Car(cter si#uiente >>
>> BB l BB Car3cter si,uiente BB
BB : BB L BB Ultima linea de la pantalla BB
BB : BB E BB rimera linea de la pantalla BB
BB : BB 5 BB Linea central de la pantalla BB
BB : BB =C#"L?Z> BB "etroceso de p3,ina BB
BB : BB =C#"L?Q> BB !vance p3,ina BB
BB : BB ? BB rimer car3cter de la linea si,uiente BB
BB : BB 9 BB rimer car3cter de la linea anterior BB
BB : BB G BB /esplazarse al .inal de linea. BB
BB : BB BB /esplazarse al principio de linea. BB
BB
;odo entrada de te+to
BB . BB
BB V >> i >> Pasar a modo entrada insertando. >>
>> : BB " BB asar a modo entrada reemplazando. BB
BB >> a >> A"an'ar el cursor y pasar a modo entrada insertando. >>
>> : BB o BB Insertar una linea despu+s de la actual y pasar a insertar. BB
BB : BB O BB Insertar una linea antes de la actual y pasar a insertar. BB
BB
Corre#ir
BB . BB
BB V >> u >> Deshacer $ltima modificaci&n. .En "im se pueden ir deshaciendo los
los $ltimos cambios en otros editores "i solo se deshace el $ltimo cambio2. >>
>> : BB =C#"L?"> BB $n <vim< sirve para des7acer el Hltimo comando <u< BB
BB >> * >> 4ecuperar linea completa. >>
>>
Zuscar
>> . >>
>> BB I BB Zusca una cadena de caracteres, 7acia delante. BB
BB : BB R BB Zusca una cadena de caracteres, 7acia atr3s. BB
BB : BB n BB Si,uiente en la bHs*ueda. BB
BB : BB ' BB !nterior en la bHs*ueda. BB
BB
Copiar ;o"er y borrar lineas
BB . BB
BB V >> dd >> <orrar una linea. >>
>> : BB =n>dd BB borrar =n> lineas. BB
BB V >> yy >> ;eter una linea en el buffer. >>
>> : BB =n>yy BB 5eter =n> lineas en el bu..er. BB
BB V >> p >> Copiar la linea del buffer despu!s de la l)nea actual. >>
>> V >> P >> Copiar la linea del buffer antes de la l)nea actual. >>
>>
Farios
>> . >>
>> : BB =C#"L?L> BB "e.rescar pantalla. %_til cuando se descompone la pantalla& BB
BB >> TC94,?FU >> Jisuali'a el nombre del fichero numero de lineas totales y en %ue linea estamos.
>>
>> : BB ` BB Une la l0nea actual con la si,uiente. BB
BB >> . >> 4epetir $ltimo comando. >>
>> : BB 8 BB asar al modo ex %5odo comandos& BB
BB V >> ]] >> 9erminar sal"ando si hubo cambios. >>
>>
5O/O $)
Se pasa desde el modo de comandos al modo e+ con G:G
Se puede for'ar a entrar directamente en este modo
usando la opci&n G:eG o e3ecutando el comando Ge+G.
>>
>> BB 8=Clinea> BB Ir a una linea. BB
BB : BB 8e =.ic7ero> BB asa a editar de .orma simultanea otro .ic7ero. BB
BB : BB 8e C BB Folver al .ic7ero anterior. BB
BB V >> :w >> Sal"ar. .No puede sobreescribir si se entr& con "i :42 >>
>> : BB 8Da BB Salvar .orzando %Cuando .alla 8D&. BB
BB >> :+ >> Salir sal"ando si es necesario. >>
>> : BB 8D =.ic7ero> BB Salvar con otro nombre. %'o puede existir el .ic7ero& BB
BB V >> :wg Tfichero >> Sal"ar con otro nombre for'ando..Permite sobreescribir2 >>
>> : BB 8r =.ic7ero> BB Lee un .ic7ero y lo car,a en el lu,ar indicado por la posicin actual del
cursor. BB
BB >> :r gTcomando >> E3ecuta en una subshell el comando y #uarda el resultado
del mismo en la posici&n indicada por el cursor. >>
>> : BB 8* BB Salir si no 7ay modi.icacin. BB
BB V >> :%g >> Salir sin sal"ar cambios. >>
>> BB 8D* BB Salir salvando cambios. BB
BB : BB 8s7 BB $1ecutar una subs7ell %se retorna con exit&. BB
BB : BB 8,I=s1>Ip BB Fisualizar lineas *ue tienen =s1> BB
BB : BB 8,I=s1>Is<s2>/g || Sustituir globalmente <s1> por <s2>. ||
|| * || :g/<s1>/s=s2>I,c BB bdem pero pidiendo con.irmacin. BB
BB : BB 8n BB Si,uiente documento. BB
BB : BB 8ar,s BB 5irar .ic7eros a editar. BB
BB : BB 8ab m n BB !breviaturas. #eclear 1 se sustituye por 2 BB
BB : BB 8unab m BB /esabreviar. BB
BB : BB 8map m n BB Crear macro %m 7ace n& %Fer e1emplos con macros& BB
BB : BB 8mapa m n BB Crear macro en modo insercin %m 7ace n& BB
BB : BB 8unmap m BB /estruir macro m BB
BB : BB 8unmapa m BB /estruir macro de insercin m. BB
BB : BB 8cd BB Cambiar de directorio actual. BB
BB >> :set nu >> Acti"ar "isuali'aci&n de n$meros de l)nea >>
>> BB 8set nonu BB !ctivar visualizacin de nHmeros de l0nea BB
BB >> :set all >> Jer todas las opciones con sus "alores. >>
>> BB 8set nocompatible BB Opcin de <vim< para no obli,ar a ser compatible <vi< BB
BB V >> :set showmode >> Para "isuali'ar siempre el modo en %ue nos encontramos. >>
>> : BB 8a=comando> BB $1ecutar un comando en una subs7ell.%Fer e1emplos con a& BB
BB
;uchos de estos comandos
pueden aplicarse dentro de un
ran#o de l)neas especificado.
BB Un nHmero de l0nea %Clinea& puede venir como8
BB Un punto BB . BB L0nea actual BB BB Un punto BB .9' BB ' L0neas antes de la actual BB BB Un punto BB
.?' BB ' L0neas despu+s de la actual BB BB Un nHmero BB ' BB L0nea ' BB BB Un G BB G BB Ultima l0nea. BB
BB Un G BB K BB /esde la Hltima a la primera l0nea %!breviatura de 1,G&. BB
BB
BB V >> :Wlinea/ Wlinea0 w TficheroU >> Sal"ar desde / hasta la 0 en TficheroU >>
>> BB 8Clinea1, Clinea2 co Clinea- BB Copiar desde 1 7asta 2 en -. BB
BB >> :Wlinea/ Wlinea0 mo Wlinea1 >> ;o"er desde / hasta 0 en 1. >>
>> BB 8Clinea1, Clinea2 de BB Zorrar desde 1 7asta 2. BB
BB >> :Wlinea/ Wlinea0 s/Ts/U/Ts0U >> Sustituir la primera ocurrencia en cada linea desde / hasta la 0 la
cadena Ts/U
por la cadena Ts0U >>
>> BB 8Clinea1, Clinea2 sI=s1>I=s2>Ic BB Sustituir la primera ocurrencia en cada linea desde 1
7asta la 2 la cadena =s1>
por la cadena =s2> con con.irmacin. BB
BB >> :Wlinea/ Wlinea0 s/Ts/U/Ts0U/# >> Sustituir todas las ocurrencias en cada linea desde / hasta la 0
la cadena Ts/U
por la cadena Ts0U >>
>> BB 8Clinea1, Clinea2 sI=s1>I=s2>I,c BB Sustituir todas las ocurrencias en cada linea desde 1
7asta la 2 la cadena =s1>
por la cadena =s2> con con.irmacin BB
Ser0a conveniente *ue sacara por la impresora esta in.ormacin para usarla a modo de
c7uleta en sus primeras pr3cticas con <vi<.
$xiste otra .orma de aplicar comandos dentro de un ran,o de lineas. /esde el modo de
comandos pulsando <v< se pasa al modo <vi< o modo <visual<. $ntonces moviendo el cursor
marcamos todo el ran,o de lineas *ue *ueramos tratar y pulsando <8< pasamos al modo <ex<
para aplicar el comando *ue *ueramos. Cual*uier comando *ue se pueda introducir en <vi<
estando en el modo de <ex< puede ser incluido en un .ic7ero .exrc en el GEO5$ *ue servir3
para *ue <vi< e1ecute esos comandos cada vez *ue arran*ue. Se usa muc7o para de.inir
macros y para activar determinadas opciones con set pero eso lo veremos en otro cap0tulo.
Practicando lo m(s esencial de G"iG.
Si no se usa nin,una opcin inicial vi empezar3 en modo comandos. ara pasar al modo
entrada 7ay varias .ormas pero recomendamos *ue se aprenda de momento solo. i, a, o, ". Ma
7emos descrito estas .unciones en <c7uleta9vi.txt< y practicaremos con ellas m3s adelante.
/el modo entrada %Insertar o reemplazar& se sale con =$SC>.
'ormalmente traba13bamos en <Itmp< como directorio temporal pero esta vez vamos a crear
un directorio nuestro de traba1o para poder conservar nuestro traba1o el tiempo *ue
*ueramos. ara ello crearemos un directorio <cursolinux< y nos situaremos en +l para
traba1ar.
G cd
G mPdir cursolinux
G cd cursolinux
G vi e19vi1.txt
/ado *ue no exist0a nin,Hn .ic7ero <e19vi1.txt< estaremos editando un .ic7ero nuevo y
dependiendo del editor usado %nosotros usaremos <vim<& aparecer3 al,o del tipo.
99U
U
\e19vi1.txt\ c'eD Qiled
$st3 en modo comandos y va a teclear sus dos primeros comandos. Cuando vea <=$'#$"><
en los e1emplos si,ni.ica *ue debe pulsar esa tecla.
8set s7oDmode=$'#$">
8set nu=$'#$">
!cabamos de activar la visualizacin del modo de .uncionamiento y la visualizacin de los
nHmeros de l0nea. 'in,una de estas cosas son necesarias para editar un .ic7ero pero a
nosotros nos van a ayudar a ver m3s claro lo *ue 7acemos.
!7ora pulsaremos la <i< y aparecer3 en la linea in.erior el indicador de *ue estamos en modo
entrada para insercin. /esde este modo introduciremos las si,uientes lineas de texto.
1 $stamos practicando con el editor vi.=$'#$">
2 'o parece tan di.0cil de usar.=$'#$">
- Ma voy por la tercera linea y no 7a ocurrido nada ,rave.=$'#$">
2 =$'#$">
4 =$'#$">
6 Como 7e saltado un par de l0neas voy por la linea seis.=$'#$">
] /e momento no escribo nada m3s.=$SC>
LL
Con la tecla =$SC> salimos al modo comandos y con <LL< %mayHsculas& desde el modo
comandos salimos salvando el .ic7ero. !7ora vamos a volver a editarlo.
G vi e19vi1.txt
Folvemos a activar los modos <s7oDmode< y <nu< y nos situamos en la l0nea - y la borramos
con <dd< lue,o nos situamos en la primera l0nea y 7acemos <p< *ue copiar3 la linea eliminada a
continuacin de la l0nea primera. <dd< ,uarda siempre en un bu..er la in.ormacin eliminada
para poder recuperarla con <p<. odr0amos 7aber borrado cinco lineas de ,olpe usando <4dd<
y las cinco l0neas 7abr0an sido ,uardadas en el bu..er para su posible recuperacin con <p<.
8set s7oDmode=$'#$">
8set nu=$'#$">
8-=$'#$">
dd
81=$'#$">
p
ero a7ora la l0nea 2 dice *ue es la tercera as0 *ue intente usted mismo borrar una de las
l0neas vac0as y situarla como se,unda l0nea usando de nuevo <dd< y <p<. $sta vez mueva de
linea usando <1< desde el modo comandos para ba1ar a la linea si,uiente y <P< para subir a la
l0nea anterior. Si el teclado est3 con.i,urado en su editor para mane1ar correctamente las
teclas de .lec7as podr3 7acer esto mismo usando las teclas .lec7a aba1o y .lec7a arriba en
sustitucin de la <1< y la <P< respectivamente. Si al,o sale mal borre el .ic7ero y vuelva a
empezar procurando no volver a meter la pata. Zueno el caso es *ue el .ic7ero deber0a *uedar
con este aspecto.

1 $stamos practicando con el editor vi.
2
- Ma voy por la tercera linea y no 7a ocurrido nada ,rave.
2 'o parece tan di.0cil de usar.
4
6 Como 7e saltado un par de l0neas voy por la linea seis.
] /e momento no escribo nada m3s.
Famos a sacar una copia de este .ic7ero modi.icado con otro nombre, y lue,o vamos a
duplicar varias veces el contenido de las l0neas cuatro y cinco usando <2yy< %,uarda en el
bu..er dos lineas& y <p< para %copia el contenido del bu..er en la l0nea actual&. !se,urese *ue
est3 en modo comandos. ulse =$SC> si no est3 se,uro y teclee los comandos si,uientes.
!dvierta *ue al,unos comandos empiezan por <8< y terminan por =$'#$"> mientras *ue
otros no.
8D e19vi2.txt
82=$'#$">
2yy
8-=$'#$">
p
8-=$'#$">
p
8-=$'#$">
p
$stamos repitiendo varias veces la l0nea <'o parece tan di.0cil de usar.< /eber0a *uedar
.inalmente con este aspecto.

1 $stamos practicando con el editor vi.
2
- Ma voy por la tercera linea y no 7a ocurrido nada ,rave.
2 'o parece tan di.0cil de usar.
4
6 'o parece tan di.0cil de usar.
]
^ 'o parece tan di.0cil de usar.
Y
1V 'o parece tan di.0cil de usar.
11
12 Como 7e saltado un par de l0neas voy por la linea seis.
1- /e momento no escribo nada m3s.
Como 7emos visto con <2yy< 7emos metido en el bu..er dos lineas en lu,ar de una. ara meter
una sola linea 7abr0a bastado usar <yy< o <1yy<. !7ora vamos a salir pero sin ,uardar nin,uno
de los cambios realizados. rimero intentar0amos salir sin m3s con <8*< desde el modo
comandos.
8*
Obtendremos un aviso del editor para no perder las Hltimas modi.icaciones.
'o Drite since last c7an,e %use a to override&
ero realmente deseamos salir sin salvar as0 *ue intentamos de nuevo con <8*a< desde el modo
comandos.
8*a
Famos a comprobar *ue los Hltimos cambios no se 7an ,uardado, y vamos a ver *ue permisos
tiene este .ic7ero.
G cat e19vi1.txt
$stamos practicando con el editor vi.
'o parece tan di.0cil de usar.
Ma voy por la tercera linea y no 7a ocurrido nada ,rave.
Como 7e saltado un par de l0neas voy por la linea seis.
/e momento no escribo nada m3s.
G ls 9l e19vi1.txt
9rD9r99r99 1 xxxx xxxx 216 a,o 12 1^822 e19vi1.txt
La in.ormacin de permisos puede ser di.erente. "ecuerde *ue di1imos *ue los permisos de un
.ic7ero cuando se crea dependen de la <umasP< pero a7ora solo nos interesa comprobar
e.ectivamente tenemos permisos para leer y escribir en este .ic7ero. Famos a eliminar los
permisos de escritura del .ic7ero y vamos a intentar editarlo nuevamente.
G c7mod 222 e19vi1.txt
G ls 9l e19vi1.txt
r99r99r99 1 xxxx xxxx 216 a,o 12 1^822 e19vi1.txt
G vi e19vi1.txt
robablemente aparecer3 en la linea in.erior de su editor una advertencia de *ue est3 en
modo solo lectura.
\e19vi1.txt\ creadonlyd ] lines, 216 c7aracters
Zueno a pesar de ello vamos a intentar 7acer cambios y como estamos practicando
continuaremos con una serie de comandos *ue aHn no 7emos visto y *ue ten0amos clasi.icados
con <VG.
:1
:.N w tro'ofinal
:/. w tro'oinicial
:/N de
:r tro'oinicial
:N
:r gdate
:N
:r tro'ofinal
:w tempfich
:w
GreadonlyG option is set .use g to o"erride2
Permiti& escribir otros ficheros pero se nie#a a sobrescribir el fichero %ue estamos editando con los
cambios por%ue est( en modo solo lectura y su#iere %ue usemos GgG para for'ar su escritura.
:wg
En este caso estamos for'ando la situaci&n y estamos escribiendo en un fichero en el %ue no
tenemos permisos pero puesto %ue somos propietarios del mismo el editor puede mane3ar los
permisos para dar permiso de escritura sobrescribir el fichero y "ol"er a cambiar los permisos
de3ando los permisos ori#inales.
Podemos e3ecutar comandos desde el editor as) %ue por%ue no miramos los permisos con Gls :lG.
:gls :l
total L
r::r::r:: / ++++ ++++ 1CA a#o /0 /B:// e3:"i/.t+t
r::r::r:: / ++++ ++++ 1CA a#o /0 /B:// e3:"i/.t+tc
rw:r::r:: / ++++ ++++ 0/L a#o /0 /R:0R e3:"i0.t+t
rw:r::r:: / ++++ ++++ 1CA a#o /0 /B:CB tempfich
rw:r::r:: / ++++ ++++ /AM a#o /0 /B:CL tro'ofinal
rw:r::r:: / ++++ ++++ /0L a#o /0 /B:CL tro'oinicial
Press 4E9*4N or enter command to continue
Debemos pulsar TEN9E4U para "ol"er al editor Puesto %ue podemos e3ecutar cual%uier comando
tambi!n podemos e3ecutar bash como una subshell. Apro"echaremos para "er los procesos acti"os.
:gbash
bash:0.C/N ps
P6D 99X S9A9 96;E C5;;AND
00/ 0 S C:CC :bash
RB1 0 S C:CC "i e3:"i/.t+t
BAA 0 S C:CC bash
BK/ 0 4 C:CC ps
bash:0.C/N e+it
e+it
/ returned
Press 4E9*4N or enter command to continue
Por fin estamos de "uelta en el editor. Jamos a continuar practicando al#unos comandos
importantes %ue nos %uedan.
:1TEN9E4U
o
7emos pasado a insertar abriendo una linea.TESCU
d
Con la GdG may$scula hemos unido dos l)neas en una. Ahora "amos a pasar al modo entrada para
reempla'ar.
:1TEN9E4U
4
[[[[[[[[[[[[[[[[[TESCUsertar abriendo una linea. Xa "oy por la tercera linea y no ha
ocurrido nada #ra"e.
TESCU
TC94,?FU
Qe3:"i/.t+tQ Y;odifiedZYreadonlyZ line A of /C ::ACD:: col AA
Desde el modo comandos podemos consultar el nombre del fichero cuantas lineas tiene en total en
%ue l)nea y columna estamos y otras cosas con solo pulsar TC94,?FU .
Ahora utilice "arias "eces el comando GuG. Si est( en G"imG "er( como se deshacen retrocediendo
secuencialmente en las $ltimas modificaciones %ue hemos reali'ado. ,ue#o si est( usando G"imG use
TC94,?4U para a"an'ar de nue"o en las $ltimas modificaciones hasta recuperarlas todas. Para
terminar sal#a con G:%gG
Practi%ue con la combinaci&n de GyyG o GnyyG y GpG. 5 con la combinaci&n GddG o GnddG y GpG. Se usan
mucho para copiar o trasladar pe%ue=os blo%ues de informaci&n.
Para mo"er una linea hacer GddG lue#o situarse en la posicion destino y hacer GpG. Para mo"er "arias
lineas hacemos al#o parecido. <orramos primero "arias lineas y lue#o desde la posici&n destino
hacemos GpG. Para copiar en lu#ar de mo"er usar)amos GyyG en lu#ar de GddG.
<ueno utilice su propia ima#inaci&n e in"esti#ue y practi%ue por su cuenta. Esta lecci&n no le
obli#a a di#erir conceptos nue"os pero si re%uiere iniciati"a para practicar con el editor.
E+iste un comando %ue lo hemos marcado como esencial cuando en realidad se usa po%u)simo pero
es un comando %ue con"iene conocer por%ue en el momento m(s inesperado puede ser necesario
usarlo. Con este comando el editor redibu3a totalmente el contenido de la pantalla. Esto puede ser
necesario por%ue a su terminal podr)a lle#arle informaci&n desde otro proceso. Por e3emplo un
mensa3e de error del sistema o un a"iso de su administrador para %ue finalice antes de /C minutos.
-ui'(s su administrador es de los %ue repite el mensa3e m(s de una "e' y a cada mensa3e recibido
su pantalla %ueda totalmente destro'ada. No pasa nada. Pulse TC94,?,U y todo "ol"er( a la
normalidad. Esto puede ocurrirle cuando este usando otro pro#rama distinto de G"iG y %ui'(s pueda
usar #ualmente TC94,?,U.
"ecuperar la in.ormacin perdida por muerte prematura del editor
5tra cosa %ue debe saber es %ue cuando G"iG recibe una se=al para finali'ar ordenadamente #uardar(
el contenido de lo %ue est( editando en un fichero de se#uridad. Para recuperar esta informaci&n
necesitar( usar G"i :r ficheroG. Como e3ercicio libre le proponemos %ue empiece a editar un fichero
%ue llamaremos Gprueba:Hill.t+tG. Escriba unas cuantas cosas y sin sal"ar nada pase a otro terminal y
en")e un Hill con el "alor por defecto ./K @ S6F9E4;2. Para eso primero tendr( %ue a"eri#uar el
pid del proceso "i. Por e3emplo use Gps > #rep "iG. Supon#amos %ue a"eri#ua %ue su pid es AAK.
<astar)a hacer GHill AAKG. Esto finali'ar( la edicion del fichero Gprueba:Hill.t+tG. No edite este fichero
con G"i prueba:Hill.t+tG por%ue perder( todos los cambios. En cambio si edita con G"i :r prueba:
Hill.t+tG si los recuperar(. En este punto sal"e y continue editando cosas y antes de sal"ar los nue"os
cambios "uel"a a a"eri#uar el pid desde otro terminal. Supon#amos %ue el nue"o pid fuera AAR.
En")e esta "e' la se=al S6FE6,, no enmascarable mediante GHill :B AARG. Comprobar( %ue esta "e'
el editor no ser( capa' de recuperar los cambios. Por e3emplo si ocurre un apa#ado normal
.shutdown2 del sistema mientras est( usted editando o mientras usted est( ausente del terminal con
la sesi&n de edici&n abierta tampoco ocurrir( nada. ,a ra'&n de esto es %ue el sistema primero
en")a a todos los procesos acti"os una se=al de S6F9E4; para %ue finalicen ordenadamente.
Despu!s de esto y pasados unos se#undos se supone %ue la mayor)a de los procesos habr(n
terminado. .A los restantes procesos les en"iar( un S6FE6,, para matarlos incondicionalmente 2.
Cuando le ocurra esto tendr( %ue "ol"er a entrar en sesi&n con lo#in y se#uramente recibir( una
notificaci&n en su correo ad"irtiendo de la e+istencia de un fichero %ue debe ser editado con la
opci&n G:rG para recuperar informaci&n "olcada durante la finali'aci&n prematura de G"iG.
#est
Puede comprobar sus conocimientos respondiendo el si#uiente test.
Para ello seleccione las opciones %ue se a3usten a la "erdad y lue#o pulse el boton para "er el
resultado de su test.

/ G"iG es un editor dise=ado para un uso interacti"o.
0 G"iG es muy adecuado para editar pro#ramas de ordenador en formato te+to.
1 Con GdiffG se pueden obtener las diferencias entre dos ficheros.
A G"imG debe usarse con la opci&n Gset compatibleG cuando se usa en ficheros de ;icrosoft.
K Arrancando el editor con G"i :4G se recuperan modificaciones no sal"adas.
L Pulsando GiG desde el modo comandos se pasa a insertar te+to.
M 9ecleando G1DDG desde el modo comandos se borran 1 lineas.
R 9ecleando GyypGdesde el modo comandos se duplica una l)nea.
B Pulsando TC94,?,U desde el modo inserci&n se refrescar( la pantalla.
/C 9ecleando G''G desde el modo comandos se finali'a y se #uardan los cambios.
// 9ecleando G:/K w /tmp/copiaTEN9E4UG desde el modo comandos #uarda las K primeras l)neas
en G/tmp/copiaG.
/0 9ecleando G:glsTEN9E4UG desde el modo comandos e3ecutaremos el comando GlsG.
14. $l editor vi %Se,unda parte&
Ob1etivos de esta leccin
Esta lecci&n menciona al#unas posibilidades a"an'adas del editor G"iG. Se supone %ue el alumno ha
estudiado las lecciones precedentes y en particular el cap)tulo anterior dedicado al editor G"iG. Eso
si#nifica %ue ya sabe editar. Jamos a suponer %ue incluso ha practicado un poco por su cuenta. Por
ello lo %ue "amos a e+plicar en este cap)tulo ser( de escasa utilidad si no ha asimilado la lecci&n
anterior.
Poco a poco "amos a ir asumiendo un mayor dominio del alumno. Xa no "amos a detallar tan a
menudo paso por paso cosas %ue ya se han e+plicado y practicado m(s de una "e'. Eso le obli#ar( a
poner un poco m(s de iniciati"a por su parte.
,os e3emplos de las lecciones anteriores eran pr(cticas totalmente #uiadas comando a comando
pero a partir de ahora tendr( %ue probar cosas no necesariamente id!nticas a los e3emplos %ue
nosotros utilicemos.
No se preocupe. Se#uro %ue lo har( muy bien. Si ha lle#ado hasta a%u) es se=al de haber conse#uido
un a"ance si#nificati"o en sus conocimientos y como ,inu+ero se encuentra %ui'(s a medio camino
entre el no"ato bruto y e+tremadamente torpe y el repu#nante listillo inform(tico. ::2
Confiamos plenamente en su capacidad pero recuerde %ue nosotros no somos responsables de lo
%ue pueda pasarle a su ordenador. Contin$e practicando con un usuario distinto de root y un
directorio %ue no conten#a informaci&n "aliosa.
Se#uramente en esta lecci&n aprenda cosas %ue al#unas personas %ue lle"an usando G"iG durante
"arios a=os a$n no conocen pero tambi!n contiene cosas %ue pueden ser muy importantes para
usted. No todos usamos las mismas cosas. ,a mayor)a de los documentos %ue e+plican el uso de G"iG
lo hacen de forma muy incompleta. Nosotros no "amos a hacer un tratado completo de este editor
por%ue necesitar)amos muchas lecciones y nos saldr)amos de los ob3eti"os del curso pero si
procuraremos mostrarle un amplio abanico de posibilidades para %ue ten#a donde ele#ir. En la
primera lecci&n sobre G"iG le mostramos un 3ue#o reducido de comandos pero suficiente para
defenderse. En esta lecci&n le damos la posibilidad de con"ertirse en un "irtuoso de este editor.
ZHs*uedas
Desde el modo comandos se puede usar G/G para buscar. Admite e+presiones re#ulares. Por e3emplo
si introduce G/debian.comG podr)a locali'ar una cadena Gdebian:comG o Gdebian:comG y no solo
Gdebian.comG. 4ecuerde %ue al#unos caracteres como el punto el asterisco etc tienen un si#nificado
especial y para usarlas en G"iG hay %ue precederlas de GPG %ue actuar( como car(cter de escape.
9ambi!n hay %ue escapar los caracteres como por e3emplo G/G y G`G por%ue sin tener si#nificado
como operador de e+presi&n re#ular si tiene un si#nificado especial para G"iG %ue "eremos cuando
e+pli%uemos las sustituciones. No "amos a "ol"er a e+plicar las e+presiones re#ulares por%ue ya
dedicamos una lecci&n. Practi%ue lo %ue "a aprendiendo y recuerde %ue las e+presiones re#ulares no
funcionan i#ual en todas las aplicaciones. Jamos a poner "arios e3emplos para su uso en b$s%uedas
desde G"iG. Para buscar GT/9A<,EUG habr)a %ue usar G/TP/9A<,EUG.
Es decir %ue al#unos caracteres no los podemos usar tal cual para buscarlos sino %ue hay %ue es
caparlos. En el caso anterior hemos escapado G/G. 9en#a en cuenta esto cuando intente por e3emplo
buscar un car(cter GNG en un te+to.
Con GnG buscar( la ocurrencia si#uiente de la cadena en el fichero. Con GNG buscar( la ocurrencia
anterior. *na "e' lle#ado al final comien'a de nue"o la b$s%ueda por el principio.
9ambi!n se puede empe'ar la b$s%ueda desde el primer momento en sentido ascendente usando GSG
en lu#ar de G/G. En este caso los comandos GnG y GNG tambi!n funcionaran en sentido contrario %ue con
el comando G/G.
Si usamos G/G o GSG sin nada m(s a continuaci&n se repetir( la $ltima b$s%ueda.
,as e+presiones re#ulares ofrecen #randes posibilidades como ya hemos "isto pero particularmente
interesantes para G"iG pueden ser las b$s%uedas a principio o a final de una l)nea. En el e3emplo
buscaremo GElG a principio de una l)nea y lue#o GasG al fineal de l)nea.
G/^ElG
G/asNG
Sustituciones
Xa dispone de un resumen de todos los comandos de G"iG %ue proporcionamos en el cap)tulo anterior
as) %ue lo me3or es presentar una serie de e3emplos e+plicando para %ue sir"en.
Jamos a poner tres formas distintas de sustituir GencarnadoG por GcoloradoG en las tres primeras l)neas
de un te+to y solo deseamos %ue ocurra la sustituci&n en la primera ocurrencia de cada l)nea caso.
Es decir si una l)nea contiene "arias "eces la palabra GencarnadoG solo deseamos sustituir la primera.
:/1 s/encarnado/colorado/
:/1 s:encarnado:colorado:
:/1 shencarnadohcoloradoh
Ahora de dos formas distintas "amos a sustituir en todo el te+to GencarnadoG por GcoloradoG. Es decir
si una linea contiene "arias "eces la palabra GencarnadoG deseamos %ue la sutituci&n se realice en
todas ellas. Para eso utili'aremos un comando similar al anterior pero finali'ado en G/#G. ,os
e3ememplos solo "ar)an en la forma de indicar con G/NG o con GDG la b$s%ueda en todo el te+to.
:/N s/encarnado/colorado/#
:D s/encarnado/colorado/#
Ahora si sutituimos en todo el te+to GencarnadoG por GcoloradoG pero confirmando cada cambio
manualmente. Para eso utili'aremos un comando similar al anterior pero finali'ado en G/#cG. ,a G#G
tiene el mismo si#nificado %ue en el caso anterior y la GcG si#nifica Gconfirmaci&nG.
:/N s/encarnado/colorado/#c
Jamos a usar ahora las sustituciones con e+presiones re#ulares.
/2 Poner a doble l)nea todo un te+to.
:Ds/N/P
/#
02 Eliminar blancos y tabuladores a final de linea.
:Ds/Yspace tabZVN
36 7liminar blancos ( tabuladores al principio de l*nea.
89s:;space tab<!
A2 Sustituir cual%uier secuencia de blancos y tabuladores por un $nico blanco.
:Ds/Yspace tabZYspace tabZV/ /
K2 Poner entre par!ntesis todos los n$meros enteros de un te+to.
:Ds/YC:BZYC:BZV/P.`P2/#
En este $ltimo hemos usado el operador G`G en la misma forma %ue "imos con GsedG unas lecciones
atr(s. Se pueden hacer en poco tiempo cosas bastante comple3as. Por e3emplo "amos a hacer un
shell:script %ue #enere otro shell:script. Para ello primero lo %ue haremos es escribir el pro#rama
%ue deseamos #enerar.
echo GHHHHG
echo GHHHHGPhhhhG
Para #enerarlo bastar( tratar cada l)nea poniendo un Qecho GQ al comien'o de cada l)nea y una
comilla simple al final QGQ de cada l)nea pero antes escaparemos cual%uier posible comilla simple
%ue pudiera e+istir. Para ello editamos el te+to anterior y hacemos lo si#uiente:
:D s/PG/PGPPPGPG/#
:D s/^/echo PG/
:D s/N/PG/
Deber( %uedarnos de esta forma.
echo Gecho GPHHHHGPG
echo Gecho GPHHHHGPPGPGPhhhhGPG
<ueno lo hemos reali'ado con G"iG y a pesar de lo complicado del resultado solo hemos reali'ado
tres operaciones sencillas. Ahora e3ecute este fichero y "er( como obtiene el primero.
<ueno si no conoce C no le entusiasmar( este otro e3emplo pero eso de hacer pro#ramas %ue
#eneran pro#ramas nos sir"e para practicar las sustituciones usando G"iG. Podemos escribir el
pro#rama en C %ue deseamos #enerar y lue#o tratarlo sustituyendo todas las GPG por GPPG y todas las GQG
por GPQG. Es decir escapamos esos dos caracteres %ue dar)an problemas m(s tarde. ,ue#o a=adimos a
principio de cada l)nea Gprintf.QG y finali'amos cada l)nea con GPnQ2_G
,as sustituciones %ue acabamos de mencionar ser)an de esta forma.
:D s/PP/PPPP/#
:D s/Q/PPQ/#
:D s/^/printf.Q/
:D s/N/PPnQ2_/
$dicin de varios .ic7eros secuencialmente
Al editor G"iG se le puede pasar como ar#umento no solo un fichero sino "arios para ser editados en
secuencia. Por e3emplo:
N "i fich/ fich0 fich0
<ueno esto puede ser m(s $til de lo %ue parece a simple "ista. Jamos a suponer %ue tenemos %ue
modificar una #ran cantidad de ficheros para sustituir en muchos de ellos la cadena GacastroG por la
cadena GA.CastroG pero tampoco lo podemos hacer de forma autom(tica por%ue nos con"iene "er
caso a caso. Por eso pasamos a G"iG el resultado de una b$s%ueda con G#repG.
N "i \#rep :il acastro V.t+t\
*na "e' dentro del editor hacemos lo si#uiente.
:ar#s
El comando G:ar#sG nos informar( del nombre de los ficheros %ue "amos a editar secuencialmente.
6ntente probar esto creando sus propios ficheros de prueba. Xa sabe como hacerlo. Con"iene %ue
todos ellos ten#an una cadena id!ntica para ser locali'ada con #rep. *na "e' %ue el editor G"iG este
preparado para editar secuencialmente "arios ficheros bus%ue la cadena con el operador G/G y aun%ue
pasemos a editar el si#uiente fichero se conser"ar( almacenada la cadena de b$s%ueda. Esta forma
de traba3ar facilita mucho la modificaci&n de "arios ficheros.
Para editar ficheros secuencialmente le con"iene tener en cuenta los si#uientes comandos. Al#unos
no los hab)amos comentado toda")a.
:ar#s 5btiene la lista de los ficheros
:ne+t Pasa al fichero si#uiente
:pre" Juel"e al fichero anterior
:rewind Juel"e al primero
:rewindg Juel"e al primero abandonando los cambios en el fichero actual
:w Sal"a los cambios del fichero anterior
:% Sale del editor. .Solo si ya se han editados todos2
:%g Sale del editor incondicionalmente.
Edici&n simultanea de ficheros
Podemos pasar de la edici&n de un fichero a la edici&n de otro usando G:e ficheroG pero antes
deberemos sal"ar el contenido de la edici&n actual. 9ambi!n podemos for'ar el paso a editar otro
fichero con G:eg ficheroG pero en ese caso se perder(n las modificaciones reali'adas. *sando G:eWG
"ol"emos a retomar la edici&n del fichero anterior situados en la misma l)nea donde lo de3amos.
6ntente practicar lo si#uiente editando unos ficheritos de prueba.
:e fich/
:w
:e fich0
:eg fich1
:eW
Fisualizacin de caracteres de control
En G"iG los caracteres de control se "isuali'an como un acento circunfle3o y una letra. Por e3emplo
TC94,?EU se "isuali'ar( como G^EG y la manera de distin#uir un car(cter circunfle3o real se#uido
de una GEG es mo"iendo el cursor para "er si de despla'a uno o dos caracteres cuando pasamos por el
car(cter circunfle3o. 9ambi!n se usa con similar si#nificado el car(cter tilde GcG pero para caracteres
de R bits.
6ntroduciendo caracteres de control en el te+to
6ma#inemos %ue deseamos introducir un car(cter de control para pro"ocar un salto de p(#ina en la
impresora. Para ello deberemos introducir un TC94,?,U %ue ser( "isuali'ado como G^,G. ,a forma
de hacerlo es pulsar desde el modo inserci&n el car(cter TC94,?JU y a continuaci&n el car(cter
TC94,?,U. Es decir el car(cter TC94,?JU act$a como car(cter de escape. Podemos pulsar
TC94,?JU y lue#o una tecla de funci&n u otras teclas especiales.
9ambi!n se pueden buscar caracteres de control. Para ello tamb)en hay %ue introducirlos usando
TC94,?JU.
Edite un fichero de prueba y proceda a poner "arios saltos de p(#ina en distintos lu#ares. ,ue#o
bus%ue con G/G y con GSG los saltos de p(#ina. Pruebe a insertar los c&di#os de las teclas TEN9E4U y
TESCU mediante TC94,?JUTEN9E4U y TC94,?JUTESCU respecti"amente. Deber(n aparecer
como G^;G y como G^YG.
$l comando tilde
El comando GcG sustituye el car(cter situado ba3o el cursor de may$scula a min$scula y "ice"ersa
a"an'ando lue#o el cursor.
Operaciones con blo*ues
Se pueden marcar hasta 0L posiciones .GaG..G'G2 para un con3unto de uno o mas ficheros editados
simult(neamente. Permite traba3ar marcando principio y fin de blo%ues para mo"er copiar o borrar
en "arios ficheros. Se pueden usar las marcas en cual%uier comando en sustituci&n de G.G GNG o los
n$meros de l)nea como ya hemos "isto. ,a "enta3a es %ue si estamos insertando o borrando l)neas
tendr)amos %ue "ol"er a comprobar los n$meros de l)neas. Por el contrario si hemos colocado una
marca en una l)nea continuar( en esa l)nea mientras no la eliminemos. Para colocar una marca
podemos situarnos con el cursor en la l)nea deseada y lue#o hacer G:H Tletra:min$sculaUG G:ma Tletra:
min$sculaUG G:ma Tletra:min$sculaUG o directamente sin pasar al modo e+ mediante Gm Tletra:
min$sculaUG. Para practicar con ello edite un fichero de prueba y colo%ue "arias marcas en distintas
l)neas. ,ue#o realice distintas operaciones como por e3emplo el borrado de blo%ues. Compruebe
como desaparece una marca cuando se borra la l)nea %ue la contiene. ,as marcas no se "en pero si
intenta usar una marca %ue no e+iste obtendr( un error. Compruebe como reaparece la marca
cuando deshace la operaci&n con GuG .undo2. Al#unas formas de utili'aci&n de marcas son las
si#uientes.
:GaGb de
:GbGb?/ de
:Ga. de
:GaGb co Gc
:GaGb mo Gc
9ambi!n podemos posicionarnos en el lu#ar de una marca pulsando comilla:simple y Tletra:
min$sculaU desde el modo comandos. *n detalle interesante es %ue siempre podemos "ol"er a la
l)nea donde nos encontr(bamos la $ltima "e' %ue dimos un salto de posici&n en el te+to. Para ello
pulsamos .comilla:simple dos "eces2.
"epeticin del Hltimo comando
Cuando hay %ue hacer "arias "eces la misma cosa resulta tremendamente $til poder repetir el $ltimo
comando. 6ma#inemos %ue desde el modo de comandos hacemos en una l)nea G4,)nea TESCUG para
sustituir L caracteres por la cadena G,)nea G 6nmediatamente despu!s de ello y antes de hacer nin#una
otra cosa podr)amos situarnos en otra l)nea y pulsar G.G .punto2 para repetir ese mismo comando y
lue#o cambiar a otra y otra l)nea y "ol"er a pulsar G.G punto a cada "e' para efectuar el mismo
cambio en "arios sitios. 9amb)en mencionamos la posibilidad de e3ecutar un comando del sistema
operati"o lan'ando una sub:shell. Pues bien este tipo de comandos G: TcomandoUG puede ser
repetido usando G:ggG
#abulacin
El car(cter con la tecla T9A<U o con el car(cter TC94,?6U insertar( un car(cter de tabulaci&n. El
ancho de la tabulaci&n ser( por defecto i#ual a R espacios. Esto puede ser "ariado por e3emplo a K
con G:set tabstop@KG. Si deseamos a=adir un tabulador al principio de l)nea en las si#uientes M lineas
a la posici&n del cursor podemos hacer. GMUUG. 9amb)en se podr)a haber hecho lo mismo con G:..?M
UUG. Para insertar un tabulador a principio de cada l)nea del te+to ser)a G:D UUG Cuando se usa el
editor para editar fuentes de pro#ramas puede resultar $til usar la indentaci&n autom(tica. Gset aiG
para eliminar la indentaci&n autom(tica usaremos Gset noaiG. Si en al#una ocasi&n necesita sustituir
todos los tabuladores por caracteres en blanco use el comando Ge+pandG. No es un comando de G"iG
sino del S5. Consulte con el man su sinta+is y las distintas opciones. Para hacer una prueba edite un
fichero insertando tabuladores y lue#o con"iertalo de la si#uiente forma.
e+pand fichero U ficheroe+pandido.
!breviaturas
En G"iG hay muchos detalles pensdos a ahorrar pulsaciones de declas. Jamos a "er el comando G:abG
Si est( acostumbrado al uso de abre"iaturas le resultar( muy pr(ctico. Puede definir las abre"iaturas
%ue %uiera y una "e' tecleadas en modo entrada de dados .insercion o sobrescritura2 ser(n
sustituidas por la cadena %ue desee. Jamos a usar dos abre"iaturas una GciG para GCiberdroide
6nform(ticaG y otra G6N;75G para Gen mi humilde opini&nG. 9ambi!n "amos a listar las abre"iaturas
definidas.
:ab ci Ciberdroide 6nform(tica
:ab 6N;75 en mi humilde opini&n
:ab
*se sus propias abre"iaturas en un te+to y obser"e como la abre"iatura no ser( interpretada si la
secuencia de caracteres forma parte de una palabra.
5acros
Es posible pro#ramar macros. Por e3emplo "amos a hacer una macro %ue mue"a A l)neas al final del
fichero
:map +++ Add:N^;p
:map
Con esta macro ocurrir( al#o. En primer lu#ar si teclea las tres G+G se#uidas se e3ecutar(n los
comando GAddG .borrar cuatro lineas2 G:NTEN9E4UG .ir a la $ltima l)nea2 y GpG .recuperar el contenido
del buffer2 Si pulsamos una sola G+G notaremos %ue no pasa nada inmediatamente pero lue#o se
eliminar( un car(cter tal y como ocurre normalmente. Es decir la macro tiene un tiempo para ser
tecleada completamente en caso contrario no act$a. Para "er todas las macros definidas usaremos
G:mapG
Podemos eliminar la macro %ue acabamos de crear con GunmapG
:unmap +++
;uchas "eces se usan las macros para definir comandos asociados a teclas especiales. Para ello hay
%ue conocer la secuencia de caracteres %ue en")an esas teclas. Si en modo inserci&n usamos
TC94,?JUTF0U obtendremos G^YYY<G. Pero tambi!n podemos usar GTF0UG para definir macros.
Jamos a poner al#unos e3emplos pr(cticos.
F0 .Filtro PFP2 Firmar.
:map YY< /FgFp#p :satf 0U/de"/tty
Ser)a lo mismo si usaramos GTF0UG en lu#ar de G^YYY<G.
:map TF0U /FgFp#p :satf 0U/de"/tty
F1 .Filtro PFP2 Encriptar
:map YYC /FgFp#p :eatf 0U/de"/tty
FA .Filtro PFP2 Desencriptar y comprobar firma
:map YYD /FgFp#p 0U/de"/tty_ sleep M
FK .Filtro ispell2 Corrector orto#r(fico.
:map YYE :w
:gispell D
:eg
Opciones de vi
Ser)a absurdo pretender e+plicar en una lecci&n todo el editor G"iG. 9ampoco hay necesidad de ello.
7ay montones de opciones y ya hemos "isto al#unas. Si el editor es G"imG en lu#ar de G"iG el n$mero
de posibilidades es aun mayor. Puede "er las opciones disponibles y sus "alores actuales usando el
comando G:set allG desde el modo de comandos. No se asuste. No ha %ue conocerlas todas. 7ay
opciones %ue se#uramente la persona %ue las implement& ya ha ol"idado para %ue sir"en. *na
opci&n se puede indicar muchas "eces de dos formas. *na en forma completa y otra en forma
abre"iada. Por e3emplo G:set nuG en lu#ar de G:set numberG y para desacti"ar la opci&n se suele usar la
misma opci&n precedida de GnoG. Por e3emplo G:set nonuG o G:set nonumberG. ,as opciones %ue deben
tomar un "alor num!rico se establecen con el nombre de la opci&n se#uida de G@G y el "alor. Por
e3emplo G:set tabstop@KG
Con.i,uracin del editor
El fichero m(s est(ndar para confi#urar G"iG en cual%uier S5 de tipo *ni+ es Gc/.e+rcG. Como
alternati"a se puede usar ficheros m(s espec)ficos para el editor concreto %ue estemos usando. Por
e3emplo en el caso de G"imG tenemos Gc/."imrcG. Compruebe si e+iste un e3emplo G/etc/"imrcG en su
,inu+ y mire su contenido. Se trata de un fichero de e3emplo para copiarlo en G c/."imrcG Contiene
al#unas confi#uraciones %ue pueden resultar $tiles. El car(cter comilla doble GQG se usa para
considerar el resto de la l)nea como un comentario. Si considera %ue el editor tiene un
comportamiento %ue usted considera inc&modo %ui'(s se deba a la e+istencia de al#unas opciones
%ue no se adaptan al uso %ue usted da a su editor. Por e3emplo para editar pro#ramas C puede
resultar c&modo la auto: indentaci&n pero no le #ustar( %ue parta las l)neas autom(ticamente cuando
e+cedan un determinado ancho. 9ambi!n es buena idea incluir en su fichero de confi#uraci&n las
abre"iaturas y las macros %ue desee usar. Xa hemos "isto al#unas y se#uramente ya se ha
pre#untado como hacer para no tener %ue introducirlas cada "e'. Es bueno perder un poco de
tiempo en personali'ar el editor.
#a,
Para editar fuentes C por e3emplo resulta muy practico. Supon#amos %ue tenemos un fuente
llamado pin#pon#.c. Crearemos en primer lu#ar un fichero ta#s e3ecutando Qcta#s pin#pon#.cQ ."er
cta#s.C22. Se crea un fichero ta#s %ue contendr( por e3emplo lo si#uiente:
plot pin#pon#.c S^plot.+ y ch2NS
salir pin#pon#.c S^salir.s2NS
Con ello se referencian las funciones. Para editar el fichero podemos hacer "i :tplot. Aparecera el
cursor en la posici&n de esa funci&n. Si introducimos :ta salir desde el modo de comandos nos
situaremos en esa funci&n. Se pueden crear ta#s para "arios ficheros simult(neamente mediante
cta#s V/V.Ycf#Z ."er cta#s.C22. De esta forma podr)amos editar c&modamente "arios fuentes.
#est
Puede comprobar sus conocimientos respondiendo el si#uiente test.
Para ello seleccione las opciones %ue se a3usten a la "erdad y lue#o pulse el boton para "er el
resultado de su test.

/ Para locali'ar GN*SG pulsaremos G/N*SG desde el modo comandos.
0 ,os si#nos G.G G/G G.G G2G G`G G^G GVG GNG GSG G?G y GPG necesitan ser escapados con GPG para la b$s%ueda
en G"iG.
1 Para locali'ar l)neas "ac)as haremos G/^NG
A Pulsando Gma bG desde el modo comandos marcamos con la letra GbG la posici&n actual.
K Si definimos una macro para la secuencia GdddG no podremos usar el comando GddG
L Si definimos una abre"iatura GediG para la palabra Gedici&nG obtendremos Gedici&ntarG cuando
intentemos escribir GeditarG.
M Para ir a la marca GbG pulsaremos Q Gb Q .comilla simple GbG2
R Para copiar al final de te+to desde una linea anterior a la marca GaG hasta la marca GbG habr)a %ue
hacer Q :Ga:/Gb co N Q

16. ro,ramacin S7ell9Script %rimera parte&
Nu+ es un s7ell9script
Xa "imos hace al#unas lecciones una introducci&n al interprete de comandos de ,inu+ .shell2.
Jamos a ampliar nuestros conocimientos sobre la shell y si bien antes consideramos a la shell como
un interprete de comandos en esta lecci&n "eremos %ue es mucho m(s %ue eso. ,a shell de ,inu+
%ue "amos a usar es la <ash %ue como ya di3imos es un supercon3unto de la <ourne:Shell. Sin lu#ar
a dudas esta lecci&n le permitir( dar un salto enorme en el apro"echamiento de su S5 ,inu+.
Con esta lecci&n y las si#uientes nos acercamos al momento en %ue usted podr( presumir ante
al#unos de sus ami#os de haber reali'ado en su flamante S5 cosas %ue ellos no saben hacer con
Feindos aun%ue ellos podr)an presumir de su habilidad cerrando las "entanas del Feneral Failiure
y del Doctor Fuas&n.
El len#ua3e shell:script es muy "ers(til aun%ue hay %ue ad"ertir %ue es bastante ineficiente. Son
mucho m(s eficientes los pro#ramas escritos en len#ua3e C. Este es el len#ua3e en el %ue se escribi&
el Hernel de ,inu+ y otros muchos S5. El <ash no es tan eficiente como el C. El "alor del len#ua3e
shell:script es %ue permite hacer cosas complicadas con muy poco esfuer'o en perfecta
combinaci&n con una serie de comandos tambi!n muy potentes disponibles en ,inu+ . Jerdad %ue
suena interesante S Al#unas partes del S5 %ue no pertenecen al Hernel est(n escritas en shell:script.
Por e3emplo muchos comandos %ue se "an e3ecutando en secuencia mientras el sistema arranca son
pro#ramas reali'ados en shell:script as) %ue la ineficiencia no es nin#$n obst(culo para ciertas
tareas. Por el contrario para un administrador tener ciertos pro#ramas del sistema en shell:script le
permite retocarlos a su #usto con #ran facilidad.
Despu!s de hacer lo#in en el sistema obtendremos una sesi&n con el interprete de comandos
asociado a nuestro usuario. .Esta asociaci&n fi#ura en el fichero G/etc/passwdG 3unto %ui'(s con la
cla"e encriptada y otras cosas2. Decimos %ui'(s por%ue la cla"e no siempre es #uardada en este
fichero. ,a ra'&n es %ue pese a estar encriptada /etc/passwd es un fichero %ue cual%uiera puede leer
y resulta m(s se#uro otro sistema llamado shadow. -ue /etc/passwd sea le#ible nos permite
consultar entre otras cosas cual es nuestra shell en el inicio de una sesi&n. Desde esta sesi&n
podemos ir introduciendo ordenes desde el teclado pero nuestro interprete de comandos no de3a de
ser a su "e' un pro#rama normal como cual%uier otro as) %ue si tu"i!ramos %ue teclear "arias cosas
podr)amos #uardar estas ordenes en un fichero y rediri#ir la entrada est(ndar de la shell para %ue
tome la entrada desde el fichero en lu#ar de hacerlo desde el teclado.
Jamos a "er un e3emplo para mostrar fecha y hora en letras #randes. 9eclee el comando si#uiente:
N banner \date G?DD D9G\
Ahora "amos a practicar repasando un poco las nociones %ue ya "imos en el primer cap)tulo
dedicado al shell script por%ue son conceptos %ue con"iene asentar. Para ello "amos a #uardar este
comando en un fichero para poder e3ecutarlo cuando nos apete'ca. Pre"iamente nos situamos en el
directorio G/tmpG como es costumbre y nos ase#uramos de no estar usando el usuario root ni nin#$n
otro usuario con pri"ile#ios especiales.
N W Nos situamos en /tmp
N cd /tmp
N W Feneramos el fichero con el comando
N echo Qbanner \date G?DD D9G\Q U ficheroOordenes
N W Comprobamos el contenido del fichero
N cat ficheroOordenes
banner CR/C0/CC 0C:0L:1C
gg Jaya gg Esto no es lo %ue %uer)amos hacer. Este comando siempre mostrar)a la misma fecha y
hora y se#uramente no pretend)amos eso. Dado %ue hemos usado las dobles comillas se ha
producido la e+pansi&n de la l)nea de ordenes concretamente el operador #ra"e. Si en lu#ar de las
dobles comillas us(ramos las comillas simples no se habr)a producido ese error pero e+isten ya
comillas simples dentro del propio comando y la shell tomar)a el cierre de la comilla simple en un
lu#ar %ue no es el %ue nosotros dese(bamos. 9odo esto lo comentamos a modo de repaso. Entonces
como tendr)amos %ue haber #enerado este comando S A%u) es donde el listillo dice %ue usando un
editor de te+to. <ueno al fin de cuentas ya sabemos usar el G"iG no S <ueno pues "amos primero a
hacerlo sin editor. 4ecuerda %ue mencionamos la posibilidad de escapar un solo car(cter con el
car(cter GPG S 6ntentemos de nue"o.
N W Feneramos el fichero con el comando
N echo Qbanner P\date G?DD D9GP\Q U ficheroOordenes
N W Comprobamos el contenido del fichero
N cat ficheroOordenes
banner \date G?DD D9G\
Ahora si. Jamos a usar la shell de la misma forma %ue har)amos con un pro#rama normal
rediri#iendo la entrada est(ndar desde este fichero. Por lo tanto el fichero tiene tratamiento de datos
y solo se re%uiere permiso de lectura para e3ecutarlo de esta forma.
N W E3ecutamos
N bash T ficheroOordenes
N W 9ambi!n podemos e3ecutarlo de otra forma
N cat ficheroOordenes > bash
Para e3ecutarlo sin rediri#ir entrada salida podemos pasar como ar#umento el nombre del fichero.
Nue"amente solo har( falta permiso de lectura.
N W E3ecutar pasando el nombre del fichero como ar#umento
N sh ficheroOordenes
NF6N
$1ecucin de un s7ell9script directamente como un comando
Para e3ecutarlo directamente como un comando necesitamos darle permiso de e3ecuci&n.
N W E3ecutar pasando el nombre del fichero como ar#umento
N chmod ?+ ficheroOordenes
N ./ficheroOordenes
NF6N
,o del G./G antes del e3ecutable resultar( necesario si el directorio donde se encuentra el e3ecutable no
fi#ura en la "ariable GNPA97G En realidad ocurre al#o muy similar al caso anterior por%ue tambi!n
se arranca una sub:shell %ue toma como entrada el fichero.
Esto ocurre cuando la shell detecta %ue el e3ecutable est( en formato de te+to. Si se tratara de c&di#o
binario lo e3ecutar)a sin arrancar una sub:shell. Para a"eri#uar %ue tipo de fichero se trata la shell
mirar( los primeros cr(teres %ue contiene. ,os ficheros e3ecutables suelen tener un par de bytes
iniciales %ue ser"ir(n para identificar el tipo de fichero. En caso contrario se asume %ue es un shell:
srcip.
A estos dos caracteres iniciales 3untos forman lo %ue se denomina n$mero m(#ico. Es solo una
cuesti&n de nomenclatura. El S5 lo "e como un n$mero entero de dos bytes y nosotros desde un
editor lo "emos como dos caracteres.
E+iste un pro#rama llamado GfileG %ue utili'a esta informaci&n as) como la presencia de ciertos
patrones para identificar el tipo de un fichero.
Se usa el t!rmino script para ficheros %ue son le#ibles y e3ecutables. Es decir el propio fuente del
pro#rama es e3ecutable. Fuente de un pro#rama es lo %ue escribe el pro#ramador. El len#ua3e C no
es un len#ua3e tipo script ya %ue el fuente no es e3ecutable. 7ace falta un compilador %ue traduce el
c&di#o fuente a c&di#o propio de la m(%uina. ,os Script no se e3ecutan directamente en la m(%uina
sino dentro de un pro#rama %ue "a interpretando las instrucciones. <ueno en #eneral esto es m(s o
menos as).
7ay muchos tipos de scripts. ,a shell tiene su propio len#ua3e. E+iste un len#ua3e distinto llamado
GperlG %ue tambi!n se e3ecuta como un script. GperlG es un len#ua3e inspirado en el uso combinado del
interprete de comandos y al#unos comandos cl(sicos de los S5 tipo *ni+ y adem(s incorpora cosas
de otros len#ua3es como el GCG y otras cosas totalmente ori#inales. GperlG no es f(cil de aprender pero
es un len#ua3e de script muy potente. *n script de GperlG se puede e3ecutar mediante el comando Gperl
prueba.plG. El fichero Gprueba.plG deber( estar en len#ua3e GperlG. Si e3ecut(ramos directamente
G./prueba.plG desde bash el interprete de comandos intentar( e3ecutarlo como si fuera un script de
bash dando errores de sinta+is. Para e"itar esto se puede poner totalmente al principio del fichero
los caracteres GWgG Estos caracteres ser(n "istos como un n$mero m(#ico %ue a"isa %ue a
continuaci&n "iene el pro#rama a usar con ese script. Para el script de perl deber)a haber empe'ado
con GWg/usr/bin/perlG para poderlo e3ecutar directamente sin problema. Para un script de bash no es
necesario poner nada pero podr)amos haber puesto GWg/bin/bashG o GWg/bin/shG. De esta forma tambi!n
se puede indicar cual es la shell %ue deseamos usar ya %ue podr)amos desear usar otras shells como
GWg/usr/bin/cshG para la C:shell o GWg/usr/bin/HshG para la Eorn shell. A nosotros con el bash nos basta
y sobra.
$1ecucin con la s7ell9actual
7asta este momento siempre hemos arrancado una sub:shell %ue le)a las ordenes del fichero las
e3ecutaba y despu!s terminaba y mor)a cediendo el control nue"amente a la shell ori#inal %ue
arranc& la sub:shell.
E+iste una forma de decirle a la shell actual %ue lea y e3ecute una serie de ordenes por si misma sin
arrancar una sub:shell. Para ello hay %ue anteponer un punto y un blanco al nombre del comando.
Nue"amente solo har( falta permiso de lectura.
N W E3ecutar ordenes de un fichero desde la shell actual
N . ./ficheroOordenes
En este caso no se ha e3ecutado mediante una sub:shell pero no se aprecia nin#una diferencia. Esto
no siempre es as). Jeamos un e3emplo en el %ue se aprecie la diferencia. NN tomar( el "alor del pid
de la shell en e3ecuci&n y NPP6D tomar( el "alor del pid del proceso padre.
Necho echo PNPP6D PNN U ficheroOordenes
N bash ficheroOordenes
0/1 01BL
N . ./ficheroOordenes
/ 0/1
E"identemente cuando pruebe este e3emplo obtendr( un pid distinto de 0/1 pero lo interesante es
"er como ambas e3ecuciones establecen claramente %ue la primera fue efectuada por un proceso hi3o
de la shell %ue se e3ecuta en se#undo lu#ar usando el punto se#uido del espacio y del
GficheroOordenesG.
,os procesos hi3os heredan el entorno ."ariables y otras cosas2 desde el proceso padre por lo cual un
padre si puede comunicarse con su hi3o de esa forma. Por el contrario un proceso hi3o .sub:shell en
nuestro caso2 3am(s puede comunicarse de esa forma con su padre. 4esulta imposible %ue un
proceso hi3o comuni%ue "alores de "ariables del entorno a su padre. Si deseamos modificar
"ariables del entorno e3ecutando un shell:script no podremos hacerlo nunca si la e3ecutamos desde
dentro de una sub:shell. Por el contrario deberemos usar al#o del tipo G. ./ficheroOordenesG como
acabamos de "er.
E+iste un fichero en el directorio inicial de cada usuario %ue consiste en una serie de ordenes
iniciales para shell. En el caso de la <ash este fichero es Gc/.bashOprofileG. Podemos e3ecutarlo si
%ueremos pero este tipo de ficheros incluyen ordenes para iniciali'ar "ariables entre otras cosas as)
%ue lo adecuado ser)a e3ecutarlo desde la shell actual. 7a#a lo si#uiente:
N cd
N . ./.bashOprofile
5bser"e %ue hay tres puntos en el $ltimo comando con tres si#nificados distintos. El primero es
para e3ecutar con la shell:actual el se#undo es para indicar el directorio actual y el $ltimo forma
parte del nombre y se usa para %ue no sea tan "isible dado %ue un punto al principio del nombre de
un fichero no ser( e+pandido por la shell cuando usemos GVG.
Jamos a comprobar la acci&n del n$mero m(#ico. Pase a un directorio para practicar sus e3ercicios
y edite un nue"o fichero %ue debe llamarse Ga"isoG.
echo QError este shell:script debi& arrancarse con . /comandoQ
Ahora edite otro nue"o fichero %ue llamaremos GcomandoG.
Wg/bin/bash /tmp/a"iso
echo QC5;AND5Q
Jamos a e3ecutar nuestro shell:script de dos formas distintas y obser"amos %ue el resultado no es el
mismo. En el se#undo caso se e3ecuta el script Ga"isoG. Este $ltimo e3emplo no es completo ya %ue
G/bin/bash /tmp/a"isoG no actuar( interpretando sino de una forma independiente del te+to y mostrar(
siempre un mensa3e de a"iso.
N W ./2 Se e3ecuta usando una sub:shell pero en este
N W caso se pasa un ar#umento a la sub:shell y por ello
N W no se e3ecuta el c&di#o del fichero comando.
N chmod ?+ a"iso
N ./comando
Error este shell:script debi& arrancarse con . /comando
N W .02 Ahora e3ecutamos con la shell actual
N . ./comando
C5;AND5
,a e+plicaci&n es la si#uiente. El n$mero m(#ico indica con %ue shell se e3ecutar( el script.
Nosotros hemos puesto en lu#ar una shell sin ar#umetos %ue e3ecutar)a ese te+to una shell %ue
recibe un ar#umento. Eso hace %ue se e3ecute el comando pasado como ar#umento en lu#ar de
tomar el te+to del fichero %ue contiene el n$mero m(#ico. Cuando e3ecutamos con la shell actual la
informaci&n si#uiente al n$mero m(#ico no ser( tenida en cuenta por%ue supondr)a arrancar una
sub:shell.
Es un e3emplo rebuscado pero hay %ue intentar comprender lo %ue sucede en distintas situaciones
por%ue el len#ua3e shell:script tiene sus rare'as.
$1ecutar en una subs7ell usando par+ntesis
Xa %ue estamos con el tema de la subshell "amos a comentar como funciona el uso de los par!ntesis
desde la linea de &rdenes. No es necesario reali'ar un script para e3ecutar al#o en una subshell .lista2
E3ecuta una lista de ordenes en una subshell.
N "ar/@RRR
N . "ar/@///_ echo N"ar/ 2
///
N echo N"ar/
RRR
Estamos a"an'ando muy deprisa y por eso tenemos %ue practicar bastante para consolidar los
conocimientos. No siempre resulta tri"ial a"eri#uar como funcionan las cosas. 5bser"e el si#uiente
e3emplo:
N echo NN _ . echo NN _ . echo NN 2 2
0/R
0/R
0/R
Nue"amente el resultado puede ser distinto en su ordenador pero lo importante es %ue Gecho NNG
parece obtener el mismo pid pese a ocurrir en distintas sub:shells. Cuando parece ocurrir al#o
distinto de lo %ue nosotros esper(bamos resulta muy $til usar el modo tra'a con Gset :+G. 4epetimos
el e3emplo misterioso de antes.
N set :+
N echo NN _ . echo NN _ . echo NN 2 2
? echo 0/R
0/R
? echo 0/R
0/R
? echo 0/R
0/R
N set ?+
;isterio aclarado. 4ealmente no e3ecutamos nin#$n Gecho NNG sino %ue ya se e3ecuta directamente
Gecho 0/RG por%ue la shell lo primero %ue hi'o antes de e3ecutar las ordenes fu! e+pandir cada GNNG
presente en la l)nea de ordenes.
Ahora %ue ya sabemos %ue es un shell:script "amos a ir aprendiendo cosas pero no se pretende una
descripci&n e+hausti"a de la <ash. Puede consultar con man bash las dudas %ue ten#a. 4ecuerde
%ue el man no es una herramienta de estudio sino de consulta. Cuando consulte Gman bashG "er(
cantidad de informaci&n relati"a a cosas %ue no hemos e+plicado y man no e+plica casi nada. Por
ello muchas cosas de Gman bashG no las enteder( aun%ue siempre %ueda el recurso de probar las
cosas %ue no se comprenden para "er como funcionan.
Se ir(n proponiendo e3emplos %ue ilustren unas cuantos conceptos b(sicos. *na "e' %ue haya
practicado con estos e3emplos habremos conse#uido dar los primeros pasos en la pro#ramaci&n de
shell:script %ue son los %ue m(s cuestan. Despu!s un buen m!todo para continuar aprendiendo a
pro#ramar en shell:script es intentar comprender las shell:script %ue encontremos en el sistema con
ayuda del manual online de uni+.
El len#ua3e shell:script es un poco especial con relaci&n a otros len#ua3es ya %ue los blancos y los
saltos de l)nea tienen un si#nificado %ue hay %ue respetar y la e+pansi&n de ordenes es al#o %ue
puede resultar desconcertante. Eso lo hace un poco antip(tico al principio. Es importante tener una
buena base de conocimientos %ue en estos momentos ya tenemos y continuar practicando.
aso de par3metros a un s7ell9script
6ma#inemos %ue usted tiene dificultad para pasar de Ptas a Euros y %uiere hacer un pro#ramita para
pasar de una moneda a otra c&modamente. Edite el comando si#uiente y lue#o e3ecutelo en la
forma Gpta0eu 1KG:
Wpta0eu
echo N/ G/ /LL.1RLG > bc :l
En este caso N/ act$a como una "ariable %ue tomar( el "alor del primer par(metro. NC toma el "alor
del propio comando e3ecutado y N0 N1 etc el "alor de los par(metros se#undo y tercero
respecti"amente. ,a "ariable NW tomar( el "alor del n$mero de par(metros %ue usemos. ,a "ariable
NV toma el "alor de todos los par(metros concatenados. Jamos a poner un e3emplo %ue llamaremos
GpruOparametrosG. Debe editarlo darle permisos de e3ecuci&n con chmod ?+ por e3emplo y
e3ecutarlo pasando distintos par(metros. G./pruOparametrosG G./pruOparametros holaG
G./pruOparametros pararm/ param0 param1G.
W pruOparametros
echo QNumero de par(metros @ NWQ
echo GNC@G NC
echo GN/@G N/
echo GN0@G N0
echo GN1@G N1
echo GNV@G NV
,a e3ecuci&n de esta prueba %uedar)a como si#ue.
N ./pruOparametros
Numero de par(metros @ C
NC@ ./pruOparametros
N/@
N0@
N1@
NV@
N ./pruOparametros hola
Numero de par(metros @ /
NC@ ./pruOparametros
N/@ hola
N0@
N1@
NV@ hola
N ./pruOparametros pararm/ param0 param1
Numero de par(metros @ 1
NC@ ./pruOparametros
N/@ pararm/
N0@ param0
N1@ param1
NV@ pararm/ param0 param1
N
No e+iste la posibilidad de usar N/C para acceder al par(metro d!cimo. En lu#ar de acceder de esta
forma habr)a %ue usar un comando interno llamado GshiftG. El efecto de este comando es despla'ar
los ar#umentos una posici&n. De esta forma N/ se pierde y N0 pasar( a ser N/ N1 pasar( a ser N0
etc. Si e+ist)an m(s de /C par(metros ahora el d!cimo %ue antes era inaccesible pasar( a ser NB. NC
no "ar)a. Se pueden despla'ar "arios parametros de un #olpe pasando un n$mero a la funci&n GshiftG
por e3emplo Gshift KG despla'ar)a a K par(metros.
Jamos a editar un fichero de e3emplo %ue llamaremos GpruOshiftG: Debe editarlo darle permisos de
e3ecuci&n con Gchmod ?+ pruOshiftG y e3ecutarlo pasando distintos parametros. G./pruOshift pararm/
param0 param1G.5bser"e %ue es una prueba parecida a la anterior. 6ntente utili'ar sus conocimientos
de "i para no tener %ue teclear tanto. 4ecuerde %ue puede leer un fichero desde dentro del editor y
%ue puede duplicar blo%ues de informaci&n de "arias formas.
W pruOshift
echo QNumero de par(metros @ NWQ
echo GNC@G NC
echo GN/@G N/
echo GN0@G N0
echo GN1@G N1
echo GNV@G NV
shift
echo QNumero de par(metros @ NWQ
echo GNC@G NC
echo GN/@G N/
echo GN0@G N0
echo GN1@G N1
echo GNV@G NV
,a e3ecuci&n de esta prueba %uedar)a como si#ue.
N ./pruOshift pararm/ param0 param1
Numero de par(metros @ 1
NC@ ./pruOshift
N/@ pararm/
N0@ param0
N1@ param1
NV@ pararm/ param0 param1
Numero de par(metros @ 0
NC@ ./pruOshift
N/@ param0
N0@ param1
N1@
NV@ param0 param1
#est
Puede comprobar sus conocimientos respondiendo el si#uiente test.
Para ello seleccione las opciones %ue se a3usten a la "erdad y lue#o pulse el boton para "er el
resultado de su test.

/ El len#ua3e shell:script es muy eficiente en el apro"echamiento de la CP*.
0 Antes de e3ecutar un pro#rama shell:script hay %ue compilarlo.
1 Para e3ecutar un pro#rama shell:script hay %ue arrancar siempre una sub:shell.
A GPN/0G representa el par(metro n$mero /0.
K El n$mero m(#ico indica la clase de fichero e3ecutable.
L El uso de comandos e+ternos en shell:sript lo hace muy "ersatil.
M El uso de comandos e+ternos en shell:sript lo hace muy ineficiente.

1]. ro,ramacin S7ell9Script %Se,unda parte&
Qunciones
Se pueden definir funciones %ue podr(n ser llamadas por su nombre permitiendo el paso de
par(metros de la misma forma %ue cuando se llama a una shell. 9ambi!n puede de"ol"er c&di#os de
retorno. ,as "ariables alteradas dentro de una funci&n tienen efecto "isible fuera de la funci&n ya
%ue una funci&n no se e3ecuta in"ocando a una sub:shell. *na funci&n se puede definir en un shell:
script o en la propia linea de comandos. Si se hace esto $ltimo ser( como si a=adi!ramos un
comando interno.
N fff.2 a echo Q
Q _ b
N fff
Si tecleamos GsetG despu!s de esto "eremos todas las "ariables definidas y tambi!n aparecer( esta
funci&n %ue acabamos de crear.
N set
Ahora "amos a editar un shell:script %ue use una funci&n. Edite un fichero %ue llamaremos
GpruOfuncion/G %ue ten#a lo si#uiente.
W pruOfuncion/
W Funcion %ue muestra dos parametros de entrada y modifica una "ariable
funcion/.2
a
echo GTGN/GUG
echo G.GN0G2G
"ar@/01A
b
main
funcion/ /// 000
echo N"ar
Ahora damos permisos de e3ecuci&n y e3ecutamos simplemente mediante G./pruOfuncion/G.
N ./pruOfuncion/
T///U
.0002
11
/01A
Edite y pruebe el si#uiente c&di#o.
W Jisuali'ar los parametros del L al /A
function.2
a
shift K
echo N/ N0 N1 NA NK NL NM NR NB
b
main
funcion / 0 1 A K L M R B /C // /0 /1 /A /K /L /M
Para definir la sinta+is de una funci&n en shell:script podr)amos usar lo si#uiente:
OnombreOfuncionO .2 a OlistaOdeOordenesO b
*na lista de ordenes ser)a una o m(s ordenes separadas por al#$n operador como por e3emplo G_G G>>G
G``G G`G o . 4ecuerde %ue el shell:script tiene un si#nificado similar a G_G y si desea suprimir este
si#nificado deber( preceder inmediatamente con GPG para escapar el car(cter y %ue no sea
interpretado por la shell. En una cadena delimitada por comillas simples o dobles no tiene este
si#nificado pero puede usarse GPG para e"itar %ue el car(cter %uede insertado en la cadena.
N echo P
U HHHP
U +++
HHH+++
Cdi,os de retorno
,a palabra reser"ada GreturnG interrumpe la e3ecuci&n de una funci&n asi#nando un "alor al c&di#o
de retorno de esa funci&n. Su uso no es necesario al final de la funci&n. ,a palabra reser"ada Ge+itG
termina la e3ecuci&n de un shell:script liberando recursos y de"ol"iendo un c&di#o de retorno el
int!rprete de comandos. Ge+it CG terminar( retornando cero. Si solo ponemos Ge+itG el c&di#o
retornado ser( como si hici!ramos Ge+it NSG. Es decir retorna el "alor del $ltimo comando.
Ahora edite un fichero %ue llamaremos GpruOfuncion0G %ue ten#a lo si#uiente.
W pruOfuncion0
W Funcion %ue de"uel"e un c&di#o de retorno. X shell %ue de"uel"e otro
funcion0.2
a
"ar@/01A
return 11
"ar@AKLM
b
main
funcion0
echo NS
echo N"ar
e+it RRR
E3ecutaremos este e3emplo
N./pruOfuncion0
11
/01A
Comandos true y .alse
,os comandos %ue finali'an correctamente suelen retornar C. ,os %ue finali'an con al#$n error
suelen retornar un "alor distinto de C y de esa forma distintos c&di#os de retorno pueden indicar
distintas causas de error o no !+ito.
En una e+presi&n l&#ica donde lo %ue interesa es simplemente distin#uir entre al#o %ue se cumple o
%ue no se cumple se tomar( C como "alor l&#ico 94*E .o sea cierto2 y distinto de C se tomar(
como FA,SE .falso2.
GtrueG y GfalseG son comandos %ue no hacen nada. Simplemente retornan el "alor l&#ico 94*E o
FA,SE respecti"amente. El "alor de NS siempre de"uel"e el $ltimo c&di#o de retorno obtenido por
la shell despu!s de e3ecutar el $ltimo comando.
E3emplos:
N true _ echo NS
N false _ echo NS
/
Esperamos %ue e3emplos tan complicados como estos dos $ltimos no le desanimen para continuar
con el curso.
Comando test
Como ya di3imos el len#ua3e shell:script utili'a muy frecuentemente comandos e+ternos del sistema
operati"o. -ueremos e+plicar el comando GtestG antes de e+plicar las sentencias condicionales de
bash por%ue de esta forma podremos usar e3emplos m(s completos.
GtestG es un comando e+terno %ue de"ol"er( un c&di#o de retorno C o / dependiendo del resultado de
la e+presi&n %ue si#a a continuaci&n.
Se usa much)simo y tiene dos formatos. Gtest Te+prUG o GY Te+prU ZG. ambas formas son e%ui"alentes.
,as e+presiones de este tipo %ue solo pueden "aler 94*E o FA,SE se denominan e+presiones
l&#icas.
>>
Comprobaci&n sobre ficheros
>>
>> :r TficheroU >> 94*E si el fichero e+iste y es le#ible. >>
>> :w TficheroU >> 94*E si el fichero e+iste y se puede escribir. >>
>> :+ TficheroU >> 94*E si el fichero e+iste y es e3ecutable. >>
>> :f TficheroU >> 94*E si el fichero e+iste y es de tipo re#ular .normal2. >>
>> :d TficheroU >> 94*E si e+iste y es un directorio. >>
>> :c TficheroU >> 94*E si e+iste y es un dispositi"o especial de caracteres. >>
>> :b TficheroU >> 94*E si e+iste y es un dispositi"o especial de blo%ues. >>
>> :p TficheroU >> 94*E si e+iste y es un pipe .fifo2. >>
>> :u TficheroU >> 94*E si e+iste y tiene el bit set:user:6D. >>
>> :s TficheroU >> 94*E si e+iste y tiene tama=o mayor %ue C. >>
>>
Comparaci&n de cadenas
>>
>> :' TcadenaU >> 94*E si es una cadena "ac)a. >>
>> :n TcadenaU >> 94*E si es una cadena no "ac)a. >>
>> Tcadena/U @ Tcadena0U >> 94*E si ambas cadenas son id!nticas. 5d5 hay de3ar espacios
a un lado y otro del si#no i#ual para no confundir la orden
con una asi#naci&n. >>
>> Tcadena/U g@ Tcadena0U >> 94*E si son distintas. >>
>> TcadenaU >> 94*E si no es cadena nula. .*na "ariable %ue no e+iste
de"uel"e cadena nula2. >>
>>
Comparaci&n de n$meros
>>
>> Tnum/U :e% Tnum0U >> 94*E si ambos n$meros son i#uales. >>
>> Tnum/U :ne Tnum0U >> 94*E si ambos n$meros son distintos. >>
>> Tnum/U :#t Tnum0U >> 94*E si Tnum/U mayor %ue Tnum0U. >>
>> Tnum/U :#e Tnum0U >> 94*E si Tnum/U mayor o i#ual %ue Tnum0U. >>
>> Tnum/U :lt Tnum0U >> 94*E si Tnum/U menor %ue Tnum0U. >>
>> Tnum/U :le Tnum0U >> 94*E si Tnum/U menor o i#ual %ue Tnum0U. >>
>>
5peradores l&#icos
>>
>> g Te+presi&nOlo#icaU >> 5perador l&#ico N59 retorna 94*E si Te+presi&nOlo#icaU es
FA,SE y retorna FA,SE si Te+presi&nOlo#icaU es 94*E. >>
>> TE+pr,o#i/U :a TE+pr,o#i0U >> 5perador l&#ico AND retorna 94*E si TE+pr,o#i/U y
TE+pr,o#i0U son ambas 94*E y FA,SE en caso contrario. >>
>> TE+pr,o#i/U :o TE+pr,o#i0U >> 5perador l&#ico 54 retorna 94*E si TE+pr,o#i/U o
TE+pr,o#i0U son al#una de ellas 94*E y FA,SE en caso contrario. >>
>>
A#rupaci&n de e+presiones
>>
>> . Te+prU 2 >> Se pueden usar par!ntesis para a#rupar e+presiones l&#icas.
Es decir %ue "al#an 94*E o FA,SE >>
E3emplos:
N test :r /etc/passwd _ echo NS
N test :w /etc/passwd _ echo NS

/
N test :+ /etc/passwd _ echo NS

/
N test :c /de"/null _ echo NS
N test :r /etc/passwd :a :c /de"/null _ echo NS

N test :w /etc/passwd :a :c /de"/null _ echo NS

/
N test :r /etc/passwd :a :f /de"/null _ echo NS

/
N Y :s /de"/null Z _ echo NS
/
N Y g :s /de"/null Z _ echo NS
N Y QNNQ @ Q''''''''''''Q Z _ echo NS
/
N Y C :lt NN Z _ echo NS
N Y C :lt NN :a true Z _ echo NS
Comando expr
Este comando admite como par(metros los elementos de una e+presi&n aritm!tica pero hay %ue
recordar %ue al#unos operadores deben ser escapados con GPG. Por e3emplo .
N e+pr // PV 0
A diferencia de GbcG no podemos usar "alores demasiado altos por%ue el resultado no ser)a correcto.
4ecuerde %ue GbcG traba3a con precisi&n arbitraria.
El comando Ge+prG es $til pero no de3a de ser un comando e+terno y por lo tanto su uso resulta
ineficiente. Afortunadamente la propia shell tiene capacidad de e"aluar e+presiones aritm!ticas.
$xpresiones aritm+ticas dentro de Zas7
,a shell por defecto asume %ue todas las "ariables son de tipo cadena de caracteres. Para definir una
"ariable de tipo num!rico se usa Gtypeset :iG. Esto a=ade un atributo a esa "ariable para %ue la shell
realice una e+pansi&n distinta sobre esta "ariable. Para e"aluar una e+presi&n aritm!tica asi#n(ndola
a una "ariable usaremos GletG.
>> : ? >> ;enos un(rio y ;(s un(rio >>
>> V / D >> ;ultiplicaci&n Di"isi&n y 4esto >>
>> ? : >> Suma y 4esta >>
>> T@ U@ T U
aJ BB Comparaciones 5enor o i,ual,
5ayor o i,ual, 5enor, 5ayor
I,ualdad, desi,ualdad BB BB J :J IJ KJ ?J 9J BB !si,nacin simple,
!si,nacin con operador
%multiplicacin, divisin, resto, suma, y resta& BB
E3emplos:
N typeset :i 3@M
N typeset :i H
N typeset :i m
N echo N3
M
N let 3@3?1
N echo N3
/C
N let 3?@1
N echo N3
/1
N let H@3D1
N let m@3/1
N echo G.G Nm GV 1 2 ?G NH G@G N3
?A;A
. A V 1 2 ? / @ /1
Puede %ue el operador GDG no le resulte familiar. Es el operador resto tambi!n se llama m&dulo y es
lo %ue sobra despu!s de la di"isi&n. ,o cierto es %ue es preferible continuar e+plicando otras cosas y
m(s adelante tendremos oportunidad de poner al#unos e3emplos con e+presiones aritm!ticas.
7ay una serie de operadores %ue traba3an a ni"el de bits pero no "amos a e+plicarlos de momento.
5peradores G``G y G>>G
Son operadores AND y 54 a ni"el de shell y poseen circuito de e"aluaci&n corto. No tienen %ue "er
con los operadores :a y :o ya %ue estos eran interpretados por el comando GtestG. Estos operadores
G``G y G>>G ser(n colocados separando comandos %ue l&#icamente retornan siempre al#$n "alor.
GTcomando/U `` Tcomando0U `` Tcomando1UG si#nifica %ue debe cumplirse Tcomando/U y
Tcomando0U y Tcomando1U para %ue se cumpla la e+presi&n y GTcomando/U >> Tcomando0U >>
Tcomando1UG si#nifica %ue debe cumplirse Tcomando/U o Tcomando0U o Tcomando1U para %ue se
cumpla la e+presi&n.
Si el resultado de GTcomando/U `` Tcomando0U `` Tcomando1UG fuera C .94*E2 si#nificar)a
%ue los tres comandos han retornado C .94*E2. Si por el contrario el resultado hubiera sido distinto
.FA,SE2 solo sabr)amos %ue por lo menos uno de los comandos retorn& FA,SE. Supon#amos %ue
el primer comando retorn& 94*E. ,a shell deber( continuar e3ecutando el se#undo comando.
Supon#amos %ue el se#undo comando retorna FA,SE. En este momento la shell no continua
e3ecutando el tercer comando por%ue da i#ual lo %ue retorne el resultado ser( FA,SE. ,a ra'&n es
%ue se necesitaban todos 94*E para un resultado 94*E. El hecho de no e3ecutar las partes
si#uientes una "e' se sabe el resultado es lo %ue se llama circuito de e"aluaci&n corto y su uso
principal es el de ahorrar e3ecuciones de ordenes innecesarias aun%ue se puede usar tambien para
e3ecutar cosas solo ba3o ciertas condiciones.
Con el operador G>>G .542 pasa al#o similar. Si el resultado de GTcomando/U >> Tcomando0U >>
Tcomando1UG fuera / .FASE2 si#nificar)a %ue los tres comandos han retornado / .FA,SE2. Si por el
contrario el resultado hubiera sido distinto C .94*E2 solo sabr)amos %ue por lo menos uno de los
comandos retorn& 94*E. Supon#amos %ue el primer comando retorn& FA,SE. ,a shell deber(
continuar e3ecutando el se#undo comando. Supon#amos %ue el se#undo comando retorna 94*E.
En este momento la shell no continua e3ecutando el tercer comando por%ue da i#ual lo %ue retorne
el resultado ser( 94*E. Se necesitaban todos FA,SE para un resultado FA,SE.
*n comando normal como por e3emplo G#repG o GechoG %ue termina bien de"uel"e 94*E. Si
hubi!ramos rediri#ido la salida de G#repGo de GechoG a un fichero sin permiso de escritura o a un
fichero con un path ine+istente el retorno de G#repG o de GechoG habr)a sido FA,SE indicando la
e+istencia de error. En otras ocasiones FA,SE no indicar( error sino %ue el comando no tu"o !+ito.
Esto $ltimo ser)a aplicable a G#repG .patr&n locali'ado o no locali'ado2 pero no ser)a aplicable a un
comando como GechoG.
Jeamos un e3emplo con G#repG.
N echo hola > #rep hola _ echo NS
hola
N echo hola > #rep hola U /hh/hh/hh _ echo NS
bash: /hh/hh/hh: No e+iste el fichero o el directorio
/
N echo +++ > #rep hola _ echo NS
/
Cuando e3ecutamos comandos con un pipe .G>G2 el c&di#o de retorno es el del $ltimo comando
e3ecutado. En nuestro caso el primer c&di#o / se debe a la imposibilidad de #enerar la salida. El
se#undo c&di#o / se debe a %ue la cadena no fue encontrada. En los tres casos NS reco#e el c&di#o
retornado por G#repG.
Ahora "amos a probar e3emplos %ue ilustren el circuito de e"aluaci&n corto. Primero para 54
N W Como un 54 %ueda e"aluado cuando se encuentra el primer resultado 94*E
N W solo se e"aluaran los comandos hasta obtener el primero %ue de"uel"a
N W C .94*E2
N echo QholaQ >> echo Qadi&sQ
hola
N W El resultado sera C
N echo NS
Ahora para AND.
N W Como un AND no %ueda hasta %ue se e"al$a el primer resultado FA,SE
N W se e"aluaran los dos comandos y de"ol"er( i#ualmente 94*E.
N echo QholaQ `` echo Qadi&sQ
hola
adi&s
N W El resultado sera C
N echo NS
El circuito de e"aluaci&n corto ha de usarse correctamente. Si sabemos %ue un comando dar( casi
siempre un resultado %ue puede hacer innecesario la e3ecuci&n de otros comandos lo colocaremos
en primer lu#ar. ,os comandos lentos se colocan en $ltimo lu#ar por%ue de esa forma puede no ser
necesario e3ecutarlos. Al#unas "eces no nos interesa un resultado sino solo %ue se e3ecute una orden
dependiendo del resultado de otra orden. Es decir %ueremos e3ecutar solo si se cumple una
condici&n.
N test g :w fichero `` echo QCuidado fichero sin permiso de escrituraQ
N test :w fichero >> echo QCuidado fichero sin permiso de escrituraQ
#est
Puede comprobar sus conocimientos respondiendo el si#uiente test.
Para ello seleccione las opciones %ue se a3usten a la "erdad y lue#o pulse el boton para "er el
resultado de su test.

/ A,F5@Q[[[[[Q _ test PNA,F5 W Esto retorna 94*E
0 test QAAAQ g@ QKKKQ W Esto retorna 94*E
1 test / U A W Esto retorna 94*E
A typeset :i 3@M _ let 3:@0 _ test N3 :#t K W Esto retorna 94*E
K test :r /de"/null >> test :+ /de"/null >> test :s /de"/null W Esto retorna 94*E
L test :w /de"/null `` test :+ /de"/null `` test :s /de"/null W Esto retorna 94*E
M Ge+itG es un comando e+terno %ue termina la e3ecuci&n de un comando.
1^. ro,ramacin S7ell9Script %#ercera parte&
Sentencia condicional <i.<
Xa hemos "isto una forma de hacerlo usando los operadore G>>G o G``G de la shell pero e+isten
formas %ue pueden resultar m(s "ersatiles y m(s le#ibles.
if Ocondici&nO
then OlistaOdeOordenesO
Y elif Ocondici&nO
then OlistaOdeOordenesO Z ...
Y else Ocondici&nO Z
fi
En lu#ar de Ocondici&nO podr)amos haber puesto OlistaOdeOordenesO pero %ueremos resaltar %ue el
c&di#o de retorno "a a ser e"aluado.
,as partes entre corchetes son opcionales y si "an se#uidas de tres puntos G...G indica %ue puede
presentarse "arias "eces. 9odas las sentencias condicionales GifG empie'an con la palabra reser"ada
GifG y terminan con la palabra reser"ada GfiG.
;e3or "amos a ilustrar con al#unos e3emplos. Deber( editarlos y e3ecutarlos.
W Esto siempre mostrara G/01G
if true
then echo G/01G
fi
Acabamos de utili'ar una condici&n %ue siempre se cumplir(. Jamos a "er al#o un poco m(s util.
W Si la "ariable C;P49C/ est( definida y contiene el nombre de un fichero
W con permiso de lectura se mandar( a la impresora con GlpG
if test :r NC;P49C/
then lp NC;P49C/
fi
9ambi!n podemos pro#ramar una acci&n para cuando se cumpla una condici&n y otra para cuando
no se cumpla.
W Si ,a "ariable GmodoG contiene el "alor GlpG imprimir el fichero NF6C7
W en caso contrario sacarlo por pantalla.
if Y QNmodoQ @ QlpQ Z
then lp NF6C7
else cat NF6C7
fi
El si#uiente e3emplo editelo con el nombre GtipoficheroG. Nos ser"ir( para ilustrar el uso de GelifG y
para repasar al#unas de las opciones de GtestG.
W tipofichero
F6,E@N/
if test :b NF6,E
then echo NF6,E GEs un dispositi"o de blo%uesG
elif test :c NF6,E
then echo NF6,E GEs un dispositi"o especial de caracteresG
elif test :d NF6,E
then echo NF6,E GEs un directorioG
elif test :f NF6,E
then echo NF6,E GEs un fichero re#ular .ordinario2G
elif test :, NF6,E
then echo NF6,E GEs un ,inH simb&licoG
elif test :p NF6,E
then echo NF6,E GEs un pipe con nombreG
elif test :S NF6,E
then echo NF6,E GEs un SocHet .dispositi"o de comunicaciones2G
elif test :e NF6,E
then echo NF6,E GE+iste pero no sabemos %ue tipo de fichero esG
else echo NF6,E GNo e+iste o no es accesibleG
fi
Para usar este $ltimo e3emplo e3ectute G./tipofichero ..G o G./tipofichero tipoficheroG
9en#a en cuenta %ue si bien la GbashG admite el uso de GelifG %ui'as otras shell no lo admitan.
Setencia condicional <case<
Xa hemos "isto %ue con GelifG podemos e"aluar distintas condiciones pro#ramando una acci&n para
cada caso.
E+iste un caso especial. 6ma#inemos %ue deseamos e"aluar una "ariable y en funci&n de lo %ue
conten#a hacer una cosa u otra. Podr)amos usar una sentencia condicional con abundantes GelifG pero
hay %ue tener en cuenta una cosa. Con GelifG tenemos %ue ir e"aluando a cada paso hasta %ue se
cumpla una "e' y entonces se e3ecuta la acci&n y ya no se e3ecuta nin#una otra por%ue habremos
finali'ado. En el caso anterior si hubieramos introducido el nombre de un pipe con nombre se
habr)an e3ecutado "arios test antes de determinar %ue era un pipe con nombre y eso resulta lento.
Si lo %ue deseamos hacer est( en funci&n de un "alor utili'aremos la sentencia condicional GcaseG
%ue es mucho m(s eficiente por%ue no re%uiere e3ecutar "arias ordenes o una orden "arias "eces
como en el caso anterior.
,a sinta+is para la sentencia condicional GcaseG ser)a de la si#uiente forma:
case "alor in
Y OlistaOdeOpatronesO 2 OlistaOdeOordenesO __ Z ...
esac
Por "alor %ueremos indicar el resultado de cual%uier e+pansi&n producida por la shell. ,a
OlistaOdeOpatronesO son uno o m(s patrones separados por el caracter G>G y cada patr&n es del mismo
tipo %ue los patrones utili'ados para la e+pansi&n de nombres de ficheros. El orden es importante
por%ue se "an comprobando por orden y en el momento %ue uno de los patrones corresponda con el
"alor se e3ecutar( la OlistaOdeOordenesO %ue le corresponda y ya no se e3ecutar( nada m(s. Es
frecuente utili'ar en $ltimo lu#ar un patr&n GV2G para %ue en caso de no encontrar nin#una
correspondencia con los patrones anteriores se e3ecute siempre una acci&n por defecto. Edite el
si#uiente e3emplo y sal"elo con nombre GpruebaOcaseG.
W pruebaOcase
case N/ in
/2 echo *no __
02 echo Dos __
Y1:MZ2 echo QEntre tres y siete ambos incluidosQ __
R>B>C2 echo 5cho_ echo Nue"e_ echo Cero __
Ya:'A:]Z2 echo *na ,etra __
start>be#in2 echo Comien'o __
stop>end2 echo Fin __
V2 echo GFalloG
esac
Ahora le damos permiso de e3ecuci&n y probamos como funciona.
N ./pruebaOcase /
*no
N ./pruebaOcase 0
Dos
N ./pruebaOcase M
Entre tres y siete ambos incluidos
N ./pruebaOcase h
*na ,etra
N ./pruebaOcase start
Comien'o
N ./pruebaOcase be#in
Comien'o
N ./pruebaOcase aa
Fallo
N ./pruebaOcase /0
Fallo
N ./pruebaOcase B
5cho
Nue"e
Cero
N ./pruebaOcase stop
Fin
4ecuerde %ue la e3ecuci&n de una orden e+terna en un shell:srcipt es una operaci&n costosa. 7acer
un script ineficiente puede no tener nin#una importancia dependiendo del uso %ue le demos y de lo
sobrada de recursos %ue est! la m(%uina pero en otros caso si ser( m(s importante as) %ue haciendo
las cosas lo me3or posible estaremos preparados en un futuro para traba3os m(s e+i#entes.
$ntrada de datos con read
,a instrucci&n GreadG permite capturar datos desde la entrada estandar. Para ello %ueda a la espera de
un fin de linea. Edite el fichero si#uiente y llamel& GpruOreadG.
echo :e Q6ntrodu'ca su nombre : PcQ
read N5;<4E
banner 7ola NN5;<4E
E3ecute G./pruOreadG. 5bser"e %ue los datos introducidos son #uardados en la "ariable N5;<4E. Si
pulsa directamente la "ariable tomar( "alor . Cuando se usa la instrucci&n GreadG sin una "ariable el
contenido se #uardar( en la "ariable 4EP,X pero si lo %ue desea es #uardar el contenido %ueda m(s
claro #uardarlo en una "ariable concreta. ;(s adelante "eremos e3emplos %ue usan esta instrucci&n.
<ucles GwhileG y GuntilG while Ocondici&nO:::do ::: OlistaOdeOordenesO:::done :::En lu#ar de
Ocondici&nO podr)amos haber puesto OlistaOdeOordenesO pero %ueremos resaltar %ue el c&di#o de
retorno "a a ser e"aluado. ;ientras se cumpla la condici&n se e3ecutar( OlistaOdeOordenesO. 4esulta
e"idente %ue si dentro de la OlistaOdeOordenesO no hay nada capa' de alterar la condici&n resultar(
un blucle %ue se e3ecutar( de forma ininterrumpida. .<ucle infinito2. Si esto ocurre habr( %ue matar
el proceso en"iando al#una se=al. E+iste un bucle muy similar y %ue solo se diferencia en %ue no
para nunca hasta %ue se cumpla la condici&n. Es decir 3usto al re"!s %ue antes. :::until Ocondici&nO
:::do::: OlistaOdeOordenesO:::done :::Edite como GpruOwhile/G el si#uiente e3emplo. W
pruOwhile/:::W 7acer un bucle de captura por consola .terminara cuando se pulse:::W solo
T6N945U 2 y mostrar el resultado de cada captura entre parentesis.:::W 6niciali'amos primero la
"ariable ,6NEA con un "alor cual%uiera:::W pero distinto de
,6NEA@Q+Q
while test N,6NEA
do
read ,6NEA
echo G.GN,6NEAG2G
done
Cuando pulsemos T6N945U directamente sin nada m(s ,6NEA "aldr( y Gtest N,6NEAG de"ol"er(
FA,SE y el bucle finali'ar(. Jamos a e3ecutar el e3emplo para comprobar su funcionamiento. :::N
./pruOwhile/:::aaaaa .aaaaa2 bbbbb .bbbbb2 :::.2 Jemos %ue en la $ltima e3ecuci&n ,6NEA "al)a .
Zucle <.or<
Se proporciona una lista de elementos y se e3ecuta una lista de &rdenes haciendo %ue una "ariable
"aya tomando el "alor de cada uno de estos elementos. Entre estas ordenes se puede utili'ar un
nue"o bucle GforG.
El si#uiente e3emplo funciona pero es una mala idea ya %ue supone Jarias e3ecuciones de un
comando cuando se pod)a haber hecho con uno solo. 7abr)a sido me3or hacer Gchmod ?+ VG.
for i in NV
do
chmod ?+ Ni
done
El si#uiente e3emplo no funcionar( si no prepara un poco una serie de cosas %ue se necesitan.
Concretamente deber( de e+istir un fichero GlistaG con "arios elementos. Jarios ficheros con nombre
%ue empiecen por SCAN. Jarios ficheros GV.docG de los cuales al#unos deberan contener la palabra
GC5D6F5G. Estudie el contenido del e3emplo %ue si#ue. Editelo y e3ecutelo pasando "arios
ar#umentos. Su ob3eti"o es hacerlo funcionar y entender como funciona.
W Para "er distintos modos de mane3ar listas "amos a #enerar todos los
W nombres posibles formados por combinacion de las partes si#uientes:
W Como parte / los nombres de ficheros de directorio actual %ue
W empie'an por GSCANG.
W Como parte 0 los nombres contenidos en el fichero GlistaG.
W Como parte 1 los identificadores Gc++C c++0 b++KG
W Como parte A la lista de parametros N/ N0 N1 .. etc
W Como parte K los ficheros GV.docG %ue contienen la palabra GC5D6F5G.
#
for i in `ls SCAN*`
do
for j in `cat lista`
do
for k in cxx0 cxx2 bxx5
do
for l in $*
do
for m in `grep -l "CODIGO" *.doc`
do
echo $i.$j.$k.$l.$m
done
done
done
done
done
Cuando tengamos bucles unos dentro de otros decimos que son bucles
anidados. El nivel de anidamiento de un bucle es el nmero de
bucles que hay unos dentro de otros.
'break' y 'continue'
Existe una forma de controlar un blucle desde el interior del
mismo. Para eso podemos usar 'break', o 'continue'. Se pueden usar
en cualquiera de los bucles que acabamos de ver (while, until, y
for).
La palabra reservada 'break' provoca la salida de un bucle por el
final. Si viene seguido de un numero 'n' saldr de 'n' niveles. No
poner nmero equivale a poner el nmero 1.
La palabra reservada 'continue' provoca un salto al comienzo del
bucle para continuar con la siguiente iteracin. Si viene seguida
de un numero 'n' saldr de 'n' niveles.
# pru_break_continue
# Definir la variable j como una variable de tipo entero e
# inicializarla a cero. Luego la incrementamos a cada iteracin
# del bucle y si j es menor que diez mostramos el doble de su
valor.
# y en caso contrario salimos del bucle
typeset -i j=0
while true
do
let j=j+1
if [ $j -et 3 ]
then continue
fi
if [ $j -et 4 ]
then continue
fi
if [ $j -lt 10 ]
then expr $j \* 2
else break
fi
done
Probamos ahora a ejecutarlo y obtendremos
$ ./pru_break_continue
2
4
10
12
14
16
18
Ahora edite y pruebe el siguiente ejemplo que llamaremos
'pru_break_continue2'
# ./pru_break_continue2
for i in uno dos tres
do
for j in a b c
do
for k in 1 2 3 4 5
do
echo $i $j $k
if [ "$j" = "b" ]
then break
fi
if [ "$k" = "2" ]
then continue 2
fi
done
done
done
El resultado de la ejecucin sera como sigue.
$ ./pru_break_continue2
uno a 1
uno a 2
uno b 1
uno c 1
uno c 2
dos a 1
dos a 2
dos b 1
dos c 1
dos c 2
tres a 1
tres a 2
tres b 1
tres c 1
tres c 2
Arreglos
Vamos a estudiar ahora un tipo de variables que se caracterizan
porque permiten guardar valores asociados a una posicin. Los
llamamos 'arreglos' (en ingles array) tambin se pueden llamar
tablas. En el siguiente ejemplo usaremos una varirable 'tab[]' que
se comporta como si estuviera formada por varias variables.
tab[1], tab[2], tab[3], etc... Vamos a ilustrarlo con un ejemplo
que tiene un poco de todo. Se trata de un programa que debe
estudiar detenidamente.
# Desarrollar una funcin que admita un parametro de entrada. Si
el
# parametro de entrada contiene una cadena que ya esta almacenada
en
# la tabla 'tabnom' retornar sin mas, pero si no esta aadir esa
# palabra a la tabla.
GuardaNombre(){
# Si numero de parametros distindo de 1 salir con error.
if [ $# -ne 1 ]
then
echo "Numero de parametros invalido en GuardaNombre()"
return 2
fi
typeset -i j=1
for var in ${tab[*]}
do
if [ $var = $1 ]
then
ind=$j
return 1
fi
let j=j+1
done
ind=$j
tab[$ind]=$1
return 0
}
main
while true
do
echo -e "Introduzca algo o puse <INTRO> directamente para
finalizar : \c"
read DATO
if [ ! "$DATO" ]
then break
fi
GuardaNombre $DATO
done
echo "Ahora visualizamos los datos introducidos"
for l in ${tab[*]}
do
echo $l
done
echo 2 ${tab[2]}
echo 1 ${tab[1]}
El resultado de ejecutar esto introduciendo una serie de datos
sera como sigue:
Introduzca algo o puse <INTRO> directamente para finalizar : hhhhh
Introduzca algo o puse <INTRO> directamente para finalizar : jjjj
Introduzca algo o puse <INTRO> directamente para finalizar : jjjj
Introduzca algo o puse <INTRO> directamente para finalizar : jjjj
Introduzca algo o puse <INTRO> directamente para finalizar :
ooooooooo
Introduzca algo o puse <INTRO> directamente para finalizar : kk
Introduzca algo o puse <INTRO> directamente para finalizar :
Ahora visualizamos los datos introducidos
hhhhh
jjjj
ooooooooo
kk
2 jjjj
1 hhhhh
Con esto comprobamos que podemos acceder no solo a la lista
completa de los datos introducidos sino a uno solo de ellos
proporcionando un nmero con la posicin donde el dato ha sido
almacenado.
Tambin comprobamos que el valor 'jjjj' se ha indroducido varias
veces pero nuestro programa solo lo guarda una vez gracias a que
antes de guardar cada valor se comprueba si dicho valor ya fe
guardado antes.
Un ejempo sencillo: Construccin de un menu
#
muestraopcionesmenuprin() {
clear
echo '1) Fecha y hora'
echo '2) Calendario del ms actual'
echo '3) Calendario del ao actual'
echo '4) Calculadora de precisin arbitraria'
echo '5) Lista de usuarios conectados'
echo '6) Memoria libre del sistema'
echo '7) Carga del sistema'
echo '8) Ocupacion de todo el sistema de ficheros'
echo '0) Terminar'
echo
echo -e "Introduzca la opcin deseada : \c"
}
#
pausa () {
echo
echo -e "Pulse para continuar"
read
}
#
W ;A6N #
#
while true
do
muestraopcionesmenuprin
read OPT
clear
case $OPT in
3|7) echo "Para salir deber pulsar 'q'" ; pausa ;;
4) echo "Para salir deber introducir 'quit'" ; pausa ;;
esac
echo ; echo
case $OPT in
0) exit ;;
1) date ; pausa ;;
2) cal ; pausa ;;
3) cal `date +%Y` | less ;;
4) bc ;;
5) who -iTH ; pausa ;;
6) cat /proc/meminfo ; pausa ;; # Podra usarse el comando free
7) top -s ;;
8) df ; pausa ;;
*) echo -e "Opcion erronea.\a" ; pausa ;;
esac
done
echo
echo
Vamos a comentar algunos aspectos de este programa. Comienza con
'while true' (Antes de esto lo que hay es la declaracin de un par
de funciones). Un programa as se ejecutara en un bucle sin fin
pero existe una instruccin 'exit' en medio del programa para
finalizar cuando se elija la opcin adecuada.
Primero se llama a una funcin 'muestraopciones' que nos muestra
las opciones disponibles y nos invita a introducir una de ellas
que gracias a la instruccin read ser almacenada en la variable
OPT. El contenido de esta variable se usa en un par de sentencias
'case'. La primera solo considera si es alguna de las opciones
'3,7, o 4' y en funcin de ello muestra un mensaje adicional. El
segundo 'case' sirve para desencadenar la funcionalidad elegida.
Existe un '*)' que sirve para advertir que la opcin introducida
no es correcta. Quizs ya ha notado que en ocasiones usamos la
opcin -e con echo. Esto se hace cuando usamos un caracter
especial que debe ser interpretado como en el caso de '\a' (emite
un pitido), o como '\c' (evita el salto de carro). El comando
'clear' se usa para limpiar la pantalla.
El coste de los comandos externos
Estamos acostumbrados a usar comandos externos como forama de
apoyo a la programacin en shell-script. Esto es muy normal y el
SO tiene una gran cantidad de comandos que estan diseados para
poderlos combinar unos con otros mediante entrada salida.
A pesar de esto el uso de comandos externos tiene un coste muy
elevado en comparacin con el de los comandos internos,
implementados en la propia shell. Por esto conviene siempre que
sea posible usar estos ltimos. En caso contrario tampoco se
notar mucha diferencia cuando los usemos en medio de un proceso
interactivo. En estos la lentitud de respuesta del usuario no
permite apreciar la ventajas de una programacin efeciente. Donde
si se apreciar esta diferencia es cuando usemos comandos dentro
de bucles. Para ilustrar lo que decimos usaremos un programita de
ejemplo que simplemente utilice un contador de bucle incrementado
una variable.
# Bucle con let (comando interno)
typeset -i N=0
time while [ $N -le 20000 ]
do let N+=1
done
real 0m1.413s
user 0m1.070s
sys 0m0.030s
# Bucle con expr (comando externo)
typeset -i N=0
time while [ $N -le 100 ]
do N=`expr $N + 1`
done
real 0m1.311s
user 0m0.230s
sys 0m0.060s
Ambas pruebas tardan aproximadamente lo mismo pero el primer bucle
ejecuta 20000 iteraciones y el segundo solo 100. Es decir que el
uso del comando externo hace el comando unas 200 veces ms lento.
Quizs piense que es culpa de expr y en parte es cierto pero lo
realmente importante es que hay que arrancar una subshell la cual
arrancar expr para luego tomar la salida estandar y expandirlo
todo correctamente. Esto comporta abrir los respectivos ficheros
de esos ejecutables y abrir un fichero es algo que requiere un
trabajo que no tiene lugar cuando ejecutamos comandos internos de
la shell.
Recomendaciones finales
Acabamos de explicar un programa muy sencillo. Compliquelo un poco
aadiendo una opcin 9 que muestre un submen que entre otras
cosas contenga una opcin que vuelva al men principal. Use su
imaginacin y parctique para intentar mejorarlo.
En estos momentos ya dispone de toda la base de conocimientos que
le permitir personalizar su entorno de trabajo o construir
sencillos scripts que le ayuden a realizar una gran variedad de
tareas, o tambin puede investigar algunos de los programas del
sistema escritos en shell-script. Si se conforma con lo estudiado
y no intenta ponerlo en prctica pronto lo olvidar todo.
Practique la programacin en shell-script ya mismo antes de que
olvide la tehora. Empiece por las cosas que hemos explicado pero
no se quede en eso. Intente llegar un poco ms lejos.
En las lecciones que siguen continuaremos tratando temas que
abrirn nuevas puertas a su conocimiento. En ningn caso podemos
detenernos excesivamente en ninguna de ellas. A la programacin en
shell-script la hemos dedicado varias lecciones y anteriormente
dedicamos algunos ms a la shell como interprete de comandos, pero
ha llegado el momento de decir que debe de poner mucho de su parte
y que existe el 'man bash' para buscar las cosas que no pudimos
explicar aqu.
No vamos a incluir ningn test ahora en lugar de ello y a riesgo
de resultar pesados vamos a insistir. Practique ahora por su
cuenta.
1Y. 'ociones de pro,ramacin en aDP
Nu+ es aDP y para *ue se usa
,a palabra GawHG se usa tanto para referirse a un len#ua3e de manipulaci&n de ficheros de datos como
para referirse a su interprete.
Dado %ue los S5 tipo *ni+ incluido ,inu+ acostumbran con mucha frecuencia a usar ficheros de
confi#uraci&n del sistema en formatos de de te+to perfectamente le#ibles y editables se dise=o un
len#ua3e para poder procesar este tipo de ficheros de datos en formato de te+to.
Cuando un pro#rama necesita una "elocidad muy alta para acceder a unos datos o para modificarlos
se utili'an estructuras de datos m(s sofisticadas.
En muchos otros casos un fichero de confi#uraci&n ser( accedido de forma muy ocasional y resulta
m(s interesante usar un formato de te+to sencillo. Por e3emplo hay ficheros de confi#uraci&n %ue
solo se usan durante la car#a de un pro#rama. Al#unos de estos pro#ramas suelen car#arse una sola
"e' mientras arranca el sistema y lue#o en condiciones normales permanecen arrancados todo el
tiempo.
GawHG naci& en /BMR como un len#ua3e pe%ue=o y sencillo pero desde entonces ha e"olucionado
mucho y en la actualidad se puede afirmar %ue es un len#ua3e muy potente y "ers(til. 6mposible
tratarlo en profundidad en un curso como este.
GawHG es un complemento muy bueno para su uso con shell:script. Esta lecci&n no "a a condicionar
la asimilaci&n de lecciones posteriores pero recomendamos %ue como m)nimo le de un bre"e repaso
ya %ue GawHG puede resultar e+tremadamente $til en determinadas circunstancias.
Nos "amos a conformar con e+plicar unas pocas cosas por%ue con ello conse#uiremos dos
ob3eti"os. El primero %ue pueda usarlo para un limitado tipo de tareas bastante frecuentes y el
se#undo %ue cono'ca su e+istencia y para %ue se usa. De esta forma puede ampliar conocimientos
por su cuenta cuando lo necesite.
Nos "amos a centrar en el procesamiento de datos en los cuales cada l)nea estar( estructurada en
campos. Estos campos estar(n delimitados entre si por al#$n car(cter o por al#una secuencia
especial de caracteres especialmente reser"ado para ello. Esta secuencia ser( el delimitador de
campos y no debe aparecer en el interior de nin#$n campo. Cada l)nea e%ui"ale a un re#istro.
,a mayor)a de las bases de datos y ho3as de c(lculo permiten "olcar los datos en formato de te+to
para poder ser e+portados entre distintas bases de datos. Estas salidas se pueden procesar f(cilmente
mediante GawHG. 9ambi!n se puede usar GawHG con la salida de di"ersos pro#ramas. Esto permite
entre otras cosas usar GawHG para acoplar una salida de un pro#rama con la entrada de otro %ue
necesite un formato muy distinto. En definiti"a "amos a e+plicar solo una pe%ue=a parte de este
potente len#ua3e pero comprobar( su #ran utilidad muy pronto.
Qorma de uso
GawHG suele estar instalado en la mayor)a de los sistemas ya %ue su uso suele ser necesario. Por eso
en ,inu+ suele encontrarse entre los pa%uetes b(sicos del sistema en todas las distribuciones.
Se puede usar de "arias formas. 9enemos %ue pasar a GawHG el te+to del pro#rama y los datos. El
primero se puede pasar bien como ar#umento o indicando :f nombre del fichero %ue contiene el
te+to del pro#rama. ,a entrada se puede pasar dando el nombre del fichero de entrada como $ltimo
ar#umento o en caso contrario lo tomar( por la entrada est(ndar.
N Generamos en /tmp un par de ficheros
$ echo -e "\n" > /tmp/echo.out
$ echo '{ print "Hola mundo" }' > /tmp/ejemplo1.awk
$ E3ecutaremos el mismo pro#rama de A formas distintas
N echo :e QPnQ > awH Ga print Q7ola mundoQ bG
7ola mundo
7ola mundo
N awH Ga print Q7ola mundoQ bG /tmp/echo.out
7ola mundo
7ola mundo
N echo :e QPnQ > awH :f /tmp/e3emplo/.awH
7ola mundo
7ola mundo
N awH :f /tmp/e3emplo/.awH /tmp/echo.out
7ola mundo
7ola mundo
El pro#rama %ue acabamos de utili'ar imprimir( el literal Q7ola mundoQ a cada l)nea de datos %ue
procese. En este caso usamos solo un par de l)neas "ac)as como entrada de datos.
Jamos a locali'ar el binario de GawHG
N whereis awH
/usr/bin/awH
Jamos a suponer %ue en su sistema se encuentre tambi!n en G/usr/binG. Puesto %ue awH es un
len#ua3e interpretado perfectamente le#ible tambi!n podemos decir %ue los pro#ramas de awH son
script. Para poder usarlos directamente podemos a=adir una primera l)nea con n$mero m(#ico y
poner permiso de e3ecuci&n.
N echo GWg/usr/bin/awH :fG U /tmp/e3emplo0.awH
N echo Ga print Q7ola mundoQ bG UU /tmp/e3emplo0.awH
N chmod ?+ /tmp/e3emplo0.awH
N echo :e QPnQ > /tmp/e3emplo0.awH
7ola mundo
7ola mundo
$structura de un pro,rama aDP
*n pro#rama GawHG puede tener tres secciones distintas.
Puede incluir una primera parte para %ue se e3ecute antes de procesar nin#una de las l)neas de
entrada. Se usa para ello la palabra reser"ada <EF6N se#uida de una o mas instrucciones todas ellas
en#lobadas dentro de un par de corchetes. GaG GbG.
Puede incluir una parte central %ue se procesar( entera para cada linea de entrada de datos y %ue
puede tener "arios blo%ues GaG GbG. Si uno de estos blo%ues contiene una e+presi&n re#ular se
procesar( solo cuando la l)nea de entrada se a3uste al patr&n de la e+presi&n re#ular.
Puede incluir una parte final %ue se procesar( en $ltimo lu#ar una "e' termine la lectura y
procesado de todas las l)neas de entrada. Se usa para ello la palabra reser"ada END se#uida de una
o m(s instrucciones todas ellas en#lobadas dentro de un par de corchetes. GaG GbG.
El primer e3emplo %ue "imos anteriormente .Q7ola mundoQ2 solo ten)a una de las tres partes.
Concretamente era la parte central ya %ue no pusimos nin#una de las palabras reser"adas <EF6N o
END.
Jamos a poner ahora un e3emplo con las tres partes. Edite un fichero con nombre G/tmp/1partes.awHG
<EF6N a print QErase una "e'...Q b
a print Q...y entonces bla bla bla ...Q b
END a print Q...y color)n colorado este cuento se ha acabado.Q b
E3ec$telo con:
N echo :e QPnPnPnQ > awH :f /tmp/1partes.awH
hAma Erase una "e'...
...y entonces bla bla bla ...
...y entonces bla bla bla ...
...y entonces bla bla bla ...
...y entonces bla bla bla ...
...y color)n colorado este cuento se ha acabado.
Es importante %ue comprenda %ue la parte central se e3ecutar( tantas "eces como l)neas de datos
e+istan. En nuestro e3emplo son cuatro l)neas #eneradas por Gecho :e QPnPnPnQ G. En cambio las partes
G<EF6N a ... bG y GEND a ... bG se e3ecutan una sola "e'. ,a primera antes de procesar la primera
l)nea y la $ltima despu!s de procesar la $ltima l)nea.
,os comentarios en GawHG comien'an con un GWG y terminan al final de la l)nea.
$xpresiones re,ulares
Al#unas "eces los datos pueden "enir con al#unas lineas %ue no interesa procesar o %ue se deben
procesar de forma distinta. Podemos usar una e+presi&n re#ular delimitada por el car(cter G/G para
seleccionar una acci&n especial. Jamos a editar otro e3emplo %ue llamaremos G/tmp/e+pre#.awHG:
<EF6N a print QErase una "e'...Q b
/^N/ a print Q,inea "ac)aQ b
/YC:BZ?/ a print Q9iene un n$meroQ b
/P.N/ a print Q9ermina con puntoQ b
W Esto es un comentario
a print Q
Q b
END a print Q...y color)n colorado este cuento se ha acabado.Q b
Ahora editamos un se#undo fichero G/tmp/e+pre#.datG:
,)nea n$mero /.
,)nea n$mero 0
....
Fin de los datos
Ahora e3ecute lo si#uiente:
N awH :f /tmp/e+pre#.awH /tmp/e+pre#.dat
Erase una "e'...
9iene un n$mero
9ermina con punto

9iene un n$mero

,inea "ac)a

9ermina con punto


...y color)n colorado este cuento se ha acabado.
Jemos %ue cada l)nea de datos puede cumplir m(s de una re#la y %ue cuando no ponemos una
e+presi&n re#ular siempre se e3ecutar( la acci&n. En este caso todas las l)neas pro"ocan la escritura
de una l)nea de #uiones G
G.
El uso de e+presiones re#ulares puede ayudarnos a eliminar cabeceras l)neas "ac)as o incompletas
o cosas as) %ue no deseamos procesar.
Delimitadores de campos
No hemos tratado aun los campos de una l)nea. *na l)nea %ue ten#a distintos campos debe usar
al#una secuencia para delimitar los campos entre si.
,o mismo para definir un delimitador %ue en cual%uier otro caso donde se usen cadenas de
caracteres podemos encontrarnos la necesidad de usar caracteres especiales %ue no pueden ser
introducidos directamente. Para ello e+isten determinadas secuencias %ue empie'an por el car(cter
GPG y %ue tienen si#nificado especial.
>>
Caracteres de escape
>>
>> Pa >> Produce un pitido en el terminal >>
>> Pb >> 4etroceso >>
>> Pf >> Salto de p(#ina >>
>> Pn >> Salto de l)nea >>
>> Pr >> 4etorno de carro >>
>> Pt >> 9abulador hori'ontal >>
>> P" >> 9abulador "ertical >>
>> Pddd >> Car(cter representado en octal por GdddG >>
>> P+he+ >> Car(cter representado en he+adecimal por Ghe+G >>
>> Pc >> Car(cter GcG >>
El $ltimo caso se usa para eliminar el si#nificado especial de un car(cter en determinadas
circunstancias. Por e3emplo para usar un G?G o un G:G en una e+presi&n re#ular usar)amos GP?G o GP:G
Podemos ele#ir un solo car(cter para separar campos. 7ay ficheros de confi#uraci&n como
/etc/passwd /etc/#roup %ue usan un solo car(cter para delimitar los campos. Por e3emplo los dos
puntos G:G el blanco GP G la coma GG el tabulador GPtG etc...
GawHG permite usar como delimitador m(s de un car(cter. Para ello se asi#nar( a la "ariable GFSG una
cadena de caracteres %ue conten#a una e+presi&n re#ular . Por e3emplo para usar como delimitador
el car(cter G:G habr)a %ue incluir G<EF6N a FS @ Q:Q bG
Si no se especifica nin#$n delimitador se asumir( %ue los campos estar(n delimitados por uno o m(s
blancos o tabuladores consecuti"os lo cual se e+presa como QYP PtZ?Q. ,as e+presiones re#ulares ya
fueron estudiadas en un cap)tulo especial. El car(cter GPG debe usarse para escapar cual%uier car(cter
con si#nificado especial en una e+presi&n re#ular y al#unos caracteres normales precedidos de GPG se
usan para representar caracteres especiales. GPtG es el tabulador.
En GawHG se usa N/ para referenciar el campo / N0 para referenciar el campo 0 etc... y para
referenciar el re#istro completo usaremos NC.
Edite el si#uiente fichero G/tmp/delim/.awHG
a print Q?Q N/ Q?Q N0 Q?Q N1 Q?Q NA Q?Q b
N/ N0 N1 y NA representan a los campos / 0 1 y A respecti"amente. Edite el si#uiente fichero de
datos G/tmp/delim/.datG
aaa bbb ccc ddd eee
/// 000 111 AAA
En la primera l)nea debe introducir un blanco para separar los primeros blancos y una secuenciencia
de G G para separar los dos $ltimos campos. Es importante %ue lo edite de esta forma por%ue el
resultado de los e3emplos podr)a "ariar.
Ahora e3ecute lo si#uiente:
N awH :f /tmp/delim/.awH /tmp/delim/.dat
? aaa ? bbb ? ccc ? ddd ?
? /// ? 000 ? 111 ? AAA ?
Edite el si#uiente fichero G/tmp/delimC.awHG
a print Q?Q N1 Q?Q NA Q?Q N/ Q?Q N0 Q?Q b
Ahora e3ecute lo si#uiente:
N awH :f /tmp/delimC.awH /tmp/delim/.dat
? ccc ? ddd ? aaa ? bbb ?
? 111 ? AAA ? /// ? 000 ?
Con ello hemos conse#uido "ariar el orden de aparici&n de los campos pero toda")a no hemos
especificado nin#$n delimitador. Por ello hemos asumido el delimitador por defecto. .uno o m(s
blancos y tabuladores2. Para especificar un delimitador distinto tenemos %ue asi#nar su "alor a la
"ariable FS y adem(s tenemos %ue hacerlo antes de leer el primero re#istro por lo cual se incluir( la
instrucci&n en la secci&n inicial precedida de <EF6N.
Edite el si#uiente fichero G/tmp/delim0.awHG
<EF6N a FS @ QP Q b
a print Q?Q N/ Q?Q N0 Q?Q N1 Q?Q NA Q?Q b
Estamos definiendo un $nico car(cter blanco como separador. Ahora e3ecute lo si#uiente:
N awH :f /tmp/delim0.awH /tmp/delim/.dat
? aaa ? bbb ? ccc ? ?
? /// ? 000 ? 111 ? AAA ?
Jamos a cambiar de delimitador. Edite el si#uiente fichero G/tmp/delim1.awHG
<EF6N a FS @ QPtQ b
a print Q?Q N/ Q?Q N0 Q?Q N1 Q?Q NA Q?Q b
Estamos definiendo un $nico car(cter tabulador como separador. Ahora e3ecute lo si#uiente:
N awH :f /tmp/delim1.awH /tmp/delim/.dat
? aaa bbb ccc ? ? ddd ? ?
? /// 000 111 AAA ? ? ? ?
Seleccin de re,istros por campo
Jamos a editar un fichero %ue simular( la salida de datos obtenida desde una base de datos
relacional. *saremos estos datos en "arios e3emplos. Puede corresponder a una contabilidad de un
al%uiler de un piso. ,o llamaremos Gcontabil.datG.
fecha>concepto>importe
?
?
C/:C/:/BBB>: > BL
/L:/0:/BBB>AF*A > :/ALKC
CK:C/:0CCC>,*] > :/KMBM
0A:C/:0CCC>FAS > :1A/MK
0M:C/:0CCC>6NF4ES5 > /A/0CC
C/:C0:0CCC>;ENS > :BLCB0
0K:C0:0CCC>,*] > :/0AMK
C/:C1:0CCC>;ENS > :BLCB0
CL:C1:0CCC>6NF4ES5 > /C/1CC
C/:CA:0CCC>;ENS > :BLCB0
CL:CA:0CCC>AF*A > :/KRKB
CM:CA:0CCC>6NF4ES5 > /1ACCC
C/:CK:0CCC>;ENS > :BRBMK
C0:CK:0CCC>,*] > ://AAB
CB:CK:0CCC>6NF4ES5 > BKCCC
01:CK:0CCC>FAS > :0/A0R
0K:CK:0CCC>FAS > :/LAK0
C/:CL:0CCC>;ENS > :BRBMK
CM:CL:0CCC>6NF4ES5 > /1CCCC
C/:CM:0CCC>;ENS > :BRBMK
CA:CM:0CCC>,*] > :/0AC1
CM:CM:0CCC>AF*A > :KKL/
/C:CM:0CCC>6NF4ES5 > BBCCC
0A:CM:0CCC>FAS > ://BAR
C/:CR:0CCC>;ENS > :BRBMK
/C:CR:0CCC>6NF4ES5 > /001KK
CA:CB:0CCC>,*] > :/0/LR
/C:CB:0CCC>6NF4ES5 > /0BCCC
/B:CB:0CCC>AF*A > :/CK0B
0R:CB:0CCC>FAS > :0L0C
C/:/C:0CCC>;ENS > :BRBMK
/C:/C:0CCC>6NF4ES5 > //0CCC
.10 rows2
,o primero %ue "emos es %ue tiene una cabecera de dos l)neas in$tiles y un final tambi!n in$til.
Podemos ase#urar %ue las l)neas %ue deseamos procesar cumplir(n un patr&n de dos n$meros #ui&n
dos n$meros #ui&n cuatro n$meros y l)nea "ertical. Jamos a editar un pro#rama %ue llamaremos
Gcontabil/.awHG
<EF6N a FS@QP>Q b
/YC:BZYC:BZP:YC:BZYC:BZP:YC:BZYC:BZYC:BZYC:BZP>/ a
print N4 Q Q N/ Q Q N0 Q Q N1
b
Jamos a e3ecutar este e3emplo y "amos a "er su salida
N awH :f contabil/.awH T contabil.dat
1 C/:C/:/BBB : BL
A /L:/0:/BBB AF*A :/ALKC
K CK:C/:0CCC ,*] :/KMBM
L 0A:C/:0CCC FAS :1A/MK
M 0M:C/:0CCC 6NF4ES5 /A/0CC
R C/:C0:0CCC ;ENS :BLCB0
B 0K:C0:0CCC ,*] :/0AMK
/C C/:C1:0CCC ;ENS :BLCB0
// CL:C1:0CCC 6NF4ES5 /C/1CC
/0 C/:CA:0CCC ;ENS :BLCB0
/1 CL:CA:0CCC AF*A :/KRKB
/A CM:CA:0CCC 6NF4ES5 /1ACCC
/K C/:CK:0CCC ;ENS :BRBMK
/L C0:CK:0CCC ,*] ://AAB
/M CB:CK:0CCC 6NF4ES5 BKCCC
/R 01:CK:0CCC FAS :0/A0R
/B 0K:CK:0CCC FAS :/LAK0
0C C/:CL:0CCC ;ENS :BRBMK
0/ CM:CL:0CCC 6NF4ES5 /1CCCC
00 C/:CM:0CCC ;ENS :BRBMK
01 CA:CM:0CCC ,*] :/0AC1
0A CM:CM:0CCC AF*A :KKL/
0K /C:CM:0CCC 6NF4ES5 BBCCC
0L 0A:CM:0CCC FAS ://BAR
0M C/:CR:0CCC ;ENS :BRBMK
0R /C:CR:0CCC 6NF4ES5 /001KK
0B CA:CB:0CCC ,*] :/0/LR
1C /C:CB:0CCC 6NF4ES5 /0BCCC
1/ /B:CB:0CCC AF*A :/CK0B
10 0R:CB:0CCC FAS :0L0C
11 C/:/C:0CCC ;ENS :BRBMK
1A /C:/C:0CCC 6NF4ES5 //0CCC
Podemos apreciar "arias cosas. N4 es una "ariable del sistema %ue toma el "alor del n$mero de
re#istro %ue se est( procesando. Podemos "er %ue las dos primeras l)neas y la $ltima han sido
descartadas. 9ambi!n "emos %ue las primeras l)neas usan un solo d)#ito para el n$mero de re#istro
y lue#o usan dos d)#itos. Esto %ue las columnas no %ueden alineadas.
Jamos a modificar el pro#rama para %ue muestre los re#istros completos .NC2 cuando no se cumpla
la condici&n anterior. Para ello editaremos un fichero %ue llamaremos Gcontabdescarte.awHG.
<EF6N a FS@QP>Q b
g /YC:BZYC:BZP:YC:BZYC:BZP:YC:BZYC:BZYC:BZYC:BZP>/ a
print N4 NC
b
Jamos a e3ecutar este e3emplo y "amos a "er su salida
N awH :f contabdescarte.awH T contabil.dat
/ fecha>concepto>importe
0
?
?
1K .10 rows2
Qormato de salida con print.
Para imprimir con formato usaremos GprintfG en lu#ar de GprintG. printf se usa en "arios len#ua3es. El
primer ar#umento de esta funci&n debe de ser una cadena de caracteres %ue conten#a el formato de
salida deseado para la salida. ,os formatos de cada dato se e+presan mediante unas directi"as %ue
empie'an con el car(cter GDG y debe de e+istir en dicha cadena tantas directi"as como datos
separados por coma a continuaci&n de la cadena de formato.
7ay %ue tener en cuenta %ue en GawHG la concatenaci&n de cadenas se usa poniendo una cadena a
continuaci&n de otra separada por blancos. Por e3emplo:
W cad @ Q.unodos2Q cad @ QunoQ QdosQ _ cad @ Q.Q cad Q2Q
>>
$speci.icacin de .ormato de datos para <print.<
>>
>> Dc >> Car(cter ASC66 >>
>> Dd >> Entero representado en decimal >>
>> De >> Coma flotante .e+ponente @ eY?:Zdd2 >>
>> DE >> Coma flotante .e+ponente @ EY?:Zdd2 >>
>> Df >> Coma flotante sin e+ponente >>
>> D# >> E%ui"ale al m(s corto de los formatos GeG o GfG >>
>> DF >> E%ui"ale al m(s corto de los formatos GEG o GFG >>
>> Do >> Entero representado en octal >>
>> Ds >> Cadena de caracteres >>
>> D+ >> Entero representado en he+adecimal con min$sculas >>
>> D[ >> Entero representado en he+adecimal con may$sculas >>
>> DD >> Car(cter GDG >>
En estos formatos se puede intercalar inmediatamente a continuaci&n del GDG primero un si#no G?G o
un G:G %ue son opcionales y si#nifican respecti"amente alineaci&n a la derecha o a la i'%uierda. En
se#undo lu#ar y de forma i#ualmente opcional se puede intercalar un n$mero para indicar un ancho
m)nimo. .Si el dato ocupa m(s %ue el dato especificado se muestra el dato completo haciendo caso
omiso de la indicaci&n de anchura2. En el caso de coma flotante se puede indicar el ancho total del
campo y la precisi&n .anchura2 de la parte decimal.
Jeamos unos pocos e3emplos.
N echo > awH Ga print Q7ola mundoQ bG
7ola mundo
N echo > awH Ga printf Q7ola DsPnQ QmundoQ bG
7ola mundo
N echo > awH Ga printf QdsWPnQ MM QmundoQ bG
WMMWmundoW
N echo > awH Ga printf Q10d/CsWPnQ MM QmundoQ bG
W MMW mundoW
N echo > awH Ga printf Q-10d:/CsWPnQ MM QmundoQ bG
WMM Wmundo W
N echo > awH Ga printf Q+4d?AsWPnQ MM QmundoQ bG
W ?MMWmundoW
N echo > awH Ga printf Q04d?AsWPnQ MM QmundoQ bG
WCCMMWmundoW
N echo > awH Ga printf Q010.5fEg\n", 21.43527923, 21.43527923, 21.43527923
}'
#0021.43528#2.143528E+01#21.4353
$ echo | awk '{ printf "/C.KfE#PnQ 0/ACCCC 0/ACCCC 0/ACCCC bG
W0/ACCCC.CCCCCW0./ACCCCE?CLW0./Ae?CL
Practi%ue un poco in"esti#ando con m(s detalle el funcionamiento de estos formatos.
*so de "ariables operadores y e+presiones
En GawHG podemos usar toda clase de e+presiones presentes en cual%uier len#ua3e. Cual%uier
identificador %ue no corresponda con una palabra reser"ada se asumir( %ue es una "ariable. Para
asi#nar un "alor se usa el operador G@G
Jamos a editar un fichero %ue llamaremos Ge3emple+pr.awHG con al#unas e+presiones aritm!ticas.
a
contador @ C_ W Pone a cero la "ariable contador
contador ??_ W 6ncrementa en / la "ariable contador
contador ?@/C_ W 6ncrementa en /C la "ariable contador.
contador V@0 W ;ultiplica por 0 la "ariable contador
print contador
contador @ . /C ? 0C 2 / 0 _
print contador
contador @ s%rt . 0K 2 _ W 4ai' cuadrada de 0K
print contador
b
,o e3ecutamos y obser"amos el resultado.
N echo > awH :f e3emple+pr.awH
00
/K
K
No podemos e+plicar en detalle todo el len#ua3e GawHG. Se trata de %ue comprenda su utilidad y de
%ue sea capa' de utili'arlo para determinadas tareas en las cuales resulta e+tremadamente $til.
Al#unas e+presiones parecen inspiradas en el len#ua3e C. 5tras parece %ue han ser"ido de
inspiraci&n para el len#ua3e Perl. En realidad muchos len#ua3es usan e+presiones parecidas.
Por ello "amos a resumir en forma de tabla una serie de elementos %ue inter"ienen en las
e+presiones %ue GawHG es capa' de mane3ar. Pero no "amos a e+plicar en detalle cada cosa. En lu#ar
de eso daremos una descripci&n resumida y procuraremos %ue los e3emplos posteriores ten#an un
poco de todo.
>>
Operadores aritm+ticos
>>
>> ? >> Suma >>
>> : >> 4esta >>
>> V >> ;ultiplicaci&n >>
>> / >> Di"isi&n >>
>> D >> ;&dulo .resto2 >>
>> ^ >> Potenciaci&n >>
>>
Operadores de asi,nacin.
>>
>> "ar @ e+pr >> Asi#naci&n >>
>> "ar ?? >> 6ncrementa la "ariable en una unidad >>
>> "ar :: >> Decrementa la "ariable en una unidad >>
>> "ar ?@ e+prOaritm >> 6ncrementa la "ariable en cierta cantidad >>
>> "ar :@ e+prOaritm >> Decrementa la "ariable en cierta cantidad >>
>> "ar V@ e+prOaritm >> ;ultiplica la "ariable por cierta cantidad >>
>> "ar /@ e+prOaritm >> Di"ide la "ariable por cierta cantidad >>
>> "ar D@ e+prOaritm >> Fuarda en la "ariable el resto de su di"isi&n por cierta cantidad >>
>> "ar ^@ e+prOaritm >> Ele"a el "alor de la "ariable en cierta cantidad >>
>>
Operadores l,icos y de relacin.
>>
>> e+prOaritm
exprearitm BB Comparacin de i,ualdad BB BB exprearitm aJ exprearitm BB Comparacin de desi,ualdad BB
BB exprearitm = exprearitm BB Comparacin menor *ue BB
BB exprearitm > exprearitm BB Comparacin mayor *ue BB
BB exprearitm =J exprearitm BB Comparacin menor i,ual *ue BB
BB exprearitm >J exprearitm BB Comparacin mayor i,ual *ue BB
BB exprecad U exprere,ular BB Se a1usta al patrn BB
BB exprecad aU exprere,ular BB 'o se a1usta al patrn BB
BB exprelo,ica BB exprelo,ica BB Operador l,ico !'/ %M& BB
BB exprelo,ica AA exprelo,ica BB Operador l,ico O" %O& BB
BB a exprelo,ica BB Operador l,ico 'O# %'O& BB
BB
Qunciones aritm+ticas.
BB
BB atan2% y, x& BB "etorna el arco9tan,ente de yIx en radianes BB
BB cos%x& BB "etorna el coseno de x en radianes BB
BB exp%x& BB "etorna el exponencial de x %efx& BB
BB int%x& BB "etorna el valor entero de x truncado la parte decimal BB
BB lo,%x& BB "etorna el lo,aritmo neperiano de x BB
BB rand%& BB "etorna un valor seudo aleatorio comprendido entre V y 1 BB
BB sin%x& BB "etorna el seno de x en radianes BB
BB s*rt%x& BB "etorna la raiz cuadrada de x BB
BB srand%x& BB Inicializa la semilla para ,enerar nHmeros pseudoaleatorios BB
BB
Qunciones para usar con cadenas de caracteres
BB
BB ,sub%r, s, t& BB Sustituye <s< ,lobalmente en todo <t< cada vez *ue se encuentre un
patrn a1ustado a la expresin re,ular <r<. Si no se proporciona <t<
se toma GV por de.ecto.
/evuelve el nHmero de sustituciones realizado. BB
BB index%cadena, subcadena& BB "etorna la posicin de la <subcadena< en <cadena< %rimera posicin J 1& BB
BB len,t7%cadena& BB /evuelve la lon,itud de la <cadena<. #omar3 GV por de.ecto si no se
proporciona <cadena< BB
BB split%cadena, array, sep& BB arte <cadena< en elementos de <array< utilizando <sep< como separador.
Si no se proporciona <sep< se usar3 QS. /evuelve el nHmero de elementos
del array BB
BB sub%r, s, t& BB Sustituye <s< en <t< la primera vez *ue se encuentre un patrn
a1ustado a la expresin re,ular <r<. Si no se proporciona <t< se toma GV
por de.ecto.
/evuelve 1 si tiene +xito y V si .alla BB
BB substr%cadena, be,, len& BB /evuelve una subcadena de <cadena< *ue empieza en <be,< con una lon,itud
<len<. Si no se proporciona lon,itud devuelve 7asta el .inal de la cadena
desde <be,< BB
BB toloDer%cadena& BB asa a minHsculas BB
BB toupper%cadena& BB asa a mayHsculas BB
BB
!l,unas otras .unciones
BB
BB matc7%cadena, exprere,& BB Indica si <cadena< se a1usta o no a la expresin re,ular <exprere,< BB
BB system%comando& BB BB
BB sprint.%.ormato c, expr9listd & BB ara obtener salida con .ormato. BB
Famos a modi.icar el pro,rama <contabil1.aDP< para procesar solo los re,istros de consumo de luz, vamos a
me1orar el .ormato de salida, vamos a incluir un contador de re,istros seleccionados, un contador de consumo de
luz, y al .inal obtendremos el consumo total y el consumo promedio de luz. Lo llamaremos <contabil2.aDP<
Z$;I' S
QSJ\[B\ @
contere,eluzJV@
conteimporteeluzJV@
T

G2 U ILULI S
contere,eluz J contere,eluz ? 1 @
conteimporteeluz J conteimporteeluz ? G- @
print. %\K-d, K-d, Ks, Ks, Ks, K1Vd[n\, '", contere,eluz, G1, G2, G-, conteimporteeluz&@
T
$'/ S
print. %\Consumo promedio J Kd[n\, conteimporteeluz I contere,eluz& @
T
Famos a e1ecutar este e1emplo y vamos a ver su salida
G aDP 9. contabil2.aDP = contabil.dat
4, 1, V49V192VVV, LUL , 914]Y], 914]Y]
Y, 2, 249V292VVV, LUL , 9122]4, 92^2]2
16, -, V29V492VVV, LUL , 91122Y, 9-Y]21
2-, 2, V29V]92VVV, LUL , 9122V-, 942122
2Y, 4, V29VY92VVV, LUL , 91216^, 9622Y2
Consumo promedio J 912^4^
Los datos *ue estamos usando para el e1emplo est3n ordenados por .ec7as. Famos a obtener un in.orme con un
campo m3s *ue ser3 el saldo de la cuenta. ara ello editamos un .ic7ero *ue llamaremos <contabil-.aDP<.
Z$;I' S
QSJ\[B\ @
conteimporteJV@
T

IcV9YdcV9Yd[9cV9YdcV9Yd[9cV9YdcV9YdcV9YdcV9Yd[BI S
conteimporte J conteimporte ? G- @
print. %\K-d, Ks, Ks, Ks, K1Vd[n\, '", G1, G2, G-, conteimporte&@
T
Famos a e1ecutar este e1emplo y vamos a ver su salida
G aDP 9. contabil-.aDP = contabil.dat
-, V19V191YYY, 9 , Y6, Y6
2, 1691291YYY, !;U! , 91264V, 912442
4, V49V192VVV, LUL , 914]Y], 9-V-41
6, 229V192VVV, ;!S , 9-21]4, 962426
], 2]9V192VVV, I';"$SO , 1212VV, ]66]2
^, V19V292VVV, 5$'S , 9Y6VY2, 91Y21^
Y, 249V292VVV, LUL , 9122]4, 9-1^Y-
1V, V19V-92VVV, 5$'S , 9Y6VY2, 912]Y^4
11, V69V-92VVV, I';"$SO , 1V1-VV, 9266^4
12, V19V292VVV, 5$'S , 9Y6VY2, 9122]]]
1-, V69V292VVV, !;U! , 914^4Y, 91-^6-6
12, V]9V292VVV, I';"$SO , 1-2VVV, 926-6
14, V19V492VVV, 5$'S , 9Y^Y]4, 91V-611
16, V29V492VVV, LUL , 91122Y, 9114V6V
1], VY9V492VVV, I';"$SO , Y4VVV, 92VV6V
1^, 2-9V492VVV, ;!S , 92122^, 9212^^
1Y, 249V492VVV, ;!S , 916242, 94]Y2V
2V, V19V692VVV, 5$'S , 9Y^Y]4, 9146Y14
21, V]9V692VVV, I';"$SO , 1-VVVV, 926Y14
22, V19V]92VVV, 5$'S , 9Y^Y]4, 9124^YV
2-, V29V]92VVV, LUL , 9122V-, 91-^2Y-
22, V]9V]92VVV, !;U! , 94461, 912-^42
24, 1V9V]92VVV, I';"$SO , YYVVV, 922^42
26, 229V]92VVV, ;!S , 911Y2^, 946^V2
2], V19V^92VVV, 5$'S , 9Y^Y]4, 9144]]]
2^, 1V9V^92VVV, I';"$SO , 122-44, 9--222
2Y, V29VY92VVV, LUL , 91216^, 9244YV
-V, 1V9VY92VVV, I';"$SO , 12YVVV, ^-21V
-1, 1Y9VY92VVV, !;U! , 91V42Y, ]2^^1
-2, 2^9VY92VVV, ;!S , 9262V, ]V261
--, V191V92VVV, 5$'S , 9Y^Y]4, 92^]12
-2, 1V91V92VVV, I';"$SO , 112VVV, ^-2^6
Sentencias condicionales y bucles
<aDP< es un len,ua1e muy completo y no pod0a .altar las sentencias de e1ecucin condicional y de e1ecucin en
bucle.
!l,unos de los conceptos *ue vamos a comentar ya los 7emos visto cuando 7ablamos de la pro,ramacin en bas7
y no vamos a explicar con demasiado detalle cada tipo de sentencia. La sintaxis *ue usa aDP no se parece a la
sintaxis *ue ya 7emos visto para bas7. Se parece m3s a la sintaxis del len,ua1e C. /e todas .ormas los conceptos
ya nos resultan .amiliares y usaremos al,unos e1emplos para ilustrarlos.
$mpezaremos describiendo la sintaxis de cada tipo de sentencia. /enominaremos accin a una sentencia simple o
a una sentencia compuesta de la .orma <S sentencia1 @ sentencia2 @ ... T<
Sentencia condicional <i.<
i. % expresinel,ica &
accion1
c else
accion2 d
Sentencia condicional con los operadores <R< y <8<
expresionel,ica R accion1 8 accion2
Zucle <D7ile<
D7ile % expresinel,ica &
accion
Zucle <do< <D7ile<
do
accion
D7ile % expresinel,ica &
Zucle <.or<
.or % inicializarecontador @ comprobarecontador @ modi.icarecontador &
accion
/entro de los bucles podemos usar breaP para .orzar la salida de un bucle o continue para saltar a la si,uiente
iteracin.
Feremos de momento tan solo un e1emplo para la sentencia condicional <i.<.
$dite el si,uiente .ic7ero *ue llamaremos <contabil2.aDP<
Z$;I' S QSJ\[B\ @ T

IcV9YdcV9Yd[9cV9YdcV9Yd[9cV9YdcV9YdcV9YdcV9Yd[BI S
i. % G- >J V& S
print. %\K-d, Ks, Ks, Ks[n\, '", G1, G2, G-&@
T
T
Famos a e1ecutar este e1emplo y vamos a ver su salida
G aDP 9. contabil2.aDP = contabil.dat
-, V19V191YYY, 9 , Y6
], 2]9V192VVV, I';"$SO , 1212VV
11, V69V-92VVV, I';"$SO , 1V1-VV
12, V]9V292VVV, I';"$SO , 1-2VVV
1], VY9V492VVV, I';"$SO , Y4VVV
21, V]9V692VVV, I';"$SO , 1-VVVV
24, 1V9V]92VVV, I';"$SO , YYVVV
2^, 1V9V^92VVV, I';"$SO , 122-44
-V, 1V9VY92VVV, I';"$SO , 12YVVV
-2, 1V91V92VVV, I';"$SO , 112VVV
asar valores al script aDP
$n ocasiones puede resultar interesante poder pasar al,Hn valor al script aDP. Famos a modi.icar el pro,rama
anterior para *ue muestre los re,istros con un importe superior a un valor *ue pasaremos por par3metro.
$dite el si,uiente .ic7ero *ue llamaremos <contabil4.aDP<
Z$;I' S QSJ\[B\ @ T

IcV9YdcV9Yd[9cV9YdcV9Yd[9cV9YdcV9YdcV9YdcV9Yd[BI S
i. % G- >J minimo AA G- =J maximo & S
print. %\K-d, Ks, Ks, Ks[n\, '", G1, G2, G-&@
T
T
Famos a e1ecutar este e1emplo pasando y vamos a ver su salida
G aDP 9. contabil4.aDP minimoJ1VVVVV maximoJ12VVVV = contabil.dat
11, V69V-92VVV, I';"$SO , 1V1-VV
-2, 1V91V92VVV, I';"$SO , 112VVV
Eay *ue advertir *ue el paso de par3metros e*uivale a de.inir una variable y a asi,nar un valor pero esto valor
no ser3 accesible 7asta despu+s de leer el primer re,istro. Si el valor pasado como par3metro tuviera *ue ser
accesible en la seccin Z$;I' 7abr0a *ue usar la opcin 9v previo al paso del par3metro.
"epetiremos el e1emplo pasando el delimitador del re,istro *ue usaremos en la seccin Z$;I'.
$dite el si,uiente .ic7ero *ue llamaremos <contabil6.aDP<
Z$;I' S QS J delimitador @ T

IcV9YdcV9Yd[9cV9YdcV9Yd[9cV9YdcV9YdcV9YdcV9Yd[BI S
i. % G- >J minimo AA G- =J maximo & S
print. %\K-d, Ks, Ks, Ks[n\, '", G1, G2, G-&@
T
T
Famos a e1ecutar este e1emplo pasando valores y vamos a ver su salida
G aDP 9. contabil6.aDP minimoJ1VVVVV maximoJ12VVVV deliminadorJ<B< = contabil.dat
Femos *ue no 7emos obtenido el resultado esperado.
Famos a volver a e1ecutar este e1emplo pasando el valor del delimitador con la opcin 9v y vamos a ver su nueva
salida
G aDP 9v delimitadorJ<B< 9. contabil6.aDP minimoJ1VVVVV maximoJ12VVVV = contabil.dat
11, V69V-92VVV, I';"$SO , 1V1-VV
-2, 1V91V92VVV, I';"$SO , 112VVV
/eclaracin de .unciones
Como es l,ico <aDP< permite la declaracin de .unciones. 'ormalmente se recurre a implementar una .uncin
cuando necesitamos una .uncionalidad *ue el len,ua1e no proporciona de .orma prede.inida o cuando *ueremos
estructurar el cdi,o de un pro,rama ,rande en .ra,mentos m3s pe*ueOos y por tanto m3s mane1ables.
La sintaxis es muy sencilla.
.unction nombreedeelae.uncin % listaedeepar3metros & S
sentencias
T
or e1emplo para declarar una .uncin *ue retorne un nHmero aleatorio entre 1 y 6.
$dite un .ic7ero con nombre <dado.aDP<.
.unction aleatorio % minimo, maximo &S
return % % % maximo 9 minimo ? 1 & : rand %& & ? minimo & @
T
$'/S
.or %iJV@ i=2V@ i??&S
print. %\K-d& $ntre 1 y 6 J K-d $ntre 4 y 14 JK-d[n\,
i, aleatorio %1, 6&, aleatorio%4, 14&&@
T
T
!7ora lo e1ecutamos
G ec7o B aDP 9. dado.aDP
V& $ntre 1 y 6 J 4 $ntre 4 y 14 J 12
1& $ntre 1 y 6 J 6 $ntre 4 y 14 J ]
2& $ntre 1 y 6 J 6 $ntre 4 y 14 J ]
-& $ntre 1 y 6 J 4 $ntre 4 y 14 J 1-
2& $ntre 1 y 6 J - $ntre 4 y 14 J ^
4& $ntre 1 y 6 J - $ntre 4 y 14 J 6
6& $ntre 1 y 6 J 2 $ntre 4 y 14 J ]
]& $ntre 1 y 6 J 6 $ntre 4 y 14 J ]
^& $ntre 1 y 6 J 4 $ntre 4 y 14 J 6
Y& $ntre 1 y 6 J - $ntre 4 y 14 J 1V
1V& $ntre 1 y 6 J 6 $ntre 4 y 14 J 12
11& $ntre 1 y 6 J 4 $ntre 4 y 14 J 1V
12& $ntre 1 y 6 J 6 $ntre 4 y 14 J 11
1-& $ntre 1 y 6 J 2 $ntre 4 y 14 J 12
12& $ntre 1 y 6 J 4 $ntre 4 y 14 J 14
14& $ntre 1 y 6 J 2 $ntre 4 y 14 J Y
16& $ntre 1 y 6 J 1 $ntre 4 y 14 J Y
1]& $ntre 1 y 6 J - $ntre 4 y 14 J 12
1^& $ntre 1 y 6 J 2 $ntre 4 y 14 J 12
1Y& $ntre 1 y 6 J 2 $ntre 4 y 14 J ]
Quncin system
$sta es una .uncin .3cil de usar *ue nos permite e1ecutar un comando del sistema operativo. $n caso de +xito
retorna V, y en caso de error retornar3 un valor distinto de cero.
G aDP < Z$;I' S i. %system%\ls\& aJV& print. %\$rror de e1ecucin[n\&@ T<
or e1emplo si *uisi+ramos veri.icar la existencia de un .ic7ero almacenado en la variable <nombree.ic7<
tendr0amos *ue 7acer
i. %system%\test 9r \ nombree.ic7&& S
.print. %\Ks no encontrado[n\, nombree.ic7&@
T
La .uncin ,etline y otras .unciones avanzadas
$ste es es un apartado en el *ue m3s *ue explicar cosas nos vamos a limitar a mencionar ciertas posibilidades.
'o podemos dedicar demasiado espacio a este tipo de cuestiones avanzadas pero si con lo *ue en este apartado
contemos conse,uimos ponerle los dientes lar,os nos daremos por satis.ec7os aun*ue no entienda una palabra.
$n primer lu,ar 7ay *ue advertir *ue <,etline< *ue al i,ual *ue otras .unciones devuelve un valor pero su
sintaxis no es una t0pica sintaxis de .uncin. 'o se usa como <,etline%&< sino como una sentencia.
$sta .uncin retorna 1 si lee una l0nea, V si alcanza el .in de la entrada de datos y 91 si se produce un error.
Usada simplemente como <,etline< sin nada m3s lee la si,uiente linea de la entrada asi,nando GV y des,losando
los campos en G1, G2, G-, etc..
Se puede asi,nar el valor completo de la l0nea le0da a una variable con <,etline variable< evitando de esta .orma
alterar el valor de GV.
Se puede leer de un .ic7ero usando el operador redireccin. <,etline = \.ic7ero\<. Se puede simbolizar la entrada
est3ndar como \9\
Se puede leer desde un pipe. <\D7oami\ B ,etline usuario<.
$dite un .ic7ero llamado <tipoeusuario.aDP<.
Z$;I' S
\D7oami\ B ,etline usuario
i. % usuario U IrootI & S
print. %\Soy superusuario[n\&@
T
elseS
print. %\Soy usuario normal[n\&@
T
T
$1ecHtelo con
G aDP 9. tipoeusuario.aDP
'o pretendemos con este sencillo e1emplo *ue sea capaz de usar estas .unciones. $l mane1o de estas redirecciones
es complicado y en ocasiones se 7ace necesario .orzar el cierre de una entrada o de un pipe. ara eso existe la
.uncin <close<. Se usa 7aciendo <close %\.ic7ero\&< o <close %\D7oami\&<.
or el momento nos con.ormamos con lo explicado y veremos un poco m3s adelante el uso de ,etline tomando la
entrada de un .ic7ero cuando expli*uemos los arrays asociativos.
!rrays
Los array permiten el almacenamiento de una serie de elementos *ue pueden ser accedidos mediante un 0ndice.
$n realidad los arrays de aDP son m3s potentes *ue los arrays *ue vimos cuando estudiamos la pro,ramacin de
la bourne9s7ell donde los 0ndices de un array eran siempre nHmeros enteros. Famos a usar en primer lu,ar los
arrays de esta .orma. $s decir nos vamos a limitar en los primeros e1emplos a usar nHmeros enteros como
0ndices.
Famos a usar aDP para procesar la salida obtenida con <ps<. rimero vamos a suponer *ue obtenemos un listado
completo de los procesos del sistema en .ormato lar,o. Si intenta realizar este e1emplo obtendr3 un resultado
necesariamente di.erente.
G ps axl > ps9axl.out @ cat ps9axl.out
QL!;S UI/ I/ I/ "I 'I SIL$ "SS WCE!' S#! ##M #I5$ CO55!'/
1VV V 1 V V V ]46 V doeselect SW R V8V- %init&
2V V 2 1 V V V V bd.lus7 SW R V81^ %P.lus7d&
2V V - 1 V V V V Pupdate SW R V81^ %Pupdate&
^2V V 2 1 V V V V Ppiod SW R V8VV %Ppiod&
^2V V 4 1 V V V V PsDapd SW R V814 %PsDapd&
12V V 1^6 1 V V YVV 2VV doeselect S R V8VV IsbinIsys
12V V 1^^ 1 V V 1V16 V doesyslo, SW R V8VV %Plo,d&
12V 1 1Y- 1 V V ]^V V doeselect SW R V8VV %portmap&
12V V 1Y4 1 V V ^6V V doeselect SW R V8VV %inetd&
12V V 2VV 1 V V ]62 1V^ nanosleep S R V8VV IusrIsbin
12V V 21V 1 V V YV^ V doeselect SW R V8VV %lpd&
2V -1 226 1 V V -]^2 V doeselect SW R V8VV %postmast
12V V 2-] 1 4 V 1]2^ -16 doeselect S R V8VV sendmail8
12V V 221 1 V V 12Y2 1^2 doeselect S R V8V1 IusrIsbin
2V V 222 1 V V 1422 46 doeselect S R V8VV IusrIbinI
2V 1 242 1 V V ^2V Y6 nanosleep S R V8VV IusrIsbin
2V V 24] 1 4 V ^6V 162 nanosleep S R V8VV IusrIsbin
12V V 262 1 V V 1]^V 6V doeselect S R V8V] IusrIsbin
1VV V 26^ 1 V V 1Y62 616 readec7an S 1 V8VV 9bas7
1VV V 26Y 1 V V ^-6 V readec7an SW 2 V8VV %,etty&
1VV 1VV1 2]V 1 V V 2VY6 ]22 Dait2 S - V8VV 9bas7
1VV V 2]1 1 V V ^-6 V readec7an SW 2 V8VV %,etty&
1VV V 2]2 1 V V ^-6 V readec7an SW 4 V8VV %,etty&
1VV 1VV1 2]- 1 V V 2V^^ 12V^ Dait2 S 6 V8VV 9bas7
12V -- 2]2 262 V V 1]Y2 V Daite.oreco SW R V8VV %apac7e&
12V -- 2]4 262 V V 1]Y2 V .locPelocPe SW R V8VV %apac7e&
12V -- 2]6 262 V V 1]Y2 V .locPelocPe SW R V8VV %apac7e&
12V -- 2]] 262 V V 1]Y2 V .locPelocPe SW R V8VV %apac7e&
12V -- 2]^ 262 V V 1]Y2 V .locPelocPe SW R V8VV %apac7e&
V 1VV1 Y16 2]V V V -4-6 162V doeselect S - V8VV vi aDP1.d
V 1VV1 1V2Y 2]- V V 1Y16 66^ Dait2 S 6 V8VV xinit I7o
1VV V 1V-2 1V2Y 12 V ^^22 -2^V doeselect S R V8V2 ) 8V 9bpp
V 1VV1 1V-] 1V2Y V V 262V 2]2^ doeselect S 6 V8V1 mDm
2V 1VV1 1V22 1V-] V V 1]2^ Y22 Dait2 S 6 V8VV bas7 I7om
2V 1VV1 1V24 1V-] V V 1]2^ Y22 Dait2 S 6 V8VV bas7 I7om
V V 1V4V 1V22 V V 2Y]6 1^]2 doeselect S 6 V8VV xterm 9ls
V 1VV1 1V4^ 1V24 V V 2-2V 122V doeselect S 6 V8VV xclocP 9d
1VV 1VV1 1V41 1V4V 12 V 2V^V 12VV Dait2 S pV V8VV 9bas7
1VVVVV 1VV1 1V]2 1V41 1] V 1V6^ 42^ " pV V8VV ps axl
ara dar una idea de la situacin de parentescos entre los distintos procesos mostramos la salida obtenida con el
comando <pstree< e1ecutado desde la misma sesin de xterm *ue en el caso anterior.
G pstree 9p > pstree9p.out @ cat pstree9p.out
init%1&9?9apac7e%262&9?9apac7e%2]2&
B B9apac7e%2]4&
B B9apac7e%2]6&
B B9apac7e%2]]&
B X9apac7e%2]^&
B9atd%242&
B9bas7%26^&
B9bas7%2]V&
vi%Y16&
B9bas7%2]-&
xinit%1V2Y&9?9)Q^6eS-F%1V-2&
B X9mDm%1V-]&9?9.xinitrc%1V22&
xterm%1V4V&
bas7%1V41&
pstree%1V6^&
B X9.xinitrc%1V24&
xclocP%1V4^&
B9cron%24]&
B9,etty%26Y&
B9,etty%2]1&
B9,etty%2]2&
B9,pm%2VV&
B9inetd%1Y4&
B9P.lus7d%2&
B9Plo,d%1^^&
B9Ppiod%2&
B9PsDapd%4&
B9Pupdate%-&
B9lpd%21V&
B9portmap%1Y-&
B9postmaster%226&
B9sendmail%2-]&
B9ss7d%221&
B9syslo,d%1^6&
X9x.s%222&
Solo vamos a procesar los campos I/ y I/. G- y G2 respectivamente. Los meteremos en un par de arrays
llamados pid y ppid.
Z$;I' S indJV@ T
.unction padre%p&S
.or %iJV@ i =ind@ i??&S
i. %pidcid
p2
return ppidYiZ_
b
b
g /F,AFS/ a pidYindZ@N1 _ ppidYindZ@NA _ ind?? _ b
END a
do a
printf .QDd:UQ proc2_
proc@ padre.proc2_
b while . proc U@ / 2
printf .QPnPnQ2_
b
Ahora e3ecutamos pasando el pid del proceso del cual deseamos a"eri#uar su descendencia.
N awH :f ancestros.awH proc@/CK/ T ps:a+l.out
/CK/:U/CKC:U/CA0:U/C1M:U/C0B:U0M1:U/:U
Con un n$mero realmente reducido de l)neas de c&di#o acabamos de procesar la salida de un
comando %ue no estaba especialmente dise=ado para ser procesado sino para entre#ar un resultado
le#ible.
No se emocione toda")a por%ue solo hemos utili'ado los arrays con indices num!ricos. ,o cierto es
%ue los arrays de GawHG a diferencia de los arrays de otros len#ua3es son arrays asociati"os. Eso
si#nifica %ue podemos usar como )ndice una cadena de caracteres. Por e3emplo podemos hacer lo
si#uiente: nombreOcliYQK/A10RM7QZ@Q,uis Farc)a 9oledanoQ
No es necesario dar un tama=o al array. *n array asociati"o no establece un orden entre sus
elementos. 7ay %ue aclarar %ue el mane3o de un array con )ndices num!ricos corresponde a un
mecanismo muy simple ya %ue se usan porciones consecuti"as de memoria del ordenador y se
accede directamente por posici&n. Por el contrario un array asociati"o de las caracter)sticas de GawHG
se "a creando din(micamente. 6nternamente GawHG #estiona el acceso mediante una t!cnica de hash
%ue usa tablas au+iliares a modo de tablas de )ndices y funciones au+iliares %ue obtiene "alores
num!ricos a partir de "alores de una cadena. 9odo ello permite un acceso muy r(pido en este tipo
de estructuras haci!ndolas adecuadas para su uso en bases de datos.
F9,S*SE >C*4S5S >F9,inu+Course para SuSE > //RCC
F9,4ED7 >C*4S5S >F9,inu+Course para 4ed7at > //RCC
AS*SC5; >7A4D8A4E>Asuscom 6SDN,inH /0RH Adapter .PC62 > LRLK
4A6,45AD>d*EF5C5;>4ailroad 9ycoon .Fold Edition2 > MMCC
C6J6,6] >d*EF5C5;>Ci"ili'ation: Call to power > MMCC
;X9766 >d*EF5C5;>;yth 66 > MMCC
,6APPDEJ>,6<45S >,inu+ Application De"elopment .K1M P(#inas2 > //CCC
C5NEC9C/>,6<45S >Fu)a del *suario de ,inu+ .A/1 P(#inas2 > K1CC
C5NEC9C1>,6<45S >Fu)a del Ser"idor .Conecti"a ,inu+ A1M P(#inas2 > K1CC
C5NEC9C0>,6<45S >Fu)a del Administrador de redes .ALK P(#inas2 > K1CC
,6*S4ES*>,6<45S >,inu+ *serGs 4esource .MBK P(#inas2 > /0CCC
47MCD,*[>,6N*[C5;>4ed7at ,inu+ M.C Delu+e en espa=ol > BLCC
47MCP45F>,6N*[C5;>4ed7at ,inu+ M.C Profesional en Espa=ol > 0CCCC
S*SEMC >,6N*[C5;>Suse ,inu+ M.C .LCDs2.Jersion espa=ola2 > LRKC
496;E00 >,6N*[C5;>4eal9ime 0.0 ./CD2 > /1CCC
C5NC9KCE>,6N*[C5;>Conecti"a ,inu+ K.C Jersi&n Econ&mica Espa=ol .LCDs2 > K0CC
C696*S00>,6N*[C5;>,inu+ Citius 0.0 > MMKC
94<,68LC>,6N*[C5;>9urbolinu+ 8orHstation L.C > LKCC
;596F >,6N*[C5;>;otif Complete > 00CCC
C5NC9S4J>,6N*[C5;>Conecti"a ,inu+ Ed.Ser"idor .Espa=ol 1CDs ? A ;anua > 0MKCC
4754AR6 >,6N*[C5;>4ed7at ,inu+ Enterprise Edition optimi'ed for 5racleRi >0MCCCC
;AND4AM0>,6N*[C5;>;andraHe M.0 .MCDs2 PowerPacH Delu+e ."ersi&n espa=ola> R1CC
P6NF*6N5>S*SEP45;>Pin#eino de peluche > LCCC
<EF6N a
FS@QYP PtZVP>YP PtZVQ _
while . #etline T Qarticulos.datQ U C2 a
articYN/Z@ Q.Q NA Q Ptas ? 6"a2 Q N1_
printf .QDs Q N/2_
b
for .__2a
printf .QPnPn6ntrodu'ca un c&di#o de art)culo o solo para terminar: Q2_
#etline codi#o _
if .codi#o
\\ &
breaP@
print. %\[n=Ks>[nKs\, codi,o, articccodi,od&@
T
T
G aDP 9. articulos.aDP
Q#LSUS$ Q#L"$/E !SUSCO5 "!IL"O!/ CIFILIL 5M#EII LI!/$F CO'$C#V1 CO'$C#V-
CO'$C#V2 LIUS"$SU "E]V/LU) "E]V"OQ SUS$]V "#I5$22 CO'C#4V$ CI#IUS22 #"ZLIW6V
5O#IQ CO'C#S"F "EO"!^I 5!'/"!]2 I';UI'O
Introduzca un cdi,o de art0culo o solo para terminar8 "E]V"OQ
%2VVVV tas ? Iva& "edEat Linux ].V ro.esional en $spaOol
Introduzca un cdi,o de art0culo o solo para terminar8 CI#IUS22
%]]4V tas ? Iva& Linux Citius 2.2
Introduzca un cdi,o de art0culo o solo para terminar8
G
$l pro,rama *ue acabamos de realizar ilustra la potencia de <aDP< para el tratamiento de .ic7eros de datos. Si
nuestro .ic7ero de datos de e1emplo <articulos.dat< tuviera un nHmero de re,istros muc7o mayor 7abr0amos
notado *ue inicialmente se tarda un cierto tiempo en leer todo el .ic7ero de datos pero una vez almacenados los
datos en el array su acceso a los mismos es rapid0simo. $sta r3pidez se debe no solo a *ue los datos ya 7an sido
leidos desde el disco duro y ya est3n en memoria sino por*ue toda la in.ormacin est3 indexada de .orma *ue la
localizacion de cual*uier elemento del array es muy r3pida.
Qaltan muc7as cosas por contar sobre <aDP<. Si dispone de al,Hn .ic7ero de datos de interes personal sa*ue una
copia e intente realizar al,una utilidad en <aDP<.
2V. $1ercicios resueltos de S7ell9Script
<ueno es hora de %ue pruebe sus conocimientos. No se preocupe si no consi#ue resol"erlos todos.
Para al#o est(n las soluciones aun%ue eso si tendr( %ue descar#ar el archi"o e3erc/.tar.#'. Disculpe
la molestia pero con esto e"itamos %ue sus o3os se des")en a la soluci&n antes de tiempo.
donde_esta.txt
7acer un shell:script %ue bus%ue la presencia del comando
pasado como ar#umento en al#uno de los directorios referenciados
en la "ariable NPA97 se=alando su locali'aci&n y una bre"e
descripci&n del comando caso de e+istir su p(#ina man.

estadisticas_dir.txt
Pro#rame un script llamado GestadisticaOdir.shG
%ue realice un estudio de todo el arbol de directorios y
ficheros partiendo del directorio pasado como par(metro de forma
%ue obten#amos la si#uiente informaci&n:
N$mero de ficheros en los cuales disponemos de permiso de lectura @
N$mero de ficheros en los cuales disponemos de permiso de escritura @
N$mero de ficheros en los cuales disponemos de permiso de e3ecuci&n @
N$mero de ficheros en los cuales carecemos de permiso de lectura @
N$mero de ficheros en los cuales carecemos de permiso de escritura @
N$mero de ficheros en los cuales carecemos de permiso de e3ecuci&n @
N$mero de ficheros re#ulares encontrados @
N$mero de directorios encontrados @
N$mero de dispositi"os de blo%ues encontrados @
N$mero de dispositi"os de carateres encontrados @
N$mero de fifos encontrados @
gen_menu2.txt
Pro#ramar un shell:script %ue admita como ar#umentos pare3as formadas
por GcomandoG y GdescripcionG y %ue construya con todo ello un menu
de opciones donde cual%uiera de los comandos pueda ser e3ecutado
seleccionando la descripcion correspondiente.
Es decir si dicha shell:script se llamara G#enOmenu0.shG un e3emplo
de uso ser)a:
./#enOmenu0.sh P
,istar ls P
G-uien est( conectadoG who P
GFecha actualG date P
5cupacion du P
G-uien soyG whoami P
G;emoria libreG free P
GCalendarioG cal P
GNombre m(%uinaG hostname
Con ello se obtendr)a un menu de la forma:
C 9erminar
/ ,istar
0 -uien est( conectado
1 Fecha actual
A 5cupacion
K -uien soy
L ;emoria libre
M Calendario
R Nombre m(%uina
Eli3a opci&n.
grafica.txt
4eali'ar un shell:script %ue reciba como ar#umentos numeros comprendidos
entre / y MK. Dara error en caso de %ue al#un ar#umento no este
dentro del ran#o y terminar( sin hacer nada. En caso contrario
#enerar( una linea por cada ar#umento con tantos asteriscos como
indi%ue su ar#umento.
incr.txt
7acer un shell:scritp %ue utilice dos funciones Gincr/.2G e Gincr0.2G
las cuales e3ecutaran un simple bucle iterando /CCC "eces. ,a funci&n
Gincr/.2G solo usara un contador 6ND/ %ue sera incrementado de uno en
uno usando un comando de tipo GletG y la funcion Gincr0.2G solo usara
un contador 6ND0 %ue se incrementar( de uno en uno calculando su si#uiente
"alor mediante el uso del comando e+pr.
7acer una tercera funci&n GPruebaDie'Se#undos.2G %ue aceptar( como ar#umento
el nombre de la funcion de prueba .incr/ o incr02. Primero informara del
tiempo real de cpu de usuario y de cpu del sistema %ue consume dicha
funci&n y lue#o deber( e3ecutar dicha funci&n tantas "eces sea posible
en el transcurso de /C se#undos .apro+imadamente basta usar date G?DsG2
obteniendose el n$mero de "eces %ue se e3ecuto en esos die' se#undos.
Compare los resultados obtenidos con ambas funciones y e+pli%ue los
resultados.

lista_fich.txt
7acer un shell:script %ue acepte como ar#umentos nombres de ficheros
y muestre el contenido de cada uno de ellos precedido de una cabecera
con el nombre del fichero
media.txt
7acer un shell:script %ue calcule la media aritm!tica de
todos los ar#umentos pasados como par(metros con una
precisi&n de AC di#itos decimales despues de la coma.

mi_banner.txt
,ocalice en su sistema la utilidad GbannerG para consola. Puede haber
mas de una utilidad para esto y al#unas est(n pensadas para su uso
con impresora. Nos interesa la utilidad GbannerG para terminal de
forma %ue el comando Gbanner holaG #enere la si#uiente salida:
W W W
# # # # # # #
W W W W W
W W W W W
# # # # # # #
# # W W
Partiendo de esta utilidad realice un shell:script GmiObanner.shG %ue
admita hasta tres ar#umentos de tama=o m(+imo de cuatro caracteres
tal %ue el comando G./miObanner.sh hola 3ose luisG obten#a:
ooooooooo
oooooooo O/ O/ O/O/O/O/ O/ O/O/
ooooooo O/ O/ O/ O/ O/ O/ O/
oooooo O/O/O/O/O/O/ O/ O/ O/ O/ O/
ooooo O/ O/ O/ O/ O/ O/O/O/O/O/O/
oooo O/ O/ O/ O/ O/ O/ O/
ooo O/ O/ O/O/O/O/ O/O/O/O/O/O/ O/ O/
oo
ooooooooo
oooooooo O/ O/O/O/O/ O/O/O/O/ O/O/O/O/O/O/
ooooooo O/ O/ O/ O/ O/
oooooo O/ O/ O/ O/O/O/O/ O/O/O/O/O/
ooooo O/ O/ O/ O/ O/
oooo O/ O/ O/ O/ O/ O/ O/
ooo O/O/O/O/ O/O/O/O/ O/O/O/O/ O/O/O/O/O/O/
oo
ooooooooo
oooooooo O/ O/ O/ O/ O/O/O/O/
ooooooo O/ O/ O/ O/ O/
oooooo O/ O/ O/ O/ O/O/O/O/
ooooo O/ O/ O/ O/ O/
oooo O/ O/ O/ O/ O/ O/
ooo O/O/O/O/O/O/ O/O/O/O/ O/ O/O/O/O/
oo
mi_cal1.txt
4eali'ar un shell:script GmiOcal/.shG %ue utitil'ando la salida del
comando GcalG filtre su salida para resaltar entre corchetes
el d)a actual. Pon#a atenci&n a los d)as a principio de l)nea
los d)as a final de l)nea.
,a salida para el d)a K de ;ayo de 0CC0 deber)a ser la si#uiente:
./miOcal/.sh
;ay 0CC0
S ; 9u 8 9h F S
/ 0 1 A
YKZ L M R B /C //
/0 /1 /A /K /L /M /R
/B 0C 0/ 00 01 0A 0K
0L 0M 0R 0B 1C 1/
No es un e3ercicio tri"ial. Necesitar( hacer un filtrado en "arios pasos.
*tilice al#una combinaci&n de filtros sed encadenados con pipe.
Para poder comprobar %ue el pro#rama funciona correctamente para los
distintos d)as hacer %ue en caso de pasar un ar#umento este ser(
considerado el d)a del mes.
./miOcal/.sh /
;ay 0CC0
S ; 9u 8 9h F S
Y/Z 0 1 A
K L M R B /C //
/0 /1 /A /K /L /M /R
/B 0C 0/ 00 01 0A 0K
0L 0M 0R 0B 1C 1/
mi_cal2.txt
<asandose en el e3ercicio anterior reali'ar una modificaci&n
de GmiOcal/.shG %ue llamaremos GmiOcal0.shG %ue en lu#ar de
encadenar "arios comandos sed con pipes crear( un fichero temporal
G/tmp/NC.NN.sedG para ser usar mediande la opci&n :f de sed.
Ambos scrits deber(n producir id!ntico resultado.
mi_logrotate.txt
Asumiremos %ue tenemos en un directorio una serie de ficheros de
lo# %ue "an creciendo de forma ilimitada con el uso re#ular de
ciertos pro#ramas.
4eali'ar un shell:script %ue actue sobre los ficheros con nombre
tipo GV.lo#G del directorio actual de forma tal %ue si al#uno de
ellos supera en tama=o las 0CCC lineas de3ar( solo las $ltimas
/CCC l)neas del fichero y las restantes ser(n #uardadas en un
directorio oldOrot en formato comprimido.
En dicho directorio habr( %ue conser"ar en formato comprimido
no solo la $ltima porci&n eliminada del ori#inal sino las cuatro
$ltimas porciones eliminadas. Para ello ser( necesario ir rotando
los nombres de estos ficheros comprimidos incorporando en los mismos
un di#ito de secuencia.
.parte eliminada2 ::U V.lo#.rot/.#' ::U V.lo#.rot0.#' ::U
V.lo#.rot1.#' ::U V.lo#.rotA.#' ::U eliminado
El pro#rama durante su e3ecuci&n ir( mostrando los ficheros encontrados
y se=alar( a%uellos %ue por su tama=o sea necesario rotar.
ocupa_tmp_log.txt
5btiene la ocupacion de los directorios presentes en el sistema
cuyo nombre sea de la forma GVtmpG o GVlo#G ordenados por orden
de ocupacion.
Debera mostrar el numero de errores pro"ocados por GfindG.
Si se decide usar al#'n fichero temporal debera usar el
directorio G/tmpG para ello y usar un nombre %ue conten#a
el nombre del proceso %ue lo ori#ino y su pid.

palabras.txt
4ealice un shell:script %ue admita tres palabras como ar#umentos
y %ue muestre un mensa3e informando de las relaciones de i#ualdad
y desi#ualdad entre esas palabras.
Q,as tres son i#ualesQ
QSon i#uales primera y se#undaQ
QSon i#uales primera y terceraQ
QSon i#uales se#unda y terceraQ
QSon las tres distintasQ
piramide.txt
4ealice un shell:scrip Gpiramide.shG %ue admita como ar#umento un
n$mero GNG y %ue opten#a a la salida una serie de GNG filas de
forma trian#ular.
Para ./piramide.sh /0 la salida ser)a.
C/
C0 C0
C1 C1 C1
CA CA CA CA
CK CK CK CK CK
CL CL CL CL CL CL
CM CM CM CM CM CM CM
CR CR CR CR CR CR CR CR
CB CB CB CB CB CB CB CB CB
/C /C /C /C /C /C /C /C /C /C
// // // // // // // // // // //
/0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0

proceso.txt
7acer un shell:script llamado Gproceso.shG para ser lan'ado en bacH#round
%ue como ma+imo permanecera "i"o 1C se#undos.
Podra ser lan'ado "arias "eces en bacH#round y cada "e' #enerara un
shell:script distinto GstopOproceso.sh.G %ue al ser
e3ecutado matara el proceso lo ori#ino y despues se borrara a si
mismo.
vigila.txt
4eali'ar un shell:script %ue escriba en el fichero G/tmp/usuariosG
una linea con la fecha y otra con el n$mero de usuarios distintos
%ue estan conectados en ese momento cada dos minutos.
21. !"#$ %II& USU!"IO !F!'L!/O /$ LI'U)
%Introduccin a la se,unda parte&
,le"amos ya al#unos cap)tulos en los cuales estamos tocando muchos temas %ue podr)an
considerarse propios de un curso de administraci&n o de un curso a"an'ado de ,inu+. Xa no
hacemos tantas bromas y suponemos %ue ya ha perdido su inse#uridad inicial.
Consideramos %ue ya a estas alturas del curso tampoco es necesario recordarle a cada momento las
precauciones de traba3o. 9ambi!n asumimos %ue con la confian'a %ue da el saber del por%ue de las
cosas ya habr( practicado por su cuenta al#unas otras cosas %ue espec)ficamente le interesaban.
Para los %ue usen ordenador personal y %ue ten#an acceso a una cuenta de root es el momento de
dar al#$n conse3o por%ue es probable %ue cada "e' ten#an mas #anas de probar cosas distintas para
aprender por su cuenta. Para ellos les diremos %ue e+iste una m(+ima para todo administrador.
No modifi%ues nada %ue no puedas "ol"er a de3ar como estaba.
En otras palabras. Siempre siempre antes de hacer al#o ase#urate la posibilidad de poder
retroceder f(cilmente a la situaci&n inicial.
Por e3emplo si "as a tocar un fichero de confi#uraci&n del sistema saca antes una copia de ese
fichero. 5 %ui'(s la simple precauci&n de anotar en un papel un par de cosillas antes de cambiarlas
pueda e"itar un dis#usto.
;uy importante. 7a' re#ularmente copias de se#uridad. No manten#as tus copias en el mismo
disco %ue la informaci&n ori#inal. Como m)nimo usa tres copias de se#uridad estableciendo un
sistema de rotaci&n entre ellas.
*saremos el usuario root lo menos posible no para e"itar errores sino para e"itar %ue los errores se
con"iertan en 7orrores.
,inu+ es un S5 %ue no impone restricciones arbitrarias a los usuarios. Si una cosa no puede ser
reali'ada por un usuario normal es por%ue no supone una amena'a a la se#uridad del sistema y
siempre %ue se pueda es me3or no usar root.
Admitimos %ue un usuario de ,inu+ %ue lo instale en su propio sistema necesita reali'ar tareas de
administraci&n pero root es un usuario %ue debe usarse lo menos posible. Errar es humano pero el
desastre total es cosa de root. Por ello "amos a apurar las posibilidades de apreender desde una
cuenta de usuario normalita
9ambi!n hay %ue ad"ertir %ue no todos los sistemas son i#ual de permisi"os dependiendo de las
necesidades reales de se#uridad del sistema o del #rado de paranoia del administrador. Por e3emplo
una m(%uina %ue dispon#a de un ele"ado n$mero de cuentas para estudiantes deber( ser
administrada con mano firme por%ue siempre habr( m(s de un estudiante 3u#uet&n con #anas de
re)rse del administrador y basta uno de estos para tener un problema serio si no se toman
precauciones.
Si est( reali'ando este curso en una m(%uina de esas caracter)sticas posiblemente no pueda hacer
muchos de los e3ercicios propuesto simplemente por limitaciones impuestas desde root. El aumento
de la se#uridad de un sistema suele resultar en un aumento de la incomodidad para los usuarios.
El precio de la se#uridad es la incomodidad. El precio de la comodidad es la inse#uridad.
En particular el acceso a distintos dispositi"os hardware puede estar m(s o menos limitado.
Nosotros para esta se#unda parte "amos a suponer %ue las restricciones del sistema donde usted "a a
practicar no son e+cesi"as en este sentido. En cual%uier caso ya habr( notado %ue en las pr(cticas
mostramos y comentamos los resultados de las mismas. Por ello no se desanime si no puede reali'ar
ahora al#unas de las pr(cticas propuestas pero tambi!n se=alamos %ue Si esta usando un ordenador
personal o dispone de una cuenta en un sistema donde la confian'a en los usuarios por parte del
administrador es ele"ada podr( se#uramente sacarle mayor pro"echo a esta se#unda parte del curso.
22. Copias de se,uridad
or *u+ dedicamos un cap0tulo completo a esto.
Este cap)tulo trata de las Copias de Se#uridad tambi!n llamados respaldos o en in#l!s <acHups y
"amos en primer lu#ar a 3ustificar la ra'&n de dedicar un amplio cap)tulo a este tema %ue podr)a
parecer m(s apropiado para un curso de administraci&n.
E"identemente #aranti'ar la inte#ridad de la informaci&n de un sistema es un tema %ue es de
responsabilidad del administrador del sistema pero como ya hemos mencionado anteriormente el
ob3eti"o de esta se#unda parte del curso incluye las nociones m(s necesarias para administrar su
propio ordenador personal con ,inu+. El ob3eti"o es %ue sea autosuficiente.
,a se#uridad frente a ata%ues intencionados %ueda fuera de los prop&sitos de este curso pero no hay
da=o %ue no pueda ser reparado si tenemos una copia de se#uridad de toda la informaci&n %ue nos
interesa.
*n buen sistema de respaldo es la me3or forma de e"itar perdidas de informaci&n. Estas deben ser
pre"enidas dentro de lo posible pero dependiendo de las causas no siempre resulta posible hacerlo.
,as posibles causas para una perdida de informaci&n son:
Deterioro o borrado accidental por parte de un usuario autori'ado.
Ata%ue intencionado por parte de personas no autori'adas.
Fallo del software.
Fallo del hardware.
Jirus.
6ncendio robos y desastres naturales etc..
,a peor de todas es el borrado accidental por parte de un usuario autori'ado por%ue es totalmente
imposible de pre"enir.
Al#o puede hacerse. Por e3emplo en ,inu+ hay sustitutos para el comando GrmG %ue de3ar(n los
ficheros borrados en una papelera. 9ambi!n se pueden se#uir ciertas recomendaciones de prudencia
%ue minimicen los ries#os mediante determinadas pr(cticas pero siempre cabr( la posibilidad de un
fallo humano. El tema es ampl)simo y nos "amos a limitar a tratar solo de 4espaldos o Copias de
se#uridad.
/ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ /
Zorrado accidental de .ic7eros.
Debe saber %ue la operaci&n normal de borrado no destruye toda la informaci&n de los ficheros. Si
al#una "e' borra al#o muy importante en un sistema de ficheros y no tiene copia de se#uridad.
Deber( e"itar "ol"er a traba3ar sobre ese sistema de ficheros en modo lectura:escritura. Por el
contrario deber( montar ese sistema de ficheros en modo solo:lectura y confiar en %ue %uede al#o
recuperable en al#$n lado. 7ay pro#ramas %ue pueden ayudar en estas situaciones siempre %ue la
informaci&n no est! machacada con posteriores operaciones de escritura sobre esa partici&n. Si no
sabe %ue hacer no ha#a nada y pre#unte antes de intentar cosas %ue podr)an destruir definiti"amente
toda la informaci&n. Este tipo de recuperaciones son solo un $ltimo recurso y las posibilidades de
!+ito no son muy #randes.
*na cosa %ue se puede intentar en modo read:only .solo:lectura2 es leer directamente del
dispositi"o intentando filtrar cadenas de ficheros presentes en los ficheros borrados. Por e3emplo
usando #rep. Si las cadenas aparecen es se=al de %ue no se ha destruido toda la informaci&n.
/ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ /
Caracter0sticas de un buen sistema de respaldo.
*n sistema de respaldo debe de estar perfectamente planificado. Su planificaci&n de forma
autom(tica no siempre es posible debido a %ue re%uieren con frecuencia inter"enci&n humana.
Especialmente la copias %ue no caben en una sola cinta .multi"olumen2. ,o ideal es or#ani'ar su
propio sistema de respaldo en funci&n de las necesidades de su sistema. En un sistema es
con"eniente clasificar las diferentes partes de la informaci&n atendiendo a su importancia. ,o ideal
ser)a hacer respaldo de todo re#ularmente manteniendo distintas copias en rotaci&n. Es decir si
tenemos tres cintas para almacenar respaldos .Cinta A Cinta < y Cinta C2 deberemos ir #rabando
si#uiendo una secuencia circular A < C A < C... ,a frecuencia de los respaldos se determina en
funci&n de lo importante %ue sean los datos. Feneralmente es bueno hacer una copia diaria al menos
de la parte del sistema %ue supon#a mayor perdida de horas de traba3o en caso de incidente. De
todas formas hay %ue tener en cuenta %ue este sistema solo nos permite mantener copia de los
$ltimos tres o cuatro d)as. Esto no es suficiente por%ue muchas "eces nos interesa recuperar una
informaci&n de hace una semana un mes o incluso m(s tiempo. Por ello al#unas "eces se usan
rotaciones de siete cintas .una para cada d)a de la semana2 y una "e' al mes se saca otra copia en
una cinta distinta %ue se conser"a por un espacio de tiempo m(s lar#o se#$n con"en#a.
*na pr(ctica com$n es #uardar re#ularmente copias en otro edifico distinto para prote#erse de esa
forma de incendios inundaciones terremotos robos. Si despu!s de un desastre conser"amos los
datos "itales de nuestro ne#ocio %ui'(s podamos resur#ir de nuestras ceni'as m(s tarde.
Al#unas "eces no es posible hacer demasiadas copias de todo el sistema con demasiada frecuencia.
Por ello se pueden delimitar areas con distinto #rado de necesidad de respaldo. El sistema operati"o
y las aplicaciones no suelen "ariar y pueden ser recuperadas desde CDs de instalaci&n. Es
importante siempre mantener copias de todo el sistema. En cual%uier caso siempre ha de usarse
rotaci&n de cintas por%ue usar una sola copia es muy arries#ado.
,as cintas son ra'onablemente se#uras pero se pueden romper con el uso. De todas formas es
importante %ue la planificaci&n de respaldo del sistema no resulte complicada. 9raba3ar con
demasiados con3untos de cintas distintos no es bueno.
En la copia #eneral de todo el sistema se#uramente se #uardar(n cosas %ue "ar)an poco pero %ue
%ui'(s costaron mucho traba3o confi#urar. Por tanto es una copia %ue no necesita hacerse con
frecuencia pero deberemos disponer siempre de al#unas copias en buen estado aun%ue no sean muy
recientes.
9odas las copias deben ser sometidas de forma autom(tica a un proceso de "erificaci&n %ue en el
caso m(s sencillo consiste en leer la lista de ficheros %ue contiene. No es muy fiable pero al menos
detectaremos los fallos m(s importantes. En el me3or de los casos la comprobaci&n se hace sobre el
contenido completo compar(ndolo con el ori#inal. En este caso cuando la copia termina el ori#inal
puede haber cambiado y por ello la detecci&n de diferencias entre ori#inal y copia puede deberse a
un cambio en el ori#inal en lu#ar de un error en la copia.
*na cosa %ue se usa mucho son las copias #lobales combinadas con posteriores copias
incrementales. Es un sistema cuya principal "enta3a es la comodidad.
Copia incremental si#nifica %ue solo sal"amos lo $ltimo %ue ha cambiado desde la $ltima copia
#lobal. Por eso cada nue"a copia incremental resulta #eneralmente de mayor tama=o %ue la anterior.
Si la copia #lobal ocupa "arias cintas. Podemos hacer copias incrementales hasta %ue debido a su
pro#resi"o aumento de ocupaci&n no %uepan en una sola cinta por e3emplo momento en el %ue se
puede hacer una nue"a copia #lobal. En #eneral podemos hacer una nue"a copia #lobal cuando la
incremental empiece a resultar incomoda debido a su pro#resi"o aumento de tama=o.
Este sistema de copia hace recaer demasiada responsabilidad en una sola cinta. ,a $ltima copia
#lobal suele ser muy "oluminosa y puede contener informaci&n %ue no se encuentre en nin#una otra
cinta.
7ay acti"idades %ue pueden #enerar enormes ficheros de datos y eso incrementar( mucho la
ocupaci&n de nuestra si#uiente copia incremental. Por e3emplo si estamos #enerando una ima#en
animada de #ran tama=o o si estamos descar#ado de 6nternet im(#enes de CDs enteras deber)amos
#uardar esos datos en un sistema de ficheros especialmente dedicado a ello. De esta forma cuando
ha#amos respaldo podemos desmontar antes esa partici&n para poder reali'ar respaldos
independientes con la frecuencia %ue con"en#a en cada caso.
Siempre %ue se a=adan pa%uetes aplicaciones se confi#ure al#o con"iene "ol"er a sacar una nue"a
copia #lobal de todo el sistema.
/ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ /
Los soportes de la in.ormacin
El soporte m(s adecuado son las cintas. Es un sistema %ue supone un fuerte desembolso inicial pero
a la lar#a resulta m(s rentable y m(s se#uro %ue los dem(s. Adem(s cuando cambiemos de
ordenador podremos conser"arlo.
En cual%uier caso cada cinta debe de estar perfectamente eti%uetada .6dentificador cla"e de la cinta
9ipo de copia m(%uina contenido formato periodicidad etc...2
Despu!s en un papel habr( %ue re#istrar cada copia reali'ada con identificador de la cinta y fecha de
la copia %ue contiene.
Es muy importante tener un sistema bien pensado para %ue ofre'ca el m(+imo de se#uridad con el
m(+imo de comodidad. 7ay %ue establecer un buen plan %ue deber( con"ertirse en una rutina de
traba3o. Considere la incomodidad como un #ra")simo peli#ro por%ue puede deri"ar en
incumplimiento de esa importante obli#aci&n.
El d)a %ue no cumplamos nuestra obli#aci&n de hacer copia de respaldo ser( el d)a %ue el sistema
eli3a para darle un dis#usto .ley de ;urphy2. Para resultar c&modo debemos automati'ar con scripts
nuestro sistema de respaldo y las copias no deben tardar m(s de lo necesario.
,os discos duros e+traibles son una buena alternati"a para sistemas caseros. ,o %ue no tiene nin#$n
sentido es hacer copias de se#uridad en el mismo disco duro %ue contiene los datos aun%ue se
utilice una partici&n diferente. 4ecuerde %ue los discos duros pueden perder toda su informaci&n de
forma repentina.
Para #uardar datos de inter!s hist&rico %ue deban conser"arse durante a=os suele ser muy
interesante usar CDs.
,os dis%uetes son un medio muy poco fiable y cabe poca cosa.
/ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ /
"espaldo por partes
Antes %ue nada debe plantearse si realmente necesita hacer respaldo por partes. 4ecuerde %ue no
con"iene complicar mucho el plan de respaldo y no hay nada m(s sencillo %ue hacer respaldo de
todo de una "e' siempre %ue el tama=o de los datos lo permitan.
Para determinar la necesidad de respaldo de las partes del sistema con"iene %ue repase la lecci&n de
GSistema de Ficheros 666G Concretamente el p(rrafo dedicado a la GEstructura est(ndar del sistema de
ficheros de ,inu+G. Esto le ayudar( a comprender la naturale'a de los datos en las distintas partes
del sistema.
4ecuerde %ue pueden e+istir "ariaciones en funci&n de cada distribuci&n.
Cada sistema dependiendo de la acti"idad a la %ue sea dedicado tendr( unas necesidades totalmente
especiales de respaldo.
,as partes de mayor inter!s con "istas a respaldos frecuentes suelen ser /home/ /root/ y /usr/local/
En al#unos casos /"ar/lo# o un directorio %ue conten#a una base de datos pueden ser muy
importantes pero eso son cosas %ue cada cual debe determinar. Si lo importante ocupa m(s del KCD
del sistema lo m(s sencillo ser)a por copias #lobales e incrementales de todo el sistema pero en un
ordenador de uso personal con #ran cantidad de pa%uetes instalados la parte importante a la hora de
hacer respaldo no suele ser tan #rande.
,a parte m(s "ariable del sistema est( en /"ar/ y concretamente en /"ar/lo# es donde se re#istran los
lo#s del sistema %ue son ficheros %ue informan de todo tipo de cosas %ue "an sucediendo en el
mismo. En al#unos sistemas estos lo#s tienen una importancia mayor %ue en otros. Por e3emplo si
e+iste al#una aplicaci&n %ue toma estos lo#s para elaborar estad)sticas. En otros sistemas no
resultar( demasiado cr)tico %ue la $ltima copia de /"ar/ no sea muy reciente pero %ue e+ista al
menos una copia si es fundamental.
7acer las cosas en un solo paso no es siempre buena idea. ,o principal es dar pasos %ue puedan
deshacerse si nos e%ui"ocamos en al#o por eso siempre %ue sea posible con"iene recuperar en un
lu#ar distinto al ori#inal. ,ue#o si todo ha ido bien podemos trasladar las cosas a su destino
definiti"o. ,os %ue se pre#untan para %ue tantas precauciones son los %ue m(s tarde se pre#untar(n
as) mismo cosas bastante lamentables. Cuando se pierde toda la informaci&n de un sistema
tendremos %ue recuperarlo todo partiendo de los discos de instalaci&n y de la copia.
/ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ /
ro,ramas de utilidad para realizar respaldos.
Para reali'ar copias de se#uridad podemos usar aplicaciones completas pensadas para ello o
fabricarnos al#o a medida combinando una serie de utilidades de las cuales la mayor)a ya han sido
mencionadas al#una "e' en cap)tulos anteriores. Esto $ltimo es lo %ue "amos a hacer nosotros
por%ue as) podr( dise=ar al#o personali'ado y tambi!n por%ue resulta m(s did(ctico.
Nosotros solo "amos describir todas estas utilidades de forma muy enfocada al uso %ue "amos a
hacer de ellas. Puede usar el manual para consultar lo %ue no necesite.
,os pro#ramas m(s $tiles son a%uellos %ue sir"en para empa%uetar dentro de un solo fichero una
#ran cantidad de ficheros y directorios como por e3emplo GtarG GcpioG y GafioG pero de ellos
hablaremos en el si#uiente cap)tulo. Antes "amos a comentar otra serie de pro#ramas %ue pueden
combinar con estos empa%uetadores o %ue su uso puede ser interesante en tareas relacionadas con el
respaldo.
find./2 Se usar( para elaborar una lista de ficheros %ue deseamos sal"ar. Su "ersatilidad es enorme.
,a opci&n :newer resultar( de especial inter!s en el caso de desear hacer copias incrementales.
5bser"e %ue nosotros nos situaremos pre"iamente en un directorio adecuado y lue#o usaremos Gfind
. G para pasar a find nombres %ue empie'an con G.G. Es decir usaremos caminos relati"os en lu#ar de
caminos absolutos. Esto tiene su importancia por%ue de ese modo lue#o podremos recuperar la
informaci&n situ(ndola en otro lu#ar distinto al ori#inal si fuera necesario.
e#rep./2 Se usa para intercalarlo entre la salida de GfindG y la entrada de GcpioG de esa forma se
aumenta la fle+ibilidad de uso. Se puede usar para incluir determinados ficheros %ue cumplan
determinada e+presi&n re#ular y/o para e+cluir determinados ficheros %ue cumplan determinada
e+presi&n re#ular. Para e+cluir se usa la opci&n :".
#'ip./2 Es el compresor de uso m(s frecuente en ,inu+. Esta muy probado y es muy fiable. Cuando
se coloca un compresor como #'ip o b'ip0 a la salida de GcpioG o de GtarG se pierde la posibilidad de
hacer copia multi"olumen por%ue el compresor es el %ue est( escribiendo en el dispositi"o en lu#ar
de hacerlo GcpioG o GtarG. Afortunadamente GafioG si puede hacerlo.
b'ip0./2 Es m(s eficiente en el sentido de %ue puede comprimir al#o m(s pero a costa de tardar
mucho m(s.
diff./2 Detecta diferencias de contenido entre dos ficheros. Especialmente adecuado para ficheros
de te+to.
mdKsum./2 Permite asociar un c&di#o de comprobaci&n al contenido de un fichero o dispositi"o
etc..
dircomp./2 Permite comparar dos directorios anali'ando su contenido recursi"amente.
dirdiff./2 Permite comparar dos directorios anali'ando su contenido recursi"amente. Es m(s
elaborado %ue el anterior.
mt./2 Es la utilidad %ue se usa para controlar las cintas ma#n!ticas. Permite operaciones de
rebobinado retension lectura de estado etc.
dd./2 Sir"e para copiar o leer dispositi"os usando el tama=o de blo%ue %ue se desee. 9ambi!n
permite reali'ar ciertas con"ersiones.
Por e3emplo para copiar un dis%uete:
N dd if@/de"/fdC of@fichero
N dd of@/de"/fdC if@fichero
touch./2 Sir"e para actuali'ar la ficha de modificaci&n de un fichero cre(ndolo en caso de %ue no
e+ista y se puede usar para #uardar el instante en %ue se reali'a una copia para lue#o tomar ese
momento como referencia en copias incrementales.
Por e3emplo para modificar la fecha de modificaci&n de un fichero a3ust(ndola con la hora y fecha
actual har)amos lo si#uiente:
N touch fichero
Para modificar la fecha de modificaci&n de un fichero a3ust(ndola con la fecha de ayer har)amos:
N touch :t yesterday fichero
Para modificar la fecha de modificaci&n de un fichero a3ust(ndola con la misma fecha %ue la de un
fichero de referencia har)amos:
N touch :r fichOref fichero
En todos los casos si el fichero no e+iste se crear( con tama=o i#ual a cero.
tee./2 Permite bifurcar una salida en dos. De esa forma podemos #uardar la lista de ficheros %ue
estamos entre#ando a GcpioG o a GafioG con ob3eto de poder compararlas lue#o por e3emplo.
mount./2 ;onta un sistema de ficheros.
umount./2 Desmonta un sistema de ficheros.
/ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ /
ro,ramas para empa*uetar .ic7eros <tar<, <cpio<, y <a.io<
Jamos a "er ahora una serie de pro#ramas capaces de empa%uetar "arios ficheros en uno solo.
tar./2 Es similar a cpio en el sentido de %ue sir"e tanto para sal"ar como para recuperar ficheros. ,a
salida puede ser a dispositi"o fichero o a un proceso i#ual %ue cpio pero no acepta por su entrada
est(ndar una lista de ficheros. 7ay %ue pasarlos como ar#umentos.
GtarG admite nombres de ficheros y directorios como ar#umentos. ,os directorios ser(n tratados
recursi"amente. sal"ando y recuperando todo su contenido. En ,inu+ GtarG tiene opciones para
obtener una salida ya comprimida. Para especificar el fichero o el dispositi"o donde se #uardar( la
copia se usa :f archi"o.
En lu#ar de archi"o se puede especificar un dispositi"o ./de"/dispositi"o2 o tambi!n se puede usar
entrada salida mediante G:f :G.
Para crear la copia se usa :c para leer la lista de fichero se usa :t y para e+traer los fichero se usa :+
. Se puede usar compresi&n con la opci&n :'.
Jeamos al#unos e3emplos:
N W Sal"ar el directorio actual completo en Gfichero.tarG
N tar :cf fichero.tar .
N W ,ista abre"iada .solo nombres de ficheros2 del contenido
N W de la copia Gfichero.tarG
N tar :tf fichero.tar
N W ,ista detallada del contenido de la copia Gfichero.tarG
N tar :t"f fichero.tar
N W E+tracci&n completa del contenido de la copia Gfichero.tarG
N tar :+f fichero.tar
cpio./2 Se puede usar para sal"ar o recuperar una serie de ficheros. Su salida puede ser en"iada a un
dispositi"o a un fichero o a un compresor. ,a lista de ficheros de un pa%uete cpio puede obtenerse
con la opci&n :t. Esta lista de ficheros solo incluye los nombres de los mismos. Fuardando esta lista
en un fichero edit(ndolo despu!s de forma %ue eliminemos todos menos a%uellos %ue %ueramos
recuperar podremos usarlo para recuperar con la opci&n :i. ,a opci&n :t combinada con :" obtiene
no solo los nombres sino tambi!n permisos fechas tama=os de ficheros etc.. Es decir Gcpio :tG act$a
como un GlsG y Gcpio :t"G act$a como Gls :lG. ,a opci&n :d combinada con G:iG permite la creaci&n de
directoriosG. ,a opci&n G:mG conser"a la fecha de modificaci&n de los ficheros. ,a fecha de
modificaci&n de los directorios no siempre se conser"a pero no suele considerarse importante.
Se#uramente el propio GcpioG al copiar ficheros dentro del directorio creado se pro"oca la alteraci&n
de esta fecha y la $nica forma de respetar la fecha de modificaci&n de los directorios ser)a hacer una
se#unda pasada una "e' %ue todos los ficheros estu"ieran creados. Puede %ue al#una utilidad o
al#una "ersi&n de cpio si lo ha#a. Si tiene dudas compruebelo. ,a opci&n G:pG de cpio permite copiar
estructuras enteras desde un lu#ar a otro. ,a recuperaci&n de ficheros con cpio admite uso de
patrones. Es interesante comprobar %ue a%u) el operador GVG tambi!n e+pandir( caracteres G/G cosa %ue
por e3emplo el bash y otros pro#ramas no hacen.
Al#unos e3emplos sencillos:
N WSal"ar un fichero
N echo fichero > cpio :o U fich.cpio
N WSal"ar "arios ficheros
N cpio :o U fich.cpio T cat listaOficherosG
N W,ista detallada de los ficheros contenidos en la copia
N cpio :it"c T fich.cpio
N W4ecuperacion de los ficheros creando directorios cuando sea
N Wnecesario .:d2 y conser"ando la fecha de modificaci&n los ficheros
cpio :i"cdm T fich.cpio
Para usar un dispositi"o en lu#ar de un fichero bastar)a con sustituir en el e3emplo Gfich.cpioG por
G/de"/dispositi"oG.
Para e"itar conflictos en sistemas de ficheros con n$mero de inodos ele"ado se usa la opci&n .:7
newc2. 4ecomendamos %ue la use siempre.
,a opcion :< usar( blo%ues de K/0C bytes en lu#ar de blo%ues de K/0 bytes.
Jamos a usar esta opci&n en los si#uientes e3emplos y adem(s usaremos entrada salida a cinta con
compresi&n de datos.
N W Sal"ar todo el rabol de directorios desde el directorio actual
N W en formato comprimido.
N find . > cpio :o"<7 newc > #'ip U /de"/stC
N W ,istado detallado del contenido de la copia
N #'ip :d T /de"/stC > cpio :it"<7 newc
N W Fuardar listado sencillo .solo nombres de ficheros2 en
N W el fichero Gcontenido.t+tG
N #'ip :d T /de"/stC > cpio :it<7 newc U contenido.t+t
N W Suponemos %ue editamos el fichero anterior Gcontenido.t+tG
N W y de3amos solo a%uellos ficheros %ue deseamos recuperar en
N W el fichero Gselecci&nG.
N W 4ecuperamos de la si#uiente forma:
N #'ip :d T /de"/stC > cpio :i"udm<7 newc \cat seleccion\
Con la opcion :p podemos copiar todo el contenido de un directorio a otro directamente sin pasar
por una salida intermedia empa%uetada en formato GcpioG. Esto es muy util para trasladar directorios
enteros.
N cd ND64O546FEN
N find . > cpio :pdm ND64ODES96N5
afio./2 Es una interesant)sima "ariaci&n de cpio. 9iene entre otras cosas la posibilidad de comprimir
los ficheros de uno en uno. Esto le proporciona mayor se#uridad ya %ue una copia de cpio o de tar
comprimida tiene el #ra"e problema de %ue en caso de un pe%ue=o error en la copia toda la copia
%ueda inutili'ada. Con afio solo %uedar( da=ado el fichero donde ocurra en error. Adem(s con GafioG
es posible hacer copias multi"olumen comprimidas. GafioG reconoce las e+tensiones de a%uellos
ficheros %ue no interesa comprimir por %ue ya lo est(n: ..] .' .#' .b'0 .t#' .arc .'ip .rar .l'h .lha .uc0
.tp' .ta' .t#' .rpm .'oo .deb .#if .3pe# .3p# .tif .tiff y .pn#2. *na "enta3a m(s de GafioG es %ue permite
"erificar la copia con el ori#inal. .5pci&n :r2
Para hacer pruebas con GafioG situese en el directorio /tmp. Fenere al#unos ficheros #randes para
poder hacer lue#o pruebas de copias de se#uridad usando dis%uetes. Por e3emplo para #enerar un
fichero de 0;bytes de perfecta basura puede usar lo si#uiente:
N cd /tmp
N mHdir pruebafio
N cd pruebafio
N echo / U fich/
N #'ip ::fast T /de"/'ero > head ::bytes@0m U fich0
N echo 1 U fich1
N mHdir dir/
N echo A U dir//fileA
N cp fich0 fichK.#'
N ls :l4
.:
total A//L
drw+r:+r:+ 0 root root ACBL abr R /1:CL dir/
rw:r::r:: / root root 0 abr R /1:CK fich/
rw:r::r:: / root root 0CBM/K0 abr R /1:CK fich0
rw:r::r:: / root root 0 abr R /1:CL fich1
rw:r::r:: / root root 0CBM/K0 abr R /1:11 fichK.#'
./dir/:
total A
rw:r::r:: / root root 0 abr R /1:CL fileA
<ueno con esto tenemos una estructura de ficheros para hacer pruebas. Jamos a hacer pruebas de
copias multi"olumen comprimidas %ue son las m(s interesantes y usaremos dis%uetes de
/.AA;bytes. Xa hemos dicho %ue los dis%uetes no son fiables pero su pe%ue=o tama=o lo hace ideal
para hacer pruebas de copias multi"olumen. Para usar dis%uetes con"iene usar el par(metro :F.
Entre otras cosas ad"ierta %ue tenemos dos ficheros id!nticos Gfich0G y GfichK.#'G %ue admiten una
compresi&n me3or %ue la reali'ada con la opci&n ::fast de #'ip. Pero uno de ellos ser( reconocido
como fichero comprimido y se #uardar( tal cual est( y el otro ser( comprimido. .Por cierto de forma
espectacular2.
Formatee un par de dis%uetes de /.AA;<ytes con Gmformat a:G
Compruebe %ue se encuentra en /tmp/pruebafio y e3ecute los comandos si#uientes:
N W Para sal"ar a dis%uete multi"olumen comprimido
N find . > afio :o :" :s /AACH :F :] /de"/fdC
. :: oHay
fich/ :: oHay
fichK.#' :: oHay
fich1 :: oHay
dir/ :: oHay
dir//fileA :: oHay
fich0.' :: .CCD2
afio: Q/de"/fdCQ Yoffset 0m?MH?CZ: Ne+t disH needed
afio: 4eady for disH 0 on /de"/fdC
afio: Q%uitQ to abortQfQ to format anythin# else to proceed. U
afio: Q/de"/fdCQ Yoffset 0m?MH?CZ: Continuin#
N W Alteramos el ori#inal de fich1 en disco
N echo 33333 U fich1
N W
N W Jol"er a colocar el primer dis%uete de la copia
N W Para comprobar con el ori#inal una copia comprimida en "arios dis%uetes
N afio :r :" :s /AACH :F :] /de"/fdC
drw+r:+r:+ / root root Apr R /1:11:01 0CC/ .
rw:r::r:: / root root 0 Apr R /1:CK:0A 0CC/ fich/
rw:r::r:: / root root 0CBM/K0 Apr R /1:11:// 0CC/ fichK.#'
afio: Q/de"/fdCQ Yoffset /m?A/LH?CZ: 6nput limit reached
afio: 4eady for disH 0 on /de"/fdC
afio: Q%uitQ to abortQfQ to format anythin# else to proceed. U
afio: Q/de"/fdCQ Yoffset /m?A/LH?CZ: Continuin#
rw:r::r:: / root root 0 Apr R /1:CL:CC 0CC/ fich1
afio: Qfich1Q: Corrupt archi"e data
drw+r:+r:+ / root root Apr R /1:CL:/R 0CC/ dir/
rw:r::r:: / root root 0 Apr R /1:CL:/R 0CC/ dir//fileA
rw:r::r:: / root root AB1B Apr R /1:CK:AR 0CC/ fich0 :: compressed
N W Jol"er a colocar el primer dis%uete de la copia
N W Para obtener la lista de ficheros de una copia comprimida en dis%uete
N afio :t :" :s /AACH :F :] /de"/fdC
drw+r:+r:+ / root root Apr R /1:11:01 0CC/ .
rw:r::r:: / root root 0 Apr R /1:CK:0A 0CC/ fich/
rw:r::r:: / root root 0CBM/K0 Apr R /1:11:// 0CC/ fichK.#'
afio: Q/de"/fdCQ Yoffset /m?A/LH?CZ: 6nput limit reached
afio: 4eady for disH 0 on /de"/fdC
afio: Q%uitQ to abortQfQ to format anythin# else to proceed. U
afio: Q/de"/fdCQ Yoffset /m?A/LH?CZ: Continuin#
rw:r::r:: / root root 0 Apr R /1:CL:CC 0CC/ fich1
drw+r:+r:+ / root root Apr R /1:CL:/R 0CC/ dir/
rw:r::r:: / root root 0 Apr R /1:CL:/R 0CC/ dir//fileA
rw:r::r:: / root root AB1B Apr R /1:CK:AR 0CC/ fich0 :: compressed
N W Creamos un se#undo directorio y nos situamos en el
N mHdir ../pruebafio0
N cd ../pruebafio0
N W
N W Para recuperar una copia comprimida en dis%uete
N W Jol"er a colocar el primer dis%uete de la copia
N afio :i :" :s /AACH :F :] /de"/fdC
. :: oHay
fich/ :: oHay
afio: Q/de"/fdCQ Yoffset /m?A/LH?CZ: 6nput limit reached
afio: 4eady for disH 0 on /de"/fdC
afio: Q%uitQ to abortQfQ to format anythin# else to proceed. U
afio: Q/de"/fdCQ Yoffset /m?A/LH?CZ: Continuin#
fichK.#' :: oHay
fich1 :: oHay
dir/ :: oHay
dir//fileA :: oHay
fich0 :: uncompressed
N W Jamos a comparar los dos directorios
N cd ..
N dircomp pruebafio pruebafio0
T 10A/1AL0AK L ./fich1
U A/LACCM/0K 0 ./fich1
N W
N W *n an(lisis m(s detallado de las diferencias de ambos directorios
N W Se puede hacer con dirdiff
N dirdiff pruebafio pruebafio0
0 d d : U @
0 d d : U @ dir/
@ r r @ @ @ dir//fileA
@ r r @ @ @ fich/
@ r r @ @ @ fich0
/ r r [ T @ fich1
@ r r @ @ @ fichK.#'
^ ^ ^ ^ ^ ^
> > > > > P P5F
> > > > P DA9
> > > P CES
> > P F60
> P F6/
P F60
N W Para comprobar dos ficheros podemos usar mdKsum
N mdKsum pruebafio/fich/ pruebafio0/fich/ pruebafio/fich1 pruebafio0/fich1
mdKsum pruebafio/fich/ pruebafio0/fich/ pruebafio/fich1 pruebafio0/fich1
bC0L10AcLBCAb0aBcbAbRRdLdL/cR/d/ pruebafio/fich/
bC0L10AcLBCAb0aBcbAbRRdLdL/cR/d/ pruebafio0/fich/
MKRBAc0b1dKc1bMR1M0afL1LBAcdcLKB pruebafio/fich1
LdMfceBfeeAM//BAaaRbKbLeAM0LMfC1 pruebafio0/fich1
,as p(#inas man de GafioG contienen al#unos e3emplos interesantes. Por e3emplo "iene como hacer
una copia sobre una unidad de cdrom.
find . > afio :o :b 0CAR :s10KCCC+ :" Ggcdrecord .. :G
Sin duda al#una afio es un e+celente pro#rama para sus respaldos y le recomendamos %ue lo pon#a
a prueba y se familiarice con !l.
4esumiendo Con"iene conocer tanto GcpioG como GtarG por%ue son dos cl(sicos de los sistemas
operati"os tipo *ni+ y ambos son muy utili'ados. Cada uno tiene sus "enta3as y sus incon"enientes.
Por otra parte GafioG es mucho m(s reciente y por lo tanto su uso no es tan amplio pero eso podr)a
cambiar en un futuro #racias a sus indudables me3oras t!cnicas respecto a los dos cl(sicos antes
mencionados.
El $nico moti"o %ue se me ocurre por el cual se podr)a desaconse3ar el uso de GafioG es por temas de
portabilidad entre distintas m(%uinas con distintos S5. En ese caso para #aranti'ar %ue la copia
ten#a un formato lo m(s uni"ersal posible lo recomendable ser)a usar GtarG sin compresi&n pero eso
no 3ustifica de3ar de usar GafioG para las copias de se#uridad rutinarias renunciando a sus indudables
"enta3as.
5bser"e %ue la salida de informaci&n siempre %ue resulta posible se hace a salida estandar. En caso
%ue se #eneren dos salida se usa la salida estandar como salida principal. ,a salida estandar de
errores se usar( como salida secundaria me'clada con posibles mensa3es de error.
Concretamente la opci&n :t en GtarG y GcpioG entre#an a salida estandar el resultado pero la opcion :o y
la opci&n :" de GcpioG 3untas hacen %ue la salida de la copia se diri3a a salida estandar y la lista de los
ficheros se diri3ir( entonces a la salida estandar de errores.
En cual%uier caso las posibilidades de cual%uiera de estos tres pro#ramas son muy "ariadas. Es
imprescindible acudir "a las p(#inas man de cada uno de ellos para tener una "isi&n completa de sus
posibilidades. Nosotros nos hemos limitado e+plicar con ayuda de e3emplos al#unas de sus
posibilidades.
/ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ /
Un pro,rama completo PbacPup%1&
Es un pro#rama muy completo para hacer bacHups. Es /CCD libre .,icencia Artistic2 y est( escrito
en len#ua3e shell:script. ,a interfa' de usuario a base de un completo sistema de men$s est(
pro#ramado haciendo uso de Gdialo#G. Permite usar encriptaci&n p#p. Compresi&n mediante doble
bufferin# para para optimi'ar la escritura en cintas y como herramienta de empa%uetado de ficheros
usa GafioG o GtarG se#$n con"en#a.
Es altamente confi#urable y "ers(til.
Permite almacenar distintas confi#uraciones para distintos tipos de copias.
Si no %uiere reali'ar un sistema a su medida puede usar GHbacHupG para sus copias.
/ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ /
"ecuperacin total desde cero
;uchas "eces tener un dis%uete o CD45; de rescate con las herramientas necesarias simplifica
mucho las cosas. 4ealmente todo podr)a resultar tan sencillo como arrancar con ese sistema de
rescate y recuperar la cinta sobre el sistema de ficheros adecuadamente montado.
Si usa pro#ramas espec)ficos como GHbacupG deber( in"esti#ar la forma de recuperar una copia de
GHbacupG sin usar GHbacupG. En su defecto deber)a tener un dis%uete o cdrom de rescate
.autoarrancable2 %ue conten#a GHbacHupG.
,as copias de Hbacup pueden ser mane3adas por GafioG o GtarG. Por e3emplo en caso de perdida de todo
el sistema %ui'(s no ten#amos forma de hacer funcionar GHbacHupG pero si GtarG o GcpioG. En este caso
es importante saber %ue las copias de GHbacupG escriben en primer lu#ar un fichero de cabecera %ue
incluye informaci&n sobre el formato %ue se uso para esa copia.
En cual%uier caso debe de tener claro cual ser( la recuperaci&n de una cinta de se#uridad de todo el
sistema desde cero y si tiene posibilidades de hacer pruebas sin comprometer datos importantes
ha#alo. *se por e3emplo un se#undo ordenador sin informaci&n importante.
/ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ /
Copia usando dispositivo de cinta scsi.
El uso de todos los dispositi"os de cinta SCS6 es bastante similar. ,o usaremos como para nuestro
e3emplo. Estos dispositi"os tienen "arios controladores y nos fi3aremos ahora en dos de ellos.
/de"/stC Dispositi"o de cinta SCS6 Con autorebobinado.
/de"/nstC Dispositi"o de cinta SCS6 Sin autorebobinado.
El autorebobinado si#nifica %ue el cierre del dispositi"o pro"oca el rebobinado autom(tico al
principio de la cinta. Nosotros usaremos para la copia de se#uridad /de"/stC .Con auto rebobinado2
Solo usaremos /de"/nstC para rebobinado y retension de la cinta. El retensionado de la cinta es una
operaci&n muy necesaria y en principio el pro#rama de e3emplo pro"ocar( siempre un retensionado
de la cinta. ,as cintas %ue no son retensionadas de "e' en cuando puede lle#ar a romperse o
atascarse.
,os controles %ue "amos a usar sobre la cinta son:
mt :f /de"/nstC rewind
mt :f /de"/nstC retension
mt :f /de"/stC status
,os dos primeros ya han sido mencionados y el $ltimo proporciona informaci&n sobre el estado de
la cinta.
Jamos a proporcionar un script para hacer respaldos basado en el uso de afio. Deber( estudiarlo
para adaptarlo a sus necesidades.
Est( pensado para usar cintas scsi. Se puede adaptar f(cilmente para otros dispositi"os o para copia
sobre fichero. Si esto no le #usta siempre puede usar un pro#rama completo de bacHup como
GHbacHupG y si le #usta pero lo encuentra incompleto puede encontrar soluci&n a sus necesidades
concretas inspeccionando el c&di#o de GHbacHupG %ue est( escrito en shell:script.
*n pro#rama de bacHup m(s %ue "ers(til ha de ser c&modo. Xa lo di3imos antes. El bacHup es una
tarea rutinaria y muy importante. 6nteresa tener un sistema %ue permita meter la cinta dar dos o tres
tecla'os y de3ar %ue el resto lo ha#a el ordenador. De esa forma el d)a %ue estemos cansados no
tendremos e+cusa para no hacer la copia.
,o %ue "iene a continuaci&n es un e3emplo y los e3emplos han de ser sencillos pero estamos
se#uros %ue le resultar( muy f(cil adaptarlo a su necesidades.
En este e3emplo nosotros e+cluimos /mnt por%ue es un directorio donde suponemos %ue hay
montados dispositi"os %ue no deben ser respaldados.
Para hacer un respaldo sobre un fichero con"iene usar un disco distinto montado en un lu#ar %ue
%uede e+cluido de la copia. En nuestro e3emplo podr)amos situar el fichero de respaldo dentro de
/mnt.
Analice el script a conciencia. Acuda al manual on line para cada uno de los comandos %ue
representen al#una duda y si a pesar de eso al#o sale mal insistimos en recordarle %ue toda la
responsabilidad en el uso de esto o de cual%uier otro material del curso es solo suya.
Wg/bin/bash
W
test9ape.2a
echo Q Inserte la cinta ${DATOS} Q
echo Q.... pulse T6ntroU para continuarQ
read
echo
mt :f /de"/nstC rewind
mt :f /de"/stC status
echo
afio :r"] :b Na<,5CEb :s NaCAPC6N9Ab T /de"/stC > more
b
W
preparar.2a
4EFO6NC4@Q Q
if Y QN96P5Q @ Q6Q Z
then
4EFO6NC4@9ONaDA95Sb
fi
if Y QN96P5Q @ QiQ Z
then
4EFO6NC4@6ONaDA95Sb
fi
9ODA95S@Na96P5bONaDA95Sb
FEC7A@\date ?DyDbDd\
P4E5*9@QNa<ACE*Pb/history/NaFEC7AbNa9ODA95SbQ
P4E,AS9@QNa<ACE*Pb/last/Na9ODA95SbQ
9O4EFO6NC4@QNa<ACE*Pb/last/Na4EFO6NC4b.timeQ
F6F51@/tmp/F6F5Osal"aOlst.NN
F6F515*9@NaP4E5*9b.lst
echo
echo G G NaFEC7Ab Na9ODA95Sb G G
echo G
G
df
echo G
G
if Y QN96P5Q @ QiQ Z >> Y QN96P5Q @ Q6Q Z
then
echo QSe recuperar( informaci&n posterior a ...Q
ls :ld N9O4EFO6NC4 > cut :c A0
fi
echo
echo Qdesde@NDESDE incluir@N6NC,*64 e+cluir@NE[C,*64 datos@NDA95SQ
echo Qgg Compruebe %ue los dispositi"os montados coinciden para NDA95S ggQ
echo Q.... pulse T6ntroU para continuarQ
read
echo Q Inserte la cinta. Asegurese que est desprotegida Q
echo Q....Espere a %ue est! lista y pulse T6ntroU para continuarQ
read
echo
mt :f /de"/nstC rewind
mt :f /de"/stC status
echo QEspere. 4eali'ando prueba de escritura ....Q
if g echo Q Prueba de #rabacion 5E Q > blocHout U /de"/stC
then
echo Q ggg 6mposible escribir gggQ
e+it
else
blocHout T /de"/stC
fi
mt :f /de"/nstC rewind
echo
echo :e GPMPcG sleep /
echo :e GPMPcG sleep /
echo :e GPMPcG sleep /
echo Q Compruebe estado de la cinta Q
echo Q.... pulse T6ntroU para continuarQ
read
b
W
sal"a.2a
4E9ENS@QSQ
clear
echo Q gg <acHup en marcha gg $T_DATOS"
COMIENZO=`date`
if [ "$RETENS" = "S" ]
then
echo "Retension de la cinta ............."
mt -f /dev/nst0 retension
sleep 5
fi
cd $DESDE
touch ${PRELAST}.time
chmod 400 ${PRELAST}.time
echo "Salidas en ${PREOUT}."
INI=`date "+%d %b %Y %r"`
echo "Grabando en cinta la copia de seguridad ............"
mknod --mode=600 $FIFO3 p
cut -b 3- < $FIFO3 | egrep -v '^$' | sort > $FIFO3OUT &
rm ${PRELAST}.lst 2> /dev/null
ln -s $FIFO3OUT ${PRELAST}.lst
W Comien'a realmente la copia
if [ "$TIPO" = "T" ]
then
nice find . -print | egrep -v $EXCLUIR | egrep $INCLUIR | \
tee $FIFO3 | afio -ovZ -b ${BLOCK} -s ${CAPCINTA} /dev/st0
else
nice find . -newer $T_REF_INCR -print | egrep -v $EXCLUIR |
\
egrep $INCLUIR | tee $FIFO3 | afio -ovZ -b ${BLOCK} \
-s ${CAPCINTA} /dev/st0
fi
W Fin #
FIN=`date "+%r"`
echo "$INI
> !"#$
mt %f &de'&st( status
echo $Copia en cinta terminada )))))))$
echo $"niciando comprobaci*n )))))))))$
afio %t+ %b ,-./C01 %s ,CA2C"#TA1 &de'&st( 3 sort >
,2RE/4T1)tape
diff !"!/5/4T ,2RE/4T1)tape > ,2RE/4T1)diff
echo $$
echo $6 ! " # - A C 0 4 2 6$
echo >
,2RE/4T1)log
echo $6 ,2RE/4T1)log $ >>
,2RE/4T1)log
echo $6 Comen7* C/8"E#+/$ >>
,2RE/4T1)log
echo $6 !inali7* 9date9$ >>
,2RE/4T1)log
echo $6 :iferencias 9cat ,2RE/4T1)diff 3 wc %l9 $ >>
,2RE/4T1)log
echo $6 :iferencias;ead 9head %n < ,2RE/4T1)diff9 $ >>
,2RE/4T1)log
echo $ ))))$ >>
,2RE/4T1)log
echo $6 :iferenciasTail 9tail %n < ,2RE/4T1)diff9 $ >>
,2RE/4T1)log
echo $b7ip= !"!/5/4T ,2RE/4T1)tape ,2RE/4T1)diff$
b7ip= !"!/5/4T ,2RE/4T1)tape ,2RE/4T1)diff
echo $rm !"!/5$
rm !"!/5
echo $$
cat ,2RE/4T1)log
echo $$
1
%1&>
sal'a?tmp@A,
:ES:EB'&tmp'
"#C.4"RB"#C.4"R?T/:/S
ECC.4"RBECC.4"R?#"#D4#/
:AT/SB$tmp$
preparar
sal'a
1
%2&>
sal'a?root@A,
:ES:EB'&'
"#C.4"RB"#C.4"R?T/:/S
ECC.4"RB$E)netscape&cache&3E&core3F)&tmp3F)&proc3F)&mnt3F)&mount$
:AT/SB$root$
preparar
sal'a
1
%-&>
sal'a?home@A,
:ES:EB'&home'
"#C.4"RB"#C.4"R?T/:/S
ECC.4"RBECC.4"R?#"#D4#/
:AT/SB$home$
preparar
sal'a
1
8A"#
C!CI'#!J-]VVm
ZLOCgJ1VP
I'CLUI"e#O/OSJ\f.\
$)CLUI"e'I';U'OJ\f.ItmpBf.Iproc\
Z!CgUJ\IbacPup\
mPdir GZ!CgU 2> IdevInull
mPdir GSZ!CgUTI7istory 2> IdevInull
mPdir GSZ!CgUTIlast 2> IdevInull
cd GSZ!CgUTI7istory
clear
ec7o \ Z!CgU XdateX >$
echo
ls %rt 6)log
echo
sleep =
RETRGBTR4E
while H $RETRG$ IB $!A.SE$ J
do
echo
echo '(A Comprobar contenido de una cinta'
echo 'KA sal'a?tmp @&tmpA para pruebasA'
echo '=A sal'a?root @menos &mnt y &mountA'
echo '5A sal'a?home @&homeA'
echo
echo '"ntrodu7ca la opcion deseada)'
read /2TK
case $/2TK$ in
H(K=5JA RETRGB!A.SE
LL
6A echo $/pcion in'alida) Reintentar$
LL
esac
done
if H $/2TK$ IB $($ J
then
RETRGBTR4E
while H $RETRG$ IB $!A.SE$ J
do
echo '"ntrodu7ca en primer lugar el tipo de copia deseado'
echo
echo 'TA T/TA.'
echo '"A "#CRE8E#TA. :ES:E 4.T"8/ T/TA.'
echo
read T"2/
case $T"2/$ in
HT"JA RETRGB!A.SE
LL
6A echo $/pcion in'alida) Reintentar$
LL
esac
done
fi
case $/2TK$ in
(A testTape LL
KA sal'a?tmp LL
=A sal'a?root LL
5A sal'a?home LL
esac
echo Copia finali7ada)
.os menMs de esta aplicaci*n pueden hacerse mNs 'istosos usando
dialog@KAO tambiPn puede intentar opciones para sal'ar y recuperar
configuraciones) Ambas cosas estNn resueltas el 'kbackup' Que estN
reali7ado igualmente en shell%script)
& B B B B B B B B B B B B B B B &
ERemplos de recuperaci*n de copias
En el eRemplo anterior no hemos incluido ninguna opci*n de
recuperaci*n porQue cada caso es distinto dependiendo de lo Que se
Quiera recuperar)
4n error en la recuperaci*n puede suponer perdida de informaci*n)
Siempre Que sea posible con'iene recuperar en un lugar distinto al
original y solo se deben recuperar los ficheros necesarios)
Deneralmente los programas de prop*sito general permiten la
recuperaci*n de todo el contenido o bien sacan una lista de todos
los ficheros para seSalar aQuellos Que deseamos recuperar)
Al contrario Que el respaldo la recuperaci*n no es una tarea
rutinaria) 2or esa ra7*n y porQue cada recuperaci*n ha de hacerse
baRo unos supuestos distintos los programas de prop*sito general
no siempre proporcionan la flexibilidad necesaria)
Conociendo bien las herramientas sencillas tipo 'find'O 'cpio'O
'tar'O 'afio'O etc y combinNndolas para recuperar solo lo Que
deseamos lograremos mucha flexibilidad)
.as distintas posibilidades son imposibles de comentar y ya 'imos
alguna cosa al explicar 'cpio' y en realidad basta con saber como
sacar la lista de ficheros de una cinta y como poder usar esa
lista para recuperar lo Que Queramos)
Ahora nos 'amos a 'er eRemplos concretos centrNndonos
exclusi'amente en la recuperaci*n de copias reali7adas con 'afio'
en formato comprimidoO para no cambiar porQue de alguna manera
'enimos mostrando nuestro fa'oritismo por 'afio' en toda esta
lecci*n)
Se puede confeccionar una lista de los ficheros contenidos en la
copia haciendo lo siguiente)
afio %t+ &de'&st( > listafich
Supongamos Que en nuestra lista de ficheros aparecen los
siguientes)
)&'ar&lib&postgres&data&pg?'ariable
)&'ar&log&apache&access)log
)&'ar&log&apache&error)log
)&'ar&log&auth)log
Si hace pruebas situese en &tmp) 2ara una recuperaci*n de
informaci*n real tampoco con'iene recuperar directamente sobre el
original asT Que &tmp puede ser igualmente un buen lugar si hay
espacio para ello) Recuerde Que algunos sistemas limpian &tmp al
arrancar o regularmente cada cierto tiempo)
Continuando con nuestro eRemploO para recuperar por eRemplo
'auth)log' harTamos lo siguiente)
afio %i+ %y '6auth)log' &de'&st(
2ara recuperar los Que ficheros Que contengan 'log&apache' pero no
'access' harTamos lo siguiente)
afio %i+ %y '6log&apache6' %G '6access6' &de'&st(
En este caso habrTamos recuperado solo
')&'ar&log&apache&error)log')
2ara casos mNs compleRos se usarN las opciones %w o %U con
ficheros Que contendrNn un nombre de ficheroO o un patr*n por cada
lTneaO y donde cada una de ellas serN considerada como si fuera
una opci*n %y o %G respecti'amente para '%w fichero' o para '%U
fichero')
2-. 5emoria Firtual en Linux
Introduccin
Este curso no trata de la administraci&n del sistema pero en este cap)tulo se "an a e+plicar al#unas
cosas %ue son materia de administraci&n del sistema pero %ue un usuario tambi!n debe conocer.
;uchas "eces un administrador tiene dificultades para #estionar los escasos recursos de una
m(%uina por%ue los usuarios no los utili'an del modo m(s racional.
En un sistema con muchos usuarios estos deben compartir los recursos de modo racional pero
#eneralmente ocurre lo contrario. El no comprender como funcionan las cosas y la a"aricia de
recursos puede conducir a conductas absurdas.
Por e3emplo un usuario %ue tiene %ue compilar KCC pro#ramas sabe %ue tendr( %ue esperar mucho.
Si este usuario es suficientemente i#norante y e#o)sta puede pensar %ue lan'ando las KCC
compilaciones simult(neamente causar( un retraso a los dem(s pero el terminar( antes. ,o cierto es
%ue los recursos del sistema se desperdician en traba3os internos totalmente in$tiles para el usuario
cuando el sistema est( sobrecar#ado.
9anto si se persi#ue compartir los recursos de forma ra'onable con los dem(s usuarios como si lo
%ue se pretende es usar los recursos de todo el sistema para sacar el mayor beneficio personal se
necesita comprender como funcionan al#unas cosas.
Esta lecci&n ser( totalmente te&rica por%ue para un usuario normal no resulta prudente cierto tipo de
e+perimentos %ue podr)an pro"ocar incomodidades o incluso al#unos problemas en el sistema. De
todas formas si el sistema empie'a a tener problemas si %ue es bueno tener los conocimientos
suficientes para a"eri#uar si eso tiene %ue "er con al#o %ue estemos haciendo nosotros. -ui'(s
podamos incluso ad"ertir a al#$n compa=ero %ue traba3e en el mismo e%uipo %ue el problema en el
sistema tiene %ue "er con lo %ue el hace.
Limitar el uso de recursos
En un sistema se suele llamar recursos a ciertos elementos %ue no pueden ser utili'ados de forma
ilimitada. Por e3emplo. GyesG es un pro#rama %ue #enera una salida infinita y no es buena idea
rediri#ir su salida a un fichero por%ue llenaremos nuestro espacio de disco. En al#unos sistemas el
administrador establece un limite de espacio para cada usuario. Si no fuera el caso llenar)amos el
disco. Si la salida de GyesG la rediri#imos a /de"/null no pasar( nada. El n$mero de ficheros %ue
podemos tener abiertos simult(neamente tambi!n tiene un l)mite. ,o mismo puede decirse de otras
muchas cosas.
,a cantidad de memoria es limitada pero e+isten distintos limites %ue afectan al uso de la memoria.
Para limitar el uso de ciertos recursos e+iste un comando interno de la shell llamado GulimitG.
Por e3emplo Gulimit :c G se usa para limitar el tama=o de los ficheros core producidos cuando un
proceso muere ba3o determinadas circunstancias. *n usuario normalito no utili'ar( para nada estos
ficheros as) %ue podr)a usarse Gulimit CG para e"itar la aparici&n de ficheros core.
9ambi!n se pueden limitar otras muchas cosas como la cantidad de CP* por se#undo tama=o
m(+imo de un fichero m(+imo n$mero de procesos m(+imo numero de ficheros abiertos cantidad
m(+ima de memoria "irtual etc...
Para "er las limitaciones con las %ue estamos traba3ando haremos lo si#uiente:
N ulimit :a
core file si'e .blocHs2 C
data se# si'e .Hbytes2 unlimited
file si'e .blocHs2 unlimited
ma+ locHed memory .Hbytes2 unlimited
ma+ memory si'e .Hbytes2 unlimited
open files /C0A
pipe si'e .K/0 bytes2 R
stacH si'e .Hbytes2 R/B0
cpu time .seconds2 unlimited
ma+ user processes 0KL
"irtual memory .Hbytes2 unlimited
<ueno en este e3emplo "emos %ue estamos en una sesi&n con muy pocas limitaciones. Eso es se=al
de %ue el administrador conf)a en nosotros y nos concede mucha libertad.
GulimitG permite establecer dos clases de l)mites. ,)mites duros .solo se pueden poner una "e' y
#eneralmente esto lo hace root2 y l)mites blandos %ue se pueden cambiar "arias "eces pero no se
permite sobrepasar los "alores establecidos en el l)mite duro. root establece estos l)mites en al#$n
fichero de confi#uraci&n y los usuarios pueden tener en su N75;E/.bashrc alterar los limites
blandos. Para m(s informaci&n consulte la p(#ina man de GulimitG.
5ultitarea
Xa hemos hablado al#o de ella cuando estudiamos los procesos. -ueda claro %ue en un sistema en
el %ue se est(n e3ecutando en apariencia "arios procesos simult(neamente lo %ue ocurre realmente
es %ue el tiempo de la CP* se "a repartiendo entre los distintos procesos concediendo r(pidamente
sucesi"as roda3as de tiempo a cada uno en funci&n de su prioridad y de la pol)tica de reparto de ese
tiempo. Esta pol)tica no nos interesa ahora. Se supone %ue las cosas est(n pensadas para %ue el
funcionamiento #lobal de todo el sistema sea el m(s adecuado.
Jol"amos al caso del usuario i#norante y e#o)sta del cap)tulo anterior. El de las KCC compilaciones
simult(neas. El sistema necesita parar cada uno de los procesos %ue usan la CP* una "e' %ue han
consumido su roda3a de tiempo para tomar el si#uiente proceso en espera de CP*.
Cuando un proceso necesita usar al#o y en ese instante no est( disponible pasa a un estado de
inacti"idad. Se dice %ue %ueda dormido.
Este cambio de un proceso a otro no es #ratuito por%ue una "e' parado el proceso hay %ue anotar la
situaci&n en la cual ese proceso ha sido detenido para lue#o poder "ol"er a continuar e+actamente
en el mismo punto cuando le "uel"a a tocar y %ui'(s parte del c&di#o o de los datos del proceso ya
no est!n en memoria 4A; .tambi!n la llamaremos indistintamente memoria f)sica. Jer m(s
adelante pa#inaci&n2. 9odo esto consume muchos recursos y se puede alcan'ar la situaci&n en la
cual el S5 consume la mayor parte del tiempo en esta #esti&n de procesos intercambiando datos
entre memoria y disco constantemente por%ue la memoria f)sica no puede con todo por el contrario
los procesos %ue son la parte realmente $til apenas dispondr(n de recursos. En esta situaci&n el
sistema se "uel"e muy lento y los discos del sistema tienen una acti"idad alt)sima. En realidad es
una situaci&n de aut!ntico a#obio para el sistema y su comportamiento se "uel"e torpe. Es como si
el sistema actuara a la desesperada.
Por esa ra'&n decimos %ue el usuario del cap)tulo anterior adem(s de ser e#o)sta es i#norante
por%ue est( pro"ocando un enorme retraso no solo a los dem(s usuarios .cosa %ue ya sabe2 sino
tambi!n a si mismo.
Si al#una "e' notamos %ue el sistema "a muy lento y sospechamos la causa tendremos %ue parar en
primer lu#ar el proceso %ue est( pro"ocando la sobrecar#a. Si no sabemos cual es o si se trata de un
proceso %ue no es nuestro podemos in"esti#ar con el comando GtopG. 9en#a en cuenta %ue de este
comando se sale con G%G.
Este comando saca en cabecera un resumen de la situaci&n #eneral del sistema y lue#o saca solo la
informaci&n de los procesos %ue mayor consumo de recursos est(n pro"ocando en el sistema.
9en#a en cuenta %ue GtopG sir"e para dia#nosticar el uso de recursos y permite identificar procesos
%ue consumen demasiado pero en si mismo GtopG tambi!n consume bastantes recursos. Por eso en
situaciones de sobrecar#a del sistema con"iene no abusar de su uso. GtopG refresca cada cierto tiempo
la informaci&n de la pantalla. Por defecto lo hace cada K se#undos. Podemos aumentar a /K
se#undos. Para ello usaremos Gtop d /KG. Esto consumir( menos recursos y nos permitir( mirar con
m(s tran%uilidad la informaci&n de top.
Jamos a "er un e3emplo del uso de GtopG %ue corresponde a un sistema con muy poca acti"idad. Solo
K usuarios. ,a CP* est( ociosa BB.LD del tiempo la cantidad de memoria disponible es alta y no se
est( usando la swap.
N top
/0:/Mpm up 0:CL K users load a"era#e: C.CC C.CC C.CC
KK processes: KA sleepin# / runnin# C 'ombie C stopped
CP* states: C.CD user C.1D system C.CD nice BB.LD idle
;em: 0KR/CCE a" B110CE used /LAMRCE free LLRCCE shrd MLK0E buff
Swap: 1B1KK0E a" CE used 1B1KK0E free ACMAAE cached
P6D *SE4 P46 N6 S6]E 4SS S7A4E S9A9 ,6< DCP* D;E; 96;E C5;;AND
/CC0 root // C /1/0 /1/0 MCC 4 C C.1 C.K C:CC top
/ root C C ALA ALA ACA S C C.C C./ C:CK init
0 root C C C C C S8 C C.C C.C C:CC Hflushd
1 root C C C C C S8 C C.C C.C C:CC Hupdate
.... ..... .. .. ... ... ... .. .. ... ... .:.. ......
.... ..... .. .. ... ... ... .. .. ... ... .:.. ......
.... ..... .. .. ... ... ... .. .. ... ... .:.. ......
*SE4 es es usuario %ue arranc& el proceso DCP* es el porcenta3e de tiempo de CP* usado por el
proceso. D;E; Porcenta3e de memoria f)sica usada por el proceso. Podr)a incluso superar el
/CCD. *n "alor alto puede delatar a un proceso como el causante de los problemas de pa#inaci&n
.swapin#2 en el sistema.
5tro comando %ue nos da informaci&n sobre la car#a del sistema es GuptimeG
N uptime
/0:0Mpm up 0:/L K users load a"era#e: C.CC C.CC C.CC
Coincide con la primera linea de GtopG. ,os datos son hora actual tiempo transcurrido desde el
arran%ue del sistema n$mero de usuarios y las tres $ltimas cifras se corresponden con promedios de
car#a en el $ltimo minuto K $ltimos minutos y /K $ltimos minutos respecti"amente.
5emoria virtual
Jamos a e+plicar en primer lu#ar %ue si#nifica eso de memoria "irtual. En muchos sistemas
operati"os el S5 ofrece a los pro#ramas un espacio de memoria superior al %ue realmente e+iste. ,a
memoria f)sica es la memoria 4A;. ,a CP* no puede hacer nada con los datos si antes no pasan a
la 4A;. A pesar de esto un sistema con LA;bytes de 4A; puede e3ecutar por e3emplo un
pro#rama use "ariables con el doble de tama=o %ue el de la memoria 4A; disponible. Si el
pro#rama accediera mucho y de forma aleatoria dentro de esta enorme "ariable se producir)a una
fuerte sobrecar#a en el sistema. Si al#uien se pre#unta si una barbaridad como esta puede hacerla
un usuario normalito sin pri"ile#ios especiales la respuesta es usuario normal si pero autori'ado.
Eso no si#nifica %ue estemos burlando la se#uridad del sistema ni %ue seamos m(s listos %ue el
administrador.
Si el administrador confi#ura el sistema de forma paranoica para e"itar cual%uier posible ries#o los
usuarios se "er(n sometidos a unas restricciones bastante inc&modas para traba3ar.
Por eso lo normal es %ue el administrador asuma %ue los usuarios autori'ados utili'aran los recursos
de forma ra'onable.
Para #estionar la memoria "irtual lo %ue se hace es recurrir al espacio de disco para ampliar este
espacio. ,a memoria 4A; tiene una "elocidad de acceso mucho m(s r(pida %ue un disco duro y
para conse#uir %ue todo funcione de forma transparente y de forma eficiente se utili'an unas
t!cnicas de se#mentaci&n y pa#inaci&n %ue describiremos a continuaci&n.
Se,mentacin de la memoria
,a memoria de un ordenador es una especie de enorme casillero. Cada casilla contendr( cierta
informaci&n pero un proceso no puede acceder a toda la informaci&n del sistema. Cada casilla tiene
una direcci&n y cada proceso puede usar ciertas direcciones para almacenar informaci&n. De esta
forma se e"ita %ue un proceso interfiera accidentalmente o intencionadamente a la informaci&n de
otro proceso distinto.
,as casillas son las posiciones de memoria y a pesar de lo dicho e+isten posiciones de memoria
compartidas. Por e3emplo el c&di#o de un pro#rama %ue se est( e3ecutando en "arios procesos ser(
compartido en modo e+clusi"o de lectura por los procesos %ue est!n e3ecutando ese pro#rama. Es
decir %ue si por e3emplo hay "arias personas e3ecutando el editor G"imG el c&di#o de ese pro#rama no
estar( repetido en memoria. Ser)a un desperdicio por%ue el c&di#o es el mismo no se puede alterar
y la CP* se limita a leer la informaci&n consistente en instrucciones para la CP*.
9odo este tipo de informaci&n es lo %ue se denomina se#mento de te+to. ,os proceso mane3an otros
tipos de informaci&n distintas y para ello se or#ani'a en se#mentos de distinto tipo. Por e3emplo hay
se#mentos de datos de solo lectura se#mentos de datos de lectura escritura se#mentos de datos de
pila se#mentos datos de memoria compartida se#mentos de memoria din(mica. No "amos a
e+plicar estas cosas por%ue e+cede en mucho los prop&sitos de este cap)tulo pero si %ueremos de3ar
una idea. ,os procesos tienen la memoria or#ani'ada en se#mentos de distinto tipo. Fracias a esto
se consi#ue utili'ar la memoria 4A; de forma muy eficiente.
Pese a %ue el c&di#o de un pro#rama puede desaparecer de la 4A; para de3ar espacio a otros
pro#ramas no ser( necesario sal"ar la informaci&n a disco. Si fuera necesario "ol"er a car#arlo en
4A; bastar( acudir al fichero %ue contiene su c&di#o e3ecutable.
Esto hace %ue los ficheros %ue contienen pro#ramas %ue se est(n e3ecutando no puedan ser borrados
ni modificados por nadie ni si%uiera por root.
Copie el e3ecutable GtopG en el directorio /tmp .Se#uramente estar( en Gbin/topG y sino deberi( ser
capa' de encontrarlo2. E3ecutelo como /tmp/top y desde otra sesi&n intente borrar el fichero.
Sencillamente le resultar( imposible pese a %ue es usted es due=o de esa copia.
Cuidado. Esto no es aplicable a los scripts de bash o a otros scripts por%ue en realidad estos
pro#ramas son datos %ue se e3ecutan dentro de un pro#rama %ue los interpreta en lu#ar de hacerlo
en la CP*.
a,inacin
,a informaci&n se or#ani'a en blo%ues y los blo%ues %ue la CP* usa se mantienen el mayor tiempo
posible en 4A;. A estos blo%ues de informaci&n se les llama p(#inas.
Se intenta reducir el n$mero de lecturas y escrituras a disco. Para ello se act$a en base a
suposiciones de uso de la memoria. ,as p(#inas recientemente utili'adas tienen mayor probabilidad
de "ol"er a ser usadas pronto %ue a%uellas %ue ya hace tiempo %ue no han sido accedidas.
6ntentaremos e+plicar por%ue.
,os pro#ramas se comportan #eneralmente usando pe%ue=as partes de c&di#o durante la mayor
parte del tiempo mientras %ue otras partes se e3ecutar(n de forma muy ocasional.
Adem(s los pro#ramas usan partes comunes de c&di#o %ue pertenecen a librer)as compartidas. El
apro"echamiento de la 4A; se consi#ue manteniendo una sola copia de ese c&di#o compartido en
memoria 4A;.
,os accesos a estas p(#inas de memoria %ue contienen c&di#o pueden ser(n para leer informaci&n.
En el caso de datos de lectura escritura tambi!n podr(n ser accedidas para su modificaci&n. Cuando
una p(#ina ha sido modifica se marca para escribir su contenido en disco en el caso de %ue se
necesite el espacio %ue ocupa para otra p(#ina distinta.
El area de disco %ue se utili'a para ello se llama swap .tambi!n se denomina memoria de
intercambio2 y un usuario normal no puede modificarla aun%ue root si puede hacerlo para
aumentarla o disminuirla de tama=o por e3emplo.
,a memoria "irtual es la suma de la memoria f)sica .4A;2 m(s el swap .area de intercambio2
menos al#unas p(#inas de reser"a. ,as pa#inas de reser"a est(n limpias de informaci&n para poder
car#ar en ellas informaci&n nue"a desde la swap cuando se necesita.
Al proceso de traer una p(#ina de la swap a memoria f)sica se le llama .swap in2. Esto necesita un
tiempo y normalmente el proceso espera dormido. Al proceso de "olcar una p(#ina de memoria
f)sica a swap se le llama .swap out2 y #eneralmente el proceso ya est( dormido cuando esto ocurre.
Cuando se a#ota la memoria f)sica .4A;2 se empe'ar( a usar la swap.
Cuando la memoria "irtual se a#ota el Hernel empe'ar( a matar procesos. Dicho de otro modo un
proceso %ue intenta usar memoria "irtual cuando est( a#otada terminar( recibiendo una se=al del
Hernel %ue pro"ocar( su muerte.
*tilidades para monitori'ar el uso de memoria "irtual
Xa "imos el uso de GtopG. Nos sir"i& para introducir el tema. Se trata de un comando realmente
bueno para locali'ar los procesos responsables del mayor consumo de CP* y memoria.
,a informaci&n del estado de n$cleo del sistema se encuentra en /proc/ Xa comentamos en cap)tulos
anteriores parte de su cometido y tambi!n resulta muy $til para obtener informaci&n sobre el uso de
la memoria en el sistema.
N cat /proc/meminfo
total: used: free: shared: buffers: cached:
;em: 0LA0BAACC /C1BKLARC /LC11MB0C KR//R/AA /CALK0RC K1/K1MB0
Swap: AC0BBM0AR C AC0BBM0AR
;em9otal: 0KR/CC H<
;emFree: /KLKRC H<
;emShared: KLMKL H<
<uffers: /C00C H<
Cached: K/BCR H<
Swap9otal: 1B1KK0 H<
SwapFree: 1B1KK0 H<
9ambi!n Gps "G puede darnos informaci&n sobre el consumo de memoria "irtual de procesos. Con
top solo sal)a la informaci&n de los procesos %ue m(s consumen pero %ui'(s necesitemos
informaci&n de determinados procesos. Por e3emplo para sacar la informaci&n de los procesos
asociados al nuestro terminal bastar( usar Gps "G. Si necesita precisar otras condiciones consulte las
opciones de ps en su p(#ina man.
N ps "
P6D 99X S9A9 96;E ;AdF, 94S D4S 4SS D;E; C5;;AND
1C/ tty1 S C:CC LCC A0C /MA1 /1CC C.K :bash
/LAC tty1 S C:CC 10L K/R /R0B /KLR C.L "i recursyst.dat
/LLK tty1 S C:CC /BA A0C /AK/ R10 C.1 /bin/bash :c .ps "2 U/tmp/"oH0#Hu" 0U`/
/LLL tty1 4 C:CC 0AC KK 0RAA //ML C.A ps "
Si solo deseamos saber cuanta memoria %ueda libre podemos usar GfreeG. Este comando tambi!n
indica si se est( usando la swap.
N free
total used free shared buffers cached
;em: 0KR/CC /C/LLR /KLA10 KLRCC /C0AR K/BRR
/? buffers/cache: 1BA10 0/RLLR
Swap: 1B1KK0 C 1B1KK0
Con G"mstatG podemos tener informaci&n del uso de memoria "irtual cpu y del consumo de entrada
salida.
N "mstat
procs memory swap io system cpu
r b w swpd free buff cache si so bi bo in cs us sy id
C C C C /KLACA /C0K0 K0CCC C C 0 / /A/ /10 / C BR
Con GmemstatG podemos "er el uso de memoria "irtual de los procesos y de las librer)as compartidas.
N memstat
AAH: P6D / ./sbin/init2
LCH: P6D BR ./sbin/portmap2
RCH: P6D /KL ./sbin/syslo#d2
ALRH: P6D /KR ./sbin/Hlo#d2
ACH: P6D /LK ./sbin/Herneld2
K0H: P6D /MC ./sbin/rpc.statd2
/ACH: /lib/libreadline.so.A./ 00R
0AH: /lib/libwrap.so.C.M.L BR 0M/
M0H: /lib/ld:0./.1.so / BR /KL /KR /LK /MC /MR /MB /RC /R/ /R0 /RR /B1 ...
RLAH: /lib/libc:0./.1.so / BR /KL /KR /LK /MC /MR /MB /RC /R/ /R0 /RR /B...
0CH: /lib/libcrypt:0./.1.so 00R 0B0 0BK 1CL 1CM 1CR 1CB 1/C 1// AL/ BLL...
...: .........................
...: .........................
...: .........................
1MLRCB0H
Para mostrar solo la informacion del proceso 0M/ .en nuestro caso es sendmail2 har)amos lo
si#uiente:
N memstat > #rep 0M/
0LAH: P6D 0M/ ./usr/sbin/sendmail2
0AH: /lib/libwrap.so.C.M.L BR 0M/
010H: /lib/libdb:0./.1.so /KL /B1 0CL 0M/ 0B0 0BK 1CL 1CM 1CR 1CB 1/C 1/...
MLH: /lib/libnsl:0./.1.so BR 00R 0M/ 0RA 0RM 0B0 0BK 0BB 1CC 1C/ 1C1 1C...
ACH: /lib/libnssOcompat:0./.1.so 00R 0M/ 0RA 0RM 0B0 0BK 0BB 1CC 1C/ 1C...
0CH: /lib/libnssOdb:0./.1.so /KL /B1 0CL 0M/
10H: /lib/libnssOfiles:0./.1.so /KL /MC /B1 0CL 0M/ 0B0 0BK 1CL 1CM 1CR...
ARH: /lib/libresol":0./.1.so 0M/
1CRH: /usr/sbin/sendmail 0M/
Con esto "emos lo bien apro"echado %ue est( el sistema ya %ue muchas de las librer)as aparecen
compartidas con un mont&n de procesos %ue se est(n e3ecutando.
7emos conse#uido "er las librer)as compartidas %ue esta usando y cuanto ocupan en memoria pero
la utilidad para saber usa o usar( un e3ecutable es GlddG. Este comando no necesita %ue el pro#rama
se est! e3ecutando por%ue saca la informaci&n anali'ando el c&di#o del e3ecutable.
N ldd /usr/sbin/sendmail
libdb.so.1 @U /lib/libdb.so.1 .C+ACC/BCCC2
libwrap.so.C @U /lib/libwrap.so.C .C+ACCKACCC2
libnsl.so./ @U /lib/libnsl.so./ .C+ACCKbCCC2
libresol".so.0 @U /lib/libresol".so.0 .C+ACCM/CCC2
libc.so.L @U /lib/libc.so.L .C+ACCR/CCC2
/lib/ld:linu+.so.0 @U /lib/ld:linu+.so.0 .C+ACCCCCCC2
!ctuacin con procesos con.lictivos
,le#ados a este punto con"iene e+plicar %ue se puede hacer con un proceso conflicti"o.
E"identemente la soluci&n m(s dr(stica es matarlo. Para ello se usar( primero un GHill :/K P6DG. ,a
se=al /K es un S6F9E4; %ue permite al proceso parar ordenadamente pero si el proceso i#nora esta
se=al habr( %ue matarlo con un GHill :B P6DG. ,a se=al B es un S6FE6,, %ue no puede ser i#norado.
De todas formas puede ocurrir %ue nos de pena matar a un proceso %ue se hab)a comportado
ra'onablemente durante bastante tiempo y %ue est( lle"ando a cabo unas tareas %ue nos interesan.
,o m(s sua"e %ue se puede hacer es ba3arle la prioridad con GreniceG por e3emplo Grenice 0C P6DG.
<a3ar la prioridad de un proceso no per3udica en nada al proceso cuando la CP* est( ociosa por
falta de traba3o. Si el proceso continua consumiendo demasiados recursos y no podemos ba3ar m(s
su prioridad podemos pararlo sin matarlo. Para ello se en")a al proceso una se=al S6FS95P
mediante GHill :/BG Para "ol"er a arrancarlo podemos hacerlo mandando una se=al S6FC5N9 GHill
:/RG
#est
Puede comprobar sus conocimientos respondiendo el si#uiente test.
Para ello seleccione las opciones %ue se a3usten a la "erdad y lue#o pulse el boton para "er el
resultado de su test.

/ Procesos %ue consuman mucho es preferible e3ecutarlos uno despu!s de otro y no
asimultaneamente.
0 ulimit Sir"e para limitar los recursos del sistema y solo puede ser usado por el superusuario
1 En un sistema con fuerte car#a con"iene de3ar una sesi&n con Gtop d /G para "i#ilar el sistema.
A ;emoria "irtual y memoria swap es lo mismo.
K ;emoria f)sica y memoria de intercambio es lo mismo.
L Se#mento de te+to es a%uel %ue contiene el c&di#o e3ecutable de un pro#rama.
M El se#mento de te+to no se puede compartir por ser un se#mento de lectura escritura.
R Procesos de pro#ramas distintos no pueden compartir en memoria su c&di#o.
B *n proceso %ue no puede continuar por falta de al#$n recurso %ueda esperando y consumiendo
CP*.
/C ,o menos dr(stico %ue se puede hacer con un proceso %ue consuma muchos recursos es ba3ar su
prioridad con Grenice :0C P6DG
// No se puede borrar un shell:script cuando se est( e3ecutando.
22. La primera instalacion de Linux
Introduccin.
No todos los usuarios %ue empie'an con ,inu+ parten del mismo punto. *nos ya tienen
conocimientos de *ni+ otros no tienen conocimientos de *ni+ pero si de inform(tica en #eneral
otros disponen de al#$n ami#o %ue les puede ayudar y otros han le)do cosas pre"iamente. Nosotros
no asumiremos nada de eso. Solo asumiremos %ue ya ha estudiado las lecciones anteriores.
-ui'as se pre#unte por%ue esta lecci&n no se e+plic& antes. ,a ra'&n es %ue durante la instalaci&n
de ,inu+ se mane3an una #ran cantidad de conocimientos y en este momento ya disponemos de
unos cuantos.
,a instalaci&n es un proceso %ue se ha simplificado bastante y las #u)as de instalaci&n pueden ser de
#ran ayuda. A pesar de esto cuando se presenta una dificultad muchas "eces se re%uiere tener una
base de conocimientos amplia para poder superar dichas dificultades.
7e conocido a bastantes personas %ue deseosas de probar ,inu+ me confesaban %ue no deseaban
realmente perder nada de tiempo en aprender cosas sobre ,inu+. Se conformaban con aprender a
instalar ,inu+ y confi#urar las cuatro cosas %ue necesitan usar.
Siempre asumimos %ue ha leido las lecciones anteriores y por ello tambi!n asumiremos %ue este no
es su caso.
Nosotros antes de lle#ar a este cap)tulo hemos reali'ado un amplio recorrido formati"o. Conceptos
como sistema de ficheros n$cleo del sistema proceso memoria "irtual etc.. ya han sido tratados.
9ambi!n sabe usar ya el editor "i y ya tiene pr(ctica con el interprete de comandos. ,a principal
utilidad de todo ello es %ue nunca se sentir( totalmente perdido.
De todas formas hay muchas cosas interesantes de cara a instalar ,inu+ y %ue no han sido tratadas
ni "amos a tratar en profundidad. No lo haremos por%ue desbordar)a los prop&sitos de este curso.
Por e3emplo unos conocimientos sobre hardware de PCGs "endr)an muy bien pero nos apartar)amos
demasiado de los prop&sitos de este curso.
,a facilidad o dificultad de la instalaci&n de ,inu+ puede "ariar desde ser al#o tri"ial o por el
contrario puede resultar muy dif)cil dependiendo de las circunstancias. Debe tener esto muy
presente y conformarse con ob3eti"os sencillos la primera "e' %ue intente instalar ,inu+.
Si el primer d)a consi#ue instalar un sistema capa' de arrancar y de abrir una sesi&n aun%ue sea en
modo consola tendr( una buena base para ir a=adiendo me3oras a su sistema poco a poco. No
decimos %ue no se puedan hacer m(s cosas la primera "e' pero no hay %ue obsesionarse con ello.
Cuando instale deber( tener a mano toda la documentaci&n de su e%uipo y de sus perif!ricos.
-ui'(s nunca ley& esos papeles pero puede %ue ahora si los necesite.
No debe intentar a"an'ar demasiado deprisa. Debe de ir asimilando ,inu+ poco a poco. Cuanto
menores son los conocimientos t!cnicos m(s despacio hay %ue empe'ar por%ue cuesta m(s.
Si solo dispone de un ordenador lo me3or ser)a de3ar una parte del disco duro para 8indows y otra
para ,inu+. De esa manera al arrancar podr( ele#ir con %ue S5 %uiere traba3ar y no se "er( for'ado
a hacerlo todo en un S5 %ue inicialmente le resultar( e+tra=o y %ui'as incluso hostil.
Confiamos en %ue con el paso del tiempo 8indows le resulte a$n m(s e+tra=o y much)simo m(s
hostil %ue ,inu+.
/ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ /
Consideraciones 7ardDare.
,inu+ admite una ampl)sima "ariedad de hardware pero la autodetecci&n de hardware est(
disponible principalmente en al#unas distribuciones comerciales como SuSE ;andraHe y 4ed7at.
,a autodetecci&n de hardware nunca es tan completa como en 8indows. Ellos 3ue#an con "enta3a
en esto.
Es importante comprobar %ue la tar3eta #r(fica est( soportada por la distribuci&n %ue "a a usar en
caso contrario es probable %ue solo consi#a una resoluci&n JFA. En las ca3as de SuSE 4ed7at o
;andraHe "iene una relaci&n bastante amplia de tar3etas #r(ficas soportadas.
Para empe'ar resulta m(s sencillo usar un ordenador barato sin elementos de #randes prestaciones y
a ser posible no demasiado nue"o.
,os procesadores compatibles con 6ntel 1RL o Pentium est(n soportados aun%ue sean de otras
marcas. ,as placas principales y el tipo de memoria tampoco son cr)ticos. En cuanto a los discos
duros y controladoras %ue funcionen ba3o ba3o ;SD5S suelen funcionar en su mayor)a con ,inu+.
Al#unas controladoras SCS6 no est(n soportadas y otras controladoras SCS6 %ue si est(n soportadas
pueden suponer una dificultad para una primera instalaci&n debido a %ue pueden no estar incluidas
en el n$cleo .Hernel2 de arran%ue de la instalaci&n.
/ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ /
$leccin de su distribucin.
Puede %ue aun no ten#a decidido %ue distribuci&n usar. Si usted %uiere la m(+ima facilidad de
instalaci&n %ui'(s deber)a usar ;andraHe SuSE o 4ed7at pero dado %ue esto forma parte de un
curso de ,inu+ nosotros le recomendamos Debian. Debian es la %ue tiene mayor inter!s educati"o.
-ui'(s le cueste al#o m(s empe'ar con ella pero tambi!n aprender( mucho m(s.
E"identemente hay otras consideraciones para le elecci&n de su distribuci&n de ,inu+. Compararlas
en t!rminos de me3or o peor no resulta adecuado. Nosotros no "amos a basar el curso en nin#una de
ellas en particular. Pero "amos a hacer un poco de propa#anda de Debian.
Al ser /CCD libre es la m(s adecuada para aprender. 9!cnicamente es la distribuci&n m(s robusta
%ue e+iste. ,a actuali'aci&n de los distintos componentes a tra"es de la red es mucho m(s c&moda y
efica' %ue en nin#una otra distribuci&n. ,a comunidad de usuarios de Debian est( muy bien
or#ani'ada y dan muy buen soporte.
Debian no es para comodones. 7ay %ue leer bastante y hay %ue molestarse en buscar las cosas.
Fnome y Debian se lle"an muy bien y Debian est( e"olucionando en el sentido de %ue cada "e'
resultar( m(s intuiti"a y facil de usar.
/ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ /
Utilidades 5S/OS.
En muchas distribuciones encontrar( unos pro#ramitas en su CD de ,inu+ %ue son herramientas
para usar desde ;SD5S. Son software libre y pueden "enir muy bien para determinadas
circunstancias.
fips0C.'ip Se usa para di"idir una partici&n en dos sin perder los los datos. Se usa mucho para crear
un hueco en un disco para poder instalar en el ,inu+. Esta "ersi&n puede traba3ar con FA910.
#'ip/0A.e+e Se trata de una "ersi&n del popular compresor G#'ipG de ,inu+ para msdos
lodlin/L.'ip Permite arrancar ,inu+ desde msdos. Se puede usar desde dis%uete o desde disco duro.
rawrite/.'ip y rawrite0.'ip. Se corresponden con rawrite "ersi&n /.1 y con rawrite 0.C. Permiten
crear un dis%uete desde msdos a partir de un fichero %ue conten#a la ima#en de ese dis%uete.
Al#unas distribuciones incluyen una "ariedad de im(#enes de dis%uetes de arran%ues cada uno
pensado para poder arrancar en distintos tipos de m(%uinas pero l&#icamente para crear el dis%uete
de arran%ue en una m(%uina donde no conse#u)amos arrancar ,inu+ necesitamos %ue este pro#rama
funcione ba3o msdos. Se proporcionan a menudo estas dos "ersiones por si bien la "ersi&n 0.C es
m(s r(pida puede blo%uearse en al#unos e%uipos.
un'K/0+1.e+e Estamos poniendo ficheros con e+tensi&n .'ip. Son ficheros comprimidos en un
formato muy utili'ado en msdos.
/ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ /
ro,ramas de utilidad para instalar Linux.
,as distribuciones suelen usar un sistema de men$s y unos asistentes %ue le ayudan a instalar y
confi#urar el sistema. ;uchos de estos procesos podr)an reali'arse manualmente desde el interprete
de comandos ya %ue se limitan a usar unos pro#ramas %ue est(n instalados en cual%uier ,inu+.
Ahora nos limitaremos a se=alar su e+istencia y comentar para %ue sir"en. Con"iene %ue consulte
las p(#inas del manual de cada uno de ellos.
fdisH./2: Se usa para particionar. Ad"ierta %ue en msdos e+iste un pro#rama %ue tambi!n se llama
fdisH y %ue sir"e i#ualmente para particionar el disco.
mHswap./2: Para formatear una partici&n de swap
swapon./2: Para acti"ar la partici&n de swap
mHe0fs./2: Para formatear una partici&n ,inu+
mount./2: Para montar el sistema de ficheros El concepto de monta3e de ficheros lo "imos muy de
pasada en el tercer cap)tulo dedicado al sistema de ficheros y hemos practicado poco con !l por%ue
re%uer)a uso de la cuenta de root en un momento %ue no parec)a prudente. 4epase este cap)tulo si ya
no se acuerda. Puede consultar en las p(#inas man los comandos mount./2 umount./2.
9ambi!n es muy interesante %ue mire el contenido de su /etc/fstab. Es un fichero %ue indica al
Hernel %ue es lo %ue debe montar durante el arran%ue. Consulte la p(#ina man correspondiente
fstab.K2. Si edita este fichero puede especificar nue"os puntos de monta3e pero un error podr)a hacer
%ue el sistema no "uel"a a arrancar.
Siempre %ue modifi%ue al#o del sistema de3e una copia del fichero sin modificar en al#$n lado.
Por e3emplo puede de3ar copias ori#inales ficheros terminadas en G.se#G. De esa forma si al#o de3a de
funcionar lue#o puede recuperar e+actamente la situaci&n ori#inal. ,o hemos dicho muchas "eces.
Ase#urese en todo momento la posibilidad de deshacer cual%uier cambio.
Conociendo todos estos pro#ramas tendr( una idea bastante buena de las cosas %ue "an sucediendo
durante el proceso de instalaci&n aun%ue los asistentes de instalaci&n de muchas distribuciones los
usar(n de modo transparente .de modo no perceptible2 mientras instalan.
/ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ /
/isco de rescate.
Se llaman as) a los CDs o dis%uetes %ue pueden arrancar ,inu+ directamente y de3an un sistema
funcionando con una serie de utilidades para poder subsanar problemas en e%uipos %ue por e3emplo
han perdido la capacidad de arrancar o %ue no deseamos %ue arran%uen sin subsanar antes al#$n
problema.
;uchos de los primeros CDs o dis%uetes de instalaci&n de muchas distribuciones pueden ser usados
como discos de rescate en lu#ar de disco de instalaci&n.
,os discos de rescate son en si mismos un S5 ,inu+ en miniatura y como es l&#ico arrancan un
Hernel predeterminado y montan un sistema de ficheros ra)'.
Dado %ue se necesita permiso de escritura y no podemos usar nin#$n disco duro para ello por%ue
podr)a no e+istir espacio adecuado para ello lo %ue se hace es montar el sistema de ficheros ra)' en
un dispositi"o 4A;. De esta forma tenemos un sistema miniatura ,inu+ con m)nimos re%uisitos de
hardware.
,o %ue ha de hacerse muchas "eces para arre#lar problemas es montar las particiones del disco duro
donde se encuentra el fichero %ue deseamos modificar y #eneralmente con un simple editor se
corri#e el problema. Por e3emplo si se ol"ida uno de la password de root se edita el fichero
/etc/passwd eliminando el campo de la password y de esa forma no pedir( password. Es solo una
forma de hacerlo y lo comentamos solo como e3emplo de uso de un sistema de rescate.
9ambi!n comentamos antes %ue un cambio desafortunado en /etc/fstab pod)a hacer %ue el sistema
no "ol"iera a arrancar. Su#eriamos entonces %ue de3ara una copia del fichero ori#inal en al#$n lado.
En este caso despu!s de montar la partici&n rai' del sistema %ue no arranca deber( sobreescribir el
fichero modificado con la copia ori#inal de se#uridad. Despu!s de cada cambio hay %ue acordarse
siempre de desmontar el sistema de ficheros.
Si no dispone toda")a de un dis%uete de rescate y tampoco dispone de un CD de rescate deber)a
crear uno cuanto antes. Nunca se sabe cuando "a a ser necesario recurrir a el.
Para ello locali'e en los CDs de su distribuci&n la ima#en de uno de ellos %ue se llamar(
se#uramente Grescue.im#G Grescue.binG Grescue.rawG o al#o parecido. Puede hacerlo desde ;SD5S
usando rawrite o desde linu+ usando dd.
Antes deber( montar la unidad de cdrom. Feneralmente se suele montar en G/cdrom/G en
G/mnt/cdrom/G o en G/mount/cdrom/G. Jiene determinado en /etc/fstab. Por ello para montarlo bastar(
hacer:
N mount /de"/cdrom
N df
Para 4edhat ser)a:
N dd if@/mnt/cdrom/ima#es/rescue.im# of@/de"/fdC bs@/AACH
Para Debian potato ser)a:
N if@/mnt/cdrom/dists/potato/main/disHs:i1RL/0.0./L:0CCC:CM:/A/ima#es:0.RR/rescue.bin
of@/de"/fdC bs@/AACH
/ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ /
Lilo.
,ilo es un car#ador %ue puede ser instalado en dis%uete o en disco duro. En disco duro puede ser
instalado en una partici&n o en en el ;<4 .;aster <oot 4ecord2. El ;<4 es una 'ona especial del
disco muy pe%ue=a reser"ada para el arran%ue.
Se puede especificar arran%ues alternati"os para distintos S5 como 8indowsBR ,inu+ etc... Para
,inu+ podemos especificar arran%ues con distintos n$cleos y arran%ues %ue monten el sistema de
ficheros ra)' en distintas particiones siempre %ue efecti"amente obten#an un sistema de ficheros
ra)' "(lido. Por ello se podr)a especificar arran%ues para distintas distribuciones de ,inu+ instaladas
en distintos sitios.
Durante el arran%ue se espera un tiempo para %ue el usuario pueda especificar el arran%ue deseado y
pasado ese tiempo se arranca la opci&n de arran%ue %ue fi#ure por defecto.
,ilo ofrece muchas posibilidades. ,os asistentes de instalaci&n lo %ue hacen es crear un fichero de
confi#uraci&n de ,ilo /etc/lilo.conf y lue#o e3ecutan ,ilo.
Si decide intentar al#una modificaci&n manual de este fichero de confi#uraci&n deber( e3ecutar
despu!s ,ilo. Si ol"ida hacerlo la pr&+ima "e' el sistema no arrancar(. ,o mismo pasar( si toca
cual%uiera de los elementos %ue inter"ienen en el arran%ue.
Piense %ue ,ilo se instala en un lu#ar muy pe%ue=o en el cual se sit$an apuntadores a una serie de
ficheros como el Hernel el /etc/lilo.conf etc. Si al#uno de estos ficheros se mue"e de sitio o se
modifica su contenido los apuntadores de ,ilo %uedar(n se=alando un lu#ar e%ui"ocado donde ya
no e+iste la informaci&n $til.
E3ecutando ,ilo se "uel"e a reconstruir todo y se actuali'an esos apuntadores. Esos apuntadores o
punteros son datos num!ricos %ue e+presan posiciones f)sicas en el disco en forma de cilindro
sector cabe'a y dispositi"o.
Precisamente estos apuntadores tienen limitaciones en muchas <65S y si la partici&n de arran%ue de
,inu+ no est( contenida )nte#ramente dentro de los primeros /C01 cilindros de su disco duro el
sistema puede no arrancar.
,inu+ se puede instalar en el ;<4. Si desea "ol"er a de3ar el arran%ue ori#inal de msdos %ue estaba
situado en el ;<4 puede arrancar msdos y hacer GFD6SE /;<4G.
,inu+ tambi!n se puede instalar en una partici&n del disco duro. Si por error instala ,ilo en una
partici&n donde ten)an 8indows posiblemente se pierda la informaci&n de los ficheros del sistema
de 8indows y deber( transferir el sistema nue"amente arrancando desde un dis%uete msdos y
tecleando GSXS C:G siendo C: la unidad %ue desea recuperar.
/ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ /
Loadlin.
,oadlin es un e3ecutable ;SD5S capa' de car#ar ,inu+.
Con"iene conocer esta otra forma de arrancar. Es una alternati"a al uso de ,ilo. Para ilustrar su uso
pondremos como e3emplo la creaci&n de un dis%uete de arran%ue con ,oadlin.
Formatee un dis%uete desde msdos o 8indows incluyendo los ficheros del sistema. .F54;A9 /S2.
Copie el e3ecutable ,5AD,6N.E[E y un Hernel en este dis%uete. Por e3emplo "amos a suponer %ue
dicho Hernel lo metemos en un fichero llamado GHr1G.
Supon#amos %ue nuestro sistema de ficheros ra)' est( situado en G/de"/hdaBG.
6ncluya un fichero A*95E[EC.<A9 %ue conten#a lo si#uiente: loadlin Hr1 root@/de"/hdaB ro
"#a@1
<ueno simplemente con esto tiene un dis%uete de arran%ue %ue no usar( ,ilo sino ,oadlin. Su
sistema de ficheros podr( estar en cual%uier parte del disco duro sin la limitaci&n de los /C01
cilindros.
/ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ /
La SDap.
*na de las cosas %ue tendr( %ue determinar es la cantidad de swap. Xa hemos "isto en la lecci&n
anterior el concepto de memoria "irtual. ,a swap es la parte del disco destinada al intercambio de
p(#inas de memoria de 4A;.
Feneralmente se suele dimensionar la swap con el doble de tama=o %ue la cantidad de 4A;
disponible. De esta forma la memoria "irtual funcionar( sin detrimento de "elocidad. En el caso de
%ue el total de memoria resultante 4A; ? S8AP no alcance para poder e3ecutar al#una de las
aplicaciones necesarias se podr( sobre dimensionar la S8AP a costa de reducir un poco su
rendimiento.
En el caso de tener "arios discos con"iene repartir a partes i#uales la swap entre ellos para %ue
todos los discos colaboren por i#ual al proceso de pa#inaci&n. Esto no es imprescindible pero este
proceso es uno de los %ue m(s repercute en la capacidad de traba3o de todo su sistema.
,a partici&n de swap ser( la parte de su sistema %ue ten#a mayor n$mero de accesos y por ello
tampoco con"iene ponerla en un e+tremo del disco ale3ada de los sistemas de ficheros en uso. Esdto
obli#ar)a a hacer despla'amientos mayores a las cabe'as del disco y se perder)a "elocidad.
En realidad todo esto son cosas %ue no tienen e+cesi"a importancia en un ordenador %ue no "a a
tener demasiada car#a. En su primera instalaci&n no debe preocuparle demasiado estas cosas. Xa
di3imos %ue no pretendemos hacer un curso de administraci&n sino un curso de autosuficiencia para
usuarios de estaciones de traba3o. Para e%uipos con muchos usuarios o #randes ser"idores si ser(
con"eniente afinar lo %ue se pueda a la hora de establecer la cantidad y la locali'aci&n de la swap.
/ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ /
articionado.
Es posible %ue su distribuci&n le facilite la labor de particionado del disco duro pero no est( de m(s
un poco de informaci&n sobre esto.
Cada tipo de dispositi"o usa un controlador %ue en el caso de los discos duros son G/de"/hdaG para el
primer disco 6DE G/de"/hdbG para el se#undo disco 6DE G/de"/sdaG para el primer disco SCS6 etc..
Concretamente los discos 6DE ser(n de la forma G/de"/hdYa:hZG los discos SCS6 ser(n G/de"/sdYa:pZ G
los ESD6 ser(n G/de"/edYa:dZG para los [9 ser(n G/de"/+dYabZG.
,as particiones se usan a=adiendo el n$mero de la partici&n al dispositi"o. Por e3emplo G/de"/hda//G
ser( la primera partici&n del primer disco 6DE.
Como m(+imo se podr(n tener cuatro particiones primarias en un mismo disco. Si fueran necesarias
m(s habr)a %ue usar una partici&n de tipo e+tendida. Sobre esta se pueden establecer "arias
particiones l&#icas.
,a primera partici&n l&#ica ser( la n$mero K por%ue los cuatro primeros n$meros de partici&n se
reser"an para su posible uso en particiones primarias. 9ampoco se puede usar m(s de una partici&n
primaria de tipo e+tendido aun%ue puede ser cual%uiera de la / a la A.
Por e3emplo podr)amos tener en una primera partici&n primaria un sistema operati"o 8indows y
una se#unda partici&n primaria de tipo e+tendido particionada a su "e' en K partes. De ellas una
deber( ser para montar el sistema de ficheros ra)' .root G/G2 %ue con"iene sea de tipo ,inu+ y otra
para el (rea de intercambio .swap2.
El resto de las particiones se pueden usar para lo %ue #uste. Por e3emplo para montar G/usrG G/"arG
G/bootG G/tmpG o G/homeG etc. Estos cinco directorios son buenos candidatos para ser separados en
particiones distintas pero dar unas indicaciones #enerales para determinar el espacio necesario
resulta complicado ya %ue depende del tipo de uso %ue ten#a el sistema.
Por el contrario tambi!n se puede optar por montar todo en una sola partici&n %ue ser( la partici&n
ra)'. Por su sencille' deber)a considerar hacerlo as) en su primera instalaci&n. No es lo ideal pero
tampoco hay %ue ser ambiciosos la primera "e'.
Por otra parte con una sola partici&n se apro"echa me3or el espacio cuando tenemos poco disco. ,a
principal des"enta3a es %ue la partici&n ra)' %uedar( muy #rande y eso aumenta el ries#o de
problemas en una partici&n %ue con"iene sea lo m(s se#ura posible.
Para minimi'ar este efecto es para lo %ue se usa el directorio /boot %ue se destina a contener
$nicamente al#unos de los elementos m(s importantes %ue inter"ienen durante el arran%ue como
por e3emplo el Hernel. 6dealmente ser)a una partici&n muy pe%ue=a con unos 0C;< %ue no crecer(
nunca y %ue har( menos probable %ue %ue un error en el sistema de ficheros ra)' afecte al arran%ue
del sistema lo cual supondr)a un mayor esfuer'o para recuperar el sistema.
El tema del particionado se puede de3ar en manos de los distintos asistentes %ue usan al#unas
distribuciones los cuales ya su#ieren las particiones y los tama=os m(s o menos adecuados en
funci&n del tipo de instalaci&n pero es me3or tener las ideas claras y partir ya con una situaci&n
adecuada antes de meter un dis%uete o CD de instalaci&n de ,inu+. Nos referimos a de3ar libre los
espacios adecuados en su disco duro y repartidos en las particiones %ue pensemos usar antes de
empe'ar a instalar ,inu+.
Jamos a resumir los casos m(s frecuentes simplemente para %ue ten#a una idea #eneral.
6nstalar ,inu+ en un PC con un solo disco duro entero para ,inu+. Es lo m(s sencillo. Puede
empe'ar con todo el disco libre y sin particionar.
6nstalar ,inu+ en un se#undo disco duro entero para ,inu+ de3ando el primer disco para 8indows.
Es tan sencillo como el caso anterior aun%ue deber( identificar los dispositi"os.
,a nomencatura de los discos es las si#uiente:
hda primer canal maestro.
hdb primer canal escla"o.
hdc se#undo canal maestro.
hdd se#undo canal escla"o.
Si no sabe como est( confi#urado su hardware. Puede arrancar un disco de rescate ,inu+ y desde
una consola teclear GfdisH :lG Con ello obtendr( un listado completo de los discos y particiones
presentes en su sistema.
6nstalar ,inu+ en un disco duro %ue ya tiene instalado 8indows. Entre en 8indows. Desacti"e
cual%uier tipo de anti"irus por%ue suelen instalarse al final del disco y no se puede mo"er
compactando. Compacte el sistema de ficheros con la opci&n de m(+ima compresi&n. Esto de3ar(
todos los ficheros en la primera parte del disco duro y el resto %ueda libre. 5bten#a el pro#rama fips
para 8indows desde al#$n CD de ,inu+. Es una utilidad %ue di"ide una partici&n e+istente por
donde indi%uemos. Antes de usarlo con"iene sal"ar el contenido del disco por si las moscas. *se
una "ersi&n moderna de fips. ,ea con atenci&n las indicaciones. Cuando termine tendr( una
partici&n con 8indows del tama=o %ue usted indi%ue y otra para ,inu+. Entre en el fdisH de
8indows y borre la partici&n donde desee instalar ,inu+ y ya puede proceder a instalar ,inu+.
6nstalar 8indows y ,inu+ en un PC %ue no tiene nada instalado. 7a#a una partici&n para 8indows
de3ando espacio libre para ,inu+. 6nstale primero 8indows y lue#o contin$e instalando ,inu+ .
/ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ /
Compatibilidad del 7ardDare con Linux.
Feneralmente para instalar todas las distribuciones incluyen uno o m(s n$cleos para arrancar
#eneralmente bastante #randes y muy completos para poder soportar una "ariedad de hardware
suficientemente amplia para soportar una #ran "ariedad de dispositi"os hardware y as) no dar
problemas en la instalaci&n.
No obstante la e+traordinaria "ariabilidad de componentes hardware para PC disponibles en el
mercado hacen imposible contemplar todas las situaciones posibles. El soporte de estos dri"ers por
el momento no suele ser facilitado por los fabricantes tal como ocurre en 8indows sino %ue es
producto del traba3o desinteresado de mucha #ente %ue colabora desarrollando estos dri"ers para
,inu+ muchas "eces con la #ran dificultad de no disponer informaci&n del fabricante.
Pr(cticamente se "en obli#ados a una labor de in"esti#aci&n muy costosa. 9odo eso e+plica %ue los
dispositi"os m(s sofisticados y los m(s modernos sean los %ue tienen peor soporte en ,inu+. Esta
situaci&n est( cambiando y ya hay al#unos fabricantes %ue empie'an a dar la informaci&n necesaria
para desarrollo de dri"ers no desarrollados por ellos #eneralmente para 8indows.
Si al#$n elemento de su hardware no funciona con ,inu+ puede deberse a %ue est( mal confi#urado
y cambiar de distribuci&n podr)a no ser"ir de #ran cosa. Cuando al#o as) ocurra piense %ue esto le
ofrece la oportunidad de aprender cosas nue"as.
9endr( %ue in"esti#ar el tema y cuando consi#a dar con la soluci&n posiblemente habr( aprendido
una serie de cosas de #ran inter!s para una "ariedad de situaciones distintas. ,os primeros pasos son
siempre los m(s costosos.
,inu+ no est( siendo usado e+clusi"amente por #ur$s y hacHers . ,inu+ est( siendo usado por una
cantidad enorme de personas %ue han compensado su carencia de conocimientos t!cnicos con tan
solo un po%uito de paciencia. A diferencia de 8indows no hay secretos. 9oda la informaci&n %ue
usted pueda lle#ar a necesitar est( a su alcance. Cada distribuci&n "iene con su manual de
instalaci&n.
En el caso de Debian y otras ese manual "iene en formato electr&nico pero con"iene sacarlo a papel
y dedicar al#o de tiempo a su estudio. 9ambi!n suele "enir en ese manual o en la misma ca3a de la
distribuci&n una relaci&n del hardware soportado. Piense %ue el soporte para el hardware es casi
siempre independiente de la distribuci&n y solo depende de la "ersi&n del Hernel %ue se est! usando.
En el caso de Debian los primeros cap)tulos son de inter!s #eneral con independencia de la
distribuci&n %ue use y tambi!n est( disponible #ratuitamente.
-ue es Debian .y %ue es FN*/,inu+2
4e%uerimientos del sistema
Antes de empe'ar
Particionado del disco duro
9ambi!n puede consultar el manual de ,inu+ Primeros pasos. -ue puede obtener desde ,uCAS
lu#ar %ue anteriormente recomendamos.
/ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ /
$l gernel.
Para %ue ,inu+ recono'ca todos los dispositi"os del sistema deber( estar compilado con las
opciones adecuadas. En el caso de ,inu+ el Hernel es un #ran pro#rama y lo %ue llamamos dri"ers
solo son tro'os de c&di#o de este #ran pro#rama. Este dise=o se dice %ue es un Hernel monol)tico.
,inu+ permite %ue partes de este #ran pro#rama no est!n permanentemente en memoria 4A;.
Estas partes son los m&dulos y se corresponden con dri"ers %ue se car#an en el momento %ue el
Hernel necesita su uso. Esta car#a y descar#a es muy r(pida y por ello dispositi"os %ue no se usan
continuamente como impresoras lectoras de CDs dis%ueteras etc.. con"ienen est!n confi#uradas
como m&dulos.
Para confi#urar todo ha de compilarse el n$cleo en un sistema ,inu+ %ue ya est! funcionando y
nosotros no "amos a tratarlo ahora. Si un dispositi"o no funciona habr( %ue comprobar en primer
lu#ar si ha sido correctamente reconocido por el Hernel. Esto ocurre durante el arran%ue y el Hernel
"a mostrando la informaci&n de todos los dispositi"os presentes en el sistema %ue es capa' de
reconocer. Para "ol"er a consultar esta informaci&n despu!s de arrancar se puede usar el comando
Gdmes# > lessG. Nos ocuparemos de la compilaci&n del Hernel en otro cap)tulo.
/ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ /
Conse1os .inales.
No resulta ra'onable empe'ar instalando una #ran cantidad de cosas distintas. Empiece instalando
los pa%uetes imprescindibles. ,ue#o podr( ir a=adiendo otras cosas poco a poco y sacando copias
de se#uridad antes de a=adir o %uitar pa%uetes. Piense %ue unos pa%uetes pueden depender de otros
o entrar en conflictos con otros y %ui'(s no se de cuenta de %ue est( modificando al#o %ue necesita.
*na "e' obtenida una primera instalaci&n %ue funcione aun%ue falten cosas por confi#urar deber(
a"an'ar despacio pero se#uro. Es decir recurra a las copias de se#uridad estableciendo puntos a
partir de los cuales podr( recuperar la situaci&n para no tener %ue empe'ar cada "e' desde cero.
9ambi!n es bueno ir apuntando las cosas %ue se "an instalando y confi#urando la resoluci&n de
problemas etc.. 9odo ello para facilitar las cosas en caso de tener %ue "ol"er a empe'ar de lo
contrario el esfuer'o en confi#urar su sistema se puede perder.
,a primera "e' %ue instale ,inu+ no debe pensar en ello como un mero tr(mite para empe'ar a
hacer cosas. Piense %ue es un proceso fraccionado en distintas etapas y %ue cada etapa tiene como
premio el poder disfrutar de un sistema capa' de hacer cada "e' m(s y m(s cosas.
/ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ /
/ocumentacin adicional.
Este documento fu! pensado para ayudar a los usuarios con menos conocimientos y menos recursos
t!cnicos a tener !+ito en su primera instalaci&n de ,inu+. El tema es ampl)simo y hay mucha
documentaci&n al respecto. Por ello nos hemos limitado a hacer unas consideraciones #enerales. No
obstante hay una #ran cantidad de documentaci&n de #ran utilidad para temas de instalaci&n y
confi#uraci&n de ,inu+.
Para obtener dicha informaci&n le recomendamos %ue "isite. ,as p(#inas de ,uCAS con #ran
cantidad de documentaci&n en espa=ol o las p(#inas de ,DP .,inu+ Documentati&n Pro3ect2
destinadas a centrali'ar toda la documentaci&n de ,inu+ en todo el mundo.
En el caso de %ue ten#a una dificultad espec)fica con al#$n dispositi"o o con al#una confi#uraci&n
concreta de al#$n susbsitema puede encontrar #ran ayuda en una serie de documentos cortos
mono#r(ficos de enfo%ue pr(ctico denominados Q7owtosQ o QComosQ %ue podr( encontrar en los
lu#ares %ue acabamos de indicarle.
Para al#unos casos conflicti"os relati"os al hardware de su e%uipo puede consultar la
documentaci&n de su Hernel. G/usr/src/linu+/Documentation/G
/ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ /
!sistencia ,ratuita en listas de usuarios.
E+isten listas de correo en las cuales podr( obtener respuesta a sus pre#untas sobre ,inu+.
4ealmente funciona en la pr(ctica como un ser"icio de asistencia #ratuito de #ran calidad.
No debe tener reparo a pre#untar siempre %ue comprenda %ue hay %ue respetar las normas de la lista
y %ue el tiempo de los dem(s es "alioso. Por ello no deber)a nunca pre#untar cosas sin consultar
antes las p(#inas del manual y otra documentaci&n adicional %ue acabamos de mencionar.
Se asume %ue no "a a pre#untar por simple comodidad sino por%ue ha buscado y no a encontrado
la respuesta.
En Espa=a la lista de consultas t!cnicas sobre ,inu+ en #eneral es l:linu+. Para suscribirse o
desuscribirse se en"iar( un correo electr&nico con un comando %ue ser( recibido por un ser"idor
pero no ser( le)do por nin#una persona sino interpretado por un pro#rama %ue en este caso se llama
;a3ordomo.
N W Para suscribirse
N echo subscribe l:linu+ > mail ma3ordomofcal"o.teleco.ulp#c.esI
N W
N W Para borrarse
N echo unsubscribe l:linu+ > mail ma3ordomofcal"o.teleco.ulp#c.esI
hF6;
4ecibir( una contestaci&n autom(tica y con ello recibir( todo el
correo de la lista. Cada "e' %ue al#uien en")a un correo a la lista
todos los miembros recibir(n una copia del mensa3e.
,a lista l:linu+ se modific& hace poco y desde entonces hay %ue estar
suscrito para poder en"iar mensa3es. Esto se hi'o para combatir en lo
posible el uso de SPA; y el en")o de mensa3es an&nimos molestos.
Desde entonces la calidad de la lista ha me3orado bastante. 5tras listas pueden tener un
funcionamiento m(s abierto admitiendo cual%uier mensa3e y otras por el contrario pueden tener un
comportamiento m(s restricti"o.
Concretamente al#unas se llaman listas moderadas y solo se admite un mensa3e si una persona
llamada moderador considera %ue es un mensa3e oportuno.
Con"iene leer atentamente las normas de uso de la lista y atenerse a ello. 7ay #ente %ue no respetan
las normas. 6ncluso hay al#unos %ue en")an un mensa3e admitiendo %ue est( fuera de la tem(tica de
la lista en tono de disculpa anticipada pero estas cosas se suelen considerar abusos y pueden
pro"ocar fuertes discusiones en la lista.
Concretamente l:linu+ es una lista %ue recibe y en")a muchos mensa3es.
7ay otras listas espec)ficas para otras distribuciones o para temas
mucho m(s especiali'ados.
24. #erminales
Nue es un terminal.
En ,inu+ y otros S5 similares se considera la posibilidad de %ue un ordenador ten#a "arios usuarios
traba3ando simult(neamente.
Cada dispositi"o %ue permite a un usuario interactuar con una m(%uina se le llama terminal. 7ay
terminales de entrada como por e3emplo un lector de c&di#o de barras los ya obsoletos lectores de
tar3etas perforadas terminales salida como por e3emplo una impresora y terminales de entrada
salida como los cl(sicos terminales de pantalla.
7ay otras muchas clases de terminales. Por e3emplo hay terminales para personas cie#as pero el
tipo m(s utili'ado es el formado por pantalla y teclado. Dentro de esta cate#or)a hay cientos de
modelos distintos. En ,inu+ y en otros S5 tipo *ni+ se contempla la posibilidad de traba3ar casi
con cual%uier tipo de terminal.
,a palabra tty usada para desi#nar los dispositi"os %ue controlan los terminales "iene de 9ele9Xpe
.teletipo2. ,os primeros terminales no ten)an monitor. Eran simples y primiti"os teletipos.
En un PC la pantalla y el teclado son perif!ricos %ue se conectan de forma independiente al
ordenador pero en ordenadores #randes los terminales de pantalla y teclado son un todo %ue se
comunica con el ordenador por un $nico cable. Por e3emplo a tra"!s de un puerto serie. Por estos
cables lo %ue circulan bytes correspondientes a los caracteres intercambiados entre el terminal y el
ordenador. Antes de %ue sur#ieran los ordenadores personales lo normal era %ue el ordenador
estu"iera en un cuarto cercano a la sala de terminales donde los usuarios se sentaban a traba3ar.
Podemos "er en la fi#ura un con3unto formado por oordenador central y una serie de ordenadores
conectados a !l.
Estos terminales %ue acabamos de mencionar aun se usan hoy en d)a y no son simples con3untos de
teclado y monitor. 9ienen cierto #rado de autonom)a lo cual permite liberar al ordenador central de
una parte del traba3o ya %ue en lu#ar de atender las entradas tecla a tecla lo har( l)nea a l)nea. ,a
pantalla de un terminal no es simplemente un monitor ya %ue su electr&nica es m(s comple3a. Entre
sus circuitos electr&nicos dispone de una memoria. Esta #uarda la informaci&n hasta tener la l)nea
completa %ue adem(s puede ser editada sin %ue en eso inter"en#a el ordenador. ,a pantalla en
cambio muestra los caracteres tecleados a medida %ue se "an introduciendo. Por eso lo %ue "emos
en el terminal %ui'(s no ha sido transmitido a$n al ordenador. En realidad la memoria del terminal
contendr( no solo el buffer del teclado sino todo el contenido de la pantalla del terminal. Esto es
necesario por "arias ra'ones. *na de ellas es la posibilidad de hacer scroll "ertical y otra para
recuperar la informaci&n de toda la pantalla en caso necesario.
#erminales virtuales
Si ha pasado lo anterior por alto pensando %ue no tiene %ue "er con su caso por traba3ar con PCs
"uel"a a leer los p(rrafos anteriores por%ue en un PC %ue use ,inu+ una sesi&n de consola como las
%ue estamos usando en este curso funcionar( de forma muy similar por ser una simulaci&n de este
tipo de terminales.
En ,inu+ e+iste una emulaci&n de "arios terminales sobre un $nico monitor. Se denominan
frecuentemente terminales "irtuales. Para cambiar de un terminal "irtual a otro pulsaremos
TAltUTF/U TAltUTF0U TAltUTF1U etc. Con ello tendremos acceso a los terminales /de"/tty/
/de"/tty0 /de"/tty1 etc respecti"amente. En cada uno de estos terminales puede mantenerse una
sesi&n de traba3o distinta.
Es como si tu"i!ramos "arios terminales f)sicos distintos formados por monitor teclado alta"o'
memoria y cable de cone+i&n al ordenador pero solo pudi!ramos usar uno de ellos en un momento
dado. ,a informaci&n de cada terminal "irtual se encuentra almacenada en dispositi"os /de"/"cs
pero no es accesible para usuarios normalitos.
/ispositivos controladores de terminales
Cada terminal "irtual est( #estionado por un controlador de dispositi"o. Si e3ecuta el comando GttyG
obtendr( el nombre del controlador %ue est( usando.
N tty
/de"/tty1

<ueno /de"/tty1 ser)a el nombre del terminal. *sted puede obtener otra cosa pero "amos a suponer
%ue su terminal fuera este.
N echo QholaQ U /de"/tty1

Sacar( el mensa3e QholaQ en la pantalla de su terminal. Si intenta hacer esto mismo sobre otro
dispositi"o por e3emplo /de"/tty0 deber)a aparecer el mensa3e en la pantalla de otro terminal.
Normalmente esto no sucede a no ser %ue /de"/tty0 tambi!n est! funcionando con su usuario. Con
esto se e"ita %ue un usuario pueda molestar a otro.
,os terminales "irtuales est(n numerados del C al L1. Para "er cual es el n$mero del terminal actual
tambi!n se puede usar Gf#consoleG
7ay otros tipos de terminales. Son dispositi"os de tipo car(cter y hay un mont&n de ellos
disponibles.
N ls /de"/VttyV

E+iste un dispositi"o especial %ue para cada usuario se comporta como si fuera su propio
controlador.
N echo QholaQ U /de"/tty

Esto saca un mensa3e en la pantalla de su propio terminal e+actamente i#ual %ue el el caso anterior.
Esto puede ser $til para usarlo por e3emplo en scripts %ue pueden tener ambas salidas .est(ndar y de
errores2 rediri#idas a ficheros pero deseamos %ue determinado mensa3e sal#a siempre por la
pantalla.
E+iste otro dispositi"o especial llamado consola /de"/console. Este dispositi"o suele encontrarse
pr&+imo a la m(%uina y por el salen los mensa3es del sistema. Se asume %ue este puesto de traba3o
es usado por el administrador del sistema.
,a consola est( asociada a /de"/ttyC %ue al i#ual %ue /de"/tty es un alias de terminal "irtual actual
pero pueden tener permisos distintos.
Jamos a hacer al#unas pruebas y "amos a suponer %ue su sesi&n de traba3o con bash utili'a el tty1.
Compruebe cual es su caso con el comando GttyG y en caso de ser distinta t!n#alo en cuenta cada "e'
%ue ha#amos referencia al tty1 o a TAltUTF1U. *sted deber( usar lo %ue corresponda en su caso.
9ambi!n puede pasarse al tty1 para continuar la lecci&n.
Primero "amos a comprobar la disponibilidad y los permisos de un tty %ue casi siempre %ueda libre.
El tty/0.
N ls :l /de"/tty/0
crw:rw:rw: / root tty A /0 a#o 0B 0CCC /de"/tty/0

A%u) lo importante es comprobar %ue podemos usar ese terminal y %ue tiene permisos de lectura
escritura.
Si esto no es as) habr)a %ue modificar los permisos o incluso crear el dispositi"o para poder hacer la
pr(ctica pero eso re%uiere pri"ile#ios de root y nos saldr)amos de los prop&sitos de este curso.
Jamos a probar si podemos escribir en el tty/0.
Si usted hace Gecho +++++ U /de"/tty/0G y lue#o pasa al terminal tty/0 con TAltUTF/0U "er( %ue no
puede hacer nada en !l pero las G+++++G aparecen en la pantalla.
Jamos a probar si podemos leer del tty/0.
7a#a Gcat T /de"/tty/0G desde su sesi&n de traba3o y lue#o pase al terminal tty/0 con TAltUTF/0U e
introdu'ca una cadena sin usar la tecla T6ntroU. Por e3emplo GyyyyyyyyyyyyG.
Si "uel"e al tty1 con TAltUTF1U comprobar( %ue el comando cat continua esperando recibir datos
pero aun no ha recibido nin#$n car(cter. ,a ra'&n es %ue la cadena GyyyyyyyyyyyyG se encuentra
toda")a en la memoria del terminal tty/0 y toda")a no se ha en"iado un solo car(cter al ordenador.
El modo normal de funcionamiento de los terminales de te+to es este. En lu#ar de en"iar caracteres
aislados en")an chorros de caracteres.
Juela al tty/0 con TAltUTF/0U y pulse T6ntroU. 6nmediatamente "uel"a a tty1 con TAltUTF1U y
comprobar( %ue cat acaba de recibir la cadena de caracteres. Para finali'ar cat interr$mpalo con
TCtrl?CU.
Si al#una de estas dos pruebas de lectura o escritura no ha funcionado posiblemente se deba a unos
permisos demasiado restricti"os o a una diferente confi#uraci&n en su e%uipo y eso supone %ue
tendr( dificultades para practicar esta lecci&n pero nosotros "amos a ir e+plicando todo lo %ue
sucede en cada pr(ctica.
Sesin de traba1o en un terminal %,etty&
4epasemos un poco cosas %ue ya comentamos en lecciones anteriores. 7ay un fichero de
confi#uraci&n G/etc/inittabG %ue durante el arran%ue acti"ar( un pro#rama llamado G#ettyG. Este
mandar( un mensa3e a la consola en espera de %ue al#uien introdu'ca su nombre de usuario.
Cuando esto sucede G#ettyG hace un e+ec al pro#rama Glo#inG con el nombre de usuario obtenido y
lo#in solicitar( la password. Si la password es correcta lo#in har( un e+ec a la shell.
Esto ya lo "imos cuando hablamos de los procesos y si recuerda Ge+ecG es una llamada al sistema
%ue cambia el c&di#o del pro#rama %ue se est( e3ecutando sin cambiar su P6D. Cuando la shell
termine el proceso GinitG detectar( la muerte de su proceso hi3o y arrancar( un nue"o G#ettyG por%ue
en G/etc/inittabG estos procesos fi#uran en modo respawn. 9ambi!n fi#ura el nombre del dispositi"o y
la "elocidad de comunicaci&n.
,os terminales %ue no ten#an entrada en este fichero /etc/inittab no estar(n disponibles para una
sesi&n de traba3o en modo consola pero eso no %uiere decir %ue sean in$tiles. Por e3emplo si en
/etc/inittab solo aparecen los terminales %ue "an desde tty/ a ttyL solo podr( abrir estos seis
terminales "irtuales pero si se arrancan las [windows lo har(n en el primer terminal disponible %ue
en este caso ser( el ttyM.
Este es un curso de usuario y a pesar de %ue a estas alturas del curso se e+plican cosas al#o
a"an'adas no pretendemos ense=arle a administrar el sistema. En particular le ad"ertimos %ue no
debe intentar modificar /etc/inittab aun%ue dispon#a de cuenta de root si no sabe e+actamente lo %ue
est( haciendo por%ue su sistema podr)a no "ol"er a arrancar.
G#ettyG es un pro#rama normal %ue no re%uiere pri"ile#ios especiales para ser e3ecutado.
,a pr(ctica %ue ponemos ahora solo ser( posible si su puesto de traba3o es un PC con ,inu+. Si est(
traba3ando en un terminal independiente del ordenador central no podr( hacerlo. Si la prueba de
en"iar G+++++G al terminal tty/0 no fue satisfactoria tampoco podr( hacer esta otra prueba.
,ocalice #etty con el comando locate por e3emplo. Supon#amos %ue lo encuentra en G/sbin/#ettyG.
;ire en /etc/inittab la parte donde aparece #etty.
N cat /etc/inittab
W TidU:Trunle"elsU:TactionU:TprocessU
/:01AK:respawn:/sbin/#etty 1RACC tty/
0:01:respawn:/sbin/#etty 1RACC tty0
1:01:respawn:/sbin/#etty 1RACC tty1
A:01:respawn:/sbin/#etty 1RACC ttyA
K:01:respawn:/sbin/#etty 1RACC ttyK
L:01:respawn:/sbin/#etty 1RACC ttyL

Supon#amos %ue fi#ura lo %ue acabamos de poner. respawn es la acci&n reali'ada por init. Si#nifica
en este caso e3ecutar y "ol"er a e3ecutar cada "e' %ue termine. /sbin/#etty es el pro#rama %ue abrir(
el terminal. El primer par(metro despu!s de #etty es la "elocidad de transmisi&n .en este caso
1RACC2 y el $ltimo par(metro es el terminal.
Nos basamos en esta informaci&n para lan'ar #etty sobre el tty/0:
/sbin/#etty 1RACC tty/0

Comprobar( %ue aparentemente el pro#rama no termina. Pase ahora al terminal tty/0 con
TAltUTF/0U
Jer( %ue G#ettyG ha abierto una sesi&n en ese terminal. G#ettyG esta funcionando sin nin#$n problema.
6ntrodu'ca su nombre de usuario y "er( %ue lo#in no es tan permisi"o. Dar( un mensa3e de error no
reconociendo a su padre como un padre le#)timo. Para e"itar usos e+tra=os de lo#in se termina su
e3ecuci&n. Jol"iendo a la sesi&n donde arranco #etty "er( %ue este tambi!n termin&.
Este intento fracasado no %uiere decir %ue no se pueda abrir una sesi&n de traba3o en una consola
%ue no est! controlada por G#ettyG. Solo si#nifica %ue Glo#inG es un "i#ilante celoso de la se#uridad
del sistema y hemos intentado usarlo de una manera no con"encional.
No solo se puede abrir una sesi&n de traba3o en una consola %ue no est! controlada por G#ettyG sino
%ue adem(s es muy f(cil y no re%uiere permisos especiales. Para abrir una sesi&n en el /de"/tty/0
basta con e3ecutar Gopen"t :c /0 bashG y esto lo comentamos simplemente como curiosidad para %ue
lo pruebe si %uiere pero no merece m(s e+plicaci&n en este momento.
9oda esta pr(ctica un poco rara pretende %ue comprenda como funcionan las cosas. El tema de los
terminales es bastante amplio.
La librer0a ncurses
No "amos a aprender a usar estas librer)as por%ue este no es un curso de pro#ramaci&n pero es una
librer)a muy importante y encontrar( montones de referencias en el manual de ,inu+ a estas
p(#inas. 4esulta imprescindible comentar al#o de ncurses para comprender el comportamiento de
al#unas aplicaciones.
Xa hemos dicho %ue hay muchas clases de terminales y %ue incluso un determinado tipo de terminal
f)sico puede funcionar de formas distintas emulando unos terminales a otros. Cada terminal tiene su
propio len#ua3e de comandos %ue no son otra cosas de secuencias de caracteres asociadas a
determinadas acciones. Por ello una aplicaci&n debe conocer con %ue terminal est( tratando.
,as aplicaciones hacen esto usando una librer)a intermedia %ue se encar#ar( de traducir cada acci&n
a la secuencia de caracteres adecuada. Esta librer)a se llama GcursesG o su "ersi&n moderna llamada
GncursesG. ,a aplicaci&n debe de ser informada de el tipo del terminal con el cual est( traba3ando y
eso se hace a tra"!s de la "ariable 9E4;.
Si usted consulta .h(#alo2 el "alor de esta "ariable se#uramente obtendr( Glinu+G %ue es el nombre
del terminal %ue linu+ usa por defecto. 7ay muchos tipos de terminales y cada uno tiene su nombre.
Por e3emplo si usted e3ecuta 9E4;@G"t/CCG_ e+port 9E4;_ ,a aplicaci&n %ue se e3ecute a
continuaci&n puede pensar %ue tiene %ue dialo#ar con un terminal tipo G"t/CCG.
<ueno al#unas aplicaciones no hacen esto. Directamente asumen %ue funcionar(n en un
determinado tipo de terminal y por ello no usan ni la "ariable 9E4; ni la librer)a curses. Por
e3emplo ls ::color@auto asumir( siempre %ue el terminal es un terminal Glinu+G y en"iar(
directamente las secuencias de caracteres apropiadas para un terminal Glinu+G aun%ue e+iste un
fichero de confi#uraci&n m(s %ue nada para poder poner el color %ue uno %uiera a cada cosa. Puede
probar a cambiar la "ariable 9E4; y comprobar( %ue los colores salen perfectamente.
Por el contrario la utilidad GlessG si usa GncursesG $sela poniendo la "ariable 9E4;@attAA0A y
comprobar( %ue la aplicaci&n se comporta de un modo e+tra=o. En cambio si usa la "ariable
9E4;@"t/CC. Se comportar( de forma casi normal por%ue el terminal G"t/CCG y el terminal Glinu+G
tienen al#unas similitudes. En realidad "t/CC .DEC2 es un tipo de terminal muy conocido y el
terminal de linu+ deri"a de !l.
7emos ele#ido GlsG y GlessG por%ue no suponen un peli#ro en caso de uso incorrecto pero si intenta
hacer esto con otro pro#rama como por e3emplo un editor podr)a destruir un fichero debido al
desconcierto or#ani'ado en su pantalla.
,a librer)a curses accede a una base de datos de terminales .terminfo2 donde se establecen la
capacidades de cada terminal.
Si usted est( traba3ando con linu+ en un terminal %ue no es de tipo Glinu+G notar( %ue al#unas
aplicaciones no "an bien. ,a forma de arre#larlo es cambiar la "ariable 9E4; con el "alor
apropiado a su terminal y as) por lo menos las aplicaciones %ue usen curses "ol"er(n a funcionar
perfectamente.
$l terminal de linux
,as capacidades del terminal de linu+ son muy "ariadas. ;ane3o del cursor borrado de partes o de
la totalidad de la pantalla colores y otros atributos pitido del terminal confi#uraci&n de la pantalla
en filas y columnas #uardar posici&n del cursor etc.. ,as p(#inas del manual anteriormente
mencionadas tratan de todo esto y la cantidad de posibilidades es tan #rande %ue nos limitaremos a
poner al#unos e3emplos.
Para conocer el 3ue#o de caracteres completo y caracteres de control %ue tiene un terminal linu+
consulte en la secci&n M del manual las p(#inas de ascii.M2 e isoORRKBO/.M2. Para una relaci&n de las
secuencias de control consulte la p(#ina consoleOcodes.A2.
Antes %ue nada con"iene saber %ue el terminal puede %uedar en un estado %ue resulte muy dif)cil de
usar. Si eso lle#a a ocurrir teclee GT6ntroUresetT6ntroUG y con un poco de suerte todo "ol"er( a la
normalidad. Pruebe ahora este comando para ase#urarse de %ue dispone de el antes de hacer la
prueba si#uiente.
N reset
Erase is delete.
Eill is control:* .^*2.
6nterrupt is control:C .^C2.

Se muestra la confi#uraci&n por defecto de al#unos par(metros %ue lue#o e+plicaremos cuando
hablemos de stty.
Jamos a hacer una prueba al#o delicada. Jamos a en"iar un car(cter de control al terminal %ue lo
de3ar( en un estado bastante lamentable para traba3ar con !l para "er como se puede recuperar una
situaci&n de este tipo.
Jamos a en"iar un TCtrl?NU pero para ello hay %ue usar una secuencia de escape id!ntica a la %ue
se "io en el cap)tulo del editor G"imG. Concretamente la secuencia para introducir el TCtrl?NU ser(
TCtrl?JUTCtrl?NU. Esto aparecer( como ^N. Antes %ue nada c(mbiese al directorio G/tmpG donde
no podremos hacer muchos destro'os. Despu!s de en"iar el G^NG al terminal no podremos "er lo %ue
hacemos por%ue saldr(n caracteres semi #r(ficos en lu#ar de letras.
N cd /tmp
N echo G^NGG
NF6N

Ahora ol"ide se del monitor por un momento y ha#a T6ntroUresetT6ntroU. Se supone %ue habr(
funcionado bien. En caso contrario no se aceptan reclamaciones. Dispone usted de otros terminales
"irtuales en otros ttys as) %ue si un terminal no se recupera puede usar otros. Con"iene %ue aprenda
a recuperar estas situaciones.
Jamos a hacer un pro#ramita %ue usa las secuencias de escape del terminal de linu+. ,a e+plicaci&n
la puede consultar en consoleOcodes.A2.
Edite un fichero %ue llamaremos GpruOconsoleOcodes.bashG.
function muestra.2a
W echo :e QPC11YNaP5SXb_NaP5S[b7Q W ;anda el cursor a NP5SX NP5S[
let P5SX@P5SX?/ _ echo :e QPC11YNaP5SXb_NaP5S[b7PcQ
echo :e GPC11Y1CmNe#roPcG
let P5SX@P5SX?/ _ echo :e QPC11YNaP5SXb_NaP5S[b7PcQ
echo :e GPC11Y1/m4o3oPcG
let P5SX@P5SX?/ _ echo :e QPC11YNaP5SXb_NaP5S[b7PcQ
echo :e GPC11Y10mJerdePcG
let P5SX@P5SX?/ _ echo :e QPC11YNaP5SXb_NaP5S[b7PcQ
echo :e GPC11Y11m;arronPcG
let P5SX@P5SX?/ _ echo :e QPC11YNaP5SXb_NaP5S[b7PcQ
echo :e GPC11Y1AmA'ulPcG
let P5SX@P5SX?/ _ echo :e QPC11YNaP5SXb_NaP5S[b7PcQ
echo :e GPC11Y1Km4osaPcG
let P5SX@P5SX?/ _ echo :e QPC11YNaP5SXb_NaP5S[b7PcQ
echo :e GPC11Y1LmCelestePcG
let P5SX@P5SX?/ _ echo :e QPC11YNaP5SXb_NaP5S[b7PcQ
echo :e GPC11Y1Mm<lancoPcG
b
typeset :i P5SX _ typeset :i P5S[
echo :e GPC11Y0dPcG W <orrar pantalla
echo :e GPC11Y/mPcG W Atributo <rillo
P5SX@/ _ P5S[@/L _ echo :e QPC11YNaP5SXb_NaP5S[b7PcQ
echo :e GV<rilloVPcG_ muestra
echo :e GPC11Y0mPcG W Atributo Semi brillo
P5SX@/ _ P5S[@1/ _ echo :e QPC11YNaP5SXb_NaP5S[b7PcQ
echo :e GVSemi <rilloVPcG_ muestra
echo :e GPC11YCmPcG W Atributo normal
echo :e GPC11YKmPcG W Atributo 6ntermitente
P5SX@/ _ P5S[@AL _ echo :e QPC11YNaP5SXb_NaP5S[b7PcQ
echo :e GV6ntermitenteVPcG_ muestra
echo :e GPC11YCmPcG W Atributo normal
echo :e GPC11YMmPcG W Atributo 6n"erso
P5SX@/ _ P5S[@L/ _ echo :e QPC11YNaP5SXb_NaP5S[b7PcQ
echo :e GV6n"ersoPcG_ muestra
echo :e GPC11YCmPcG W Atributo normal
P5SX@/ _ P5S[@/ _ echo :e QPC11YNaP5SXb_NaP5S[b7PcQ
echo :e GVNormalVPcG_ muestra
echo :e GPC11YKmPcG W Atributo intermitente
echo :e GPC11YMmPcG W Atributo 6n"erso
P5SX@/0 _ P5S[@/ _ echo :e QPC11YNaP5SXb_NaP5S[b7PcQ
echo :e GV6n"erso?6ntermitentePcG_ muestra
echo :e GPC11YCmPcG W Atributo normal
echo :e GPC11YKmPcG W Atributo intermitente
echo :e GPC11Y/mPcG W Atributo brillo
P5SX@/0 _ P5S[@0L _ echo :e QPC11YNaP5SXb_NaP5S[b7PcQ
echo :e GV<rillo?6ntermitentePcG_ muestra
echo :e GPC11YCmPcG W Atributo normal
echo :e QPC11Y0K_/7PcQ

El pro#rama termina poniendo el atributo normal pero recuerde %ue si al#o sale mal y el terminal
%ueda en un estado poco operati"o deber( recuperarlo con el comando reset. *na "e' dicho esto
pon#a permiso de e3ecuci&n a este fichero y e3ecutelo.
Podr( comprobar como sale la informaci&n con distintos colores y atributos. Para ello hemos usado
secuencias de caracteres especificas de los terminales linu+ y %ue podr)an no funcionar en otros
terminales.
Control de un terminal %setterm&
Para cambiar los atributos de un terminal cual%uiera se usa setterm./2 %ue utili'ar( la "ariable
9E4; para identificar el terminal y usar las secuencias de caracteres adecuadas.
setterm admite el nombre de un terminal para en"iar los c&di#os de control a ese terminal en lu#ar
de en"iarlos al terminal actual.
Jamos a cambiar el sonido del pitido de nuestro terminal.
N setterm :bfre% /CC :blen#th KCC

Ahora tendremos un pitido m(s #ra"e de lo normal de medio se#undo. Antes de "ol"erlo a su
situaci&n normal cambie a otro terminal y compruebe %ue el cambio de sonido no ha tenido efecto
sobre ese terminal. No piense %ue su ordenador tiene un $nico alta"o' por%ue es como si e+istiera
un alta"o' para cada terminal solo %ue no puede funcionar mas %ue uno de ellos en un momento
dado. En eso consiste la emulaci&n de los terminales "irtuales. Es un solo terminal f)sico pero se
comporta como "arios.
Para de3ar el sonido como al principio haremos lo si#uiente:
N setterm :reset

Ahora "amos hacer un pro#rama %ue sacar( distintos sonidos.
sound.2a
setterm :bfre% N/ :blen#th N0
echo :e GPaPcG U /de"/console
b
sound 0CCC BCC
sleep /
sound MCC ACC
sleep /
sound /KC 1CC
sleep /
sound MC 0CC
sleep /
sound AC /CCC
sleep /
setterm :reset W Jol"er a la situaci&n normal
echo :e GPaPcG U /de"/console

setterm :cursor off setterm :cursor on setterm :repeat on
Confi#uraci&n de un terminal .stty2
El pro#rama stty./2 sir"e para comprobar o alterar el estado de un terminal.
N stty
speed 1RACC baud_ line @ C_
:brHint i+off :ima+bel
:ie+ten

Esto solo muestra los par(metros m(s importantes. Para mostrar la totalidad de los par(metros %ue
controlan nuestro terminal haremos
N stty :a
speed 1RACC baud_ rows 0K_ columns RC_ line @ C_
intr @ ^C_ %uit @ ^P_ erase @ ^S_ Hill @ ^*_ eof @ ^D_ eol @ Tno definidoU_
eol0 @ Tno definidoU_ start @ ^-_ stop @ ^S_ susp @ ^]_ rprnt @ ^4_
werase @ ^8_ lne+t @ ^J_ flush @ ^5_ min @ /_ time @ C_
:parenb :parodd csR hupcl :cstopb cread :clocal :crtscts
:i#nbrH :brHint :i#npar :parmrH :inpcH :istrip :inlcr :i#ncr icrnl i+on i+off
:iuclc :i+any :ima+bel
opost :olcuc :ocrnl onlcr :onocr :onlret :ofill :ofdel nlC crC tabC bsC "tC ffC
isi# icanon :ie+ten echo echoe echoH :echonl :noflsh :+case :tostop :echoprt
echoctl echoHe

Cuando e3ecutamos reset nos muestra la confi#uraci&n de los si#uientes tres par(metros. . erase @
^S Hill @ ^* intr @ ^C 2 %ue son respecti"amente el caracter %ue el terminal interpretar( como el
caracter para borrar el $ltimo caracter tecleado el caracter para borrar la l)nea actual y el caracter
para mandar una se=al de interrupci&n.
En la p(#ina man stty./2 "iene la interpretaci&n de todos los par(metros usados para confi#urar un
terminal ,o normal es %ue su "alor permita un uso normal del terminal y por ello tocarlos podr)a
afectar a la operati"idad del terminal.
stty tambi!n permite #uardar la confi#uraci&n actual de un terminal en un fichero con la opci&n :#
en un formato %ue permitir( al propio stty a3ustar todos los par(metros de un terminal usando uno
de estos ficheros #enerados con la opci&n :#.
En la pr(tica %ue si#ue debe recordar de para introducir un caracter de control deber( "enir
precedido de TCtrl?JU
N W Fuardamos la confi#uraci&n
N stty :# U /tmp/stty.out
N cat /tmp/stty.out
/KCC:K:Abf:a1b:1:/c:Mf:/K:A:C:/:C://:/1:/a:
C:/0:f:/M:/L:C:C:C:C:C:C:C:C:C:C:C:C:C:C:C:C
N stty werase ^A W 53o usar TCtrl?JU TCtrl?AU
N stty :a
N W Comprobamos %ue ahora werase @ ^A_
speed 1RACC baud_ rows 0K_ columns RC_ line @ C_
intr @ ^C_ %uit @ ^P_ erase @ ^S_ Hill @ ^*_ eof @ ^D_ eol @ _
eol0 @ _ start @ ^-_ stop @ ^S_ susp @ ^]_ rprnt @ ^4_
werase @ ^A_ lne+t @ ^J_ flush @ ^5_ min @ /_ time @ C_
:parenb :parodd csR hupcl :cstopb cread :clocal :crtscts
:i#nbrH :brHint :i#npar :parmrH :inpcH :istrip :inlcr :i#ncr icrnl i+on i+off
:iuclc :i+any :ima+bel
opost :olcuc :ocrnl onlcr :onocr :onlret :ofill :ofdel nlC crC tabC bsC "tC ffC
isi# icanon :ie+ten echo echoe echoH :echonl :noflsh :+case :tostop :echoprt
echoctl echoHe
N stty \cat /tmp/stty.out\ W 4ecuperamos la confi#uraci&n anterior

,os resultados de esta pr(ctica pueden "ariar de un sistema a otro. ,o importante es %ue compruebe
como hemos sal"ado la confi#uraci&n a un fichero antes de alterar la confi#uraci&n del terminal y
como podemos recuperar esa confi#uraci&n desde ese fichero. *samos solo werase para ello y no
"amos a proponer m(s e3ercicios sobre esto. ,os terminales en ,inu+ no emulan siempre a la
perfecci&n a los terminales tradicionales. ,o e+plicamos en el si#uiente apartado ."er readline2.
La librer0a readline
Nue"amente tenemos %ue comentar la e+istencia y prop&sito de una librer)a especial no para
aprender a mane3arla sino para comprender una situaci&n bastante especial de los terminales en
,inu+. ,os terminales "irtuales en ,inu+ no se comportan como los terminales otros sistemas tipo
*ni+. Por e3emplo podemos cambiar el caracter de control de GeraseG con stty y parecer( %ue no tiene
nin#$n efecto cosa %ue se contradice totalmente con lo %ue di3imos antes. Esto se debe a %ue
muchos pro#ramas de linu+ usan la librer)a GreadlineG %ue tiene sus propias funciones de edici&n de
linea etc.. y act$an sobreescribiendo las funciones del terminal. Esto determina dos tipos de usos
distintos del terminal y dos comportamientos distintos.
El bash y muchos de los pro#ramas de FN* usar(n la librer)a readline. ,os pro#ramas %ue usen
readline usaran N75;E/.inputrc para la confi#uraci&n de ciertos caracteres de edici&n de l)nea. En
caso de no e+istir este fichero se usa /etc/inputrc. Por ello el caracter de borrado de ultimo caracter y
otros no responder(n a lo mostrado por stty sino al fichero inputrc.
Por el contrario un pro#rama C %ue use #ets.2 para leer directamente del teclado no usar( la librer)a
readline y por ello lo %ue funcionar( ser( lo %ue determinen los par(metros de stty.
Es como si e+istieran dos clases de dispositi"os. *no ser)a tty y el otro lo podr)amos llamar tty:
Ureadline.
No es cuesti&n de profundi'ar en estos temas %ue son m(s adecuados para un curso de
administraci&n o de pro#ramaci&n. Con esto se pretende simplemente dar una e+plicaci&n l&#ica a
este tipo de comportamiento muy espec)fico de los terminales ,inu+.
#erminales y pseudoterminales
Xa hemos "isto como puede diri#irse entrada salida a un terminal pero un proceso puede tener
pre"isto dos comportamientos distintos para el caso %ue su salida est( conectada a un terminal o a
un fichero. Por e3emplo la opci&n G::color@autoG para GlsG resulta muy $til ya %ue producir( dos tipos
de salidas distintos dependiendo de %ue est! conectada bien a un terminal bien a otra cosa tipo
fichero pipe etc... En el caso de estar conectado a un terminal sacar( la informaci&n en color pero
si detecta otra cosa sacar( la informaci&n sin color para e"itar "olcar un mont&n de caracteres de
e+tra=os. En otras palabras GlsG y muchos otros pro#ramas pueden a"eri#uar si sus descriptores de
entrada salida est(ndar est(n conectado o no a un terminal. ,a salida a un terminal determina un uso
interacti"o con una persona y por ello los pro#ramas se adaptan a ello. Al#unas "eces %ueremos %ue
el comportamiento de un pro#rama sea como si estu"iera conectado a un terminal pese a %ue no sea
cierto y por" ello al#unas "eces hay %ue usar un terminal ficticio o pseudoterminal.
*n pseudoterminal es un componente software destinado a simular un terminal. Se implementan
usando una pare3a de dispositi"os especiales y distintos denominados escla"o y maestro. *n
proceso %ue use un pseudoterminal pensar( %ue est( conectado a un terminal aut!ntico y no notar(
diferencia al#una.
Por e3emplo una "entana de G+termG en windows funciona de esa manera.
*n e3emplo de pseudoterminal .script2
Scrip es un comando %ue funciona creando un pseudoterminal y arrancando una subshell %ue no
notar( %ue la entrada salida no es un autentico terminal. Script se usa para #rabar una sesi&n
completa de traba3o con bash en un fichero si se termina al finali'ar la e3ecuci&n de la shell con e+it.
Pruebe lo si#uiente:
N script /tmp/script.out
N ls ::color@auto /
N ls ::color@auto / U /tmp/ls.out
N e+it

El primer Gls ::color@auto /G mostrar( el contenido del directorio ra)' en colores. El se#undo Gls ::
color@auto / U /tmp/ls.outG #uardar( la salida en un fichero G/tmp/ls.outG. ,a sesi&n de script se
finali'a abandonando la shell con e+it. Cuando miremos el contenido de G/tmp/ls.outG con el editor
G"iG comprobaremos %ue no hay colores ni caracteres e+tra=os. Si miramos la sesi&n completa
#rabada con script en el fichero G/tmp/script.outG con G"i comprobaremos %ue est( llena de caracteres
e+tra=os. ,os retornos de carro aparecen como G^;G .representa TCtrl?;U y los c&di#os de colores
con secuencias del tipo G^YYCm...G o similares %ue responden a las secuencias de control para
modificar atributos y colores en la pantalla se#$n se describe en la p(#ina consoleOcodes.A2. Si
en")a el contenido de este fichero a pantalla por e3emplo usando Gcat /tmp/script.outG aparecer(n los
colores.
script captura absolutamente todo y por ello #rabar una sesi&n con script en un fichero puede
re%uerir un tratamiento de filtrar ciertas cosas antes de darle determinado uso a esa salida pero
resulta muy $til si solo deseamos re#istrar una sesi&n de traba3o para no tener %ue ir apuntando lo
%ue "amos haciendo o lo %ue "amos obteniendo.
#est
Puede comprobar sus conocimientos respondiendo el si#uiente test.
Para ello seleccione las opciones %ue se a3usten a la "erdad y lue#o pulse el boton para "er el
resultado de su test.

/ ,a librer)a ncurses est( formada por un con3unto de funciones para la edici&n de una l)nea.
0 El terminal de linu+ usa unas secuencias de control similares a la del terminal attAA0A
1 ,a librer)a ncurses permite %ue una aplicacion pueda funcionar en distintos tipos de terminales.
A Para a"eri#uar la confi#uraci&n actual de un terminal usaremos #etty.
K *n pseudoterminal es un tipo de dispositi"o.
L Script abre un pseudo terminal para poder capturar una sesi&n de traba3o y #uardarla en un
fichero.
M El comando reset apa#a o reinicia todo el sistema.

26. ro,ramacin de tareas en el tiempo
Introduccin
En este punto del curso podemos asumir %ue ya sabe pro#ramar al#unos scripts para hacer cosas
%ue le interesan. Si le pre#unt(ramos como hacer para %ue un pro#rama se e3ecute dentro de tres
horas usar)a el comando Gsleep /CRCCG. X efecti"amente eso ser)a una soluci&n sencilla %ue
funcionar)a muy bien ya %ue sleep no consume nada de cpu y tres horas son /CRCC se#undos pero
probablemente se habr( pre#untado como hacer para %ue una tarea se e3ecute en un determinado
momento o como hacer para %ue una tarea se e3ecute peri&dicamente.
Para eso disponemos de los comandos GatG GbatchG y GcronG. A GbatchG y a GatG hay %ue pasarles el
comando por la entrada est(ndar y con GbatchG GatG y a GcronG la salida del comando ser( diri#ida a la
cuenta de correo del usuario. Por eso con"iene rediri#ir las salidas con"enientemente y resulta
e"idente %ue de esta forma no se pueden e3ecutar pro#ramas interacti"os.
procmeter1 una herramienta para monitori'ar el sistema
Este es un pro#rama %ue nos resultar( de #ran utilidad para controlar la car#a del sistema y en
#eneral para "i#ilar cual%uier aspecto de la acti"idad en el sistema. ,a mayor parte de esta
informaci&n es obtenida a partir de /proc y es altamente confi#urable.
Para esta pr(ctica deber( acti"ar los elementos para CP* y para ,5AD en modo #r(fico
representado por una l)nea %uebrada. Ad"ierta %ue este tipo de #r(fica poseen unas rayas
hori'ontales y un numerito entre par!ntesis en la parte inferior. Ese numerito indica la unidad
correspondiente. Por e3emplo para CP* aparece .0CD2 y para ,5AD aparece ./2. Esto si#nifica %ue
en la primera #r(fica cada ralla hori'ontal supone un 0CD de uso de CP*. En ,5AD cada ralla
si#nifica una car#a de /. Estos "alores son los establecidos por defecto y aun%ue esto y otras cosas
pueden ser confi#uradas de forma distinta nosotros lo usaremos as).
Las utilidades at, at* y atrm.
Permite pro#ramar una tarea para %ue se e3ecute en un determinado momento. GatG usa una 3erar%u)a
de colas y cada una de ellas se refiere a un ni"el GniceG %ue es el "alor %ue otor#a la cantidad de
recurso de cpu %ue puede ocupar el proceso en detrimento de otros %ue se est!n e3ecutando
simult(neamente. ,os ni"eles se nombran con un $nico car(cter %ue "a de la GaG a la G'G o de la GAG a
la G]G. ,as primeras letras del alfabeto est(n asociadas con alta capacidad para usar CP* y las
$ltimas todo lo contrario. Por defecto el comando GatG e3ecutar( con el ni"el GaG.
E+iste un comando llamado GbatchG %ue sir"e para e3ecutar comandos de forma no inmediata pero
sin especificar el momento. ,o e+plicaremos m(s adelante y "iene a ser lo e%ui"alente a Qe3ecuta
esto cuando no est!s muy ocupadoQ. ,o comentaremos lue#o pero resulta %ue el comando GatG
tambi!n puede funcionar de esta forma.
Si se usa GatG especificando el ni"el de e3ecuci&n con una may$scula el pro#rama no se e3ecutar(
obli#atoriamente en el momento indicado sino %ue esperar( a %ue la car#a del sistema sea inferior al
"alor establecido para los procesos batch.
echo Gecho 7ola U /de"/consoleG > at now ? 0 minutes
Podr( comprobar %ue el sistema de"uel"e informaci&n relati"a a la tarea.
3ob at
Para comprobar las tareas planificadas e3ecute Gat%G para eliminar una tarea planificada %ue aun no se
ha e3ecutado Gatrm G
Por e3emplo si su usuario fuera pepe y %uiere en"iarse asi mismo un mensa3e de recordatorio para el
medio d)a del S(bado puede hacer %ue el sistema a esa hora le en")e un correo electr&nico.
echo Qmail :s G4ecordatorio. ,lamar a daimeG pepeQ > at N55N ;5N
,as especificaciones de tiempo utili'an una sinta+is especial pero %ui'(s resulte m(s intuiti"o y m(s
pr(ctico poner a modo de chuleta unas pocas re#las si#uiendo una notaci&n arbitraria %ue poner la
#ram(tica completa en formato yacc o en formato <NF. Esto nos lle"ar)a a tener %ue e+plicar cosas
%ue se salen del prop&sito de este curso y %ue ser)an m(s apropiadas para un curso de pro#ramaci&n.
Por ello y basandonos en un resumen arbitrario de esa #ram(tica incluimos el si#uiente cuadro
resumen.
timespec @ time > time date > time increment
> time date increment > time decrement
> time date decrement > nowspec
nowspec @ N58 > N58 increment > N58 decrement
time @ hr0AclocH > N55N > ;6DN6F79 > 9EA96;E
date @ monthOname dayOnumber
> monthOname dayOnumber GG yearOnumber
> dayOofOweeH > 95DAX > 95;54458
> yearOnumber G:G monthOnumber G:G dayOnumber
increment @ G?G incOnumber incOperiod
decrement @ G:G incOnumber incOperiod
hr0AclocH @ 6N9 GhG 6N9
incOperiod @ ;6N*9E > 75*4 > DAX > 8EEE > ;5N97 > XEA4
dayOofOweeH @ S*N > ;5N > 9*E > 8ED > 97* > F46 > SA9
monthOname @ dAN > FE< > ;A4 > AP4 > ;AX > d*N > d*,
> A*F > SEP > 5C9 > N5J > DEC
,o %ue si#ue es una re#la pr(ctica para el uso de esta chuleta sin demasiado "alor t!cnico.
Esperamos %ue sea util:
Para saber si una especificaci&n se a3usta o no se parte siempre de GtimespecG. ,as re#las las
representamos como una serie de posibilidades separadas por G>G. Cuando una de estas posibilidades
aparece en min$culas si#nifica %ue a su "e' esa posibilidad tiene unas re#las. Por e3emplo para
comprobar %ue GN55N ;5NG cumple la especificaci&n nos fi3amos en %ue GtimespecG entre otras
cosas se corresponde con GtimeG se#uido de GdateG. N55N .medio d)a2 es una forma "(lida de GtimeG y
;5N .,unes2 es una forma "(lida de GdayOofOweeHG %ue a su "e' es una forma "(lida de GdateG.
timespec @ time date > .....
time @ N55N > .....
date @ dayOofOweeH > ....
dayOofOweeH @ ;5N > .....
E3emplos:
at Bam 9*E
at now ? 0 minutes
at Bam Feb /R
at Apm ? 1 days
at /Cam dul 1/
at /am tomorrow
En Debian la especificaci&n de tiempo en formato yacc se encuentra en el fichero
G/usr/doc/at/timespecG %ue no se corresponde con lo %ue hemos puesto por%ue hemos pretendido
simplificar esta informaci&n.
Gat%G solo da informaci&n del n$mero de tarea y del momento en %ue se "a a e3ecutar pero la tarea en
si misma no. En Debian las tarea se #uardan en G/"ar/spool/cron/at3obs/G y resulta interesante como
se #uardan. Son simplemente un scrip %ue lan'a el comando indicado pero antes de ello recupera
todo el entorno desde el cual se lan'& y se situa en el directorio desde el cual se lan'&. En el fichero
G/"ar/spool/cron/at3obs/.SE-G se #uarda un contador de secuencia para los traba3os pero en
he+adecimal.
Si e+iste el fichero G/etc/at.allowG solo los usuarios contenidos estar(n autori'ados a lan'ar traba3os
con GatG. Si no e+istiera G/etc/at.allowG se permitir( el acceso a todos los usuarios sal"o %ue e+ista un
fichero G/etc/at.denyG en cuyo caso los usuarios contenidos en el no podr(n usar GatG.
La utilidad batc7
Xa hemos comentado %ue sir"e para instruir al sistema %ue e3ecute un comando cuando la car#a del
sistema no sea alta y adem(s lo har( con una prioridad ba3a. Si la car#a no desciende por deba3o del
"alor establecido para las tareas batch el pro#rama no se e3ecutar( nunca.
A modo de orientaci&n podemos decir %ue para sistemas monoprocesador suele usarse "alores de
C.M a /.K y para sistemas multiprocesador ser( superior y estar( en funci&n del n$mero de CP*s.
Jamos a pro#ramar un shell:script %ue consuma mucha CP* y %ue de3e una tra'a %ue nos permita
saber cuando arranca y cuando para.
W piloop
if Y NW :ne / Z
then echo Q*so piloop/C Q
else
for i in C / 0 1 A K L M R B
do
echo QNN Ni \date\Q UU /tmp/piloop.out
echo Qscale@N/_ AVa./2Q > bc :l UU /tmp/piloop.bc
done
fi
El "alor de la escala se pasa como par(metro y deber( probar primero con "alores ba3os hasta %ue
consuma uno o dos minutos para poder hacer la pr(ctica con comodidad. En nuestro e%uipo el
c(lculo del n$mero pi con /CCC cifras decimales resulta un "alor adecuado.
procmeter1
nice ::/B piloop /CCC `
Esperar a %ue suba la car#a
echo piloop /CCC > batch
,os procesos planificados con GatG y GbatchG son #estionados por GatdG. ;uchos de los procesos de este
tipo %ue est(n permanentemente funcionando terminan en GdG de GdaemonG. En in#les daemon
si#nifica duende. Si por cual%uier anomal)a atd de3ara de funcionar no se podr)a usar GatG ni GbatchG.
Curiosamente hay un proceso %ue se encar#a de #estionar tareas peri&dicas y %ue i#ualmente est(
permanentente funcionando pero no se llama crond sino GcronG.
Uso de cron y crontab
El comando GcronG permiten e3ecutar peri&dicamente una serie de tareas %ue estar(n pro#ramadas en
unos ficheros especiales.
,a planificaci&n de tareas para usuarios no se hace directamente sino pasando un fichero a GcrontabG
o edit(ndolo directamente con Gcrontab :eG. Esto #enerar( un fichero en /"ar/spool/cron/crontabs/
Para "erificar el contenido del fichero crontab de un usuario basta con usar Gcrontab :lG y para
eliminarlo Gcrontab :rG.
Poner siempre como m)nimo 0 minutos m(s al actual para probar ya %ue en caso contrario puede no
funcionar.
El formato consiste en una serie de lineas con el formato si#uiente:
minuto hora d)aOdelOmes mes d)aOdeOlaOsemana
Campo Jalores Permitidos
minuto C:KB
hora C:01
d)aOdelOmes /:1/
mes /:/0 o nombres
d)aOdeOlaOsemana C:M o nombres
C o M es Domin#o
,os nombres de meses y d)as de la semana dependen del idioma %ue se use ."ariable ,CO96;E2.
Puede probar con el comando GdateG para "er cuales se est(n usando en su sistema.
Dos "alores con un #ui&n en medio indica un ran#o de "alores %ue incluir)an los "alores e+tremos
indicados. *n asterisco .V2 e%ui"ale al ran#o de "alores %ue "an desde el primero al $ltimo. X se
pueden especificar una lista de elementos o de ran#os separ(ndolos por comas. Por e3emplo Q0C:
01C:1Q e%ui"ale a Q0C0/0001C/01Q
Como "eremos a continuaci&n hay una forma de a#rupar las acciones %ue se han de e3ecutar en el
mismo periodo.
A parte de las tareas peri&dicas %ue cada usuario pueda pro#ramarse usando Gcrontab :eG para sus
propias necesidades el sistema tendr( una serie de tareas pro#ramadas y estas se especifican en
/etc/crontab.
En el caso de Debian cron incluye no solo las tareas de /etc/crontab sino cada una de las tareas %ue
se incluya en los ficheros contenidos en el directorio /etc/cron.d
La utilidad run9parts.
En muchas distribuciones .y Debian es una de ellas2 las tareas %ue se han de e3ecutar en un mismo
momento se a#rupan en un $nico directorio para ser procesadas. En Debian estos directorios son
/etc/cron.daily cron.weeHly y cron.monthly.
De esta forma en crontab podemos indicar como acci&n run:parts directorio. ,a acci&n e+presada de
esa forma e3ecutar)a todos a%uellos scripts contenidos en ese directorio. 9odos estos scripts deber(n
comen'ar for'osamente por Wg/bin/interpreteOdeOcomandos.
De esta forma a=adir una nue"a acci&n resulta muy sencillo y no re%uiere tocar el fichero de
confi#uraci&n de cron /etc/crontab %ue normalmente se limita a contener la pro#ramaci&n de tareas
#en!ricas para ciertos periodos. Se "er( m(s claro con un e3emplo. El e3emplo %ue si#ue est(
tomado de una Debian:
W /etc/crontab: system:wide crontab
W *nliHe any other crontab you donGt ha"e to run the \crontabG
W command to install the new "ersion when you edit this file.
W 9his file also has a username field that none of the other crontabs do.
S7E,,@/bin/sh
PA97@/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
W .mon @ 1L @ ;iercolesSabado2
W m h dom mon dow user command
0K L V V V root test :e /usr/sbin/anacron >> run:parts ::report /etc/cron.daily
KC L V V M root test :e /usr/sbin/anacron >> run:parts ::report /etc/cron.weeHly
KK L / V V root test :e /usr/sbin/anacron >> run:parts ::report /etc/cron.monthly
W
Cada acci&n consiste en una comprobaci&n. Si no e+iste anacron %ue es un pro#rama %ue
e+plicaremos se#uidamente se e3ecutar(n los scripts contenidos en los respecti"os directorios. En
caso contrario no se hace nada ya %ue se asume %ue anacron se encar#ar( de ello.
5e1orar el comportamiento de cron con anacron.
El comando cron funciona muy bien en un sistema %ue funcione de modo ininterrumpido. Si un
sistema permanece un mes apa#ado y lo encendemos cron acti"ar( simult(neamente todas las
tareas pendientes. Estas se#uramente consistir(n en tareas diarias semanales y mensuales entre
otras. El comando GanacronG permite corre#ir los problemas cl(sicos %ue presenta el uso de GcronG en
sistemas %ue no est(n funcionando de forma continua. Para ello se establece en el fichero
/etc/anacrontab el periodo y el retraso para acti"ar las tareas peri&dicas.
Por e3emplo en Debian tenemos por defecto lo si#uiente en el fichero /etc/anacrontab:
W /etc/anacrontab: confi#uration file for anacron
W See anacron.R2 and anacrontab.K2 for details.
S7E,,@/bin/sh
PA97@/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
W 9hese replace cronGs entries
/ K cron.daily nice run:parts ::report /etc/cron.daily
M /C cron.weeHly nice run:parts ::report /etc/cron.weeHly
1C /K cron.monthly nice run:parts ::report /etc/cron.monthly
-ue suceder( usando todo esto en un sistema %ue arran%ue despu!s de un lar#o periodo de estar
apa#ado S Pues %ue a los K minutos arrancar( las tareas diarias a los /C las semanales caso de estar
pendientes y a los /K minutos las mensuales caso de estar pendientes. De esa forma el sistema
reparte en el tiempo la car#a de traba3o de forma escalonada.
*n caso pr(ctico. 9areas dos "eces por semana.
En el caso anterior podemos incluir una tarea para %ue se e3ecute una "e' cada siete d)as o una "e'
al d)a pero no disponemos de una pro#ramaci&n intermedia. Jamos a suponer el si#uiente
contenido en los directorios de tareas peri&dicos.
W ll /etc/cron.daily/
:rw+r:+r:+ / root root 01R mar /K /BBB man:db
rw+r:+r:+ / root root K/ sep /1 /BBB lo#rotate
rw+r:+r:+ / root root KB0 feb 0M 0CCC suidmana#er
rw+r:+r:+ / root root 00KB mar 1C 0CCC standard
rw+r:+r:+ / root root 1C1C abr 0B 0CCC apache
rw+r:+r:+ / root root A0M abr 1C 0CCC e+im
rw+r:+r:+ / root root /KM may /B 0CCC tete+:bin
rw+r:+r:+ / root root 1// may 0K 0CCC Canacron
rw+r:+r:+ / root root /CLK 3un R 0CCC sendmail
rw+r:+r:+ / root root AKC 3ul /R 0CCC calendar
rw+r:+r:+ / root root LLC ene B 0CC/ sysHlo#d
rw+r:+r:+ / root root ARK ene B 0CC/ netbase
rw+r:+r:+ / root root A/ ene B 0CC/ modutils
rw+r:+r:+ / root root KM feb 0B 0CCC htdi#
rw+r:+r:+ / root root 0MM ene B 0CC/ find
W ll /etc/cron.weeHly/
:rw+r:+r:+ / root root 0/C no" 0R /BBR man:db
rw+r:+r:+ / root root KAC no" 0 /BBB isdnutils
rw+r:+r:+ / root root 0/M ene B 0CCC lpr
rw+r:+r:+ / root root //L feb 0R 0CCC man0html
rw+r:+r:+ / root root /1C0 mar 00 0CCC c"s
rw+r:+r:+ / root root LK1 mar 01 0CCC dhelp
rw+r:+r:+ / root root 1/0 may 0K 0CCC Canacron
rw+r:+r:+ / root root MR/ ene B 0CC/ sysHlo#d
W ll /etc/cron.monthly/
:rw+r:+r:+ / root root /0B mar 1C 0CCC standard
rw+r:+r:+ / root root 1/1 may 0K 0CCC Canacron
6ma#inemos %ue Ghtdi#G y GfindG resultan para nosotros tareas e+cesi"amente pesadas para reali'arlas
diariamente pero tampoco deseamos de3ar pasar toda una semana sin e3ecutarlas.
,a soluci&n ser)a incluir una nue"a cate#or)a de tareas %ue se e3ecutar)an por e3emplo un par de
"eces por semana.
Para ello:
Crearemos un directorio %ue llamaremos por e3emplo /etc/cron.0OweeHly/.
;o"eremos los scripts Ghtdi#G y GfindG a ese directorio.
6ncluiremos en /etc/crontab una nue"a entrada para las tareas %ue han de e3ecutarse dos "eces por
semana y puesto %ue las tareas semanales est(n pro#ramadas para acti"arse los Domin#os usaremos
los ;i!rcoles y los S(bados a fin de %ue no coincidan y %ueden me3or repartidas en el tiempo
W /etc/crontab: system:wide crontab
W *nliHe any other crontab you donGt ha"e to run the \crontabG
W command to install the new "ersion when you edit this file.
W 9his file also has a username field that none of the other crontabs do.
S7E,,@/bin/sh
PA97@/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
W .mon @ 1L @ ;iercolesSabado2
W m h dom mon dow user command
0K L V V V root test :e /usr/sbin/anacron >> run:parts ::report /etc/cron.daily
AC L V V 1L root test :e /usr/sbin/anacron >> run:parts ::report /etc/cron.0OweeHly
KC L V V M root test :e /usr/sbin/anacron >> run:parts ::report /etc/cron.weeHly
KK L / V V root test :e /usr/sbin/anacron >> run:parts ::report /etc/cron.monthly
W
6ncluiremos en /etc/anacrontab una nue"a entrada
W /etc/anacrontab: confi#uration file for anacron
W See anacron.R2 and anacrontab.K2 for details.
S7E,,@/bin/sh
PA97@/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
W 9hese replace cronGs entries
/ K cron.daily nice :/B run:parts ::report /etc/cron.daily
1 /C cron.0OweeHly nice :/B run:parts ::report /etc/cron.0OweeHly
M /C cron.weeHly nice :/B run:parts ::report /etc/cron.weeHly
1C /K cron.monthly nice :/B run:parts ::report /etc/cron.monthly
X con ello ya tendr)amos modificada la planificaci&n tal y como la hemos descrito. A modo de
comprobaci&n podemos incluir al#$n script en los directorios de tareas peri&dicas para "er cuando
se e3ecutan.
En /etc/cron.daily/tra'a pondremos:
Wg/bin/sh
echo Qdaily \date\Q UU /"ar/lo#/tra'aOcron.lo#
En /etc/cron.weeHly/tra'a pondremos:
Wg/bin/sh
echo QweeHly \date\Q UU /"ar/lo#/tra'aOcron.lo#
En /etc/cron.0OweeHly/tra'a pondremos:
Wg/bin/sh
echo Q0OweeHly \date\Q UU /"ar/lo#/tra'aOcron.lo#
En /etc/cron.monthly/tra'a pondremos:
Wg/bin/sh
echo Qmonthly \date\Q UU /"ar/lo#/tra'aOcron.lo#
Pasados unos d)as comprobaremos /"ar/lo#/tra'aOcron.lo# %ue deber( mostrar la e3ecuci&n de cada
parte en los momentos adecuados. Se muestra la tra'a en un ordenador %ue suele encenderse unos
minutos antes de las R de la ma=ana todos los d)as.
daily 8ed No" 0R CR:CC:0A CE9 0CC/
0OweeHly 8ed No" 0R CR:/B:CB CE9 0CC/
daily 9hu No" 0B CM:AK:1R CE9 0CC/
daily Fri No" 1C CM:AR:0B CE9 0CC/
daily Sat Dec / CR:1C:K0 CE9 0CC/
0OweeHly Sat Dec / CR:AB:01 CE9 0CC/
daily Sun Dec 0 CM:1M:/1 CE9 0CC/
daily ;on Dec 1 CM:AL:AR CE9 0CC/
weeHly ;on Dec 1 CM:KC:0R CE9 0CC/
daily 9ue Dec A CM:K1:// CE9 0CC/
0OweeHly 9ue Dec A CR:/0:/B CE9 0CC/
daily 8ed Dec K CM:AK:AA CE9 0CC/
daily 9hu Dec L CR:0/:KR CE9 0CC/
2]. Introduccin a redes
Introduccin.
Este documento pretende aclarar los conceptos b(sicos relati"os a redes en #eneral y a redes ,inu+
en particular. De todos los protocolos e+istentes nos centraremos en el 9CP/6P.
El 9CP/6P es la familia de protocolos m(s ampliamente usada en todo el mundo. Ello es debido a
%ue es el protocolo usado por 6nternet .la red de redes2 y por %ue su uso esta muy e+tendido desde
hace mucho tiempo entre los sistemas de tipo *ni+. El !+ito de 6nternet ha contribuido de forma
decisi"a en su amplio uso en todo tipo de sistemas y redes.
Este cap)tulo le ayudar( a comprender los aspectos b(sicos de redes. Sin estos conocimientos
instalar y confi#urar una red aun%ue sea pe%ue=a resultar)a complicado por%ue e+iste mucha
terminolo#)a t!c#nica necesaria por%ue no siempre se pueden e+plicar todo con pocas y sencillas
palabras.
Eistoria.
En /BLB el departamento de Defensa de los Estados *nidos se "i& obli#ado a dar soluci&n a los
problemas de comunicaci&n electr&nica interna %ue usaban sistemas inform(ticos "ariados. Por ello
se encar#& al A4PA .A"anced 4esearch Pro3ects A#ency2 %ue desarrollara 3unto con las
principales uni"ersidades y fabricantes de e%uipos inform(ticos un protocolo estandar de
comunicaciones. Esto di& lu#ar a dos redes. *na de uso e+clusi"amente militar ;6,NE9 y otra con
fines e+perimentales de in"esti#aci&n A4PANE9 %ue en /BMC incorpora los protocolos 9CP/6P.
;6,Net se escindi& como tal en los a=os RC.
#opolo,0a.
,a topolo#)a de una red "iene a ser el aspecto f)sico %ue presentan los nodos de una red y su
intercone+i&n entre ellos. Por e3emplo si los nodos se conectan a una lar#a l)nea %ue constituyen el
medio de comunicaci&n %ue todos los nodos comparten por i#ual diremos %ue es una red en bus. Si
los nodos se or#ani'an conectandose e+clusi"amente a tra"!s de un #ran nodo central y con total
independecia entre los restantes nodos diremos %ue es una red en estrella. Si los nodos se conectan
or#ani'ando un c)rculo donde cada nodo solo tiene relaci&n directa con un nodo predecesor y uno
sucesor dentro del c)rculo diremos %ue es una red en anillo. En la pr(ctica cual%uier red se puede
conectar a otra ori#inando modelos mi+tos.

rotocolos de acceso a red.
A ba3o ni"el son necesarias una serie de re#las preestablecidas para poder intercambiar pa%uetes de
informaci&n. El uso de la palabra protocolo tambi!n se usar( cuando hablemos de otros ni"eles de
comunicaci&n y ello no debe confundirnos. .El ni"el %ue estamos tratando es el de acceso a red en
terminolo#)a 9CP/6P y a#rupa los ni"eles f)sico y de enlace de datos en terminolo#)a 5S6.2
$t7ernet.
Es una de las ar%uitecturas de red local m(s conocidas y populares. Cuando se habla de ethernet nos
referimos a una tecnolo#)a de enlace de datos. 5odelo OSI y #CII.
,os protocolos 9CP/6P se crearon y normali'aron en los RC es decir mucho antes de %ue se
definiera el modelo de referencia 5S6 de la 6S5 cuya ar%uitectura se impuso en los BC. ,os
#obiernos apoyaron desde un principio los estandares 5S6 %ue representa un modelo bien definido y
estructurado. Por todo ello se pens& %ue este modelo triunfar)a sobre el modelo 9CP/6P %ue en
realidad ni si%uiera representa un modelo $nico sino una familia de protocolos %ue se han ido
definiendo anar%uicamente y %ue a posteriori se han estructurado en capas. Al final lo %ue
realmente ha triunfado ha sido 6nternet %ue usa 9CP/6P. En el modelo 5S6 se describen
perfectamente siete distintos ni"eles. En el modelo 9CP/6P realmente no se describe una estructura
tan precisa de ni"eles como en el modelo 5S6 aun%ue se pueden asimilar y comparar ambos
modelos de la forma si#uiente.
Cuando nos referimos a topolo#)a nos referimos a un ni"el totalmente f)sico y cuando nos referimos
a protocolos de transmisi&n de datos nos referinos a un ni"el totalmente l&#ico %ue establece las
re#las de comunicaci&n.
En teor)a la 9opolo#)a de una red no determina su protocolo de transmisi&n de datos y
efecti"amente son posibles casi cual%uier combinaci&n de topolo#)a y de protocolo pero en la
pr(ctica cada topolo#i( suele usarse preferentemente con unos determinados protocolos por%ue
nacen de un dise=o con3unto. Pondremos unos pocos e3emplos de protocolos de transmisi&n de
datos y se=alaremos en %ue topolo#)a suelen usarse con mayor frecuencia:
Csma .Carrier Sense ;ultiple Access2
,as estaciones comparten un mismo canal y %uedan a la escucha respondiendo unicamente
cuando un mensa3e "a diri3ido a ellos. Esto se detecta #racias a una direcci&n $nica %ue
consiste en n$meros de L bytes asociados a cada tar3eta de red #rabado #eneralmente por el
fabricante. Es decir una colisi&n se produce cuando la identificaci&n ;AC del receptor %ue
"a en la trama de un mensa3e coincide con la direcci&n f)sica del adaptador de red :unica
para cada tar3eta:. En el caso de %ue dos puestos intenten usar simultaneamente el canal para
transmitir los mensa3es transmitidos en forma de impulsos electricos sufrir(n distorsiones y
la informaci&n de la se=al se pierde. A este fen&meno se le llama colisi&n. En la practica
ser( necesario retransmitir los pa%uetes colisionados.
.Feneralmente este m!todo se asocia a topolo#)a en bus2.
Csma/CD .Carrier Sense ;ultiple Acces Colision Detect
Es una "ariaci&n de la anterior %ue minimi'a la probabilidad de colisi&n detectando antes de
emitir si el bus est( en uso pero esto no impide totalmente %ue se produ'can colisiones. 7ay
otras "ariaciones basadas en Csma siempre intentando minimi'ar las colisiones.
.Feneralmente se asocia a topolo#)a en bus2.
Pollin# .,lamada selecti"a2
E+iste un nodo central %ue establece el turno de cada nodo. Para ello hace una llamada
selecti"a %ue solo ser( recibida por el nodo pertinente.
.Feneralmente se asocia a topolo#)a en estrella2.
9oHen Passin# .Paso de testi#o2
Esta tecnolo#)a consiste en %ue cada puesto "a pasando un mensa3e %ue hace el mismo papel
%ue un testi#o en una carrera de rele"os. *nicamente el nodo %ue tiene el testi#o puede
en"iar el mensa3e y #eneralmente los mensa3es pasan al nodo si#uiente si#uiendo todos ellos
una secuencia circular aun%ue hay "ariaciones de este modelo. Cuando el mensa3e ori#inal
"uel"e al nodo %ue lo ori#in& este lo elimina de la circulaci&n del anillo. Se trata de un
modelo muy estricto %ue ofrece un alt)simo #rado de control. No e+iste posibilidades
aleatorias como en el caso de las colisiones del modelo Csma. El paso de testi#o permide
conocer con total se#uridad cual es el tiempo %ue se in"ertir( en hacer %ue un mensa3e
alcance su destino y permite %ue el uso intensi"o de la red no afecte a su funcionamiento.
.Feneralmente se asocia a topolo#)a en anillo2.
Ethernet fu! desarrollada por [ero+ en los laboratorios de Palo Alto en California. *tili'aron el
protocolo CS;A/CD y los nodos de la red conectados mediande cable coa+ial usaban direcciones
de AR bits. Estas caracter)stica permit)an reor#ani'ar la red sin tener %ue efectuar cambios en el S5
lo cual tiene mucho %ue "er con su en&rme !+ito en la actualidad.
Considerando las des"enta3as de CS;A/CD se comprende %ue esta forma de funcionar ofre'ca
dificultades cuando en el canal de comunicaci&n se produce un uso intensi"o. ,as ine"itables
colisiones se traducen en una perdida de rendimiento en situaciones de sobre car#a de la red. En la
pr(ctica la mayor)a de los nodos de una #ran red intercambian informaci&n entre ellos de forma
ocasional y las redes se di"iden en subredes para minimi'ar colisiones de mensa3es. El modelo de la
ar%uitectura Ethernet es ante todo muy fle+ible y facilita la creaci&n y #esti&n de redes de redes
muy #randes sin #randes problemas.
En la actualidad hay una amplia "ariedad de formas de interconectar m(%uinas en una ,AN. 6ncluso
se pueden utili'ar los puertos serie o paralelo para ello pero lo m(s frecuente es usar Ethernet. *na
tar3eta a /C ;b/s ./C ;e#abits por se#undo2 cuesta solo unas KCCC Ptas .1C Euros2 y el cable cuesta
unas 1CC Ptas/metro .0 Euros/metro2. Por lo tanto montar una pe%ue=a red casera no supone mucho
#asto. Se puede usar cable coa+ial #eneralmente ne#ro %ue se terminan en los e+tremos mediante
terminadores especiales y admiten enlaces en forma de 9 para conectar tantos puestos como sea
necesario sin tener %ue ad%uirir un ,hub,.
*n ,hub, es un dispositi"o concentrador %ue dispone de "arias bocas de cone+i&n. 4esultar(
imprescindible su uso cuando se usa en una red de m(s de dos ordenadores con cable /Cbase0. Este
cable tiene conectores de pl(stico 4dAK similares a los conectores de los tel!fonos.
Con este cable se puede prescindir de ,hub, solo en el caso de interconectar dos ordenadores y para
ello el cable ha de ser especial ya %ue la posici&n de al#unos de los R pines %ue tiene el conector
4dAK debar(n ir cru'ados. Concretamente el pin / .cable blanco naran3a2 se ha de cru'ar con el pin
1 .cable blanco "erde2 y el pin 0 .cable naran3a2 se ha de cru'ar con el pin L .cable "erde2.
,as tar3etas a /CC ;b/s tampoco son muy caras y son die' "eces m(s r(pidas. Cuestan unas /0.CCC
Ptas .M0 Euros2. 7ay tar3etas %ue puede funcionar tanto a /CC como a /C ;b/s pero en una red no
pueden me'clarse tar3etas funcionando a distintas "elocidades.

En todos estos ni"eles podemos hablar de sus respecti"os procolos de comunicaci&n. El t!rmino
protocolo indica un con3unto de re#las perfectamente establecidas %ue permiten y #aranti'an el
intercambio de informaci&n. En cada ni"el del modelo la comunicaci&n tiene su propio protocolo y
su propio cometido.
,os protocolos 9CP est(n orientados a cone+i&n con lo %ue se podr)a hablar de sesi&n asimilandose
al ni"el K 5S6 pero *DP no est( orientado a cone+i&n y por ello no se puede hablar propiamente de
sesi&n. ,as corespondencias de ni"eles entre 5S6 y 9CP/6P no son perfectas.
9CP est( orientado a cone+i&n. En una primera fase se establece cone+i&n y con ello se mantiene
una sesi&n de traba3o %ue finali'ar( con un cierre. *DP utili'a data#ramas. Es decir %ue en lu#ar de
abrir una cone+i&n con el destino para establecer un dialo#o funciona simplemente en"iando a la
red fra#mentos de informaci&n denominados data#ramas. F9P 799P S;9P y 9E,NE9 son
ser"icios muy populares y son un buen e3emplo de protocolos orientados a cone+i&n. S;NP y NFS
son e3emplos de ser"icios orientados a data#ramas. ;(s adelante ampliaremos todo esto hablando
del ;odelo Cliente/Ser"idor
El ni"el 9CP y el ni"el *DP dele#an en el ni"el 6P la transmisi&n de la informaci&n pero no asumen
%ue 6P ten#a !+ito. Es decir super"isan la transmisi&n y se ocupan de reen"iar los pa%uetes en caso
necesario.
El ni"el de 6P #estiona la direcci&n del mensa3e para %ue alcance su nodo destino. El protocolo 6P se
puede asimilar al ni"el 1 5S6. En este ni"el e+isten tambi!n los protocolos si#uientes: 6C;P
.6nternet Control ;essa#e Protocol2 A4P .Address 4esolution Protocol2 4A4P .4e"erse Address
4esolution Protocol2.
E+isten unas p(#inas del manual online %ue est(n traducidas %ue e+plican un poco todo esto. ip.M2
udp.M2 tcp.M2 socHet.M2.
En el ni"el / 5S6 llamado ni"el f)sico se definen como son los cables los conectores los ni"eles
electricos de las se=ales la topolo#)a etc. Pero en el modelo 9CP/6P los ni"eles / y 0 %uedan
asimilados a un $nico ni"el de interfa' hardware %ue pasamos a describir. 9ampoco a%u) la
correspondencia de ni"eles es perfecta ya %ue en en ni"el de 6nterfa' no se definen cables ni
conectores etc.
A diferencia de otros S5 tipo *ni+ en ,inu+ no se usan disposi"os especiales tipo /de"/... sino %ue
se crean interfaces din(micamente mediante ifconfi#.
En el n$cleo de ,inu+ se pueden incluir distintos tipos de interfaces o controladores. Al#unos de
ellos son:
lo
6nterfa' de bucle local .loopbacH2. Se utili'a para pruebas aun%ue al#una aplicaci&n puede
necesitarla i#ualmente. No tiene sentido tener m(s de un interfa' de este tipo.
eth
Es la interfa' #en!rica para tar3etas Ethernet de uso muy frecuente.
sl
6nterfa' S,6P para puerto serie. ;ontar una red mediante un puerto serie es poco eficiente
pero la posibilidad e+iste.
ppp
6nterfa' PPP para modem.
ippp
6nterfa' 6PPP para 6SDN .4DS62.
plip
6nterfa' P,6P para puerto paralelo. ;ontar una red mediante un puerto paralelo es poco
eficiente pero la posibilidad e+iste.
Para cada uno de estos controladores se re%uiere la correspondiente opci&n en en n$cleo de ,inu+.
5odelo ClienteIServidor
Cada ser"icio se instala asociado a un puerto y #eneralmente se usan los ser"icios m(s comunes en
puertos pre"iamente establecidos y uni"ersalmente conocidos. Cada ser"icio ha de tener un puerto
distinto pero los ser"icios 9CP y los *DP no entran en conflicto al usar el mismo puerto. $l
inter.az de llamada .
Para conectar a internet primero su modem telefonear( a su Pro"eedor de Ser"icios de 6nternet
.6SP2 y para establecer cone+i&n se ne#ocia la forma de en"iar y recibir pa%uetes por la l)nea en
funci&n de las capacidades de ambos e+tremos. Es decir %ue tienen %ue ponerse de acuerdo en la
"elocidad a usar forma de compresi&n de los datos y m(s cosas. Para ello a pppd o en su caso a
ipppd .el se#undo es para 4DS62 hay %ue pasarle al#unos par(metros en forma de ar#umentos en la
l)nea de comandos o bien a tra"!s de un fichero de confi#uraci&n ./etc/ppp/options2 y con estos
datos la ne#ociaci&n se hace de forma autom(tica y transparente. 9ambi!n se solicita la
identificaci&n del usuario %ue ha reali'ado la llamada. A no ser %ue contrate la obtenci&n de una
direcci&n 6P fi3a y reser"ada para usted obtendr( en cada cone+i&n una direcci&n 6P distinta. A la
primera se la llama tambi!n direcci&n 6P est(tica por%ue es siempre la m)sma y a la se#unda
direcci&n 6P din(mica. De todos estos detalles se ocupa el protocolo PPP .Point:to:Point Protocol2
,os ser"icios en #eneral .no solos los ser"icios de red2 se pueden confi#urar en los S5 tipo *ni+ de
dos formas distintas.
;odo Standalone: En este modo para %ue el ser"icio est! acti"o el ser"idor deber( estar
permanentemente arrancado y escuchando su puerto para poder atender cual%uier petici&n
de ser"icio.
;odo supeditado al ser"idor de ser"icios inetd:
En este modo los ser"idores estar(n parados y ser( inetd.R2 %uien estar( permanentemente
arrancado y a la escucha en todos los puertos. Para ello usar( el fichero /etc/ser"ices %ue
determina %ue puertos tiene %ue escuchar y %ue ser"icios est(n asociados a cada puerto. De
esta forma en caso necesario arrancar( un ser"idor de un ser"icio concreto cuando detecte
una petici&n de ser"icio en su puerto asociado. ;ire el contenido de /etc/ser"ices para saber
como est( confi#urado su inetd. Jease ser"ices.K2.
En su sistema probalmente tendr( simultaneamente ser"icios acti"os en modo Standalone y otros
supeditados mediante inetd. Esto depende del tipo de ser"icio y del tipo de uso %ue ten#a. Est( claro
%ue un ser"icio utili'ado de forma espor(dica no es bueno tenerlo permanentemente arrancado
consumiendo recursos mientras permanece inacti"o la mayor parte del tiempo. Por el contrario un
ser"icio %ue recibe un aut!ntico bombardeo de peticiones de ser"icios no es bueno %ue ten#a %ue
arrancar y parar a cada petici&n.
Si detiene el ser"idor de inetd de3ar( a todos los ser"icios supeditados sin posibilidad de acti"arse.
,os ser"icios se pueden asociar a puertos distintos de a%uellos %ue por con"enio se suelen usar pero
si usa un ser"icio en un puerto distinto del preestablecido los clientes de ese ser"icio no podr(n
usarlo a no ser %ue antes a"eri#uen el puerto.
,as redes en ,inu+ utili'an por lo tanto son capaces de usar ser"icios si#uiendo el modelo
cliente/ser"idor mediante el cual uno de los procesos es capa' de aceptar determinado tipo de
peticiones y #enerar determinado tipo de respuestas de acuerdo un protocolo preestablecido %ue
establece las re#las de comunicaci&n entre ambos. *n ser"idor y un cliente son por tanto procesos
independientes %ue #eneralmente aun%ue no necesariamente residiran en ma%uinas distintas.
Sustituir a un pro#rama cliente %ue habla usando el protocolo S;9P con un ser"idor o a un
pro#rama cliente %ue habla P5P1 con un ser"idor es muy facil. S;9P usa el puerto 0K y P5P1 usa
el puerto //C. Si nos conectamos por telnet a un ser"idor usando al#uno de estos puertos se iniciar(
una con"ersaci&n de acuerto al protocolo y de esta forma mediante telnet podremos en"iar correo
mediante S;9P o ba3ar correo por P5P1 o borrar un m!nsa3e en nuestro ser"idor de correo etc.
<asta para ello conocer el protocolo %ue en estos dos caso se limita a un reducido n$mero de
comandos sencillos.
Si su m(%uina tiene acti"o el ser"icio de S;9P puede probar lo si#uiente.
telnet /0M.C.C./ 0K
7E,P
7E,5 /0M.C.C./
-*69
,o %ue acaba de hacer es dialo#ar en S;9P con su ser"idor local de S;9P asociado al puerto 0K.
Esto es aplicable a muchos otros ser"icios.
El acceso a un 6SP mediante modem merecer)a un cap)tulo entero pero suponemos %ue con lo
e+plicado ya habr( comprendido %ue funciona como un interfa' de red ppp en su sistema en el cual
pueden e+istir como ya hemos mencionado otros interfaces.
*na "e' lo#rada la cone+i&n dispondr( de un interfa' de red %ue le dar( acceso a internet. Para
comprobar si tiene cone+i&n pruebe a hacer pin# a un ser"idor conocido.
pin# www.alta"ista.com
2^. rotocolos #CII
Introduccin.
Este cap)tulo es en realidad una se#unda parte del anterior en el cual ya se comentaron al#unas
cosas. Se di3o %ue el protocolo 9CP/6P es uno de los protocolos mas ampliamente usados en todo el
mundo y por esta ra'&n merece la pena profundi'ar en este protocolo en particular.
5S6 y 9CP/6P son pilas de protocolos distintos y el intento bien intencionado %ue se hi'o el el
cap)tulo anterior solo era una t apro+imaci&n necesariamente imprecisa de ambos modelos
dificilmente comparables. En el caso de 9CP/6P es me3or utili'ar 5S6 s&lo como modelo de
referencia te&rico y estudiar en profundidad el "erdadero modelo 9CP/6P %ue es lo %ue haremos
ahora.
Este cap)tulo contiene fra#mentos de un anterior traba3o en el cual particip& ,uis Colorado *rcola y
por ello apro"echo para a#radecer su aportaci&n. .En la actualidad descono'co su direcci&n de
correo electr&nico2 Con"iene aclarar una serie de conceptos y empe'aremos por e+plicar %ue es una
direcci&n 6P.
/irecciones ip:
El principal beneficio de 6P es %ue es capa' de con"ertir un con3unto de redes f)sicamente distintas
en una sola red aparentemente homo#!nea. *na internet es una red 6P aparentemente homo#!nea.
,a 6nternet .con may$scula2 es la red de redes. En realidad solo es una internet muy #rande y %ue se
e+itende por todo el planeta. ,a caracter)stica de cual%uier internet es %ue cada uno de los nodos
tiene una direcci&n 6P $nica y distinta a la de cual%uier otro nodo. ,as direcciones 6P son cadenas
de treinta y dos bits or#ani'adas como una secuencia de cuatro bytes. 9odas las tramas .pa%uetes2
6P lle"an una direcci&n de ori#en .donde se ori#ino la trama2 y una direcci&n destino .a donde "a la
misma2. <(sicamente esto es todo lo %ue hay %ue saber cuando se conecta uno a la red y la
direcci&n 6P te la asi#na un administrador de red. Clases de redes
E+isten K tipos de direcciones 6P. A cada tipo se le asi#na una letra asi e+isten direcciones de
clases A < C D E. ,as direcciones pertenecen a estas clases en funci&n de los cuatro bits m(s
si#nificati"os del primer byte.
Estas direcciones tienen una representaci&n como cuatro numeros enteros separados por puntos y en
notacion decimal. ,as direcciones representan el interface de cone+i&n de un e%uipo con la red. Asi
un host %ue est( conectado a "arias redes como re#la #eneral no tendr( una $nica direcci&n de red
sino "arias .normalmente una por cada red a la %ue esta conectado2. Pero internamente Esto no es
del todo cierto. ,as direcciones 6P se di"iden en dos partes .cada una con un cierto numero de bits2
cuyo si#nificado tiene %ue "er con el sistema de enrutado de tramas. ,a primera parte .cuya
lon#itud no es fi3a y depende de una serie de factores2 representa la red y debe ser i#ual para todos
los hosts %ue esten conectados a una misma red f)sica. ,a se#unda parte representa el host y debe
ser diferente para todos los hosts %ue estan conectados a la misma red f)sica.
El mecanismo de decisi&n de 6P %ue hace %ue todas las tramas lle#uen a su destino es el si#uiente:
Cuando la direcci&n ori#en y la direcci&n destino estan ambas en la misma red .esto se sabe por %ue
su direcci&n de red es i#ual en ambas la direcci&n de red ser( la consecuencia de sustituir por ceros
toda la parte de host en la direcci&n considerada2 6P supone %ue e+iste un mecanismo de ni"el
inferior .en este caso Ethernet 9oHen 4in# etc.2 %ue sabe como hacer lle#ar la trama hasta el host
destino. Cuando la direcci&nn de red ori#en y la de destino no coinciden entonces hay %ue enrutar.
Para enrutar se dispone de una tabla %ue contiene entradas para cada una de las redes a las %ue se
%uieren hacer lle#ar tramas %ue no sean locales a este host .un host en #eneral esta conectado a
"arias redes de las %ue hace de #ateway .pasarela2 si la direcci&n destino de la trama tiene una
direcci&n de red %ue coincide con al#una de las direcciones de red propias:::las %ue resultan de
sustituir por ceros la parte de host en cada uno de los interfaces::: entonces no hace falta enrutar2.
Esta tabla tiene m(s o menos entradas en funci&n de la comple3idad de una internet .o red de redes2
y la direcci&n del si#uiente host en el camino hasta la red de destino.
Por otro lado la parte %ue corresponde a red y la parte %ue corresponde al host se reali'a usando
este modelo .sal"o para el subnettin# %ue a=ade al#o de comple3idad2.
Clase !
M <its red ? 0A bits host
Cnnnnnn
n
hhhhhhh
h
hhhhhhh
h
hhhhhhh
h
Clase Z
/A bits red ? /L bits
host
/Cnnnnn
n
nnnnnnn
n
hhhhhhh
h
hhhhhhh
h
Clase C
0/ bits red ? R bits host
//Cnnnn
n
nnnnnnn
n
nnnnnnn
n
hhhhhhh
h
Clase /
.multicastin#2
///C+++
+
+++++++
+
+++++++
+
+++++++
+
Clase $
.reser"adas2
////+++
+
+++++++
+
+++++++
+
+++++++
+
,a n representa la parte de red de la direcci&n y 7 la parte de host. x tiene otro tratamiento.
,as clases D y E no participan en el sistema de enrutado 6P y no las comentaremos .las direcciones
de clase D se usan en multicastin# y las direcciones de clase E estan reser"adas por ello no deben
usarse para confi#urar hosts en internet2
.Como se puede "er hay muy pocas redes de clase A %ue permiten tener muchos hosts por e3emplo
:::6nfoJ)a .;uchas redes de clase C para po%uitos hosts2:::,os centros pro"eedores de 6nternet_ y
un ran#o intermedio para redes %ue ten#an ambos re%uisitos2. Por otro lado las redes de clase A
tienen el primer byte como parte de red y los tres restantes como parte de host las redes de clase <
tienen los dos primeros bytes como parte de red y los dos $ltimos como parte de host y las redes de
clase C tienen como parte de red los tres primeros bytes y como parte de host el $ltimo.
As) puesto en notaci&n punto las redes de las distintas clases cubren los si#uientes ran#os de
direcciones:
clase A de la /.C.C.C ::U /0M.0KK.0KK.0KK
clase < de la /0R.C.C.C ::U /B/.0KK.0KK.0KK
clase C de la /B0.C.C.C ::U 001.0KK.0KK.0KK
$1emplo de una pe*ueOa red.
Jamos a e+plicar como construiriamos por e3emplo tres redes pe%ue=as interconectadas entre s) y
%ue direcciones podriamos usar para ello. De esta forma podremos e+plicar como funciona el
enrutado.
*saremos un e3emplo sencillo para e+plicar esto. E+isten una serie de direcciones especialmente
reser"adas para usos pri"ados. Es decir no se usaran en una red p$blica de internet.
Direcciones reser"adas para la clase A /C.C.C.C
Direcciones reser"adas para la clase < /M0./L.C.C ::U /M0.1/.C.C
Direcciones reser"adas para la clase C
/B0./LR.C.C
::U /B0./LR.0KK.C
Para nuestro e3emplo usaremos tres redes de clase < de tipo /M0.00.n.n. En todas las redes
.incluidas las %ue tienen subnettin#2 e+isten dos direcciones de host %ue est(n reser"adas. ,a
primera es la %ue tiene todos los bits correspondientes a la parte de host a cero. Esta direcci&n se
utili'a para representar a la propia red y por tanto no se debe asi#nar a nin#un host. ,a otra es la %ue
tiene todos los bits puestos a uno y representa a todos los hosts %ue estan conectados a una misma
red. En redes donde se permite el broadcast .donde un host puede hacer %ue todos reciban el
mensa3e %ue ha en"iado2 esta direcci&n se utili'a para este fin. Estas direcciones se llaman
direcciones de red y de broadcast respecti"amente. 9ambi!n est( reser"ada la direcci&n 6P %ue tiene
todos los bits a cero en la parte de red para indicar esta red aun%ue esta solo est(_ permitido usarla
cuando aun no conocemos nuestra direcci&n 6P completamente .por e3emplo cuando hay %ue
ad%uirirla por la propia red en el arran%ue al confi#urar etc.2

,a confi#uraci&n de los puestos A < C D ser)a la si#uiente:
A < C D
6P.AD4 /M0.00.00.0/ /M0.00.00.00 /M0.00.01.0/ /M0.00.01.00
N.;ASE 0KK.0KK.0KK.C 0KK.0KK.0KK.C 0KK.0KK.0KK.C 0KK.0KK.0KK.C
<45ADE C.C.C.0KK C.C.C.0KK C.C.C.0KK C.C.C.0KK
NE984E /M0.00.00.C /M0.00.00.C /M0.00.01.C /M0.00.01.C
7ay dos #ateways con dos direcciones cada uno y su confi#urac)on ser)a:
F8/ F80
6P.Addr /M0.00.00.0//M0.00.0/.0 /M0.00.01.///M0.00.0/./
N.;asH 0KK.0KK.0KK.C.ambas2 0KK.0KK.0KK.C.ambas2
<roadc /M0.00.00.0KK//M0.00.0/.0KK /M0.00.01.0KK//M0.00.0/.0KK
NetAddr /M0.00.00.C//M0.00.0/.C /M0.00.01.C//M0.00.0/.C
Se#$n lo %ue hemos e+plicado la red /M0.00.C.C es una red clase < y por tanto su m(scara por
defecto es la 0KK.0KK.C.C. En el e3emplo est( subneteada con m(scara 0KK.0KK.0KK.C y dado %ue
esta m(scara no es la m(scara por defecto la red ha de indicarse por su direcci&n 6P se#uida de su
m(scara. Estas tres redes por tanto son:
/M0.00.00.C / 0KK.0KK.0KK.C
/M0.00.01.C / 0KK.0KK.0KK.C
/M0.00.0/.C / 0KK.0KK.0KK.C
53scaras de red
,a red del e3emplo est( formada por tres subredes de la red de clase < /M0.00.C.C con m(scaras
0KK.0KK.0KK.C .o sea consideradas como o si la red /M0.00.C.C se hubiera subneteado2
,a m(scara de red no es m(s %ue una direcci&n 6P donde se ha sustituido todos los bits de la parte
de red de la direcci&n por unos y los bits correspondientes a la parte de host por ceros. As) la
m(scara de red de una red de clase A ser( 0KK.C.C.C la de una red de clase < ser( 0KK.0KK.C.C y la
de una clase C ser( 0KK.0KK.0KK.C.
Por %ue se usa entonces la m(scara de red si est( implicita en el tipo de direccionS
Se ha comprobado %ue a "eces el sistema de clases no es apropiado. A un pro"eedor le dan una
clase C completa pero el %uiere di"idirla en cuatro redes diferentes y no "a a usar cuatro clases C
para esto /CCC direcciones 6P por%ue se mal#astar)an muchas. Pues bien dentro de una misma red
se puede e+tender el mecanismo de routin# considerando %ue la parte de host son los bits cero y la
parte de red son los bits uno de la m(scara y asociando a cada direcci&n 6P una m(scara en el
momento de confi#urarla .por supuesto los "alores por defecto ser(n los de la clase de la red
aun%ue se podr(n a=adir y solamente a=adir bits uno a la m(scara con el fin de subnetearla.
En el caso del e3emplo de este parrafo el pro"eedor podr)a e+tender la m(scara de subred dos bits
m(s all( de la frontera impuesta por el tipo de la direcci&n ad%uirida y considerar %ue tiene cuatro
redes .en este caso la parte de red ser)an los primeros tres bytes y dos bits del cuarto y la parte del
host los restantes2.
#ablas de rutas
Por e3emplo partiendo de la red 0/.C para ir a la 01.C habr)a %ue usar el F8/ y para ir de la 01.C a
la 00.C habr)a %ue usar F8/ y F80.
Pero como se indica la ruta a tomar para cada destino S
Para ello se usan las tablas de rutas y para construirlas formaremos para cada m(%uina una tabla
con la forma de diri#ir las tramas hacia las redes %ue no "emos directamente con la "enta3a
adicional de %ue como la direcci&n C.C.C.C representa ob"iamente la red local podemos usar esta
direcci&n especial para indicar la ruta por defecto .es decir la direcci&n local a la %ue en"iar las
tramas %ue no tienen ruta y %ue necesariamente hay %ue enrutar2. As) las tablas de rutas %uedaran:
7ost A: C.C.C.C.default2 :::U /M0.00.00.0
7ost <: C.C.C.C.default2 :::U /M0.00.00.0
7ost C: C.C.C.C.default2 :::U /M0.00.01./
7ost D: C.C.C.C.default2 :::U /M0.00.01./
F8/: /M0.00.00.C :::U /M0.00.0/.0
F80: /M0.00.01.C :::U /M0.00.0/./
Si nos fi3amos podemos "er %ue la ruta por defecto es el #ateway por defecto %ue aparece en la
confi#uraci&n de muchas m(%uinas ,inu+ pero para los #ateways no aparece nin#un #ateway por
defecto. Esto es una caracter)stica de las redes %ue tienen bacHbones.
ZacPbon
,iteralmente bacHbone si#nifica columna "ertebral. ,as tramas se canali'an hacia el bacHbone
pero este al final debe decidir a donde "an a parar las tramas. Como conclusi&n de esta $ltima frase
se desprende %ue en todo bacHbone .red de ni"el 3er(r%uico superior donde no hay nin#una red mas
importante. p.e3. el bacHbone de 6nternet o la red principal de una empresa %ue no tiene cone+iones
con el e+terior2 los #ateways %ue forman el bacHbone deben tener rutas a todas las redes y no
aparecer una ruta por defecto en sus tablas de rutas mientras %ue para el resto de las redes la ruta
por defecto .y para los hosts2 ser( siempre la %ue lle"e hacia el bacHbon.
Con.i,uracin de un puesto
*na "e' comprendidos los conceptos pasemos a calcular las direcciones. Con la direcci&n 6P y la
m(scara de red se pueden obtener las dem(s. 9omando como e3emplo el nodo A obser"amos %ue se
cumplen las si#uientes relaciones l&#icas usando los operadores l&#icos .AND N59 y 542 sobre
los bits %ue los componen: Criterios para subnetear una red
Jamos a comentar los criterios %ue se pueden tener en cuenta a la hora de decidir subnetear una
#ran red en "arias m(s pe%ue=as. Servidores de 'ombres.
,as direcciones 6P son muy adecuadas para las m(%uinas pero son dificiles de recordar. Por esta
ra'&n se usan nombres de dominios. Adem(s usando solo una direcci&n 6P sin nombre tendr)amos
%ue cambiar de direcci&n cada "e' %ue nos alo3emos en un ser"idor distinto. Si asimilamos una
direcci&n a un nombre podemos mantener nuestra presencia en internet cambiando de ser"idor sin
%ue apenas se note el cambio. En la pr(ctica el cambio no sucede instantaneamente por%ue tiene %ue
propa#arse la informaci&n del cambio de nombre en #ran parte de la red. $structura de pa*uetes.
,os pa%uetes o tramas son secuencias de bits %ue contienen no solo los datos con informaci&n de
usuario sino datos de cabecera y de cola %ue se estructuran de forma %ue los ni"eles inferiores de
transmisi&n de datos "an encapsulando a los ni"eles superiores. Para formar un pa%uete *DP habr)a
%ue en"ol"erlo de la forma si#uiente.
;(scara
de 4ed
0KK.0KK.0KK.CCC
Direcci&n
6P
/M0.C00.C00.C0/
!'/
Direcci&n
de 4ed
/M0.C00.C00.CCC
'O# .;(s:
cara de 4ed2
CCC.CCC.CCC.0KK
Direcci&n
de 4ed
/M0.C00.C00.C0/
O"
Direcci&n
de <roadcast
/M0.C00.C00.CCC
5bser"e %ue con la direcci&n 6P y la m(scara de red se puede deducir las restantes direcciones. Por
lo tanto si tiene %ue conectarse a una red local bastar( con pre#untar al administrador de la misma
esos dos $nicos datos.
Subnetear una red no sir"e unicamente a criterios topol&#icos relacionados con la instalaci&n f)sica
de la red. Est( claro %ue la redes topol&#icamente distintas o %ue usen diferentes protocolos de
transmisi&n deber)an tener direcciones distintas para no me'clar artificialmente cosas distintas pero
tambi!n se puede di"idir una #ran red en "arias por otros moti"os. Por e3emplo para facilitar la
administraci&n de la red dele#ando a cada administrador la #esti&n de direcciones de una subred.
-ui'(s las estructura de una empresa aconse3e separar redes disintas para distintos departamentos
por e3emplo. Es decir las subredes pueden facilitar la adaptaci&n de la red a la estructura de una
or#ani'aci&n. 9ambi!n pueden ser"ir para aislar redes con tr(fico interno abundante y facilitar el
dia#n&stico de problemas en la red.
En tehor)a se puede di"idir una sola red f)sica en "arias l&#icas pero si la separaci&n f)sica fuera
posible con"iene hacerla uniendolas con un #ateway por%ue aumentaremos el ancho de banda total
en la red. 7ay %ue tener en cuenta %ue una red ethernet es un bus con aceso Csma/CD y por lo tanto
en un instante de tiempo dado "arios puestos pueden escuchar simultaneamente pero nunca pueden
hablar dos usando el mismo bus a la "e' por%ue ori#ina la colisi&n de los pa%uetes y estos deber(n
ser reen"iados de forma no simult(nea.
,os t!rminos Pasarelas .Fateways2 4outers .4outers2 y Puentes .<rid#es2 se refieren a una serie de
dispositi"os para interconectar redes. ;uchas "eces estos dispositi"os son un PC con un par de
tar3etas de comunicaciones para conectarse simultaneamente a dos redes funcionando con un
software apropiado. *n puente conecta dos redes parecidas .por e3emplo pueden ser distintas en su
"elocidad2 sin cambiar la estructura de los mensa3es %ue circulan por ellas. *n 4outer conecta dos
redes %ue son i#uales .o parecidas2. No hay traducci&n de un protocolo a otro pero si traducci&n de
direcciones. *na pasarela puede conectar redes distintas .por e3emplo una ethernet y una toHen rin#2
reali'a la con"ersi&n de protocolos y la traducci&n de direcciones. Si recordamos los modelos 5S6 y
9CP/6P e+plicados anteriormente "emos %ue en los distintos dispositi"os mencionados actuar)an a
distinto ni"el del modelo de comunicaciones.
Puesto %ue un router incluye la funci&n de puente y la pasarela en#loba las funciones de router y de
puente. Por%ue entonces no se usa siempre una pasarela .#ateway2S
Cuando todos los nodos de una red deben alcan'ar todos los nodos de otra red se pro"oca una sobre
car#a de la red debido a los protocolos de rutado. En este caso y cuando ambas redes utili'en el
mismo protocolo de red la me3or solucion es un puente.
E+iste otro tipo de dispositi"o %ue sir"e para conectar dos redes y %ue se llama Firewall. Se trata de
un dispositi"o l&#ico %ue sir"e para conectar de forma se#ura la parte pri"ada de una red con la
parte p$blica. Estos dispositi"os pueden establecer una pol)tica de restricciones a la informaci&n
%ue circula por ellos.
Para determinar una ruta como la mas idonea se utili'a el si#uiente criterio. El protocolo de
informaci&n de rutado .46P2 es un protocolo %ue est( basado unicamente en el coste.
A cada ruta se le asocia un coste en funci&n del rendimiento de la red tipo de la linea etc. Esto
permite determinar de entre "arias rutas posibles cual es la de menor coste.
Cada router de una red en")a y recibe informaci&n de rutado %ue permite actuali'ar las tablas de
rutado cada 1C se#undos. Cuando el coste de una ruta supera el "alor /L el sistema se considera
fuera de alcance. ,a caida de un nodo de la red suele pro"ocar la perdida de al#unos mensa3es hasta
%ue las tablas de rutado de todos los routers se rea3ustan.
Para una red pe%ue=a nos bastar)a usar un fichero /etc/hosts %ue sea com$n a todos los nodos de la
red. Si la red es m(s #rande cada cambio ha de ser propa#ado a los dem(s lo antes posible y
controlar %ue la informaci&n se mantiene coerente o usar un sistema de base de datos compartido
como N6S etc.
A pesar de ello todo esto resulta insuficiente cuando hablamos de redes muy #randes. El fichero
/etc/hosts o e%ui"alente ser)a enorme asi %ue lo %ue se ha implementado para %ue en internet e+ista
un ser"icio de nombre es %ue es un protocolo llamado DNS %ue permite tener esta informaci&n
distribuida adecuadamente mediante un sistema de dominios %ue se reparten la car#a de #estionar
estos nombres or#ani'ados de forma 3er(r%uica #eneralmente hasta tres ni"eles de los cuales el
primero suele indicar el tipo de acti"idad. Por e3emplo:
com: Empresas comerciales
or#: 5r#ani'aciones no comerciales.
edu: *ni"ersidades y centros de in"esti#aci&n.
net: Pasarelas y nodos administrati"os de la red.
Con el fin de aumentar la eficiencia y la tolerancia a fallos cada 'ona tiene un ser"idor de nombres
autori'ado o maestro y cada uno de estos tiene "arios ser"idores secundarios. ,as 'onas se definen
como supercon3untos de redes 6P redondeadas a ni"el de un octeto.
Datos
N bytes
*DP
0C bytes
Datos
N bytes
6P
0C bytes
*DP
0C bytes
Datos
N bytes
Ethernet
/A bytes
6P
0C bytes
*DP
0C bytes
Datos
N bytes
Ethernet
A bytes
,a parte %ue representamos a la i'%uierda de los datos son datos de cabecera y los de la derecha son
datos de finali'aci&n del pa%uete. *nicamente el ni"el de 6nterfa' Ethernet tiene parte de
finali'aci&n y todos los ni"eles tienen datos de cabecera. Para el caso de 9CP la estructura ser(
similar.
Datos
N bytes
9CP
0C bytes
Datos
N bytes
6P
0C bytes
9CP
0C bytes
Datos
N bytes
Ethernet
/A bytes
6P
0C bytes
9CP
0C bytes
Datos
N bytes
Ethernet
A bytes
,a parte de datos puede tener distinto tama=o se#$n los casos pero #eneralmente no ser( mucho
mayor de /E<yte.
Estudiar en detalle la estructura de estos pa%uetes e+cede las pretensiones de este curso a pesar de
ello con"iene ilustrar con un par de e3emplos lo %ue ser)an un par de cabeceras y para ello usaremos
la estructura de una cabecera 6P y de una cabecera 9CP. Ambas son estructuras de 0C <ytes.
Cabecera 6P .0C bytes2
Jersi&
n
67, 9ipo de Se"ic. 9ama=o 9otal
6dentificaci&n Fla#s
Despla'amiento del
Fra#mento
9iempo de Jida Protocolo ChecHsum de Cabecera
Direcci&n de 5ri#en
Direcci&n de Destino
Simplemente nos conformaremos con resal tar %ue la cabecera 6P tiene datos de identificaci&n y
direccionamiento y la cabecera 9CP contiene informaci&n de los puertos as) como indicadores de
control numero de secuencia de los pa%uetes etc. para detectar la perdida de pa%uetes o su
deterioro a fin de #estionar el reen"i& de pa%uetes en caso necesario.
Cabecera 9CP .0C bytes2
Puerto de 5ri#en Puerto destino
N$mero de secuencia
N$mero de Confirmaci&n
Despl'
. de los
datos
4eser"ado
*
4
F
A
C
E
P
S
7
4
S
6
S
X
N
F
6
N
Jentana
ChecHsum Puntero de *r#encia
En 6nternet un destino y un ori#en no implica una ruta fi3a. ,os mensa3es buscan su ruta pasando a
tra"es de "arios nodos y dicha ruta puede "ariar incluso dentro de una misma sesi&n o de una misma
transferencia de ficheros. Por e3emplo la caida en una ruta supondr)a la perdida de al#unos pa%uetes
pero no afectar)a a la transmision ya %ue esta continuar)a r(pidamente por otra ruta sin %ue apenas
podamos percibirlo.
4ecordemos %ue 6nternet pro"iene en sus ori#enes de dise=os con ob3eti"os militares.
Si hace un pin# a una m(%uina remota recibir( una informaci&n util para dia#nosticar la calidad de
su cone+ion con ese ser"idor. Se trata de un ser"icio muy corriente orientado a data#ramas.
Primero le ir( mostrando una serie de l)neas donde podr( comprobar el tiempo de respuesta
e+presado en milise#undos. Si interrumpe su e3ecuci&n mostrar( unas estad)sticas donde podr( "er
entre otras cosas el porcenta#e de pa%uetes perdidos.
En este momento podemos entender me3or cual es la diferencia entre un repetidor .repeater2 un
puente .brid#e2 un enrutador .router2 una pasarela .#ateway2 y un cortafue#os .Fire8all2. Sal"o
los repetidores y en #eneral estos dispositi"os pueden ser un PC con un par de tar3etas de red
conectada cada una de ellas a una red distinta.
4epresentaremos en a'ul claro la parte de las tramas %ue pueden ser afectadas o solo tenidas en
cuenta. "$$#I/O" (REPEATERS
*n repetidor solo amplifica y retoca la se=al a ni"el puramente el!ctrico. Por lo tanto i#nora
cual%uier cosa sobre la informaci&n transmitida.
Ethernet
/A bytes
6P
0C bytes
*DP
0C bytes
Datos
N bytes
Ethernet
A bytes
Ethernet
/A bytes
6P
0C bytes
9CP
0C bytes
Datos
N bytes
Ethernet
A bytes
U$'#$ (!R"#$E
*n puente actua traduciendo o controlando la circulaci&n de pa%uetes a ni"el de 6nterfa' de red. En
nuestro caso es la capa Ethernet. Ambas redes deber(n ser muy parecidas ya %ue cual%uier
diferencia en los protocolos superiores har)a imposible la cone+ion de ambas redes. En la pr(ctica
pueden permitir conectar redes con diferentes "elocidades pero ambas redes f)sicas se comportar)an
como una misma red l&#ica.
Ethernet
/A bytes
6P
0C bytes
*DP
0C bytes
Datos
N bytes
Ethernet
A bytes
Ethernet
/A bytes
6P
0C bytes
9CP
0C bytes
Datos
N bytes
Ethernet
A bytes
$'"U#!/O" (R%&TER
*n 4outer actua traduciendo o controlando la circulaci&n de pa%uetes a ni"el de red. Podemos "er
en el dibu3o si#uente como un router puede actuar a ni"el de 6nterfa' de red .En nuestro caso
Ethernet2 y a ni"el de red .en nuestro caso capa 6P2.
Ethernet
/A bytes
6P
0C bytes
*DP
0C bytes
Datos
N bytes
Ethernet
A bytes
Ethernet
/A bytes
6P
0C bytes
9CP
0C bytes
Datos
N bytes
Ethernet
A bytes
!S!"$L! ($ATE'A(
*na pasarela .Fateway2 actuar( a ni"el de transporte %ue en nuestro caso puede ser 9CP o *DP.
9ambi!n en#loba los ni"eles inferiores.
Ethernet
/A bytes
6P
0C bytes
*DP
0C bytes
Datos
N bytes
Ethernet
A bytes
Ethernet
/A bytes
6P
0C bytes
9CP
0C bytes
Datos
N bytes
Ethernet
A bytes
CO"#!QU$;OS ()"RE'A**
*n CortaFue#os .Fire8all2 puede actuar permitiendo o dene#ando el paso de pa%uetes
considerandolos en su totalidad permitiendo el m(s amplio control posible. *no de los usos m(s
comunes es el de prote#er una intranet de accesos indeseados en ambos sentidos con el e+terior
especificando una pol)ticas restricti"as a ni"el de puertos ser"icios direcciones 6P o cual%uier otra
cosa.
Ethernet
/A bytes
6P
0C bytes
*DP
0C bytes
Datos
N bytes
Ethernet
A bytes
Ethernet
/A bytes
6P
0C bytes
9CP
0C bytes
Datos
N bytes
Ethernet
A bytes
2Y. $l arran*ue en Linux y como solucionar sus problemas
%rimera parte&
Introduccin.
En este cap)tulo intentaremos describir las posibles causas por las cuales un sistema ,inu+ puede
tener problemas para arrancar o para funcionar correctamente y la forma de solucionarlo.
Estos problemas pueden aparecer durante la instalaci&n con relati"a frecuencia pero tambi!n pueden
presentarse por distintas causas en un sistema %ue lle"a tiempo funcionando. En estos $ltimos casos
suele tratarse de un descuido cometido desde root o bien por un fallo del hardware. Al#unas "eces
se con"ierten en aut!nticas pesadillas para el usuario %ue las padece.
Para defenderse de todo esto tenemos %ue aprender bastantes cosas sobre el sistema y su
funcionamiento. 9rataremos primero de describir el proceso de arran%ue.
Este tema ha sido di"idido en dos partes. ,a primera describe principalmente los diferentes
car#adores de arran%ue y la se#unda el proceso de iniciali'aci&n.
Car,adores de arran*ue en ,eneral.
*n car#ador de arran%ue es un software encar#ado de car#ar en memoria el sistema operati"o. Se
trata de al#o curioso ya %ue bien mirado es un software encar#ado de car#ar en memoria otro
software. Pero entonces el astuto lector se pre#untar( %uien car#a al car#ador S ,a respuesta es muy
sencilla. ,a <65S. .<asic 6nput 5utput Sistem2. Es un software %ue reside en una memoria especial
no "ol(til del ordenador. No "ol(til %uiere decir %ue se conser"a incluso no el ordenador apa#ado.
Esta memoria es de solo lectura. Denominada por ello 45; .4ead 5nly ;emory2 por
contraposici&n a la 4A; %ue es memoria totalmente "ol(til.
No se pretende e+plicar el hardware del PC pero para no de3ar esto incompleto mencionaremos %ue
e+iste otro componente hardware %ue a diferencia de la 45; y de la 4A; admite la alteraci&n de
ciertos "alores de confi#uraci&n %ue no se perder(n cuando el ordenador se apa#ue aun%ue para
ello se recurre a una pe%ue=a pila. Estamos hablando de la C;5S.
,a <65S espera encontrar un car#ador en al#$n dispositi"o. Con"iene tener presente %ue la C;5S
debe confi#urarse de modo %ue intente arrancar e+plorando los distintos tipos de dispositi"os
.dis%uete cdrom o disco duro etc en la secuencia %ue a nosotros nos interese2.
E+isten distintas alternati"as para arrancar en ,inu+. Nosotros comentaremos ,ilo ,oadlin y Frub.
No se puede afirmar ta3antemente %ue uno sea superior a otro. Son muy distintos en su filosof)a y
ello presenta "enta3as e incon"enientes para cada uno dependiendo de las circunstancias. 9odos
ellos como paso final pasan el control al sistema operati"o. Al#unos car#adores ofrecen la
posibilidad de ele#ir arrancar con distintos sistemas operati"os.
,a <65S deber( car#ar una secci&n especial del disco o dis%uete %ue no se locali'a en nin#una
partici&n pues se encuentra en una pe%ue=a locali'aci&n pre"ia a la particiones. Esta secci&n es el
re#istro maestro de arran%ue abre"iadamente ;<4 .;aster <oot 4ecord2. *na "e' car#ado el ;<4
ya se puede locali'ar la partici&n donde reside el Hernel o n$cleo del sistema operati"o y car#arlo.
9ambi!n podr( locali'ar la partici&n donde reside el sistema de ficheros ra)' %ue no tiene por%ue ser
necesariamente la misma.
*n dis%uete no posee particiones. inicamente dispone de un sector de arran%ue de K/0 bytes y una
'ona de datos.
*n disco duro tiene un ;<4 y hasta un m(+imo de cuatro particiones primarias. Si se necesitan
m(s particiones se toma una de las particiones primarias y se subdi"ide en particiones l&#icas pero
entonces la partici&n primaria tratada de esta forma pasa a llamarse partici&n e+tendida.
4esumiendo todo el proceso de arran%ue ser)a al#o as):
,a se=al el!ctrica de reset o la de establecimiento de la alimentaci&n el!ctrica instruyen a la CP*
para e3ecutar las instrucciones de la <65S desde su punto inicial.
,a <65S bas(ndose en la confi#uraci&n de la C;5S locali'a el dispositi"o de arran%ue y car#a el
;<4.
El ;<4 pasa el control al sector de arran%ue en la la partici&n adecuada .
El sector de arran%ue car#a el S5 y le cede el control.
Discos y particiones.
4ecordamos la nomenclatura de los discos y las particiones en ,inu+.
./de"/hdYa:hZ para discos 6DE /de"/sdYa:pZ para discos SCS6 /de"/edYa:dZ para discos ESD6
/de"/+dYabZ para discos [9 /de"/fdYC:/Z para dis%uetes2.
Estos nombres de dispositi"o se refieren siempre al disco entero. El dispositi"o puede ser un disco
duro no remo"ible un disco duro remo"ible una unidad lectora o lectora/#rabadora de cdrom o de
cdrom/d"d unidades 'ip u otras cosas.
6ma#inemos un PC con tres discos duros 6DE dos discos SCS6 una dis%uetera y un lector de
CD45; 6DE conectado al controlador 6DE primario escla"o
/de"/hda controlador 6DE primario maestro
/de"/hdb controlador 6DE primario escla"o
/de"/hdc controlador 6DE secundario maestro
/de"/hdd controlador 6DE secundario escla"o
/de"/sda primer dispositi"o SCS6.
/de"/sdb se#undo dispositi"o SCS6
/de"/fdC dis%uetera
/de"/cdrom :U /de"/hdb .linH simb&lico para unidad cdrom conectado al
controlador 6DE primario escla"o

Como m(+imo cada disco podr( tener cuatro particiones primarias Para un primer disco 6DE
./de"/hda2 las particiones primarias ser)an /de"/hda/ ... /de"/hdaA. ,as particiones l&#icas se
nombran siempre a partir de la /de"/hdaK en adelante.
Por e3emplo "amos a suponer %ue deseamos disponer de cuatro particiones distintas. Jamos a
suponer %ue usamos 0 particiones primarias y una tercera e+tendida sobre la cual se han definido 0
particiones l&#icas el resultado ser)a el si#uiente.
?:::::::::::::::::::::::::::::::::::::?
> 9abla de particiones /de"/hda >
> ?:::::::::::::::::::::::::::::::::::>
> > Partici&n / /de"/hda/ >
> > >
> >:::::::::::::::::::::::::::::::::::>
> > Partici&n 0 /de"/hda0 >
> > >
> >:::::::::::::::::::::::::::::::::::>
> > Partici&n e+tendida /de"/hda1 >
> > ?:::::::::::::::::::::::::::::::::>
> > > 9abla de particiones e+tendida >
> > >:::::::::::::::::::::::::::::::::>
> > > Partici&n 1 /de"/hdaK >
> > > >
> > >:::::::::::::::::::::::::::::::::>
> > > 9abla de particiones e+tendida >
> > >:::::::::::::::::::::::::::::::::>
> > > Partici&n A /de"/hdaL >
> > > >
?:::::::::::::::::::::::::::::::::::::?

Es decir tenemos /de"/hda/ /de"/hda0 /de"/hdaK y /de"/hdaL. ,a partici&n /de"/hda1 e+tendida no
se usa directamente. Es un mero contenedor de particiones l&#icas. .No se debe formatear2.
Se#uramente le resulte e+tra=o por%ue en los S5 operati"os de ;icrosoft no se suele usar m(s de
una partici&n primaria. 4ealmente se podr)a haber usado una partici&n primaria y una e+tendida con
tres unidades l&#icas. Es decir podr)amos haber usado /de"/hda/ /de"/hdaK /de"/hdaL y /de"/hdaM
de3ando /de"/hda0 como partici&n e+tendida.
9ambi!n podr)amos haber usado las cuatro particiones como particiones primarias /de"/hda/
/de"/hda0 /de"/hda1 /de"/hdaA.
Para "er cual es la situaci&n actual en su PC. 7a#a lo si#uiente:
N
fdisH :l

Con"iene sacar esta informaci&n por impresora y #uardarla. Si accidentalmente se pierde la
informaci&n de la tabla de particiones por e3emplo por escritura accidental en el primer sector de un
disco podr)a "ol"er a recuperarla usando ese listado. 9ambi!n se puede #uardar la informaci&n del
primer sector de un disco duro sal"(ndolo a dis%uete mediante:
N dd if@/de"/hda of@/de"/fdC count@/ bs@K/0

Para recuperar este sector basta hacer:
N dd of@/de"/hda if@/de"/fdC count@/ bs@K/0

Puede "aler si solo usa particiones primarias pero esto no sal"a la informaci&n de las particiones
l&#icas. ,o me3or es conser"ar la salida de GfdisH :lG. No cuesta nada "ol"er a particionar todo i#ual
%ue estaba nue"amente usando fdisH.
Compartir el arran*ue con otro SO.
6nstalar ,inu+ en un disco %ue ya tiene otro S5 tipo 8indows. Daremos una receta muy simple
suponiendo %ue parte de un sistema con un solo disco duro y con una sola partici&n %ue ya tiene
otro S5 tipo 8indows.
Desinstale anti"irus y otros pro#ramas %ue pueda residir en posiciones fi3as al final del disco duro.
Desfra#mentar el disco duro con la opci&n de m(+ima descompresi&n.
Ase#$rese de %ue toda la informaci&n %ueda a#rupada y tome nota de cuanto espacio %ueda libre.
Di"idir la partici&n con fips cortando por una parte donde no e+ista informaci&n.
Eliminar la se#unda partici&n. Puede hacerlo con el propio fdisH de ,inu+.
A=adir una partici&n pe%ue=a para swap. y el resto la para la futura partici&n ra)' de ,inu+. Para la
swap puede usar un tama=o de unos /KC;bytes.
Por $ltimo instale ,inu+.
Lilo
,ilo es probablemente el car#ador m(s utili'ado en ,inu+ pero se puede usar para car#ar una #ran
"ariedad de sistemas operati"os.
El car#ador ,ilo puede ubicarse en distintos lu#ares.
Sector de arran%ue de un dis%uete ,inu+. boot@./de"/fdC ...2
;<4 de la primera unidad de disco duro. boot@./de"/hda /de"/sda ...2
Sector de arran%ue del primer sistema de ficheros ,inu+ en el primer disco duro. boot@./de"/hda/
...2
,ilo tambi!n permite arrancar desde una partici&n e+tendida aun%ue no es frecuente tener %ue
recurrir a esto.
No debe confundir /de"/hda y /de"/hda/. Como acabamos de e+plicar son cosas bien distintas.
Si usted tiene un S5 distinto de ,inu+ en /de"/hda/ y usa boot@/de"/hda/ deteriorar( el sistema de
arran%ue de ese otro S5. En ;SD5S se puede re#enerar esa p!rdida mediante la transferencia de
los ficheros del sistema de arran%ue desde un dis%uete del sistema mediante el comando sys.
Si utili'o boot@/de"/hda ,ilo se #rabar( en el ;<4. Si desea recuperar el ;<4 de ;SD5S o
8indows use desde un dis%uete de arran%ue %ue conten#a el comando fdisH de ;SD5S el
comando fdisH /;<4. Se trata de un comando no documentado de ;SD5S.
Por lo tanto cada "e' %ue usted e3ecuta el comando ,ilo de ,inu+ puede estar afectando el proceso
de arran%ue de otros sistemas operati"os instalados en su m(%uina. A ;icrosoft no le #usta
compartir demasiado su sistema de arran%ue con otros sistemas operati"os. Durante la instalaci&n
de 8indows no se respeta el ;<4 y por ello si debe instalar 8indows y ,inu+ con"iene instalar
,inu+ en se#undo lu#ar. Para ello de3e una parte del disco libre con suficiente espacio o reser"e un
disco completo para su ,inu+.
,ilo se confi#ura mediante el fichero /etc/lilo.conf. Se muestra un e3emplo de confi#uraci&n b(sica.
Consta de tres partes:
Seccin ,eneral o ,lobal.
Secci&n de entradas ,inu+ .ima#e @ THernelU 2
Secci&n de entradas no ,inu+. . other @ Tparticion de arran%ueU 2
E+iste una parte #eneral pre"ia y lue#o para cada opci&n de arran%ue eti%uetada con un
identificador label @ Teti%uetaU. Para cada opci&n de arran%ue se puede definir cosas nue"as o
redefinir ciertas cosas pre"iamente definidas en la parte #eneral.
boot @ /de"/hda
delay @ AC
"#a @ normal
root @ /de"/hda/
read:only
ima#e @ /'6ma#e:0.K.BB
label @ Hern0.K.BB
ima#e @ /'6ma#e:/.C.B
label @ Hern/.C.B
ima#e @ /boot/"mlinu'
label @ linu+
"#a @ asH
root @ /de"/hdb0
other @ /de"/hda1
label @ dos
table @ /de"/hda

Sal"o %ue se )ndice cual es la entrada por defecto con la opci&n default @ la primera entrada se
considera la entrada predeterminada por defecto y en caso de no inter"enci&n el sistema arrancar(
usando esta entrada. Antes de eso esperar( un tiempo . delay @ Td!cimas de se#undoU 2 para dar
tiempo a inter"enir y ele#ir el arran%ue deseado. Si no se recuerda cuales son las opciones para
poder arrancar basta usar la tecla de cambio a may$sculas TShiftU y se mostrar(n la lista de la
distintas opciones disponibles. 9ambi!n se puede usar para lo mismo la combinaci&n de las teclas
TAltU?TCtrlU. Si se %uiere for'ar la aparici&n de esta lista sin tener %ue usar las teclas usaremos la
opci&n prompt.
El Hernel a usar se establece mediante ima#e @ Tfichero del HernelU ,a "ariable root permite
especificar cual ser( la partici&n ra)'. De no e+istir esta "ariable lilo tomar( el "alor determinado en
el propio Hernel lo cual puede alterarse con la utilidad rde".
En nuestro e3emplo hemos definido una partici&n ra)' para los sistemas linu+ mediante el uso de
root @ /de"/hda/ en la secci&n #lobal pero esto se puede alterar y la entrada label @ linu+ usar( root
@ /de"/hdb0 y "#a @ asH. Esto $ltimo permite ele#ir durante el arran%ue el modo de pantalla a usar.
,a opci&n read:only hace %ue el sistema de ficheros ra)' se arran%ue inicialmente en modo de solo
lectura. Esto es lo normal pero posteriormente durante el arran%ue cambiara a modo lectura:
escritura.
Se puede incluir un mensa3e durante el arran%ue mediante messa#e @ TficheroU. ,a opci&n compact
permite una car#a m(s r(pida y es recomendable por ello su uso en dis%uetes .boot @ /de"/fdC2 pero
puede ser incompatible con la opci&n linear. <ueno hay muchas opciones m(s y con"iene mirar la
documentaci&n de lilo.
*na "e' editado el fichero Glilo.confG hay %ue e3ecutar el comando GliloG para instalar el car#ador de
arran%ue %ue se acti"ar( la pr&+ima "e' %ue se arran%ue el sistema. El m(s m)nimo cambio %ue
afecte a al#uno de los ficheros %ue inter"ienen en el arran%ue har( %ue este falle. Por e3emplo si
saca una copia del Hernel borra el ori#inal y renombra la copia con el mismo nombre %ue el
ori#inal todo parecer( %ue est( i#ual %ue antes pero las posiciones en disco ya no son las mismas y
el arran%ue fallar(. Para e"itar esto despu!s de la recompilaci&n de un Hernel o de cual%uier otro
cambio en cual%uiera de los elementos in"olucrados durante el arran%ue deber( reconstruir el
car#ador "ol"iendo a e3ecutar el comando lilo.
,6,5 puede informar de la limitaci&n de la <65S para acceder por encima del cilindro /C0A. Si la
partici&n de arran%ue supera este l)mite cabe la posibilidad de %ue el Hernel u otro elemento
necesario durante el arran%ue resida por encima de ese l)mite y resulte inaccesible para ,ilo
impidiendo el arran%ue del sistema. ,a opci&n linear puede e"itar este problema.
Como norma de precauci&n de3e siempre una entrada con el $ltimo Hernel de funcionamiento
comprobado para poder arrancar desde !l en caso de %ue el nue"o Hernel #enerado falle.
Si usted no puede arrancar por%ue ol"id& e3ecutar lilo despu!s de al#$n cambio deber( arrancar
desde un dis%uete y recuperar el arran%ue. Jamos a suponer %ue su sistema usaba la partici&n ra)'
montada en /de"/hda/. .Es una suposici&n nada m(s2. En ese caso y si dispone de un dis%uete de
arran%ue %ue ya est! preparado para arrancar usando la partici&n ra)' /de"/hda/ el problema ser(
f(cil de solucionar. <astar( e3ecutar GliloG una "e' %ue arran%ue desde dis%uete. *n dis%uete as)
puede obtenerse de "arias formas. *na de ellas es si usted compil& el Hernel usando GmaHe 'ima#eG.
.Jeremos en posteriores cap)tulos la compilaci&n del Hernel2. 9ambi!n podemos usar un dis%uete o
CD de rescate %ue arran%ue con una partici&n ra)' cual%uiera siempre %ue el Hernel utili'ado sea
compatible con nuestro sistema. En cual%uier caso se puede siempre intentar. *na "e' arrancado
con dis%uete de rescate creamos un directorio para montar en !l nuestra partici&n ra)'.
mHdir /hda/
cd /hda/
mount :t e+t0 /de"/hda/ /hda/
chroot /hda/
lilo
shutdown :r now

,a cla"e de este procedimiento est( en GchrootG. Se trata de un comando %ue obtiene una sesi&n bash
o lan'a un comando cambiando el directorio ra)' actual por uno diferente. E"identemente el nue"o
directorio debe de tener la estructura adecuada y los ficheros adecuados a cual%uier directorio ra)'
%ue se precie de serlo. El directorio ra)' es la ca3a donde ocurre cual%uier cosa en el sistema. 7acer
GchrootG e%ui"ale a cambiar de ca3a. Fuera de la nue"a ca3a es como si nada e+istiera para nuestro
S5. Nosotros lo usamos para %ue lilo funcione desde la partici&n ra)' %ue nos interesa.
9ambi!n puede obtener un dis%uete de arran%ue %ue use la partici&n ra)' /de"/hda/. 6ntrodu'ca un
dis%uete "ir#en formateado en la dis%uetera. 9endr( %ue saber donde se encuentra su Hernel. Puede
mirar el fichero /etc/lilo.conf para recordarlo. Este es el fichero de confi#uraci&n de lilo. Jamos a
suponer %ue el Hernel fuera /hda//boot/Hernel.
mHdir /hda/
cd /hda/
mount :t e+t0 /de"/hda/ /hda/
dd if@/hda//boot/Hernel of@/de"/fdC
rde" /de"/fdC /de"/hda/
shutdown :r now

Con ello crear( un dis%uete de arran%ue para su partici&n ra)'. Despu!s de arrancar desde el nue"o
dis%uete e3ecute lilo para poder arrancar desde el disco duro en ocasiones posteriores.
Son muchas las cosas %ue se pueden decir sobre lilo y al#unos detalles t!cnicos son complicados de
e+plicar. Feneralmente es f(cil confi#urar una arran%ue b(sico %ue funcione y en caso de fallo
daremos al#unas indicaciones sobre las posibles causas.
5ensa1es de pro,reso del car,ador de arran*ue lilo.
A medida %ue ,ilo "a pro#resando "a mostrando las letras G,GG6GG,GG5G. y si se detiene en al#$n
punto ser( por%ue ha sur#ido al#$n problema %ue le impide pro#resar.
Si no aparece nin#una letra durante en arran%ue si#nifica %ue el car#ador ,ilo no pudo encontrarse.
-ui'(s ol"id& e3ecutar el comando lilo.
Si solo aparece , probablemente e+ista al#$n problema hardware.
Si solo aparece ,6 el Hernel no fue locali'ado. A=ada la opci&n linear para "er si se soluciona el
problema. Esta opci&n #enera direcciones lineales de sectores en lu#ar de direcciones utili'ando
cilindros cabe'as y sectores. Esto permite direccionar sin necesidad de usar la #eometr)a del disco.
Por ello tambi!n puede ser"ir para solucionar el l)mite de los /C0A cilindros impuesto por al#unas
<65S. Esta opci&n no debe usarse con la opci&n lba10 son mutuamente e+cluyentes. ,a opci&n
linear tambi!n puede entrar en conflicto con la opci&n compact.
Si solo aparece ,6, si#nifica %ue no se pueden leer los datos del fichero de mapa y puede tratarse
de al#$n problema hardware.
Si aparece ,6,5 si#nifica %ue lilo finali'& correctamente.
,oadlin.
Se trata de un car#ador de linu+ %ue act$a desde un sistema D5S. ,oadlin ha de e3ecutarse desde un
sistema D5S %ue podr( ser un dis%uete con autoarran%ue o un disco duro.
Este car#ador puede "enir bien en al#unas circunstancias. 7ay %ue tener en cuenta %ue los PCs
suelen estar pensados para arrancar sistemas D5S y al#una "e' pueden incluir un componente
hardware %ue dependa de un controlador D5S para confi#urar unos pocos re#istros en el hardware
antes de arrancar el S5.
El proceso de arran%ue con loadlin se di"ide en dos etapas. *na es el arran%ue del propio sistema
D5S y posteriormente se e3ecuta loadlin.e+e como un pro#rama D5S normal y corriente pasando
como ar#umentos el Hernel y al#unas cosas m(s.
Compararemos la secuencia de arran%ue con lilo o con loadlin en el si#uiente #r(fico:
Jamos a comentar una receta para construir un dis%uete de arran%ue con loadlin.
Formatee un dis%uete desde D5S incluyendo los ficheros del sistema de arran%ue. Es decir Gformat
a: /sG
Desde ,inu+ copie a ese dis%uete el Hernel. Por e3emplo
N mcopy /boot/Hern0A a:

Edite un fichero autoe+ec.bat para %ue conten#a lo si#uiente:
N loadlin Hern0A root@/de"/hda1 ro "#a@1

Copielo al dis%uete. Gmcopy autoe+ec.bat a:G 9ambi!n copie loadlin.e+e Gmcopy loadlin.e+e a:G Es un
fichero %ue puede "enir en al#$n pa%uete de su distribuci&n o en el CD de instalaci&n. Antes de
retirar el dis%uete ase#ure %ue se #rabaron todos esos ficheros usando Gsync _ syncG
;rub
F4*< Es un car#ador %ue ofrece al#unas "enta3as sobre ,6,5 pero tambi!n al#unas des"enta3as.
F4*< no es sensible a cosas como la sobreescritura de un Hernel anti#uo por otro nue"o con el
mismo nombre ni necesita "ol"er a e3ecutar el car#ador si no hay cambios a ni"el de ficheros en los
elementos %ue participaran en el arran%ue. Estos suelen encontrarse locali'ados #eneralmente en
/boot/#rub/. ,a linea de comandos del car#ador es m(s comple3a en F4*<. El fichero de
confi#uraci&n de F4*< es /etc/#rub.conf
*n e3emplo de #rub.conf para una confi#uraci&n b(sica ser)a:
root .hdC02
install /boot/#rub/sta#e/ .hdC02 /boot/#rub/sta#e0 C+RCCC .hdC02
/boot/#rub/menu./st
%uit
WWWWWWWWWWWW
.fdC2 /de"/fdC
.hdC2 /de"/hda
WWWWWWWWWWWW
timeout@M
splashscreen @ .hdC/2/boot/messa#es.col0A
default@C
title@,inu+
root@.hdC02
Hernel@/boot/"mlinu'.0.A noapic nosmp
root@/de"/hda1
title@8indows
chainloader@.hdCC2?/
El timeout "iene e+presado en se#undos .en ,ilo eran decimas de se#undos2. El default se=ala con
un n$mero la opci&n de arran%ue por defecto. En este caso por "aler C tomar( la primera %ue es
title@,inu+ donde title hace las "eces de label en ,ilo. root@.hdC02 indica %ue la partici&n ra)' se
encuentra en el primer disco duro tercera partici&n. ,a linea del Hernel en F4*P me'cla cosas %ue
ir)an como append@ y cosas %ue en ,ilo aparec)an en otras l)neas de lilo.conf
5ontar y desmontar particiones %mount&
,a utilidad para montar y desmontar particiones es mount.R2.
Fracias a mount los distintos dispositi"os o particiones se pueden col#ar en al#$n punto del #ran
arbol del sistema de ficheros ra)'.
El fichero de confi#uraci&n %ue utili'a mount para saber como donde y cuando debe montar las
particiones es fstab.K2 %ue se locali'a en /etc/fstab.
Cada linea de fstab representa un re#istro donde se describe un determinado sistema de ficheros del
sistema.
,os campos en cada l)nea est(n separados por tabs o espacios. El orden de los re#istros en fstab es
importante por%ue fscH.R2 mount.R2 y umount.R2 recorren fstab secuencialmente a medida %ue
traba3an. ,os distintos campos de fstab son:
fsOspec2 Describe el dispositi"o a ser montado.
fsOfile2 Describe el punto de monta3e para el sistema de ficheros. Para particiones de intercambio
.swap2 este campo debe decir \\noneGG
fsO"fstype2 Describe el tipo del sistema de ficheros. .mini+ e+t e+t0 msdos
"fat autofs isoBLLC nfs swap ... etc2
fsOmntops2 5pciones de monta3e. Es una lista de opciones separadas por comas. Estas pueden ser:
defaults 4esume todas las opciones .rw suid de" e+ec auto nouser atime y async2.
rw ro 4especti"amente monta en escritura lectura o en solo lectura
suid nosuid 4especti"amente permite o impide el funcionamiento del delicado bit de permiso
setuid.
de" node" 4especti"amente interpreta o no caracteres o blo%ues de un dispositi"o especial de
blo%ues.
e+ec noe+ec 4especti"amente permite o impide la e3ecuci&n de binarios. .,a e3ecuci&n de scripts
no puede ser impedida y tampoco conf)e en esto para impedir la e3ecuci&n de un binario. Cual%uier
pro#rama %ue pueda ser le)do puede ser e3ecutado aun%ue sea indirectamente2.
auto noauto 4especti"amente se puede montar con la opci&n :a o se re%uiere hacerlo
e+pl)citamente. Es decir uno por uno.
user nouser 4especti"amente permite o impide %ue cual%uiera pueda montar y desmontar dicho
sistema de fichero. ,o normal es no permitir %ue cual%uier usuario pueda hacerlo.
sync async 9oda entrada salida sobre este sistema de fichero se reali'ar( de modo s)ncrono o
as)ncrono. El modo as)ncrono no ase#ura el momento en %ue las cosas realmente ocurren pero
#racias a esto el S5 ser( capa' de optimi'ar las operaciones de entrada salida.
atime noatime No actuali'ar la $ltima fecha de acceso a un inodo. Con ello se aumenta la "elocidad
de acceso.
fsOfre%2 Este %uinto campo se usa para determinar si el comando dump.R2 necesita "olcar o no el
contenido de este sistema de ficheros.
fsOpassno2 ,o usar( fscH.R2 para saber en %ue orden deber comprobar los sistemas de ficheros. Si
no tiene "alor se asume %ue el sistema de ficheros no debe ser che%ueado. El sistema de ficheros
ra)' deber)a lle"ar fsOpassno i#ual a / y otros sistemas de ficheros deber)an lle"ar fsOpassno i#ual a
0 o mas. Sistemas de ficheros en un mismo disco ser(n che%ueados secuencialmente y con"iene
establecer el orden mas con"eniente entre ellos pero sistemas de ficheros en diferentes discos con
mismo "alor fsOpassno ser(n che%ueados al mismo tiempo para #anar tiempo.
Para %ue mount sea capa' de montar un determinado sistema de ficheros resulta imprescindible %ue
e+ista el soporte adecuado en el Hernel bien sea est(ticamente o como m&dulo. En el caso de la
partici&n ra)' no sir"e usar un m&dulo para dicho sistema de ficheros ni para su controlador de disco
ni nada ya %ue para acceder a los m&dulos es re%uisito pre"io imprescindible tener montado el
sistema de ficheros rai'.
E3ecutando mount a secas podemos "er los sistemas %ue est(n montados y con %ue opciones. Con el
comando df./2 "emos los sistemas montados y el numero de blo%ue totales libres usados y el
porcenta3e de uso.
*na "e' montadas la particiones podemos considerar %ue el arran%ue ha tenido lu#ar dado %ue
e+iste un Hernel funcionando y los controladores b(sicos de memoria de discos y de sistema de
ficheros funcionan.
Ser( ahora cuando se arran%ue el primer proceso encar#ado de iniciali'ar todo el sistema. Esto lo
"eremos en el si#uiente cap)tulo.
-V. $l arran*ue en Linux y como solucionar sus problemas
%Se,unda parte&
Introduccin.
En la primera parte de este tema ya comentamos los diferentes car#adores de arran%ue y ahora
comentaremos el proceso de iniciali'aci&n.
9ambi!n repasaremos los problemas %ue pueden aparecer en nuestros discos o en nuestros sistemas
de ficheros. Asumiremos en este cap)tulo %ue la particiones ,inu+ son de tipo e+t0. Entre otras
cosas trataremos de e+plicar como reparar sistemas de ficheros e+t0. Para otro tipo de sistemas de
ficheros como e+t1 reiserfs dFS [FS se usar(n utilidades diferentes y cambiar(n al#unas cosas
respect a e+t0. En reiserfs y en e+t1 no resulta necesario che%uear el sistema de ficheros despu!s de
un apa#&n pero eso no lo hace m(s se#uro frente a cortes de fluido el!ctrico. Puede haber
diferencias de rendimiento entre los diferentes sistemas de ficheros dependiendo de los tama=os de
ficheros y de otras circunstancias pero tampoco deben esperarse diferencias espectaculares de
rendimiento entre ellos.
No siempre lo nue"o es lo me3or. El sistema e+t0 es muy estable por%ue lle"a mucho tiempo
funcionando. ,os sistemas no son perfectos y sobre el sistema de ficheros recae mucha
responsabilidad. *n fallo en un sistema de ficheros puede pro"ocar la p!rdida de toda la
informaci&n del sistema. 7ay al#unas distribuciones %ue por defecto instalan sistemas de ficheros
distintos de e+t0. En parte es una cuesti&n de #ustos. Nosotros nos limitamos a e+t0 pero aun%ue
usted use otro sistema de ficheros encontrar( mucha informaci&n util en este cap)tulo.
En este cap)tulo se mencionar( la locali'aci&n de muchos e importantes scripts del sistema. *sted
ya tiene ni"el suficiente como para entenderlos. ;uchos de ellos son bastante cr)ticos y es me3or no
modificarlos otros no son tan cr)ticos y pueden adaptarse sin ries#o a las necesidades de su sistema.
En cual%uier caso sea curioso repase los diferentes scripts y aprender( muchas cosas interesantes.
;uchos son los aspectos del Hernel %ue inciden en la problem(tica del arran%ue pero esa parte la
de3aremos para un posterior cap)tulo.
Inicializacin del sistema %init&
*na "e' el car#ador completa la car#a del Hernel este termina cediendo el control de e3ecuci&n al
sistema operati"o el cual efectuar( una serie de tareas %ue con"iene conocer.
E+iste una limitaci&n inicial %ue "iene del dise=o ori#inal de los PCs. 6<; eli#i& como l)mite /
;e#a<yte por%ue en su momento no consider& la posibilidad de %ue un ordenador personal
necesitara 3am(s acceder a m(s de / ;e#a de memoria 4A;. Por esta ra'&n el Hernel de ,inu+ se
car#a en forma comprimida para no rebasar ese primer ;e#abyte de la memoria 4A;. A
continuaci&n se e3ecuta una primera cabecera de esa informaci&n #rabada en 4A; %ue pasa la CP*
a modo prote#ido y de esta forma elimina la restricci&n de acceso a 4A; pudiendo entonces
acceder m(s all( del primer ;e#abyte de memoria y pasando se#uidamente a descomprimir todo el
Hernel para su posterior e3ecuci&n.
El Hernel monta el sistema de ficheros ra)' ra)' en modo solo lectura y lo hace sin poder usar
nin#uno de sus m&dulos ya %ue estos solo son accesibles una "e' el sistema ra)' est( perfectamente
montado. El Hernel tambi!n necesita ser capa' de mane3ar el sistema de memoria "irtual sin usar
nin#$n m&dulo antes de %ue se monte el sistema ra)'.
El Hernel arranca el proceso init %ui'(s precedido de al#$n proceso planificador dependiendo de los
sistemas. El proceso init tendr( como P6D el "alor /. Ser( el proceso %ue #enere a todos los dem(s
procesos del sistema.
GinitG lee el fichero G/etc/inittabG. Este fichero contiene la lista de los procesos %ue deben ser
arrancados. ,os procesos se reparten en distintos ni"eles de e3ecuci&n para #aranti'ar un orden de
arran%ue o parada entre ellos dependiendo del ni"el de e3ecuci&n al %ue est(n asociados. ,os
procesos ser(n arrancados mediante scripts rc situados en /etc/rc[.d/ donde [ es el ni"el de
e3ecuci&n. Estos scripts usan una nomenclatura GSnn...G o GEnn...G donde el prefi3o S si#nifica
arran%ue de un ser"icio y el prefi3o E parada de un ser"icio. Jiene de .S2tart y .E2ill2. ,os dos
d)#itos si#uientes determinan el orden de e3ecuci&n de cada script dentro de un mismo ni"el.
GinitG arranca los procesos %ue est(n asociados al ni"el / de e3ecuci&n %ue se corresponde con el
modo mono usuario. Antes de entrar en este ni"el / se e3ecutaran los scripts asociados al ni"el GSG
%ue no es en realidad un ni"el de e3ecuci&n %ue se pueda usar directamente sino %ue contiene
scripts espec)ficos %ue se e3ecutan durante el arran%ue y como acabamos de e+plicar se e3ecutan
antes incluso del ni"el /. Se determina si el sistema debe che%uear el sistema de ficheros con
GfscH.R2G. Esto ser( necesario si se termin& bruscamente sin desmontar los sistemas de ficheros o
bien por%ue el sistema de ficheros alcance un cierto n$mero de "eces de monta3e y desmonta3e sin
%ue se che%uee el sistema de ficheros. Por lo tanto si resulta necesario se che%uear( el sistema de
ficheros ra)' y si el che%ueo termina sin no"edad se continua con el monta3e de los restantes
sistemas de ficheros pero si se detecta al#$n tipo de problema serio el sistema solicitar( la
contrase=a de root %uedando el sistema en el ni"el / monousuario para se pueda e3ecutar GfscHG
manualmente. 9rataremos este tema m(s adelante.
,os sistemas de ficheros tienen incorporado un contador de forma %ue alcan'ado un cierto "alor
m(+imo se considera necesario che%uear el sistema de ficheros. Dicho "alor m(+imo puede ser
alterado usando Gtune0fs.R2G pero #eneralmente no es buena idea hacerlo. *n che%ueo m(s frecuente
resultar( inc&modo uno menos frecuente supone aumentar el ries#o de un deterioro del sistema de
ficheros.
Finali'ado el che%ueo de la partici&n ra)' esta se "uel"e a montar pero esta "e' en modo lectura
escritura. Che%uear el sistema de ficheros Se montan el resto de los sistemas de ficheros
especificados en G/etc/fstabG sal"o a%uellas entradas .lineas2 %ue fi#uren como noauto. Jease
Gmount.R2G y Gfstab.K2G
El sistema entrar( en el runle"el predeterminado %ue por defecto %ue en el caso de Debian es el 0.
Este al i#ual %ue muchas cosas "iene especificado en G/etc/inittabG
W 9he default runle"el.
id:0:initdefault:
En este ni"el en Debian se arranca el entorno #r(fico de "entanas mientras %ue en otros sistemas
esto ocurre en el ni"el K. ,os ni"eles de e3ecuci&n .runle"el2 pueden "ariar de un sistema a otro pero
en t!rminos #enerales est(n or#ani'ados de la forma si#uiente:
C Detiene el sistema.
/ Entra en modo modo usuario.
0 : K Entra en una "ariedad de modos multiusuario.
L Pro"oca el rearran%ue del sistema.
Despu!s de e3ecutar los scripts del runle"el predeterminado GinitG procede a arrancar mediante
G#etty.R2G una serie de terminales o seudoterminales conectados al sistema.
G#ettyG presenta sobre el terminal un introductor Glo#in:G %ue tomar( el nombre de usuario. *na "e'
introducido el nombre de usuario este proceso se transforma en el proceso lo#in por medio de una
llamada e+ec. .Esto ya se e+plic& en la parte del curso dedicada a los procesos2. El pro#rama
Glo#in.R2G solicitar( una password y en caso de %ue esta sea "(lida se transformar( mediante un
nue"o e+ec en la shell destinada a ese usuario mediante su correspondiente entrada en G/etc/passwdG.
Cuando la shell muere init lo detecta como si el proceso #etty %ue arranc& hubiera muerto. .En
realidad el pid no "ar)a al hacer los sucesi"os e+ec2. Dado %ue los #etty se arrancan en modo
respawn GinitG los rearranca cada "e' %ue mueran.
$xplicacin de inittab.
Primero consute la p(#ina man inittab.K2. ,ue#o e+amine su fichero G/etc/inittabG. 9iene %ue tener
claro %ue la modificaci&n de este fichero conduce con enorme facilidad a situaciones donde el
sistema no ser( capa' de "ol"er a arrancar.
Por el momento es me3or %ue se limite a leer inittab sin modificarlo. ,as l)neas %ue empie'an por GWG
son simples comentarios. ,as dem(s l)neas constar(n de cuatro campos separados por G:G
6dentificador Feneralmente el identificador admite un m(+imo de dos caracteres %ue deber( ser
$nico para cada l)nea.
Ni"eles de e3ecuci&n Contiene los ni"eles de e3ecuci&n en los cuales la acci&n resulta adecuada. Si
no aparece nin#uno se entiende adecuada para cual%uier ni"el.
9ipo de acci&n 7ay unas cuantos tipos de acciones .once sysinit boot bootwait wait off
ondemand initdefault powerwait powerfail poweroHwait ctrlaldel Hbre%uest 2 Puede consultar la
p(#ina man de inittab.K2 donde "ienen e+plicados.
Proceso Pro#rama a e3ecutar.
El comando runle"el.R2 de"uel"e los dos $ltimos ni"eles de e3ecuci&n.
En caso de no e+istir un ni"el de e3ecuci&n pre"io al actual se representar( con la letra N.
Pruebe a pasar modo mono usuario con el comando init o telinit.
W init /
5 con

W telinit /
4ecuerde %ue en este modo nadie m(s %ue es super usuario podr( usar el sistema y no podr( usar
nin#$n ser"icio del sistema. Esto se hace para refor'ar el control de root sobre todo el sistema.
En situaciones delicadas le permite ase#urar de %ue en sistema no esta ocurriendo absolutamente
nada sal"o las ordenes %ue GrootG "a e3ecutando. 5frece un absoluto control de operaci&n para el
administraci&n frente a todo tipo de problemas incluidos los ata%ues intencionados.
,a me3or manera de salir del modo monousuario es rearrancar con

W shutdown :r now
5 con

W init L
5 con

W telinit L
Los scripts rc
,a informaci&n sobre los scripts rc o sobre inittab permite comprender el proceso completo del
arran%ue de ,inu+. Fracias a esta informaci&n podr( con un poco de suerte dia#nosticar una enorme
"ariedad de problemas y solucionarlos pero e+perimentar por puro 3ue#o con estas cosas puede
ocasionar problemas con una #ran facilidad.
,os scripts rc o el fichero inittab son f(ciles de interpretar pero su funcionamiento es bastante
cr)tico para el buen funcionamiento del resto del sistema.
Nunca deber)a tocar nada sin ase#urarse %ue puede lle#ado el caso dar marcha atr(s y de3arlo todo
como estaba. Por e3emplo si edita al#uno de estos ficheros sa%ue pre"iamente una copia del ori#inal
y #uardela por un tiempo.
E+iste una opci&n para arrancar el proceso init sin %ue e3ecute nin#uno de los ficheros de script.

W init :b
Esto est( especialmente indicado para ciertos problemas de arran%ue. Como "eremos lue#o ficheros
de confi#uraci&n del tipo %ue sean %ue impidan un arran%ue pueden ser recuperados montando la
partici&n en modo lectura escritura.
,os scripts rc son ficheros presentes en los directorios /etc/rc.dW.d donde W es el runle"el . Cada
script rc suele implementarse como un linH simb&lico %ue empie'a por S o E .start2 o .Hill2 se#uido
de dos d)#itos y %ue apunta a un fichero con el mismo nombre pero sin S ni E ni los dos d)#itos.
7a#a lo si#uiente:
W cd /etc
W ls :l rcV.d/VcronV init.d/VcronV
5btendr( al#o parecido a lo si#uiente:

init.d/anacron
init.d/cron
rcC.d/E//cron :U ../init.d/cron
rc/.d/E//cron :U ../init.d/cron
rc0.d/S0Canacron :U ../init.d/anacron
rc0.d/SRBcron :U ../init.d/cron
rc1.d/S0Canacron :U ../init.d/anacron
rc1.d/SRBcron :U ../init.d/cron
rcA.d/S0Canacron :U ../init.d/anacron
rcA.d/SRBcron :U ../init.d/cron
rcK.d/S0Canacron :U ../init.d/anacron
rcK.d/SRBcron :U ../init.d/cron
rcL.d/E//cron :U ../init.d/cron
,os ser"icios cron y anacron son ser"icios %ue ya hemos tratado en un cap)tulo anterior. 5bser"e
%ue estos ser"icios de forma similar a la mayor)a de los ser"icios se arrancan y paran desde
Ginit.d/cronG y Ginit.d/anacronG respecti"amente. 5bser"e %ue los enlaces simb&licos de arran%ue
apuntan al mismo script %ue los enlaces simb&licos de parada.
Cual%uier ser"icio puede arrancarse o detenerse de forma indi"idual haciendo: G/etc/init.d/ser"icio
startG o G/etc/init.d/ser"icio stopG respecti"amente.
El proceso GinitG procesa los contenidos de los directorios GrcW.d/G para ir arrancando y parando los
ser"icios adecuados.
Como puede "erse en G/etc/inittabG el encar#ado de procesar los scripts GrcG es G/etc/init.d/rcG %ue se
usa pas(ndole el ni"el de e3ecuci&n como ar#umento. El script GrcG es el %ue usa la letra inicial del
enlace simb&lico para lan'ar el script a=adiendo un ar#umento GstartG o GstopG se#$n resulte la letra
inicial.
El orden de e3ecuci&n de los diferentes scripts del sistema en Debian es es si#uiente:
Como puede "erse en inittab .si::sysinit:/etc/init.d/rcS2 desde GinitG se arranca G/etc/init.d/rcSG.
Desde G/etc/init.d/rcSG son arrancados los scripts %ue se a3ustan al patr&n G/etc/rcS.d/SYC:BZYC:BZVG
Desde G/etc/init.d/rcSG se arranca los scripts en G/etc/rc.boot/VG usando Grun:parts /etc/rc.bootG.
Desde G/etc/init.d/rcSG se arranca G/sbin/setup.hG .Esto en Debian Potato en SlinH era G/root/setup.shG2
Como puede "erse en inittab.K2 desde GinitG se arranca los scripts del ni"el de e3ecuci&n pasado como
ar#umento a init o en caso de ausencia los scripts correspondientes al ni"el de e3ecuci&n por
defecto. .En Debian es el 02. Para ello se usa G/etc/init.d/rcG pas(ndole el ni"el de e3ecuci&n como
ar#umento.
Como hemos "isto hay una serie de scripts destinados a procesar un con3unto de scripts contenidos
en un directorio. Esta t!cnica se usa en "arios casos:
En el caso de G/etc/init.d/rcG se procesa los scripts del directorio correspondiente a ese ni"el de
e3ecuci&n a=adiendo un ar#umento start o stop dependiendo de %ue el nombre empiece por S o por
E.
En el caso de G/etc/init.d/rcSG solo se procesan los scripts encontrados %ue empiecen por S a=adiendo
la opci&n start.
En el caso de Grunparts.R2G solo se procesa los scripts del directorio pasado como ar#umento sin
a=adir ar#umentos al script. Xa habiamos "isto %ue GrunpartsG es utili'ado con frecuencia para
procesar las tareas peri&dicas con Gcron.R2G or#ani'ando en directorios las distintas tareas
dependiendo de %ue sean diarias semanales mensuales anuales etc.
ersonalizando el proceso de arran*ue.
No decimos %ue estos scripts de arran%ue no se puedan tocar pero hacerlo es arries#ado. Por
e3emplo un script %ue no termine su e3ecuci&n colocado en G/etc/rc.bootG detendr( el proceso de
arran%ue.
Si intenta a=adir un ser"icio %ue deba estar permanentemente acti"o lo me3or es incluirlo en el
propio inittab asociado a la opci&n respawn para %ue en caso de morir el proceso init lo rearran%ue.
Sin embar#o si el proceso muere nada m(s arrancar init lo rearrancara( continuamente creando un
problema en el sistema. Afortunadamente init detectar( eso. Si init detecta %ue un proceso rearranca
m(s de /C "eces en 0 minutos suspender( durante cinco minutos el nue"o intento de arran%ue.
9iempo %ue tendr( %ue apro"echar solucionar el problema de al#una forma.
Por e3emplo. Puede intentar editar directamente G/etc/inittabG. Si no se pone ner"ioso dispone de K
minutos antes de %ue se produ'can otros 0 minutos de locura del sistema.
Si edita G/etc/inittabG desde el propio sistema el proceso init no tomar( en cuenta los cambios
mientras no se arran%ue o mientras no se le informe de ello mediante:

W init %
Si esto no le con"ence o no se le ocurre nada me3or puede rearrancar desde un sistema de dis%uete
para eliminar la entrada en inittab mientras el problema no est! solucionado. ;(s adelante se
e+plica como solucionar un problema de ol"ido de password de root y b(sicamente en este caso
habr)a %ue hacer lo mismo pero en lu#ar de editar G/etc/passwdG habr( %ue editar G/etc/inittabG.
4ecuerde %ue la modificaci&n de G/etc/inittabG es una operaci&n cr)tica %ue puede afectar a la
capacidad de arran%ue de su sistema.
En Debian se puede a=adir un script asociado a un ni"el de e3ecuci&n deseado. Para ello se coloca el
script en /etc/init.d/ y lue#o se e3ecuta Gupdate:rc.d.R2G con los ar#umentos adecuados %ue crear( los
enlaces simb&licos correspondientes.
Por e3emplo:

W update:rc.d mi:script defaults RR
Crear)a los enlaces simb&licos SRRmi:script y ERRmi:script para todos los runle"els.

W update:rc.d mi:script stop R1 / 0 1 K L start RK 0 1 K
Crear)a ER1mi:script para los ni"eles / 0 1 K y L y SRKmi:script para los ni"eles 0 1 y K.
Para eliminar ser"icios innecesarios en Debian puede hacer lo si#uiente:
Cree un directorio por e3empo G/etc/ser"icesOoff/G
Fuarde la informaci&n actua si#uiente: Gls :l :d rcV/V U /etc/ser"icesOoff/ls:l.outG y despu!s mue"a
los scripts correspondientes a los ser"icios innecesarios desde G/etc/init.d/G a G/etc/ser"icesOoff/G. .Se
pueden en lu#ar de eso eliminar los scripts pero de esta forma podemos dar marcha atr(s con m(s
facilidad si fuera necesario2.
Para cada unos de los ser"icios eliminados hacer Gupdate:rc.d nombreOser"icio remo"eG. Con ello se
eliminar(n selecti"amente todos los linHs simb&licos %ue apunten a G/etc/init.d/nombreOser"icioG
desde los directorios.
Continuamos con la descripci&n del proceso de rran%ue. Cuando arranca el sistema aparecen unos
mensa3es %ue pueden ser alterados editando G/etc/motdG G/etc/issueG y G/etc/issue.netG -ui'(s le
sorprenda "er unos caracteres e+tra=os pero son secuencias de escape destinadas a la consola. Si le
interesa comprenderlas consulte la p(#ina man de consoleOcodes.A2.
4ecordemos %ue e+isten otros scripts %ue se e3ecutan pre"iamente al establecimiento de una sesi&n
de int!rprete de comandos.
El primero %ue se e3ecuta en el caso de interpretes de compatibles con sh . sh./2 bash./2 Hsh./2
ash./2 ..2 ser( G/etc/profileG
En el caso de abrir una sesi&n con bash desde lo#in se e3ecutar( Gc/.bashOprofileG %ue a su "e'
e3ecutar( Gc/.bashrcG. Si la sesi&n no se arranca desde lo#in . Por e3emplo si arrancamos una
subshell desde un editor.2 solo se e3ecutar( Gc/.bashrcG.
7ay otros scripts %ue se e3ecutan para arrancar sesiones de [ 8indow mediante +dm./2 o start+./2.
Para confi#urar el arran%ue de +windows mediante el arra%ue de una serie de procesos en
bacH#round %ue personali'an el arran%ue en modo #r(fico se usa Gc/.+initrcG en su defecto se usar(
G/etc/[///+init/+initrcG.
Para establecer el ser"idor se usar( Gc/.+ser"errcG en su defecto se usar( G/etc/[///+init/+ser"errcG.
Arran%ue directo con sh sin usar init.
E+iste una forma de arrancar usada en emer#encias %ue puede sal"ar en caso de apuro pero debe
usarse con la m(+ima precauci&n.
Consiste en arrancar usando en lu#ar del proceso init hacerlo arrancando directamente una shell.
Eso se puede hacer pasandole al Hernel la opci&n Ginit@/bin/shG. Esto se puede hacer desde lilo por
e3emplo. De esta forma se podr)a montar la partici&n ra)' en modo lectura/escritura y modificar
nue"amente el fichero da=ado cambiar una password ol"idada o cual%uier otra cosa.
Si lo hacemos as) hay %ue tener en cuenta %ue no estamos usando un modo de funcionamiento
normal y por ello antes de rearrancar con"iene ase#urarse %ue el sistema de ficheros %ueda
perfectamente escrito sin operaciones de entrada salida pendientes en memoria. Para ello ha#a lo
si#uiente.

W sync
W sync
W shutdown :r now
Por el contrario si apa#a de cual%uier manera el da=o podr)a ser considerable e incluso podr)a "erse
obli#ado a reinstalarlo todo.
Al#unas "eces se arranca de esta forma cuando se sospecha %ue el fichero correspondiente al
e3ecutable GinitG pudiera estar da=ado impidiendo totalmente el arran%ue pero podr)a ocurrir %ue
arrancanco con GshG tampoco lo#remos nada. 9anto GinitG como GshG usan librer)as compartidas
comunes y un da=o en al#una de estas librer)a impedir( el arran%ue usando cual%uiera de las
"ersiones normales tanto de GinitG como de GshG.
*na librer)a din(mica compartida consiste en un con3unto de funciones %ue pueden car#arse en
memoria una sola "e' y ser apro"echadas y compartidas por "arios procesos funcionando
simultaneamente.
Por e3emplo Glibc.so.LG G/lib/ld:linu+.so.0G son librer)as comunes a muchos pro#ramas en Debian
0.0. Puede comprobarlo consultando las librerias compartidas usadas por GinitG y GshG. Para ello ha#a
lo si#uiente:
W ldd /bin/sh /sbin/init
5btendr( lo si#uiente:
/bin/sh:
libncurses.so.K @U /lib/libncurses.so.K .C+ACC/BCCC2
libdl.so.0 @U /lib/libdl.so.0 .C+ACCKMCCC2
libc.so.L @U /lib/libc.so.L .C+ACCKbCCC2
/lib/ld:linu+.so.0 @U /lib/ld:linu+.so.0 .C+ACCCCCCC2
/sbin/init:
libc.so.L @U /lib/libc.so.L .C+ACC/BCCC2
/lib/ld:linu+.so.0 @U /lib/ld:linu+.so.0 .C+ACCCCCCC2
,a libc contiene todas funciones de la conocid)sima librer)a estandar de C y al#unas funcionalidades
a=adidas por FN*. este curso no est( enfocado a la pro#ramaci&n. De dotas formas si necesita
informaci&n sobre esta librer)a puede consultarlo usando:
W info libc
7ay %uien mantiene una "ersi&n compilada est(ticamente de init o sh. En realidad no es necesario.
En caso de %ue el sistema ten#a deteriorada librer)as din(micas lo apropiado es partir de un disco de
rescate y recuperar desde copias de se#uridad anti#uas todo el sistema.
Nue es un C/ de rescate y para *ue sirve.
*n sistema puede sufrir al#$n accidente o ata%ue %ue le impida "ol"er a arrancar. ,a p!rdida de
informaci&n de un sistema se puede subsanar mediante copias de se#uridad como las %ue ya se
comentaron en lecciones anteriores. Si se ha perdido absolutamente todo resulta e"idente %ue habr(
%ue recurrir a la $ltima copia de se#uridad #lobal pero una copia #lobal resulta muy costosa y
%ui'(s no se ha#a con demasiada frecuencia. Por ello #eneralmente se hace ocasionalmente y se
complementan con copias incrementales posteriores.
A pesar de ello si se recupera un sistema a partir de la $ltima copia puede haber informaci&n no
respaldada por ser demasiado reciente.
Afortunadamente la p!rdida de la capacidad de arrancar no si#nifica %ue se trate de un desastre %ue
obli#ue a recuperar todo el sistema desde las copias de se#uridad o "ol"iendo a instalar etc.
Feneralmente se puede recuperar el arran%ue inter"iniendo e+clusi"amente donde reside el
problema.
De esta forma la recuperaci&n resultar( mas completa m(s r(pida y puede %ue nos sir"a para
pre"enir un caso similar en el futuro.
Para poder arrancar de forma independiente y poder iniciar la reparaci&n del sistema es para lo %ue
se usan los dis%uetes o CDGs de rescate.
E"identemente en caso del CD es importante %ue nuestro sistema sea capa' de arrancar desde CD.
Para ello las opciones de arran%ue correspondientes deben de estar habilitadas en la C;5S.
Si nuestro sistema no puede arrancar en modo al#uno desde CD45; habr( %ue conformarse con el
uso de un dis%uete de rescate pero en un dis%uete de rescate no caben demasiadas utilidades de
ayuda.
Puede darse el caso %ue un sistema %ue arranca necesite ser reparado desde un sistema de rescate.
Por e3emplo si el sistema de ficheros est( deteriorado y no podemos usar de modo fiable las
utilidades del sistema para autorrepararse usaremos el CD de rescate.
;uchas distribuciones permiten %ue al#uno de los CDs de instalaci&n pueda ser usado para arrancar
en modo rescate. *na "e' %ue un sistema de rescate ha arrancado tenemos un pe%ue=o sistema
,inu+ arrancado. *na de las formas en las %ue un disco de rescate puede arrancar es de forma
totalmente independiente sin necesidad de usar nin#$n disco duro para funcionar.
Feneralmente se recurre a usar ramdisH para montar la partici&n ra)' aun%ue #eneralmente menos
adecuado tambi!n podr)a usarse para eso un dis%uete.
En Debian tambi!n podemos introducir el CD de instalaci&n y pro#resar hasta seleccionar el teclado
y el idioma para poder traba3ar c&modamente. Despu!s de esto se puede abandonar la instalaci&n y
continuar abriendo una sesi&n nue"a en un seudoterminal. Por e3emplo y continuar como si
estu"i!ramos en modo rescate o tambi!n se puede arrancar desde este CD usando distintas
modalidades. Por e3emplo indicando la partici&n ra)'. Desde un sistema Debian tambi!n se puede
montar el cdrom de instalaci&n y crear con ello un par de dis%uetes de rescate. Para ello montamos
el cdrom en /cdrom y ponemos un dis%uete formateado en la dis%uetera y lue#o hacemos:
W dd if@/cdrom/install/rescue.bin of@/de"/fdC bs@/H count@/AAC
Esto crea el rescue disH con el %ue se arranca el e%uipo.
W dd if@/cdrom/install/root.bin of@/de"/fdC bs@/H count@/AAC
Con esto otro se crea el root disH %ue pedir( mientras arran%ue.
Si usamos la partici&n ra)' en disco duro solo ser"ir( para casos en los %ue el problema solo afecte a
elementos muy concretos del arran%ue tales como Hernel car#ador de arran%ue etc. Pero no para
casos donde la propia partici&n ra)' est! comprometida por al#$n problema.
En cual%uier caso un disco de rescate deber( incluir un con3unto de herramientas adecuadas para
solucionar todo tipo de emer#encias.
En Debian como ya hemos dicho el primer CD es multiprop&sito. Por defecto empe'ar)a el proceso
de instalaci&n pero leyendo atentamente en las primeras pantallas de arran%ue con lilo descubrir( las
distintas posibilidades para arrancar.
Si se "a a usar una partici&n ra)' independiente por e3emplo en ramdisH se podr( usar un CD de
rescate de una distribuci&n cual%uiera para rescatar un sistema de otra distribuci&n distinta. *n
administrador de sistemas con "arios sistemas ,inu+ a su car#o solo necesita un CD de rescate para
solucionar una #ran cantidad de emer#encias en cual%uier sistema ,inu+. Al#unos de estos CDs
especialmente dise=ados para rescate se ofrecen en su "ersi&n miniatura del tama=o de una tar3eta
de cr!dito.
*na "e' arrancado el sistema con"iene comprobar %ue los discos est(n perfectamente reconocidos
por el Hernel del sistema de rescate. Para ello ha#a:
W fdisH :l
5btendr( la informaci&n de los discos presentes en su sistema y sus diferentes particiones. Esta es
una informaci&n %ue usted deber)a conser"ar en papel por si acaso al#$n d)a se borra por accidente
la tabla de particiones. ,a perdida de la tabla de particiones no es un fallo frecuente pero puede ser
muy #ra"e ya %ue pro"oca la p!rdida de absolutamente toda la informaci&n sal"o %ue se "uel"a a
particionar e+actamente todo i#ual %ue estaba. El particionado se hace con fdisH.R2 %ue es una de
las utilidades %ue no debe faltar en un disco de rescate. ,a lista de las herramientas m(s importantes
%ue debe contener un CD de rescate son:
*n Hernel capa' de reconocer una #ran "ariedad de sistemas de ficheros y de dispositi"os de discos.
9odo tipo de herramientas de dia#n&stico e+ploraci&n manipulaci&n y reparaci&n de sistemas de
ficheros y de discos. ,a lista ser)a muy lar#a. Casi todas son muy importantes.
Un editor sencillo de texto.
Si %ueda espacio otras muchas utilidades de uso frecuente pueden "enir muy bien.
6;P4ESC6ND6<,E. Compruebe %ue su sistema de rescate contiene las utilidades adecuadas para
recuperar las copias de se#uridad del sistema. Empa%uetado y desempa%uetado de ficheros .afio
cpio tar2 compresor y descompresor .#'ip un'ip b'ip0 etc2 otros como .find etc2 dri"ers para los
dispositi"os de disco y de unidad de respaldo.
Ase#urese haciendo copias pe%ue=as de prueba y recuperandolas arrancando desde el CD o
dis%uete de rescate. 9en#a mucho cuidado. ,a recuperaci&n de un bacHup es una operaci&n %ue
e+i#e la m(+ima prudencia. *n error puede ser fatal. 4epase el cap)tulo dedicado a las copias de
se#uridad. Dedi%ue tiempo a estudiar y dominar sus herramientas de copia y respaldo.
El tiempo #astado en dominar estos temas es tiempo #anado. ,o normal en personas %ue
administran ellos mismos sus e%uipos y %ue no dominan estos temas es %ue tarde o temprano
pierdan un mont&n de d)as o semanas de "alioso traba3o.
,o me3or es ilustrar el uso de los dis%uetes o CDs de rescate mediante mediante un e3emplo %ue es
todo un cl(sico. 5l"idar la password de root. 5l"idar la password de root
No se preocupe.
Este es un problema relati"amente frecuente. Afortunadamente no es #ra"e. Al#o %ue muchos
pre#untan es: j Si un ol"ido de la password de root puede ser solucionado f(cilmente entonces %ue
utilidad tiene la password de root S
,a password no impedir( %ue al#uien se acer%ue a su ordenador y lo destroce a martilla'os o lo
robe. 9ampoco e"ita %ue otras personas con acceso f)sico a su ordenador puedan cambiar la
password. Se asume %ue usted no "a a permitir acceder f)sicamente al lu#ar donde se encuentra su
e%uipo a cual%uier persona.
boot: aliasOarran%ue init@/bin/bash
Esto hace %ue se arran%ue una sesi&n shell sin necesidad de poner password. Es una operaci&n
bastante delicada repase las instrucciones relati"as a Arrancar con init@/bin/bash. *na "e'
arrancado basta cambiar la password. usaremos el comando passwd./2.
W passwd root
5tra forma ser)a arrancar desde un disco de rescate %ue no use nuestra partici&n ra)' para arrancar.
Deber( crear un directorio temporal %ue nosotros llamaremos mnttmp y montar en !l nuestra
partici&n ra)' en modo lectura escritura. 4epase el comando Gmount.R2G.
Despu!s de eso entramos en G/mnttmp/etc/passwdG y eliminamos el campo de la cla"e. En este
fichero Gpasswd.K2G
cuenta:contrase=a:*6D:F6D:FEC5S:directorioOhome:int!rprete
<asta usar un editor en ese fichero para cambiar por e3emplo:
root:+:C:C:root:/root:/bin/bash por root::C:C:root:/root:/bin/bash
Por
root::C:C:root:/root:/bin/bash por root::C:C:root:/root:/bin/bash
Si e+iste un fichero G/mnttmp/etc/shadowG deber( eliminar i#ualmente el se#undo campo en este otro
fichero. ;uy importante. Antes de rearrancar desmonte el sistema de ficheros haciendo lo si#uiente.
W sync
W sync
W umount /mnttmp
W shutdown :r now
Con ello la pr&+ima "e' %ue se ha#a lo#in: root no le pedir( nin#una password. No debe ol"idar dar
de alta una password usando el comando passwd.
"ecuperar un sistema de .ic7eros daOado
Puede ocurrir %ue un sistema de ficheros da=ado no pueda ser reparado de forma autom(tica
durante el arran%ue. En el caso de %ue el sistema detect la necesidad de che%ueo en al#una de las
particiones GfscHG las che%uear( y en caso necesario las reparar(. El orden de los re#istros en
G/etc/fstabG ."ease Gfstab.K2G es importante por%ue GfscH.R2G Gmount.R2G y Gumount.R2G recorren fstab
secuencialmente a medida %ue traba3an. El se+to campo .fsOpassno2 lo usa el pro#rama fscH.R2
para determinar el orden en el cual se "an a che%uear los sistemas de ficheros cuando el sistema
arranca. El sistema de ficheros ra)' deber)a lle"ar fsOpassno i#ual a / y otros sistemas de ficheros
deber)an lle"ar fsOpassno i#ual o superior a 0. Sistemas de ficheros en un mismo disco ser(n
che%ueados secuencialmente y si tienen el mismo "alor de .fsOpassno2 el orden ser( el orden de los
re#istros en G/etc/fstabG pero sistemas de ficheros en diferentes discos con el mismo "alor para
fsOpassno ser(n che%ueados al mismo tiempo para utili'ar el paralelismo disponible en el e%uipo.
Si fsOpassno .se+to campo2 no est( presente o tiene un "alor de C fscH asumir( %ue ese sistema de
ficheros no necesita ser che%ueado.
En caso de %ue la partici&n con el sistema de ficheros ra)' no termine satisfactoriamente no se
prosi#ue con el monta3e de otros sitemas de ficheros sino %ue el sistema solicitar( la contrase=a de
root para e3ecutar fscH manualmente.
Si esto le ocurre al#una "e' y no es usted un e+perto limitese a che%uear la partici&n con la opci&n
:y %ue en lu#ar de pre#untar cosas %ui'(s incompresibles para usted asumir( contestaci&n
afirmati"a por defecto ya %ue es la contestaci&n menos comprometida en estos casos. *na "e'
finali'ado el che%ueo deber( hacer Gshutdown :r nowG para rearrancar. ;ientras tanto deber( cru'ar
los dedos. .Feneralmente tiene !+ito2.
No es posible che%uear un sistema de ficheros si este est( montado con opciones de
lectura/escritura. Si se lle#ara a for'ar tal posibilidad de al#una manera la destrucci&n de todo el
sistema de ficheros ser)a ine"itable pero afortunadamente fscH se da cuenta de ello y no lo intentar(
che%uear si se da tal circunstancia.
fscH normalmente no hace nada si la partici&n parece estar correcta pero si usted %uiere for'ar un
che%ueo a pesar de todo deber( usar la opci&n :f. En el supuesto %ue no sea un e+perto contin$e
usando la opci&n :y. Es decir
W fscH :fy /de"/....
fscH.R2 actualmente est( implementado como un intermediario %ue a su "e' usar( al#$n fscH
espec)fico para el tipo de sistema de ficheros detectado sobre esa partici&n. ,a nomenclatura para
estos comandos espec)ficos es fscH.tipofs. Por e3emplo fscH.e+t0.R2 %ue puede usarse directamente
en lu#ar de fscH. Deber)a consultar las p(#inas man de ambos comandos si est( usando sistema de
ficheros linu+ e+t0. El comando mount.R2 usado sin ar#umentos le puede informar sobre los tipos
de ficheros %ue actualmente est(n montados en su sistema.
,a informaci&n cla"e de un sistema de ficheros se sit$a en el superblo%ue. Esta estructura est(
duplicada por moti"os de se#uridad. Si al#una "e' obtiene un error indicando %ue no se puede
montar el sistema de ficheros debido a %ue el superblo%ue est( da=ado intente hacer lo si#uiente sin
ol"idar la opci&n :S. 9ambi!n debe ir se#uida de un che%ue de todo el sistema de ficheros.
W mHe0fs :S /de"/...
W e0fscH :fy /de"...
Esta operaci&n no #aranti'a la recuperaci&n de sus sistema de ficheros
,a informaci&n del superblo%ue puede ser obtenida mediante dumpe0fs.R2 pero si usted no conoce
en profundidad la estructura de su sistema de ficheros no le resultar( demasiado $til. A pesar de ello
encontrar( al#una cosa %ue si le puede interesar. Por e3emplo le permitir( saber cual es el m(+imo
n$mero de "eces %ue se puede montar su sistema de ficheros antes de estimar necesario un che%ueo
y cuantas "eces ha sido montado desde el $ltimo che%ueo y en %ue fecha tu"o lu#ar. ,o %ue
%ueremos decir es %ue tampoco es necesario entenderlo todo para sacarle al#$n pro"echo a este
comando.
"ecuperar un disco duro daOado
Puede ocurrir %ue un sistema se "uel"a inestable y solicite con frecuencia el che%ueo de al#una
partici&n. Puede %ue a pesar de %ue aparentemente el fscH solucione el problema este reapare'ca
nue"amente con mucha frecuencia o incluso a cada nue"o arran%ue.
Esto se debe #eneralmente a un da=o en su disco duro. ,os moti"os pueden ser "arios. Puede ser
una a"er)a #ra"e o puede ser %ue al#$n sector como consecuencia de un corte de lu' durante una
escritura f)sica a disco ten#a deficiencias de formato a ba3o ni"el en los sectores #rabados es como
si %uedaran #rabados de forma incompleta debido al corte de suministro el!ctrico en el preciso
instante de esa operaci&n.
Este tipo de da=os puede afectar a cual%uier partici&n y la situaci&n no es e%ui"alente. Se puede "er
afectada la partici&n ra)' al#una otra partici&n de datos o pro#ramas o una partici&n de intercambio
swap.
*na partici&n de swap da=ada pro"ocar( cuel#ues del sistema de forma m(s o menos aleatoria.
Si al#$n pro#rama o librer)a din(mica compartida esta da=ada puede %ue el sistema no pueda
arrancar normalmente y deba arrancar desde un sistema de rescate. En cual%uier caso en este tipo de
situaciones puede %ue los elementos destinados a reparar su sistema est!n i#ualmente da=ados y por
ello lo me3or es arrancar desde un disco de rescate y hacer un che%ueo a todas las particiones
incluidas las particiones de swap.
De esta forma se cerciora uno de la amplitud del da=o.
Puede intentar usar badblocHs.R2 pero si no funciona adecuadamente puede %ue al#$n blo%ue
defectuoso est! afectando al propio badblocHs o a al#una de las librer)as din(micas.
*se badblocHs desde al#$n disco de rescate. ,os primeros CDs de las distribuciones suelen ofrecer
la opci&n de arrancar en modo rescue.
badblocHs es independiente del tipo de sistema de ficheros %ue use la partici&n. Puede ser e+t0
e+t1 reiserfs linu+swap umsdos "fat etc.
No es necesario usar un CD de rescate de la misma distribuci&n. Jale cual%uiera. ,o $nico %ue se
necesita es pasar badblocHs y lue#o se pueden hacer "arias cosas. ,a opci&n :o de badblocHs
produce una salida %ue puede ser usada por e0fscH.R2 o por mHe0fs.R2 ambos con la opci&n :l. Estos
pro#ramas tambi!n admiten la opci&n :c para hacer %ue e0fscH o mHe0fs usen a su "e' badblocHs.
4ealmente es muy sencillo y con"eniente sin embar#o le recomendamos lo si#uiente.
Pase badblocHs a todos los sistemas de ficheros presentes en el disco afectado uno a uno y anote o
#uarde lo resultados. .Por e3emplo rediri#iendo salida a un disco sano2.
Pase e0fscH con la opci&n :c en las particiones da=adas. De esta forma los sectores defectuosos ya
no se usar(n
Si el problema persiste sa%ue una o dos copias de se#uridad. -ui'(s ten#a %ue ol"idarse de sus
utilidades y necesite recurrir a las utilidades de su disco de rescate para eso.
Jerifi%ue muy bien sus copias de se#uridad.
formatee primero a ba3o ni"el usando al#una utilidad de la <65S u otra proporcionada por el
fabricante del disco duro.
Formatee usando mHe0fs :c.
"ecupere sus copias de se,uridad.
Antes de usar el sistema "uel"a a pasar badblocHs. Si el problema continua o "uel"e a aparecer al
poco tiempo y tiene un m)nimo de aprecio a sus datos considere seriamente tirar el disco duro a la
basura.
Con esto terminamos este denso cap)tulo y lleno de su#erencias del tipo mire usted tal cosa o
consulte usted tal otra. Para la asimilaci&n de este cap)tulo se e+i#e m(s de una lectura y una
cantidad de traba3o personal curioseando a fondo un mont&n de cosas. -ui'(s a usted le baste
conocer superficialmente estas cosas para en caso de apuro poder locali'ar el remedio adecuado
pero en ese caso #uarde este material en m(s de un ordenador o sa%ue una copia por impresora.
-ui'(s cuando m(s lo necesite no pueda acceder a !l precisamente por tener un serio problema en
su e%uipo.
Si si .... ya lo s! pero lo siento. Este curso solo se edita en formato 79;, y no %ueda muy est!tico
al imprimir.
No obstante e+iste la libertad para %ue a%uel %ue lo desee adapte el formato se#$n sus necesidades.
En tal caso no estar)a de m(s compartir el fruto de su esfuer'o de la misma forma en %ue yo lo estoy
haciendo al publicar este curso.
Introduccin
Como de costumbre no "amos a profundi'ar en aspectos te&ricos sino %ue "amos a reali'ar un
enfo%ue pr(ctico de este tema. Jamos a hablar del n$cleo .Hernel2 por%ue con mucha frecuencia
resulta necesario recompilar el n$cleo para adaptarlo a las necesidades de nuestro hardware.
Para una persona %ue $nicamente pretende usar ,inu+ en un o unos pocos ordenadores simplemente
con prop&sitos personales puede %ue todo esto le suene a al#o muy complicado o no apto para
simples mortales.
,as distribuciones por re#la #eneral proporcionan un n$cleo con amplias capacidades para abarcar
una #ran cantidad de hardware disponible. Esto conduce a n$cleos poco optimi'ados por estar
sobre:dimensionados. Para a#ra"ar el problema al#unas distribuciones comerciales desaconse3an
recompilar el Hernel si no se tiene suficiente e+periencia y ad"ierten %ue en caso de recompilar el
n$cleo se pierde el derecho a la asistencia #ratuita en periodo de instalaci&n.
7ay mucha #ente %ue cree %ue la recompilaci&n del Hernel es una tarea para e+pertos. *na cosa est(
claro. Cuando se recompila un nue"o n$cleo resulta una temeridad no contemplar la posibilidad de
arrancar con el n$cleo anti#uo por si al#o falla en el nue"o. En realidad es muy f(cil ol"idar al#o y
#enerar un n$cleo %ue no sea capa' si%uiera de arrancar pero eso no es un problema si mantenemos
el anti#uo.
,o cierto es %ue la compilaci&n de un Hernel en ,inu+ es mucho m(s simple %ue en otros S5. Con
frecuencia se considera la recompilaci&n de un Hernel a medida como una tarea obli#ada ya %ue con
ello se puede obtener un n$cleo m(s reducido y personali'ado a nuestras necesidades. Esto resulta
especialmente interesante en los casos de ordenadores con poca 4A;.
,as primeras "ersiones del Hernel de ,inu+ resid)an )nte#ramente y permanentemente en la 4A;
f)sica del ordenador.
En la actualidad los n$cleos de ,inu+ son modulares. Es decir hay partes del Hernel %ue pueden
residir en disco y solo se car#an en el momento %ue resulte necesario. Se llaman m&dulos car#ables
y #eneralmente hay un pro#rama llamado GHerneldG encar#ado de su car#a y descar#a.
Las versiones del Pernel
7ay dos l)neas de fuentes del n$cleo. ,as de producci&n %ue son estables y las de desarrollo %ue no
lo son. ,as de desarrollo son adecuadas para los pro#ramadores %ue desean e+perimentar con
funcionalidades nue"as del Hernel o para los usuarios %ue compraron hardware %ue no est(
soportado de una manera totalmente se#ura y probada en el Hernel.
,a nomenclatura de las "ersiones del n$cleo utili'a tres n$meros separados por puntos. Por e3emplo
si hacemos Gcat /proc/"ersionG podemos obtener la "ersi&n del Hernel %ue estamos usando y %ue
podr)a ser al#o del tipo G,inu+ "ersion 0.0./MG.
El primer n$mero en nuestro caso es un G0G y representa el m(+imo ni"el de cambio posible.
De un Hernel G/.+.+G a uno G0.+.+G hay un enorme salto.
El se#undo n$mero debe considerarse de forma totalmente independiente si es par o si es
impar. ,a serie par corresponde a la serie estable y la serie impar a la de desarrollo. Por ello
a la 0.0.+ la se#uir)a la 0.A.+ y a la 0.1.+ la se#uir)a la 0.K.+. El ni"el de este curso hace
suponer %ue usted no deber)a si%uiera intentar usar la serie impar reser"ada para
desarrolladores con #anas de probar cosas nue"as para lo cual se suele usar un ordenador
especialmente reser"ado para eso y sin informaci&n "aliosa. ,os cambios en este se#undo
n$mero 0.C.+ 0.0.+ 0.A.+ realmente representan un importante cambio en el S5 y por ello
no se ase#ura la compatibilidad de todos los pro#ramas con la "ersi&n anterior. Es decir los
pro#ramas desarrollados para 0.A.+ pueden no funcionar para la "ersi&n 0.0.+ y lo %ue es
peor los pro#ramas desarrollados para 0.0.+ pueden de3ar de funcionar para las "ersiones
0.A.+. ,o cual si#nifica %ue debe acompa=arse de numerosas actuali'aciones del software.
,as distribuciones suelen facilitar estos cambios cuando se cambia a una "ersi&n superior de
esa distribuci&n.
El tercer n$mero representa #eneralmente una "ersi&n me3orada de la "ersi&n anterior
manteniendo total compatibilidad. Suele corre#ir fallos detectados y a=adir al#o de soporte
para nue"o hardware manteniendo la compatibilidad.
-ui'(s al#o de lo %ue acabamos de decir sea totalmente e+acto pero si %ue le permite entender
bastante bien todo lo %ue si#nifica esta nomenclatura.
Cuando conviene subir la versin de un Pernel R
En un ser"idor dando ser"icio en 6nternet puede resultar necesario actuali'arlo re#ularmente para
corre#ir los problemas de se#uridad %ue apare'can pero nosotros estamos tratando temas b(sicos de
administraci&n para sistemas de uso personal ya sea profesional o dom!stico. Por lo tanto si su
sistema operati"o est( funcionando correctamente y su hardware est( perfectamente soportado no
hay moti"o para actuali'arlo. ,a idea es %ue si al#o funciona no hay %ue arre#larlo.
5tra cosa es recompilar la misma "ersi&n del Hernel simplemente para cambiar al#unas cosas a
efecto de optimi'arlo. De todas formas si tiene usted noticia de %ue cierto problema o carencia se
soluciona usando una "ersi&n superior del Hernel recuerde %ue mantener los dos primeros n$meros
de la "ersi&n del Hernel es mucho m(s sencillo %ue pasar a una serie superior en la %ue el se#undo
n$mero es superior y recuerde usar siempre "ersiones pares estables.
Cuando conviene usar mdulos.
A la hora de confi#urar el Hernel tendr( %ue ir leyendo detenidamente el si#nificado de cada opci&n
y "er( %ue para al#unas opciones resultar( posible $nicamente incluirlas o no incluirlas de forma
est(tica. Es decir solo podr(n estar en el Hernel de forma permanente o no estar. Por el contrario
otras opciones admiten una tercera posibilidad %ue es su inclusi&n como m&dulo y a%u) "iene la
pre#unta interesante. Cual es la me3or forma de incluirlo S ,a respuesta es %ue todo lo %ue pueda ser
puesto como m&dulo estar( me3or como m&dulo a no ser %ue incluirlo de forma permanente resulte
imprescindible para arrancar o %ue su uso "aya a ser casi continuo. 9en#a en cuenta %ue si su Hernel
es por e3emplo un 0.0./M los m&dulos ser(n car#ados desde G/lib/modules/0.0./M/G pero para eso la
partici&n ra)' debe de estar montada y si usted tiene su partici&n ra)' en un disco ide necesitar( %ue
las opciones correspondientes a <,EODEJO6DE <,EODEJO6DED6SE deben de estar en modo
est(tico .permanente2 por %ue si est(n como m&dulos car#ables el sistema 3am(s podr)a arrancar
desde un disco ide. 7ay otras opciones %ue tambi!n pueden ser necesarias en modo est(tico
E[90OFS <6NF;9OE,F J9OC5NS5,E P45COFS etc..
Por el contrario esta claro %ue la unidad de cdrom la impresora sistemas de ficheros %ue se usen de
forma ocasional etc. pueden y deben ser confi#urados como m&dulos. Si tiene dudas deber( leer
para %ue sir"en intentando deducir si son necesarios para arrancar o no. E[90OFS es para sistema
de ficheros ,inu+ y l&#icamente es imprescindible. P45COFS es un sistema de ficheros %ue se
monta en /proc y %ue es usado por un mont&n de pro#ramas de forma casi continua. <6NF;9OE,F
permite e3ecutar la inmensa mayor)a de los binarios de ,inu+ y por ello es imprescindible etc. Si no
es capa' de lle#ar a una conclusi&n sobre si es imprescindible con"iene %ue lo pon#a como est(tico
la primera "e' %ue lo intente y si todo "a bien puede en un futuro probar a ponerlo como m&dulo
pero siendo consciente de %ue %ui'(s no arran%ue. 9odos estos cambios deben hacerse teniendo
muy claro como "ol"er a la situaci&n anterior usando el Hernel anti#uo.
rimera prueba
Suponiendo %ue usted est( usando arran%ue desde disco duro con el car#ador ,6,5 le proponemos
practicar lo si#uiente:
/. 4epase las lecciones anteriores %ue tratan sobre el arran%ue.
0. ,ocalice su Hernel actual mirando /etc/lilo.conf.
1. Sa%ue una copia de su Hernel con otro nombre distinto.
A. Edite su /etc/lilo.conf a=adiendo una entrada para usar la nue"a copia del Hernel.
K. gg 6mportante gg. E3ecute el comando GliloG.
L. 4earran%ue usando alternati"amente una copia del Hernel u otra.
En realidad estar( usando el mismo Hernel para arrancar pero de esta forma ya puede comprobar
%ue puede arrancar a su elecci&n usando dos ficheros de Hernel %ue no tendr)an por%ue haber sido
i#uales. Cuando obten#a un nue"o Hernel debe de ase#urarse %ue en caso de %ue este no arran%ue
podr( usar el anti#uo.
En cual%uier caso no le recomendamos compilar el n$cleo sin haber le)do detenidamente el cap)tulo
completo.
Instalacin a partir de las .uentes
/. ,o primero %ue tendr( %ue hacer es descar#arlo. Para ba3ar los fuentes del Hernel e+isten
muchos sitios en 6nternet para poder hacerlo. Por e3emplo ftp://ftp.us.Hernel.or#. Puede
consultar en http://mirrors.Hernel.or# para locali'ar otros lu#ares adecuados. Jamos a
suponer %ue deseamos instalar un Hernel 0.A./C. *na "e' descar#ado tendremos un fichero
empa%uetado y comprimido. Probablemente al#o similar a linu+:0.A./C.tar.#' o linu+:
0.A./C.tar.b'0.
0. Cree un directorio 0.A./C .mHdir 0.A./C2
1. Con"iene en#ancharlo a un linH simb&lico /usr/src/linu+. Compruebe si en /usr/src e+iste un
directorio o un linH simb&lico Glinu+G.
/. Si no e+iste un directorio o un linH simb&lico Glinu+G.
/. Cree un linH simb&lico Glinu+G mediante: Gln :s 0.A./C linu+G
0. Si e+ist)a un directorio Glinu+G.
/. 4enombrarlo con el nombre de la "ersi&n correspondiente. Por e3emplo 0.A.0
mediante: Gm" linu+ 0.A.0G
0. Cree un linH simb&lico Glinu+G mediante: Gln :s 0.A./C linu+G
1. Si e+ist)a un linH simb&lico Glinu+G.
/. <orre el linH simb&lico mediante: Grm linu+G.
0. Cree un linH simb&lico Glinu+G mediante: Gln :s 0.A./C linu+G
A. Desp$es hay %ue descompactar.
/. Para linu+:0.A./C.tar.#' usar Gtar +'"f linu+:0.A./C.tar.#'G
0. Para linu+:0.A./C.tar.b'0 usar Gb'cat linu+:0.A./C.tar.b'0 > tar +"G
Esto e+pande el fichero comprimido "olcando su contenido en un directorio linu+ pero como
nosotros lo hemos preparado lo meter( en 0.A./C #racias al linH simb&lico sin afectar al
Hernel anterior.
K. Situese ahora dentro del directorio linu+ :U 0.A./C. Comprobar( %ue e+iste un ;aHefile. Este
fichero es el %ue determina la forma y secuencia en %ue se compilar( el Hernel as) como
otras acciones de preparaci&n y confi#uraci&n.
L. ,a primera "e' %ue se compila un nue"o Hernel con"iene hacer: GmaHe mrproperG y no ser(
necesario "ol"erlo a hacer cada "e' %ue se recompile aun%ue sea con una confi#uraci&n
distinta. 9en#a en cuenta %ue GmaHe mrproperG eliminar( el fichero %ue #uarda la
confi#uraci&n de la $ltima compilaci&n del Hernel. G/usr/src/linu+/.confi#G y #enerar( un
G.confi#G con "alores por defecto los cuales pretenden resultar adecuados para la mayor)a de
los casos.
M. Para confi#urar el Hernel desde consola el m!todo m(s c&modo es usar GmaHe menuconfi#G.
Para [ 8indow se puede usar GmaHe +confi#G m(s amistoso pero re%uiere tener bien
confi#urado el entorno #r(fico. ,a confi#uraci&n del Hernel es una labor delicada %ue
trataremos en una secci&n posterior.
R. Para compilar el Hernel habr( %ue e3ecutar una serie de pasos secuencialmente. GmaHe dep _
maHe clean _ maHe b'ima#eG Esto de3ar( un Hernel en el fichero
G/usr/src/linu+/arch/i1RL/boot/b'ima#eG Si tiene dudas por%ue le ha parecido "er al#$n error
compruebe la fecha de creacion de este fichero para ase#urarse de %ue es el %ue acaba de
crear. Para usar este Hernel habr( %ue a=adirlo al fichero de confi#uraci&n de ,6,5 o del
car#ador %ue est! usando. ,a simple sustituci&n del Hernel anti#uo no le permitir)a arrancar
con el Hernel anti#uo si al#o falla. 9ambi!n se puede #enerar directamente el Hernel de
arran%ue sobre un dis%uete desde el cual el sistema ser( capa' de arrancar. Para eso en lu#ar
de GmaHe b'ima#eG use GmaHe b'disHG. 5tra alternati"a m(s %ue no "amos a e+plicar es usar
b'lilo. Es m(s f(cil e%ui"ocarse y no poder arrancar o sobreescribir el Hernel anti#uo no
pudiendo "ol"er a usarlo. En Debian se puede construir un dis%uete de arran%ue mediante el
comando GmHbootG %ue necesita como par(metro la ruta al Hernel.
B. Si la compilaci&n fall& leer el 4EAD;E para saber si el compilador es el adecuado para
compilar ese n$cleo. Error Si#nal // ,a compilaci&n del Hernel es un proceso muy e+i#ente
y resulta una "erdadera prueba de fue#o para la #esti&n de la memoria. Al#unas "eces una
memoria aparentemente sana falla y pro"oca un error Gsi#nal //G durante la compilaci&n del
n$cleo. Esto puede ocurrir por e3emplo si los chips usados para la memoria 4A; no tienen
e+actamente la misma "elocidad de acceso o por al#unos otros problemas en su hardware.
/C.Sal"o %ue el Hernel fuera compilado en modo est(tico %ue #enera un Hernel enorme poco
eficiente y solo se usa para casos especiales lo m(s habitual es %ue ten#a %ue #enerar los
m&dulos y %ue ten#a %ue instalarlos. Si est( recompilando la misma "ersi&n de su Hernel
pero con opciones distintas estar( modificando cosas %ue anteriormente se usaban con el
Hernel anti#uo .el %ue est( actualmente funcionando2 y por lo tanto dar marcha atr(s para
de3arlo todo como estaba puede ser m(s complicado. Si por el contrario est( compilando una
"ersi&n distinta de la actual los m&dulos se instalar(n en un lu#ar diferente. Para la
compilaci&n e instalaci&n de los m&dulos ha#a lo si#uiente: .maHe modules `` maHe
modulesOinstall 2. Por lo tanto le aconse3amos usar un Hernel diferente al %ue ya usa para
mantener una "ersi&n anti#ua sin problemas.
//.7ay "arias formas de arrancar con un determinado Hernel. Si arranca por e3emplo desde un
dis%uete ;SD5S con loadlin.e+e bastar( duplicar el dis%uete y sustituir el Hernel. Si us&
b'lilo bastar( #enerar un dis%uete nue"o. En ambos casos conser"e el anti#uo dis%uete de
arran%ue durante al#$n tiempo. Eti%uete correctamente los dis%uetes. 4ecuerde %ue con
Grde".R2G se puede retocar la ima#en de un Hernel ya sea en dis%uete o en disco duro por
e3emplo para establecer el tama=o de la ram o la partici&n rai' o el modo "ideo de consola.
Para arrancar desde disco duro tambi!n hay "arias formas. Dependiendo del car#ador como
ya hemos e+plicado tendr( %ue copiar el nue"o Hernel al lu#ar adecuado para %ue el
car#ador lo use. Comentaremos $nicamente el caso de usar el car#ador ,6,5 %ue es el m(s
utili'ado.
/. Copie el Hernel G/usr/src/linu+/arch/i1RL/boot/b'ima#eG a G/boot/b'ima#e:0.A./CG.
0. Copie el nue"o fichero G/usr/src/linu+/System.mapG creado durante la compilaci&n a
G/boot/System.map:0.A./CG
1. Es importante %ue sepa utili'ar ,6,5 %ue se e+plic& en un cap)tulo anterior. ,a
confi#uraci&n de ,6,5 se #uarda en /etc/lilo.conf. Partiremos de un e3emplo:
boot = /dev/hda
delay = 40
vga = normal
root = /dev/hda1
read-only
image = /boot/bzimage.2.4.2
label = linux.2.4.2
other = /dev/hda3
label = dos
table = /dev/hda

9enemos el Hernel anti#uo en G/boot/b'ima#e.0.A.0G para a=adir una nue"a entrada
para G/boot/b'ima#e:0.A./CG har)amos los si#uiente:
boot = /dev/hda
delay = 40
vga = normal
root = /dev/hda1
read-only
image = /boot/bzimage.2.4.2
label = linux.2.4.2
image = /boot/bzimage.2.4.10
label = linux.2.4.10
other = /dev/hda3
label = dos
table = /dev/hda

,&#icamente los nombres .label2 pueden ser diferentes. Solo deben ser distintos entre
ellos y %ue sir"an para recordar %ue Hernel es. Es muy importante una "e' editado y
sal"ado G/etc/lilo.confG no ol"idarse de e3ecutar el comando GliloG ya %ue de otra forma
el sistema no arrancar( la pr&+ima "e'.
/0.,a primera "e' %ue arran%ue con un nue"o Hernel con"iene %ue e3ecute el comando Gdepmod
:aG. Esto che%uea las dependencias de los m&dulos usando el fichero Getc/modulesG. Este
es%uema resulta sencillo y es el %ue se utili'a en Debian pero otras distribuciones usan un
es%uema diferente para poder arrancar diferentes Hernels con diferentes con3untos de
m&dulos. Por e3emplo en 4ed7at e+iste un archi"o G/etc/rc.d/modulesG %ue sir"e para
determinar la ubicaci&n de los diferentes con3untos de m&dulos. Jease depmod.R2 y
modules.K2. Para la car#a y descar#a manual de los diferentes m&dulos consulte
modprobe.R2 insmod.R2 rmmod.R2 y lsmod.R2. Nin#uno de ellos efectua cambios
permanentes en su sistema. Para determinar cuales son los m&dulos %ue deben car#arse de
forma autom(tica e+isten distintas herramientas para las distintas distribuciones.
Concretamente para Debian e+iste GmodconfG %ue es una herramienta dise=ada a base de
men$s y es muy f(cil y a#radable de usar. Permite determinar los m&dulos %ue ser(n
car#ados de forma autom(tica.
/ocumentacin
,a documentaci&n espec)fica de su n$cleo se encuentra en el directorio
G/usr/src/linu+/Documentation/G Si tiene dudas sobre el soporte de determinado 7ardware o su
confi#uraci&n en el Hernel es en este lu#ar donde tiene %ue buscar. *se #rep para buscar.
/usr/src/linu+/Documentation/Chan#es le permitir( saber los re%uisitos del nue"o Hernel. Contiene
un listado con las "ersiones m)nimas necesarias de determinados pro#ramas compatibles con ese
Hernel. Si la "ersi&n del Hernel solo difiere en el $ltimo n$mero de "ersi&n la compatibilidad con
Hernels anteriores de esa misma serie est( #aranti'ada.
Con.i,uracin
Es recomendable sal"ar el G.confi#G con un nombre distinto para e"itar perderlo al hacer GmaHe
mrproperG o al hacer GmaHe menuconfi#G etc. De esa forma si #eneramos un nue"o Hernel con
muchas opciones distintas y no conse#uimos %ue funcione ni sabemos %ue opciones son las %ue
est(n mal ele#idas podremos "ol"er a la confi#uraci&n inicial y a partir de ella ir #enerando nue"os
Hernel "ariando cada "e' pocas cosas para detectar cual es la opci&n %ue da problemas. Con"iene
usar un nombre lar#o y descripti"o como por e3emplo G.confi#.ori#inal.distribucionG o
G.confi#.sinsoporte.sonidoG etc. y #uardarlo por un tiempo.
Si no lo ha mirado nunca mire su G.confi#G mediante Gless .confi#G. Podr( "er al#o del tipo:
....
CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_SYSCTL is not set
CONFIG_BINFMT_AOUT=m
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_MISC is not set
....
Es decir %ue el resultado de una confi#uraci&n es la creaci&n de un fichero con una lista de opciones
y sus "alores. ,as opciones %ue no se incuiran aparecen comentadas con un GWG a principio de l)nea.
E"identemente las opciones para confi#urar un Hernel son las mismas independientemente del
procedimiento maHe loO%ueOseaOconfi# empleado.
Jamos a suponer %ue confi#uramos desde consola de te+to. ,as opciones pueden aparecer en
distinto estado:
GYVZG 5pci&n est(tica seleccionada.
GY ZG 5pci&n est(tica no seleccionada.
GTVUG 5pci&n car#able seleccionada en modo est(tico.
GT;UG
5pci&n car#able seleccionada como m&dulo
car#able.
GT UG 5pci&n car#able no seleccionada.
Para alterar el estado de las diferentes opciones se usan la teclas GNG G;G GXG y la barra de espacio.
Esta $ltima permite ir "ariando las opciones por las diferentes posibilidades. ,as otras determinan
las si#uientes transiciones de estados.
GYVZG ::.N2::U GY ZG
GY ZG ::.X2::U GYVZG
GTVUG ::.N2::U GT UG
GT UG ::.X2::U GTVUG
GTVUG ::.;2::U GT;UG
GT UG ::.;2::U GT;UG
GT;UG ::.N2::U GT UG
GT;UG ::.X2::U GTVUG
*sando GmaHe menuconfi#G desde /usr/src/linu+. Aparecer( el si#uiente men$:
Puede usar las teclas de flechas "erticales para recorrer las opciones del men$. ,as pociones %ue
disponen de la indicaci&n G:::UG son a%uellas %ue acceden a un submen$. Seleccione la primera y
aparecer( el si#uiente submen$:
Puede "er %ue aparece una sola opci&n. Si est( seleccionada GYVZG con"iene #eneralmente
deseleccionarla GY ZG. Para ello pulse la tecla GNG. Con ello el presente men$ ocultar( todas las
opciones consideradas e+perimentales. Dependiendo del hardware puede "erse obli#ado a usar esta
opci&n. ,o l&#ico es %ue la documentaci&n del fabricante mencione tal necesidad pero al#unos
fabricantes de hardware no ofrecen mucha informaci&n sobre el uso de sus productos en ,inu+.
Feneralmente esta informaci&n se obtiene buscando en la web.
Si necesita incluir la opci&n deber( usar la tecla GXG. En este caso esta opci&n no est( disponible para
ser incluida como m&dulo. Si fuera as) en lu#ar de GYVZG o GY ZG fi#urar)a GTVUG GG o GT UG para indicar
respecti"amente opci&n incluida est(ticamente en el Hernel .se selecciona con GXG2 opci&n
seleccionada como m&dulo car#able .se selecciona con G;G2 u opci&n no seleccionada. .se
deseleciona con GNG2 en este caso no es aplicable el concepto de m&dulo a esta opci&n ya %ue solo
estamos eli#iendo una forma de funcionamiento de menuconfi# para %ue muestre m(s o menos
opciones como disponibles. ,as primeras "eces %ue se usa menuconfi# todo es muy nue"o y
estamos obli#ados a leer #ran cantidad de informaci&n en in#l!s #eneralmente. Para acceder a la
informaci&n relati"a a una opci&n basta situarse en esa opci&n y pulsar la tecla GSG o hacer clicH en
el bot&n G7elpG.
Si no entendemos nada de lo %ue pone y no tenemos ni idea de lo %ue nos con"iene hacer lo me3or
es "ol"er a leer la $ltima parte de esa e+plicaci&n donde se e+plica cual es la opci&n m(s
recomendable en caso de no tenerlo claro.
Juel"a al men$ principal usando la tecla GESCG o pulsando el bot&n GE+itG. Seleccione a continuaci&n
la se#unda opci&n:
Este men$ muestra "arias opciones para distintas familias de procesadores. Si usted selecciona una
opci&n para un procesador inferior al %ue realmente tiene se#uramente el Hernel funcionar( aun%ue
puede %ue no lo ha#a apro"echado todas las capacidades de su procesador. En cambio si selecciona
una opci&n correspondiente a un procesador superior al suyo el Hernel no funcionar(. Suponiendo
%ue eli#iera la opci&n relati"a al procesador Pentium aparecer( un nue"o men$:
Seleccione la opci&n adecuada y pulse TEnterU. *na "e' seleccionada la opci&n retroceda hasta el
men$ principal.
*na "e' en el men$ principal seleccione a continuaci&n la tercera opci&n:
4ecomendamos %ue eli3a las opciones %ue mostramos en la ima#en como seleccionadas GYVZG. En
cual%uier caso ya sabe %ue puede acceder a la ayuda de las diferentes opciones. *na "e' reali'ada la
selecci&n retroceda al men$ principal mediante el bot&n Ge+itG.
Si pulsa la tecla TESCU desde el men$ principal aparecer( una pantalla %ue pre#untar( si %uiere
#uardar la confi#uraci&n actual. Si contesta afirmati"amente la confi#uraci&n actual se #uardar( en
G.confi#G perdi!ndose la confi#uraci&n anterior.
El n$mero de opciones a confi#urar son muchas y no podemos detallar todo el proceso pero ya tiene
una idea. 4ecuerde %ue muchas opciones del n$cleo dependiendo de su sistema ser(n obli#atorias
para %ue el Hernel pueda funcionar.
A modo de #u)a se resumir(n unas pocas indicaciones cr)ticas respecto a la capacidad de arran%ue
de un Hernel %ue permita traba3ar con el:
rocesor type and .eatures %rocesor Qamily&.
Como ya hemos dicho su ordenador no funcionar( si eli#e una opci&n correspondiente a un
procesador superior o incompatible.
;eneral con.i,uration
CI suport
5bli#atoria en sistemas con PC6
Sysctl suport
Acti"ela ya %ue solo interesa desacti"arla en sistemas especiales llamados
incrustados.
gernel core
Debe ser E,F
Pernel suport .or $LQ binaries
6ncluyala como parte est(tica usando GXG. No debe estar como m&dulo.
ZlocP devices
Cual%uier dispositi"o %ue resulte necesario para arrancar y montar la partici&n ra)' debe ser
compilado est(ticamente. Si no se compila o so compila como m&dulo no arrancar(.
C7aracter devices
Ser(n necesarios como m)nimo las si#uientes opciones:
Firtual terminal
Suport .or console on virtual terminal
U'I)Y^ #M suport
Qilesystems
Como m)nimo deber( incluir soporte para el sistema de ficheros del sistema de ficheros ra)'
%ue #eneralmente es e+t0 y sea cual sea deber( estar incluido est(ticamente y no como
m&dulo.
Console drivers
F;! text console
Instalar un nuevo Pernel personalizado en /ebian
9odo lo dicho sir"e tambi!n para Debian pero en Debian e+iste una forma alternati"a muy
interesante.
Antes de la aparici&n del Hernel modular en ,inu+ un Hernel completo era un simple fichero. Esta
sencille' permit)a por e3emplo mi#rar un Hernel de una m(%uina a otra simplemente copiando este
fichero. Es lo %ue sucede ahora si compilamos un Hernel en modo totalmente est(tico. Es decir
obtenemos un #ran y pesado Hernel totalmente completo y funcional pero sin soporte para car#ar
m&dulos.
Para poder mi#rar un Hernel completo en el caso #eneral de %ue ten#a soporte para m&dulos habr)a
%ue trasladar como m)nimo el fichero compilado est(ticamente y como m)nimo todos sus m&dulos.
Por ello e+iste en Debian un maHe:HpH# capa' de #enerar un pa%uete Debian GmiOHernel.debG con el
binario del Hernel y sus m&dulos. Se puede por e3emplo copiar ese GmiOHernel.debG a otra m(%uina y
bastar( hacer QdpH# :i GmiOHernel.debGQ para instalar( el Hernel en esa m(%uina. Para usar este
sistema deber( instalar GHernel:pacHa#eG y al#unos otros pa%uetes %ue dependen de !l y %ue no est!n
toda")a instalados.
,as primeras "eces %ue compile un Hernel no necesita usar este sistema pero este procedimiento
resulta especialmente indicado en la instalaci&n de Hernels personali'ados en m(s de una m(%uina o
de di"ersos Hernels personali'ados en una misma m(%uina.
ara terminar.
Solo usted puede saber %ue otras cosas son necesarias o con"enientes en funci&n del ordenador
utili'ado. ,as primeras "eces le costar( traba3o por%ue tendr( %ue leer la ayuda de cada una de las
opciones pero muchas de ellas recordar( su si#nificado la pr&+ima "e'. ,o me3or es partir de un
Hernel %ue funcione y eliminar todas a%uellas opciones %ue sabemos con certe'a no necesitaremos
usar nunca en nuestro e%uipo. 4ecuerde %ue las opciones %ue est(n como m&dulos apenas suponen
un ahorro prescindir totalmente de ellas. Por el contrario una opci&n %ue fi#ure como est(tica
innecesariamente est( sobrecar#ando la parte est(tica del Hernel y eso reduce su eficiencia. *n
Hernel pe%ue=o es sensiblemente m(s r(pido %ue uno #rande.
Si tiene dificultades para arrancar con el nue"o Hernel intente hacerlo con el anti#uo y si esto
tampoco resulta repase el cap)tulo dedicado a las dificultades con el arran%ue en ,inu+.
No ol"ide %ue lo primero %ue hace cual%uier Hernel al arrancar es informar de todos a%uellos
dispositi"os %ue es capa' de soportar. Esto lo puede "isuali'ar nue"amente con Gdmes#.R2G. Si al#$n
componente de su hardware no aparece y tampoco est( disponible como m&dulo si#nificar( %ue ese
dispositi"o no esta soportado. 9ambi!n puede acceder a G/procG para comprobar una ampl)sima
"ariedad de capacidades de su Hernel actual

Das könnte Ihnen auch gefallen