Documente Academic
Documente Profesional
Documente Cultură
Fundamentos de Linux
por Hardy Beltran Monasterios
Versin 2.6
Fecha de publicacin 2012-06-18 08:38
Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012 Hardy Beltran Monasterios
Esta obra est licenciada bajo una Licencia Attribution-ShareAlike 3.0 Unported de Creative Commons, que le permite copiar, distribuir, exhibir y ejecutar la obra, hacer obras derivadas y hacer usos comerciales de la misma, bajo las condiciones de atribuir el crdito correspondiente
al autor y compartir las obras derivadas resultantes bajo esta misma licencia o una licencia similar a esta.
Para ver una copia de esta licencia, visite http://creativecommons.org/licenses/by-sa/3.0/ o enve una carta a Creative Commons, 171 Second
Street, Suite 300, San Francisco, California, 94105, USA.
Linux es una marca registrada de Linus Torvalds.
Todas las otras marcas registradas mecionadas en esta obra son propiedad de sus respectivos dueos.
Si bien se han tomado todas las precauciones en la preparacin de este material, el autor no asume ninguna responsabilidad por errores u
omisiones, ni por los daos resultantes del uso de la informacin contenida en este documento.
iii
Fundamentos de Linux
iv
Fundamentos de Linux
vi
La historia del Software Libre se remonta a los primeros aos de las ciencias de la computacin,
cuando los sistemas de cmputo estaban principalmente instalados en universidades e institutos de
investigacin, en aquellos aos no exista el criterio de valor por el cdigo del programa, ya que los
programas era slo un componente adicional de otros productos a los cuales se les otorgaba valor.
En 1971 Richard M. Stallman comenz a trabajar para el MIT, en ese entonces exista una comunidad
que comparta software (programas y cdigo fuente) con otros colegas del medio. Es en los aos 80's,
que ese espritu de compartir, casi haba desaparecido por la filosofa del software privativo, que no
permita copiar libremente o compartir los programas, ya que hacerlo infringa trminos de contrato
y acuerdos entre las compaas fabricantes de computadoras y los usuarios.
Stallman, interesado por revivir aquellos das en los que la comunidad computacional comparta los
programas, comienza en 1984 un proyecto para crear un sistema operativo completo, compatible con
UNIX llamado GNU: El Proyecto GNU (GNU No es UNIX). Para impulsar la idea crea la GNU GPL
o Licencia Pblica General de GNU (GNU General Public License) bajo la cual se distribuiran los
programas que se vayan construyendo en el proyecto GNU. [www.gnu.org]
Durante lo primeros aos Richard M. Stallman y otros programadores crean utilidades para ser usadas
en el futuro sistema operativo GNU, todas ellas son elaboradas de modo que sean compatibles con
UNIX.
Para financiar el proyecto cre la Fundacin para el Software Libre (FSF, Free Software Fundation),
una organizacin sin fines de lucro que capta recursos econmicos para incentivar el desarrollo de
Software Libre. [www.fsf.org]
Qu es Software Libre ?
Segn su impulsor Richard M. Stallman, Software Libre se refiere a un asunto de libertad no de precio.
Software Libre se refiere a la libertad de los usuarios de correr, copiar, distribuir, estudiar, cambiar y
mejorar el software con cualquier propsito. Ms precisamente la filosofa se apoya en las llamadas
cuatro libertades del usuario que estn expresadas en la GNU GPL:
1. La libertad de correr el programa, con cualquier propsito
2. La libertad de estudiar como funciona el programa, y adaptarlo a sus necesidades. El acceso al cdigo fuente es una precondicin para esto.
3. La libertad de distribuir copias de manera que se puede ayudar al vecino
4. La libertad de mejorar el programa, y liberar las mejoras al pblico de tal manera que toda la comunidad se beneficia. El acceso al cdigo fuente es una precondicin para esto.
Basados en esta filosofa, se construye la comunidad de Software Libre, liderada por Richard M.
Stallman, quien junto a cientos de programadores en el mundo llegan a contar en los 90 con un juego
completo de ricas utilidades creadas para el sistema operativo GNU.
En los aos 90, los programas GNU son ampliamente usados en todas las plataformas UNIX y otras
plataformas, y en diferentes mbitos acadmicos, cientficos, empresariales, etc.
La llegada de Linux
En 1991 sucede el evento ms trascendental para la comunidad GNU, el anuncio hecho por Linus
Torlvalds sobre la existencia de un ncleo llamado Linux.
Es en el ao 1992, cuando oficilamente sale a la luz la versin 1.0 de Linux, liberado bajo la licencia
GNU GPL, lo que que permiti que muchos programadores de la comunidad GNU contribuyan a l
dotndole de muchas funcionalidades hasta convertirlo en un sistema operativo estable, utilizable y
explotable.
El acontecimiento Linux, dot a la comunidad del ltimo componente que faltaba al proyecto del sistema operativo GNU: un ncleo que se integre a las cientos de utilidades construidas, la misma integracin de Linux y GNU llev bastante tiempo, en las propias palabras de Stallman. De ah algunos
que lo denominan GNU/Linux.
Esta iniciativa, tiene el propsito principal de mostrar a las empresas de software privativo los beneficios
de publicar el cdigo fuente de sus productos.
A diferencia del Software Libre, sta iniciativa no se apoya en ninguna licencia especfica, en su lugar,
establece criterios que indican cuando una licencia es o no considerada de Cdigo Fuente Abierto.
Para que una licencia sea considerada de fuente abierta debe satisfacer los siguientes criterios:
1. Libre redistribucin
2. Acceso al cdigo fuente libre de cargo
3. Permiso para hacer modificaciones y trabajos derivados
4. Integridad del cdigo fuente del autor
5. Sin discriminacin contra personas o grupos
6. Sin discriminacin contra campos de aplicacin.
7. La licencia se aplica tambin a todos aquellos que les redistribuy el programa.
8. La licencia no debe ser especfica a un producto.
9. La licencia no debe contaminar otro software (referido a agregacin, no derivacin).
De acuerdo a estos criterios las siguientes licencias son consideradas de fuente abierta: GNU GPL,
BSD, MPL, Apache, por nombrar algunas.
Habiendo el movimiento de Cdigo Fuente Abierto surgido de la misma comunidad del Software Libre,
no existen diferencias importantes desde el punto de vista pragmtico (acceso al cdigo fuente), en
lugar de ello sus diferencias son ms de ndole conceptual que giran alrededor de las ideas filosficas
y conceptuales que cada corriente expone y defiende.
Esta discrepancia filosfica es la que lleva a que muchas empresas del sector comercial de la industria
del software, a usar el trmino Cdigo Fuente Abierto (Open Source) en lugar de utilizar el trmino
Software Libre (Free Software).
La diferencia ms importante entre ambas corrientes y que merece ser destacada es la poltica que cada
uno tiene respecto a la licencia bajo la que se ampara el software. Como mencionamos anteriormente,
la Iniciativa de Cdigo Fuente Abierto no se apoya en una licencia especfica a diferencia del Software
Libre que utiliza la licencia GNU GPL.
El uso de la licencia GPL para amparar determinado programa de software, exige que cualquier producto software derivado a partir del cdigo fuente de ste tambin se distribuya bajo las mismas condiciones de licencia, es decir GPL. De este modo la libertad del usuario est garantizada por que los
nuevos programas que se vayan a escribir a partir de programas de software libre existentes van a
continuar siendo libres.
Lo mismo no ocurre con el software amparado bajo alguna de las licencias clasificadas como Cdigo
Fuente Abierto. Si alguien produce un derivado no est obligado a mantener las mismas condiciones
de licencia del programa original. Un ejemplo de tal licencia es la BSD.
El Software Libre tiene un conjunto de cualidades intrnsecas, que de acuerdo a Bruno Cornec (HPHOWTO, Revisin 0.93) son las siguientes:
10
Este es el punto ms importante del Software Libre, porque permite la compresin, adaptacin, correccin, distribucin y mejora
del software.
Confiabilidad
Portabilidad
Universalidad
Desempeo
Reactividad
Independientemente de sus cualidades, es posible dar otras razones de diferente naturaleza en favor el
Software Libre, dependiendo del tipo de persona que se encuentre.
11
Las ventajas del Software Libre sern tales y de acuerdo al usuario del software, por ejemplo para el
usuario comn, es irrelevante el acceso al cdigo fuente de los programas, ya que a l le interesan los
programas en formato binario listos para ser utilizados.
Para mbitos acadmico y cientfico el acceso al cdigo fuente representa transferencia tecnolgica y
aprendizaje.
Para mbitos empresariales, las principales ventajas estn en la posibilidad de construir soluciones
personalizadas, integracin con aplicaciones existentes, e incrementar la vida til de los programas.
Ya a que se cuenta con acceso al cdigo fuente, es posible realizar una revisin de los programas para
asegurarse que no existe cdigo que ponga en peligro informacin confidencial.
Una ventaja para todos, son los bajos precios o casi ningn precio del Software Libre, sta inversin
no realizada en software puede ser canalizada a otro tipo de gastos o inversiones, como equipamiento
o capacitacin.
12
La desventaja de acceder al cdigo fuente afecta a todos los usuarios, ya que existe la posibilidad de
que maliciosamente se incluyan caballos troyanos en los programas, por esta razn es siempre recomendable conseguir los programas de los sitios originales y verificar que los archivos no han sido alterados, de acuerdo a las instrucciones del o los autores.
El acceso al cdigo fuente tambin significa, menor esfuerzo para encontrar debilidades, que pueden
ser maliciosamente explotadas como tambin pueden ser corregidas en breve tiempo.
Los programas de cdigo fuente abierto, son propensos a varias divisiones del mismo, ya que no hay
ninguna restriccin en tomar el programa y crear una versin modificada.
Los programas de cdigo fuente abierto, tienden a cambiar muy rpido por lo que se abre una brecha
entre la documentacin y las ltimas versiones del programa, en general los programas de cdigo
fuente abierto adolecen de documentacin al da y completa, tanto para el usuario final, como para el
programador o integrador de sistemas.
El desarrollo de nuevos productos software que requieren alta inversin econmica no tienen asegurado
el retorno de la inversin, ya que el negocio ya no se basa en vender software y por tanto la recuperacin
es incierta.
13
14
15
Para comenzar a hablar de Linux, hay que hablar del modelo a partir del cual fue creado, este modelo
es UNIX, uno de los sistemas operativos con ms desarrollo, distribucin y soporte. Originalmente
fue desarrollado como sistema multitarea con tiempo compartido para mini ordenadores y mainframes
a mediados de los aos 70, y desde entonces se ha convertido en uno de los sistemas ms utilizados a
pesar de su ocasionalmente, confusa interfaz con el usuario y el problema de su estandarizacin.
Al final de los 90 existan numerosas versiones de UNIX para muchos sistemas, desde ordenadores
personales hasta super computadoras. UNIX tena una fuerte posicin en el mercado de servidores que
utilizaban hardware especializado y muy costoso. Pero tambin existan versiones de UNIX para ordenadores personales (PC), como la de SCO o SUN Solaris, pero que aun as seguan siendo caros.
En muchas partes del mundo, UNIX era muy comn en laboratorios de investigacin, en Universidades,
en entidades del gobierno y en grandes empresas.
En este escenario aparece Linus Torvalds, un estudiante de Ciencias de la Computacin en la Universidad de Helsinki, en Finlandia. El quera tener en su PC 386 algo similar a UNIX, y empez utilizando
Minix, un sistema escrito por el profesor Andrew Tanembaum para propsitos de enseanza, pero Linus
quera algo mejor, as que a modo de hobby empez a escribir su propio sistema operativo inspirado
en Minix. Lo anunci por primera vez como Linux, en el grupo de noticias comp.os.minix. El 5 de
Octubre de 1991, Linus anunci la primera versin "oficial" de Linux, la 0.02.
Las primeras versiones de Linux eran rudimentarias y no se poda hacer mucho con ellas, a medida
que el tiempo fue transcurriendo Linus recibi la ayuda de muchos programadores y expertos de UNIX
a lo largo y ancho del mundo, gracias a la presencia de Internet. Cualquier habitante del planeta puede
acceder a Linux y desarrollar nuevos mdulos o cambiarlo a su antojo. Buena parte del software para
Linux se desarrolla bajo las reglas del proyecto de GNU de la Free Software Foundation.
En los primeros aos de Linux, nadie podra imaginar que este "pequeo" clon de UNIX, producto del
esfuerzo de hackers en la red mundial iba a convertirse en el sistema operativo de ms rpido crecimiento, desplazando en el mercado a otros sistemas operativos comerciales, hasta convertirse en un
sistema mundial de primera clase para servidores de red y ordenadores personales.
16
Qu es Linux ?
2.3. Qu es Linux ?
17
Qu es GNU/Linux ?
2.4. Qu es GNU/Linux ?
Linux es en rigor solamente el ncleo del sistema operativo, para que pueda ser utilizado y se pueda
sacar provecho de l, se requiere de un nmero variado de programas utilitarios, que van desde el intrprete de rdenes hasta las aplicaciones para el usuario final, pasando por las herramientas de administracin del sistema y desarrollo.
Cuando Linux sali a la luz por primera vez en 1991, el proyecto GNU haba creado hasta entonces
todo un juego completo de utilidades, herramientas de desarrollo, herramientas de aplicacin, etc. la
pieza faltante era el ncleo que permitiera contar con el sistema operativo libre. Cuando Linux estuvo
listo para ser usado la integracin de las herramientas GNU a l formaron lo que hoy es el sistema
operativo Linux, por eso que algunos usan el denominativo de GNU/Linux.
Para la mayora de los usuarios, Linux y GNU/Linux se usan indistintamente y ms aun Linux es el
nombre ampliamente aceptado por todo el mundo, a excepcin de ciertos crculos ms conservadores
donde si se usan estos trminos de acuerdo a lo que representan.
18
Qu es una distribucin ?
19
Todas las distribuciones utilizan el mismo software disponible, as como el mismo ncleo o una variacin
de l, pero difieren en las versiones y el software que deciden incluir. Algunas distribuciones tienen
la tendencia de utilizar las versiones denominadas estables, que no son recientes pero que han sido
largamente probadas y se sabe que funcionan correctamente. Otros en cambio emplean ms a menudo
versiones recientes que tienen nuevas caractersticas pero tambien mayor problabilidad de fallas y
errores.
LibreOffice (un clon de MS Office), Mozilla (navegador web), KDE y GNOME (entornos grficos)
y Apache HTTPd (servidor web) son piezas comunes de software que van a estar presentes en casi
todas las distribuciones.
Algunas de las diferencias ms notorias entre distribuciones estn, la forma en que el software ha sido
pre-configurado, como se instala la distribucin, y finalmente como se administra.
As por ejemplo la distribucin Red Hat prepara el sistema Linux para utilizar el entorno grfico
GNOME de modo predeterminado, en cambio la distribucin Suse instala KDE de modo predeterminado.
20
Qu distribucin es mejor ?
Es muy difcil decir que distribucin es mejor que las otras, un criterio ms acertado es elegir una
distribucin basndose en el uso que se la va dar. Muchas de las distribuciones tienen ciertas tendencias
que las distinguen de otras, as por ejemplo Linux Debian est muy orientada a un usuario vinculado
al rea de sistemas o ciencias de la computacin, al contrario de Ubuntu que est orientada al usuario
final que probablemente tiene poca idea de lo que significa un sistema operativo. En general la mejor
distribucin va a ser aquella que satisfaga los requerimientos particulares de uso, que cada uno tiene.
Algunas distribuciones tienen el espritu de ser para propsito general, pero la mayora son para tareas
especficas, como por ejemplo correr un corta fuegos, un kiosco web o para usarlo en cierto pas o
universidad. Para quien est conociendo Linux por primera vez es aconsejable utilizar una de las
grandes y conocidas distribuciones de propsito general: Fedora (Red Hat), OpenSuse, Ubuntu, Debian.
Entre algunos de los criterios que se pueden tomar en cuenta para elegir una distribucin estn:
Orientacin de la distribucin
Recursos disponibles para la distribu- Otra razn de eleccin tiene que ver con la facilidad de buscar
cin
recursos para esa distribucin, que va desde conseguir los CD,
las actualizaciones, pasando por los manuales e inclusive la
experiencia local de otros usuarios, que puedan potencialmente
prestar ayuda en un determinado momento (por ejemplo a travs
de un grupo de usuarios).
Grado de mantenimiento y actualiza- En el mundo Linux van apareciendo de cuando en cuando nuecin
vas distribuciones, por lo que otro criterio de eleccin tiene que
ver con las personas involucradas en esa distribucin y la cantidad de trabajo que le dedican para darle mantenimiento (corregir
errores, hacer mejoras, etc) y actualizarla (incluir nuevas versiones de software, publicar nuevas versiones de la distribucin).
Herramientas de administracin y
configuracin
21
Qu distribucin es mejor ?
Si se piensa tener varias computadoras instaladas con Linux, es ms conveniente que todas tengan la
misma distribucin, o a lo sumo dos distribuciones diferentes, digamos una pensada para servidor y
otra pensada para los clientes. Esto con el fin de disminuir el esfuerzo que representa administrar y
mantener varios sistemas corriendo diferentes distribuciones de Linux.
22
Este captulo presenta una de las formas posibles de trabajo en Linux: la lnea de rdenes y explica la
manera de interactuar con l usando un intrprete de rdenes (shell).
Al terminar este captulo, el alumno ser capaz de:
Ingesar a un sistema Linux en modo texto o modo grfico
Trabajar en un intrprete de rdenes
Introducir rdenes vlidas y secuencias de rdenes
Hacer referencia a variables de entorno
Usar y editar la historia de rdenes
Invocar rdenes dentro y fuera de la ruta de bsqueda (path)
Utilizar las pginas del manual para acceder a la documentacin de las rdenes del sistema
23
Linux tiene dos formas de presentarse al usuario. Una de ellas es el modo texto y el otro el modo grfico, que es opcional y dependiendo de la instalacin puede no estar disponible en un sistema. En
cualquier modo que se elija trabajar el usuario debe introducir en la pantalla de registro la combinacin
de una cuenta de usuario (login) y contrasea (password) vlidos para iniciar una sesin de trabajo
(ingresar al sistema).
El modo grfico puede tener diferentes aspectos dependiendo de la instalacin de Linux que se tenga,
as por ejemplo la pantalla de ingreso de GNOME es visualmente diferente a la pantalla de ingreso de
KDE, pero funcionalmente son similares, ambas permiten que el usuario introduzca su cuenta y su
contrasea.
Por ejemplo la siguiente pantalla muestra el inicio de una sesin en modo texto:
caribe login: sofia
Password: ********
Last login: Thu Jul 15 15:30:26 on tty1
[sofia@caribe sofia]$
24
Cuando se ingresa a un sistema Linux, tpicamente se lo hace desde la consola, que son el teclado y
monitor conectados directamente a la computadora. Es posible tener mas de una sesin de trabajo
(debido a que es un sistema operativo multiusuario) con un mismo usuario o diferentes usuarios utilizando consolas virtuales, que estn nicamente disponibles en modo caracter (tambin llamado modo
texto).
Para acceder a cada una de las consolas virtuales se presiona la combinacin de teclas Alt+Funcin,
por ejemplo para acceder a la tercera consola virtual se presiona Alt y F3 al mismo tiempo, en cada
una de ellas el sistema presenta la pantalla de ingreso.
Un sistema Linux recin instalado probablemente permita acceder a las primeras seis consolas virtuales,
y si el modo grfico est disponible le corresponder la sptima consola virtual. Cuando se est en la
consola virtual grfica (modo grfico) se debe presionar la combinacin Ctrl+Alt+Funcin para cambiar
a cualquier consola texto.
Si nos encontramos en modo texto y deseamos salir del sistema (terminar la sesin), simplemente debemos escribir exit.
Si estamos en modo grfico, en el men principal estar disponible la opcin de terminar la sesin.
25
El intrprete de rdenes
Cuando nos encontramos en un sistema Linux nos comunicamos con l a travs de un intrprete de
rdenes, que es simplemente un programa que toma la entrada del usuario y la traduce a rdenes o
instrucciones que el sistema trata de seguir. Esto puede ser comparado con el COMMAND.COM de
MS-DOS, el cual efecta esencialmente la misma tarea.
Tpicamente, todas las distribuciones utilizan el intrprete de rdenes denominado Bash, aunque hay
muchos otros, como por ejemplo Ash, C-shell, o Zsh.
El intrprete de rdenes es slo una interfaz de Linux, otra interfaz disponible es el sistema X Window,
que brinda al usuario la posibilidad de trabajar en una interfaz grfica de usuario (GUI). Tambin en
modo grfico podemos hacer uso de un intrprete de rdenes utilizando un emulador de terminal.
Cuando el usuario ingresa al sistema (incia una sesin), ya sea localmente desde la consola o remotamente, son ledos una serie de archivos de texto, que contienen informacin necesaria para crear el
entorno de trabajo del usuario. La secuencia exacta de este inicio vara entre distribuciones, pero para
LPI se toman en cuenta los mtodos utilizados en Red Hat y Debian.
26
Sesin interactiva
Un sesin interactiva se produce cuando se ejecuta un intrprete de rdenes (login shell) al ingresar
al sistema.
El intrprete comienza leyendo el archivo global de configuracin /etc/profile que afecta el entorno
para todos los usuarios que usen Bash u otro intrprete compatible.
A continuacin se buscan y leen una serie de archivos del usuario (ubicados en su directorio de trabajo)
que contienen instrucciones que afectan solamente a su entorno. Los archivos son los siguientes y se
toma en cuenta slo el primero que se encuentra, de acuerdo a este orden especfico:
1. ~/.bash_profile
2. ~/.bash_login
3. ~/.profile
A continuacin se busca el archivo ~/.bashrc y en el caso de Red Hat este invoca a
Usualmente en estos archivos se acostumbra definir alias de rdenes y funciones.
/etc/bashrc.
27
Sesin no interactiva
Tpicamente ocurre cuando se invoca al intrprete Bash, por ejemplo para ejecutar un guin (script).
O cuando el usuario privilegiado root usa la orden su para tomar la identidad de otro usuario pero sin
restaurar su entorno.
La secuencia de archivos que se leen es bastante diferente en Red Hat y Debian. En el caso del primero,
se lee ~/.bashrc y a continuacin el archivo /etc/bashrc. Para el segundo, se lee /etc/bash.bashrc
y luego el archivo de usuario ~/.bashrc.
28
Atencin
Los examenes de LPI estn orientados exclusivamente al manejo de rdenes. Si usted
no las llega a conocer de manera adecuada ser imposible aprobarlos.
Cuando estamos usando Bash u otro intrprete, la seal que nos encontramos en la lnea de rdenes
es el indicador del sistema (prompt), que en el caso de los sistemas Red Hat es de la forma:
[sofia@tux sofia]$
Donde:
sofia@tux
Significa que se ha ingresado al sistema llamado tux, con la cuenta de usuario sofia.
sofia
Palabra que vuelve aparecer, es el nombre del directorio en el que nos encontramos
actualmente. Veremos esto en detalle mas adelante
Cuando aparece el smbolo $ (pesos), significa que se trata de una cuenta de usuario
regular (sin privilegios especiales). En cambio cuando se trata de una cuenta de usuario
privilegiado (root) este smbolo es cambiado por # (ordinal).
Nota
El indicador puede ser diferente en otras distribuciones, pero lo universal son los smbolos
$ y # que siempre van al final del indicador.
Desde el indicador del sistema podemos ejecutar diversas rdenes, como por ejemplo:
[sofia@tux sofia]$ date -u
jue jul 15 13:11:35 UTC 2004
Aqu se ejecut la rden date con el argumento -u que muestra la fecha y hora actual del sistema en
tiempo universal (GMT o UTC).
29
Ordenes
Cuando se teclea una orden, el intrprete hace varias cosas. Primero, separa la orden de los argumentos,
luego busca la orden en la lista de funciones, de rdenes internas, si la encuentra la invoca, de lo contrario continua la bsqueda en el camino de bsqueda para rdenes (en ingls path) y la ejecuta pasndole los argumentos especificados. Si no se encuentra en ningn lugar simplemente muestra un
mensaje de error indicando que la orden no se encontr.
Los intrpretes de rdenes utilizan un conjunto de variables con valores especficos que afectan la
forma en que trabaja el intrprete o dicho de otro modo establecen el entorno sobre el cual trabaja, as
por ejemplo el prompt o indicador del sistema es un elemento del entorno, otro de ellos es el path o
ruta de bsqueda que tiene exactamente la misma funcin que el path en los sistemas Windows y MSDOS.
3.5.1. Ordenes
Linux tiene cientos de rdenes, pero slo un conjunto de ellas son empleadas cotidianamente al trabajar
en un sistema Linux.
Todas las rdenes comparten una estructura similar que puede incluir los siguientes tres elementos:
orden [opciones] [argumentos]
Que corresponden a:
la orden misma
una o ms opciones admitidas por la orden (puede no estar presente)
uno o ms argumentos admitidos (puede no estar presente)
En general todas las rdenes se escriben en minsculas. Hay que recordar que Linux hace distincin
entre maysculas y minsculas.
De modo general las opciones suelen indicarse de dos maneras:
opcin corta: un guin y una letra
opcin larga: doble guin y una palabra, a esta ltima se la denomina tambin opcin estilo GNU.
Veamos unos ejemplos
30
Ordenes
date -u
date --utc
31
Alias
3.5.2. Alias
El alias, permite que una palabra sea sustituida por otra, cuando se usa la palabra como orden.
Los alias se definen con la orden alias, el siguiente ejemplo define un alias llamado ls:
[sofia@tux sofia]$ alias ls='ls --color=tty'
Para mostrar todos los alias, se invoca alias sin argumentos. Por ejemplo:
[sofia@tux sofia]$ alias
Si el usuario escribe la cadena ls -lh como una orden, esto ser expandido a: ls --color=tty -lh.
En algunas ocaciones, usted querr que no ocurra tal expansin, para ello basta poner el prefijo '\'. As:
\ls -lh
Si quiere eliminar un alias existente, entonces debe usar la orden unalias. Por ejemplo:
[sofia@tux sofia]$ unalias ls
De modo predeterminado los alias se definen en el archivo ~/.bashrc. El la Seccin 8.11, Archivos
de configuracin trataremos el tema de personalizar el entorno de trabajo con ms detalle.
32
Ejecucin de la orden
Cuando escribimos una orden, que no comienza con '/' (barra inclinada), el intrprete intenta localizarla.
Si existe una funcin del intrprete con ese nombre, entonces la funcin es invocada (las funciones se
ven en Seccin 8.10, Funciones.). Si no hay una funcin, entonces el intrprete busca si se trata de
una orden interna (una orden incorporada en el intrprete) y la invoca si existe.
Si el nombre de la orden, no es funcin, ni orden interna y no empieza con '/', entonces Bash busca un
archivo cuyo nombre sea igual a la orden, en los directorios indicados en la variable PATH (las variables
se ven en Seccin 8.8, Variables de entorno y del intrprete), si hay una coincidencia la invoca y si
no devuelve un mensaje de error.
El archivo que invoque Bash, debe ser uno capz de ejecutarse, en este caso se dice que se trata de una
orden externa.
Si la orden empieza con '/', entonces Bash la busca directamente en la ruta indicada. Por ejemplo, de
modo predeterminado el usuario regular no tiene en la ruta de bsqueda (PATH) el directorio /sbin/,
si intenta ejecuta la orden ifconfig lo, obtendr un mensaje de error, pero si escribe /sbin/ifconfig lo,
lograr ejecutar la orden.
33
Ordenes habituales
Sintaxis
exit
Opciones
ninguna
Ejemplo(s) exit
clear
Propsito
Limpia la pantalla
Sintaxis
clear
Opciones
Ejemplo
clear
passwd
Propsito
Sintaxis
passwd
Opciones
ninguna
Ejemplo
passwd usuario
id
34
Propsito
Sintaxis
id [opciones]
Opciones
-g
-u
-n
Ejemplos
id
[usuario]
Ordenes habituales
Orden
id -un usuario
su
Propsito
Sintaxis
su [opciones]
Opciones
Ejemplos
su - root
su - pedro
[usuario]
pwd
Propsito
Sintaxis
pwd
Opciones
Ninguna
Ejemplo
pwd
poweroff
Propsito
Apaga el sistema
Sintaxis
poweroff
Opciones
Ninguna
Ejemplo
poweroff
35
Caracteres especiales
Hay algunos caracteres que tienen un significado especial para el intrprete de rdenes. Los mismos
estn resumidos en la siguiente tabla:
36
Ejemplo
'
"
echo "HOME=$HOME"
ls /dev/ttyS?
ls /dev/*h*
[]
file /etc/rc[0-9].d
{}
Conjunto de palabras
ls /etc/*.{allow,deny}
&&
||
ord1 || ord2
echo $HOME
El trabajo en lnea de rdenes es mas productivo cuando se hace uso de combinaciones de teclas que
permite agilizar la introduccin de rdenes o desenvolverse en el intrprete.
Las siguientes combinaciones de teclas son las que habitualmente se utilizan en Bash, cada una realiza
una accin especfica.
Ctrl+E
Ctrl+C
Ctrl+D
Ctrl+U
Ctrl+K
Ctrl+W
Ctrl+L
Ctrl+R
Entra en modo reverse-i-search que se usa para buscar rdenes ejecutadas anteriormente.
La bsqueda es realizada en base a las teclas que el usuario va pulsando.
Ctrl+S
Ctrl+Q
Ctrl+Z
Tab
Toma la entrada actual del teclado y completa con el nombre de archivo que coincide
con los caracteres tecleados o en caso contrario muestra todos los nombre de archivo
que coinciden con los caracteres tecleados
Flecha arriba Revisa la historia de rdenes hacia atrs (de fin a principio)
Flecha abajo Revisa la historia de rdenes desde la posicin actual hacia el final
Shift-RePag Muestra una pantalla hacia atrs
Shift-AvPag Muestra una pantalla hacia a delante
La tecla Ctrl+D tiene otros usos adicionales en Linux dependiendo del contexto, en el caso de archivos
de texto representa EOF (fin de archivo). Cuando nos encontramos en el intrprete de rdenes y no
hay ninguna orden introducida, Ctrl+D representa salir de la sesin (orden logout).
37
De modo predeterminado el intrprete de rdenes Bash, registra cada una de las rdenes que se van
ejecutando durante una sesin. Cada vez que la sesin termina estas son almacenadas en un archivo
llamado ~/.bash_history.
Las siguientes operaciones con la historia de rdenes permiten agilizar el trabajo de introduccin de
rdenes
!!
fc
La historia de rdenes previamente escritas en el intrprete, es una funcin de Bash. El archivo predeterminado donde se guarda dicha historia es ~/.bash_history, que de modo predeterminado guarda
como mximo 1000 rdenes. Ambos valores predeterminados son fijados por la variables de entorno
HISTFILE y HISTSIZE respectivamente. Consulte los detalles en bash(1).
La orden fc, se puede utilizar de dos modos diferentes. El primero es listar un nmero de rdenes, por
ejemplo fc -l 50 60, lista las rdenes en ese rango de nmeros.
fc es de mucha utilidad para volver a ejecutar una secuencia de rdenes desde la historia. Por ejemplo:
fc 50 55 invocar el editor de texto predeterminado para editar las rdenes 50 a 55 de la historia, y
luego de guardar y salir del editor las ejecutar.
38
Obteniendo ayuda
Muchas de las rdenes en Linux poseen varias opciones, que aun los usuarios experimentados no
siempre pueden recordar. A primera vista debido a la misma estructura del sistema Linux, al principio
puede parecer oscuro al enfrentarse a la administracin y configuracin del sistema usando rdenes.
Afortunadamente existen varios caminos para atacar este inconveniente y algunos de los mas importantes van a ser abordados a continuacin.
En bash, puede obtener descripcin mas detallada de una orden interna utilizando la orden help, del
siguiente modo:
[sofia@tux sofia]$ help exit
exit: exit [n]
Exit the shell with a status of N. If N is omitted, the exit status
is that of the last command executed.
[sofia@tux sofia]$
Para rdenes externas se puede usar la opcin --help que despliega una ayuda breve sobre la sintaxis
y las opciones de la orden. No todas las rdenes admiten esta opcin y en muchos casos esta ayuda
39
breve no es suficiente. En este caso es mejor consultar el manual o documentacin en lnea que est
disponible en los sistemas Linux.
[sofia@tux sofia]$ id --help
Usage: id [OPTION]... [USERNAME]
Print information for USERNAME, or the current user.
-a
-g,
-G,
-n,
-r,
-u,
--group
--groups
--name
--real
--user
--help
--version
40
El manual en lnea
Casi todas las rdenes en Linux vienen acompaadas de una pgina del manual (o man page), as
los como archivos de configuracin, llamadas al sistema, y otros. Para acceder a esta documentacin
en lnea se utiliza la orden man, por ejemplo si escribe man bash podr leer una documentacin extensiva sobre bash.
Si bien las pginas del manual proporcionan abudante informacin, sta tiene la desventaja de ser a
menudo compleja de entender y lamentablemente la traduccin al espaol est incompleta. Razn por
la cual un usuario principiante probablemente encontrar a las pginas del manual muy complejas de
usar. Sin embargo an con todas sus desventajas sta documentacin es valiosa y ms an para un
usuario avanzado o un administrador de sistemas Linux.
41
Las pginas del manual estn divididas en captulos, los ms utilizados son el 1, 5 y 8. El captulo que
se desea consultar se indica como argumento en la orden, por ejemplo man 1 crontab muestra la pgina del manual de la orden crontab y man 5 crontab la pgina donde se explica el formato de los
archivos crontab.
Cuando se menciona una orden se suele indicar entre parntesis el captulo en la cual se documenta,
por ejemplo crontab(1) o crontab(5), que se refieren a la pgina de manual de crontab en el captulo
1 y 5 respectivamente.
42
Ordenes de usuario
Llamadas al sistema
Archivos de dispositivo
Cuando la orden man es invocada, esta busca en directorios especficos del sistema la pgina del manual
solicitada, la procesa y luego invoca a la orden less (Veremos ms de esta orden mas adelante) para
desplegarlo en la pantalla de la terminal. Para leer toda la pgina puede usar las teclas del cursor y las
teclas AvPg, RePg. Para realizar bsquedas puede usar la tecla / y escribir a continuacin la palabra
que desea buscar. Para abandonar la pgina del manual basta con presionar la tecla q.
Cuando haya revisado varias pginas del manual usted notar que muchas de ellas presentan secciones
comunes, aunque estas secciones no son un estndar, estas son las que usualmente aparecen:
NAME
SYNOPSIS
DESCRIPTION
OPTIONS
FILES
SEE ALSO
COPYRIGHT
BUGS
Otras rdenes relacionadas con man son las rdenes apropos y whatis
apropos palabra Busca en la seccin NAME de las pginas del manual las descipciones que contienen palabra. Esta orden es equivalente a utilizar man -k
whatis orden
Muestra las descripciones que le corresponden a orden en las pginas del manual.
Es equivalente a utilizar man -f
43
44
El sistema operativo Linux tiene una estructura de archivos y directorios que ha sido concebida para
permitir el trabajo en modo multi-usuario. El usuario de un sistema Linux requiere conocer esta estructura para poder trabajar efectivamente en el sistema.
Al terminar con esta seccin el alumno ser capz de comprender y describir:
Que se entiende por un sistema de archivos
Que caractersticas generales tiene el sistema de archivos y su relacin con otros aspectos del sistema.
Cual es la estructura de directorios utilizada en Linux
Que informacin y tipos de archivos se mantienen en directorios especficos y cual el propsito de
esos directorios
45
Qu es un sistema de archivos ?
En la mayora de los sistemas operativos, existe el concepto de archivo, que es la unidad bsica utilizada para organizar la informacin del sistema. El sistema de archivos es el mtodo lgico para organizar, guardar, recuperar, manipular y administrar informacin.
Los archivos estn organizados en una forma jerrquica agrupadas en directorios, que son nicamente
una coleccin de archivos, en otros sistemas operativos son denominados carpetas.
Todos los sistemas operativos utilizan un diseo especfico de sistema de archivos, lo que hace que
existan particularidades en cada uno de ellos, como por ejemplo la longitud mxima del nombre de
un archivo, atributos especiales, permisos o autorizaciones, etc.
El sistema de archivos predeterminado en Linux se denomina ext3, pero adems Linux es capaz de
trabajar con otros sistemas de archivos como por ejemplo FAT (MS-DOS), VFAT (Windows9x), FAT32 (Windows98), HPFS (OS/2), NTFS (WindowsNT), etc.
46
Una caracterstica importante del sistema Linux/UNIX es la forma general de tratamiento de varios
componentes del sistema como archivos, por ejemplo los dispositivos hardware como unidades de almacenamiento secundario, impresoras, modems, etc. son tratados como archivos. Y tambin varios
aspectos del ncleo de Linux pueden ser observados o alterados por medio de archivos especficos.
Es importante observar que Linux/UNIX, hace distincin entre maysculas y minsculas, por lo que
los nombres de archivo CURSO.HTM, curso.htm y Curso.htm son diferentes, tambin hay que
indicar que el carcter para separar rutas de directorio es la barra inclinada / (slash).
Y finalmente, cuando el nombre de un archivo o directorio empieza con punto ., este es considerado
como oculto.
47
La estructura jerrquica del sistema de archivos en Linux, est definida por la Jerarqua del Sistema
de Archivos Estndar (FHS, Filesystem Hierarchy Standar) y en general todas las distribuciones usan
este estndar.
El estndar consiste de un conjunto de guas y requerimientos respecto a la organizacin de los directorios del sistema de archivos. Esto permite a los usuarios de Linux predecir la ubicacin de archivos
y directorios cuando trabajan en el sistema.
A continuacin describimos los directorios que deben estar presentes en la raiz (/) y el propsito de
cada uno.
48
/bin
Es la abreviacin de "binaries", o ejecutables. Es donde residen los programas que corresponden a las rdenes esenciales del sistema. Aqu se encuentran por ejemplo cp, ls, mv.
/boot
Como su nombre lo sugiere este directorio contiene los archivos de arranque del sistema,
en particular aqu se encuentra el ncleo del sistema operativo.
/dev
Los archivos contenidos en este directorio son usados para acceder a los dispositivos
existentes del sistema, como discos duros, modems, memoria, etc.
/etc
/home
Contiene los directorios de trabajo de los usuarios del sistema. Por ejemplo, /home/sofia
es el directorio del usuario "sofia". En un sistema recin instalado, este directorio estar
vaco.
/lib
Contiene las bibliotecas esenciales que compartirn muchos programas. Tambien contiene
los mdulos del ncleo
/media
Este directorio contiene otros directorios que son utilizados para acceder temporalmente
a medios removibles de almacenamiento, como CD-ROM, disquetes, memorias-flash USB.
/mnt
Este directorio est reservado para acceder temporalmente a otros sistemas de archivos,
tales como NFS (sistemas de archivos montados via red).
/opt
Viene del ingls "optional" (opcional) y es comnmente utilizado para instalar otras aplicaciones adicionales, como por ejemplo LibreOffice un clon de MS Office.
/proc
Es un sistema de archivos virtual. Los archivos que contiene realmente residen en memoria,
no en un disco. Hacen referencia a varios aspectos del ncleo y procesos que estn corriendo
actualmente en el sistema
/root
Es el directorio de trabajo del administrador del sistema (usuario root), por tanto nicamente
este usuario puede acceder a este directorio.
/sbin
Aqui se encuentran los ejecutables esenciales del sistema operativo reservados para el
usuario root.
/tmp
Este directorio es utilizado por muchos programas que tienen la necesidad de generar informacin temporal y guardarla en un archivo.
/usr
Este directorio contiene a su vez una segunda jerarqua muy similar a la raz. Tpicamente
bajo este directorio se instalan otros programas: rdenes, librerias, otros ejecutables, otros
archivos de configuracin, todos ellos no esenciales para el sistema.
/var
Los archivos que a menudo cambian su tamao o tienden a crecer, son almacenados aqu.
Como los que mantienen el registro de eventos del sistema, por citar alguno.
Presente en sistemas con versin de ncleo 2.4. Este directorio es utilizado por el
ncleo durante el arranque del sistema.
/lost+found
Este directorio es utilizado por la orden fsck para guardar archivos y directorios
desconectados, que suelen presentarse cuando ocurre una fallo con el sistema de
archivos. En otros sistemas son llamados sectores perdidos o cadenas perdidas.
/misc
49
Al concluir esta seccin usted ser capaz de realizar varias operaciones comunes con archivos y directorios, como:
Listar archivos y el contenido de directorios
Borrar archivos
Copiar archivos entre diversas partes del sistema de archivos
Mover o renombrar archivos
Crear, borrar y cambiar directorios
Cambiar la fecha y hora de creacin de archivos y directorios
Buscar archivos y directorios en todo el sistema de archivos
50
La orden ls lista el contenido de directorios. De modo predeterminado lista el contenido del directorio
de trabajo actual (".").
Sinopsis: ls[opciones]
[archivo...]
-d
Trata a los directorios como archivos y los lista en vez de mostrar sus contenidos.
-h
Aade un sufijo indicando la unidad en que se muestra el tamao del archivo. 'M' para Megabytes
y 'K' para Kilobytes. Slo tiene efecto junto a la opcion -l
-i
Muestra el nmero de ndice que le correponde al archivo (nmero- o nmero de nodo-). Este
nmero identifica de forma inequvoca a cada archivo dentro de un sistema de archivos particular.
-l
Muestra el listado en formato largo, que incluye los permisos del archivo, el nmero de enlaces
que tiene, el nombre del propietario, el del grupo al que pertenece, el tamao (en bytes), una
marca de tiempo, y el nombre del archivo. De forma predeterminada, la marca de tiempo que se
muestra es la de la ltima modificacin. Para archivos especiales de dispositivo el campo de tamao
se reemplaza comnmente por los nmeros de dispositivo mayor y menor.
-F
Aade un carcter a cada nombre de archivo que indica el tipo de archivo. Los indicadores de tipos
de archivo son:
/, para directorios
@, para enlaces simblicos
*, para archivos con permiso de ejecucin
|, para archivos FIFO
=, para archivos de conexin (socket)
nada para archivos regulares
-R
Ejemplos:
[sofia@tux sofia]$ ls -l
-rw-rw-r-1 sofia
sofia
drwxrwxr-x
8 sofia
sofia
drwxrwxr-x
4 sofia
sofia
-rw------1 sofia
sofia
-rw-rw-r-1 sofia
sofia
2012
4096
4096
50386
6283144
abr 1 16:12
ago 8 20:15
feb 4 2004
abr 16 01:59
jul 31 16:17
Changelog
evolution
floppy
netload-0.1.1.tar.gz
fop-0.20.5-bin.tar.gz
51
drwxrwxr-x
-rw-rw-r--rw-rw-r--
2 sofia
1 sofia
1 sofia
sofia
sofia
sofia
52
12288
4096
19850
24
1082
124
2012
4096
4096
50386
6283144
4096
1522
4511664
ago
abr
ago
oct
jul
oct
abr
ago
feb
abr
jul
ago
abr
jul
8
29
7
15
31
15
1
8
4
16
31
2
2
14
21:27
23:30
16:08
2003
17:28
2003
16:12
20:15
2004
01:59
16:17
23:28
18:24
02:12
.
..
.bash_history
.bash_logout
.bash_profile
.bashrc
Changelog
evolution
floppy
netload-0.1.1.tar.gz
fop-0.20.5-bin.tar.gz
fotos
README.TXT
TheLinuxOS.pdf
-i
-p
Preserva los permisos, el propietario, el grupo y los tiempos de los archivos originales. En la
prctica cuando un usuario no privilegiado usa esta opcin no se mantienen el propietario ni el
grupo.
-r
De modo predeterminado cp no copia directorios, excepto cuando se usa esta opcin que ademas
copia los directorios recursivamente.
-v
En este ejemplo se asume que el destino prueba no existe. Entonces cp crea el destino como directorio
y copia ah dentro el contenido de /usr/local/share/ de forma recursiva.
[sofia@tux sofia]$ cp -rfv /usr/local/share/ prueba
Repetimos el ejemplo anterior, pero antes de realizar la copia, cp borra el directorio prueba y muestra
cada nombre de archivo antes de copiarlo.
53
La orden rm borra archivos, aunque puede ser utilizada para borrar directorios si se usa la opcin -r.
Esta opcin se debe usar con precaucin por que borra todo el directorio recursivamente.
Sinopsis: rm [opciones]
archivo...
Borra el archivo sin pedir confirmacin aun cuando sea de slo lectura (no modificable). Se entiende como "borrar a la fuerza".
-i
-r
-v
Ejemplos:
[sofia@tux sofia]$ rm Changelog
Importante
De modo predeterminado nunca se pide confirmacin al borrar un archivo.
[sofia@tux sofia]$ rm -i track*
rm: borrar el fichero regular `track01.mp3'? (s/n) n
rm: borrar el fichero regular `track02.mp3'? (s/n) s
rm: borrar el fichero regular `track03.mp3'? (s/n) n
54
Peligro
El uso de la opcin -rf debe hacerse con precacucin. Una vez borrados los archivos es
extremadamente dificultoso intentar recuperarlos.
55
origen destino
Si el ltimo argumento es un directorio existente, mv mueve cada uno de los archivos indicados en
origen a un archivo con el mismo nombre en ese directorio. Si no, si slo se dan dos archivos, renombra
el primero al segundo. Es un error que el ltimo argumento no sea un directorio y se den ms de dos
archivos como argumentos.
Las siguientes opciones son las de uso comn:
-f
-i
-v
destino
Ejemplos:
[sofia@tux sofia]$ mv Changelog CHANGELOG
Mueve el directorio prueba/info al directorio de trabajo del usuario actual, y muestra el archivo.
[sofia@tux sofia]$ mv -i prueba/man/man1 ~/man_sec_1
Pide confirmacin antes de mover el directorio prueba/man/man1 al directorio de trabajo del usuario
actual, cambiando el nombre a man_sec_1.
56
Ejemplos:
[sofia@tux sofia]$ mkdir rojo
azul
verde
claro
azul
[sofia@tux sofia]$ mkdir -p uno/dos/tres
dos
si no existe. Y si el directorio
uno
tampoco
57
Cuando se usa cd sin nign argumento, cambia al directorio de trabajo del usuario.
58
La orden rmdir slo borra directorios vacos. Si el directorio no est vacio muestra un mensaje de
error.
Sinopsis: rmdir [opciones] directorio...
Las siguientes opciones son las de uso comn:
-p
Ejemplos:
[sofia@tux sofia]$ rmdir rojo
59
Cada archivo en Linux tiene tres datos de fecha y hora, uno que corresponde al ltimo acceso, otro a
la ltima vez de modificacin del contenido del archivo y el tercero de la ltima vez que se cambiaron
los permisos o el usuario u otro dato que est en el nodo-i del archivo. Para resumir acceso, modificacin
y cambio (atime, mtime y ctime), puede usar la orden stat para ver estos datos.
La orden touch puede ser empleada para cambiar estos datos. Cuando se usa la orden touch con un
archivo que no existe, este es creado como un archivo vaco (con cero bytes).
La orden touch admite las siguientes opciones:
-a
-c
-d fecha
Usa la fecha indicada en lugar de la fecha actual del sistema. El formato de la fecha es
"aaaa-mm-dd hh:mm:ss", se puede omitir la fecha o la hora
-m
Ejemplos:
[sofia@tux sofia]$ touch hosts
Cambia la fecha y hora de acceso y modificacin del archivo hosts, usando el tiempo actual del sistema.
[sofia@tux sofia]$ touch -d "2005-04-01 14:00" -a hosts
60
Bsqueda de archivos
Linux proporciona tres maneras de buscar archivos, la ms verstil y poderosa es utilizando la orden
find que puede explorar cualquier parte del sistema de archivos buscando los archivos que cumplan
un determinado criterio.
Sinopsis: find [ruta] [expresin]
La expresin consiste de opciones que es evaluada para buscar el archivo. Las siguientes opciones
son las de uso comn:
-name patrn
-group nombre_grupo
-user nombre_usuario
-type c
El archivo es de tipo c:
b especial de bloques
c especial de caracteres
d directorio
p Tuberia nombrada (named pipe)
f archivo regular
l enlace simblico
s soquet
-size nk
-exec orden {} \;
Accin. Ejecuta orden en cada archivo encontrado por find. La cadena "{}"
sirve para indicar el nombre de archivo.
Ejemplos:
[sofia@tux sofia]$ find /etc -name "network"
/etc/network
find: /etc/ppp/peers: Permiso denegado
find: /etc/chatscripts: Permiso denegado
/etc/pcmcia/network
find: /etc/ssl/private: Permiso denegado
find: /etc/ipsec.d/private: Permiso denegado
61
Bsqueda de archivos
Busca desde el directorio /usr nombres de directorio que coincidan con "*gtk"
62
La otra manera de buscar archivos es empleando la orden locate, que a diferencia de find no busca en
el sistema de archivos si no en una base de datos de archivos, que es creada por la orden updatedb(1).
locate es una orden mucho menos flexible que find pero mucho mas rpida. Lo malo es que no es muy
exacta y en la bsqueda muestra todos los archivos que cumplen con el patrn dado. Veamos algunos
ejemplos:
[sofia@tux sofia]$ locate gtk
/etc/gtk
/etc/gtk-2.0
/etc/gtk-2.0/gdk-pixbuf.loaders
/etc/gtk-2.0/gtk.immodules
/etc/gtk/gtkrc.az
/etc/gtk/gtkrc.be
Muestra todos los archivos donde aparece la cadena "gtk". (Este ejemplo ha sido truncado porque son
muchos archivos)
[sofia@tux sofia]$ locate '*gtk'
/etc/gtk
/usr/lib/menu/alsaplayer-gtk
/usr/lib/mime/packages/alsaplayer-gtk
/usr/lib/python2.3/site-packages/gtk-2.0/gtk
/usr/share/doc/alsaplayer-gtk
/usr/share/themes/Default/gtk
/usr/src/MPlayer-1.0pre6a/Gui/mplayer/gtk
Este ejemplo nicamente busca los archivos que terminan en "gtk". Es importante encerrar el patrn
en comillas simples.
63
La orden which mas que buscar archivos busca rdenes externas (archivos ejecutables). La bsqueda
se realiza en las rutas de directorios indicadas en la variable de entorno PATH.
[sofia@tux sofia]$ which find
/usr/bin/find
En el ejemplo nos muestra la ruta completa del ejecutable y de la pgina del manual
64
5. Procesamiento de textos
Linux utiliza principalmente archivos de texto para guardar la configuracin del sistema y de sus
aplicaciones. Tambin cuando trabajamos en la lnea de rdenes generalmente obtenemos textos
como resultado de usar una determinada orden. Por estas razones las habilidades de usar rdenes para
procesamiento de textos son muy valiosas para muchas de las tareas cotidianas de usuarios avanzados,
desarrolladores o administradores de sistemas.
5.1. Objetivos
Este captulo cubre la mayora de las rdenes que se usan para procesar textos que son parte del paquete
GNU textutils. Tambin veremos como se envan archivos y flujos de texto a travs de las rdenes
que procesan textos para modificarlos y obtener otros resultados. El aprender a desarrollar estas habilidades es til en las tareas cotidianas de administracin, ya que por ejemplo con el uso de una de estas
rdenes podemos buscar y remplazar texto de forma programtica, que es mucho ms sencillo que
abrir el archivo en un editor de texto y hacerlo manualmente.
Al terminar este captulo, el alumno ser capaz de:
Realizar varias operaciones con archivos de texto
Identificar las rdenes conocidas como filtros
Aplicar filtros a flujos de texto
Enviar archivos y flujos de texto a atravs de filtros de texto para modificar el resultado
Usar varias rdenes estndar de UNIX encontradas en el paquete GNU textutils
65
Una caracterstica del sistema Linux es la de emplear archivos texto para guardar informacin del
sistema y otros datos de configuracin. Las siguientes rdenes son muy tiles por que permiten ver el
contenido de estos archivos texto.
La orden cat muestra el contenido de un archivo de principio a final sin ninguna pausa.
[sofia@tux sofia]$ cat /etc/nsswitch.conf
Muestra el contenido del archivo /etc/nsswitch.conf empezando por la ltima lnea hasta llegar a
la primera lnea.
Probablemente en lugar de cat, preferir usar la orden more o less para ver el contenido de archivos
texto, ya que estos presentan los archivos por pginas -o pantallas, si prefiere llamarlo as-, haciendo
fcil leer su contenido. La orden less es mucho mas flexible que more y en ambos puede usar la tecla
H para ver una ayuda breve y para salir del programa la tecla Q. A continuacin un ejemplo de
su uso.
[sofia@tux sofia]$ more /etc/nsswitch.conf
[sofia@tux sofia]$ less /etc/nsswitch.conf
De modo predeterminado solo muestra las diez primeras lneas del archivo /etc/nsswitch.conf
[sofia@tux sofia]$ head -4 /etc/nsswitch.conf
66
Concatenando archivos
Las rdenes cat y tac se usan tambien para concatenar archivos. Veamos unos ejemplos.
[sofia@tux sofia]$ cat maillog.0 maillog.1 maillog.2
67
La orden nl es muy til cuando usted quiere numerar una por una las lneas de un archivo de texto o
un flujo de entrada. De modo predeterminado nl slo numera las lneas no vacas.
Sinopsis: nl[opciones]
[archivo...]
Usa ESTILO para la numeracin de las lneas. Donde ESTILO puede ser:
a numera todas las lneas
t numera slo las lneas no vacas
-n FORMATO
-s CADENA
defaults
{
includedir /etc/xinetd.d
68
69
La orden wc se emplea para contar lneas, palabras y bytes en un archivo o en la entrada estndar. Si
se proporciona ms de un archivo muestra la suma total. Cuando no se usa opciones wc muestra en
una lnea el nmero de lneas, el nmero de palabras, seguido del nmero de bytes y el nombre del
archivo.
Sinopsis: wc [opcion]
[archivo...]
-w
-c
-m
Muestra el nmero de lneas, de palabras y de bytes de cada archivo y al final la suma total de ambos.
70
La orden sort ordena las lneas de un archivo texto y muestra el resultado en la salida estndar. Adems
de ordenar se puede usar tambin para mezclar de forma ordenada dos o ms archivos.
Sinopsis: sort[opciones]
[archivo...]
-d
-f
-k POS1[,POS2]
Especifica el campo por cual ordenar, que consiste en una parte de la lnea entre
POS1 y POS2 (o hasta el final de la lnea si POS2 es omitido). Para ordenar por el segundo campo debe usar "-k 2,2". Mas adelante hay un ejemplo
-n
-o archivo
-r
-t SEP
71
Ordena de acuerdo al direccionario, colocando primero los nmeros y luego en orden alfabtico.
Comparemos ahora con el siguiente resultado
[sofia@tux sofia]$ sort -n varios
bindev
etc
home
lib
mnt
proc
Proc
Sbin
var
32
64
512
1024
3233
Coloca primero las letras ordenadas en forma alfabtica y luego ordena los nmeros de forma numrica.
Naturalmente esta forma de uso es de gran utilidad cuando los archivos slo contienen nmeros.
En el siguiente ejemplo tomamos dos archivos desordenados lista1 y lista2.
[sofia@tux sofia]$ cat lista1
Terrazas
Orozco
Peralta
Morales
Mendoza
Quispe
[sofia@tux sofia]$ cat lista2
Hidalgo
Figueroa
Durn
Benavides
Arnez
72
El ltimo ejemplo ilustra que es posible ordenar de acuerdo a un campo. Los campos pueden estar separados por espacios en blanco o tabuladores.
Tenemos el archivo personas que contiene los siguientes datos:
[sofia@tux sofia]$ cat personas
Carlos Miranda 2136746
Samuel Reseguin 2381285
Cecilia Chalco 2759423
Fabiola Tamayo 2764846
Paola Vaca
3527593
Mariel Rau
3149126
Milton Cortez
2452222
Federico Tamayo 2317869
Angel Tamayo
2120020
La siguiente instruccin ordenar el archivo primero por el segundo campo y despus por el primer
campo. Cuando un archivo de texto contiene campos, sort los numera de izquierda a derecha empezando
en 1.
[sofia@tux sofia]$ sort -k 2,2 -k 1,1 personas
Cecilia Chalco 2759423
Milton Cortez
2452222
Carlos Miranda 2136746
Mariel Rau
3149126
Samuel Reseguin 2381285
Angel Tamayo
2120020
Fabiola Tamayo 2764846
Federico Tamayo 2317869
Paola Vaca
3527593
Importante
Recuerde que la orden sort no modifica el archivo original, nicamente muestra el resultado en la salida estndar.
73
Cortando texto
La orden cut escribe a la salida estndar partes seleccionadas de cada lnea de un archivo dado.
Sinopsis: cut opcion archivo
Algunas opciones comunes son:
-b lb
-c lc
-f
-d SEP
Se usa con -f para indicar otro separador de campos diferente al predeterminado que es el
caracter de tabulacin (TAB)
El siguiente ejemplo solo muestra los primeros cinco caracteres de cada lnea
[sofia@tux sofia]$ cut -c 1-5 personas
Carlo
Samue
Cecil
Fabio
Paola
Marie
Milto
Feder
Angel
Si un archivo tendra cinco campos delimitados por tabulador, el siguiente ejemplo slo mostrara los
campos 2, 5, 6 y 7.
[sofia@tux sofia]$ cut -f 2,5-7 planilla
El siguiente ejemplo toma un archivo cuyo delimitador de campos es ':' (el caracter dos puntos) y
muestra slo los campos 1, 5, 6 y 7.
[sofia@tux sofia]$ cut -d: -f 1,5-7 /etc/passwd
74
Pegando texto
La orden paste escribe a la salida estndar lneas que consiste de leer secuencialmente la lnea correspondiente en cada archivo dado separados por el caracter tabulador.
Sinopsis: paste opcion archivo
Las siguientes son las opciones comunes de uso para esta orden:
-s
Veamos un ejemplo
Supongamos que tenemos dos archivos, el primero con el siguiente contenido:
[sofia@tux sofia]$ cat literal
uno
tres
dos
cinco
Veamos ahora que ocurre si ejecutamos la orden paste usando estos dos archivos:
[sofia@tux sofia]$ paste literal romano
uno
I
tres
III
dos
II
cinco
V
IV
VI
Observe que paste no verifica la correspondencia de lneas, solo las toma de forma secuencial.
75
Para convertir o expandir los tabuladores a espacios se usa la orden expand. Las siguientes son las
opciones comunes de usar:
-i
-t N
Veamos un ejemplo. El siguiente archivo contiene datos personales, en tres campos. Nombre, Apellido,
Edad y Sexo. Los campos Edad y Sexo estn separados por tabulador, como se puede ver no tiene el
aspecto de una tabla ordenada.
[sofia@tux sofia]$ cat datpers
Carlos Miranda 21
M
Samuel Reseguin 28
M
Cecilia Bracamonte
25
Paola Vaca
32
F
Jorge Salvatierra
35
F
M
Para que tenga un aspecto de tabla vamos a usar espacios en lugar de tabuladores empleando la orden
expand
[sofia@tux sofia]$ expand -t 22 datpers
Carlos Miranda
21
Samuel Reseguin
28
Cecilia Bracamonte
25
Paola Vaca
32
Jorge Salvatierra
35
76
M
M
F
F
M
La orden unexpand toma dos o mas espacios consecutivos y los convierte a tabuladores y posiblemente
seguidos de tantos espacios como sea necesario.
En la siguiente tabla se muestran sus opciones comunes
-a
-t N
Veamos un ejemplo:
[sofia@tux sofia]$ cat tabla-datpers
Carlos Miranda
21
Samuel Reseguin
28
Cecilia Bracamonte
25
Paola Vaca
32
Jorge Salvatierra
35
M
M
F
F
M
Aparentemente no ha ocurrido nada, pero se han reemplazado todos los 8 espacios consecutivos por
tabulador seguidos de tantos espacios sean necesarios para que no se pierda el formato de tabla.
77
tr es la orden que se puede usar para borrar o remplazar caracteres especficos en un documento.
Syntaxis: tr [OPCIONES] CONJ1 [CONJ2]
Cuando se van a remplazar caracteres se deben indicar ambos CONJ1 y CONJ2. Los caracteres en CONJ1
van a ser reemplazados por los caracteres en CONJ2
Podemos utilizar las siguientes opciones
-d
-s
Reemplaza una secuencia de caracteres repetidos indicados en CONJ1 por uno solo caracter de este.
La siguiente tabla muestra algunas posibles formas de indicar las cadenas de caracteres para los conjuntos de caracteres CONJ1 y CONJ2.
\NNN
Barra invertida
\a
\b
\f
\n
\r
\t
Tabulador. Control-I
C*N
Indica N veces el caracter C. Si se omite N se interpreta tantas veces sea necesario repetir C para igualar a CONJ2.
Precaucin
CONJ1 y CONJ2 se interpretan como una lista de caracteres y no como cadenas.
Veamos un ejemplo de como reemplazar todas las maysculas en un archivo dado.
78
79
La orden join une dos archivos o mejor dicho empareja por un campo comn. De modo predeterminado
la lnea resultante empieza por el campo comn delimitado por espacio.
Sinopsis: join [OPCION]
ARCH1 ARCH2
-e VACIO
-i
-j CAMPO
-1 CAMPO
-2 CAMPO
Importante
Ambos archivos deben estar ordenados por el campo que tienen en comn.
Ejemplo:
[sofia@tux sofia]$ cat datosA
1 mes1 dato1
2 mes2 dato2
3 mes3 dato3
[sofia@tux sofia]$ cat datosB
val1 lpz 1
val2 cbb 2
val3 scz 3
[sofia@tux sofia]$ join -1 1 -2 3 datosA datosB
1 mes1 dato1 val1 lpz
2 mes2 dato2 val2 cbb
3 mes3 dato3 val3 scz
80
Como podemos ver el campo en cmun es el primero en el archivo datosA y el tercer campo en el archivo datosB. De modo predeterminado join espera que el campo en comn sea el primero por lo que
la siguiente orden no da ningn resultado.
[sofia@tux sofia]$ join datosA datosB
[sofia@tux sofia]$
81
[ARCHIVO [PREFIJO]]
-b BYTES
Escribe los primeros BYTES del archivo de entrada en cada archivo de salida. Se puede
aadir el prefijo "b" para mltiplos de 512. El prefijo "k" para mltiplos de 1024 y "m"
para 1048576.
-d
Al crear los archivos usa dgitos para los sufijos en lugar de letras minsculas
En el siguiente ejemplo, el archivo listfiles es dividido en varios archivos de 25 lneas cada uno,
cuyos nombres empiezan por listf.
[sofia@tux sofia]$ split -l25 listfiles listf
[sofia@tux sofia]$ ls -l listf*
-rw-rw-r-- 1 sofia sofia 568 Apr 23 13:28 listfaa
-rw-rw-r-- 1 sofia sofia 526 Apr 23 13:28 listfab
-rw-rw-r-- 1 sofia sofia 669 Apr 23 13:28 listfac
-rw-rw-r-- 1 sofia sofia 582 Apr 23 13:28 listfad
-rw-rw-r-- 1 sofia sofia 2345 Apr 23 13:06 listfiles
Alerta
Si no se especifica PREFIJO, entonces los archivos resultantes empieza por la letra "x",
xaa, xab, xac, xad, etc.
82
Muchas veces se requiere tener un archivo en el cual no existan lneas repetidas consecutivas. La orden
uniq se puede usar para este cometido.
-c
-d
-i
-u
Nota
La orden uniq requiere que los datos de entrada se encuentren ordenados.
83
La orden od muestra el contenido del archivo en formato octal, hexadecimal u otro. Cada linea est
precedida del desplazamiento (offset) en la entrada y a continuacin los grupos de datos del archivo.
De modo predeterminado od muestra el desplazamiento en octal y cada grupo de datos del archivo
son dos bytes que son mostrados como un nmero octal.
Opciones comunes:
-A RADIX
decimal
octal
hexadecimal
no mostrar desplazamiento
-j BYTES
-N BYTES
-t TIPO
Veamos un ejemplo:
[sofia@tux sofia]$ od -Ad
0000000
C
a
r
l
0000016
1 \t
M \n
0000032
u
i
n \t
0000048
B
r
a
0000064 \n
P
a
o
0000080 \n
J
o
r
0000096
r
a \t
3
0000104
84
-tc datpers
o
s
M
S
a
m
u
2
8 \t
M
c
a
m
o
l
a
V
g
e
S
5 \t
M \n
i
e
\n
n
a
a
r
l
C
t
c
l
a
e
e
a
v
n
R
c
\t
\t
a
d
e
i
2
3
t
a
s
l
5
2
i
\t
e
i
\t
\t
e
2
g
a
F
F
r
od es una orden muy til para ver archivos binarios sin correr el riesgo de que nuestra terminal empiece
a mostrar basura. Si usted empleara la orden cat para ver un archivo binario lo ms probable es que
la terminal se ensucie y los caracteres sean ilegibles. Puede reinicializar la terminal y hacerla legible
otra vez empleando la orden reset.
85
Utilizando sed
Sed es un editor de flujos de texto (stream editor). Es utilizado para realizar transformaciones en flujos
de texto o en un archivo. sed es bastante verstil y poderoso lo que hace que sea un poco dificultoso
de usarlo a ciertos niveles.
Habitualmente sed se emplea para reemplazar palabras y frases completas, cosa que tr no puede realizar.
Para esta tarea se usa la orden s de sed que tiene esta sintaxis:
's/EXPREG/REMPLAZO/BANDERAS'
Esta orden busca un patrn que coincida con EXPREG y si lo encuentra es remplazado por REMPLAZO.
Las banderas que se usan habitualmente son:
g
Ejemplos:
[sofia@tux sofia]$ sed 's/hosts/HOSTS/' /etc/hosts.allow
# /etc/HOSTS.allow: list of hosts that are allowed to access the system.
#
See the manual pages HOSTS_access(5), hosts_options(5)
#
and /usr/doc/netbase/portmapper.txt.gz
En este ejemplo buscamos el patrn hosts y se remplaz slo la primera ocurrencia por HOSTS
[sofia@tux sofia]$ sed 's/hosts/HOSTS/g' /etc/hosts.allow
# /etc/HOSTS.allow: list of HOSTS that are allowed to access the system.
#
See the manual pages HOSTS_access(5), HOSTS_options(5)
#
and /usr/doc/netbase/portmapper.txt.gz
La opcin -n suprime cualquier salida a pantalla pero la bandera p hace que se muestren slo las lneas
que fueron remplazadas.
86
Probablemente grep es una de las rdenes ms utilizadas del sistema. Es sumamente til cuando se
necesita buscar determinados patrones (palabras o frases) en un archivo de texto o un flujo de entrada,
o en archivos contenidos en una estructura de directorio.
Sinopsis: grep [opciones]
patrn [archivo...]
-c
-e PATRON
Util para usar con patrones que empiezan con el caracter - (guin).
-H
Muestra el nombre del archivo en cada coincidencia, cuando se busca en varios archivos.
-h
-i
-L
Slo muestra el nombre de los archivos que no contienen ninguna coincidencia del patrn.
-l
Slo muestra el nombre de los archivos que tienen alguna coincidencia del patrn.
-n
-R, -r
-v
Invierte el sentido de la bsqueda, muestra las lneas que no coinciden con el patrn.
-w
Slo muestra las lneas que contienen el patrn como una palabra y no como parte de
otra.
Muestra las lneas en las que el patrn user aparece como una palabra.
[sofia@tux sofia]$ grep -v localhost /etc/hosts
# Do not remove the following line, or various programs
87
Busca el patrn oss en todos los archivos bajo el directorio /usr/share/doc/alsa-base/ sin distinguir
maysculas de minsculas y en el resultado incluye el nmero de lnea donde hay una coincidencia
con el patrn.
88
Una expresin regular es un patrn especial que describe un conjunto de cadenas. Se usa cuando uno
quiere buscar una palabra o frase (una cadena en general) que se conoce parcialmente. El uso de estas
expresiones en grep muchas veces facilita la bsqueda de patrones que de otro modo sera muy complicado (o hasta inutil) de realizar.
Una expresin regular se construye utilizando los siguientes caracteres especiales:
Ejemplo Coincidencia
[]
ma.a
mil?
mi, mil
mil*
mil+
{n}
mil{2}
mill
{n,}
mil{2,}
mill, milll
{n,m}
Para usar expresiones regulares debemos usar la opcin -E o usar la orden egrep. Pero observar que
los caracteres especiales [], ., *, ^, $ funcionan tambin con grep.
Veamos como podemos usar expresiones regulares mostrando algunos ejemplos que utilizan el siguiente
archivo:
[sofia@tux sofia]$ cat expreg-grep
01 En el mes de la Primavera
02 La primera estacin del ao es primavera ?
03 esta estacin produce mucha alegra
las 04 plantas producen abundantes flores
05 El paseo del Prado se llena de flores
06 primera
89
07 Impropio inapropiiiiado
08 apretar
Para buscar todas las cadenas donde aparece una palabra con la letra P mayscula o minscula, seguida
de la letra r y a continuacin cualquier letra que no sea o, tenemos que usar la siguiente orden:
[sofia@tux sofia]$ grep [pP]r[^o] expreg-grep
01 En el mes de la Primavera
02 La primera estacin del ao es primavera ?
05 El paseo del Prado se llena de flores
06 primera
08 apretar
Vamos a buscar ahora todas las cadenas que empiezan exactamente con dos nmeros y contienen una
palabra que termina en do:
[sofia@tux sofia]$ egrep '^[0-9]{2}.*do\>' expreg-grep
05 El paseo del Prado se llena de flores
07 Impropio inapropiiiiado
Los smbolos \< y \> coinciden con una cadena vaca al principio y final de una palabra respectivamente. Tambin estn los caracteres especiales ^ (acento circunflejo) y $ (pesos). El patrn '^mil'
coincidira con las cadenas que empiezan por la palabra mil. Por el contrario, el patrn era$ coincidira
con las cadenas que terminan con las letras era.
90
6.1. Objetivos
Ahora usted va aprender a utilizar uno de los editores ms difundidos en Linux, el editor Vi.
Al concluir esta seccin el alumno ser capz de:
Comprender los tres modos de trabajo en vi
Utilizar varias rdenes de edicin de textos
Navegar en el editor vi
Abrir, editar y grabar documentos en vi
Buscar/remplazar textos y usar expresiones regulares en vi
Ejecutar rdenes externas
Trabajar con ventanas en vi
91
El editor vi
6.2. El editor vi
El editor estndar de los sistemas UNIX es Vi. La versin Linux de este editor se llama Vi Mejorado
del ingls Vi Improveed, que se conoce como Vim. Usualmente en los sistemas Linux la orden vi es
un enlace que invoca a vim.
Vi tiene una caracterstica especial de operacin que confunde a los principiantes en este editor, que
son los denominados tres modos de operacin:
92
Modo orden
Modo insertar
Insertando texto
Para ingresar al editor Vi basta con escribir la orden vi. Recuerde que de modo predeterminado siempre
nos encontramos en modo orden y para ir al modo insertar podemos usar alguna de las siguientes rdenes:
(minscula) Abre una nueva lnea debajo de la lnea actual, y pone el cursor en esa lnea para comenzar a insertar texto.
(mayscula) Abre una nueva lnea encima de la lnea actual, y pone el cursor en esa lnea para comenzar a insertar texto.
Cuando usamos alguna de estas rdenes para ir al modo insertar, Vi muestra en la lnea de mensajes
(ltima lnea de la pantalla) el mensaje: -- INSERTAR --.
Para salir del modo insertar y regresar al modo orden basta con presionar una vez la tecla ESC.
93
Insertando texto
94
Borrando texto
En Vi podemos borrar texto afectando slo un caracter, varios caracteres, palabras o lneas enteras.
Las rdenes de borrar texto se invocan desde el modo orden y corresponden a las siguientes letras:
Borra un caracter en la posicin del cursor. Igual que la tecla Suprimir (delete).
Borra un caracter a la izquierda del cursos. Igual que la tecla Retrocese (backspace).
dw
dd
d^
Si por accidente borr o hizo un cambio que no quera, puede deshacer la ltima accin usando la orden
u deshacer (undo). Puede deshacer hasta 30 cambios.
Nota
En vi, el texto borrado es puesto en un espacio temporal en memoria (buffer) que luego
se puede pegar en otro lugar del documento de texto.
95
Para muchos acostumbrados a otros tipos de editores las rdenes para cambiar y reemplazar texto parecen redundantes, pero cuando se aprenden a usar son muy tiles para cambiar una letra, una palabra
o toda una lnea.
96
Reemplaza texto hasta que se presione la tecla ESC. En la lnea de mensajes vi muestra
REEMPLAZAR --.
cw
Cambia texto desde la posicin del cursor hasta el final de la palabra actual.
c$
Cambia texto desde la posicin del cursor hasta el final de la lnea actual.
c^
Cambia texto desde la posicin del cursor hasta el principio de la lnea actual.
--
Todas las operaciones de cortar y copiar texto usan una memoria intermedia (buffer) donde el texto
es almacenado temporalmente. Las operaciones sucesivas de cortar y copiar reemplazan el contenido
del buffer.
Las siguientes letras se usan para copiar y pegar texto en Vi:
yw
(minscula) Pega el contenido del buffer a la derecha del cursor o por debajo del cursor si es una
lnea.
(mayscula) Pega el contenido del buffer a la izquierda del cursor o por encima del cursor si es
una lnea.
Recuerde que para cortar y pegar texto (mover porciones de texto) debe usar primero alguna orden de
borrar texto y luego pegarlo. Las rdenes de borrar texto se vieron en Seccin 6.4, Borrando texto.
97
Navegando en vi
6.7. Navegando en vi
Cuando use Vi es muy probable que las teclas Inicio, Fin, RePg, AvPg y las feclas del cursor funcionen adecuadamente, de no ser as puede emplear algunas de las siguientes letras.
98
Ctrl-F
Ctrl-B
1G
Multiplicador de rdenes
Muchas de las operaciones que se realizan en Vi necesitan realizarse un nmero determinado de veces,
como por ejemplo mover el cursor cinco lneas abajo. La forma ms intuitiva de hacer esto es precionar
5 veces la tecla j.
Vi proporciona la posibilidad de que cualquier accin puede ser realizada un nmero n de veces, indicando este nmero como prefijo. Dicho de otro modo una orden en vi podemos verla como: [n]orden.
Algunos ejemplos son:
5yy
12x
25l
99
Usando archivos
Para abrir un archivo y editarlo en Vi, todo lo que necesita hacer es pasar el nombre del archivo como
argumento. Por ejemplo si tiene un archivo llamado prueba en el directorio actual debe escribir:
[sofia@tux sofia]$ vi prueba
Si el archivo prueba no exite, Vi entender que se trata de un archivo nuevo. Puede tambin abrir un
archivo desde el mismo editor usando la orden :e, por ejemplo :e /var/tmp/prueba.
Suponga usted que necesita insertar el contenido de un archivo llamado anexo en el archivo que est
editando. Para esto ubique el cursor en la posicin que desea insertar y luego escriba la orden :r anexo.
Cuando usted haya terminado de editar el archivo y quiera guardar sus cambios simplemente escriba
:w en el modo orden. Aqu estamos usando el modo denominado ltima lnea al que se llega con la
tecla : (dos puntos) y en este modo ejecutamos la orden escribir (w del ingls write).
Para abandonar el editor debe usar la orden :q. Esta orden no le dejar salir de Vi si realiz cambios
que no fueron guardados, para forzar la salida de Vi perdiendo estos cambios tiene que usar el caracter
! que obliga a ejecutar la orden, del siguiente modo :q!.
Si quiere guardar sus cambios y salir inmediatamente de Vi tiene que usar la orden :wq. Alternativamente puede utilizar las rdenes :x o ZZ (maysculas) que sirven para salir de Vi guardando los ltimos
cambios si es necesario.
100
Buscando cadenas
Muchas veces necesitar buscar una cadena en el texto que est editando. Vi proporciona las siguientes
letras para las tareas de bsqueda de cadenas, que se deben usar en modo orden:
Busca cadena desde la posicin actual del cursor hacia adelante en el documento.
?cadena
Busca cadena desde la posicin actual del cursor hacia atrs en el documento.
maysculas y minsculas.
Tambin puede usar los caracteres especiales para bsqueda de cadenas de la orden grep:
/^proc Busca las lneas que empiezan con la palabra proc.
/host$ Busca las lneas que terminan en la palabra host.
/Volume.[12] Esta bsqueda coindice con patrones como: Volume01, Volume02, Volume11.
/\<wait\> Busca la palabra wait.
Sugerencia
Las operaciones de bsqueda de cadenas de vi, pueden tambien utilizarse en las herramientas more y less.
101
Para buscar una cadena y reemplazarla por otra, Vi comparte una sintaxis similar a la encontrada en
sed con ligeras diferencias.
Para reemplazar una cadena se usa la orden :s, cuya sintaxis es:
[x,y]s/actual/nueva/[opciones]
Donde:
Especifica la primera y ltima lnea respectivamente, del rango donde se quiere realizar la
operacin de remplazo. Si se omiten slo se toma la lnea actual del cursor.
actual
nueva
Por ejemplo, la siguiente secuencia reemplaza slamente la primera ocurrencia de la cadena ext2 en
la lnea actual con la cadena ext3.
:s/ext2/ext3
Si quisera reemplazar todas las ocurrencias en la lnea actual use la opcin adeacuada, as:
:s/ext2/ext3/g
Para reemplazar todas las ocurrencias de ext2 con la cadena ext3 en todo el documento, haga lo siguiente:
:1,$s/ext2/ext3/g
Aqu estamos indicando el rango, 1 (primera lnea) a $ (ltima lnea). Tambin puede usar % para indicar
todo el archivo: :%s/ext2/ext3/g.
102
Opciones en vim
Vim ofrece un nmero de variables internas e interruptores que se usan para obtener efectos especiales.
Estas opciones vienen en tres formas:
lgica Interruptor que se activa o desactiva.
numrica Tiene un valor numrico.
cadena Tiene un valor de cadena.
Sugerencia
Si quiere que todos los usuarios compartan las mismas opciones, edite el archivo
/etc/vimrc.
Para personalizar las opciones para un usuario particular basta crear el archivo .vimrc
en el directorio de trabajo e indicar all las opciones deseadas.
103
Tareas avanzadas en vi
Estas son algunas tareas que podemos considerar avanzadas, y que ms de una vez le podrn ser de
utilidad.
Frecuentemente usted querr ejecutar una orden externa (orden del sistema) mientras est en vi, para
hacerlo sin salir del editor puede usar la orden :!, del siguiente modo:
:! ls -l
Cuando vi haya terminado de ejecutar la orden le pedir que presione la tecla ENTER para regresar
a su sesin de vi.
Una caracterstica til de Vim que no est presente en vi es el manejo de ventanas. Usted las puede
usar para editar dos archivos diferentes o para ver diferentes partes de un mismo archivo en una pantalla.
:split Divide horizontalmente la ventana actual en dos ventanas, mostrando el mismo archivo en
ambas.
:vsplit Divide verticalmente la ventana actual en dos ventanas, mostrando el mismo archivo en ambas.
Para moverse entre las ventanas tiene que presionar las teclas Ctrl+W dos veces, que va saltando de
ventana en ventana. Puede usar tambin la combinacin Ctrl+W seguida de una de las feclas del cursor
para ir a la ventana que est en esa direccin.
Si la orden de dividir la venta es seguida por el nombre de un archivo, ste ser mostrado en la nueva
ventana. Por ejemplo:
:split prueba
Para cerrar una vetana, muvase hasta la ventana que quiere cerrar y luego escriba la orden :close.
104
Tareas avanzadas en vi
105
106
7.1. Objetivos
En este captulo vamos a abordar diferentes temas y una vez completados usted ser capz de:
Entender como funciona el control de acceso a archivos
Controlar el acceso a los archivos usando permisos
Cambiar los permisos de archivos
Establecer permisos predeterminados
Entender como funciona el esquema de propiedad de archivos en Linux
Cambiar la propiedad de archivos
Usar enlaces rgidos y simblicos
107
Los permisos determinan como pueden acceder los usuarios a los archivos y directorios presentes en
el sistema.
El sistema cuenta con tres tipos de permisos regulares que son: lectura, escritura y ejecucin. Estos
permisos pueden ser fijados para tres categoras de usuarios:
el propietario (usuario) del archivo o directorio
el grupo al que pertenece el archivo o directorio
otros usuarios, que no son ni el propietario ni un miembro del grupo dueo del archivo o directorio
108
Cuando se utilizan permisos estos tienen diferentes efectos o significados cuando son aplicados en
archivos y directorios.
El permiso de lectura (read) permite a un usuario leer el contenido del archivo o en el caso de un directorio, listar el contenido del mismo (usando ls).
El permiso de escritura (write) permite a un usuario escribir y modificar el archivo. Para directorios,
el permiso de escritura permite crear nuevos archivos en el directorio o borrar archivos ya existentes
en el directorio.
Por ltimo, el permiso de ejecucin (execute) permite a un usuario ejecutar el archivo si es un programa
o una secuencia de instrucciones (script). En el caso de directorios, el permiso de ejecucin permite
al usuario ingresar al directorio (usando cd).
109
Cuando usamos la orden ls con la opcion -l obtenemos un listado con informacin ampliada sobre
los archivos y directorios, que comprende:
Tipo de archivo
Informacin sobre los permisos
Informacin sobre el nmero de enlaces (veremos ms adelante)
El usuario al que pertenece el archivo
El grupo al que pertenece el archivo
El tamao del archivo
La fecha y hora de creacin
El nombre del archivo
Los permisos se indican en una secuencia de tres letras consecutivas: "rwx", donde "r" simboliza lectura (read), "w" simboliza escritura (write) y "x" ejecucin (execute). La presencia de una de las letras
significa que se tiene el permiso y la ausencia lo contrario, que es indicado por un guin "-" en lugar
de la letra. Veamos un ejemplo:
[sofia@tux sofia]$ ls -l lista
-rw-r--r-- 1 sofia
sofia
lista
sofia
sofia
400
may 20 10:00
lista
En este ejemplo estamos particularmente interesados en la primera columna que contiene los permisos
que se interpretan del siguiente modo:
Permisos Ambito
rw-
110
Significado
Permisos para el usuario El usuario tiene permiso de lectura y escritura sobre el archivo
Permisos Ambito
Significado
r--
r--
En este ejemplo no corresponde que el archivo lista tenga algun permiso de ejecucin (x) ya que no
se trata de un programa.
Los permisos se representan para el sistema como un grupo de 3 bits, a los que les corresponden los
siguientes valores:
100 = 4 : Lectura (read)
010 = 2 : Escritura (write)
001 = 1 : Execute (execute)
Finalmente, en la siguiente tabla mostramos los tipos de archivos que se pueden encontrar en un sistema
Linux:
Archivo regular
Directorio
Enlace simblico
111
Es importante observar que los permisos de un archivo tambin dependen de los permisos del directorio
en el que residen, en el sentido de que los permisos del directorio son efectivos antes que los permisos
de los archivos contenidos en se directorio.
Por ejemplo, suponga que tiene la siguiente estructura de archivos y directorios:
/home
|
`-- informes
|-- ene-mar-04.pdf
|-- abr-jun-04.pdf
`-- jul-sep-04.pdf
Supongamos ahora que el archivo abr-jun-04.pdf tiene los permisos -rw-rw-rw-, otros usuarios no
podrn acceder a l, a menos que tambin tengan los permisos de lectura y ejecucin para el directorio
informes.
En base a esto, si un usuario quiere restringir el acceso a todos sus archivos, podra simplemente poner
los permisos de su directorio de trabajo (home) a -rwx------. De esta forma ningn usuario regular podr
acceder a su directorio ni a ninguno de sus archivos o subdirectorios. El usuario no necesita preocuparse
de los permisos individuales de cada uno de sus archivos o directorios.
112
Manipulando permisos
La orden chmod se usa para cambiar los permisos de un objeto (archivo o directorio). Unicamente el
propietario o dueo puede cambiar los permisos del objeto, con excepcin del usuario root que no
necesita ser dueo para cambiar cualquier permiso.
La sintaxis de la orden chmod es:
chmod
{u,g,o,a}{=,+,-}{r,w,x} objeto
Indican que se afecta los permisos del dueo, grupo, otros o todos (user, group, other,
all)
=, +, -
Indica que se est otorgando (+), quitando (-) o fijando (=) el permiso
r, w, x
Por ejemplo si quiere dar a todos (usuario, grupo y otros) el permiso de lectura para el archivo lista
tendra que usar la siguiente orden:
chmod a+r lista
Alternativamente puede usar la siguiente orden:
chmod +r lista
Que es igual al anterior. Cuando no se especifica el mbito (usuario, grupo, otros) de modo predeterminado es todos (a).
Para otorgar todos los permisos al usuario sin tocar los permisos de grupo y otros tendra que hacer:
chmod u+rwx unarchivo
Para dar exactamente al grupo permiso de slo lectura y a otros ningn permiso tiene que usar la orden
as:
chmod g=r,o= unarchivo
113
Manipulando permisos
Esta forma de usar chmod se denomina notacin simblica porque se usan letras y smbolos para
modificar los permisos. Exite otra forma de usar chmod que se denomina notacin numrica u octal
en la que se usan nmeros.
Sintaxis: chmod XYZ
objeto
Donde X son los permisos para el usuario, Y para el grupo y Z para otros.
Cuando se usa notacin numrica no es posible afectar un slo mbito (usuario, grupo, otros) como
en la notacin simblica, siempre se tiene que indicar los permisos para todos (XYZ). Vea el siguiente
ejemplo:
chmod 6 lista
En esta orden el permiso 6 se interpreta como 006 que resulta en los permisos ------rw- (6 = 4 lectura
+ 2 escritura).
Puede tambien afectar los permisos de varios archivos utilizando comodines. La siguiente orden pone
los permisos rw-r----- para todos los archivos cuyo nombre termina en .txt:
chmod 640 ~/*.txt
Una opcin muy til es -R que permite afectar los permisos de varios objetos recursivamente. Es decir
que todos los archivos y directorios que estn bajo ~/mp3/ tendrn los permisos indicados.
chmod -R 640 ~/mp3/*
114
Permisos predeterminados
Cada vez que usted crea un archivo o directorio el sistema le asigna un conjunto de permisos basado
en el valor conocido como umask. En los sistemas Linux el valor de umask es fijado para todos los
usuarios en alguno de los archivos globales /etc/bashrc o /etc/profile.
Los permisos predeterminados para archivos y directorios sin umask son:
Archivos: rw-rw-rw- (0666)
Directorios: rwxrwxrwx (0777)
Para asignar los permisos a un objeto, el sistema realiza la siguiente operacin:
valor predeterminado - valor umask = permiso ha asignar
Veamos un ejemplo de como funciona esto, primero averiguemos el valor de umask escribiendo:
[sofia@tux sofia]$ umask
1 sofia sofia
0 2005-07-08 16:20 miarchivo
2 sofia sofia 4096 2005-07-08 16:20 midirectorio
115
Permisos predeterminados
Si usted quiere que sus archivos tengan de modo predeterminado los permisos rw-r----- (640) entonces
el valor de umask que debe usar tiene que considerar tambin los permisos para los directorios. La
manera ms fcil de hacer esto es concentrarse en los permisos de directorio, porque el sistema nunca
asigna el permiso de ejecucin a los archivos cuando los crea.
Dicho esto, los permisos deseados 640, quedaran como 750 (7=6+1, 5=4+1, esto es sumando el bit
de ejecucin), entonces calculamos el nuevo valor de umask as:
777 - 750 = 027
Podemos fijar el nuevo valor de umask escribiendo:
[sofia@tux sofia]$ umask 027
Para usar este valor en las sesiones futuras, basta agregar la orden anterior en su archivo ~/.bashrc
116
Permisos especiales
Adems de los tres permisos regulares, los archivos en Linux poseen adiconalmente los siguientes tres
permisos especiales:
SUID Le permite al usuario ejecutar un programa tomando la identidad del dueo de ese programa
(permiso s para el usuario, valor numrico 4000).
SGID Le permite al usuario ejecutar un programa tomando la identidad del grupo al que pertenece
ese programa (permiso s para el grupo, valor numrico 2000).
Bit pegajoso Sticky bit. Usado en un directorio comn para varios usuarios, controla que slo el
dueo y no otro usuario pueda borrar sus archivos (permiso t para otros, valor numrico 1000).
Estos permisos se deben usar slo cuando son necesarios y con precacucin porque implican cierto
riesgo de seguridad.
Estos permisos especiales se usan en algunas partes del sistema, como en el archivo del programa
passwd:
[sofia@tux sofia]$ ls -l /usr/bin/passwd
Como se observa, el archivo tiene el permiso SUID indicado por la presencia de la letra s en los permisos del usuario r-s. Como el dueo es root, cada vez que un usuario ejecuta la orden passwd este
se ejecuta con la identidad del usuario root, ignorando la verdadera identidad del usuario.
Como con los permisos regulares, para manipular estos permisos tambin usamos la orden chmod de
manera simblica o numrica.
Por ejemplo las siguientes rdenes son equivalentes, para asignar el permiso SUID algun programa:
chmod 4555 /algun/programa
chmod u=rxs,g=rx,o=rx /algun/programa
La siguiente orden asigna el permiso SGID:
chmod g+s /otro/programa
117
Un segundo uso del bit SGID es en directorios comunes, es decir un directorio que contiene archivos
compartidos por varios usuarios que comparten a su vez un grupo comn.
Por ejemplo supongamos que tiene un directorio llamado /datos con la siguiente informacin:
# ls -ld /datos
drwxrwxr-x 2 root marketing 4096 2005-07-08 19:15 /datos/
sofia
marketing
mirtha
marketing
users, contab
fabricio contab
users, marketing
Todos los usuarios tienen un grupo en comn: marketing, que es tambin el grupo al que pertenece
el directorio anterior /datos, que tambin tiene permiso de escritura para el grupo.
Si bajo estas condiciones los usuarios crean archivos en ese directorio, esto es lo que va ocurrir:
# ls -l /datos
total 0-rw-r--r-- 1 fabricio contab
0 2005-07-08 19:36 informe.fabricio
-rw-r--r-- 1 mirtha
marketing 0 2005-07-08 19:36 informe.mirtha
-rw-r--r-- 1 sofia
sofia
0 2005-07-08 19:36 informe.sofia
En estas condiciones ningn usuario puede modificar el archivo de los otros, porque cuando el sistema
crea los archivos siempre toma el grupo primario, esto es un problema para compartir estos archivos.
Aqu es donde el bit SGID es de gran utilidad, ya que al usarlo sobre un directorio hace que todos los
archivos o directorios que se crean dentro hereden el grupo dueo.
Para nuestro directorio de ejemplo pongamos el bit SGID:
# chmod g+s /datos
# ls -ld /datos
drwxrwsr-x 2 root marketing 4096 2005-07-08 19:38 /datos
Ahora, si dejamos que los usuarios vuelvan a crear otros archivos, tendremos lo siguiente:
118
# ls -l /datos
total 0-rw-r--r-- 1 fabricio marketing 0 2005-07-08 19:49 informe2.fabricio
-rw-r--r-- 1 mirtha
marketing 0 2005-07-08 19:48 informe2.mirtha
-rw-r--r-- 1 sofia
marketing 0 2005-07-08 19:48 informe2.sofia
-rw-r--r-- 1 fabricio contab
0 2005-07-08 19:36 informe.fabricio
-rw-r--r-- 1 mirtha
marketing 0 2005-07-08 19:36 informe.mirtha
-rw-r--r-- 1 sofia
sofia
0 2005-07-08 19:36 informe.sofia
119
En los antiguos sistemas UNIX el bit pegajoso fue creado para mantener programas ejecutables en
memoria. En los sistemas modernos esto ya no es util y en particular el ncleo de Linux ignora este
bit en archivos.
Donde tiene uso es en directorios, cuando se lo aplica, los archivos en ese directorio slo pueden ser
borrados o renombrados por el usuario root o por su dueo. En el sistema se usa este bit en directorios,
como /tmp que tiene permiso de escritura para todo el mundo.
Volviendo a nuestro ejemplo anterior, cualquiera de los tres usuarios sofia, mirtha o fabricio puede
borrar archivos en el directorio /datos. Si queremos impedir esto y que slo el dueo pueda borrar
tenemos que poner el bit pegajoso as:
# chmod +t /datos
# ls -ld /datos
drwxrwsr-t 2 root marketing 4096 2005-07-08 19:38 /datos
120
Atributos especiales
Los sistemas de archivos ext2 y ext3 poseen unos atributos especiales que estn reservados para uso
exclusivo del usuario root. Dos rdenes permiten trabajar con estos atributos especiales:
lsattr lista los atributos del archivo
chattr modifica los atributos del archivo
Hay ms de diez atributos especiales, pero uno de ellos es el que ms utilidad prctica tiene, que es
conocido como atributo inmutable (i). Cuando es aplicado a un objeto este no puede ser borrado, renombrado ni modificado de ninguna manera (contenido, fechas, permisos, etc).
Si usted tiene un archivo que no debe ser modificado de ninguna manera, puede ponerle el atributo
inmutable usando la siguiente orden:
chattr +i archivo
Si posteriormente necesita modificar el archivo, quite el atributo inmutable primero, as:
chattr -i archivo
Si quiere ver los atributos de un archivo, tiene que usar la orden lsattr as:
lsattr archivo
121
Al ser Linux un sistema multi-usuario, existe la nocin de propiedad de archivos y directorios, gracias
al cual un usuario en particular es dueo de archivos y directorios.
El esquema de propiedad se basa en usuario y grupo de usuarios, cada archivo o directorio pertenece
a un usuario y a un grupo en particular. Y cada usuario pertenece al menos a un grupo cuando es
creado. El administrador del sistema puede hacer que un usuario pertenezca a ms de un grupo.
El esquema de propiedad junto al mecanismo de permisos completan el modelo de control de acceso
a los archivos que es utilizado en Linux.
122
Cambiando propiedad
Tradicionalmente (herencia de Unix) se proporcionan dos rdenes para cambiar la propiedad de archivos
y directorios. Una de ellas es chown que se usa para cambiar el usuario propietario y la otra orden es
chgrp utilizada para cambiar el grupo propietario. La versin Linux de chown tambin permite
cambiar el grupo propietario.
Sinopsis: chown [-R]
Sinopsis: chgrp [-R]
usuario[.grupo] objeto
grupo objeto
Cuando estas rdenes son utilizadas por el usuario root no se aplica ninguna restriccin, pero para un
usuario regular se aplican las siguientes restricciones:
No le est permitido cambiar el usuario propietario.
Slo puede cambiar el grupo propietario, si el usuario pertenece a ese grupo.
El cambio es permitido slo si es dueo del objeto (igual que con los permisos).
Por ejemplo, si la usuario sofia pertenece a los grupos sofia y marketing, entonces la siguiente orden
para cambiar grupo es vlida.
chgrp marketing reporte
Suponga ahora que usted en su papel de administrador ha restaurado archivos de la usuario mirtha.
Para asegurarse que todos los archivos y directorios en su directorio de trabajo tienen la informacin
de propiedad correcta usted usara la siguiente orden:
chown -R mirtha.users /home/mirtha
Aqu estamos usando la opcin
pertenece al grupo users.
-R
123
Enlaces a archivos
Los enlaces permiten alcanzar un objeto (archivo o directorio) utilizando un nombre y una ruta (relativa
o absoluta) posiblemente diferentes. Por ejemplo:
Enlace
Objeto
/bin/vi
/usr/bin/vim
gunzip
gzip
/etc/httpd/log/
/var/log/httpd/
/etc/rc3.d/S90crond ../init.d/crond
Hay dos tipos de enlaces: simblicos (soft links) y rgidos (hard links) cada uno con caractersticas
particulares.
Ambos tipos de enlaces son frecuentemente usados en el sistema, y podemos decir que desde el punto
de vista de funcionamiento, que es alcanzar un objeto, no hay diferencia entre ambos.
El uso que se les puede dar a los enlaces es variado y depende de la habilidad del usuario el sacarles
provecho.
Todos los archivos o directorios tienen al menos un enlace rgido que corresponde al vnculo entre su
entrada en el directorio y su i-nodo o nodo ndice que almacena varios datos del archivo, uno de
estos datos indica en que lugar del disco (bloque) estn guardados los datos que contiene el archivo,
como se observa en la ilustracin anterior.
124
Aqui vemos que el archivo foo tiene el nmero de i-nodo 22192 en el sistema de archivos. Ahora vamos
a crear un enlace rgido llamado bar, del siguiente modo:
[sofia@tux sofia]$ ln foo bar
Ahora si observamos ambos archivos usando nuevamente la orden ls -i veremos que tienen el mismo
i-nodo:
[sofia@tux sofia]$ ls -i foo bar
22192 bar
22192 foo
Esto significa que ya sea que accedamos a foo o a bar estaremos accediendo al mismo archivo.
Este tipo de enlaces se llaman enlaces rgidos porque directamente crean el enlace al i-nodo.
Nota
Slo podemos crear enlaces duros entre archivos que se encuentran en el mismo sistema
de archivos. Los enlaces simblicos no tienen esta limitacin.
Si borramos el archivo foo o bar, nicamente estamos borrando un enlace al archivo (su entrada en
el directorio). Un archivo es borrado definitivamente del sistema cuando no quedan enlaces rgidos a
l. La cantidad de enlaces rgidos que tiene un objeto se puede observar con la orden ls -l. Con nuestro
ejemplo veramos algo similar a esto:
[sofia@tux sofia]$ ls -l foo bar
-rw-r--r-- 2 sofia sofia 0 2005-10-12 18:20 bar
125
-rw-r--r--
La segunda columna en el listado, muestra claramente que hay dos enlaces rgidos.
126
Un enlace simblico tambin permite dar a un archivo X otro nombre, pero no enlaza el nuevo nombre
con el i-nodo del archivo X, en lugar de ello crea un nuevo i-nodo cuyo bloque de datos contiene la
ruta al archivo X.
Para crear un enlace simblico se usa la orden ln -s. Por ejemplo, si ejecutamos lo siguiente:
[sofia@tux sofia]$ ln -s ~/foo bars
Crearemos un enlace simblico llamado bars apuntando al archivo foo. Si usamos la orden ls -i, veremos
que ambos archivos tienen efectivamente i-nodos diferentes.
[sofia@tux sofia]$ ls -i foo bars
22195 bars
22192 foo
Los permisos en un enlace simblico no se usan (siempre aparecen como rwxrwxrwx). En su lugar,
se usan los permisos del archivo al cual apunta el enlace.
Funcionalmente, los enlaces duros y simblicos son similares, pero hay algunas diferencias. Por una
parte, se puede crear un enlace simblico a un fichero que no existe; lo mismo no es cierto para enlaces
duros. Los enlaces simblicos son procesados por el ncleo de forma diferente a los duros, lo cual es
solo una diferencia tcnica, pero a veces importante. Los enlaces simblicos son de ayuda puesto que
identifican al fichero al que apuntan; con enlaces duros no hay forma fcil de saber que fichero est
enlazado al mismo i-nodo.
127
128
8.1. Objetivos
129
Entrada/Salida estndar
La Entrada/Salida estndar es una capacidad del intrprete de rdenes usada por todas las rdenes que
pueden aceptar datos de entrada, que producen salida e informacin de error. Cada vez que ejecutamos
un programa, automticamente este cuenta con tres descriptores de archivo, que son los siguientes:
Entrada estndar (abreviado stdin)
Este descriptor es un flujo de entrada de texto. De modo predeterminado est vinculado con el teclado. Cuando ejecutamos
una orden interactiva y empezamos a tipear en el teclado, lo
que estamos haciendo es alimentar la entrada estndar. Algunas
rdenes aceptan entrada desde archivos que son pasados como
argumentos e ignoran la entrada estndar. La entrada estndar
es conocida tambin como descriptor de archivo 0.
Este descriptor es un flujo de salida de texto. De modo predeterminado est vinculado a la terminal (la pantalla). Cuando ejecutamos una orden que genera salida, sta es enviada a la salida
estndar. La salida estndar es conocida tambin como descriptor de archivo 1.
La orden cat nos da un buen ejemplo de como se emplea estos tres flujos de entrada/salida estndar.
Por ejemplo si escribimos slamente la orden sin ningn argumento, cat se quedar esperando datos
de entrada desde la entrada estndar que es el teclado, y luego ir mostrando a la salida estndar cada
lnea de texto tipeada:
[sofia@tux sofia]$ cat
Esto muestra como
Esto muestra como
cat usa la entrada estandar
cat usa la entrada estandar
y la salida estandar
y la salida estandar
Ctrl+D
130
Redireccionamiento
8.3. Redireccionamiento
Desde el punto de vista de los programas no hay diferencia en leer datos desde la entrada estndar o
desde un archivo, lo mismo con la salida, no hay diferencia en enviarla a la salida estndar o a un archivo. La accin de emplear un archivo en lugar del flujo estndar se denomina redireccionamiento.
Por ejemplo si redireccionamos la entrada estndar, el programa ya no leer datos desde el teclado sino
desde el archivo.
Para producir el redireccionamiento se emplean los siguientes operadores especiales:
Operador Propsito
Forma de uso
<
>
>>
2>
En el siguiente ejemplo cat lee datos desde la entrada estndar y la salida es redireccionada al archivo
texto.
[sofia@tux sofia]$ cat > texto
este texto es leido
desde la entrada estandar
y la salida est redireccionada
a un archivo.
Ctrl+D
Podemos tambin redireccionar la entrada y la salida estndar al mismo tiempo, como se muestra en
este ejemplo:
[sofia@tux sofia]$ sort < lista1 > lista-final
Recordar que la orden sort acepta tambin datos de entrada desde archivos pasados como argumentos,
por tanto la siguiente orden produce el mismo resultado que la anterior:
[sofia@tux sofia]$ sort lista1 > lista-final
En el siguiente ejemplo empleamos la orden find para buscar todos los enlaces simblicos bajo un
directorio especfico y enviamos el resultado al archivo enlaces, como no estamos interesados en los
mensajes de error, redireccionamos el error estndar al archivo especial /dev/null.
131
Redireccionamiento
El intrprete de rdenes Bash tambin permite redireccionar ambos, la salida estndar y el error estndar
al mismo archivo utilizando el operador &>, de la siguiente forma:
[sofia@tux sofia]$ ls /no-existe /media/ &> /tmp/prueba
132
Tuberas
8.4. Tuberas
Las tuberas (caracter |) sirven para tomar la salida producida por una orden (flujo de salida) y enviarla
como datos de entrada para otra orden (flujo de entrada). Se pueden encadenar tantas rdenes como
se necesite.
Por ejemplo, la siguiente orden cuenta el nmero de archivos y/o directorios cuyo nombre empieza
por la letra a.
ls -d /usr/bin/a* | wc -l
En este ejemplo la salida producida como resultado de ejecutar la orden ls -d a* es enviada como datos
de entrada a la orden wc -l.
La siguiente secuencia de rdenes es equivalente a la anterior y permite apreciar la utilidad de emplear
tuberas al evitar la creacin de archivos temporales.
ls -d a* > temporal
wc -l temporal
Mostramos un ejemplo adicional que encadena tres rdenes:
ls -d /etc/* | grep "conf" | wc -l
133
Usando la T (tee)
Cuando ejecute una orden y redireccione la salida estndar a un archivo, probablemente usted querr
ver en la terminal (en pantalla) que salida se va produciendo mientras se ejecuta la orden, pero cuando
se usa redireccionamiento esto no es posible. Afortunadamente existe la orden tee que nos permite
hacer esto.
En el siguiente ejemplo tee va mostrando en pantalla el resultado producido por find /etc/ -name
"*.conf*" y a la vez lo guarda en el archivo salida. Adems se ha redireccionado el error estndar
para que los mensajes de error no se mezclen con la salida en pantalla.
find /etc/ -name "*.conf*" | tee salida 2> /dev/null
134
Usando xargs
Ejecutar una orden y luego querer usar ese resultado como argumento de otra orden es algo que tambin
querr hacer alguna vez. La orden xargs ha sido creada para este propsito.
Por ejemplo suponga que tiene poco mas de 50 archivos en un directorio y quiere borrarlos todos excepto aquellos cuyo nombre contiene la palabra cod-0 que son alrededor de 20. Si usted hiciera rm
-i * se cansara de la tediosa tarea de estar respondiendo si/no a la pregunta de borrar el archivo.
Una mejor forma de hacer esto es emplear la siguiente orden:
ls | grep -v "cod-0" | xargs rm -f
La instruccin ls | grep -v "cod-0" devolver como resultado el listado de todos los archivos cuyo
nombre no lleva la palabra cod-0. Entonces xargs tomar esta salida y la enviar como argumento
a la orden rm -rf.
xargs siempre ejecuta la orden aun cuando no haya datos de entrada, para evitar esto puede usar la
opcin -r, as:
find $HOME/.mozilla -name XUL.mfasl -print | xargs -r rm -f
135
Sustitucin de orden
En algunas circunstancias, usted querr utilizar el resultado de una orden para usarla como parte de
otra orden o guardarla en una variable que es muy usual de hacer cuando se escriben guiones (scripts).
La sustitucin de una orden por su salida se hace encerrando la orden entre el smbolo $( ) o entre caracteres de tilde invertida (caracter `), de esta forma: $(orden) o `orden`.
Por ejemplo, suponga que usted quiere crear un archivo cuyo nombre lleve la fecha de hoy, entonces
usted podra hacer as:
ls -l > listado-$(date +"%d-%b-%Y")
La orden date +"%d-%b-%Y" dar como resultado una fecha de la forma 19-oct-2005 y como estamos utilizando sustitucin de orden, el archivo se llamar finalmente listado-19-oct-2005.
El siguiente ejemplo guarda la fecha actual en una variable llamada HOY:
HOY=`date +"%d-%b-%Y"`
Nota
La forma tradicional de utilizar sustitucin de orden es emplear la tilde invertida, pero
su uso est desaconsejado y es preferible la forma: $(orden).
136
Muchos programas que corren en Linux necesitan informacin sobre el entorno en el que se estn
ejecutando para que funcionen apropiadamente. Por ejemplo necesitan saber el tipo de terminal que
est utilizando, el idioma de su preferencia, y las rutas de directorio donde buscar los programas que
est ejecutando. Esta informacin es mantenida en una serie de variables conocidas como variables
de entorno.
Para ver todas las variables de entorno se usa la orden env. Estas son algunas de las variables de entorno
comunmente utilizadas:
HOME
LANG
PATH
Las rutas de directorio donde se buscan los programas a ejecutar. Las rutas se
separa por el caracter dos puntos (:).
PS1
TERM
Cuando el programa man tome el valor C de la variable LANG, usar el idioma predeterminado que
casi siempre es ingls.
Adems de las variables de entorno, tambin estn las variables del intrprete de rdenes. Estas se
consideran como locales ya que son slo especficas para el intrprete actual. Para ver estas variables
se usa la orden set.
En Bash se acostumbra que todas las variables se indiquen en maysculas, que es slo una convensin.
137
Usando variables
Para crear una nueva variable del intrprete basta con definir la variable y asignarle un valor, as: variable=valor. Veamos algunos ejemplos:
CVSROOT=sofia@cvs.server.com:/share/cvs/curso
FALLA_MD5="No se verifico MD5"
FECHA=`date`
PI=3.1416
Si queremos utilizar el valor de la variable debemos escribirla con el caracter $ por delante. Veamos
algunos ejemplos utilizando las variables anteriores:
Ejemplo
Resultado
echo $FECHA
El valor de PI es 3.1416
MOZILLA=$HOME/.mozilla MOZILLA=/home/sofia/.mozilla
Puede usar la orden set para ver todas las variables del intrprete definidas.
Como se dijo anteriormente, todas estas variables son locales, si usted quiere que una variable sea
global (de entorno) tiene que usar la orden export.
Por ejemplo si la variable ya ha sido definida, entonces basta hacer lo siguiente:
export PI
Si la variable no ha sido definida puede hacerse as:
export JAVA_HOME=/opt/j2re1.4.2
Si no va a necesitar ms una variable (de entorno o de intrprete) y la quiere eliminar, tiene que usar
la orden unset. Por ejemplo:
unset PI
138
Funciones
8.10. Funciones
Bash nos ofrece tambin las denominadas funciones, que nos permiten guardar una serie de rdenes
para uso posterior. Para declarar una funcin debemos usar la siguiente sintaxis:
[ function ] NOMBRE ( ) { LISTA-ORDENES; }
Donde:
function
NOMBRE
As, cuando el usuario escriba lsl el intrprete encontrar que se trata de una funcin y ejecutar las
rdenes indicadas, en este cas slamente una.
Las funciones pueden tambin recibir argumentos, como vemos en el siguiente ejemplo:
[sofia@tux sofia]$ addpath () {
> echo Aadiendo $1 a PATH
> PATH=$PATH:$1
> export PATH
> }
El caracter > indica que Bash sigue esperando que se introduzcan rdenes, hasta encontrar el caracter
}, que termina la definicin de la funcin. $1 es el primer argumento que la funcin recibe.
Ahora veamos el resultado de esta funcin.
[sofia@tux sofia]$ addpath /home/sofia/bin
Aadiendo /home/sofia/bin a PATH
139
Archivos de configuracin
Probablemente se habr preguntado en que momento se crean todas las variables que ya estn presentes
en el sistema. Pues bien, hay dos tipos de archivos de configuracin en los cuales estn definidas las
variables y otra informacin para preparar el entorno de trabajo: archivos globales y archivos de
usuario. Los primeros se usan para todo el sistema y para todos los usuarios, y los segundos nicamente
para un usuario en particular. Algunos de estos archivos se usan slo durante el ingreso inicial del
usuario (login), mientras que otros son utilizados cada vez que se ejecuta una nueva instancia del intrprete de rdenes.
Los archivos de configuracin que son utilizados por Bash son:
Descripcin
Global
/etc/profile
Si
/etc/bashrc
Si
~/.bash_profile
No
~/.bash_login
No
~/.profile
No
~/.bashrc
Si existe, se ejecuta cada vez que se invoca a Bash, ya sea de forma interactiva (durante el ingreso) o no-interactiva (al ejecutar un script).
No
~/.bash_logout
No
~/.inputrc
No
Los archivos globales se deben usar para aplicar una configuracin a todos los usuarios. Por ejemplo
si queremos que todos los usuarios tengan una variable de entorno llamada JAVA_HOME, deberamos
aadir las siguientes lneas al archivo /etc/profile
JAVA_HOME=/opt/j2re1.4.2
export JAVA_HOME
140
Archivos de configuracin
En cambio si slo queremos que la usuario sofia tenga esta variable, entonces debemos aadir esas
mismas lneas al archivo /home/sofia/.bash_profile.
El siguiente es un ejemplo del archivo /etc/profile en un sistema Red Hat Enterprise Linux:
141
Archivos de configuracin
142
Indice de rdenes
Smbolos
#, 29
$, 29
$(orden), 136
&>, 131
2>, 131
<, 131
>, 131
>>, 131
`orden`, 136
|, 133
join, 80
M
man, 41, 43
mkdir, 57
more, 66, 101
mv, 56
A
alias, 32
apropos, 43
od, 84
rm, 54
rmdir, 59
date, 30
E
echo, 138
env, 137
exit, 25, 34
expand, 76
export, 138
F
find, 61, 131
fsck, 49
function, 139
nl, 68
P
passwd, 34
paste, 75
poweroff, 34
pwd, 34
S
sed, 86
set, 137
sort, 71, 131
split, 82
stat, 60
su, 34
T
tac, 66, 67
tail, 67
tee, 134
touch, 60
tr, 78
H
head, 66
help, 39
history, 38
U
umask, 115
unalias, 32
unexpand, 77
uniq, 83
unset, 138
id, 34
143
V
vi, 92, 93
vim, 92
W
wc, 70, 133
whatis, 43
whereis, 64
which, 64
X
xargs, 135
144