Vous êtes sur la page 1sur 184

Linux Principios bsicos de uso del sistema

Este libro sobre GNU/Linux se dirige a cualquier informtico que desee dominar los
principios bsicos de este sistema operativo o que quiera organizar y consolidar los
conocimientos adquiridos con la prctica.

Presenta de forma detallada los principios bsicos del sistema y describe con precisin
los comandos fundamentales para usar la lnea de comandos shell, con ayuda de
muchos ejemplos: el rbol de Linux, el manejo de archivos, el editor de texto, los
permisos de acceso, la gestin de procesos, el shell Bash, los scripts Bash, la gestin
de las cuentas de usuario, las herramientas Linux, etc.

Los conceptos presentados en este libro son esenciales para entender el funcionamiento
del sistema GNU/Linux para usuarios, y a su vez indispensables para el lector que
quiera avanzar despus en la administracin de sistemas. Se puede utilizar como libro
de referencia para que el lector adquiera la independencia necesaria tanto en entornos
grficos como en lnea de comandos.

Con esta nueva edicin descubrir las novedades y particularidades de las ltimas
distribuciones Linux disponibles.


Los captulos del libro:
Prefacio Introduccin Inicio de sesin y primeros comandos Documentacin El
rbol de Linux Manipulacin de archivos Edicin de archivos de texto - Vi
Permisos de acceso a los archivos Administracin de procesos Shell Bash
Programacin y scripts Bash Administracin de la cuenta de usuario Herramientas
de Linux Configuracin bsica del sistema
Nicolas PONS
Nicolas Pons dirige una consultora informtica y dispone de la certificacin del LPI
(Linux Professional Institute). Asimismo, es responsable pedaggico y docente en un
centro de formacin.
Su slida experiencia en la administracin y desarrollo de sistemas, junto a su capacidad
pedaggica, hacen que el lector tenga entre sus manos una obra realmente prctica sobre
los principios bsicos para el manejo de un sistema Linux.
prefacio
Bienvenidos a este libro sobre el uso del sistema operativo GNU/Linux.
Hoy en da, el uso de los sistemas informticos es omnipresente, llega a tal punto que en
una entrevista de trabajo se puede llegar a dudar de la capacidad de uno para conducir
un vehculo, pero se asume que ya sabe "usar" un sistema informtico! Dicho esto,
aunque la mayora de lectores tenga el permiso B1, la cosa no est tan clara cuando se
trata de manejar un vehculo de dos ruedas o un semirremolque... Aparquemos ese
coche con el que nos sentimos tan seguros -no he dicho llevarlo al chatarrero- y
aprendamos a manejar ese cachivache llamado Linux.
Aprendo a conducir...
"Nunca he cogido un volante y lo de las marchas me da miedo". Si es su caso, ha
encontrado el manual adecuado para dar los primeros pasos. Como si fuera un profesor
de autoescuela, le acompaar a lo largo de manual aportando detalles de cada concepto
bsico. Al principio no tendr que preocuparse por cambiar de marcha, lo iremos
aadiendo a medida que vayan pasando los captulos.
"S conducir desde hace tiempo porque aprend lo bsico con la ayuda de un familiar en
la recta que hay delante de casa." Estupendo, muy valiente, pero puede ser peligroso
cuando haya que hacer viajes largos o si aparece algn obstculo. En ese caso le
ensear los trucos para aparcar a la primera, o le recordar que antes de adelantar hay
que poner el intermitente... Aunque podamos alcanzar los 90 km/h en tercera, si
entendemos un poco de mecnica nos daremos cuenta rpidamente de que lo mejor es
cambiar de marcha.
"Me saqu el carnet y conduzco bien pero hasta ahora mis trayectos han sido casa-
trabajo-supermercado-casa." Pues saquemos el mapa y disfrutemos conduciendo por
carreteras secundarias o por autovas. Ser mucho ms agradable y til cuando haya un
atasco en hora punta.
"Soy un gran conductor y s todo lo que hay que saber!" Yo tambin podra decirlo
pero debo confesar que nunca me acuerdo en qu lado de la calle puedo aparcar cuando
veo esa maldita seal de estacionamiento alterno... Por suerte llevo siempre el manual
en la guantera.
Paso a paso...
Antes de coger el volante veremos qu tenemos entre manos y detallaremos los
trminos utilizados en el resto del libro ubicndolos en su contexto histrico. Iremos del
desarrollo del motor Linux a los acabados que nos ofrece el concesionario con los
folletos para ensalzar la calidad del producto.
Y como no puede esperar a escuchar el ruido del motor y no hay nada mejor que ir al
grano, a partir del segundo captulo le dar las llaves para arrancar, y una vez en marcha
empezaremos a tocar alguno de los botones del salpicadero.
Para no perderse por el camino y dado que el modelo tiene un montn de opciones, lo
ideal ser conocer, gracias al tercer captulo, que la documentacin est en un lugar
concreto. As le ahorrar tirarse un cuarto de hora para cambiar una bombilla mientras
se machaca el ndice en el interruptor hasta encontrar la lengeta adecuada!
Los captulos cuatro, cinco y seis servirn para visitar ciudades con una densa red de
carreteras. Despus de consultar el mapa, vamos a pasar por el laberinto de caminos e
incluso aprenderemos a crear nuestro propio mundo... o simplemente a modificar el ya
existente. El captulo siete explicar que no estamos solos en carretera, incluso podemos
crear un circuito privado e invitar a los amigos a utilizarlo, y si se quiere, podemos
utilizar varios vehculos a la vez; de ello hablaremos en el captulo ocho.
Cuando se sienta cmodo al volante, veremos las lucecitas y botones del
salpicadero que no conoce pero que son de gran utilidad para nuestra comodidad. En los
captulos nueve y diez veremos cmo ajustar la altura del asiento, encender las luces
antiniebla y el limitador de velocidad automtico.
Los amantes del tunning deben leer el captulo once para que su coche deje de ser uno
ms!
Por ltimo, el captulo doce ser la caja de herramientas y si le gusta la mecnica, tras
ello encontrar los fundamentos de este arte en el ltimo captulo que puede que le
conduzca a hacer unas prcticas en un taller.
Los camioneros, una gran familia...
Con la esperanza de no haberle perdido con mis metforas, sepa que si un da tiene una
avera en carretera bastar con extender el pulgar: siempre habr un amable conductor
que le ayudar.
Buen viaje!
Historia de Unix
En 1969, Ken Thompson, desarrollador de los laboratorios Bell (que forman parte de
AT&T), invent el sistema Unix.
K. Thompson haba trabajado previamente en el sistema Multics que permita, entre
otras cosas, ocultar el sistema al usuario e incluso al programador; el objetivo era poder
desarrollar nuevas aplicaciones haciendo abstraccin del sistema. Cuando Bell Labs se
retir del proyecto Multics, empez a desarrollar su propio sistema en un equipo DEC
PDP-7 salvado de la quema. Conserv ciertas ideas desarrolladas por Multics y aadi
sus propias innovaciones: acababa de nacer Unix.

UNIX es la abreviatura conservada de UNICS y significa UNiplexed Information and
Computing System.
A su vez, Dennis Ritchie invent un nuevo lenguaje de programacin: el lenguaje C. En
lnea con Unix, este lenguaje pretenda ser amigable, flexible y sin restricciones. Los
laboratorios Bell, que conocan las herramientas desarrolladas, respaldaron a este do
con una prima en 1971 para la elaboracin de un sistema de automatizacin de
escritorio de uso interno.
En realidad, los sistemas desarrollados hasta entonces estaban codificados en lenguaje
ensamblador, prximo a la arquitectura de hardware, lo que les confera un alto
rendimiento, pero obligaba tambin a reescribir el programa cuando el hardware
obsoleto era reemplazado por equipos ms recientes. Comprendiendo que los avances
tecnolgicos podan paliar una prdida de rendimiento y que las tcnicas de compilacin
haban experimentado grandes progresos, D. Ritchie y K. Thompson dieron prioridad a
la portabilidad del sistema. Al escribir la totalidad del sistema Unix en lenguaje C,
consiguieron hacer funcionar el sistema en muchos equipos de tipos diferentes a partir
de 1974.
As, un compilador de C desarrollado para cada equipo bastaba para hacer posible el uso
del mismo entorno en diferentes equipos; esto no se haba hecho nunca y abra grandes
posibilidades.
El desarrollo de aplicaciones ya independientes del hardware disminua
considerablemente los costes de diseo para el usuario cuando era necesario renovar un
equipo que se haba quedado anticuado. Adems, los programadores podan fabricarse
cajas de herramientas de software y transferirlas de un equipo a otro sin tener que
reinventarlo todo.
Bajo el impulso de AT&T Unix se desarroll rpidamente. En 1980, este sistema estaba
ya muy extendido en las universidades y en los centros de investigacin.
La universidad de California en Berkeley (que utilizaba Unix desde haca varios aos)
aport diferentes mejoras a este sistema operativo, actualmente ms conocido por el
acrnimo de BSD (Berkeley Software Distribution). De hecho, los desarrollos
"Berkeley" se publicaron paralelamente a los realizados por el grupo de trabajo de Unix
de AT&T. Actualmente, la mayor parte de los sistemas operativos de tipo Unix en el
mercado son una mezcla del cdigo original de AT&T y de las "mejoras de Berkeley".
GNU
Debido a la imposibilidad de obtener y modificar el cdigo fuente del controlador de la
impresora nueva que lleg a su departamento, Richard Matthew Stallman (conocido con
el acrnimo de rms), entonces joven investigador en el laboratorio de Inteligencia
Artificial del MIT (Massachusetts Institute of Technology), se concienci de los riesgos
vinculados con software propietario; para oponerse a la comercializacin del software y
ms particularmente a la falta de disponibilidad del cdigo fuente, inici entonces un
movimiento para el desarrollo de software libre de derechos en 1984.

Desarrollador con talento, Richard Stallman es tambin el creador del editor de texto
GNU Emacs, del compilador C de GNU y del depurador GNU; su sitio Web personal se
encuentra en la direccin: http://www.stallman.org.
Este movimiento se tradujo en la creacin de un proyecto que consista en reescribir
completamente un sistema operativo libre. El modelo seguido era Unix, Unix y Richard
Stallman llam a su proyecto GNU, que significa GNUs Not Unix.
El proyecto GNU conoci rpidamente un gran xito y muchas herramientas y
aplicaciones de Unix se desarrollaron a partir de cero (from scratch).
Sin embargo, el ncleo libre de este sistema, llamado "Hurd", no se desarroll tan
rpidamente. El proyecto GNU se limit durante cierto tiempo a ser una gama de
herramientas completa de Unix sin ncleo.

El uso de acrnimos recursivos como "GNU" es habitual en el mundo del software libre
. De forma general, los programadores de software libre tienen un gran sentido del
humor y utilizan a menudo el guio para dar nombre a sus aplicaciones. As, la versin
GNU del shell Bourne de Unix se llama el Bash, de Bourne Again SHell (o tambin
Born Again SHell). Asimismo, el nombre Hurd significa Hird of Unix-Replacing
Daemon y Hird significa a su vez Hurd of Interfaces Representing Depth, lo que forma
un doble acrnimo recursivo!
1. FSF
Richard Stallman cre la Free Software Foundation con el objetivo de recoger fondos
destinados a financiar el software libre. Para l, el trmino "libre" se refiere a la libertad,
y no al precio. No se opone al hecho de vender programas, siempre que el cdigo fuente
est disponible y todo programador est autorizado a modificar y redistribuir el
software.
Con este espritu, R. Stallman cre en 1985 la FSF (Free Software Foundation -
http://www.fsf.org) para promover el apoyo financiero de su proyecto.
2. CopyLeft y GPL
Para llevar a buen puerto su proyecto y permitir la difusin del software libre, Richard
Stallman implement una licencia especfica. Esta licencia evita que cualquiera, tras
modificar unas pocas lneas de un software libre, se apropie del cdigo fuente y
establezca un copyright.
Los fundamentos del software libre se agrupan bajo cuatro libertades:
La libertad de ejecutar el software para cualquier uso, comercial o no, y por
cualquier persona u organizacin.
La libertad de estudiar el funcionamiento del software y de adaptarlo a nuestras
necesidades. Para ello, el acceso al cdigo fuente es un requisito.
La libertad de distribuir copias, gratuitas o no.
La libertad de mejorar el software, publicar esas mejoras para que toda la
comunidad pueda disfrutar de ellas. Y como mencionamos en el punto 2, el
acceso al cdigo fuente es un requisito fundamental.
A esto, la licencia GPL (General Public License) creada por Richard Stallman aade la
obligacin de seguir bajo licencia libre; esta nocin se llama "copyleft" (copia
permitida) en oposicin a "copyright" (derechos de autor) e implica que cualquier
software que utilice una parte del cdigo regido por la GPL se someta automticamente
y por completo a los trminos de la GPL.
As, todo programa desarrollado bajo los trminos de esta licencia ser totalmente libre
de uso sin que pueda apropirselo nadie porque deber seguir siendo GPL. Segn esto,
se podra redefinir el acrnimo GPL como Guaranteed Public for Life (garanta de
seguir siendo pblico de por vida).

La FSF public el 29 de junio de 2007 la versin 3 de la GPL que permite adaptarse
mejor a determinadas evoluciones de la informtica. Trata en particular del problema
del software libre embebido cuyo cdigo fuente s est disponible, pero que no puede
funcionar modificado en los equipos (appliances) sin una firma digital especfica; la
GPL3 prev que los constructores deben dar todos los elementos necesarios al
funcionamiento de una versin modificada de un software bajo esta licencia sobre los
hardware vendidos. Una variacin a esta restriccin es no poder acceder a un servicio
web por el mero hecho de modificar la aplicacin utilizada a pesar de la licencia libre;
eso ya no es posible con la versin 3 de la GPL. Otro elemento clave de esta versin de
la licencia es la proteccin de los usuarios de software libre contra las patentes de
software; as, ya no son posibles acuerdos como el llevado a cabo entre Novell y
Microsoft, que contienen la autorizacin para los clientes de Novell de utilizar el
software libre que depende de patentes de Microsoft. Toda la informacin sobre esta
ltima versin de la licencia libre GPL est disponible en la pgina http://gplv3.fsf.org
Sin embargo, no hay que confundir un software bajo GPL con un software perteneciente
al dominio pblico; este ltimo no siempre tiene un copyright, cualquiera puede
apropiarse de l tras una modificacin menor. Asimismo, un "freeware" no es un
software libre porque el cdigo fuente de la aplicacin no est disponible.
Finalmente, existen otras licencias para los programas libres, con copyleft o no, como la
X Consortium, la Artistic o bien la licencia BSD que, a diferencia de la GPL, no impone
la difusin de las modificaciones aportadas.
Condiciones generales de uso
Copyright - Editions ENI
Linux
Cuando utilizaba el sistema operativo Minix, desarrollado por Andrew S. Tanenbaum
con el objetivo de mostrar a sus estudiantes el funcionamiento de un sistema de tipo
Unix, en un proyecto de estudios sobre el modo protegido de los procesadores Intel 386,
Linus Torvalds empez a desarrollar su propio ncleo Unix para aadirle nuevas
funcionalidades.
Por tanto, Linux (Linuss Unix) naci en 1991 gracias a un estudiante de la universidad
de Helsinki. El xito de Linux se basa en una idea ingeniosa de su creador, L. Torvalds:
colocar su proyecto bajo los trminos de la licencia GPL y proponer a todos los
programadores y otros hackers de Internet que le ayudaran.

El trmino "hacker" no debe confundirse con el de "cracker", que designa a un
individuo que intenta introducirse de forma ilegal en un sistema informtico para
utilizar sus recursos o alterar sus datos. El trmino hacker representa aqu a los primeros
programadores en los sistemas Unix convertidos sin duda en verdaderos "gurs" en su
dominio y no al pirata informtico malintencionado.
Fue en un grupo de discusin (Usenet) dedicado al sistema Minix donde L. Torvalds
anunci pblicamente su proyecto, que por entonces slo era un pasatiempo sin
pretensiones:
From: torvalds@klaava.Helsinki.FI (Linus Benedict TorValds)
Newsgroups: comp.os.minix
Subject: What would you like to see most in minix?
Summary: small poll for my new operating system
Message-ID: <1991Aug25.205708.9541@klaava.Helsinki.FI>
Date: 25 Aug 91 20:57:08 GMT
Organization: University of Helsinki
Hello everybody out there using minix -
Im doing a (free) operating system (just a hobby, wont be big and
professional like gnu) for 386(486) AT clones. This has been brewing
since april, and is starting to get ready. Id like any feedback
on things people like/dislike in minix, as my OS resembles it somewhat
(same physical layout of the file-system (due to practical reasons)
among other things).
Ive currently ported bash(1.08) and gcc(1.40), and things seem to
work.
This implies that Ill get something practical within a few months,
and Id like to know what features most people would want.
Any suggestions are welcome, but
I wont promise Ill implement them :-)

Linus (torvalds@kruuna.helsinki.fi)

PS. Yes - its free of any minix code, and it has a multi-threaded
fs.
It is NOT portable (uses 386 task switching etc), and it probably
never
will support anything other than AT-harddisks, as thats all I have :-
(.
O, en nuestro idioma:
Saludos a los usuarios de minix.

Estoy haciendo un sistema operativo (libre), (es slo un pasatiempo,
no ser
importante y profesional como gnu) para sistemas 386 (486) AT clones.
Se inici en abril y est empezando a tomar forma. Me gustara recibir
algn
comentario sobre las cosas que le gustan o no a la gente en minix, ya
que
mi sistema operativo se parece un poco (la misma disposicin fsica de
los archivos del sistema, debido a razones prcticas entre otras
cosas).

Ya he exportado bash (1.08) y gcc (1.40) y las cosas parecen
funcionar.
Eso implica que pondr algo en prctica dentro de unos meses y me
gustara saber
qu caractersticas desea la mayora de las personas.
Cualquier sugerencia ser bienvenida, pero no prometo que puedan ser
aplicadas :-)

Linus (torvalds@kruuna.helsinki.fi)

PD. S, es libre de cualquier cdigo de minix y tiene un sistema de
ficheros
multihilos.
NO es portable (386 utiliza la conmutacin de tareas, etc.), y
probablemente slos er compatible con discos duros AT, ya que
es todo lo que tengo :-(.
El entusiasmo por Linux proviene en gran parte por el hueco que llen en el ncleo del
proyecto GNU: por fin estaba disponible un sistema libre completo!

La mascota de Linux se llama "Tux" y es un pingino, animal especialmente querido
por Linus Torvalds.
1. Caractersticas
Las principales caractersticas de Linux son las siguientes:
Multitarea
Est diseado para ejecutar varios programas al mismo tiempo (PID - Process ID,
codificados en 32 bits). Utiliza un asignador para ejecutar varias acciones con un mismo
procesador y tambin puede sacar partido de arquitecturas multiprocesador
(hyperthreading, SMP - Symmetric Multi-Processors, NUMA - Non-Uniform Memory
Access).
Multiusuario
Este sistema permite el uso por parte de varias personas de los recursos que administra.
Estas personas se distribuyen en grupos de usuarios y es necesaria una autenticacin
para asegurar los derechos individuales. Los UID (Users ID) y GID (Groups ID) estn
codificados en 32 bits.
Multiplataforma
Linux ha sido llevado a un gran nmero de arquitecturas de hardware, como Intel (del
386 al ltimo Pentium) y sus clones (AMD, Cyrix), SPARC, MIPS, Dec Alpha,
PowerPC, PalmPilot, x86-64 (64 bits), etc.
Encontramos tambin Linux en sistemas embebidos, como autmatas industriales o
autorradios MP3 para el particular.
Sistemas de archivos
Linux soporta un gran nmero de sistemas de archivos, adems de los de tipo Unix,
incluidos ISO9660 (CD-ROM), Windows 9x, NTFS y Macintosh. Soporta tambin las
ACL (Access Control List) y las cuotas.
Administracin de memoria
En vez de efectuar un swap de procesos completos, el ncleo pagina la memoria
virtual, lo que limita los accesos al disco cuando falta memoria fsica. Adems, la
memoria compartida con copia en escritura permite que varios procesos utilicen el
mismo espacio de memoria; cuando uno de ellos intenta escribir en la memoria, se
realiza una copia de la pgina de memoria en otra parte. Este mecanismo optimiza el
uso y la cantidad de memoria necesaria en el sistema.
Adems, Linux soporta hasta 64 GB de RAM con las funciones de hardware PAE
(Physical Address Extension) en arquitecturas 32 bits de Intel.
Redes
Como cualquier otro Unix, Linux posee una capa de red muy fiable y rpida. Soporta un
amplio abanico de protocolos (TCP/IP versiones 4 y 6, Netware, Appletalk, Lan
Manager, IPX, IPsec...) y de dispositivos de red (Ethernet, TokenRing, FDDI, Wi-Fi...).
Adecuacin a numerosos estndares, como POSIX
Existe por ejemplo un grupo de trabajo de la organizacin The Linux Foundation
(http://www.linuxfoundation.org/) llamado LSB, de Linux Standard Base, que publica
especificaciones y recomendaciones de estandarizacin de Linux. Grandes nombres de
la informtica (IBM, Intel, Oracle, AMD, Google, HP, Novell, Red Hat, Dell, Sony...)
contribuyen y apoyan este proyecto.
Compatibilidad
Linux es compatible con Unix System V (AT&T) y BSD a nivel de cdigo fuente,
soporta las bibliotecas Unix en formato COFF y ELF y los binarios con SCO SVR3 y
SVR4 con los mdulos de emulacin IBCS2.
2. Distribuciones
Hablando con propiedad, Linux no es un sistema operativo, sino slo su ncleo (kernel).
Por s solo no constituye la totalidad del sistema operativo; para ello, debe ir
acompaado de las herramientas bsicas comunes a todos los Unix.
Estas herramientas estndar son en su mayor parte programas libres, que se encuentran
tambin en Linux, generalmente en una versin GNU con muchas mejoras respecto a
los originales. Entre estos programas, destaca el compilador GNU C/C++, uno de los
mejores compiladores disponibles actualmente.
Tambin hay que recordar el conjunto de comandos accesibles directamente desde un
shell, como grep, find, awk o bien editores de texto, como vi. Para ser exactos, en
realidad hay que utilizar el trmino GNU/Linux para designar este sistema y no
"Linux", como ocurre demasiado a menudo.
Con la ayuda de otros desarrolladores, Linus Torvalds ha ido aadiendo cada vez ms
herramientas y aplicaciones. Con el tiempo, diversas universidades, empresas y
personas a ttulo individual han ido distribuyendo Linux con su propia seleccin de
paquetes para acompaar al ncleo Linux. As nace el concepto de distribucin de
Linux.
Actualmente, crear y vender una distribucin de Linux puede representar un volumen de
negocios de varios millones de dlares y es posible comprar las versiones en "caja" de
grandes empresas como Red Hat o SUSE. Sin embargo, la mayor parte de estas
distribuciones comerciales se pueden descargar libremente, as como las realizadas por
grupos de personas apasionadas.
Qu distribucin elegir?
La eleccin de una distribucin depende de muchos criterios: el coste, la gama de
programas propuestos, la compatibilidad de hardware, las herramientas
administrativas proporcionadas...
No existen "buenas" ni "malas" distribuciones de GNU/Linux, pero, para ayudar al
principiante a elegir, este apartado presenta una clasificacin de las ms conocidas
segn el tipo de necesidades a las que responden mejor.
A fin de cuentas, la eleccin de una distribucin de Linux depender tanto de las
preferencias como de las muy subjetivas costumbres de la persona que quiere iniciarse
en la aventura de Linux.

La web DistroWatch (http://distrowatch.com) informa sobre la actualidad, descripcin y
la clasificacin de las distribuciones GNU/Linux ms utilizadas. Asimismo, hay
disponibles enlaces para descargarlas y para solicitar en lnea versiones grabadas en
CD-ROM o DVD-ROM.
1. Las distribuciones para el "gran pblico"
Estas distribuciones proponen en su paquete de software la mayor parte de las
herramientas que un usuario espera encontrar en su puesto de trabajo en red o en su
equipo personal: incluyen un paquete de ofimtica, programas de comunicacin en red
(navegador web, cliente de correo electrnico...), reproductores de multimedia y
aplicaciones de creacin grfica.
Las distribuciones propuestas a continuacin se pueden descargar libremente.
Fedora
El proyecto Fedora lo distribuye el editor Red Hat, en sustitucin de su distribucin
estrella, que ya no est disponible actualmente en GPL. Esta distribucin implementa
muy regularmente las ltimas innovaciones del mundo del software libre.
Aunque la frecuencia de salida de esta distribucin es elevada (una nueva versin cada
seis a doce meses), ofrece une estabilidad y una calidad de integracin ejemplares.
Representa, por tanto, una buena opcin para quien se inicia en busca de una
distribucin fcil de instalar y que proponga una amplia gama de programas recientes.
Sitio del editor: http://fedoraproject.org
openSUSE
Es la variante libre y gratuita de la distribucin profesional SUSE. Es de fcil manejo y
cuenta con una gran comunidad de usuarios y desarrolladores.
Sitio del editor: http://www.opensuse.org
Ubuntu
Distribucin derivada de Debian y de su sistema de paquetes. Es muy accesible, los
programas libres que ofrece se integran con gran facilidad y dispone de una gran
comunidad de usuarios.
El entorno de escritorio es Unity, que es una capa que funciona sobre GNOME. Existen
adems otras distribuciones como kunbuntu o lubuntu con KDE, Xfce o LXDE.
Sitio del editor: http://ubuntu.com.
2. Las distribuciones "mviles"
No siempre resulta evidente cambiar de un da para otro las costumbres informticas. En
ocasiones es preferible probar Linux antes de cambiar de arriba abajo la configuracin
de un equipo. Por ello, algunas distribuciones no requieren instalacin en el disco duro.
Estas distribuciones estn dotadas de un proceso muy avanzado de configuracin
automtica del hardware. Su carga en memoria RAM se hace al iniciar el PC desde el
CD-ROM (existen distribuciones arrancables a partir de una memoria USB).
Adems, este tipo de distribucin permite llevarse y utilizar el mismo sistema en
prcticamente cualquier tipo de PC.
KNOPPIX
KNOPPIX es un CD-ROM arrancable con un sistema operativo (GNU/Linux) para
equipos de tipo PC. Gracias a un sistema de descompresin al vuelo, esta distribucin
contiene unos 2 GB de programas (9 GB en la edicin DVD-ROM).
Tiene, entre otros, los siguientes usos:
CD-ROM de demostracin de Linux;
CD-ROM de formacin;
sistema de seguridad;
sistema operativo permanente completo porque puede instalarse tambin en el
disco duro;
sistema mvil si se instala en una memoria USB.
Sitio del editor: http://www.knoppix.org
Ubuntu
Se presenta como una distribucin para el gran pblico que se puede utilizar
directamente desde un CD-ROM, aunque dispone de una herramienta de instalacin que
ofrece al usuario la posibilidad de instalarlo directamente en el disco duro de la
mquina.
Sitio del editor: http://www.ubuntu.com
3. Las distribuciones "profesionales"
Varios editores ofrecen distribuciones con una orientacin profesional. Sus principales
caractersticas son:
una estabilidad mejorada al proponer en su paquete de software slo
aplicaciones robustas y probadas;
un tiempo de vida ms largo con un soporte del editor disponible ms tiempo
(actualizaciones de software y correccin de errores);
un servicio de soporte tcnico comercial en algunas de ellas;
una especializacin en ciertos dominios de Internet (alojamiento de sitio web,
cortafuegos, servidor de correo electrnico, herramientas de trabajo en grupo,
gestin de parque informtico...).
Red Hat
Actualmente es una de las distribuciones ms extendidas. Conocida como RHEL
(RedHat Enterprise Linux), su instalacin es relativamente sencilla gracias a la
deteccin y autoconfiguracin de los dispositivos conectados. Existe tambin una
versin escritorio (desktop) que facilita un entorno de trabajo profesional para los
equipos de las empresas.
Una de las ventajas de esta distribucin es que es reconocida por los grandes editores de
software, en particular por los editores de SGBD (Sistemas de gestin de base de datos);
en efecto, toda aplicacin profesional que funcione bajo Linux (Oracle por ejemplo)
est disponible para esta distribucin.
Red Hat, que se encuentra en el origen de la herramienta RPM (Red Hat Package
Manager), utiliza este formato de paquetes.
El editor ha puesto fin a la variante estndar bajo licencia de esta distribucin (la ltima
era la versin 9.0) y ha optado por concentrarse en una versin "Enterprise" con mayor
seguimiento en el tiempo para responder a las necesidades de las empresas.
Sitio del editor: http://www.redhat.es
SuSE
Esta distribucin de origen alemn ofrece una serie de herramientas grficas de
configuracin del sistema muy funcionales.
Se la conoce tambin con el acrnimo SLES, de SuSE Linux Enterprise Server.
Sitio del editor: http://www.suse.com/
Debian
Es la distribucin de Linux predilecta de los puristas del mundo libre porque no es
comercial y ofrece nicamente programas libres en GPL.
Tambin se considera la ms estable porque no interviene ninguna motivacin
pecuniaria en la eleccin de los paquetes que se deben incluir en la distribucin.
La contrapartida a estos puntos a favor es sin duda la falta de accesibilidad para una
persona inexperta. La administracin de este sistema requiere un profundo
conocimiento del sistema Linux y la configuracin normalmente se realiza mediante un
editor de texto, en lugar de una herramienta grfica de ms alto nivel.
Adems, esta distribucin cuenta con su propio formato de paquetes de software, con la
extensin .deb.
Sitio del editor: http://www.debian.org
Slackware
Es una de las primeras distribuciones de Linux, aparecida en 1995. Est considerada
como muy estable, pero menos accesible para el nefito.
Su paquete de software, ms ligero que en las anteriores, cabe en un CD-ROM
(exceptuando los CD-ROM de seguridad, de instalacin en un sistema de archivos
Windows y de fuentes, que no son necesarios).
Los paquetes de esta distribucin son archivos .tgz o .tar.gz.
Sitio del editor: http://www.slackware.com
4. Las distribuciones "especializadas"
Existen otras distribuciones Linux para usos concretos. Algunas estn especializadas en
la recuperacin del sistema, en la enseanza, la seguridad o incluso en la puesta en
marcha de servidores multimedia y de archivos.
Estn disponibles en el sitio http://distrowatch.com en diferentes idiomas y para una
amplia gama de arquitecturas.
Convenciones tipogrficas
Este apartado presenta rpidamente las convenciones tipogrficas utilizadas en esta
obra.
1. Estilos de letra
Los comandos, opciones, nombres de variables y ejemplos de sintaxis se escriben con
este tipo de letra: ejemplo de comando.
Los nombres de archivos se escriben en el estilo siguiente: ejemplo de nombre de
archivo.
Los ejemplos de lnea de comandos se enmarcan as:
ejemplo de lnea de comandos
Mientras que los extractos de archivos de texto tienen la forma:
extracto de archivo de texto
2. Teclado
El teclado de referencia de esta obra es de tipo 105 teclas espaol. El nombre y la
ubicacin de las teclas son:

Una combinacin de teclas expresada con el carcter + como separador significa que
hay que pulsar simultneamente las teclas enumeradas. Por ejemplo [Ctrl]+[Alt]+[F1]
significa que el usuario tiene que pulsar simultneamente las teclas [Ctrl], [Alt] y [F1
Consolas y terminales Linux
Los trminos "consola" y "terminal" se usan para definir el conjunto de dispositivos que
permiten al usuario interactuar con el sistema; este conjunto generalmente se compone
de una pantalla, un teclado y un ratn.
1. Consolas virtuales
Para ofrecer varios terminales al usuario desde un mismo conjunto de
pantalla/teclado/ratn, Linux proporciona un cierto nmero de consolas virtuales.
La ventaja de esta administracin es que se dispone tanto de varias terminales de "texto"
para las tareas que deben efectuarse desde una lnea comandos, como de una consola
"grfica" que permite lanzar herramientas con una interfaz ms evolucionada, como un
programa de retoque de imgenes o un reproductor multimedia.
Estas consolas virtuales, que generalmente son seis o siete en las distribuciones como
Fedora, Ubuntu o Suse, se componen de cinco a seis terminales de texto y una consola
grfica. Se representan por las teclas de funcin [F1] a [F7] del teclado (siendo [F1] o
[F7] la consola grfica); para pasar de una a otra, hay que pulsar simultneamente las
teclas [Ctrl]+[Alt]+[Fn] donde n es el nmero de la consola virtual.

No es obligatorio pulsar la tecla [Ctrl] para pasar de un terminal de texto a otro.
Una consola virtual de texto, o simplemente un terminal de texto, se parece a esto:

La consola virtual grfica puede tomar diversos aspectos, segn el entorno de escritorio
elegido y la versin de la distribucin de Linux; por ejemplo, en Fedora 19, con el
entorno de escritorio KDE:

Y con el entorno GNOME en Ubuntu 13.04:


Es posible contar con ms (o menos) de seis consolas virtuales de texto y ms de una
consola virtual grfica en Linux. La configuracin de este sistema no entra en el marco
de este libro, por lo que consideraremos en lo sucesivo que disponemos de siete
consolas virtuales, una de las cuales es grfica.
2. Emuladores de terminales
Bajo la interfaz grfica de Linux, se pueden escribir comandos de la misma manera que
en un terminal de texto. Para ello, se utiliza un programa que "emula" la lnea de
comandos de Linux dentro de una ventana.
Hay muchos emuladores de terminal disponibles para Linux, como xterm, que es un
estndar en todos los sistemas UNIX utilizados, o konsole, disponible en el entorno
KDE:



La interfaz grfica de Linux facilita generalmente varios iconos o mens con un
pictograma parecido a una pantalla o a una concha para ejecutar emuladores de
terminal.
3. Terminales remotos
Otra manera de interactuar con la lnea de comandos de Linux es el uso de una conexin
de red y un software de comunicacin remota, como Telnet o SSH, iniciado desde un
terminal de texto.
Desde ah es posible controlar un sistema Linux desde otro Linux, o incluso desde un
equipo Windows utilizando una herramienta como PuTTY bajo licencia GPL y por
tanto descargable libremente:
Inicio de sesin, autenticacin
El sistema Linux es multiusuario, por lo cual hay que empezar por autenticarse en el
equipo.
La autenticacin sirve para comprobar que el usuario situado delante de la consola es
quien pretende ser. Tiene que facilitar su identidad (nombre de inicio de sesin o login)
y una prueba de sta (contrasea) para conectarse.
Tanto si se trata del modo texto como del modo grfico, la contrasea escrita por el
usuario no se muestra en pantalla.

Al introducir el nombre de inicio de sesin y la contrasea se deben respetar
escrupulosamente maysculas y minsculas. De modo general, ya se trate de un nombre
de archivo, de un login, de un nombre de variable o de un comando, la letra a no es
igual que la letra A.
Ejemplo de inicio de sesin en un terminal de texto
Ubuntu 13.04 ubuntu tty1

ubuntu login: nicolas
Password:
Last login: Fri May 10 14:34:53 CEST 2013 on tty1
Welcome to Ubuntu 13.04 (GNU/Linux 3.8.0-19-generic x86 64)

* Documentation:https://help.ubuntu.com/

[nicolas@ubuntu:~]$
Ejemplo de inicio de sesin en un terminal grfico
Smbolo del sistema del shell (prompt)
Una vez conectado a un terminal de texto, se inicia automticamente un
programa llamado shell. ste permite escribir los comandos que indicaremos ms
adelante.
El shell indica que est en espera de una instruccin presentando un smbolo del sistema
(o prompt) al principio de la lnea.
Segn la configuracin predefinida por el editor de la distribucin de Linux, este
prompt puede tener varios aspectos; por ejemplo, en Red Hat:
[nicolas@doe tmp]$
En Debian o Ubuntu:
nicolas@doe:~$
O incluso:
[root@doe bin]#
El elemento ms importante en los prompt que acabamos de presentar es el ltimo
carcter de cada uno: un $ o un # en la mayora de los casos. Este carcter indica que el
usuario actual conectado es o bien un usuario cualquiera sin derechos especiales ($), o
bien el administrador que cuenta con todos los derechos necesarios para la
configuracin y el mantenimiento del sistema (#).

Los dems datos del prompt del shell son el nombre del usuario (delante de @), el
nombre del equipo (doe) y el nombre de la carpeta actual (tmp, ~ y bin).
Para simplificar los ejemplos siguientes, el prompt del shell se reducir a este ltimo
carcter ($ o #), precedido eventualmente del nombre del usuario entre corchetes:
$
o:
[nicolas]$
Condiciones generales de uso
Copyright - Editions ENI
Sintaxis de los comandos
Es importante conocer la sintaxis de los comandos para evitar un gran nmero de
errores de escritura.
En su expresin ms simple, sin opciones ni argumentos, un comando se lanza
escribiendo su nombre en la lnea de comandos:
$ comando

En los ejemplos siguientes, el $ situado al principio de lnea corresponde al prompt del
shell y no debe ser escrito por el usuario.
Si hay que especificar argumentos se aaden a continuacin del comando en la misma
lnea, separados por un espacio:
$ comando arg1 arg2

En la mayora de los casos, los argumentos son los nombres de los archivos sobre los
que actuar el comando.
Los tratamientos o la salida (visualizacin) de un comando GNU/Linux a menudo se
pueden modificar mediante una opcin. Estas opciones, especficas para cada comando,
provienen habitualmente de las implementaciones originales y de las aportaciones de los
diferentes UNIX anteriores a Linux. Por esta razn, para un mismo comando, puede
haber varias decenas de opciones con diferentes sintaxis.
Existen principalmente dos tipos de opciones: las opciones monocarcter y las opciones
largas. Ambas deben escribirse separadas por un carcter de espacio a continuacin del
comando y antes de los eventuales argumentos.

El carcter de espacio es un espacio o una tabulacin y puede repetirse varias veces,
tanto entre el comando, las opciones y los argumentos como al principio y al final de la
lnea.
Las opciones monocarcter
Las opciones monocarcter corresponden normalmente a las opciones heredadas de la
familia UNIX y por lo general van precedidas por el carcter -:
$ comando -o -p -t
$ comando -o -p -t arg1 arg2
El orden de las opciones no es relevante; las dos lneas siguientes son equivalentes:
$ comando -o -p -t
$ comando -t -o -p
Las opciones monocarcter pueden agruparse siempre que se supriman los guiones y los
caracteres de espacio intermedios:
$ comando -o -p -t
$ comando -opt
Para ciertos comandos con un gran nmero de opciones, las opciones monocarcter
pueden introducirse con un + o incluso escribirse directamente:
$ comando +o -pt
$ comando opt
Por consiguiente, segn el comando empleado, estas tres lneas no tienen por qu ser
equivalentes:
$ comando -o
$ comando +o
$ comando o
Finalmente, algunas opciones aceptan una cadena de caracteres como parmetro; en este
caso, no hay forzosamente un espacio entre la opcin y su parmetro:
$ comando -oparmetro -pt

De manera general, las opciones monocarcter introducidas con un - provienen de
comandos desarrollados para los sistemas que responden a la norma Unix98, mientras
que las que no requieren guin proceden de los UNIX de la familia BSD.
Las opciones largas
Las opciones largas generalmente son opciones aadidas en el marco de la reescritura
del comando GNU. Son ms explcitas que las anteriores porque su nombre indica su
utilidad y van precedidas por dos guiones --:
$ comando --help
$ comando --version
En el caso de una opcin con parmetro, ste se separa con un espacio:
$ comando --variable parmetro
Separacin de opciones y argumentos
Segn su sintaxis, realizar la distincin entre opciones y argumentos puede ser difcil.
Si una opcin a va precedida por un guin y la cadena de caracteres -b como
argumento, la sintaxis siguiente puede crear confusin:
$ comando -a -b
En este ejemplo, la cadena de caracteres -b se tratar como la opcin b introducida por
un guin, y no como un argumento.
Para evitar toda ambigedad, se separa las opciones de los argumentos en la lnea de
comando intercalando dos guiones; en el problema anterior, esto nos da:
$ comando -a -- -b
Cuando el shell encuentra -- en la lnea de comando, interpreta todas las cadenas de
caracteres siguientes como argumentos del comando.
Aplicaciones con interfaces grficas
Es natural iniciar las herramientas grficas utilizando atajos como los iconos y los
mens ofrecidos por el entorno de escritorio.
Sin embargo, todas estas aplicaciones pueden ser instanciadas a partir de un comando
escrito en la lnea de un emulador de terminal. As, la lnea siguiente -de la misma
manera que el icono correspondiente- permite ejecutar el navegador web Firefox:
$ firefox

Es bueno conocer el nombre de los comandos grficos y ejecutarlos de esa manera ya
que puede que no existan los mismos atajos en unos u otros entornos de escritorio o en
unas u otras distribuciones.
Las opciones de comandos con interfaz grfica presentan una sintaxis diferente de las
otras: una cadena de caracteres introducida por un solo guin; por ejemplo, para mostrar
el reloj con un fondo rojo:
$ xclock -bg red
Atajos de teclado
1. En modo texto
Los atajos presentados aqu son los propios del shell Bash que se usa de modo
predeterminado en Linux; funcionan tanto en una consola virtual de texto como en un
emulador de terminal.
Control de visualizacin
[Ctrl]+[l]
Borra la pantalla y coloca el prompt del shell en la primera
lnea del terminal.
[Mays]+[RePg]
Sube media pgina en la pantalla del terminal (igual que un
deslizador); muy prctico para ver el resultado de un
comando un poco largo. Es posible subir entre cinco y seis
pginas en funcin de la configuracin del sistema.
[Mays]+[AvPg]
Al contrario del atajo anterior, baja media pgina en la
pantalla del terminal.
Edicin de la lnea de comando
[Inicio] Mueve el cursor al principio de la lnea.
[Fin] Mueve el cursor al final de la lnea.
[Izquierda] Mueve el cursor un carcter hacia la izquierda.
[Derecha] Mueve el cursor un carcter hacia la derecha.
[Supr] Suprime el carcter a la derecha del cursor.
[Retroceso] Suprime el carcter a la izquierda del cursor.
[Ctrl]+[w] Borra la ltima palabra.
[Ctrl]+[u] Borra toda la lnea.
Historial de comandos
[Arriba]
Sube por el historial de comandos. Cada pulsacin de esta tecla
permite mostrar el comando anterior de los que se han ejecutado
anteriormente en el shell; a continuacin se puede modificar el
comando antes de ejecutarlo de nuevo.
[Abajo]
Baja por el historial de comandos. Esta accin es vlida slo si el
usuario ha subido previamente por el historial con el atajo anterior.
[Ctrl]+[r]
Busca una cadena de caracteres en el historial de comandos. La
bsqueda se efecta a medida que el usuario escribe los caracteres
de la cadena. Si la cadena est contenida en varios comandos del
historial, una pulsacin ms de [Ctrl]+[r] permite proseguir la
bsqueda subiendo ms por el historial.
[Ctrl]+[j]
o [Esc]
Termina una bsqueda iniciada con [Ctrl]+[r] y permite al usuario
modificar la lnea antes de ejecutarla.
[Ctrl]+[g] Anula una bsqueda iniciada con [Ctrl]+[r].
Varios
[Ctrl]+[c]
Interrumpe el comando en curso sin esperar el fin de su ejecucin
normal.
[Ctrl]+[d]
Enva el carcter de fin de archivo (EOF o End Of File). Indica al
comando en curso que la entrada por teclado ha finalizado.
[Ctrl]+[s]
Marca una pausa en la visualizacin del terminal (equivale a una
pulsacin de la tecla [Bloq Despl]).
[Ctrl]+[q]
Prosigue la visualizacin de un terminal parado anteriormente
(equivalente a una segunda pulsacin de la tecla [Bloq Despl]).
2. En modo grfico
Los atajos de teclado disponibles en la interfaz grfica dependen del administrador de
ventanas y del entorno de escritorio utilizado.
Los entornos ms conocidos actualmente son KDE (K Desktop Environment) y
GNOME (GNU Network Object Model Environment); su rpida evolucin y la
diversidad de aplicaciones disponibles en GNU/Linux no permiten enumerar los
numerosos atajos implementados.
Condiciones generales de uso
Copyright - Editions ENI
Primeros comandos
Estas primeras aplicaciones proporcionan un buen ejemplo de uso de la lnea de
comando de Linux y permiten efectuar operaciones esenciales del sistema; algunas de
ellas se utilizarn de nuevo posteriormente en este libro.
1. Identidad de los usuarios: who, whoami, finger
El comando who enumera todos los usuarios conectados actualmente al sistema:
[nicolas]$ who
nicolas vc/1 Apr 3 01:04
root pts/0 Apr 2 22:42 (192.168.200.1)
En este ejemplo, el usuario nicolas est conectado a la primera consola virtual de texto
(vc/1 o tty1) desde el 3 de abril a las 1:04 y el administrador (root) est conectado
desde un emulador de terminal (pts/0) remoto (192.168.200.1), desde el 2 de abril a las
22:42.
Con la opcin -q, el propio comando who enumera nicamente los nombres de
conexin y da el total del nmero de usuarios conectados actualmente:
[nicolas]$ who -q
nicolas root
# usuario=2
Por el contrario, el comando who am i que posee una sintaxis muy particular -la cual
recuerda las preferencias de los productores cinematogrficos por los sistemas
informticos que comprenden el lenguaje natural-, muestra nicamente la lnea que
corresponde al usuario conectado:
[nicolas]$ who am i
nicolas vc/1 Apr 3 01:04
El comando whoami, por su parte, indica la identidad bajo la que se encuentra
actualmente el usuario:
[nicolas]$ whoami
nicolas
Siempre respecto a los usuarios del sistema, el comando finger muestra una descripcin
ms precisa de una cuenta:
$ finger
Login Name Tty Idle Login Time Office Office
Phone
nicolas Nicolas Pons vc/1 1 Apr 3 01:04
root root pts/0 Apr 2 22:42 (192.168.200.1)
La columna Idle muestra el tiempo de inactividad de los usuarios (en minutos, si no se
ha precisado ninguna unidad).
Para obtener an ms precisiones sobre un usuario, se indica su nombre de conexin
como argumento del comando finger:
$ finger nicolas
Login: nicolas Name: Nicolas Pons
Directory: /home/nicolas Shell: /bin/bash
On since Mon Apr 3 01:04 (CEST) on tty1 1 minute 12 seconds idle
No mail.
No Plan.
Adems de la informacin de conexin del usuario nicolas, se constata aqu que:
Su nombre real es "Nicolas Pons".
Su directorio personal es /home/nicolas.
Su shell predeterminado /bin/bash.
Este usuario no tiene mensajes de correo en su buzn.
No se indica nada en su archivo personal .plan.

Los usuarios inscriben en su archivo .plan ("planning") sus reuniones, citas y otra
informacin que figura en su agenda.
2. Cambio de contrasea: passwd
El comando passwd permite al usuario modificar su contrasea. A diferencia del
comando anterior, ste es interactivo y solicita al usuario que escriba su
antigua contrasea antes de escribir dos veces la nueva:
[nicolas]$ passwd
Changing password for nicolas
(current) UNIX password:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Las contraseas no aparecen al escribirlas y el sistema exige escribir una contrasea
vlida; segn las reglas establecidas por el administrador, la contrasea deber incluir
un mnimo de seis caracteres y estar compuesta de letras (minsculas o maysculas) y
cifras.

Slo el administrador del sistema tiene autorizacin para cambiar la contrasea de otro
usuario especificando el login de la cuenta de usuario como argumento en la lnea de
comando.
3. Conteo: wc
Del ingls "Word Count", el comando wc permite contar el nmero de lneas, palabras y
caracteres contenidos en un archivo:
[nicolas]$ wc /etc/archivo
2 14 82 /etc/archivo
Las opciones -l, -w y -c permiten contar respectivamente slo el nmero de lneas,
palabras y caracteres contenidos en el archivo:
[nicolas]$ wc -l /etc/archivo
2 /etc/archivo
[nicolas]$ wc -w /etc/archivo
14 /etc/archivo
[nicolas]$ wc -c /etc/archivo
82 /etc/archivo
4. Visualizacin: clear, echo
El comando clear borra la pantalla (la ventana virtual):
[nicolas]$ clear
El comando echo devuelve la cadena de caracteres recibida como argumento:
[nicolas]$ echo hola desde Barcelona
hola desde Barcelona
Para ser ms exactos, devuelve todos sus argumentos separados por un solo espacio:
[nicolas]$ echo esta vez hay varios espacios entre
los argumentos
esta vez hay varios espacios entre los argumentos

Aunque muy esquemticos, estos dos ltimos comandos tendrn su utilidad en la
escritura de scripts shell.
5. Tiempo: date, cal
Como su nombre indica, el comando date indica la hora del sistema:
[nicolas]$ date
Vie may 10 14:55:16 CEST 2013
Tambin es posible dar formato a la salida, por ejemplo:
[nicolas]$ date +"hoy es el %x"
hoy es el 10/05/2013

El captulo Documentacin dar la posibilidad al lector de comprender y descubrir las
muchas opciones de los comandos anteriores.
El comando cal muestra un calendario. Si se llama sin parmetros, se muestra el
calendario del mes actual:
[nicolas]$ cal
mayo 2013
lu ma mi ju vi sa do
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Con un argumento, el comando muestra el calendario completo del ao mencionado.
Finalmente, si se llama al comando cal con dos argumentos, el primero es el mes que se
quiere mostrar y el segundo, el ao en cuestin:
[nicolas]$ cal 6 2008
junio 2008
lu ma mi ju vi sa do
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

El ao mencionado como argumento debe ser totalmente definido. As, el ao 08
corresponde al ao 8 d. C., y no a 2008, como se podra suponer!
Condiciones generales de uso
Copyright - Editions ENI
Cerrar sesin
Una vez que el usuario ha terminado el trabajo para el que se ha conectado al sistema
Linux, debe cerrar sesin (o desconectarse) para liberar la consola que utiliza.
Cerrar una sesin en un terminal de texto puede efectuarse de tres maneras:
con el comando exit;
con el comando logout (slo funciona a partir del shell ejecutado
automticamente en la conexin);
pulsando simultneamente las teclas [Ctrl]+[d].

La secuencia de teclas [Ctrl]+[d] corresponde al carcter de fin de archivo. Cuando el
terminal recibe este carcter, considera que su "archivo" de entrada (el teclado) ha
terminado y, por tanto, termina su ejecucin. Esta nocin de archivo de entrada se
detalla en el apartado "Redirecciones" del captulo que trata del shell Bash.
Por su parte, las interfaces grficas de Linux permiten cerrar la sesin mediante un
men:
Manual
Con la mayor parte de distribuciones GNU/Linux se instala un manual electrnico.
1. Secciones
Este manual trata diferentes puntos, como los comandos y su sintaxis, los archivos de
configuracin del sistema, las bibliotecas estndar de programacin...
Para ello, el manual se divide en nueve secciones principales:
Seccin 1: comandos de usuario.
Seccin 2: llamadas al sistema.
Seccin 3: bibliotecas de programacin (libc, Perl, SSL, Tcl).
Seccin 4: archivos especiales y dispositivos.
Seccin 5: archivos de configuracin, formatos y formalismos.
Seccin 6: juegos.
Seccin 7: varios.
Seccin 8: comandos de administracin.
Seccin 9: rutinas del ncleo.
Las secciones 1 y 8, que describen el conjunto de comandos disponibles en GNU/Linux,
son las ms importantes.
2. Comando man
El acceso a una pgina del manual se realiza lanzando el comando man y especificando,
como argumento en la lnea de comandos, el trmino buscado. Este trmino corresponde
al nombre del comando, del archivo o bien de la biblioteca de programacin para lo que
se busca informacin.
As, para mostrar la pgina del manual sobre el comando finger visto anteriormente:
$ man finger
Aparece la pgina siguiente:

NOMBRE
finger - buscar informacin sobre un usuario.

SINOPSIS
finger [-lmps] [user...] [user@host...]

DESCRIPCIN
finger muestra informacin sobre los usuarios.

Opciones:

-s finger muestra el nombre de login, el nombre real, el
ordenador
y la autorizacin de escritura ( * significa que la
escritura
sobre el ordenador est prohibida), el tiempo de
inactividad,
la fecha de login, la direccin y el nmero de telfono
del
trabajo. La fecha de login se muestra bajo el formato mes,
da,
hora, minutos, salvo si se remonta a ms de seis meses ya
que,
en este caso, se muestra el ao en lugar de la hora y los
minutos.
...
Navegacin en la pgina
La herramienta man contiene las mismas funciones de desplazamiento y bsqueda que
los comandos less y vi descritos ms adelante. Cabe sealar que conviene saber que las
flechas [Arriba] y [Abajo] permiten navegar por el documento y la tecla [q] cierra la
pgina del manual.
Descripcin de una pgina del manual
Las pginas del manual electrnico se dividen en varios apartados (en el
ejemplo anterior: NOMBRE, SINOPSIS, DESCRIPCIN...). Los apartados ms
frecuentes son:
NOMBRE
Nombre de la pgina del manual seguido de una descripcin
sucinta de su contenido.
SINOPSIS
Sintaxis del comando con sus opciones y argumentos. Los []
indican que la opcin o el argumento es opcional y ... indica
que la opcin o el argumento anterior puede repetirse.
DESCRIPCIN
Descripcin detallada del comando. Tpicamente, contiene
una explicacin de sus diferentes opciones.
EJEMPLOS
Como su nombre indica, proporciona ejemplos de uso del
comando.
VER
TAMBIN
Indica las otras pginas del manual relativas al tema de la
pgina presentada.
ERRORES
Agrupa las observaciones respecto a las diferencias que se
pueden encontrar entre el comando GNU presentado aqu y
el mismo comando en otro sistema UNIX. Los errores y
otros comportamientos anormales detectados pero no
resueltos hasta el momento tambin se indican aqu.
TRADUCCIN Nombre del traductor de la pgina.
Otros
En funcin del contenido, las pginas del manual pueden
tener otros apartados distintos.
Bsqueda en las secciones del manual
Cuando el usuario busca un trmino en el manual, el comando man recorre las distintas
secciones segn este orden: 1, 8, 2, 3, 4, 5, 6, 7, 9. De este modo, el trmino buscado se
compara primero con los comandos existentes (comandos bsicos y comandos de
administracin) antes de compararse con las llamadas al sistema y otros nombres de
archivos de configuracin. Este orden de recorrido de las secciones se puede modificar
en el archivo de configuracin /etc/man.config descrito ms adelante.
Un mismo trmino puede aparecer en diferentes secciones del manual, por lo que se
puede forzar la seccin de la pgina buscada como primer argumento de la lnea de
comando. Por ejemplo, man signal devuelve la pgina relativa a la llamada al sistema
signal (Seccin 2 del manual), mientras que man 7 signal devuelve la definicin de las
diferentes seales que pueden ser recibidas por los procesos.
Encontrar la informacin en el manual
La gran dificultad, para el usuario nuevo en Linux, es encontrar la informacin sin
conocer el nombre de los comandos que busca.
Para resolver este problema, el comando man acepta la opcin -k. Esta opcin indica
que busque la cadena de caracteres pasada como argumento en las descripciones de las
pginas del manual, y no slo en el ttulo de las pginas.
As, para buscar las pginas del manual asociadas a "calcula", se puede escribir:
[nicolas]$ man -k clculo
abs (3) - Calcular el valor absoluto de un entero
acl_calc_mask (3) - Calculate the file group class mask
allneeded (1) - Force the calculation of all fonts now
needed
bc (1) - An arbitrary precision calculator language
bc (1) - Un lenguaje de calculadora de precisin
arbitraria
carg (3) - calculate the argument
cargf [carg] (3) - calculate the argument
cargl [carg] (3) - calculate the argument
conj (3) - calculate the complex conjugate
conj (3) - Calcular el conjugado complejo
conjf [conj] (3) - calculate the complex conjugate
conjf [conj] (3) - Calcular el conjugado complejo
conjl [conj] (3) - calculate the complex conjugate
conjl [conj] (3) - Calcular el conjugado complejo
cvt (1) - calculate VESA CVT mode lines
dc (1) - an arbitrary precision calculator
dc (1) - una calculadora de precisin arbitraria
difftime (3) - calculate time difference
...
La visualizacin producida indica que el comando bc, en la seccin 1 del manual (cifra
mostrada entre parntesis), permite efectuar clculos matemticos.
Otra manera de obtener este resultado es ejecutar el comando apropos:
[nicolas]$ apropos clculo
abs (3) - Calcular el valor absoluto de un entero
acl_calc_mask (3) - Calculate the file group class mask
allneeded (1) - Force the calculation of all fonts now
needed
bc (1) - An arbitrary precision calculator language
bc (1) - Un lenguaje de calculadora de precisin
arbitraria
carg (3) - calculate the argument
cargf [carg] (3) - calculate the argument
cargl [carg] (3) - calculate the argument
conj (3) - calculate the complex conjugate
conj (3) - Calcular el conjugado complejo
conjf [conj] (3) - calculate the complex conjugate
conjf [conj] (3) - Calcular el conjugado complejo
conjl [conj] (3) - calculate the complex conjugate
conjl [conj] (3) - Calcular el conjugado complejo
cvt (1) - calculate VESA CVT mode lines
dc (1) - an arbitrary precision calculator
dc (1) - una calculadora de precisin arbitraria
difftime (3) - calculate time difference
...

El comando apropos y la opcin -k de man buscan en las definiciones de las pginas
del manual, principalmente en ingls. Es preciso, pues, buscar la cadena de caracteres
"print" en lugar de "impresin" para encontrar los comandos que permiten imprimir un
documento.
Finalmente, es posible escribir esto para obtener ms informacin sobre el
comando man:
$ man man
3. /etc/man.config
El archivo de configuracin del manual electrnico es /etc/man.config. El administrador
del sistema puede editarlo para modificar el comportamiento predeterminado del
comando man.
Veamos un extracto de este archivo de configuracin; las lneas que empiezan con un #
son comentarios:
# Directorios que contienen las pginas de manual en el disco
#
MANPATH /usr/share/man
MANPATH /usr/man
MANPATH /usr/local/share/man
MANPATH /usr/local/man
MANPATH /usr/X11R6/man
#
# Rutas de las herramientas subyacentes al comando man.
#
TROFF /usr/bin/groff -Tps -mandoc
NROFF /usr/bin/nroff -c -mandoc
PAGER /usr/bin/less -isr
CAT /bin/cat
#
# Orden de consulta de las secciones del manual
#
MANSECT 1:8:2:3:4:5:6:7:9:tcl:n:l:p:o
#
# Las pginas del manual se guardan generalmente en un formato
# comprimido, se indican aqu las herramientas de descompresin
utilizadas
# segn las extensiones de los archivos
#
.gz /usr/bin/gunzip -c
.bz2 /usr/bin/bzip2 -c d

Algunas distribuciones de GNU/Linux como Fedora incluyen en su ltima versin un
paquete llamado man-db para poder editar las pginas del manual. En ese caso, el
archivo de configuracin utilizado es /etc/man_db.conf y su sintaxis, descrita en la
pgina man 5 manpath, es similar al archivo /etc/man.conf presentado anteriormente.
Documentacin Info
1. Comando info
El comando info es una herramienta que agrupa bsicamente la misma informacin
contenida en las pginas del manual. Su principal ventaja, respecto a man, es que
presenta los datos de forma jerrquica y con vnculos entre s.
Para acceder a la documentacin "Info", basta con escribir el comando info:
$ info
Aparece la visualizacin siguiente:
File: dir Node: Top This is the top of the INFO tree

This (the Directory node) gives a menu of major topics.
Typing "q" exits, "?" lists all Info commands, "d" returns here,
"h" gives a primer for first-timers,
"mEmacs<Return>" visits the Emacs topic, etc.

In Emacs, you can click mouse button 2 on a menu item or cross
reference
to select it.

* Menu:

Texinfo documentation system
* Info: (info). Documentation browsing system.
* Pinfo: (pinfo). curses based lynx-style info browser.
* Texinfo: (texinfo). The GNU documentation format.
* info standalone: (info-stnd). Read Info documents without
Emacs.
* infokey: (info-stnd)Invoking infokey. Compile Info
customizations.
* install-info: (texinfo)Invoking install-info. Update info/dir
entries.
* makeinfo: (texinfo)Invoking makeinfo. Translate Texinfo
source.
* texindex: (texinfo)Format with tex/texindex. Sort Texinfo index
files.
* pdftexi2dvi: (texinfo)PDF Output. PDF output for
Texinfo.
-----Info: (dir)Top, 2089 lines --Top
Welcome to Info version 4.11. Type ? for help, m for menu item.
Nos encontramos aqu en la raz de la jerarqua (File: dir) y los enlaces (precedidos por
el carcter *) apuntan a los diferentes nodos de los archivos de documentacin "Info".

Un nodo puede considerarse como un captulo dentro de un archivo de
documentacin. Puede existir un rbol de nodos, y por lo tanto captulos y subcaptulos,
en un mismo archivo de documentacin.
Para llamar al comando info se puede indicar, como en el comando man, un argumento
con el trmino buscado en la documentacin:
$ info date
Esto devuelve:
File: coreutils.info, Node: date invocation, Next: uname
invocation,
Up: System context

21.1 `date: Print or set system date and time
==============================================

Synopses:
date [OPTION]... [+FORMAT]
date [-u|--utc|--universal] [ MMDDhhmm[[CC]YY][.ss] ]

Invoking `date with no FORMAT argument is equivalent to invoking
it
with a default format that depends on the `LC_TIME locale category.
In the default C locale, this format is `+%a %b %e %H:%M:%S %Z %Y,
so the output looks like `Thu Mar 3 13:47:51 PST 2005.

Normally, `date uses the time zone rules indicated by the `TZ
environment variable, or the system default rules if `TZ is not set.
*Note Specifying the Time Zone with `TZ: (libc)TZ Variable.

If given an argument that starts with a `+, `date prints the
current date and time (or the date and time specified by the `--date
--zz-Info: (coreutils.info.gz)date invocation, 40 lines --Top
Welcome to Info version 4.11. Type ? for help, m for menu item.
En esta ocasin, nos encontramos en el nodo "date invocation" (Node: date invocation)
del archivo de documentacin "coreutils" (File: coreutils.info).

Si no existe documentacin "Info" para el trmino buscado, el comando info se limita a
mostrar la pgina del manual electrnico relativa a dicho trmino y se observa al
principio de la pgina la indicacin File: *manpages*. Si no corresponde ninguna
pgina del manual a este trmino, entonces el comando equivale a una llamada sin
argumentos a info.
Organizacin de la documentacin
Como se ha indicado anteriormente, la informacin contenida en los archivos de
documentacin "Info" est vinculada internamente y se organiza en forma de rbol. Para
saber el lugar donde se encuentra en la documentacin, la primera lnea de la vista
proporciona las indicaciones siguientes:
File Nombre del archivo de documentacin "Info" actual.
Node Nodo (o captulo) visible actualmente.
Next Nodo siguiente o primer subnodo segn el caso.
Prev Nodo anterior o nodo padre segn el caso.
Up
Nodo (o captulo) padre; el nodo visible actualmente (Node) es un
subcaptulo de este nodo (Up).
Navegacin
Varios comandos (teclas del teclado), bajo info, permiten pasar de un nodo a otro;
destacan:
[n] Nodo siguiente (Next).
[p] Nodo anterior (Prev).
[u] Nodo padre (Up).
[t] Nodo raz del archivo de documentacin (Top).
[l] Volver al ltimo nodo visitado (Last).
Para consultar la informacin de un nodo que puede ocupar varias pantallas se utilizan
las teclas siguientes:
[Espacio] Baja pantalla por pantalla en el nodo o pasa al nodo siguiente, segn
el caso.
[Supr]
Sube pantalla por pantalla en la pgina o pasa al nodo anterior,
segn el caso.
[b] Vuelve a la primera lnea del nodo (Beginning).
[e] Va a la ltima lnea del nodo (End).
[Ctrl]+[n] Baja una lnea en el nodo.
[Ctrl]+[p] Sube una lnea en el nodo.
Adems, en la informacin mostrada se encuentran asimismo tambin vnculos de
hipertexto a los nodos inferiores (llamados tambin "men") o a otros nodos (llamados
tambin "referencias cruzadas"). Para acceder y seguir estos vnculos (precedidos por *
para los mens y por *node para las referencias cruzadas):
[m] <men> Muestra el nodo referenciado por el men <men>.
[F] <xref> Muestra el nodo referenciado por la referencia cruzada <xref>.
[Tab] Coloca el cursor en el vnculo siguiente.
[Ecs], [Tab] Coloca el cursor en el vnculo anterior.
[Entr] Muestra el nodo referenciado por el vnculo debajo del cursor.
Para aclarar esta organizacin, veamos un esquema recapitulativo de la estructura de la
documentacin "Info":

Consideraciones
Aunque el comando info es ms evolucionado que el comando man y la escritura de la
documentacin asociada es ms fcil, se utiliza preferentemente el manual en lnea.
Las pginas del manual estn traducidas en su mayor parte y la navegacin impuesta por
el comando info es bastante compleja. stas parecen ser buenas razones.
Es cierto que un sistema GNU/Linux pide probablemente ms esfuerzo al usuario,
especialmente debido a la internacionalizacin de los programas y su documentacin.
Pero en cuanto a la ergonoma del comando info, existen otras herramientas, como
pinfo, que proponen una exploracin de la documentacin "Info" o lynx que es un
navegador web de lnea de comandos.
Ejemplo de visualizacin con pinfo:

Para navegar dentro de pinfo:
[Av Pg] Baja una pantalla en el nodo mostrado.
[Re Pg] Sube una pantalla en el nodo mostrado.
[Abajo] Selecciona el vnculo siguiente en el nodo.
[Arriba] Selecciona el vnculo anterior en el nodo.
[Derecha] Sigue el vnculo seleccionado.
[Izquierda] Vuelve al nodo anterior.
[q] Salir de pinfo.
Condiciones generales de uso
Copyright - Editions ENI
Opcin --help de los comandos en Linux
Adems de las pginas del manual y de la documentacin "Info" que ya hemos visto, los
comandos GNU que se encuentran en Linux aceptan habitualmente la opcin --help.
Los comandos invocados con esta opcin devuelven una sucinta ayuda que describe la
sintaxis general del comando y las opciones ms utilizadas; por ejemplo:
$ wc -help

Usage: wc [OPCION]... [ARCHIVO]...
or: wc [OPCION]... --referencia=ARCHIVO-R ARCHIVO...
Muestra el nmero de nuevas lneas, palabras y bytes para cada
ARCHIVO,
y el nmero total de lneas si se especifica ms de un ARCHIVO.
Sin ARCHIVO, o cuando ARCHIVO es -, lee la entrada estndar.
-c, --bytes muestra el nmero de bytes
-m, --chars muestra el nmero de caracteres
-l, --lines muestra el nmero de lneas
--files0-from=F read input from the files specified by
NUL-terminated names in file F
-L, --max-line-length print the length of the longest line
-w, --words print the word counts
--help muestra la ayuda
--version muestra el nombre y la versin del programa

Comunicar las anomalias a <bug-coreutils@gnu.org>.

Esta ayuda resulta muy prctica cuando se conoce ya el comando que hay que emplear,
pero se tienen dudas sobre la sintaxis o el nombre de una opcin.
Documentacin HOWTO
A su manera, los documentos HOWTO aportan una mina de informacin al usuario que
quiera dominar el sistema operativo con el que trabaja.
Estos documentos de varias pginas se refieren a temas especficos, como la impresin
con Linux, la configuracin de red del sistema o bien la administracin de dispositivos
SCSI.

Tambin existen otros documentos, llamados "mini-HOWTO", ms sucintos que los
otros HOWTO.
Por citar slo uno de estos documentos, el HOWTO Index recoge todos los HOWTO
existentes y los clasifica por categoras, dando una descripcin rpida de cada uno.
Estos archivos estn disponibles en diferentes formatos:
.txt Archivos en formato de texto.
.ps
Archivos PostScript imprimibles directamente en las impresoras que
reconocen este formato.
.pdf
Archivos en formato Adobe PDF que pueden leerse con la
herramienta xpdf en la interfaz grfica.
.html Pginas HTML legibles desde cualquier navegador web.
.tex y
.dvi
Formatos de archivo asociados a las herramientas de paginacin y
publicacin TeX y LaTeX.
Cuando estn instalados en el equipo, se colocan generalmente en el directorio
/usr/share/doc/HOWTO. Pero en este caso, el espacio ocupado es bastante notable. Por
otra parte, algunos editores como Red Hat slo los proporcionan en un CD-ROM
separado de la distribucin.
Si no se encuentran en el equipo, es posible consultarlos en uno de los numerosos sitios
espejo presentes en Internet (vase, en este captulo, Internet - Sitios).
/usr/share/doc
Adems de toda la documentacin vista hasta ahora, los desarrolladores y editores de
programas proporcionan generalmente una serie completa de documentos que describen
su obra.
Esta documentacin se encuentra en subdirectorios de /usr/share/doc/:

[nicolas]$ ls /usr/share/doc
abattis-cantarell-fonts-0.0.10.1
abrt-2.0.19
acl-2.2.51
aic94xx-firmware-30
akonadi-1.8.1
alsa-firmware-1.0.25
alsa-lib-1.0.26
alsa-plugins-pulseaudio-1.0.26
alsa-tools-1.0.26.1
alsa-utils-1.0.26
anaconda-yum-plugins-1.0
anthy-9100h
apper-0.8.0
apr-1.4.6
apr-util-1.4.1
...
Al igual que los HOWTO, los archivos se encuentran en diferentes formatos, por
ejemplo:
[nicolas]$ pwd
/usr/share/doc
[nicolas]$ ls pam-1.1.6
Copyright html Linux-PAM_SAG.txt rfc86.0.txt txts
[nicolas]$ ls iproute-3.6.0
COPYING README.decnet README.iproute2+tc
README README.distribution README.lnstat
Internet
1. Sitios
Internet es una inmensa fuente de informacin; veamos una breve seleccin de sitios
relacionados con los sistemas GNU/Linux.
Genricos
http://www.gnu.org/home.es.html
Ttulo: GNUs Not Unix
Idioma: multilinge
Descripcin: sitio oficial del proyecto GNU.
http://www.tldp.org
Ttulo: The Linux Documentation Project
Idioma: multilinge
Descripcin: sitio oficial que agrupa toda la documentacin de Linux
actualizada: HOWTO, guas, FAQ, pginas de manual...
Editores
http://www.redhat.es
Ttulo: Red Hat Espaa
Idioma: espaol
Descripcin: editor de las distribuciones Red Hat Enterprise.
http://fedoraproject.org/
Ttulo: Fedora
Idioma: multilinge
Descripcin: sitio oficial del proyecto Fedora.
http://www.debian.org
Ttulo: Debian
Idioma: multilinge
Descripcin: editor de la distribucin del mismo nombre.
http://www.suse.com/es-es/
Ttulo: SuSE
Idioma: multilinge
Descripcin: editor de las distribuciones SuSE Linux.
http://es.opensuse.org/
Ttulo: openSUSE Espaa
Idioma: espaol
Descripcin: sitio de la distribucin libre openSUSE.
http://ubuntu.com/
Ttulo: Ubuntu
Idioma: ingls
Descripcin: editor de la distribucin del mismo nombre.
2. Grupos de discusin
De entre todos los grupos de discusin (o newsgroups) existentes en Usenet, un cierto
nmero est dedicado a Linux y a las aplicaciones GNU. Por ejemplo, los grupos de la
jerarqua es.comp.os.linux.* son generalmente relevados por los proveedores de acceso
a Internet.
Programas como tin (en lnea de comandos) o knode (con una interfaz grfica
amigable) permiten aprovechar estos grupos de discusin.

Buzones pblicos en los que todo el mundo puede enviar o leer mensajes, es el lugar
apropiado para obtener ayuda cuando toda la documentacin vista anteriormente no
basta para resolver un problema.
Existen ciertas reglas de uso en estos grupos. Evite, por ejemplo, hacer una pregunta
sobre un problema resuelto anteriormente; para ello, conviene consultar los mensajes
anteriores y las FAQ (Frequently Asked Questions), documentos que contienen las
preguntas hechas con frecuencia acompaadas de sus respuestas.
Adems, para tener ocasin de obtener una respuesta correcta ms rpidamente:
Enve la pregunta al grupo de discusin adecuado.
Primero busque en la documentacin presentada a lo largo de este captulo:
normalmente est mal visto preguntar el nombre de una opcin para un
comando cuando un simple uso del comando man bastara.
Facilite el mximo de informacin para orientar a las personas que quieran
responderle: "No consigo imprimir" no permitir obtener ayuda, mientras que
"No consigo imprimir a pesar de haber ledo el Printing-HOWTO. Utilizo la
distribucin X con una impresora Y. Los mensajes de error son Z" ser sin duda
ms fructfero.
Sea educado, evidentemente.
El rbol de Linux
Lo ms difcil, cuando se empieza con Linux, es sin duda conocer la ubicacin
de los archivos y la utilidad de los directorios presentes en el rbol.
Este captulo propone una panormica general del sistema de archivos de Linux.
Organizacin
Presentado en forma de rbol, el sistema de archivos de Linux es una jerarqua
de directorios que tienen como nica raz / (barra).
Al instalar una distribucin de Linux, es posible crear, adems de la particin
principal que contiene /, otras particiones dedicadas a ciertos directorios del
rbol. Sin embargo, los directorios indispensables para iniciar el sistema deben
estar en la misma particin que / y no pueden, por tanto, instalarse en una
particin separada; en el esquema anterior, esos directorios esenciales aparecen
en gris en el esquema siguiente.


En la medida de lo posible, se trazar una analoga entre el rbol de Linux y los
directorios clsicos del sistema Microsoft Windows; esto permitir orientarse
mejor a los usuarios de este extendido sistema.
El rbol de archivos de Linux respeta, exceptuando algunos directorios, el FHS
(Filesystem Hierarchy Standard) implementado con el objetivo de homogeneizar
la estructura de los sistemas de archivos de Unix. Este documento detalla el
nombre y el contenido de los directorios; se encuentra disponible en la direccin
http://www.pathname.com/fhs.
Directorios principales
1. /bin, /sbin, /lib
El directorio /bin contiene los ejecutables (binarios) bsicos necesarios para el
funcionamiento del sistema; los comandos como date estn aqu.
Por su parte, todos los comandos fundamentales de administracin del sistema estn en
/sbin ("sper" binarios). Aqu se encuentran, por ejemplo, los comandos de particionado
y de administracin de dispositivos de red.
Los binarios compilados para Linux utilizan bibliotecas de funciones, lo que permite
aligerar en gran medida el tamao de los archivos porque varios ejecutables podrn
utilizar la misma porcin de cdigo contenida en una de estas bibliotecas. El directorio
/lib (libraries) rene las bibliotecas utilizadas por los binarios incluidos en /bin y /sbin.

En comparacin con un sistema Windows, estos tres directorios corresponden a los
ejecutables contenidos en C:\windows con sus bibliotecas (archivos .dll) ubicados en
C:\windows\system.
Estos tres directorios son vitales para el sistema y deben estar en la misma particin que
/.
2. /boot
Este directorio contiene el ncleo Linux y otros archivos ejecutados al arrancar el
sistema.
Por razones no detalladas en esta obra, este directorio puede disponer de una particin
distinta.
3. /dev
Una de las particularidades de Linux es presentar, en forma de archivos, los dispositivos
conectados al sistema.
Este directorio contiene archivos como /dev/fd0 y /dev/cdrom que representan
respectivamente la unidad de disquetes y la unidad de CD-ROM.

La forma de acceder a los archivos presentes en estos soportes extraibles se aborda en el
apartado que trata de los montajes.
Siguiendo en el mbito de los archivos especiales, existen en este directorio archivos
como /dev/null; ste es en cierto modo una papelera a la que se pueden redirigir todos
los datos que no se quiera conservar. Su uso se detallar en el captulo sobre el Shell
Bash.
La particularidad de los archivos presentes en /dev no guarda relacin con sus nombres,
sino con sus nmeros mayor y menor. Estos dos nmeros indican al ncleo Linux el
tipo de dispositivo vinculado al archivo; se muestran con el comando ls -l que se
detallar en el captulo Manipulacin de archivos.
Los archivos de este directorio sirven para acceder a los dispositivos o para implementar
funcionalidades importantes para el sistema, por lo que /dev debe estar en la misma
particin que /.
4. /home
El directorio /home contiene los directorios personales de los usuarios del equipo. As,
para las cuentas de usuario nicolas, linus y richard, existirn los directorios
/home/nicolas, /home/linus y /home/richard.
En su directorio personal es donde un usuario guarda sus archivos de datos; en l se
inscriben los archivos de configuracin propios del usuario. Por ejemplo, la
configuracin del editor Vi, para el usuario nicolas, se encuentra en el archivo
/home/nicolas/.exrc.

El directorio personal del usuario de Linux puede compararse a la carpeta "Mis
documentos" de un sistema Windows.
Al instalar el sistema, el administrador dedica habitualmente una particin a este
directorio para separar fsicamente los datos de usuario y los datos del sistema.
5. /root
Este directorio tiene la misma funcin que el anterior, pero est reservado al usuario
root que es el administrador del equipo.
No se encuentra en /home por razones de seguridad y porque no puede estar en una
particin distinta como /home.
6. /tmp
Como su nombre indica, el directorio /tmp est previsto para acoger los archivos
temporales.
Todos los usuarios del sistema pueden escribir en este directorio, pero el administrador
planifica generalmente una limpieza automtica de este directorio a intervalos regulares.
El tiempo de vida de un archivo presente en este directorio se estima en unas horas o en
unos das.
7. /lost+found
Este directorio se crea automticamente en cada particin de Linux al arrancar el
sistema. Lo utiliza la herramienta de verificacin fsck (File System ChecK) para
guardar los archivos recuperados tras un incidente en el sistema; por ejemplo, tras un
corte de corriente imprevisto.
Este directorio debera, si todo va bien, permanecer vaco.
8. /mnt
/mnt es un directorio vaco o que contiene una serie de directorios vacos predefinidos.
Se reserva para el montaje de sistemas de archivos de terceros.
Existen generalmente los subdirectorios /mnt/floppy y /mnt/cdrom, previstos para
acceder respectivamente a los disquetes y a los CD-ROM.

Las distribuciones recientes prevn tambin puntos de montaje en /media para los
sistemas de archivos que provienen de medios extraibles (disquetes, CD-ROM...) y en
/misc para los rboles montados automticamente por el montador automtico del
sistema.
9. /proc
/proc es un sistema de archivos virtual que representa el estado del sistema en curso de
ejecucin.
No ocupa espacio en el disco; slo existe en memoria RAM y cada archivo que contiene
da acceso a informacin del sistema, como el uso actual de la memoria, la lista de
dispositivos detectados en los diferentes buses del equipo (ISA, PCI, USB...) o bien el
enrutamiento de los paquetes de red.

El anlisis de los archivos presentes en /proc es responsabilidad del administrador del
sistema y puede ignorarse en el marco del uso diario del puesto de trabajo.
Adems, por cada proceso iniciado en el sistema, existe un subdirectorio que lo
caracteriza en /proc. Comandos como ps y top, abordados ms adelante en este libro,
utilizan esta informacin.
Todos estos datos estn presentes en archivos "virtuales", por lo que no se
reserva ninguna particin particular a /proc.
10. /sys
A la manera de /proc, /sys es un sistema de archivos virtuales que no ocupan espacio en
el disco. Su meta es representar en forma de archivos los diferentes perifricos e indicar
caractersticas y estados de hardware.
11. /usr
Es el directorio ms voluminoso creado al instalar el sistema; /usr contiene todos los
programas que no estn en /bin y /sbin. Tambin contiene la documentacin y las
fuentes de los programas.

Este directorio corresponde aproximadamente a la carpeta c:\archivos de programa de
Windows.
Se puede crear una particin especial para este directorio al instalar el sistema.
/usr/bin, /usr/sbin, /usr/lib
Estos tres subdirectorios contienen binarios (y bibliotecas asociadas) suplementarios,
pero no esenciales para el uso o la administracin bsica del sistema.
/usr/games
Como su nombre indica, los juegos instalados en el sistema deberan encontrarse aqu.
/usr/include
Aqu se encuentran las definiciones de las distintas bibliotecas utilizadas en
programacin. El contenido de este directorio slo es necesario en la compilacin de
programas.
/usr/local
Este directorio est dedicado a las aplicaciones y documentos propios del equipo local;
los programas compilados especficamente para el sistema se encuentran, pues, aqu.
Este directorio se divide en subdirectorios bin, lib, ...
/usr/share
Adems de los archivos de internacionalizacin con la traduccin de los mensajes
mostrados por las aplicaciones (/usr/share/locale), este subdirectorio contiene la
documentacin presentada en el captulo Documentacin (/usr/share/man,
/usr/share/info y /usr/share/doc).
Los recursos compartidos destinados a las aplicaciones grficas se encuentran en el
subdirectorio /usr/share/X11.
/usr/src
La mayor parte de los programas utilizados estn desarrollados bajo licencia libre
(GPL), por lo que no es raro disponer de su cdigo fuente para recompilarlos de forma
especfica.
Si es as, el cdigo fuente de estos programas se guarda aqu. Por ejemplo, el cdigo
fuente del ncleo Linux se encuentra en el directorio /usr/src/linux.
12. /var
Otro directorio voluminoso de un sistema de archivos Linux; /var rene todos los
archivos de datos "variables" en el tiempo: las colas de espera de impresora, los buzones
de los usuarios y los registros del sistema.

Un registro o archivo de "log" contiene el historial de la actividad de un programa.
Existe por ejemplo un archivo de log que registra la hora de conexin y desconexin de
los usuarios al equipo.
El tamao de este directorio depende en gran medida de los servicios implementados en
el sistema; as, si el equipo cumple la funcin de servidor de correo, de archivos y de
impresora al mismo tiempo, este directorio ser ms grande que en un equipo que sirva
nicamente como puesto de trabajo.
Finalmente, se puede reservar para este directorio una particin especfica.
/var/lib
Este subdirectorio contiene generalmente los archivos de los sistemas de gestin de
bases de datos (SGBD), como MySQL.
/var/log
Aqu se agrupan todos los registros del sistema y de aplicaciones. La consulta de
archivos de log permite al administrador comprender -y por lo tanto resolver- un gran
nmero de problemas del sistema y de aplicaciones.
/var/lock
Las aplicaciones de servidor (servidor web, servidor ftp, planificador de tareas) crean
cada una un archivo en este directorio para dejar testimonio de su ejecucin. Llamados
archivos "de bloqueo", permiten con su presencia evitar que uno de estos programas se
ejecute varias veces.
Estos archivos, lgicamente, se borran al detener los programas correspondientes.
/var/run
Adems de los archivos de bloqueo (/var/lock), los servicios iniciados en el equipo
crean generalmente un archivo que lleva su nombre y contiene el identificador del
proceso (PID) correspondiente en /var/run.

En otro captulo abordaremos la nocin de proceso.
Estos archivos permiten recuperar ms fcilmente los identificadores de los procesos
con los scripts de control.
/var/spool
Este subdirectorio agrupa los archivos de espera (spool) de diferentes
servicios: impresin (/var/spool/lpd y /var/spool/cups), correo electrnico
(/var/spool/mail), tareas planificadas (/var/spool/cron)...
/var/tmp
Al igual que el directorio /tmp, todos los usuarios del sistema pueden almacenar
archivos temporales en /var/tmp.
La diferencia entre estas dos ubicaciones es el tiempo de vida atribuido generalmente
por el administrador a estos archivos; desde unos das hasta varias semanas para
/var/tmp.
13. /etc
El directorio /etc ("etctera") contiene los archivos que no tienen cabida en los otros
directorios, es decir, todos los archivos de configuracin y scripts de arranque del
sistema.
Se divide en subdirectorios, entre los que destacan:
/etc/rc.d que acoge los scripts de arranque y de control de los servicios;
/etc/skel (directorio "esqueleto"), que contiene los archivos que se copiarn en el
directorio del usuario al crear su cuenta Linux;
/etc/sysconfig que contiene principalmente la configuracin de los dispositivos.

Este directorio corresponde, en cierto modo, a la base de registros del sistema Windows.
Este directorio, fundamental para el sistema operativo, se encuentra obligatoriamente en
la particin principal.
Montar y acceder a los medios extraibles
Considerado en su conjunto hasta ahora, el rbol de Linux puede estar compuesto por
varios sistemas de archivos guardados en soportes diferentes.
De hecho, cada particin o medio extraible habilita un sistema de archivos "fsico". Una
vez reunidos, forman el rbol -o sistema de archivos- de Linux que hemos descrito
anteriormente. Para ello, una particin del disco duro del equipo se designa como
principal y acoge el sistema de archivos raz (el que contiene /), del que se colgarn los
dems sistemas de archivos.
Por ejemplo:

1. Comando mount
Para acceder al contenido de un sistema de archivos fsico, hay que "conectarlo" al rbol
de Linux. Esta operacin se llama "montaje" y se efecta mediante el comando mount.
Su sintaxis general es la siguiente:
mount [-t <type>] [-o opciones[,...]] <disp.> <rep.>
Una pgina del manual detalla este comando; slo se exponen aqu los montajes de
sistemas de archivos presentes en CD-ROM o disquete.
Como se ha indicado anteriormente, los archivos asociados a las unidades de disquetes
y de CD-ROM son /dev/fd0 y /dev/cdrom.
Para montar los sistemas de archivos presentes en los medios insertados en
estos dispositivos, hay que escribir los comandos mount siguientes:
mount /dev/fd0
mount /dev/cdrom
El comando mount sin parmetros indica el directorio utilizado en el rbol de Linux
para todos los montajes del sistema de archivos; los directorios de montaje asociados de
modo predeterminado a las unidades de disquetes y CD-ROM se definen en el archivo
/etc/fstab; para ms informacin sobre este archivo: man 5 fstab.

Segn losderechos otorgados por el administrador en el archivo /etc/fstab, los usuarios
pueden no estar autorizados para efectuar montajes. Entonces ser necesario conectarse
como root.
Por ejemplo, para ver el contenido de un disquete:
[root]# mount
/dev/hda3 on / type ext3 (rw)
none on /proc type proc (rw)
[root]# ls /mnt/floppy/
[root]# mount /dev/fd0
[root]# mount
/dev/hda3 on / type ext3 (rw)
none on /proc type proc (rw)
/dev/fd0 on /mnt/floppy type vfat (rw,nosuid,nodev)
[root]# ls /mnt/floppy/
command.com ega2.cpi io.sys keybrd2.sys mode.com
config.sys ega3.cpi keyb.com keybrd3.sys msdos.sys
display.sys ega.cpi keyboard.sys keybrd4.sys
En este ejemplo, el segundo comando mount, sin parmetros, indica que el sistema de
archivos presente en el disquete (/dev/fd0) est montado en el directorio /mnt/floppy.
Las llamadas del comando ls muestran el contenido del directorio /mnt/floppy antes y
despus del montaje efectuado con mount /dev/fd0.

En las distribuciones recientes, se implementa un sistema de automontaje. Esto permite
que el usuario acceda a los sistemas de archivos presentes en los disquetes y CD-ROM
sin invocar el comando mount, u, nicamente accediendo a los directorios asociados a
los dispositivos en el archivo /etc/fstab.
2. Comando umount
De igual manera, cuando ya no se quiere acceder a un sistema de archivos en Linux, hay
que "desmontarlo" antes de poder extraer el medio de su unidad. En el caso de un CD-
ROM, la bandeja de la unidad est bloqueada hasta que se realiza esta accin.

Si bien es posible extraer mecnicamente un disquete de su unidad o una memoria USB
de su puerto, sigue siendo obligatorio desmontar el sistema de archivos montado
previamente, so pena de perder los datos guardados en el medio.
El comando umount, seguido del nombre del dispositivo o del directorio de montaje,
permite desmontar el sistema de archivos; por ejemplo, para el disquete:
# umount /mnt/floppy
o:
# umount /dev/fd0
Dicho esto, no es posible desmontar un sistema de archivos en uso; hay que tener la
precaucin de no encontrarse en el directorio de montaje al llamar a umount.
3. Caja de herramientas mtools
Instalado de modo predeterminado con las distribuciones de Linux recientes, el paquete
de software mtools es una serie de comandos que permiten acceder a los medios de la
misma manera que en la lnea de comandos del DOS.
Estos comandos tienen los mismos nombres que los comandos DOS, aunque poniendo
delante la letra "m".
Por ejemplo, para leer un disquete DOS y copiar uno de sus archivos al directorio /tmp
sin montar, se utilizarn los comandos mdir y mcopy as:
[root]# mdir a:
Volume in drive A has no label
Volume Serial Number is 2A87-6CE1
Directory for A:/

EGA2 CPI 58870 06-08-2000 17:00
EGA3 CPI 58753 06-08-2000 17:00
EGA CPI 58870 06-08-2000 17:00
KEYB COM 21607 06-08-2000 17:00
KEYBOARD SYS 34566 06-08-2000 17:00
KEYBRD2 SYS 31942 06-08-2000 17:00
KEYBRD3 SYS 31633 06-08-2000 17:00
KEYBRD4 SYS 13014 06-08-2000 17:00
MODE COM 29239 06-08-2000 17:00
COMMAND COM 93040 06-08-2000 17:00
DISPLAY SYS 17175 06-08-2000 17:00
CONFIG SYS 33 03-01-2004 19:16
12 files 448 742 bytes
888 832 bytes free

# mcopy a:\command.com /tmp
# ls /tmp
command.com

Atencin: los comandos mtools no pueden acceder a los medios ya montados con el
comando mount.
Nombres de archivos y de directorios
Los nombres de archivos y de directorios en Linux responden a ciertas reglas de
escritura.
Descripcin del contenido
En primer lugar, un nombre de archivo debe proporcionar indicaciones sobre su
contenido; esto es vlido para todos los sistemas operativos.
Para un profesor, es ms fcil encontrar las notas de historia de la clase de 4 A del
primer trimestre de 2011 en el archivo llamado notas.historia.clase.4A.trim.1.2011 que
en el archivo llamado vale.
Sintaxis
La distincin de maysculas y minsculas es determinante en la sintaxis de los nombres
de archivos. As, los archivos vale, Vale y VALE son distintos.
Slo deben utilizarse los caracteres alfanumricos (de a a z, A a Z y 0 a 9) junto con
algunos ms (_, ., @, -, +) en los nombres de archivos.
Algunos caracteres tienen un significado especial en la lnea de comandos; stos se
detallarn en el captulo dedicado al Shell Bash. Por ejemplo, borrar a* no significa
borrar el archivo llamado a*, sino todos los archivos que empiezan por la letra a.

De hecho, pueden utilizarse todos los caracteres en los nombres de archivo exceptuando
/, que es el carcter de separacin de nombres de directorios en la lnea de comandos.
Los signos - y + deben evitarse al principio de un nombre de archivo porque puede
haber ambigedad con algunas opciones de la lnea de comandos. Por ejemplo, en la
lnea siguiente, -fic es un nombre de archivo pasado como argumento al comando, o se
trata de las opciones f, i y c?
$ ls -fic
Finalmente, el . (punto) no tiene un significado especial en un nombre de archivo,
excepto en la primera posicin, donde indica que ese archivo est oculto. La nica
particularidad de un archivo oculto es que no aparece de modo predeterminado en la
lista del directorio.

En Linux no existe la nocin de extensin determinante como en Windows. No es un
nombre terminado por .exe, .com o .bat lo que permite la ejecucin de un archivo, sino
los derechos que tiene asociados; los derechos se explican ms adelante en esta obra.
Longitud
La longitud mxima de un nombre de archivo (o de directorio) en Linux es de 255
caracteres.

Este lmite no presenta problemas, pero ciertas herramientas no aceptan rutas de archivo
(ver ms adelante) de tamao infinito. Es el caso del comando tar, para el que estas
rutas no pueden pasar de 1.024 caracteres.
Tipos de archivos
En Unix se entiende por archivo la estructura que contiene datos del usuario.
Los archivos estndar estn constituidos por una serie de caracteres o flujo de bytes
cuyo formato no viene impuesto por el sistema, sino por las aplicaciones.

La analoga entre byte y carcter se debe al hecho de que un carcter se codifica con un
byte; el tamao de un archivo puede indicarse, por tanto, tanto en bytes como en
caracteres.
Los directorios son archivos especiales que pueden contener otros muchos archivos
(directorios o no). Esto permite organizar los archivos de forma jerrquica en estructura
de rbol.

Los trminos "directorio" y "archivo", utilizados en Linux, son equivalentes a "carpeta"
y "documento" empleados habitualmente en Windows y Mac OS.
Existen siete tipos de archivos en Linux; los tres ms importantes son:
archivo estndar u ordinario;
directorio;
vnculo simblico o lgico (soft link).
Los otros cuatro tipos de archivo, que se trabajan principalmente en la administracin o
en programacin del sistema, son:
archivo que apunta a un dispositivo de tipo "bloque" (archivos presentes /dev);
archivo que apunta a un dispositivo de tipo "carcter" (archivos presentes en
/dev);
archivo de tubera llamado "named pipe" para la comunicacin entre procesos;
archivo "socket", como las tuberas con nombre, pero generalmente en un
contexto de red.
Los archivos se guardan y referencian en un sistema de archivos. Pueden tener varios
nombres (referencias) gracias a la propia estructura de los sistemas de archivos de Unix.
Rutas
Conocer el nombre de un archivo (o de un directorio) no es suficiente para acceder a l;
un mismo nombre puede estar asociado a varios archivos en directorios diferentes.
La referencia plenamente cualificada de un archivo se denomina "ruta" e indica el
directorio en el que se encuentra el archivo. Los nombres de directorios y de archivos
van separados por una / (barra oblicua) en las rutas.

Atencin, en un sistema Windows, el separador entre los nombres de archivo y de
directorios es el \ (barra inversa).
Existen tres tipos de rutas: absolutas, relativas y personales. Pueden utilizarse
indiferentemente en la forma de nombrar archivos en la lnea de comando.
Veamos un ejemplo de rbol:

1. Rutas absolutas
Una ruta absoluta se basa en la raz del rbol de Linux. Toda ruta absoluta empieza,
pues, por /.
Sea cual sea la ubicacin actual donde se encuentre, se podr referenciar el
archivo notes del ejemplo anterior con la ruta /home/willy/notas.
Por ejemplo:
[willy]$ ls /home/willy/notas
/home/willy/notas
2. Rutas relativas
Las rutas relativas dependen del directorio actual en el que se encuentra el usuario.
Sabiendo que cada directorio en el sistema contiene los archivos . (punto) y .. (punto-
punto) que referencian respectivamente el propio directorio actual y el directorio padre,
existen varias rutas relativas que designan el archivo notes en el ejemplo:
Para un mismo
directorio actual
(/home), existen
varias rutas posibles,
por absurdas que
sean; esta ltima
manera de definir la
ruta relativa al
archivo notas podr
emplearse en scripts shell concatenando diversas variables, por ejemplo.

Por comodidad, es posible suprimir el ./ al principio de una ruta relativa; as, la ruta
relativa notas equivale a ./notas.
Por ejemplo:
[willy]$ pwd
/home/willy
[willy]$ ls notas
notas
[willy]$ ls ./notas
./notas
[willy]$ ls ../willy/notas
../willy/notas
3. Rutas personales
Esta tercera forma de definir la ruta de un archivo se refiere al directorio personal de un
usuario; se emplea principalmente para acceder a los archivos presentes en los
subdirectorios de /home.
Una ruta personal empieza por el carcter ~ seguido del nombre del usuario que tiene
como directorio personal el directorio contenido en /home. Si no se especifica el nombre
del usuario, se usa implcitamente la identidad del usuario conectado.
Considerando que los usuarios gerardo, nicolas y willy tienen respectivamente como
directorio personal /home/gerardo, /home/nicolas y /home/willy, se obtendr:
Como gerardo:
[gerardo]$ whoami
gerardo
[gerardo]$ ls ~/archivo1
/home/gerardo/archivo1
[gerardo]$ ls ~willy/formas/tringulo
/home/willy/formas/tringulo
Directorio actual Ruta relativa correspondiente
/home willy/notas
/home/willy ./notas
/home/willy/colores ../notas
/ home/willy/notas
/home ../tmp/./../home/./willy/notas
Como nicolas:
[nicolas]$ whoami
nicolas
[nicolas]$ ls ~gerardo/archivo1
/home/gerardo/archivo1
[nicolas]$ ls ~willy/notas
/home/willy/notas
Como willy:
[willy]$ whoami
willy
[willy]$ ls ~/notas
/home/willy/notas
[willy]$ ls ~/colores/amarillo
/home/willy/colores/amarillo
[willy]$ ls ~gerardo/archivo1
/home/gerardo/archivo1
Condiciones generales de uso
Copyright - Editions ENI
Exploracin del rbol
1. pwd
El comando pwd (print working directory) muestra la ruta absoluta del directorio actual
en el que se encuentra el usuario:
[willy]$ pwd
/home/willy
2. cd
El comando cd (change directory) permite cambiar de directorio actual. En la lnea de
comandos, se indica como argumento junto con el directorio al que se quiere ir:
[willy]$ pwd
/home/willy
[willy]$ cd /var/spool
[willy]$ pwd
/var/spool
[willy]$ cd ..
[willy]$ pwd
/var

En este ejemplo el comando que permite "subir" hacia el directorio padre cd .. y no cd..
(sin espacio) como en DOS: el carcter de espacio es obligatorio entre el comando y su
argumento.

Adems, la ruta del archivo (o del directorio) como argumento puede ser absoluta,
relativa o personal; esto es vlido para todos los comandos.
Llamado sin argumentos, el comando cd devuelve al usuario a su directorio personal:
[willy]$ pwd
/var
[willy]$ whoami
willy
[willy]$ cd
[willy]$ pwd
/home/willy
Finalmente, la sintaxis particular siguiente permite volver al directorio anterior:
[willy]$ pwd
/home/willy
[willy]$ cd -
/var
[willy]$ pwd
/var

No hay que confundir el directorio "padre" (..), situado sobre el directorio actual en el
rbol de Linux, con el directorio "anterior", que corresponde al directorio en el que se
encontraba antes el usuario.
3. ls
El comando ls permite listar el contenido de directorios. Sin opciones, la
visualizacin sigue el orden alfabtico de los nombres de archivo.
Argumentos
Llamado sin argumentos, ls se limita a mostrar los archivos presentes en el directorio
actual:
[willy]$ cd
[willy]$ pwd
/home/willy
[willy]$ ls
colores formas notas
Puede especificarse una o ms rutas en la lnea de comandos. Si la ruta corresponde a un
directorio, se muestran los archivos que contiene; si es un archivo, se muestra su
nombre:
[willy]$ pwd
/home/willy
[willy]$ ls notas . colores /home/gerardo ~nicolas/novale
ls: /home/nicolas/novale: No such file or directory
notas

.:
colores formas notas

colores:
azul amarillo rojo

/home/gerardo:
archivo1
Cuando la ruta no corresponde a ningn archivo o directorio, el comando devuelve un
error.
Opcin -l
La opcin -l (long) produce una salida detallada con una parte de la informacin
contenida en el inodo de los archivos (vase seccin Organizacin fsica de los archivos
en Linux, ms adelante en este captulo):
[willy]$ ls -l
total 12
drwxr-xr-x 2 willy tec 4096 jun 1 10:42 colores
drwxr-xr-x 2 willy tec 4096 jun 1 10:43 formas
-rw-r--r-- 1 willy tec 62 may 26 22:55 notas
La primera lnea total 12 indica que la suma de los bloques de datos ocupados por los
archivos del directorio es igual a 12.
La informacin sobre el archivo notas en el directorio es:

El primer carcter indica el tipo de archivo; los valores posibles son (vase seccin
Tipos de archivos, en este captulo):
- archivo comn
d directorio (directory)
l enlace simblico (link)
b dispositivo de tipo "bloque"
c dispositivo de tipo "carcter"
p archivo intermedio o tubo con nombre (pipe)
s archivo "socket"
Los permisos de Linux sobre los archivos se detallan en un captulo posterior.
El nmero de referencias corresponde al nmero de nombres de archivo que apuntan al
mismo inodo.
El usuario y el grupo propietarios estn vinculados a los derechos y se abordarn ms
adelante.
El tamao del archivo se expresa en nmero de bytes. Corresponde a la cantidad real de
datos guardados en el archivo, y no al espacio en disco ocupado por el archivo en
nmero de bloques.
La fecha mostrada corresponde a la fecha de la ltima modificacin del archivo.
El nombre del archivo va al final de la lnea.
Otras opciones
La opcin -a (all) pide a ls que muestre tambin los archivos ocultos (cuyo nombre
empieza por un punto):
[willy]$ ls
colores formas notas
[willy]$ ls -a
. .. .bash_history .bash_profile .bashrc colores formas notas
-i (inodo) muestra, adems, el nmero de inodo de cada archivo.
[willy]$ ls -i
15874 colores 15882 formas 15880 notas
[willy]$ ls -i /bin/gzip /bin/gunzip
32837 /bin/gunzip 32837 /bin/gzip
/bin/gzip y /bin/gunzip son dos nombres posibles para un mismo archivo.

El concepto de inodo se detalla ms adelante en este captulo.
-R (recursivo) da una vista del rbol de un directorio recorriendo sus subdirectorios:
[willy]$ pwd
/home/willy
[willy]$ ls -R
.:
colores formas notas

./colores:
azul amarillo rojo

./formas:
crculo tringulo

El trmino "recursivo" proviene del tipo de algoritmo utilizado en los programas que
recorren datos estructurados jerrquicamente en forma de rbol.
-d muestra el directorio, y no su contenido. Resulta muy prctico en combinacin con la
opcin -l cuando se trata de mostrar las caractersticas de un directorio:
[willy]$ ls colores
azul amarillo rojo
[willy]$ ls -d colores
colores
[willy]$ ls -ld colores
drwxr-xr-x 2 willy tec 4096 jun 1 10:42 colores
La opcin -t ordena los archivos segn su fecha de ltima modificacin; el
ltimo archivo modificado en un directorio aparece el primero en la lista.
Finalmente, la opcin -r invierte el orden de visualizacin de los archivos.
Todas estas opciones pueden combinarse entre s para obtener la vista deseada. Por
ejemplo, puede resultar til ver de forma detallada los archivos del directorio /var/log
ordenados del ms antiguo al ms reciente. As se sabe el nombre y las caractersticas
del ltimo archivo de registro modificado:
[willy]$ ls -ltr /var/log
total 2480
drwxr-xr-x 2 root root 4096 Apr 25 2008 vbox
drwxr-xr-x 2 root root 4096 Apr 25 2008 isdn
-rw-r--r-- 1 root root 0 Mar 18 20:43 uucp.log
-rw-r--r-- 1 root root 0 Mar 18 20:43 user.log
drwxr-sr-x 2 news news 4096 Mar 18 20:43 news
-rw-r--r-- 1 root root 0 Mar 18 20:43 mail.warn
-rw-r--r-- 1 root root 0 Mar 18 20:43 mail.log
-rw-r--r-- 1 root root 0 Mar 18 20:43 mail.info
-rw-r--r-- 1 root root 0 Mar 18 20:43 mail.err
-rw-r--r-- 1 root root 0 Mar 18 22:06 lp-errs
-rw-r--r-- 1 root root 0 Mar 18 22:06 lp-acct
-rw-r--r-- 1 root root 41 Mar 18 22:06 lpr.log
-rw-r--r-- 1 root root 52261 Mar 18 23:09
installer.timings.1
-rw-r--r-- 1 root root 938374 Mar 18 23:09 installer.log.1
drwxrws--- 3 root adm 4096 Mar 18 23:21 webmin
-rw-r--r-- 1 root root 2927 Mar 19 15:27 aptitude
drwxr-xr-x 2 root root 4096 Mar 22 06:26 apache
-rw-r----- 1 root adm 465921 Mar 24 06:25 setuid.yesterday
drwxr-s--- 2 mail adm 4096 Mar 26 06:25 exim
-rw-r----- 1 root adm 465921 Mar 26 06:25 setuid.today
-rw-r----- 1 root adm 329 Mar 26 06:25 setuid.changes
-rw-r--r-- 1 root root 24024 Apr 3 01:04 faillog
-rw-r--r-- 1 root root 3818 Apr 3 02:17 daemon.log
drwxr-xr-x 2 root root 4096 Apr 27 08:23 ksymoops
-rw-r--r-- 1 root root 5463 Apr 27 08:23 dmesg
-rw-r--r-- 1 root root 86972 Apr 27 08:23 kern.log
-rw-r--r-- 1 root root 3393 Apr 27 08:23 debug
-rw-r--r-- 1 root root 98415 Apr 27 09:43 messages
-rw-rw-r-- 1 root utmp 292292 Apr 27 09:52 lastlog
-rw-rw-r-- 1 root utmp 131712 Apr 27 09:52 wtmp
-rw-r----- 1 root adm 41367 Apr 27 09:53 syslog
-rw-r----- 1 root adm 121593 Apr 27 09:53 auth.log
4. file
El comando ls -l permite obtener cierta informacin sobre los archivos listados, pero no
describe su contenido.
Dado que la nocin de extensin no existe en Linux, es arriesgado fiarse slo del
nombre del archivo para determinar su tipo de contenido.
El comando file muestra esta informacin:
[willy]$ file /etc/passwd /home /bin/ls
/etc/passwd: ISO-8859 text
/home: directory
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1
(SYSV),
for GNU/Linux 2.2.5, dynamically linked (uses shared libs), stripped
Para obtener estos resultados, el comando file compara el contenido de los archivos
pasados como argumentos con las descripciones indicadas en su base de datos. La base
de datos de file se encuentra en el archivo /usr/share/file/magic (ver pgina del manual
man 5 magic).
5. stat
Al igual que el comando ls -l, la herramienta stat muestra la informacin contenida en
el inodo de los archivos pasados como argumentos:
[willy]$ ls -ld /bin/ls /etc/passwd /tmp
-rwxr-xr-x 1 root root 82060 jan 26 19:38 /bin/ls
-rw-r--r-- 1 root root 1364 may 26 23:08 /etc/passwd
drwxrwxrwt 18 root root 4096 jun 1 10:53 /tmp
[willy]$ stat /bin/ls /etc/passwd /tmp
File: /bin/ls
Size: 82060 Blocks: 176 IO Block: 4096 archivo
regular
Device: 305h/773d Inodo: 32802 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2008-06-01 11:28:05.000000000 +0200
Modify: 2008-01-26 19:38:12.000000000 +0100
Change: 2008-05-26 07:43:30.000000000 +0200
File: /etc/passwd
Size: 1364 Blocks: 8 IO Block: 4096 archivo
regular
Device: 305h/773d Inodo: 557308 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/
root)
Access: 2008-06-01 11:28:15.000000000 +0200
Modify: 2008-05-26 23:08:54.000000000 +0200
Change: 2008-05-26 23:08:54.000000000 +0200

File: /tmp
Size: 4096 Blocks: 8 IO Block: 4096
directorio
Device: 305h/773d Inodo: 81921 Links: 18
Access: (1777/drwxrwxrwt) Uid: ( 0/ root) Gid: ( 0/
root)
Access: 2008-06-01 11:28:02.000000000 +0200
Modify: 2008-06-01 10:53:11.000000000 +0200
Change: 2008-06-01 10:53:11.000000000 +0200
La informacin mostrada es:
File Nombre del archivo.
Size Tamao real del contenido del archivo en nmero de bytes.
Blocks Nmero de bloques ocupados en el disco por el archivo.
IO Block
Tamao de un bloque de datos en bytes en la particin donde se
encuentra el archivo.
tipo de
archivo
(equivalente a los presentados por el comando ls -l).
Access Permiso de acceso al archivo.
Uid Identificador del usuario propietario del archivo.
Gid Identificador del grupo propietario del archivo.
Access Fecha de la ltima consulta del archivo.
Modify
Fecha de la ltima modificacin del contenido del archivo (es la
fecha mostrada con ls -l).
Change
Fecha de la ltima modificacin del inodo del archivo; al cambiar
los derechos asociados al archivo, por ejemplo.
Directorios
1. mkdir
El comando mkdir (make directory) permite crear directorios:
[willy]$ ls -l
total 12
drwxr-xr-x 2 willy tec 4096 jun 1 10:42 colores
drwxr-xr-x 2 willy tec 4096 jun 1 10:43 formas
-rw-r--r-- 1 willy tec 62 may 26 22:55 notas
[willy]$ mkdir flores
[willy]$ ls -l
total 16
drwxr-xr-x 2 willy tec 4096 jun 1 10:42 colores
drwxr-xr-x 2 willy tec 4096 jun 1 11:30 flores
drwxr-xr-x 2 willy tec 4096 jun 1 10:43 formas
-rw-r--r-- 1 willy tec 62 may 26 22:55 notas
Se pueden indicar varios argumentos en la lnea de comandos:
[willy]$ ls
colores flores formas notas
[willy]$ mkdir nombres flores/alegres
[willy]$ ls . flores
.:
colores flores formas nombres notas

flores:
alegres
Hay que agregar la opcin -p para crear una serie de directorios anidados:
[willy]$ mkdir -p estaciones/invierno/enero
[willy]$ ls -R
.:
colores flores formas nombres notas estaciones

./colores:
azul amarillo rojo

./flores:
alegres

./flores/alegres:

./formas:
crculo tringulo

./nombres:
./estaciones:
invierno

./estaciones/invierno:
enero

./estaciones/invierno/enero:
2. rmdir
rmdir (remove directory) permite borrar directorios. Como en el comando mkdir, la
opcin -p permite borrar una serie de directorios anidados.
La ejecucin de rmdir est sometida a condiciones:
El directorio que se quiere borrar debe estar vaco (slo incluye los nombres de
archivo . y ..);
El directorio que se quiere borrar o uno de sus subdirectorios no deben ser el
directorio actual del usuario (o de cualquier otro proceso); si es as, el usuario se
encuentra en una ubicacin indefinida donde ya no puede crear nuevos archivos
hasta el prximo cambio de directorio con el comando cd.
[willy]$ ls
colores flores formas nombres notas estaciones
[willy]$ rmdir nombres
[willy]$ ls
colores flores formas notas estaciones
[willy]$ rmdir -p estaciones/invierno/enero
[willy]$ ls
colores flores formas notas
[willy]$ rmdir flores
rmdir: flores: Directory not empty
[willy]$ rmdir flores/alegres
[willy]$ rmdir flores
[willy]$ ls
colores formas notas
Archivos
1. touch
El comando touch cambia las fechas del ltimo acceso y de la ltima modificacin de
un archivo existente:
[willy]$ ls -l notas
-rw-r--r-- 1 willy tec 62 may 26 22:55 notas
[willy]$ touch notas
[willy]$ ls -l notas
-rw-r--r-- 1 willy tec 62 jun 1 11:37 notas
Diversas opciones, detalladas en la pgina del manual electrnico (vase captulo
Documentacin - Manual), permiten precisar el nuevo fechado del archivo.
Cuando se emplea este comando con un nombre de archivo inexistente como
argumento, se crea un archivo con ese nombre que no contiene ningn dato:
[willy]$ ls -l
total 12
drwxr-xr-x 2 willy tec 4096 jun 1 10:42 colores
drwxr-xr-x 2 willy tec 4096 jun 1 10:43 formas
-rw-r--r-- 1 willy tec 62 jun 1 11:37 notas
[willy]$ touch nuevoarch
[willy]$ ls -l
total 12
drwxr-xr-x 2 willy tec 4096 jun 1 10:42 colores
drwxr-xr-x 2 willy tec 4096 jun 1 10:43 formas
-rw-r--r-- 1 willy tec 62 jun 1 11:37 notas
-rw-r--r-- 1 willy tec 0 jun 1 11:38 nuevoarch
2. cp
La copia de archivos se efecta con el programa cp; la sintaxis principal de este
comando es:
cp [-R] <origen ...> <destino>
Se puede copiar un archivo normal en un nuevo directorio o con un nuevo nombre, o
ambas cosas a la vez; por ejemplo:
[willy]$ ls -R
.:
colores formas notas nuevoarch

./colores:
azul amarillo rojo

./formas:
crculo tringulo
[willy]$ cp notas minota
[willy]$ cp colores/amarillo formas
[willy]$ cp formas/tringulo curva
[willy]$ ls -R
.:
colores curva formas rombo notas nuevoarch

./colores:
azul amarillo rojo

./formas:
amarillo crculo tringulo

Atencin: segn la configuracin del sistema (alias predefinidos), la destruccin de un
archivo existente en una copia no genera ni error, ni mensaje de alerta.
cp permite la copia de varios archivos al mismo tiempo. En este caso, el destino es
obligatoriamente un directorio:
[willy]$ cp notas minota formas
[willy]$ ls -R
.:
colores curva formas rombo notas nuevoarch

./colores:
azul amarillo rojo

./formas:
amarillo rombo notas crculo tringulo
Finalmente, la opcin -R (recursivo) permite especificar un directorio como argumento
de origen; sin ste, cp ignora los directorios durante la copia:
[willy]$ cp notas formas colores
cp: omisin del directorio `formas
[willy]$ ls -R
.:
colores curva formas rombo notas nuevoarch

./colores:
azul amarillo notas rojo

./formas:
amarillo rombo notas crculo tringulo
[willy]$ cp -R formas colores
[willy]$ ls -R colores

colores:
azul formas amarillo notas rojo

colores/formas:
amarillo rombo notas crculo tringulo
Otras opciones
La opcin -i (o --interactive) pregunta al usuario antes de destruir un archivo ya
existente. Por el contrario, la opcin -f (o --force) destruye los archivos de destino sin
preguntar nada. Si ambas opciones se emplean a la vez, cp destruye los archivos de
destino sin preguntar al usuario.
willy]$ ls notas colores
notas

colores:
azul formas amarillo notas rojo
[willy]$ cp notas colores
[willy]$ cp -i notas colores
cp: destruir colores/notas?s
[willy]$ cp -if notas colores
-d (o --no-dereference) permite copiar los enlaces como tales en lugar de copiar los
archivos a los que apuntan.
Con la opcin -p (o --preserve), la copia conserva el propietario, el grupo, los derechos
de acceso y el fechado del archivo original. Esto slo vale si el usuario est conectado
como administrador (root).
[willy]$ ls -l notas
-rw-r--r-- 1 willy tec 62 jun 1 11:37 notas
[willy]$ cp notas notas.2
[willy]$ ls -l notas notas.2
-rw-r--r-- 1 willy tec 62 jun 1 11:37 notas
-rw-r--r-- 1 willy tec 62 jun 1 12:06 notas.2
[willy]$ cp -p notas notas.3
[willy]$ ls -l notas notas.2 notas.3
-rw-r--r-- 1 willy tec 62 jun 1 11:37 notas
-rw-r--r-- 1 willy tec 62 jun 1 12:06 notas.2
-rw-r--r-- 1 willy tec 62 jun 1 11:37 notas.3
Finalmente, la opcin -a (o --archive) equivale a las opciones -dpR. La usa
bsicamente el administrador para guardar directorios de forma idntica.
3. rm
El comando rm (remove) borra los archivos pasados como argumento. Esta eliminacin
es definitiva. No hay ningn mecanismo de papelera implementado de modo
predeterminado en Linux.
[willy]$ ls -R
.:
colores curva formas rombo notas notas.2 notas.3 nuevoarch

./colores:
azul formas amarillo notas rojo

./colores/formas:
amarillo rombo notas crculo tringulo

./formas:
amarillo rombo notas crculo tringulo
[willy]$ rm notas.2 notas.3 nuevoarch colores/notas formas/notas
[willy]$ ls -R

colores curva formas rombo notas
./colores:
azul formas amarillo rojo

./colores/formas:
amarillo rombo notas crculo tringulo

./formas:
amarillo rombo crculo tringulo
A la manera de cp, el comando rm requiere la opcin -R (o -r) para el borrado de
directorios:
[willy]$ ls -l colores
total 16
-rw-r--r-- 1 willy tec 30 jun 1 10:42 azul
drwxr-xr-x 2 willy tec 4096 jun 1 12:03 formas
-rw-r--r-- 1 willy tec 172 jun 1 10:42 amarillo
-rw-r--r-- 1 willy tec 54 jun 1 10:42 rojo
[willy]$ rm colores/formas
rm: no se puede borrar colores/formas: Is a directory
[willy]$ rm -R colores/formas
[willy]$ ls -l colores
total 12
-rw-r--r-- 1 willy tec 30 jun 1 10:42 azul
-rw-r--r-- 1 willy tec 172 jun 1 10:42 amarillo
-rw-r--r-- 1 willy tec 54 jun 1 10:42 rojo

As, ahora es posible borrar directorios no vacos; esto no ocurrira con el comando
rmdir visto anteriormente.
Opciones
Como en el comando cp, existen las opciones -i (--interactive) y -f (--force) que
permiten respectivamente preguntar o no al usuario al borrar archivos y directorios.
4. mv
El comando mv (move) permite mover y renombrar archivos o directorios.

A diferencia de cp y rm,este comando puede tratar directorios sin opciones
suplementarias.
La sintaxis de este comando es:
mv <origen ...> <destino>
El origen puede ser tanto un archivo normal como un directorio; este archivo:
Se mueve al directorio de destino si existe.
Se renombra con el nombre del destino si no existe.
Destruye el archivo de destino si existe.
[willy]$ ls -R
.:
colores curva formas rombo notas

./colores:
azul amarillo rojo

./formas:
amarillo rombo crculo tringulo
[willy]$ mv rombo cuadrado
[willy]$ mv notas colores/verde
[willy]$ mv formas/amarillo colores
[willy]$ ls -R
.:
cuadrado colores curva formas

./colores:
azul amarillo rojo verde

./formas:
rombo crculo tringulo
Cuando hay varios archivos o directorios origen, el destino es el directorio que los
acoger:
[willy]$ mv cuadrado curva formas
[willy]$ ls -R
.:
colores formas

./colores:
azul amarillo rojo verde

./formas:
cuadrado curva rombo crculo tringulo
Una vez ms, las opciones -i (--interactive) y -f (--force) permiten preguntar o no al
usuario al destruir archivos.
Organizacin fsica de los archivos en
Linux
Aunque esta etapa parezca precipitada para una aproximacin de tipo "usuario" a Linux,
el aprendizaje de la organizacin fsica de los sistemas de archivos es primordial.
Permite una correcta comprensin de la nocin de enlaces y una buena gestin de los
derechos de acceso.
1. Inodos y bloques de datos
Un sistema de archivos fsico puede separarse en dos partes distintas:
la tabla de inodos;
los bloques de datos.
Todo archivo est constituido por un inodo con la informacin relativa al archivo y un
cierto nmero de bloques de datos con los datos del usuario almacenados en el archivo.
Inodos
Cada archivo se representa por una estructura llamada inodo (ndex node). Estos inodos
se agrupan en una tabla y se identifican por un nmero.
El inodo contiene toda la informacin sobre el archivo, salvo su nombre:
Tipo de archivo: - (normal), d (directorio), l (enlace simblico), b (bloque), c
(carcter), p (tubo), s (socket).
Modo o derechos de acceso al archivo.
Nmero de enlaces fsicos (hard links): corresponde al nmero de referencias, es
decir, al nmero de nombres para este mismo archivo.
UID o identificador del usuario propietario.
GID o identificador del grupo propietario.
Tamao del archivo en nmero de bytes.
Fechas de la ltima consulta, modificacin del contenido y modificacin del
inodo del archivo.
Direcciones que apuntan a los bloques de datos que constituyen el archivo.
Veamos un ejemplo de archivo de cada tipo:
[gerardo]$ ls -ld /etc/motd /lib /dev/hda /dev/null /etc/rc.local
/dev/
initctl /dev/log
-rw-r--r-- 1 root root 0 jan 13 2008 /etc/motd
drwxr-xr-x 7 root root 3072 nov 1 06:29 /lib
brw-rw---- 1 root disk 3, 0 aug 31 01:31 /dev/hda
crw-rw-rw- 1 root root 1, 3 aug 31 01:31 /dev/null
lrwxrwxrwx 1 root root 13 nov 1 05:56 /etc/rc.local
-> rc.d/rc.local
prw------- 1 root root 0 nov 12 05:30 /dev/initctl
srw-rw-rw- 1 root root 0 nov 12 05:32 /dev/log
Bloques de datos
Los datos reales de los archivos se guardan en los bloques de datos.
En el caso de un archivo directorio, los datos guardados pueden representarse como una
tabla que establece la correspondencia entre los nombres de los archivos contenidos en
el directorio y sus nmeros de inodos.
Por ejemplo:
[gerardo]$ ls -ali
total 3
12378 drwxr-xr-x 2 root root 1024 nov 13 03:15 .
32641 drwxr-x--- 4 root root 1024 nov 13 03:13 ..
14455 -rw-r--r-- 2 root root 30 nov 13 03:14 archivo1
$ cat archivo1
texto contenido en el archivo
Puede representarse por:

El nombre de un archivo se guarda en los datos del directorio, y no en su inodo, por lo
que es fcil dar varios nombres (referencias o enlaces duros) al mismo archivo.
La adicin de un nuevo nombre a un archivo se hace mediante:
ln [-s] <nombre del archivo> <nombre suplementario>
Sin la opcin -s, este comando crear un enlace duro (hard link), mientras que con la
opcin -s, crear un enlace simblico (soft link):
[gerardo]$ ln archivo1 archivo2
[gerardo]$ cat archivo2
texto contenido en el archivo
[gerardo]$ ln -s archivo1 archivo3
[gerardo]$ ls -ali
total 4
12378 drwxr-xr-x 2 root root 1024 nov 13 03:15 .
32641 drwxr-x--- 4 root root 1024 nov 13 03:13 ..
14455 -rw-r--r-- 2 root root 30 nov 13 03:14 archivo1
14455 -rw-r--r-- 2 root root 30 nov 13 03:14 archivo2
16214 lrwxrwxrwx 1 root root 30 nov 13 03:15 archivo3 ->
archivo1

Un enlace duro es una segunda entrada que apunta al mismo inodo, mientras que el
enlace simblico es un archivo especial (tipo l) con la ruta del archivo al que apunta;
este ltimo equivale a los "accesos directos" de los sistemas Microsoft Windows.
Condiciones generales de uso
Copyright - Editions ENI
Administradores de archivos
Existen en Linux muchas herramientas que agrupan de forma ms o menos ergonmica
y amigable todas las funcionalidades implementadas por los comandos enunciados hasta
ahora.
1. Midnight Commander
Midnight Commander se llama con el comando mc en la lnea de comandos. Es un
administrador de archivos completo en un entorno de texto con una interfaz de usuario
de un producto similar existente en DOS.
Veamos un ejemplo de presentacin:

La tecla [Tab] permite pasar de una mitad de la pantalla a la otra (izquierda-derecha),
mientras que las teclas de funcin [F1] a [F10] invocan los comandos indicados en la
parte inferior de la pantalla.
2. Konqueror, Nautilus
En la consola grfica, los administradores de archivos ms extendidos son Konqueror y
su substituto Dolphin y Nautilus.
La eleccin de la herramienta es subjetiva y depende generalmente de la distribucin y
el entorno de escritorio utilizados.
Una ventana de Dolphin:

Una vista posible de Nautilus:

Consultar archivos
1. cat
cat muestra en la pantalla el contenido de los archivos pasados como argumento en la
lnea de comandos:
[nicolas]$ cat /etc/motd
Bienvenido a Linux
Est conectado al equipo doe.reso.local
2. more, less
El comando Unix more tambin permite la presentacin del contenido de archivos de
texto en pantalla. Sin embargo, su visualizacin se hace pgina por pgina; las teclas
tiles con more son:
[Intro] Desplaza el texto lnea a lnea.
[Espacio] Desplaza el texto pgina por pgina.
[q] Sale del programa.
Este ejemplo muestra el indicador presente en la parte inferior de la pantalla:
[nicolas]$ more /etc/services
ssh 22/udp # SSH Remote Login Protocol
telnet 23/tcp
telnet 23/udp
# 24 - private mail system
smtp 25/tcp mail
smtp 25/udp mail
time 37/tcp timserver
time 37/udp timserver
rlp 39/tcp resource # resource location
rlp 39/udp resource # resource location
nameserver 42/tcp name # IEN 116
nameserver 42/udp name # IEN 116
nicname 43/tcp whois
nicname 43/udp whois
tacacs 49/tcp # Login Host Protocol
(TACACS)
tacacs 49/udp # Login Host Protocol
(TACACS)
re-mail-ck 50/tcp # Remote Mail Checking
Protocol
re-mail-ck 50/udp # Remote Mail Checking
Protocol
domain 53/tcp # name-domain server
domain 53/udp
whois++ 63/tcp
--Sigue--(10%)
Existe en Linux un comando similar, ms evolucionado que more, llamado less.
Adems de las teclas anteriores, acepta tambin:
[Arriba] Sube una lnea.
[Abajo] Baja una lnea.
[Re pg] Sube una pgina.
[Av pg] Baja una pgina.
Finalmente, el comando less tiene las mismas funciones de bsqueda de cadenas que el
editor Vi descrito en el captulo Edicin de archivos de texto - Vi.

El uso de los comandos more y less se adapta bien a la presentacin de archivos de
texto largos.
3. od, strings
El comando od (octal dump) muestra el contenido de un archivo en octal o en otros
formatos segn las opciones; la opcin -x produce una salida hexadecimal, por ejemplo:
[nicolas]$ cat /etc/motd
Bienvenido a Linux
Est conectado al equipo doe.reso.local
[nicolas]$ od /etc/motd

0000000 064502 067145 062566 072556 020145 067563 071565 046040
0000020 067151 074165 053012 072557 020163 072352 071545 061440
0000040 067157 062556 072143 020351 072563 020162 060554 066440
0000060 061541 064550 062556 062040 062557 071056 071545 027157
0000100 067554 060543 005154
0000106
[nicolas]$ od -x /etc/motd
0000000 6942 6e65 6576 756e 2065 6f73 7375 4c20
0000020 6e69 7875 560a 756f 2073 74ea 7365 6320
0000040 6e6f 656e 7463 20e9 7573 2072 616c 6d20
0000060 6361 6968 656e 6420 656f 722e 7365 2e6f
0000100 6f6c 6163 0a6c
0000106

Este tipo de presentacin lo usan principalmente los programadores para examinar el
contenido de archivos binarios.
Del mismo estilo, el comando strings muestra las cadenas de caracteres legibles
contenidas en los archivos binarios; esto puede resultar til para un programador o un
administrador del sistema en caso de depuracin:
[nicolas]$ strings /bin/ls
/lib/ld-linux.so.2
libtermcap.so.2
_DYNAMIC
_init
tgetent
_fini
_GLOBAL_OFFSET_TABLE_
_Jv_RegisterClasses
tgetstr
...
ntroduccin
Sea cual sea el sistema operativo utilizado, es indispensable saber editar archivos de
texto. Esto es mucho ms cierto an en Linux, pues la inmensa mayora de los archivos
de configuracin y de scripts del shell estn en este formato, sin olvidar tambin los
archivos de log.

Se entiende por archivo de texto un archivo que contiene datos en forma de caracteres
ASCII (American Standard Code for Information Interchange), es decir, texto sin
formato, ni siquiera la nocin de tipo de letra.
Desde el simple comando ed que permite editar lnea por lnea un archivo de texto,
hasta la herramienta nedit con interfaz grfica que propone el coloreado sintctico de
diferentes formatos de archivo, existe un gran nmero de editores en Linux.
A pesar de una interfaz poco ergonmica (pero sin embargo muy potente), el editor de
Vi, se ha convertido en un estndar en todos los sistemas UNIX, y es el que
presentaremos en este captulo.

Actualmente, se utiliza una variante de Vi, normalmente Vim (Vi IMproved). Sin
embargo, los comandos que veremos aqu son idnticos
Presentacin de Vi
Vi, que significa "VIsual editor" y se pronuncia "vi-ei" (o [vi:ai]), es un editor a pantalla
completa con lnea de comandos.
Pensado para trabajar en cualquier tipo de terminal (y por lo tanto con cualquier
teclado), esta herramienta puede funcionar utilizando nicamente las teclas
alfanumricas bsicas, adems de la tecla de escape del teclado.
En un teclado de PC espaol "qwerty" actual, podramos limitarnos a utilizar las teclas
blancas siguientes:


Es posible utilizar las teclas grises del teclado, como las flechas de direccin o el
teclado numrico, pero es preferible saber manipular vim sin estas teclas al principio.
As, sea cual sea la configuracin del terminal o la variante de vi - empleada, la edicin
de un archivo en Linux no presentar problemas.
1. Inicio de Vi
Basta con escribir el comando vi para iniciar el editor Vi. En este caso, se abre el editor,
listo para escribir un nuevo archivo:
_
~
~
~
~
~ VIM - Vi
~
~ Improved
~
~ versin 7.3.712
~ by Bram Moolenaar et
al.
~ Modified by <bugzilla@redhat.com>
~ Vim is open source and freely
distributable
~
~ Sponsor Vim development!
~ type :help sponsor<Enter> for information
~ type :q<Enter> to exit
~ type :help<Enter> or <F1> for on-line help
~ type :help version7<Enter> for version info
~
~
~
~
~
Aqu, el cursor se encuentra arriba a la izquierda de la pantalla y se muestra un texto de
bienvenida; ste no interfiere con el texto del nuevo archivo y se ocultar
automticamente con el primer comando de edicin.
La ltima lnea de la vista se reserva a mostrar informacin diversa (posicin del cursor,
nmero de lnea, modo de funcionamiento...) y a los comandos en modo "ex" que se
detallarn ms adelante.

El carcter ~ al principio de lnea significa que no hay ningn carcter -ni siquiera un
retorno de carro (tecla [Intro])- en la lnea, es decir, que se ha llegado al final del
archivo.
Tambin puede editarse un archivo existente especificando su nombre como argumento
en la lnea de comando:
$ vi archivo
Finalmente, si el argumento pasado es un nombre de archivo inexistente, el nuevo
archivo editado se guardar con este nombre predeterminado:
$ vi nuevo_archivo

Para salir del editor Vi sin haber ledo el resto del captulo, hay que escribir la siguiente
secuencia de teclas: [Esc], [:], [q], [!], [Intro].
2. Modos de funcionamiento
Vi dispone de tres modos de funcionamiento:
Modo "comandos": en este modo, cada pulsacin de una tecla o una
combinacin de teclas se interpreta como un comando (mover el cursor, edicin
del texto...).
Modo "insercin" o "edicin": en este modo, los caracteres pulsados en el
teclado se insertan tal cual en el archivo.
Modo "inferior de la pantalla", "ex" o "global": este modo permite ordenar a Vi
la ejecucin de comandos complejos (mostrados a medida que se escriben en la
parte inferior de la pantalla). Los comandos pasados en este modo afectan a todo
el archivo o al propio editor; por ejemplo, buscar o reemplazar cadenas de
caracteres, guardar el archivo modificado, configurar opciones del editor.
En todo momento, el usuario se encuentra en uno de estos modos y la tecla [Esc]
permite volver al modo "comandos" (o permanecer en l):

Al abrir el editor, el usuario se encuentra en el modo "comandos".
3. Comandos de desplazamiento
Vi funciona perfectamente sin usar las flechas del teclado; para ello, se han
definido diversos comandos que permiten desplazarse dentro de un archivo. Para su
ejecucin, todos estos comandos deben escribirse en el modo "comandos" de Vi.

En principio, el desplazamiento del cursor a la izquierda, abajo, arriba y a la derecha se
realiza con los comandos h, j, k y l.
Es fcil recordar estas teclas: estn dispuestas de forma adyacente en el teclado:
La [h] es a la izquierda: permite mover el cursor un carcter a la izquierda.
La [l] es a la derecha: permite mover el cursor un carcter a la derecha.
La [j] es una letra "descendente": permite mover el cursor una lnea hacia abajo.
La [k] es una letra "ascendente": permite mover el cursor una lnea hacia arriba.
Movimiento en la misma lnea
Los principales comandos de desplazamiento del cursor en una misma lnea son:
[0]: mueve el cursor a principio de lnea (al primer carcter).
[$]: mueve el cursor a fin de lnea (al ltimo carcter).
[w] y [W] (word): mueve el cursor al primer carcter de la palabra siguiente. El
comando w (minscula) difiere de W (mayscula) slo en la nocin de
"palabra"; en el primer caso, todo carcter no alfanumrico es un separador,
mientras que en el segundo caso, slo los caracteres de espacio (espacio,
tabulacin y salto de lnea) separan las palabras.
[b] y [B] (back): mueve el cursor al primer carcter de la palabra anterior. La
distincin entre b y B es la misma que entre w y W.
[e] y [E] (end): mueve el cursor al ltimo carcter de la palabra siguiente. De
nuevo, la diferencia entre e y E afecta a la definicin de los caracteres de
separacin de palabras.

Estos tres ltimos comandos (w, b y e) con sus contrapartes en maysculas (W, B y E)
muestran que existe una cierta lgica en los comandos de Vi. Normalmente, los
comandos en maysculas extienden las funciones de los comandos en minsculas. Los
trminos mnemotcnicos se presentan entre parntesis.
Movimientos de cambio de lnea
Adems de las teclas [j] y [k], que permiten mover el cursor a la lnea siguiente o
anterior, existen principalmente:
[G]: mueve el cursor al primer carcter de la ltima lnea del archivo.
[nG] (donde n es un nmero): mueve el cursor al primer carcter de la lnea
nmero n. Por ejemplo, 6G coloca el cursor en el primer carcter de la sexta
lnea y 1G lo lleva al principio del archivo.

El comando G puede llevar como prefijo un nmero; otros muchos comandos de Vi
aceptan un "multiplicador" as. Por ejemplo, 3j mueve el cursor tres lneas hacia abajo y
2w mueve el cursor a la primera letra de la segunda palabra siguiente.
Existen otros muchos comandos de movimiento, como:
[Ctrl]+[b]
Mueve el cursor (y la visualizacin) una pgina hacia arriba (pgina
anterior).
[Ctrl]+[f]
Mueve el cursor (y la visualizacin) una pgina hacia abajo (pgina
siguiente).
4. Comandos de insercin
A partir del modo "comandos" en el que el usuario se encuentra de modo
predeterminado, no es posible escribir texto. En efecto, no se puede insertar
directamente el texto "hello world" en un archivo: las pulsaciones de las teclas [h], [e],
[l] y siguientes corresponden a comandos ya parcialmente presentados.
Hay que pasar al modo "insercin" para escribir texto; se entra en este modo con
diferentes comandos escritos en el modo "comandos"; los principales son:
i (insert): pasa al modo "insercin"; los nuevos caracteres pulsados se insertan
delante del cursor. No es posible, con este comando, escribir texto al final de la
lnea porque se inserta obligatoriamente delante del ltimo carcter sobre el que
se encuentra el cursor.
a (append): pasa al modo "insercin"; los nuevos caracteres escritos se insertan
tras el cursor; en este caso, es posible escribir texto al final de la lnea.
o (abrir una lnea): "abre" una nueva lnea bajo el cursor y pasa al modo
"insercin".

Como ocurre con ciertos comandos de desplazamiento, los comandos anteriores se
amplan cuando se escriben en mayscula:
I Mueve el cursor al principio de lnea y pasa al modo "insercin".
A Mueve el cursor al fin de lnea y pasa al modo "insercin".
O "Abre" una nueva lnea encima del cursor y pasa al modo "insercin".

Hemos visto anteriormente que la tecla [Esc] permita, en cualquier momento, volver al
modo "comandos".
5. Comandos de edicin y de correccin
Al no disponer de las teclas [Supr] y [Retroceso] del teclado, no es posible con la
versin original de Vi corregir los errores de escritura durante la insercin. Los
comandos de edicin y de correccin se ejecutan a partir del modo "comandos" y no
pueden usarse en modo "insercin".

Vim, que se utiliza en Linux, soporta sin problemas la correccin durante la
insercin mediante las teclas [Supr] y [Retroceso] del teclado.

Borrar caracteres
La supresin del carcter situado bajo el cursor se efecta mediante el comando x. El
carcter que antecede al cursor, por su parte, se borra con X.
Una serie de comandos que empiezan por d (delete) permite borrar todo o parte de una
lnea:
dd Borra toda la lnea.
d0 Borra desde el cursor hasta el principio de la lnea.
d$ Borra desde el cursor hasta el fin de la lnea.
dw
Borra desde el cursor hasta el principio de la palabra siguiente. De hecho,
se puede combinar los comandos de desplazamiento que hemos visto
anteriormente con d; por ejemplo dW, db, dE...
La cadena de caracteres borrada por un comando que empiece por d se guarda en una
memoria intermedia o "bfer" (equivalente al portapapeles de Windows). El texto
contenido en esta memoria intermedia puede "pegarse" tras el cursor mediante el
comando p (paste) o delante del cursor con P.

Los comandos de supresin y los comandos siguientes de edicin aceptan -como los
comandos de desplazamiento- un multiplicador como prefijo.
Copiar texto
Al igual que los comandos que empiezan por d permiten "cortar" texto, los
comandos que empiezan por y "copian" una cadena de caracteres en la memoria
intermedia de Vi. De nuevo, el contenido de esta memoria intermedia puede "pegarse"
con los comandos p y P.
Los comandos "y" se asocian a los comandos de desplazamiento vistos anteriormente;
por ejemplo:
yy Copia toda la lnea.
y0 Copia del cursor al principio de la lnea.
y$ Copia del cursor al final de la lnea.

El contenido de la memoria intermedia se conserva mientras no se ejecute ningn nuevo
comando "y" o "d" .
Anular y repetir
El comando u anula el comando anterior. Vim (y no Vi) permite la anulacin sucesiva
de todas las modificaciones realizadas en el archivo hasta la ltima vez que se guard.
El comando U anula de golpe todas las modificaciones aportadas a la lnea actual.
Por el contrario, el comando . (punto) repite el ltimo comando ejecutado en Vi excepto
un desplazamiento o una anulacin.
6. Comandos globales
El tercer modo de funcionamiento de Vi, llamado "ex" en el esquema, permite ejecutar
comandos relativos a todo el archivo.
Un comando global empieza por [:], [/] o [?] (los dos ltimos caracteres en el caso de
una bsqueda) y se valida con la tecla [Intro]. Para anular un comando "ex" y volver de
inmediato al modo "comandos", basta pulsar la tecla [Esc].

Guardar y salir
Los comandos para guardar y salir de Vi son:
:w
Guarda en el archivo existente (cuyo nombre ya se ha
definido).
:w archivo Guarda en el archivo cuyo nombre es archivo.
:w!
Fuerza la grabacin si el usuario no tiene el derecho de
modificar el archivo; ste debe, sin embargo, pertenecer al
usuario (vase chmod y los derechos de acceso en el captulo
Permisos de acceso a los archivos).
:q
Sale del editor Vi salvo si se han hecho cambios no guardados
en el archivo.
:q! Fuerza la detencin de Vi sin guardar los cambios.
:wq, :x o ZZ
(en modo
"comandos")
Guarda el archivo y sale del editor.
Buscar
En Vi, hay dos maneras de iniciar una bsqueda de cadena de caracteres: con el carcter
[/] para una bsqueda desde el cursor hasta el fin del archivo, o con el carcter [?] para
una bsqueda desde el cursor hasta el principio del archivo.
La bsqueda se efecta sobre la cadena de caracteres escrita en la parte inferior de la
pantalla con el / o el ?:
/modelo o ?modelo.
Por ejemplo, tras la validacin, /vale colocar el cursor en la primera instancia de la
cadena de caracteres "vale" encontrada tras la posicin actual del cursor.

El modelo indicado tras el / o el ? puede tomar la forma de una expresin regular para
efectuar bsquedas ms evolucionadas. Las expresiones regulares se abordarn con el
comando grep ms adelante en esta obra.
De nuevo en modo "comandos", n (next) coloca el cursor sobre la siguiente instancia (el
sentido depende de la forma como se haya iniciado la bsqueda: / o ?) de la ltima
cadena buscada; N permite volver a la instancia anterior.
Buscar y reemplazar
La sintaxis general del comando de sustitucin en Vi es:
:[rango]s/modelo/cadena/[g][i][I]

En realidad, el comando de sustitucin de Vi es ms complejo. Aqu slo se presentan
las funcionalidades ms interesantes.
[rango] es optativo e indica en qu lneas del archivo realizar el reemplazo; su sintaxis
es n,m donde n es el nmero de la primera lnea considerada y m es el de la ltima lnea
del rango; el carcter $ permite indicar la ltima lnea del archivo. As, para realizar una
sustitucin en todas las lneas del archivo (de la primera a la ltima lnea), el rango ser
1,$.
modelo representa la cadena de caracteres que ser reemplazada por la cadena de
caracteres cadena.

Si el modelo o la cadena de reemplazo presentan en su interior el carcter /, ste deber
ir prefijado con un \ para evitar toda ambigedad en la sintaxis.
Los tres parmetros siguientes son opcionales:
g
Indica que la sustitucin se realiza en todas las instancias de la lnea tratada;
sin este parmetro, slo la primera instancia del modelo se cambiar en cada
lnea.
i
Precisa que la caja del modelo (maysculas/minsculas) se ignora en la
bsqueda. En este caso, la cadena "vale" se considera como equivalente de la
cadena "vALe".
I
Especifica que la caja del modelo (maysculas/minsculas) se respeta en la
bsqueda. En este caso, la cadena "vale" es diferente de la cadena "vALe".
Este parmetro est activo de modo predeterminado.
Para resumir, la sustitucin global en todo el archivo de la cadena "vale" por la cadena
"pif" se realizar con:
:1,$s/vale/pif/g
Comandos externos
Otra particularidad del editor Vi es permitir la ejecucin de comandos externos, es
decir, de comandos de shell, sin tener que salir del programa.
Para ello, una vez en modo "ex" llamado con :, basta con escribir un comando del shell
precedido del carcter !, esto da, por ejemplo, en la parte inferior de la pantalla:
[nicolas]$ cal 6 2008
junio de 2008
do lu ma mi ju vi s
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

Pulsar enter y teclear un comando para seguir
Se pide una nueva pulsacin de la tecla [Intro] para volver al editor cuando el comando
de shell ha terminado.
Para insertar el resultado del comando externo en el archivo editado, hay que llamar al
comando r antes de ejecutar el comando del shell, por ejemplo:
:r!date
La fecha devuelta por el comando date del shell se inserta en el texto tras el cursor.
Opciones del editor
:set slo devuelve las opciones de configuracin actuales del editor, mientras que :set
all muestra todas las opciones disponibles.
Algunas de estas opciones se activan escribiendo :set seguido del nombre de la opcin y
se desactivan precediendo con no el nombre de esta opcin. Por ejemplo, para activar la
opcin que muestra los nmeros de lnea:
:set number
Y para desactivar esta misma opcin:
:set nonumber
El segundo tipo de opciones est asociado a un nmero o a una cadena de
caracteres. Para asignar un valor a una de estas opciones, se usa la sintaxis
siguiente: :set opcin=valor
Por ejemplo, para fijar la anchura visible de una tabulacin en cuatro espacios:
:set tabstop=4
Existen muchas opciones configurables en Vim, como:
[no]autoindent [Des]Activa el sangrado automtico de las lneas al escribir.
[no]number [Des]Activa la numeracin de lneas.
[no]list [Des]Activa la presentacin de los caracteres no imprimibles.
[no]showmode
[Des]Activa la presentacin del modo actual en la parte
inferior de la pantalla.
tabstop=n Define el tamao de una tabulacin a n espacios.
[no]ignorecase
[Des]Activa la distincin de la caja de los caracteres en las
bsquedas y sustituciones.
7. Archivo de configuracin personal
Para que las opciones especificadas en Vi se tengan en cuenta cada vez que arranca el
editor, hay que escribirlas en un archivo de configuracin.
Cada usuario tiene su propio archivo de configuracin, que se encuentra en el directorio
personal del usuario y se llama .exrc (EX Run Commands) o .vimrc en el caso del editor
Vim.
Este archivo contiene las opciones tal como se definen en el editor sin el primer :; por
ejemplo, el usuario linus que quiere numerar las lneas y tener tabulaciones visibles con
cuatro espacios cada vez que inicie Vi, crear el archivo siguiente:
[linus]$ cat /home/linus/.exrc
set number
set tabstop=4
8. Otros comandos tiles
En Vim hay otros muchos comandos tiles; veamos algunos de ellos:
:help
comandoVim
Muestra la ayuda correspondiente al comando Vim pasado
como argumento.
:r archivo
Inserta el contenido del archivo pasado como argumento en el
texto.
J Une la lnea actual a la siguiente.
~
Cambia la caja (maysculas/minsculas) del carcter bajo el
cursor.
rc Reemplaza el carcter bajo el cursor por c.
cw, c$, c0, ...
Reemplaza el cursor hasta el principio de la palabra siguiente,
hasta el fin de lnea o hasta el principio de la lnea, y pasa el
modo "insercin".
>> Inserta una tabulacin al principio de lnea.
<< Suprime una tabulacin presente al principio de lnea.
Otras herramientas de edicin
Las distribuciones de Linux incluyen generalmente una multitud de editores de texto,
editores hexadecimales (para los archivos binarios, por ejemplo) y tratamientos de texto
(maquetacin de documentos).
1. Otros editores de texto
Veamos algunas herramientas suplementarias para la edicin de archivos de texto.
Emacs, XEmacs
Emacs (comando emacs) es un editor que funciona en una consola de texto desarrollado
por Richard Stallman. Ms all de la edicin de archivos de texto, dispone un gran
nmero de mdulos complementarios.

La versin grfica de esta utilidad se llama XEmacs y puede iniciarse con el
comando xemacs:

Gedit, NEdit
Estas dos herramientas son de uso muy simple y ofrecen un cierto nmero de
funcionalidades interesantes, entre las que se encuentra la aplicacin de color por
criterios sintcticos.
GEdit, lanzado con el comando gedit, propone la edicin de varios archivos al mismo
tiempo utilizando un sistema de pestaas:

Coloreado sintctico con NEdit (comando nedit):

kedit, kwrite
Otros editores estn ms integrados a un entorno de escritorio especfico, como KEdit y
KWrite con el escritorio KDE.
KEdit es un simple editor grfico (comando kedit):

KWrite -llamado con el comando kwrite- posee funciones avanzadas de
reconocimiento de lenguajes de programacin, lo que le permite ofrecer una interfaz de
desarrollo muy amigable en diversos lenguajes:

2. Editores hexadecimales
Adems de la herramienta od vista en el captulo Manipulacin de archivos, tambin es
posible editar archivos que no son de texto con el programa khexdit:


Las herramientas Emacs y XEmacs ya citadas tambin permiten la edicin de archivos
que no
Conceptos de cuentas de usuario y de
grupos
El sistema GNU/Linux es multiusuario, por tanto las personas que lo usan deben
identificarse para asegurar la confidencialidad de los datos contenidos en los archivos.
En efecto, no sera aceptable que el usuario "Nicolas" pudiera consultar los archivos
personales de "Richard" sin el permiso de ste.
Cada una de estas personas dispone por tanto de una "cuenta de usuario" en el sistema;
pueden utilizarlo tras ser claramente identificadas. Sin embargo, est permitido
compartir archivos entre colaboradores y existe una nocin de "grupo de usuarios" en
GNU/Linux.
Un usuario debe ser miembro obligatoriamente de un grupo de usuarios en un sistema
Unix como GNU/Linux: su grupo principal es el utilizado al crear archivos. Por el
contrario, puede pertenecer a otros varios grupos: sus grupos secundarios determinan
sus derechos de acceso a los archivos creados por otros miembros de los grupos.
Por ejemplo, si se representa los diferentes servicios de una empresa con su personal,
puede observarse que, si bien cada individuo tiene una funcin primaria (indicada entre
parntesis), algunos pueden asumir varias misiones:

Se observa aqu que:
Richard y Gerardo pertenecen al servicio tcnico (Tec).
Nicolas, que es ante todo formador (Curso), tambin forma parte del servicio
tcnico (Tec).
Willy, que pertenece al servicio tcnico (Tec) principalmente, tambin trabaja en
el departamento de formacin (Curso).
Linus es un formador (Curso) que colabora con los departamentos tcnicos (Tec)
y de contabilidad (Conta).
Antonio, del servicio tcnico (Tec), ofrece sus competencias al servicio
comercial (Venta) y tambin da clases (Cursos).
Alejandro es un comercial (Venta) que se ocupa tambin de tareas
administrativas (Conta).
Silvia forma parte nicamente del departamento de contabilidad (Conta).
Para identificar a todos estos usuarios a nivel del sistema operativo, se les atribuye un
nmero nico: el UID (Users ID); el propietario de un archivo se determina por este
nmero en Unix. Estos usuarios estn dotados tambin de un nombre de usuario nico
(login) y de una contrasea (password) para que puedan autenticarse al conectarse al
sistema.
De la misma manera, los grupos de usuarios se representan por un nombre nico al que
se asocia un identificador nico: el GID (Groups ID). Este nmero se utiliza tambin
para determinar el grupo propietario de un archivo.
1. Jerarqua de usuarios
Los usuarios, y por consiguiente las cuentas de usuario, no son todas iguales en Unix.
Se pueden distinguir tres tipos de cuentas:
root
Es el usuario ms importante del sistema desde el punto de vista de la administracin.
No se ve afectado por los derechos de acceso a los archivos y puede hacer ms o menos
de todo en el sistema, excepto escribir en un sistema de archivos montado en lectura
exclusiva (CD-ROM). Su UID igual a 0 le confiere su especificidad. Este
"superusuario" se encarga de las tareas administrativas del sistema. Para evitar errores al
trabajar, es muy recomendable utilizar la cuenta administrativa slo para las tareas que
requieren los derechos de superusuario.
bin, daemon, sync, apache...
Existe en el sistema una serie de cuentas que no se asignan a personas fsicas. Estas
cuentas sirven para facilitar la administracin de los derechos de acceso de ciertas
aplicaciones y demonios. Los UID comprendidos entre 1 y 499 se utilizan generalmente
para estas cuentas.
linus, nicolas...
Todas las dems cuentas de usuario se asocian a personas reales; su funcin es permitir
a los usuarios estndar conectarse y utilizar los recursos del equipo. El UID de un
usuario es normalmente un nmero superior a 499.

Se denominan "demonios" los programas que se ejecutan como tarea en segundo plano,
como un servidor web o un servidor de impresin.
Al igual que las cuentas de usuario, existen diferentes tipos de grupos en un sistema
GNU/Linux que permiten dar derechos comunes a una serie de usuarios:
root
Su GID es 0 y es el grupo principal del administrador.
bin, daemon, sync, apache...
Estos grupos tienen la misma funcin que las cuentas del mismo nombre y permiten dar
los mismos derechos de acceso a una serie de aplicaciones. Por convencin, los grupos
del sistema tienen un GID comprendido entre 1 y 499.
curso, tec...
Estos grupos representan una serie de personas reales que deben acceder a los mismos
archivos. Tpicamente, tienen un GID superior o igual a 500.
2. Comandos tiles
Los comandos id y groups permiten mostrar informacin sobre los grupos. El primero
da el UID del usuario, el GID de su grupo principal y los GID de todos los grupos a los
que pertenece. El segundo slo proporciona la lista completa de los grupos pero acepta
varios nombres de usuario como argumentos:
[nicolas]$ whoami
nicolas
[nicolas]$ id
uid=500(nicolas) gid=500(curso) grupos=500(curso),501(tec)
[nicolas]$ id richard
uid=502(richard) gid=501(tec) grupos=501(tec)
[nicolas]$ groups
curso tec
[nicolas]$ groups gerardo alejandro willy root
antonio : tec curso venta
alejandro : venta conta
willy : tec curso
root : root
Permisos de Unix
Los permisos de acceso a los archivos determinan las acciones que pueden
emprender los usuarios.

La mayora de los problemas de instalacin, configuracin y funcionamiento de las
aplicaciones en GNU/Linux se debe a derechos de acceso mal adjudicados.
En primer lugar, es necesario saber que los derechos de acceso en Linux se definen por:
Una cuenta de usuario: propietario del archivo, es en principio el usuario que lo
ha creado.
Un grupo: este grupo es generalmente el grupo principal del propietario del
archivo, pero puede ser modificado por ste y tomar el valor de uno de sus
grupos secundarios.
Los otros: esta entidad representa toda persona distinta del propietario y que no
es miembro del grupo citado anteriormente.

Los derechos de acceso a un archivo se llaman tambin "modo" en Unix.
Los derechos, el usuario y el grupo propietarios de un archivo pueden verse con el
comando ls -l:

En este ltimo ejemplo, el archivo pertenece al usuario willy y al grupo tec; los nueve
caracteres rw-r--r-- definen los derechos de acceso a este archivo para el usuario willy
("user" o "u"), los miembros del grupo tec ("group" o "g") y los dems ("other" u "o").
Ms exactamente, estos caracteres se distribuyen as:

Todo usuario est asociado, pues, a una de estas entidades para determinar los permisos
vigentes.

Atencin: si el usuario es propietario del archivo, se aplican los permisos del
propietario, y no los del grupo, aunque el usuario sea tambin miembro de ese grupo.
El comando GNU ls puede aadir un carcter adicional a la sucesin de nueve derechos
Unix estndar cuando las autorizaciones especiales estn ubicadas. Un punto . seala
un contexto de seguridad SELinux especfico y un + indica que se utiliza otro mtodo
de autorizacin, como las ACL (Access Control Lists).
1. Permisos estndar
Los permisos de acceso fundamentales en los archivos y directorios en Unix/Linux son
los permisos de lectura r (Read), escritura w (Write) y ejecucin x (eXecute).
Estos permisos -definidos para las entidades u, g y o- aparecen en el orden r, seguido de
w, seguido de x con el comando ls -l. Cuando uno de estos caracteres se reemplaza por
un guin, significa que el permiso asociado no est otorgado.
En el ejemplo del apartado anterior, el usuario willy que tiene los permisos rw-:
Tiene permiso para leer el archivo notas.
Tiene permiso para modificar el archivo notas.
No tiene permiso para ejecutar el archivo notas.
Ms exactamente, se distinguen los permisos Unix estndar segn el tipo de archivo:
archivo normal o directorio.
Es
relativa
mente
simple
compre
nder
los
permis
os
correspondientes cuando se otorgan a un archivo normal; esto no es tan evidente cuando
se trata de un directorio.
Si consideramos los directorios como tablas que contienen, en una columna, los inodos
y en otra, los nombres de archivo presentes en el directorio, es ms fcil comprender los
permisos estndar:

Aqu se observa que los permisos r y x deben estar activos para acceder al
archivo archivo y al subdirectorio srep: r permite conocer su nombre y x su nmero de
inodo (necesario para trabajar con ellos porque el inodo es el que permite acceder a los
datos de un archivo y a la lista de archivos contenidos en un directorio).
Si agregamos el permiso w, se puede crear/modificar/borrar una entrada en el directorio.

Esta ltima observacin es muy importante porque significa que los permisos asociados
al directorio son los que definen el derecho de conservar o borrar los archivos en su
interior.
Ejemplo: borrar un archivo no accesible en lectura/escritura
Permiso Archivo Directorio
r
permiso de lectura del contenido
del archivo.
permiso para listar las entradas del
directorio.
w
permiso para modificar el con-
tenido del archivo.
permiso para modificar las
entradas del directorio.
x permiso para ejecutar el archivo.
permiso de acceso a las entradas
del directorio.
El ejemplo siguiente ilustra el caso de un archivo no accesible en lectura/escritura que, a
pesar de todo, puede borrarse, debido a los permisos asociados al directorio.
Por ejemplo, como usuario alejandro:
[alejandro]$ ls -ld direc
drwxrwxrwx 2 alejandro venta 4096 jun 3 01:51 direc
[alejandro]$ ls -l direc
total 4
-rw------- 1 alejandro venta 47 jun 3 01:51 secreto
Ahora, como nicolas:
[nicolas]$ ls -l direc
total 4
-rw------- 1 alejandro venta 47 jun 3 01:51 secreto
[nicolas]$ cat direc/secreto
cat: direc/secreto: Permission denied
[nicolas]$ rm direc/secreto
rm: borrar un archivo protegido en escritura de archivo normal
direc/secreto? S
[nicolas]$ ls -l direc
total 0
Ejemplo: permisos de acceso a las rutas
El permiso de acceso a un archivo no se define nicamente por los permisos otorgados
al archivo y al directorio que lo contiene; hay que tener el permiso para "atravesar"
todos los directorios especificados en la ruta de acceso al archivo.
As, para acceder en lectura al archivo /dir1/dir2/dir3/arch, hay que tener el permiso r en
el archivo arch pero tambin los permisos r y x en los tres directorios dir1, dir2 y dir3.
Para la ruta siguiente:
[root]# ls -ld /dir1
drwxr-xr-x 3 root root 4096 jun 3 01:55 /dir1/
[root]# ls -ld /dir1/dir2
drwxr-xr-- 3 root root 4096 jun 3 01:55 /dir1/dir2/
[root]# ls -ld /dir1/dir2/dir3
drwxr-xr-x 2 root root 4096 jun 3 01:55 /dir1/dir2/dir3/
[root]# ls -l /dir1/dir2/dir3
total 4
-rw-r--r-- 1 root root 23 jun 3 01:55 arch
El usuario alejandro, al que se aplican los permisos de la entidad "others", no puede
acceder al archivo porque no tiene los permisos suficientes sobre el directorio /dir1/dir2:
[alejandro]$ cat /dir1/dir2/dir3/arch
cat: /dir1/dir2/dir3/arch: Permission denied
[alejandro]$ cd /dir1
[alejandro]$ ls -l
total 4
drwxr-xr-- 3 root root 4096 jun 3 01:55 dir2
[alejandro]$ cd dir2
-bash: cd: dir2: Permission denied
Ejemplo: archivo de registro
Ciertos archivos pueden tener permisos de acceso atpicos a primera vista. Por ejemplo,
un archivo de registro con los mensajes de diversas aplicaciones debe ser accesible en
modificacin para diferentes procesos, pero no necesariamente en lectura por razones de
seguridad.
Se puede comparar este tipo de archivo a una urna electoral en la que cada uno puede
inscribir datos, pero slo el propietario del archivo -de la urna- posee el permiso de leer
todo el contenido.
[alejandro]$ ls -l urna
-rw------w- 1 root root 0 jun 3 02:01 urna
2. SUID, SGID y Sticky Bit
Los tres derechos suplementarios SUID, SGID y Sticky Bit son menos conocidos, pero
tambin indispensables en la administracin de permisos en Linux.
Como ocurre con los permisos estndar, se puede diferenciar el significado de estos
permisos extendidos segn el tipo de archivo considerado: archivo o directorio.

Por
razones
de
segurid
ad, los
permis
os
especia
les
SUID y
SGID
funcionan nicamente con archivos binarios (cdigo compilado), y no con los scripts
(exceptuando los scripts Perl).
La representacin de estos permisos en la presentacin del comando ls -l es la siguiente:
SUID
El carcter x de los permisos del propietario se cambia por un s cuando este permiso
est activado; una S (mayscula) significa que el permiso en ejecucin no est activado
al mismo tiempo.
SGID
Igual pero en los permisos del grupo.
Permiso Archivo Directorio
SUID
Ejecuta el archivo con la identidad del
propietario del archivo.
SGID
Ejecuta el archivo con la identidad del
grupo del archivo.
Los archivos creados en el
directorio heredan del grupo
del directorio, en lugar del
grupo principal del usuario.
Sticky
La imagen del ejecutable sigue en
memoria, su recarga es ms rpida
(este uso ya no tiene razn de ser con la
administracin actual de la memoria).
Slo el propietario del
archivo o del directorio
puede borrar los archivos.
Sticky Bit
Se indica una t en lugar de la x en los permisos de la entidad "others". Como antes, si
este permiso est en mayscula (T), significa que el permiso x oculto no est activo.
Por ejemplo:
[root]# ls -l /usr/bin/passwd
-r-s--x--x 1 root root 15368 may 28 2002
/usr/bin/passwd
[root]# ls -l /usr/bin/write
-rwxr-sr-x 1 root tty 18605 ago 30 22:00
/usr/bin/write
[root]# ls -ld /tmp/
drwxrwxrwt 5 root root 1024 dic 12 15:12 /tmp/
Ejemplo: administracin de contraseas
En condiciones normales, los programas toman la identidad de los usuarios que los
ejecutan. Esto implica que no es posible que un usuario sobrepase sus permisos de
acceso a un archivo utilizando un comando particular porque el comando tendr los
mismos permisos.
Sin embargo, el archivo /etc/shadow que contiene las contraseas de las cuentas de
usuario en el sistema, tiene los permisos siguientes:
[alejandro]$ ls -l /etc/shadow
-r-------- 1 root root 1087 may 27 00:09 /etc/shadow
Slo el administrador tiene el permiso de lectura sobre este archivo. Sin embargo, los
usuarios pueden utilizar el comando passwd para cambiar su contrasea.
Esto es debido al bit SUID, que da al programa los permisos del propietario del archivo
(y por tanto de root), y no los del usuario que lo ha ejecutado:
[alejandro]$ ls -l /usr/bin/passwd
-r-s--x--x 1 root root 15760 jun 21 2003 /usr/bin/passwd
Ejemplo: trabajo en equipo
En el ejemplo de grupos de usuarios presentado al principio del captulo, los usuarios
nicolas y willy son ambos miembros de los grupos curso y tec. Sin embargo, el grupo
principal del primero es curso y del segundo tec.
[root]# id nicolas
uid=500(nicolas) gid=500(curso) grupos=500(curso),501(tec)
[root]# id willy
uid=504(willy) gid=501(tec) grupos=501(tec),500(curso)
Para que puedan colaborar juntos tanto en proyectos tcnicos como en formacin, es
preciso que los archivos que creen pertenezcan al grupo adecuado. Pero, de modo
predeterminado, los archivos creados por Nicolas pertenecen al grupo curso y los
creados por Willy, al grupo tec.
Este problema se resuelve creando un directorio de trabajo por grupo de usuarios y
activando su permiso SGID, con el grupo adecuado como grupo propietario:
[root]# ls -l
total 8
drwxrwsr-x 2 root curso 4096 jun 3 02:23 formacion/
drwxrwsr-x 2 root tec 4096 jun 3 02:23 tecnico/
Cuando el usuario nicolas crea archivos:
[nicolas]$ touch arch1 formacion/arch2 tecnico/arch3
[nicolas]$ ls -lR
.:
total 8
-rw-r--r-- 1 nicolas curso 0 jun 3 02:27 arch1
drwxrwsr-x 2 root curso 4096 jun 3 02:27 formacion/
drwxrwsr-x 2 root tec 4096 jun 3 02:27 tecnico/

./formacion:
total 0
-rw-r--r-- 1 nicolas curso 0 jun 3 02:27 arch2

./tecnico:
total 0
-rw-r--r-- 1 nicolas tec 0 jun 3 02:27 arch3
Cuando el usuario willy crea archivos:
[willy]$ touch archA formacion/archB tecnico/archC
[willy]$ ls -lR
.:
total 8
-rw-r--r-- 1 nicolas curso 0 jun 3 02:27 arch1
-rw-r--r-- 1 willy tec 0 jun 3 02:27 archA
drwxrwsr-x 2 root curso 4096 jun 3 02:27 formacion/
drwxrwsr-x 2 root tec 4096 jun 3 02:27 tecnico/

./formacion:
total 0
-rw-r--r-- 1 nicolas curso 0 jun 3 02:27 arch2
-rw-r--r-- 1 willy curso 0 jun 3 02:27 archB

./tecnico:
total 0
-rw-r--r-- 1 nicolas tec 0 jun 3 02:27 arch3
-rw-r--r-- 1 willy tec 0 jun 3 02:27 archC
Ejemplo: espacio de almacenamiento compartido /tmp
Los derechos estndar de Unix hacen que todo usuario con los permisos rwx sobre un
directorio puede crear archivos en l, pero tambin borrar todos los que se encuentran
all.
El directorio temporal /tmp permite a cualquier usuario almacenar sus propios archivos,
pero, para evitar que borre los archivos de otros, debe activarse el permiso Sticky:
[willy]$ ls -ld /tmp
drwxrwxrwt 5 root root 4096 jun 3 02:32 /tmp/
[willy]$ touch /tmp/archivoDeWilly
[willy]$ ls -l /tmp
total 0
-rw-r--r-- 1 nicolas curso 0 jun 3 02:32 archivoDeNicolas
-rw-r--r-- 1 willy tec 0 jun 3 02:32 archivoDeWilly
[willy]$ rm /tmp/archivoDeNicolas
rm: borrar un archivo protegido en escritura archivo normal vaco
`/tmp/
archivoDeNicolas? s
rm: no se puede borrar `/tmp/archivoDeNicolas : Operation not
permitted
Condiciones generales de uso
Copyright - Editions ENI
Administrar permisos
1. chgrp
El grupo predeterminado atribuido a los nuevos archivos es el grupo principal del
usuario que lo ha creado, a menos que est habilitado el permiso SGID en el directorio
de bienvenida.
El comando chgrp (change group) permite cambiar este grupo; el usuario puede ceder
el archivo a cualquier grupo al que pertenezca. La sintaxis del comando es:
chgrp [-R] <grupo> <archivo ...>
La opcin principal -R indica al comando que aplique el cambio de forma recursiva (es
decir, a todos los archivos y subdirectorios del directorio pasado como argumento).

A diferencia del administrador, el usuario normal slo puede cambiar los archivos de
los que es propietario.
Por ejemplo:
[alejandro]$ id
uid=506(alejandro) gid=502(venta) grupos=502(venta),503(conta)
[alejandro]$ touch archivo
[alejandro]$ ls -l archivo
-rw-r--r-- 1 alejandro venta 0 jun 3 03:58 archivo
[alejandro]$ chgrp conta archivo
[alejandro]$ ls -l archivo
-rw-r--r-- 1 alejandro conta 0 jun 3 03:58 archivo

El comando similar chown (change owner) tambin permite cambiar el propietario de
un archivo, pero slo el administrador cuenta con los permisos necesarios.
2. chmod
El comando chmod permite cambiar los permisos (o "modo") de los archivos. Slo el
propietario del archivo y el administrador del sistema (root) pueden utilizarlo.
La sintaxis general del comando es la siguiente:
chmod [-R] <permisos> <archivo ...>
Como en el comando chgrp, la opcin -R indica al comando la aplicacin del cambio
de forma recursiva.
Hay dos maneras de indicar los permisos de acceso a un archivo en Unix: en notacin
simblica y en notacin octal.
Notacin simblica
La notacin simblica se basa en los caracteres r (lectura) w (escritura) x (ejecucin)
para indicar los permisos y u (usuario) g (grupo) o (otros) para simbolizar las entidades
afectadas.

En la notacin simblica, el carcter a equivale a ugo y representa las tres entidades.
Un + en esta sintaxis indica que hay que activar el permiso, un - indica que este permiso
debe quitarse y un = permite definir los tres permisos en una sola etapa para la entidad
especificada.
La sintaxis general se parece ahora a:
<entidad(es)>[+-=]<permiso(s)>
Tenemos, por ejemplo:
u+x Agrega (+) el permiso de ejecucin (x) para el propietario (u).
g-w Suprime (-) el permiso de modificacin (w) para el grupo (g).
o-rw
Suprime (-) los permisos de lectura (r) y de modificacin (w) para los
dems (o).
ug-x
Suprime (-) el permiso de ejecucin (x) para el propietario (u) y el grupo
(g).
a+r Agrega (+) el permiso de lectura (r) para todas las entidades (a).
u=rw
Fija (=) los permisos de lectura (r) y de modificacin (w) y suprime el
permiso de ejecucin (x) para el propietario (u).

Agregar un permiso ya activo -o quitar uno no activo- no provoca ningn error: es una
operacin nula.
Los dems permisos se activan con la letra s y la entidad u para el SUID, la letra s y la
entidad g para el SGID, y la letra t y la entidad o para el bit Sticky; es decir:
u+s: aade (+) el bit SUID (s y u).
g+s: aade (+) el bit SGID (s y g).
o+t: aade (+) el bit SUID (t y o).
Ejemplos del comando chmod con notacin simblica:
[alejandro]$ ls -l archivo
-rw-r--r-- 1 alejandro conta 0 jun 3 03:58 archivo
[alejandro]$ chmod u+x archivo
[alejandro]$ ls -l archivo
-rwxr--r-- 1 alejandro conta 0 jun 3 03:58 archivo
[alejandro]$ chmod go+w archivo
[alejandro]$ ls -l archivo
-rwxrw-rw- 1 alejandro conta 0 jun 3 03:58 archivo
[alejandro]$ chmod a-r archivo
[alejandro]$ ls -l archivo
--wx-w--w- 1 alejandro conta 0 jun 3 03:58 archivo
[alejandro]$ chmod o=rx archivo
[alejandro]$ ls -l archivo
--wx-w-r-x 1 alejandro conta 0 jun 3 03:58 archivo
Notacin octal
Esta segunda notacin es la codificacin en 3 bits de los permisos de cada entidad.
Poniendo el bit a 1 cuando el permiso correspondiente est activo, y a 0 cuando no lo
est, da por ejemplo 101 para los permisos r-x.
Un nmero de 3 bits puede codificarse en una sola cifra de base octal; la tabla de
conversin siguiente permite relacionar las notaciones:
Repitiendo esto para
las tres entidades, los
permisos rwxr-xr--
pueden traducirse en
notacin octal por
754.
Para los permisos
SUID, SGID y
Sticky, se agrega a
este nmero de base
octal una cifra
suplementaria a la
izquierda, segn la relacin:
Permisos (simblico) Notacin binaria Notacin octal
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
Permisos (simblico) Notacin binaria Notacin octal
--- 000 0
Esto da, por
ejemplo, 2754 para
rwxr-sr--.
Otra forma rpida de
convertir los
permisos de Unix a
notacin octal
consiste en sumar
los valores 4, 2 y 1
para cada conjunto de tres permisos cuando estn activos:

Ejemplos del comando chmod con la notacin octal:
[alejandro]$ ls -l archivo
--wx-w-r-x 1 alejandro conta 0 jun 3 03:58 archivo
[alejandro]$ chmod 644 archivo
[alejandro]$ ls -l archivo
-rw-r--r-- 1 alejandro conta 0 jun 3 03:58 archivo
[alejandro]$ chmod 0744 archivo
[alejandro]$ ls -l archivo
-rwxr--r-- 1 alejandro conta 0 jun 3 03:58 archivo
[alejandro]$ chmod 766 archivo
[alejandro]$ ls -l archivo
-rwxrw-rw- 1 alejandro conta 0 jun 3 03:58 archivo
[alejandro]$ chmod 0322 archivo
[alejandro]$ ls -l archivo
--wx-w--w- 1 alejandro conta 0 jun 3 03:58 archivo
[alejandro]$ chmod 4755 archivo
[alejandro]$ ls -l archivo
-rwsr-xr-x 1 alejandro conta 0 jun 3 03:58 archivo

Las cifras que faltan de la notacin octal (en 4 cifras) se reemplazan automticamente
por ceros a la izquierda; as, 755 equivale a 0755.
3. umask
Los permisos de acceso predeterminados de los nuevos archivos se definen por el valor
de una mscara que se aplica al conjunto de los permisos estndar.
El valor habitual de esta mscara para los usuarios normales es 002; ello significa que se
sustrae bit a bit los permisos de la mscara ------w- (en notacin simblica) al conjunto
de permisos fundamentales rwxrwxrwx (o 777 en octal).
En el caso de archivos normales, los permisos de ejecucin x nunca se activan de modo
predeterminado y, por lo tanto, tambin se sustraen:
--t 001 1
-s- 010 2
-st 011 3
s-- 100 4
s-t 101 5
ss- 110 6
sst 111 7

Archivo Directorio
conjunto de permisos rwxrwxrwx rwxrwxrwx

La
mscar
a del
admini
strador generalmente es 022; root otorga por tanto menos confianza a su grupo que un
usuario normal.
El valor de la mscara se muestra mediante el comando umask:
[linus]$ umask
0002
[linus]$ umask -S
u=rwx,g=rwx,o=rx
[linus]$ touch archivo1
[linus]$ mkdir dir1
[linus]$ ls -l
total 4
-rw-rw-r-- 1 linus curso 0 jun 3 04:55 archivo1
drwxrwxr-x 2 linus curso 4096 jun 3 04:55 dir1/
[linus]$ umask 0022
[linus]$ touch archivo2
[linus]$ mkdir dir2
[linus]$ ls -l
total 8
-rw-rw-r-- 1 linus curso 0 jun 3 04:55 archivo1
-rw-r--r-- 1 linus curso 0 jun 3 04:55 archivo2
drwxrwxr-x 2 linus curso 4096 jun 3 04:55 dir1/
drwxr-xr-x 2 linus curso 4096 jun 3 04:55 dir2/
[linus]$ umask 1234
-bash: umask: 1234: octal number out of range
[linus]$ umask 6
[linus]$ umask
0006
Por evidentes razones de seguridad, no es posible activar de modo predeterminado los
permisos de acceso extendidos (SUID, SGID y sticky bit) al crear archivos.

Este comando est inscrito en el archivo /etc/profile o /etc/bashrc para que se ejecute
con cada nuevo shell. El usuario puede sobrecargar el valor definido por el
administrador en su propio archivo de configuracin $HOME/.bash_profile.
4. Administradores de archivos
Todo administrador de archivos en Linux debe ser capaz de presentar los permisos de
acceso asociados a los archivos y permitir cambiarlos.
Si se han entendido bien los conceptos de este captulo, se comprendern sin problemas
las opciones de las interfaces de los administradores de archivos.
En Konqueror, por ejemplo:
fundamentales
mscara 002 -------w- -------w-
permisos predeterminados de los
archivos
rw-rw-r-- (supresin de los
permisos x)
rwxrwxr-x
Introduccin
Un proceso es un programa o un comando en curso de ejecucin en un sistema. Linux
puede ejecutar varios procesos al mismo tiempo y es posible iniciar varias instancias de
un mismo programa simultneamente.

El trmino "tarea" equivale al trmino "proceso". Por ello se califica a Linux de sistema
multitarea.
Un proceso demonio es un proceso que se ejecuta permanentemente en el sistema; su
cdigo se repite hasta el infinito para esperar y estar a punto cuando un usuario solicite
el servicio al que est vinculado. Los nombres de los demonios terminan generalmente
en d; encontramos por ejemplo los demonios crond (planificacin de tareas), httpd
(servidor web Apache) y syslogd (registro de mensajes) en un sistema Linux.
rbol de procesos y PID
Todo proceso se identifica por un nmero nico, el PID (Process IDentifier); el ncleo
utiliza una tabla de procesos para la gestin de las tareas.
Dos primitivas del ncleo Linux permiten crear procesos: fork y exec (estas primitivas
programables pueden llamarse desde un lenguaje como el C). La primera permite que
un proceso cree un clon de s mismo, la segunda la usa ese clon para ejecutar el cdigo
de otro programa en su lugar. De ello resulta una filiacin entre procesos; as, se habla
de procesos hijos y de procesos padres.
Todo proceso tiene, pues, obligatoriamente un padre, salvo el primer proceso del
sistema: init. ste es el antecesor de todos los procesos del sistema y su PID es 1.
El PID asignado a un proceso lo da el ncleo de Linux al iniciar el programa. No existe
forma de predecir este nmero.
Visualizacin de los procesos
1. ps
El comando ps permite ver la lista de procesos del sistema: presenta una imagen
simplificada de las estructuras del ncleo que administran los procesos. Extrae toda la
informacin del pseudosistema de archivos /proc en el que el ncleo coloca toda la
informacin respecto al estado del sistema en curso de ejecucin.
De modo predeterminado, este comando muestra nicamente los procesos iniciados por
el usuario desde el terminal; por ejemplo:
[nicolas]$ ps
PID TTY TIME CMD
1200 pts0 00:00:00 bash
1239 pts0 00:00:00 ps
Este comando cuenta con muchas opciones. Adems, acepta opciones de Unix98 (con -
), BSD (sin -) y GNU (formato largo con --). Veamos un ejemplo:
[nicolas]$ ps --help
********* simple selection ********* ********* selection by list
*********
-A all processes -C by command name
-N negate selection -G by real group ID (supports
names)
-a all w/ tty except session leaders -U by real user ID (supports
names)
-d all except session leaders -g by session OR by effective
group
name
-e all processes -p by process ID
T all processes on this terminal -s processes in the sessions
given
a all w/ tty, including other users -t by tty
g OBSOLETE -- DO NOT USE -u by effective user ID
(supports
names)
r only running processes U processes for specified
users
x processes w/o controlling ttys t by tty
*********** output format ********** *********** long options
***********
-o,o user-defined -f full --Group --User --pid --cols --
ppid
-j,j job control s signal --group --user --sid --rows --
info
-O,O preloaded -o v virtual memory --cumulative --format --
deselect
-l,l long u user-oriented --sort --tty --forest --version
-F extra full X registers --heading --no-heading --
context
********* misc options *********
-V,V show version L list format codes f ASCII art forest
-m,m,-L,-T,H threads S children in sum -y change -l format
-M,Z security data c true command name -c scheduling class
-w,w wide output n numeric WCHAN,UID -H process hierarchy
Es casi imposible recordar todas las opciones del comando ps, y algunas de ellas, segn
si son de origen Unix98 o BSD (con o sin -), no dan el mismo resultado. As, la opcin -
e presenta todos los procesos, mientras que e muestra el entorno de los procesos en la
lista.

La versin espaola de la pgina del manual puede ser obsoleta y no presentar todas las
opciones del comando. Para ver las pginas del manual en lenguaje internacional (ANSI
C) a pesar de haberse instalado la distribucin en espaol, basta con modificar la
variable de entorno $LANG escribiendo LANG=C en el shell (vase el captulo Shell
Bash).
Veamos, al menos, dos sintaxis utilizadas frecuentemente:
ps aux
Muestra los procesos de todos los usuarios (a) y los que no estn vinculados a un
terminal (x), especificando el nombre del usuario y la fecha de inicio (u).
ps -ef
Muestra todos los procesos (-e) y mucha informacin (-f).
Por ejemplo:
[nicolas]$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.8 0.4 1584 F520 ? S 13:31 0:03 init [3]
root 2 0.0 0.0 0 0 ? SWN 13:31 0:00
[ksoftirqd/0]
root 3 0.0 0.0 0 0 ? SW 13:31 0:00 [events/0]
root 4 0.0 0.0 0 0 ? SW 13:31 0:00 [kblockd/0]
root 5 0.0 0.0 0 0 ? SW 13:31 0:00 [kapmd]
root 6 0.0 0.0 0 0 ? SW 13:31 0:00 [pdflush]
root 7 0.0 0.0 0 0 ? SW 13:31 0:00 [pdflush]
root 8 0.0 0.0 0 0 ? SW 13:31 0:00 [kswapd0]
root 9 0.0 0.0 0 0 ? SW 13:31 0:00 [aio/0]
root 11 0.0 0.0 0 0 ? SW 13:31 0:00 [kseriod]
root 15 0.0 0.0 0 0 ? SW 13:31 0:00 [kjournald]
root 121 0.0 0.8 2036 132 ? S 13:31 0:00 devfsd /dev
root 211 0.0 0.0 0 0 ? SW 13:31 0:00 [khubd]
root 346 0.0 0.0 0 0 ? SW 13:31 0:00 [kjournald]
root 786 0.0 0.4 1640 604 ? S 13:32 0:00 syslogd -m 0
-a /
root 794 0.1 1.2 2592 1532 ? S 13:32 0:00 klogd -2
root 912 0.0 1.1 3152 1420 ? S 13:32 0:00
/usr/sbin/sshd
root 1145 0.0 0.4 1624 616 ? S 13:32 0:00 crond
root 1191 0.0 0.3 1568 444 tty1 S 13:32 0:00
/sbin/mingetty tt
root 1192 0.0 0.3 1568 444 tty2 S 13:32 0:00
/sbin/mingetty tt
root 1193 0.0 0.3 1568 444 tty3 S 13:32 0:00
/sbin/mingetty tt
root 1194 0.0 0.3 1568 444 tty4 S 13:32 0:00
/sbin/mingetty tt
root 1195 0.0 0.3 1568 444 tty5 S 13:32 0:00
/sbin/mingetty tt
root 1196 0.0 0.3 1568 444 tty6 S 13:32 0:00
/sbin/mingetty tt
root 1197 0.0 1.5 6304 1976 ? S 13:33 0:00 sshd:
nicolas [pr
nicolas 1199 0.1 1.6 6304 2076 ? S 13:33 0:00 sshd:
nicolas@pts
nicolas 1200 0.1 1.2 2784 1600 pts0 S 13:33 0:00 -bash
nicolas 1425 0.0 0.6 2420 780 pts0 R 13:37 0:00 ps aux
Y tambin:
[nicolas]$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 13:31 ? 00:00:03 init [3]
root 2 1 0 13:31 ? 00:00:00 [ksoftirqd/0]
root 3 1 0 13:31 ? 00:00:00 [events/0]
root 4 1 0 13:31 ? 00:00:00 [kblockd/0]
root 5 1 0 13:31 ? 00:00:00 [kapmd]
root 6 1 0 13:31 ? 00:00:00 [pdflush]
root 7 1 0 13:31 ? 00:00:00 [pdflush]
root 8 1 0 13:31 ? 00:00:00 [kswapd0]
root 9 1 0 13:31 ? 00:00:00 [aio/0]
root 11 1 0 13:31 ? 00:00:00 [kseriod]
root 15 1 0 13:31 ? 00:00:00 [kjournald]
root 121 1 0 13:31 ? 00:00:00 devfsd /dev
root 211 1 0 13:31 ? 00:00:00 [khubd]
root 346 1 0 13:31 ? 00:00:00 [kjournald]
root 786 1 0 13:32 ? 00:00:00 syslogd -m 0 -a
/var/spool/postf
root 794 1 0 13:32 ? 00:00:00 klogd -2
root 912 1 0 13:32 ? 00:00:00 /usr/sbin/sshd
root 1145 1 0 13:32 ? 00:00:00 crond
root 1191 1 0 13:32 tty1 00:00:00 /sbin/mingetty tty1
root 1192 1 0 13:32 tty2 00:00:00 /sbin/mingetty tty2
root 1193 1 0 13:32 tty3 00:00:00 /sbin/mingetty tty3
root 1194 1 0 13:32 tty4 00:00:00 /sbin/mingetty tty4
root 1195 1 0 13:32 tty5 00:00:00 /sbin/mingetty tty5
root 1196 1 0 13:32 tty6 00:00:00 /sbin/mingetty tty6
root 1197 912 0 13:33 ? 00:00:00 sshd: nicolas [priv]
nicolas 1199 1197 0 13:33 ? 00:00:00 sshd: nicolas@pts/0
nicolas 1200 1199 0 13:33 pts0 00:00:00 -bash
nicolas 1426 1200 0 13:37 pts0 00:00:00 ps -ef

Atencin: todo usuario puede ver todos los procesos iniciados en el sistema. En cierto
modo, es posible, segn el nombre de los procesos iniciados, deducir la actividad de
otro usuario sin que lo sepa, sin poseer permisos de administracin especiales; ello no
presenta ningn problema para el correcto funcionamiento del sistema, pero esta
consideracin tiene su importancia desde el punto de vista tico.
Detalle de la informacin mostrada
Las principales columnas que aparecen en la vista del comando ps son:
%CPU
Porcentaje de tiempo de procesador utilizado desde la
ejecucin del comando.
%MEM Porcentaje de uso de la memoria disponible.
COMMAND o
CMD
Nombre del comando que origin el proceso.
GID o GROUP Identidad del grupo bajo la cual se ejecuta el proceso.
NI Nivel de prioridad del proceso.
PID Identificador del proceso.
PPID Identificador del proceso padre.
RSS Cantidad de memoria RAM utilizada (en KB).
START o
STIME
Fecha de lanzamiento del proceso.
STAT Estado del proceso.
TIME Tiempo total de uso de la CPU para este proceso.
TT o TTY
El nombre del terminal al que est vinculado el proceso. En el
caso de un proceso no asociado a un terminal como un
demonio, este campo contiene el carcter "?".
UID o USER Identidad del usuario bajo la cual se ejecuta el proceso.
Campo STAT
Los estados definidos por el campo STAT presentan tres caracteres. En Linux, los
valores del primero significan:
R
(Running)
Proceso en curso de ejecucin.
T
(sTopped)
Proceso parado (con las teclas [Ctrl]+[z] por ejemplo).
S
(Sleeping)
Proceso dormido, en espera de procesador.
D
(Device)
Proceso dormido en espera de un recurso (generalmente una
entrada/salida). Los procesos en este estado no pueden
interrumpirse.
Z
(Zombie)
Proceso terminado. Seguir en este estado hasta que su padre lo
note y recupere su cdigo de retorno. Como los anteriores (D), esos
procesos no pueden interrumpirse, pero no consumen ningn
recurso, excepto una entrada en la tabla de procesos.
El segundo carcter del campo STAT est ubicado en W si el proceso se ha movido al
espacio de paginacin.
Finalmente, aparece una N o un < como tercer carcter de la columna STAT si el
proceso es respectivamente de menor o de mayor prioridad.
2. top
El comando top permite visualizar la actividad del procesador en tiempo real. Muestra
la lista de procesos que se ejecutan en ese momento y la refresca automticamente.
Adems, esta herramienta usa las mismas etiquetas de columna que ps. Es
posible modificar las columnas presentadas y la ordenacin de los procesos de forma
interactiva.
Al pulsar la tecla [?] aparece la ayuda del comando. La tecla [q] permite salir de top.
top - 13:38:26 up 6 min, 1 user, load average: 0.11, 0.10, 0.06
Tasks: 28 total, 2 running, 26 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3% us, 0.3% sy, 0.0% ni, 99.0% id, 0.0% wa, 0.3% hi,
0.0% si
Mem: 126300k total, 36368k used, 89932k free, 3228k
buffers
Swap: 511520k total, 0k used, 511520k free, 22776k
cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+
COMMAND
1427 nicolas 16 0 2172 1004 1964 R 0.7 0.8 0:00.09 top
1 root 16 0 1584 520 1424 S 0.0 0.4 0:03.28 init
2 root 34 19 0 0 0 S 0.0 0.0 0:00.00
ksoftirqd/0
3 root 5 -10 0 0 0 S 0.0 0.0 0:00.01
events/0
4 root 5 -10 0 0 0 S 0.0 0.0 0:00.11
kblockd/0
5 root 15 0 0 0 0 S 0.0 0.0 0:00.00 kapmd
6 root 25 0 0 0 0 S 0.0 0.0 0:00.00
pdflush
7 root 15 0 0 0 0 S 0.0 0.0 0:00.05
pdflush
8 root 25 0 0 0 0 S 0.0 0.0 0:00.00
kswapd0
9 root 10 -10 0 0 0 S 0.0 0.0 0:00.00 aio/0
11 root 23 0 0 0 0 S 0.0 0.0 0:00.00
kseriod
15 root 15 0 0 0 0 S 0.0 0.0 0:00.14
kjournald
121 root 16 0 2036 1132 1588 S 0.0 0.9 0:00.16 devfsd
211 root 15 0 0 0 0 S 0.0 0.0 0:00.00 khubd
346 root 15 0 0 0 0 S 0.0 0.0 0:00.00
kjournald
786 root 16 0 1640 604 1468 S 0.0 0.5 0:00.22
syslogd
794 root 16 0 2592 1532 1416 S 0.0 1.2 0:00.41 klogd
912 root 16 0 3152 1420 2940 S 0.0 1.1 0:00.12 sshd
1145 root 16 0 1624 616 1460 S 0.0 0.5 0:00.01 crond
1191 root 18 0 1568 444 1408 S 0.0 0.4 0:00.01
mingetty
1192 root 19 0 1568 444 1408 S 0.0 0.4 0:00.01
mingetty
1193 root 20 0 1568 444 1408 S 0.0 0.4 0:00.01
mingetty
1194 root 21 0 1568 444 1408 S 0.0 0.4 0:00.00
mingetty
1195 root 22 0 1568 444 1408 S 0.0 0.4 0:00.00
mingetty
1196 root 22 0 1568 444 1408 S 0.0 0.4 0:00.01
mingetty
1197 root 16 0 6304 1976 5844 S 0.0 1.6 0:00.12 sshd
1199 nicolas 16 0 6304 2076 5844 R 0.0 1.6 0:00.55 sshd
1200 nicolas 15 0 2784 1600 2376 S 0.0 1.3 0:00.32 bash
Para modificar los campos presentados, pulse la tecla [f] (field) y seleccinelos en un
men.
Este comando acepta tambin un archivo de configuracin para definir su
vista predeterminada. Este archivo es /etc/toprc para una configuracin global de todos
los usuarios y ~/.toprc (en el directorio personal del usuario) para una configuracin
personalizada.
3. pstree
pstree es otro comando presente en Linux. Permite mostrar los nombres de procesos de
forma jerrquica; as es ms fcil conocer su filiacin.
[nicolas]$ pstree
init-+-aio/0
|-crond
|-devfsd
|-events/0
|-kapmd
|-kblockd/0
|-khubd
|-2*[kjournald]
|-klogd
|-kseriod
|-ksoftirqd/0
|-kswapd0
|-6*[mingetty]
|-2*[pdflush]
|-sshd---sshd---sshd---bash---pstree
`-syslogd
Desde luego, es posible mostrar el PID de los procesos con la opcin -p.

Esta vista es ms condensada que las de ps o top porque el comando pstree slo
muestra una lnea cuando existen varias instancias del mismo proceso; el nmero que
aparece delante del carcter * indica el nmero de instancias correspondientes.
Seales y comando kill
Los comandos kill y killall permiten enviar seales a los procesos. El comando kill
espera un nmero de proceso como argumento, mientras que killall espera un nombre
de comando.

El comando killall debe utilizarse con mucha precaucin porque enva la seal a todos
los procesos con el nombre pasado como argumento.
Estos dos comandos pueden, opcionalmente, recibir un nmero de seal como
argumento. De modo predeterminado, ambos envan la seal 15 (ver ms adelante) a los
procesos pasados como argumento:
kill [-<seal>] <pid> ...
Un usuario normal slo puede enviar una seal con estos comandos a sus
propios procesos.
Es posible obtener la lista de seales disponibles con la opcin -l del comando kill:
[nicolas]$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD
18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN
22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO
30) SIGPWR 31) SIGSYS 35) SIGRTMIN 36) SIGRTMIN+1
37) SIGRTMIN+2 38) SIGRTMIN+3 39) SIGRTMIN+4 40) SIGRTMIN+5
41) SIGRTMIN+6 42) SIGRTMIN+7 43) SIGRTMIN+8 44) SIGRTMIN+9
45) SIGRTMIN+10 46) SIGRTMIN+11 47) SIGRTMIN+12 48) SIGRTMIN+13
49) SIGRTMIN+14 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8
57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4
61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX
La pgina de la seccin 7 del manual sobre las seales (man 7 signal) es una fuente de
informacin muy interesante para el empleo del comando kill as como el archivo
/usr/include/asm/signal.h. En l se detalla el significado de todas las seales disponibles
y el comportamiento predeterminado de los procesos ante estas seales.
Las principales seales son:
SIGHUP (1) "Hang up"
Si el usuario se desconecta del terminal que tiene permiso para ejecutar el programa,
esta seal se enva automticamente al proceso; de modo predeterminado, el proceso
termina.
SIGINT (2)
Interrupcin desde el teclado con la combinacin de teclas [Ctrl]+[c]. El
comportamiento predeterminado es la finalizacin del proceso.
SIGQUIT (3)
Salida por teclado con [Ctrl]+[\]. Una vez ms, el comportamiento predeterminado es
terminar el proceso. Pero, adems, se guarda una copia del espacio de memoria en un
archivo llamado core (til slo para la depuracin de aplicaciones).
SIGKILL (9)
Es una de las raras seales que no pueden ser interceptadas por un proceso ni ignorarse.
Todo proceso que recibe la seal KILL termina inmediatamente sin proceder a ninguna
operacin de limpieza (como cerrar los archivos abiertos o borrar los archivos
temporales). Esta seal, que mata el proceso, slo debe enviarse si ste no responde a
ninguna otra seal.
SIGTERM (15)
Seal predeterminada del comando kill. De modo predeterminado, el proceso termina.
SIGCHLD (17)
Seala a un proceso la parada o la terminacin de uno de sus hijos.
Veamos un ejemplo de parada del comando find (proceso que tiene el PID1308) con el
comando kill utilizando la seal 15:
[nicolas]$ ps
PID TTY TIME CMD
1223 pts0 00:00:00 bash
1308 pts0 00:00:02 find
1313 pts0 00:00:00 ps
[nicolas]$ kill -15 1308
[nicolas]$ ps
PID TTY TIME CMD
1223 pts0 00:00:00 bash
1314 pts0 00:00:00 ps
[1]+ Terminated find / >/dev/null 2>&1

El ncleo no reasigna inmediatamente un nmero de PID liberado al finalizar la
ejecucin de un programa. Esto evita el riesgo de enviar una seal a otro proceso
cuando el proceso destinatario termina de otra manera, entre el momento en que se usa
el comando ps para identificar el PID y el momento de ejecucin del comando kill.
El programa top, visto anteriormente, tambin permite enviar seales a los procesos;
para ello, hay que pulsar la tecla [k] una vez ejecutado ste.
Administradores de procesos grficos
Existe evidentemente una amplia gama de herramientas grficas de administracin de
procesos.
Por ejemplo, el "Monitor del sistema GNOME" funciona tambin con el entorno de
escritorio KDE y se inicia con el comando gnome-system-monitor:
rabajo con procesos
1. Iniciar un proceso
En primer plano
Les ejemplos presentados hasta ahora funcionan como programas iniciados en primer
plano, es decir, procesos que pasan el control al usuario slo cuando terminan.
Esta ejecucin de un programa se realiza escribiendo simplemente el comando
correspondiente en la lnea de comandos con sus eventuales opciones y argumentos.
Por ejemplo:
[nicolas]$ sleep 10
(espera de 10 segundos)
[nicolas]$

El comando sleep, utilizado en el ejemplo, se limita a esperar el nmero de segundos
indicados en el argumento.
En segundo plano
Para no verse obligados a esperar el fin del programa antes de poder iniciar otro, es
posible ejecutar un comando en segundo plano; as, la lnea de comandos reaparece
inmediatamente y el usuario puede escribir nuevos comandos.
Para iniciar un proceso en segundo plano, basta con agregar el carcter & al final de la
lnea de comando:
[nicolas]$ sleep 10 &
[1] 2004
[nicolas]$
La lnea situada despus del comando slo aparece a ttulo indicativo y no interfiere en
nada con los tratamientos que puede efectuar el comando. El nmero entre corchetes
identifica el trabajo (nmero de "job") del proceso en el shell actual; el segundo indica
el nmero de PID que el ncleo ha asignado a este proceso.
Un poco ms tarde, al actualizarse la lnea de comandos del shell y cuando el proceso
que se ejecutaba en segundo plano finaliza, el shell muestra:
[nicolas]$
[1]+ Done sleep 10
[nicolas]$
De nuevo, esta lnea no interfiere con los tratamientos en curso de los dems comandos.
2. Detener un proceso
Hay tres formas de detener prematuramente un proceso en primer plano:
Escribir la combinacin de teclas [Ctrl]+[c]. La seal 2 (SIGINT) se enva al
proceso en curso de ejecucin.
Pulsar la combinacin de teclas [Ctrl]+[\]. La seal 3 (SIGQUIT) se enva al
proceso en curso de ejecucin.
Identificar el PID del proceso a partir de otro terminal y ejecutar el comando kill
adecuado.
Por el contrario, el nico medio para detener un proceso que se ejecuta en segundo
plano es emplear el comando kill apropiado. En efecto, el proceso ya ha pasado el
control al usuario, y ya no puede controlarse directamente desde el terminal mediante
una combinacin de teclas.
3. Controlar los procesos iniciados desde la lnea de
comandos
Al ser posible ejecutar varios programas desde el mismo terminal, est disponible una
serie de comandos para controlarlos.
Jobs
El comando jobs muestra la lista de procesos en curso de ejecucin que han sido
iniciados desde el terminal actual:
[nicolas]$ sleep 2222 &
[1] 2034
[nicolas]$ sleep 3333 &
[2] 2035
[nicolas]$ sleep 4444 &
[3] 2036
[nicolas]$ sleep 5555 &
[4] 2037
[nicolas]$ jobs
[1] Running sleep 2222 &
[2] Running sleep 3333 &
[3]- Running sleep 4444 &
[4]+ Running sleep 5555 &
Encontramos en esta lista con el carcter & el nmero de "job" indicado al ejecutar los
procesos en segundo plano.
Los caracteres + y - presentes al lado de los nmeros de "job" indican respectivamente
el ltimo y el penltimo procesos con los que se ha trabajado en la lnea de comandos.
bg y fg
Si un proceso largo se ha iniciado por error en primer plano (por olvido del carcter &
al final de la lnea), no es necesario interrumpirlo para reiniciarlo en segundo plano: la
combinacin de teclas [Ctrl]+[z] lo suspende y permite al usuario recuperar el control
del terminal.
Entonces es posible volver a ejecutar el proceso, en primer plano o en segundo plano,
utilizando respectivamente el comando fg o el comando bg.
Estos dos comandos toman como argumento, precedido por el carcter %, el nmero de
"job" del proceso. Si no se indica este nmero, el comando toma en consideracin el
ltimo proceso con el que se ha trabajado (indicado con un + por el comando jobs).
[nicolas]$ jobs
[1] Running sleep 2222 &
[2] Running sleep 3333 &
[3]- Running sleep 4444 &
[4]+ Running sleep 5555 &
[nicolas]$ sleep 6666 (pulsar Ctrl + z)

[5]+ Stopped sleep 6666
[nicolas]$ jobs
[1] Running sleep 2222 &
[2] Running sleep 3333 &
[3] Running sleep 4444 &
[4]- Running sleep 5555 &
[5]+ Stopped sleep 6666
[nicolas]$ bg %5
[5]+ sleep 6666 &
[nicolas]$ jobs
[1] Running sleep 2222 &
[2] Running sleep 3333 &
[3] Running sleep 4444 &
[4]- Running sleep 5555 &
[5]+ Running sleep 6666 &
[nicolas]$ fg %2
sleep 3333 (pulsar Ctrl + z)

[2]+ Stopped sleep 3333
[nicolas]$ jobs
[1] Running sleep 2222 &
[2]+ Stopped sleep 3333
[3] Running sleep 4444 &
[4] Running sleep 5555 &
[5]- Running sleep 6666 &
[nicolas]$ bg
[2]+ sleep 3333 &

El comando kill tambin funciona con los nmeros de "jobs" precedidos por el carcter
%
ntroduccin
A pesar de la existencia de interfaces grficas cada vez ms fciles de utilizar y
ergonmicas, el uso de la lnea de comandos sigue siendo frecuente en Linux.
El aprendizaje del shell permite al lector comprender mejor el funcionamiento del
sistema y aumentar su productividad al facilitarle el uso de ste.
Este captulo pasa revista a diferentes funcionalidades ofrecidas por el shell Bash.
Generalidades y definiciones
El shell
El shell es el programa que se ejecuta automticamente cuando un usuario se conecta al
sistema en un terminal de texto y establece el vnculo entre el usuario y el sistema:


El trmino "shell" en ingls significa "concha", lo que se corresponde con la imagen de
encapsulacin que realmente representa.
El shell se llama tambin "intrprete de comandos" porque:
Es el que traduce al sistema las instrucciones indicadas por el usuario mediante
la lnea de comandos y el que presenta la informacin devuelta en la pantalla.
A diferencia de un compilador utilizado en programacin (que construye un
archivo binario comprensible por el ncleo Linux a partir de una serie de
instrucciones contenidas en el cdigo fuente), el shell interpreta y ejecuta cada
comando a medida que el usuario los escribe.
Existen muchos shells disponibles para Linux; destacan:
Bourne Shell o sh: es el primer shell escrito para Unix por Steve Bourne. Hoy
obsoleto, muchos intrpretes de comandos recientes conservan la compatibilidad
con l. El programa correspondiente en Linux es sh o bsh.
Korn Shell o KSH: es uno de los intrpretes de comandos ms utilizados en el
mundo Unix. Es compatible con el shell Bourne original.
C shell :este shell fue desarrollado por la rama BSD de Unix y usa una sintaxis
diferente de los anteriores. Puede ejecutarse mediante el programa csh.
tcsh : es una implementacin mejorada del C shell que dispone de una edicin
avanzada de la lnea de comandos. Su ejecutable es tcsh.
Bash o Bourne Again Shell: como su nombre indica, es una nueva
implementacin del shell Bourne y se parece mucho al Korn Shell. Muy
funcional, es el intrprete de comandos predeterminado en Linux que se detalla
en el resto del captulo. El programa correspondiente es bash.
Caracteres especiales
Los caracteres especiales tienen un significado particular para el shell en la lnea de
comandos. Se distinguen varias categoras de caracteres especiales:
los metacaracteres incluyen los caracteres separadores en la lnea de comandos:
<, >, |, (, ), ;, &, espacio, retorno de carro (tecla [Intro]) y tabulacin.
los caracteres genricos (o caracteres de expansin), que permiten la creacin de
comodines de reemplazo en los nombres de archivo: *, ? y [].
los caracteres utilizados en las sustituciones de variables y comandos: $, `, y {}.
los caracteres de cita :\, " y .

Algunos de estos caracteres pueden tener diferentes significados segn el contexto en el
que aparezcan.
El significado de cada uno de estos caracteres se estudia ms adelante.
Variables
Verdadero lenguaje de programacin, el shell Bash proporciona todos los elementos
necesarios para desarrollar aplicaciones; este apartado trata sobre las variables.

Una variable es un parmetro que puede cambiar durante la ejecucin de un programa;
se le da un nombre para recuperar el valor que representa.
1. Trabajo con variables
Asignacin de nombre
El nombre de una variable es una palabra compuesta exclusivamente por caracteres
alfanumricos y el subrayado _ (underscore), que empieza por una letra o un subrayado.
Por convencin, el usuario nombrar a las variables con caracteres en minsculas
porque las maysculas se emplean generalmente para los nombres de variables de
entorno.
Como en los nombres de archivo, es preferible dar nombres explcitos a las variables
para facilitar el mantenimiento de los scripts generados.
Asignacin
Una variable llamada var puede recibir un valor valor por una asignacin de la forma
var=valor.
No hay ningn espacio antes ni despus del carcter = y si el valor se compone de varias
palabras o caracteres especiales, debe ir enmarcado entre caracteres de cita (vase
seccin Caracteres de cita en este captulo).
Una variable existe desde que se le asigna un valor; este valor puede ser un nmero, una
palabra o una cadena de caracteres con cualquier carcter especial:
[nicolas]$ var1=12
[nicolas]$ var2=palabra
[nicolas]$ var3="dos palabras"
[nicolas]$ var4=car. especiales: $* ?{}()[]"\&~|`!=%,.;#
Si no se proporciona ningn valor, la variable recibe una cadena vaca; las dos sintaxis
siguientes son equivalentes:
[nicolas]$ var5=""
[nicolas]$ var6=
Llamada y visualizacin
El shell reemplaza una variable por su valor si su nombre precedido por el carcter $
aparece en la lnea de comandos, antes incluso de interpretar el comando escrito:
[nicolas]$ echo $var2
palabra
La interpretacin de la lnea de comandos por parte del shell se efecta en dos etapas:

La llamada a un nombre de variable no definida no genera errores; el shell se limita a
reemplazarla por una cadena vaca.
Cuando el nombre de una variable es ambiguo en la lnea de comandos, es posible
delimitar su nombre con la sintaxis ${var}, por ejemplo:
[nicolas]$ var7=vender
[nicolas]$ echo ver el contenido de la variable var7: $var7
ver el contenido de la variable var7: vender
[nicolas]$ echo el quinto da de la semana es: $var7vi
el quinto da de la semana es:
[nicolas]$ echo el quinto da de la semana es: ${var7}vi
el quinto da de la semana es: viernes
Cuando se llama al comando set sin argumentos, muestra la lista completa de las
variables definidas en el shell actual.
Aparecen las variables definidas anteriormente:
[nicolas]$ set
...
var1=12
var2=palabra
var3=dos palabras
var4=$car. especiales: $* ?{}()[]"\\&~|`!=%,.;#
var5=
var6=
var7=vender
...

La visualizacin producida puede reutilizarse como una entrada.
Visibilidad de una variable
De modo predeterminado, toda variable slo se define en el shell donde se ha creado; es
decir, slo es accesible desde los subprocesos del shell y se destruye al finalizar la
ejecucin de dicho shell:
[nicolas]$ x=3
[nicolas]$ echo $x
3
[nicolas]$ bash
[nicolas]$ echo $x

[nicolas]$ x=7
[nicolas]$ echo $x
7

[nicolas]$ exit
[nicolas]$ echo $x
3

El comando export especifica al shell que una variable debe copiarse en el entorno de
todos los procesos hijos del shell actual. Este comando puede utilizarse junto con la
asignacin de una variable:
[nicolas]$ export x=3
[nicolas]$ echo $x
3
[nicolas]$ bash
[nicolas]$ echo $x
3
[nicolas]$ x=7
[nicolas]$ echo $x
7
[nicolas]$ y=2
[nicolas]$ export y
[nicolas]$ echo $y
2
[nicolas]$ exit
[nicolas]$ echo $x
3
[nicolas]$ echo $y


El argumento del comando export es el nombre de la variable, y no su contenido: el
nombre de la variable no debe ir, pues, antecedido de $.
Eliminacin
Una vez que una variable existe, slo puede suprimirse con el comando unset:
[nicolas]$ set
...
var1=12
var2=palabra
var3=dos palabras
var4=$car. especiales: $* ?{}()[]"\\&~|`!=%,.;#
var5=
var6=
var7=vender
...
[nicolas]$ unset var2
[nicolas]$ set
...
var1=12
var3=dos palabras
var4=$car. especiales: $* ?{}()[]"\\&~|`!=%,.;#
var5=
var6=
var7=vender
...
2. Variables de entorno
Las variables de entorno afectan al comportamiento del shell y de la interfaz de usuario.
Se definen al cargar el shell y pueden enumerarse mediante el comando set visto
anteriormente.

Aunque se pueden modificar como cualquier otra variable, la asignacin de valores
errticos a las variables de entorno puede llevar a un comportamiento "aleatorio" del
shell y los comandos ejecutados desde l.
Los nombres de estas variables de entorno generalmente van en maysculas.
Aqu presentaremos slo las principales variables de entorno.
$BASH
Ruta al propio binario Bash:
[nicolas]$ echo $BASH
/bin/bash
$BASH_ENV
Variable que apunta al archivo de arranque de Bash. Se lee al arrancar cada script para
reinterpretar este archivo de comandos.
$EDITOR
Nombre del editor predeterminado invocado por otras herramientas en lnea de
comandos; generalmente es la ruta absoluta de vi o emacs.
$HOME
Ruta completa del directorio personal del usuario conectado actualmente:
[nicolas]$ echo $HOME
/home/nicolas
$IGNOREEOF
Indica el nmero de veces que el shell ignorar el carcter de fin de archivo (EOF o End
Of File) pasado mediante las teclas [Ctrl]+[d] antes de terminar:
[nicolas]$ IGNOREEOF=3
pulsar Ctrl + d
[nicolas]$ Use "exit" to leave the shell.
pulsar Ctrl + d
[nicolas]$ Use "exit" to leave the shell.
pulsar Ctrl + d
[nicolas]$ Use "exit" to leave the shell.
pulsar Ctrl + d
[nicolas]$ exit
$OLDPWD
Directorio donde estaba antes el usuario. Esta variable la usa el comando cd -:
[nicolas]$ pwd
/home/nicolas
[nicolas]$ cd /var
[nicolas]$ pwd
/var
[nicolas]$ cd
[nicolas]$ pwd
/home/nicolas
[nicolas]$ echo $OLDPWD
/var
[nicolas]$ OLDPWD=/tmp
[nicolas]$ cd -
/tmp
[nicolas]$ pwd
/tmp
$PATH
Lista de directorios separados por el carcter : (dos puntos) con los ejecutables del
sistema (binarios, scripts shell). Cuando se da un comando, el shell busca
automticamente los ejecutables en los directorios listados en esta variable, por orden de
lista.
[nicolas]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/usr/games:/home/
nicolas/bin
Para agregar un directorio a esta lista, se usa la sintaxis siguiente:
PATH=$PATH:/nuevo_directorio
$PS1
ste es el smbolo del sistema principal, visto desde la lnea de comandos:
[nicolas]$ echo $PS1
[\u]$
[nicolas]$ PS1=[\u@\h \W]$
[nicolas@mandrake tmp]$
El prompt del shell Bash puede estar compuesto por secuencias de caracteres que
representan diversas informaciones; el uso de apstrofes es necesario para asignar esta
variable. Las principales secuencias de caracteres son:
\a Emite un bip al mostrar el smbolo del sistema.
\d Muestra la fecha.
\h Muestra el nombre del equipo.
\H Muestra el nombre completo del equipo (con el nombre de dominio).
\t Muestra la hora actual.
\u Muestra el nombre del usuario conectado.
\w Muestra la ruta del directorio actual.
\W Muestra el nombre del directorio actual.
$PS2
Esta variable representa el smbolo del sistema secundario que se muestra cuando el
shell espera el resto de la entrada de un comando:
[nicolas]$ echo $PS2
>
[nicolas]$ echo "no
> vale"
no
vale
$PWD
Directorio actual donde se encuentra el usuario. Su valor equivale al resultado del
comando pwd:
[nicolas]$ echo $PWD
/home/nicolas
[nicolas]$ pwd
/home/nicolas
$TMOUT
Si esta variable de entorno se inicia con un valor numrico distinto de cero, el shell se
desconecta automticamente al cabo del nmero de segundos indicado aqu, en caso de
inactividad por parte del usuario.

Al igual que un protector de pantalla con contrasea, esto evita que un usuario deje su
sesin abierta inadvertidamente.
Caracteres genricos
Los caracteres genricos son caracteres especiales dedicados a la escritura de motivos
en los nombres de archivo.
Permiten efectuar una bsqueda segn un motivo por los nombres de archivo presentes
en el directorio actual.
Los ejemplos de este apartado se basan en un directorio con los archivos siguientes:
[nicolas]$ ls -a
. banco azul arch1 arch2.4 .os rosado
.. blanco ejemplos arch2 arch2.7 redonda rojo
El asterisco: *
Cuando el Bash encuentra este carcter en la lnea de comandos, lo sustituye por una
cadena de caracteres (que puede ser de longitud nula) para enumerar todos los nombres
de archivo que corresponden al motivo en el directorio actual.
As, el motivo r*o se reemplaza por todos los nombres de archivo que empiezan por el
carcter r y terminan con el carcter o:
[nicolas]$ ls r*o
rosado rojo
El signo * reemplaza cualquier carcter en el motivo, excepto el . (punto) en primera
posicin en el nombre de archivo; por ejemplo, el motivo *s corresponde al archivo
ejemplos, pero no al archivo .os:
[nicolas]$ ls *s
ejemplos

La exclusin del primer punto por el carcter genrico * evita la supresin de archivos
ocultos con el comando rm *; el objetivo de los nombres de archivo que empiezan por
un punto es precisamente ocultar los archivos de los que uno no se quiere preocupar
(pero sin suprimirlos).
Un motivo puede estar compuesto por varios caracteres genricos; repitiendo el
asterisco, se obtiene, por ejemplo, *e* que concuerda con todos los archivos con al
menos una e en su nombre:
[nicolas]$ ls *e*
ejemplos redonda
Finalmente, si el shell no encuentra correspondencias con el motivo entre los nombres
de archivo presentes en el directorio actual, dicho motivo se transmite tal cual al
comando:
[nicolas]$ ls *zork
ls: *zork: No such file or directory
En este ltimo ejemplo, ningn nombre de archivo se corresponde con el motivo *zork;
el comando ls recibe el motivo como argumento y lo devuelve en su mensaje de error.

Esta observacin es vlida tambin para los caracteres genricos siguientes.
El signo de interrogacin: ?
Como el signo *, el shell sustituye el carcter genrico ? por cualquier carcter, excepto
el punto, al principio de un nombre de archivo. A diferencia del asterisco, el signo de
interrogacin se reemplaza por un carcter (y slo uno), y no por una cadena de
cualquier longitud.
As, el motivo ro?o corresponde a todos los nombres de archivo de exactamente cuatro
caracteres que empiezan por ro y terminan por o:
[nicolas]$ ls ro?o
rojo
De nuevo, este carcter genrico puede combinarse con otros en el mismo motivo:
?a? Nombre de archivo de tres letras con una a en segunda posicin.
*a? Nombre de archivo que presenta una a en penltima posicin.
??a*b?
Nombre de archivo que presenta una a en tercera posicin y una b en
penltima posicin.
Los corchetes: [ ]
La sintaxis [lista_de_caracteres] en un motivo representa un carcter (y slo uno) entre
los propuestos en la lista. Por ejemplo, [abc] se reemplaza por una a, una b o una c.

Todo carcter situado entre los corchetes forma parte de la lista de posibles caracteres;
no hay, pues, espacios entre los corchetes, a menos que el espacio sea un carcter
posible de la lista.
Para listar todos los archivos cuyo nombre contiene una o o una l en segunda posicin,
se usa el motivo ?[ol]*:
[nicolas]$ ls ?[ol]*
rosado rojo blanco
Es posible simplificar listas de caracteres consecutivos (segn el orden de la tabla
ASCII) separando el primero y el ltimo carcter de la lista con un - (guin). La sintaxis
[b-e] equivale a [bcde]:
[nicolas]$ ls [b-e]*
banco blanco ejemplos

Para especificar el carcter - como elemento de la lista, se inserta al principio o al fin de
la lista: [ab-] corresponde a a, a b o a -.
Al ser las minsculas y las maysculas distintas en Linux, para representar todas las
letras posibles del alfabeto en un nombre de archivo, se usa la sintaxis [a-zA-Z].
Si el primer carcter de la lista es un signo de exclamacin ! o un acento circunflejo , la
correspondencia se hace con cualquier carcter que no est en la lista; para listar todos
los archivos cuyo nombre no empiece por a, ni par un r:
[nicolas]$ ls [!ar]*
banco blanco ejemplos
[nicolas]$ ls [ar]*
banco blanco ejemplos

Para especificar el carcter ! o como elemento de la lista, se inserta en cualquier lugar
de la lista salvo al principio: [a!b] corresponde a a, a ! o a b.
Finalmente, existen ciertas clases de caracteres predefinidas. Sus nombres son bastante
explcitos: [:alpha:], [:digit:], ... por ejemplo, [[:alnum:]] corresponde a [0-9A-Za-z],
con la diferencia de que el ltimo caso depende de la codificacin ASCII, mientras que
el primero incluye todas las letras del idioma configurado en el sistema.
Por ejemplo, los caracteres acentuados forman parte de la clase [:alnum:] en espaol,
pero no en lenguaje internacional C ANSI:
[nicolas]$ ls
espacio satlite
[nicolas]$ echo $LANG
sp_SP
[nicolas]$ ls [[:alnum:]]*
espacio satlite
[nicolas]$ LANG=C
[nicolas]$ ls [[:alnum:]]*
espacio

Los corchetes en los nombres de clases forman parte integral del nombre simblico;
deben aadirse, pues, a los corchetes que enmarcan la lista.
Las principales clases son:
[:alnum:]
Corresponde a los caracteres alfabticos y numricos. Equivale a [A-Za-z0-9].
[:alpha:]
Corresponde a los caracteres alfabticos. Equivale a [A-Za-z].
[:digit:]
Corresponde a las cifras (decimales). Equivale a [0-9].
[:graph:]
(caracteres grficos visibles). Corresponde a los caracteres comprendidos entre ASCII
33 y ASCII 126. Es idntico a [:print:], presentado anteriormente, pero excluye el
carcter espacio.
[:lower:]
Corresponde a los caracteres alfabticos en minscula. Equivale a [a-z].
[:print:]
(caracteres imprimibles). Corresponde a los caracteres comprendidos entre ASCII 32 y
ASCII 126. Equivale a [:graph:], presentado anteriormente, pero se aade el carcter
espacio.
[:space:]
Corresponde a cualquier espacio en blanco (espacio y tabulacin horizontal).
[:upper:]
Corresponde a cualquier carcter alfabtico en maysculas. Equivale a [A-Z].
[:xdigit:]
Corresponde a las cifras hexadecimales. Equivale a [0-9A-Fa-f].
Para todos los nombres de archivo cuyo ltimo carcter es una cifra, se obtiene:
[nicolas]$ ls *[[:digit:]]
arch1 arch2 arch2.4 arch2.7
Las llaves: {}
A la manera de los corchetes que ya hemos visto para la creacin de listas de caracteres,
las llaves permiten especificar listas de motivos separadas por una coma en un motivo
de reemplazo. La sintaxis {abc,def} se reemplaza por la cadena abc o la cadena def.
Por ejemplo, {az,ro}* corresponde a todos los nombres de archivo que empiezan por la
cadena az o la cadena ro:
[nicolas]$ ls {az,ro}*
azul rosado rojo
Las cadenas de caracteres presentes entre llaves pueden ser, a su vez, motivos
compuestos de caracteres genricos:
[nicolas]$ ls {*ro[sj]*,?a*}
banco rosado rojo
Operadores de correspondencia extendida
Si la opcin extglob del shell se ha activado con el comando shopt, se reconocen varios
operadores de correspondencia extendida. En la descripcin siguiente, una
"lista_motivo" es una lista de uno o ms motivos separados por |. Los motivos
compuestos se indican entre parntesis y van precedidos por un operador que define el
nmero de instancias:
?(lista_motivo)
Corresponde a cero o una instancia de los motivos indicados.
*(lista_motivo)
Corresponde a cero o ms instancias de los motivos indicados.
+(lista_motivo)
Corresponde a una o ms instancias de los motivos indicados.
@(lista_motivo)
Corresponde a exactamente una instancia de los motivos indicados.
!(lista_motivo)
Corresponde a todo salvo a los motivos indicados.
Por ejemplo, +([[:digit:]])* corresponde a todos los archivos cuyo nombre empieza por
al menos una cifra.
Caracteres de cita
Los caracteres de cita se utilizan para modificar la interpretacin del shell de otros
caracteres. As, un carcter especial puede interpretarse literalmente, y no de forma
simblica.
Esto permite que ciertos programas y utilidades reinterpreten o extiendan los caracteres
especiales pasados en la lnea de comandos sin que los interprete el propio shell.

Los comandos grep y find,descritos ms adelante, usan en particular caracteres de cita.
Los apstrofes:
El shell ignora todos los caracteres especiales escritos entre apstrofes.
Por ejemplo:
[nicolas]$ echo variable $HOME y asterisco *
variable /home/nicolas y asterisco banco blanco azul ejemplos arch1
arch2 arch2.4 arch2.7 redonda rosado rojo
[nicolas]$ echo variable $HOME y asterisco *
variable $HOME y asterisco *
Las comillas: "
Como ocurre con los apstrofes, todos los caracteres especiales entre comillas se
ignoran, exceptuando $, ` (acento abierto) y \:
[nicolas]$ echo "variable $HOME y asterisco *"
variable /home/nicolas y asterisco *
La barra invertida: \
Todo carcter que sigue a la barra invertida pierde su significado especial:
[nicolas]$ echo \variable \$HOME y asterisco \*
variable $HOME y asterisco *
La barra invertida no produce ningn efecto si el carcter siguiente no es un carcter
especial.
El uso de los caracteres de cita permite trabajar con archivos que tienen nombres poco
convencionales. Una vez creados, hay que usarlos con mucha prudencia, especialmente
a la hora de borrar; as:
[nicolas]$ ls
banco blanco azul ejemplos arch1 arch2 arch2.4 arch2.7 redonda
rosado rojo
[nicolas]$ touch \* "dos palabras"
[nicolas]$ ls
* blanco dos palabras arch1 arch2.4 redonda rojo
banco azul ejemplos arch2 arch2.7 rosado
[nicolas]$ ls *
* blanco dos palabras arch1 arch2.4 redonda rojo
banco azul ejemplos arch2 arch2.7 rosado
[nicolas]$ ls *
[nicolas]$ ls dos palabras
ls: dos: No such file or directory
ls: palabras: No such file or directory
[nicolas]$ ls dos palabras
dos palabras
[nicolas]$ ls dos\ palabras
dos palabras
[nicolas]$ rm *
[nicolas]$ ls
[nicolas]$
Finalmente, estos caracteres de cita inhiben el significado de la tecla [Intro] que
caracteriza el fin del comando; por ello se obtiene la presentacin del prompt secundario
$PS2 cuando falta una comilla o un apstrofe de cierre, o bien cuando se coloca una
barra invertida al final de la lnea:
[nicolas]$ echo "va
> le"
va
le
[nicolas]$ ec\
> ho v\
> al\
> e
vale
edirecciones
1. Descriptores de archivos
Cualquier proceso ejecutado en Linux se asocia a tres descriptores de archivos que
permiten administrar las entradas, las salidas y los errores estndar.

Se llama descriptor de archivo a un puntero hacia un archivo. Un programa que accede a
un archivo para leer o escribir en l datos, primero tiene que asociar (mediante una
llamada al sistema) un descriptor de archivo al archivo; a continuacin, usa el descriptor
como punto de entrada (lectura) o de salida (escritura) para los datos que debe tratar.
Se llama "entradas" a los parmetros tratados por el proceso, y "salidas", a los
resultados obtenidos. Los "errores" corresponden a un resultado proveniente de un error
de tratamiento por parte del proceso. Los tres descriptores de archivo correspondientes
tambin se identifican por un nmero: 0 para la entrada, 1 para la salida y 2 para el
error:

Por ejemplo, si se considera la operacin "8 dividido por 2", un proceso que efecte este
clculo presentar en entrada la operacin que se debe realizar, "8/2", y en salida el
resultado, "4":

Si ahora se da la operacin "5/0" al mismo proceso, devolver en error un mensaje que
indica que no se permite una divisin por cero:

Los dispositivos en Linux se representan por archivos en el directorio /dev, y los tres
descriptores de archivo asociados de modo predeterminado a un proceso son:
el teclado como entrada estndar para que el usuario pueda escribir los datos y
parmetros que se deben tratar;
el terminal en salida estndar para mostrar los resultados del comando;
el terminal como error estndar para que el usuario sea informado de que se ha
producido un error de tratamiento.
Estos descriptores pueden redefinirse; se llama a esta operacin "redireccin".
2. Redireccin de la entrada estndar
Para redirigir la entrada estndar de un proceso de modo que no trate los datos desde el
teclado, sino desde el contenido de un archivo, se usa el carcter < seguido del nombre
del nuevo archivo al que debe apuntar el descriptor de archivo de entrada.

La entrada de un comando finaliza cuando todos los datos del archivo correspondiente
se han ledo; cuando la entrada es el teclado (predeterminado, sin redireccin), se puede
notificar el fin de la entrada enviando el carcter no imprimible EOF (End Of File). Hay
que pulsar la combinacin de teclas [Ctrl]+[d] en una lnea vaca para transmitir este
carcter al proceso con el fin de que pueda terminar su tratamiento.
Para el ejemplo siguiente, el comando wc -que se ha estudiado en un captulo anterior-
debe redefinirse primero ms precisamente:
Seguido de uno o ms argumentos, el comando wc devuelve en su salida el
nmero de lneas, palabras y caracteres contenidos en cada archivo.
Sin argumentos, el comando wc muestra en la salida el nmero de lneas,
palabras y caracteres recibidos en la entrada.
Este comando puede emplearse, pues, de diversas maneras:
[nicolas]$ wc
esta frase se escribe desde el teclado
y el comando slo finalizar cuando
reciba el carcter de fin de archivo (EOF)
mediante la combinacin de teclas Ctrl + d
pulsar Ctrl + d
4 29 162
[nicolas]$ wc /etc/passwd
30 43 1340 /etc/passwd
[nicolas]$ wc < /etc/passwd
30 43 1340

Los espacios alrededor del signo de redireccin en la lnea de comandos no son
obligatorios, pero mejoran la legibilidad. Esto vale tambin para las redirecciones de la
salida y error.
Una redireccin no se considera como un argumento del comando; el shell es quien
efecta las redirecciones de los descriptores de archivo previamente al interpretar la
lnea de comandos. En el ejemplo anterior, el nombre del archivo no se muestra en la
redireccin porque el comando wc no conoce el archivo /etc/passwd; desde el punto de
vista del comando, la primera y la tercera llamada al comando son equivalentes: los
datos que se deben tratar se encuentran en la entrada del proceso.
3. Redireccin de la salida estndar
La redireccin de la salida estndar permite escribir el resultado de un comando en un
archivo en lugar de mostrarlo en la pantalla. Para ello, hay que colocar al final de la
lnea de comandos el carcter > seguido del nombre de archivo en el que se escribir el
resultado del comando:
[nicolas]$ echo vale
vale
[nicolas]$ echo vale > archtest
[nicolas]$ cat archtest
vale
El archivo de redireccin se crea si no existe. Si existe, su contenido lo borra la
redireccin. Para aadir la salida de un comando a un archivo sin borrar su contenido, se
duplica el carcter > en la redireccin:
[nicolas]$ who > archout
[nicolas]$ date > archout
[nicolas]$ cat archout
lun jun 28 22:05:49 CEST 2004
[nicolas]$ who > archout
[nicolas]$ date >> archout
[nicolas]$ cat archout
francisco vc/1 Jun 28 22:05
nicolas pts/0 Jun 28 22:04 (192.168.200.1)
lun jun 28 22:05:58 CEST 2004

Si el signo de redireccin se duplica y el archivo especificado de salida no existe, ste se
crea como en una redireccin simple.
4. Redireccin del error estndar
La redireccin del error estndar se basa en el mismo principio que los dos anteriores;
en este caso, se usa 2> para introducir el archivo de destino de los mensajes de error.
A menudo es mejor suprimir la presentacin de los mensajes de error conocidos. Por
ejemplo, para listar los archivos presentes en el sistema, hemos visto que el comando ls
-R / recorre todo el rbol. Sin embargo, aparecen mensajes de error porque el usuario
normal no tiene acceso a ciertos directorios; entonces se redirige la salida de errores al
archivo especial /dev/null en el que todos los datos escritos se destruyen
automticamente:
[nicolas]$ ls -R / 2>/dev/null
Como en la redireccin de salida, hay que recordar que debe duplicarse el signo > para
agregar los datos enviados por el comando al final del archivo sin borrar su contenido:
[nicolas]$ ls glurp 2> archerr
[nicolas]$ vale 2> archerr
[nicolas]$ cat archerr
-bash: vale: command not found
[nicolas]$ ls glurp 2> archerr
[nicolas]$ vale 2>> archerr
[nicolas]$ cat archerr
ls: glurp: No such file or directory
-bash: vale: command not found
5. Redirecciones combinadas
Se puede redirigir la entrada, la salida y el error simultneamente:
comando < archin > archout 2> archerr
[nicolas]$ ls
blanco azul amarillo marrn out rojo verde violeta
[nicolas]$ ls azul verde naranja rojo > archout 2> archerr
[nicolas]$ cat archout
azul
rojo
verde
[nicolas]$ cat archerr
ls: naranja: No such file or directory

La salida del comando ls es ligeramente distinta cuando est redirigida: los nombres
listados estn presentes en lneas distintas. Esta modificacin se justifica por la
simplificacin del tratamiento de este tipo de datos: una lnea equivale a un archivo
listado.
Por el contrario, dos descriptores de archivo diferentes no pueden apuntar
simultneamente a un solo archivo, ni siquiera para redirigir todas las salidas estndar
(salida + error); esto es debido al uso de memorias intermedias de escritura en la gestin
de archivos por parte del ncleo de Linux.
El resultado puede ser inesperado, como en este ejemplo en el que el mensaje de error
ha sido destruido parcialmente por la lista de archivos:
[nicolas]$ ls azul verde naranja rojo
ls: naranja: No such file or directory
azul rojo verde
[nicolas]$ ls azul verde naranja rojo > archout 2> archout
[nicolas]$ cat archout
azul
rojo
verde
No such file or directory
La solucin consiste en redirigir uno de los descriptores de archivo a otro previamente
redirigido a un archivo. La sintaxis utilizada es n>&m donde n es el nmero del
descriptor para redirigir y m el nmero de aquel al que hay que enviar los datos:
[nicolas]$ ls azul verde naranja rojo > archout 2>&1
[nicolas]$ cat archout
ls: naranja: No such file or directory
azul
rojo
verde
O bien, de forma equivalente:
[nicolas]$ ls azul verde naranja rojo 2> archout 1>&2
[nicolas]$ cat archout
ls: naranja: No such file or directory
azul
rojo
verde
Sin embargo, el shell interpreta las redirecciones en la lnea de comandos de izquierda a
derecha. Su orden de escritura es, pues, importante, como se puede constatar en el
ejemplo siguiente: el error se ha redirigido a la salida, la cual an no haba sido
redirigida al archivo ficout:
[nicolas]$ ls azul verde naranja rojo 2>&1 > archout
ls: naranja: No such file or directory
[nicolas]$ cat archout
azul
rojo
verde
6. Ejemplos de redirecciones
Como en el comando wc, es necesario redefinir el comando cat de forma ms precisa
para comprender los ejemplos siguientes:
Seguido de uno o ms argumentos, el comando cat devuelve en la salida el
contenido de cada archivo.
Sin argumentos, el comando cat muestra en la salida los datos recibidos en su
entrada.

La mayora de los comandos de tratamiento de archivos funcionan con el mismo
principio: si un archivo se pasa como argumento, el tratamiento se efecta sobre su
contenido; si no, se trata la entrada del proceso.
Sin argumentos ni redireccin, cat repite las lneas entradas por teclado:
[nicolas]$ cat
las lneas se muestran dos veces
las lneas se muestran dos veces
porque la entrada por teclado se muestra en el terminal
porque la entrada por teclado se muestra en el terminal
al igual que la salida del comando
al igual que la salida del comando
pulsar Ctrl + d
Sin argumentos y con la salida redirigida, cat permite crear pequeos archivos de texto
rpidamente:
[nicolas]$ cat > arch1
esta forma de crear un archivo de texto con algunas
lneas se llama tambin "el editor del experto" porque no es
posible modificar una lnea una vez validada.
pulsar Ctrl + d
Sin redireccin con un nombre de archivo como argumento, o sin argumentos y con una
redireccin de entrada, cat muestra el contenido de un archivo:
[nicolas]$ cat arch1
esta forma de crear un archivo de texto con algunas
lneas se llama tambin "el editor del experto" porque no es
posible modificar una lnea una vez validada.
[nicolas]$ cat < arch1
esta forma de crear un archivo de texto con algunas
lneas se llama tambin "el editor del experto" porque no es
posible modificar una lnea una vez validada.
Sin argumentos y con redirecciones de entrada y salida, cat permite realizar una copia
de un archivo:
[nicolas]$ cat < arch1 > arch2
[nicolas]$ cat arch2
esta forma de crear un archivo de texto con algunas
lneas se llama tambin "el editor del experto" porque no es
posible modificar una lnea una vez validada.
Con varios argumentos y una redireccin de salida, cat concatena los archivos de los
argumentos en el archivo de la redireccin:
[nicolas]$ cat > arch3
aaaaaaaaaaaaa
pulsar Ctrl + d
[nicolas]$ cat > arch4
bbbbbbbbbbbbb
pulsar Ctrl + d
[nicolas]$ cat arch3 arch4 > arch5
[nicolas]$ cat arch5
aaaaaaaaaaaaa
bbbbbbbbbbbbb
Todos estos ejemplos demuestran que, a partir del simple comando cat -que muestra en
su salida el contenido de archivos pasados como argumentos o su entrada a falta de
argumentos- y el uso de las redirecciones del shell, es posible implementar:
el eco de la salida del teclado en el terminal;
la visualizacin de archivos;
el editor bsico de archivos de texto;
la copia de archivos;
la concatenacin de archivos.
Los dems comandos de Linux pueden emplearse basndose en el mismo principio.
7. Los tubos
Mediante las redirecciones y comandos ya estudiados, ahora resulta fcil, por ejemplo,
contar el nmero de archivos presentes en el directorio siguiente:
[nicolas]$ ls
blanco azul amarillo marrn rojo verde violeta
El comando ls puede mostrar la lista de archivos presentes en el directorio en su salida,
mientras que el comando wc -l puede contar el nmero de lneas pasadas en su entrada.
[nicolas]$ ls > /tmp/lista
[nicolas]$ wc -l < /tmp/lista
7
[nicolas]$ rm /tmp/lista
rm: borrar archivo regular `/tmp/lista? y
Respecto a los descriptores de archivo, los comandos ls y wc se usan as:

La idea aqu es utilizar el archivo temporal /tmp/lista que se borra una vez obtenido el
resultado. Esto se puede hacer mediante los "tubos" ("pipes" en ingls), que permiten
enviar los datos de la salida estndar de un proceso a la entrada estndar de un segundo
proceso.
La sintaxis utilizada para materializar un tubo es la barra vertical | obtenida mediante la
combinacin de teclas [AltGr]+[1] en un teclado espaol:
[nicolas]$ ls | wc -l
7
El resultado se obtiene, en esta ocasin, con una sola lnea de comandos y un tubo:

Se pueden encadenar varios tubos en la misma lnea de comandos, pero slo el ltimo
comando del "pipeline" muestra un resultado en su salida estndar.
El comando tee permite consultar y guardar el resultado de un comando intermedio sin
romper la sucesin de tubos. Duplica los datos que recibe en la entrada, por una parte en
su salida estndar y por otra, en el archivo pasado como argumento.
Por ejemplo:
[nicolas]$ ls | tee /tmp/lista | wc -l
7
[nicolas]$ cat /tmp/lista
blanco
azul
amarillo
marrn
rojo
verde
violeta
Esquemticamente, a nivel de las entradas/salidas:

lias
El conjunto de redirecciones vistas en este captulo muestra la lgica de Unix en la
disponibilidad de herramientas atmicas (dedicadas a una sola funcin). stas pueden
asociarse para formar comandos ms complejos y adaptados a las necesidades del
usuario.
Sin embargo, ciertas lneas de comandos pueden alargarse rpidamente y un uso
frecuente de esta sintaxis pronto puede resultar desagradable. Pero es posible simplificar
el trabajo del usuario definiendo alias de comandos.
Un alias est compuesto por un nombre (generalmente simple) que ser reemplazado
por un comando (generalmente complejo o largo).
La lista de alias existentes puede conseguirse ejecutando el comando alias sin
argumentos:
[nicolas]$ alias
alias cd..=cd ..
alias cp=cp -i
alias d=ls
alias df=df -h -x supermount
alias du=du -h
alias kde=xinit /usr/bin/startkde
alias l=ls
alias la=ls -a
alias ll=ls -l
alias ls=ls -F --color=auto
alias lsd=ls -d */
alias mc=. /usr/share/mc/bin/mc-wrapper.sh
alias md=mkdir
alias mv=mv -i
alias p=cd -
alias rd=rmdir
alias rm=rm -i
alias s=cd ..
Se llama a un alias como a cualquier otro comando:
[nicolas]$ pwd
/home/nicolas
[nicolas]$ s
[nicolas]$ pwd
/home
La sintaxis de definicin de un nuevo alias es: alias nombre=comando.
El comando unalias permite suprimir un alias: unalias nombre.
Por ejemplo:
[nicolas]$ alias lw
-bash: alias: lw: not found
[nicolas]$ alias lw=ls | wc -l
[nicolas]$ alias lw
alias lw=ls | wc -l
[nicolas]$ lw
8
[nicolas]$ unalias lw
[nicolas]$ lw
-bash: lw: command not found
Si un alias tiene el mismo nombre que un comando, se interpreta el alias. Para forzar la
ejecucin de un comando y no de un posible alias, hay que escribir antes de su nombre
el carcter \ o utilizar el comando command:
[nicolas]$ alias pwd
-bash: alias: pwd: not found
[nicolas]$ pwd
/home/nicolas
[nicolas]$ alias pwd=echo directorio actual: $PWD
[nicolas]$ pwd
directorio actual: /home/nicolas
[nicolas]$ \pwd
/home/nicolas
[nicolas]$ command pwd
/home/nicolas
Se puede suprimir todos los alias con la opcin -a del comando unalias:
[nicolas]$ unalias -a
[nicolas]$ alias
Condiciones generales de uso
Copyright - Editions ENI
Ejecucin de comandos
Los comandos escritos por el usuario pueden ser de diferentes naturalezas:
alias;
comando interno;
comando externo.
Comandos internos del shell
Se califican como internos los comandos integrados en el shell. Su ejecucin no genera
subprocesos.
Los comandos internos se componen esencialmente de herramientas que permiten
modificar el entorno del shell: cambio del directorio actual (cd), definicin de variables
(set, unset, etc.) y de alias (alias, unalias), estructuras de control (if, for, while, etc.),
etc.
La lista exhaustiva de comandos internos incluidos en el shell Bash es: :, ., alias, bg,
bind, break, builtin, case, cd, command, continue, declare, dirs, disown, echo,
enable, eval, exec, exit, export, fc, fg, for, getopts, hash, help, history, if, jobs, kill,
let, local, logout, popd, pushd, pwd, read, readonly, return, set, shift, shopt, source,
suspend, test, times, trap, type, typeset, ulimit, umask, unalias, unset, until, wait,
while.

La pgina del manual de Bash (man bash) detalla los comandos internos que no se
estudian en esta obra.
Comandos externos
Los comandos externos agrupan todos los archivos ejecutables presentes en el sistema
de archivos. Su ejecucin genera un proceso hijo del shell que ha interpretado el
comando.
El archivo binario o el script asociado a un comando debe estar presente en uno de los
directorios listados por la variable de entorno $PATH. Si es preciso, el usuario deber
escribir la ruta (absoluta o relativa) del archivo para ejecutar el comando.
Si un comando externo tiene el mismo nombre que un comando interno del shell, se
interpretar este ltimo. La redundancia de ciertos comandos internos y externos
permite que el usuario llame a las mismas herramientas desde un shell distinto de Bash
si ste no posee dichas funcionalidades. Encontramos por ejemplo /bin/echo y /bin/pwd
como comandos externos.
1. type, whereis
El comando type permite determinar la naturaleza de los comandos pasados como
argumentos:
[nicolas]$ type echo ls cat
echo is a shell builtin
ls is aliased to `ls -F --color=auto
cat is /bin/cat
Cuando un mismo nombre se atribuye a un alias, un comando interno y un comando
externo, type indica la interpretacin que se har del comando:
[nicolas]$ alias pwd=echo directorio actual: $PWD
[nicolas]$ ls /bin/pwd
/bin/pwd
[nicolas]$ pwd
directorio actual: /home/nicolas
[nicolas]$ type pwd
pwd is aliased to `echo directorio actual: $PWD
[nicolas]$ unalias pwd
[nicolas]$ type pwd
pwd is a shell builtin
[nicolas]$ pwd
/home/nicolas
En la misma lnea, el comando whereis permite localizar rpidamente un
comando externo y los archivos de ayuda y de fuentes asociados si estn presentes en el
sistema:
[nicolas]$ whereis echo ls cat
echo: /bin/echo /usr/share/man/man1/echo.1.bz2 /usr/share/man/man3/
echo.3x.bz2
ls: /bin/ls /usr/share/man/man1/ls.1.bz2
cat: /bin/cat /usr/share/man/man1/cat.1.bz2

El comando whereis no indica, en ningn caso, si existe un alias o un comando interno
con el mismo nombre.
ustitucin de comandos
La sustitucin de comandos consiste en recuperar la salida de un comando en la lnea de
comandos. Las salidas de comandos pueden utilizarse para la asignacin de una variable
o como argumento de otro comando.
El shell efecta las sustituciones de comandos antes de interpretar la lnea de comandos
en su totalidad.
La sintaxis clsica de una sustitucin de comandos utiliza el apstrofe invertido (o
acento abierto, o "back quote") obtenido con la tecla [`]+[espacio] en un teclado
espaol:
[nicolas]$ whoami
nicolas
[nicolas]$ echo "mi login es `whoami`"
mi login es nicolas
[nicolas]$ milogin=`whoami`
[nicolas]$ echo "mi login es $milogin"
mi login es nicolas

La ventaja de asignar la salida de un comando a una variable radica en poder reutilizar
varias veces el resultado evaluando una sola vez el comando.
La segunda sintaxis admitida para la sustitucin de comandos es $(). La ventaja de esta
sintaxis reside en poder anidar las sustituciones de comandos:
[nicolas]$ echo "contenido de mi directorio: $(ls /home/$(whoami))"
contenido de mi directorio: blanco
azul
amarillo
marrn
rojo
verde
violeta
Opciones del shell Bash
El comportamiento del shell Bash puede modificarse con la activacin de opciones.
La sintaxis general, para activar una opcin, es: set -o opcin. Para desactivar una
opcin, utilice set +o opcin.

Aunque parezca poco lgico -porque el signo menos es el carcter previsto inicialmente
para introducir las opciones de comandos en Unix- aqu se usa el + para la
desactivacin.
El estado de las distintas opciones del shell puede visualizarse mediante el comando set
-o solo:
[nicolas]$ set -o
allexport off
braceexpand on
emacs on
errexit off
hashall on
histexpand on
history on
ignoreeof off
interactive-comments on
keyword off
monitor on
noclobber off
noexec off
noglob off
nolog off
notify off
nounset off
onecmd off
physical off
posix off
privileged off
verbose off
vi off
xtrace off
Se describe a continuacin el significado de las opciones interesantes en el marco de
esta obra.
allexport
El shell exporta automticamente toda variable creada o modificada sin emplear el
comando export.
Esta opcin puede activarse tambin con el comando set -a.
emacs
La edicin de la lnea de comandos sigue el estilo del programa de edicin Emacs.
ignoreeof
Idntico a la definicin de la variable de entorno IGNOREEOF=10.
noclobber
Con esta opcin, el shell no borra un archivo existente en una redireccin simple; para
forzarlo, hay que emplear la sintaxis >|:
[nicolas]$ touch archtest
[nicolas]$ echo texto > archtest
[nicolas]$ set -o noclobber
[nicolas]$ echo texto > archtest
-bash: archtest: cannot overwrite existing file
[nicolas]$ echo texto >| archtest
Esta opcin puede activarse tambin con el comando set -C.
noglob
Desactiva la expansin de caracteres genricos:
[nicolas]$ echo *
blanco azul amarillo marrn rojo verde violeta
[nicolas]$ set -o noglob
[nicolas]$ echo *
*
Esta opcin puede activarse tambin con el comando set -f.
nounset
El shell considera las variables inexistentes como errores en la expansin de los
parmetros. Si se intenta desarrollar una variable inexistente, el shell muestra un
mensaje de error:
[nicolas]$ echo $vale

[nicolas]$ set -o nounset
[nicolas]$ echo $vale
-bash: vale: unbound variable
Esta opcin puede activarse tambin con el comando set -u.
verbose
Muestra las lneas de comandos a medida que se leen; muy til para la depuracin de
scripts del shell:
[nicolas]$ echo $PWD
/home/nicolas
[nicolas]$ set -o verbose
[nicolas]$ echo $PWD
echo $PWD
/home/nicolas
Esta opcin puede activarse tambin con el comando set -v.
vi
La edicin de la lnea de comandos sigue el estilo del programa de edicin Vi.
xtrace
Tras la expansin de cada comando simple, el shell muestra el valor de la variable de
entorno PS4 seguida por el comando y sus argumentos desarrollados; como la opcin
verbose, xtrace resulta muy til para la depuracin de scripts del shell:
[nicolas]$ echo $PWD
/home/nicolas
[nicolas]$ set -o xtrace
[nicolas]$ echo $PWD
+ echo /home/nicolas
/home/nicolas
[nicolas]$ PS4=DEPURACION >>>
+ PS4= DEPURACION >>>
[nicolas]$ echo $PWD
DEPURACION >>> echo /home/nicolas
/home/nicolas
Esta opcin puede activarse tambin con el comando set -x.
Introduccin
Este captulo explica cmo automatizar la ejecucin de trabajos a partir de los
elementos estudiados anteriormente. Las funcionalidades abordadas permitirn al
usuario crear sus propios scripts de shell, programas desarrollados en lenguaje shell.
Adems, el lector podr comprender y personalizar los muchos scripts ya
proporcionados con el sistema Linux
Scripts Shell
Un script Bash es un archivo de texto que contiene una serie de comandos como los
ejecutados en la lnea de comandos.
Toda lnea de comandos vlida puede ser objeto de un script de shell para un
tratamiento por lotes ("batch"). Y viceversa, todo el cdigo escrito en un script Bash
puede escribirse directamente en la lnea de comandos.
En este ejemplo, el archivo de script se llama prog.sh:
[nicolas]$ cat prog.sh
date
whoami
var=12
echo $var
1. Llamada y ejecucin
Las modificaciones del entorno del shell que llama dependen de la forma como se llama
al script shell.
bash prog.sh
La primera forma de llamar a un script shell consiste en lanzar un nuevo bash con el
nombre del script como argumento. Este nuevo shell trata las instrucciones contenidas
en el archivo como si se hubieran escrito en el teclado.
De ello resulta la creacin de un subproceso bash que termina automticamente al
finalizar la ejecucin del script.
[nicolas]$ cat prog.sh
date
whoami
var=12
echo $var
[nicolas]$ echo $var

[nicolas]$ bash prog.sh
mi jun 30 06:40:40 CEST 2008
nicolas
12
[nicolas]$ echo $var
Toda modificacin del entorno -como el cambio de directorio o la definicin de
variable- slo interviene en el subshell creado temporalmente. No se modifica el shell
inicial.
Se puede representar este tipo de script as:


El primer shell iniciado en un terminal (llamado shell de conexin) lleva como prefijo
un guin en la lista de procesos. Por esta razn, su nombre es -bash en el esquema
anterior, mientras que el subshell se llama bash.
El shell bash es un subproceso del shell de conexin -bash. Asimismo, los comandos
externos date y whoami son subprocesos del shell bash mientras que la asignacin de
la variable var y su visualizacin son comandos internos del shell y no generan
subprocesos. Al final, el entorno del shell -bash no se ha modificado y la variable var
no est definida.
bash prog.sh
Esta forma de iniciar un script del shell utiliza implcitamente un subshell para ejecutar
las instrucciones contenidas en el archivo. El resultado de la ejecucin es el mismo que
en la sintaxis anterior:

Por el contrario, si el nombre del script se trata como un comando en la lnea de
comandos, es preciso:
que estn otorgados los permisos de ejecucin para el archivo (chmod u+x
prog.sh por ejemplo);
que el archivo se encuentre en un directorio listado por la variable de entorno
$PATH o que su ruta se precise en la lnea de comandos (con ./ por ejemplo, si
se encuentra en el directorio actual).
El shell llamado implcitamente para ejecutar el script es el shell predeterminado del
usuario, esto es, el Bash en Linux. Si el script lo ejecuta otro usuario que no tiene el
Bash como shell predeterminado, el script puede generar errores. Para imponer un
intrprete y no otro, existe un comentario especial (llamado shebang) que hay que
colocar en la primera lnea del script #! seguido de la ruta al intrprete utilizado. Se
obtiene:
[nicolas]$ cat prog.sh
#!/bin/bash
date
whoami
var=12
echo $var
[nicolas]$ prog.sh
-bash: prog.sh: command not found
[nicolas]$ ./prog.sh
-bash: ./prog.sh: Permission denied
[nicolas]$ chmod u+x prog.sh
[nicolas]$ ./prog.sh
mer jun 30 08:06:33 CEST 2008
nicolas
12
[nicolas]$ echo $var
. prog.sh
El comando interno del shell . (punto) indica al bash actual que interprete las
instrucciones contenidas en el archivo pasado como argumento.

El comando . (punto) es idntico al comandointerno del shell source.
En este caso, el entorno del shell de conexin se modifica segn el cdigo del script que
ejecuta:
[nicolas]$ cat prog.sh
date
whoami
var=12
echo $var
[nicolas]$ echo $var

[nicolas]$ . prog.sh
mi jun 30 07:47:38 CEST 2008
nicolas
12
[nicolas]$ echo $var
12
Esta llamada puede representarse as:

exec ./prog.sh
Cuando el shell encuentra el comando interno exec, ejecuta el cdigo del comando
pasado como argumento en su lugar y termina al finalizar la ejecucin de ste.
En el caso de un script pasado como argumento, el shell Bash actual ejecuta las
instrucciones contenidas en el archivo y termina al finalizar el script:


El argumento del comando exec debe ser un comando vlido, por lo que es necesario -
como en la sintaxis ./prog.sh- activar los permisos de ejecucin en el script e indicar su
ruta.
2. Mtodos de trabajo
La escritura de scripts de shell, como la de programas en otros lenguajes, debe seguir
ciertas reglas para producir un cdigo ms transportable y de fcil mantenimiento.
Nombre de los scripts
Aunque es tentador llamar a los archivos script o test cuando se empieza a escribir un
script del shell, no es recomendable reutilizar el nombre de un comando existente
porque la llamada a este nuevo programa en la lnea de comandos puede presentar
problemas.
El comando script escribe en un archivo toda la informacin que aparece en el terminal:
nicolas]$ script
El script ha empezado, el archivo es typescript
[nicolas]$ pwd
/home/nicolas
[nicolas]$ echo vale
vale
[nicolas]$ exit
exit
Script completado, el archivo es typescript
[nicolas]$ cat typescript
El script ha empezado el vie 02 jul 2008 23:08:24 CEST
[nicolas]$ pwd
/home/nicolas
[nicolas]$ echo vale
vale
[nicolas]$ exit
exit

Script completado el vie 02 jul 2008 23:08:39 CEST
El comando test se estudia ms adelante en este captulo.
Puede ser interesante agregar la extensin .sh a los nombres de los scripts del shell. Esto
permite reconocer fcilmente el tipo de archivo. Por otra parte, cuando un archivo de
este tipo se edita con VIM (Vi IMproved), la aplicacin sintctica de color
correspondiente al shell se activa automticamente.
Finalmente, es prudente crear los propios scripts del shell en el subdirectorio bin del
directorio personal. Este directorio suele estar presente en la lista de directorios de la
variable $PATH, lo que evita que el usuario indique la ruta cuando llama al script que
ha escrito:
[nicolas]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/usr/games:/home/nicolas/b
in
Uso de varios terminales
Los scripts del shell se escriben en un lenguaje interpretado, por lo que resulta fcil
probarlos a medida que se escriben.
En lugar de editar el script, guardarlo, salir del editor, ejecutar el script y volver a iniciar
el editor de texto varias veces seguidas, una permutacin entre diferentes terminales
aligerar el trabajo del programador.

Linux proporciona, de modo predeterminado, seis terminales virtuales de texto y una
consola grfica en la que se pueden iniciar tantos emuladores de terminal como sea
necesario.
Comentarios
Como en cualquier otro lenguaje de programacin, el uso de comentarios es muy
recomendable.
Todo lo que va tras el carcter # en la lnea de comandos es ignorado por el Bash salvo,
lgicamente, si va protegido por un carcer de cita.
Es bueno escribir al principio del script una serie de comentarios que indiquen:
el nombre del autor;
la fecha de creacin o de modificacin, con una descripcin de los cambios
realizados;
la descripcin general del script;
el uso o la manera de llamar al script con sus opciones y argumentos.
Opciones del shell y depuracin
Entre las opciones del shell estudiadas al final del captulo Shell Bash, es interesante
agregar, al principio del script del shell, durante la fase de depuracin:
set -o xtrace
set -o nounset
As, ser ms fcil rastrear la ejecucin del programa y se evitar llamar en el cdigo a
variables sin inicializar.
Cdigos de retorno
Todo comando en Linux devuelve un cdigo al terminar su ejecucin. Este cdigo
asegura el correcto desarrollo de la ejecucin: cero cuando el programa ha terminado
correctamente, diferente de cero en caso contrario.

El cdigo de retorno de un comando es un valor comprendido entre 0 y 255.
Un mismo comando puede devolver diferentes cdigos si su ejecucin termina mal, por
diversas razones. Por ejemplo, el comando cp puede fallar porque el archivo fuente no
existe, los permisos de escritura del directorio de destino son insuficientes, el sistema de
archivos est saturado, etc.
La variable especial $? contiene el cdigo de retorno del ltimo comando ejecutado:
[nicolas]$ pwd
/home/nicolas
[nicolas]$ echo $?
0
[nicolas]$ ls zorglub
ls: zorglub: No such file or directory
[nicolas]$ echo $?
1
[nicolas]$ echo $?
0
El ltimo cdigo de retorno es cero porque indica que el comando anterior (echo $?) se
ha llevado a cabo bien. Para reutilizar ulteriormente el cdigo de retorno de un
programa, hay que guardarlo en una variable:
[nicolas]$ ls zorglub
ls: zorglub: No such file or directory
[nicolas]$ cr=$?
[nicolas]$ pwd
/home/nicolas
[nicolas]$ echo $?
0
[nicolas]$ echo $cr
1
De modo predeterminado, el cdigo de retorno de un script del shell es el del ltimo
comando ejecutado antes de finalizar. Para cambiar este valor, se usa el comando exit en
el script del shell, con el cdigo de retorno deseado como argumento:
[nicolas]$ cat prog.sh
#!/bin/bash
pwd
[nicolas]$ ./prog.sh
/home/nicolas
[nicolas]$ echo $?
0
[nicolas]$ cat prog2.sh
#!/bin/bash
pwd
exit 2
[nicolas]$ ./prog2.sh
/home/nicolas
[nicolas]$ echo $?
2

Cuando el Bash encuentra el comando exit, termina el script del shell en cu
Encadenamiento de comandos
En lugar de escribir los comandos uno tras otro y esperar el fin de su ejecucin antes de
ejecutar el siguiente, es posible encadenar varios comandos en la misma lnea,
separndolos por punto y coma:
[nicolas]$ date
mi jun 30 14:14:29 CEST 2004
[nicolas]$ ps
PID TTY TIME CMD
4511 pts/1 00:00:00 bash
4613 pts/1 00:00:00 ps
[nicolas]$ date ; ps
mi jun 30 14:14:48 CEST 2004
PID TTY TIME CMD
4511 pts/1 00:00:00 bash
4624 pts/1 00:00:00 ps
Estos encadenamientos son prcticos cuando deben lanzarse sucesivamente varios
comandos largos, sin que el usuario tenga que intervenir.

Los espacios alrededor del ; en la lnea de comandos no son obligatorios, pero mejoran
la legibilidad.
En el encadenamiento cmd1 ; cmd2 ; cmd3, el comando cmd2 se ejecuta al terminar el
comando cmd1; igualmente, cmd3 se inicia cuando cmd2 ha terminado. Por el
contrario, no hay ningn vnculo entre estos tres comandos; es decir, la ejecucin de un
comando no est condicionada por el resultado (cdigo de retorno) del anterior.

En un script del shell, el punto y coma permite presentar varias instrucciones en una
misma lnea.
1. Ejecucin condicional
Para ejecutar el comando cmd2 slo si el comando cmd1 ha tenido xito, se separan
ambos con &&:
[nicolas]$ pwd && ls zorglub
/home/nicolas
ls: zorglub: No such file or directory
[nicolas]$ ls zorglub && pwd
ls: zorglub: No such file or directory
En el caso contrario, para ejecutar el comando cmd2 slo si el comando cmd1 termina
anormalmente, se separan ambos con ||:
[nicolas]$ pwd || ls zorglub
/home/nicolas
[nicolas]$ ls zorglub || pwd
ls: zorglub: No such file or directory
/home/nicolas
La ejecucin condicional se basa en el cdigo de retorno de los comandos.
Son tiles en fase de pruebas, los comandos true y false terminan respectivamente con
un cdigo de retorno de cero y uno:
[nicolas]$ true ; echo "ok"
ok
[nicolas]$ true && echo "ok"
ok
[nicolas]$ true || echo "ok"
[nicolas]$ false ; echo "ok"
ok
[nicolas]$ false && echo "ok"
[nicolas]$ false || echo "ok"
ok
[nicolas]$ true && false || echo "ko"
ok
[nicolas]$ true && false && echo "ok"
[nicolas]$ false || false && echo "ok"
[nicolas]$ false || false || echo "ok"
ok
Variables especiales
Ciertas variables son definidas por el shell y pueden ser referenciadas por el usuario en
los scripts del shell.
1. $$, $PPID
La variable especial $$ contiene el PID del shell que se est ejecutando, mientras que
$PPID (Parent Process ID) da el PID de su proceso padre:
[nicolas]$ cat prog.sh
#!/bin/bash
echo "mi PID: $$"
echo "mi PPID: $PPID"
[nicolas]$ echo $$
1223
[nicolas]$ echo $PPID
1222
[nicolas]$ ./prog.sh
mi PID: 1380
mi PPID: 1223
[nicolas]$ . ./prog.sh
mi PID: 1223
mi PPID: 1222
2. $0
La variable $0 contiene el nombre del script en curso de ejecucin tal como ha sido
llamado en la lnea de comandos:
[nicolas]$ cat prog.sh
#!/bin/bash
echo "mi nombre: $0"
[nicolas]$./prog.sh
mi nombre: ./prog.sh
[nicolas]$ /home/nicolas/prog.sh
mi nombre: /home/nicolas/prog.sh
3. $1, $2, $3, ...
Las variables $1, $2, $3, etc. representan los parmetros posicionales del shell, es decir,
los argumentos pasados al script en la lnea de comandos:
[nicolas]$ cat prog.sh
#!/bin/bash
echo "primer parmetro: $1"
echo "segundo parmetro: $2"
echo "tercer parmetro: $3"
[nicolas]$ ./prog.sh a b c
primer parmetro: a
segundo parmetro: b
tercer parmetro: c
[nicolas]$ ./prog.sh "a b" c
primer parmetro: a b
segundo parmetro: c
tercer parmetro:
Para referenciar los parmetros posicionales con un ndice superior a nueve, hay que
usar las llaves con objeto de evitar toda ambigedad sobre el nombre de la variable:
[nicolas]$ cat prog.sh
#!/bin/bash
echo "decimosegundo parmetro: $12"
echo "decimosegundo parmetro: ${12}"
[nicolas]$ ./prog.sh a b c d e f g h i j k l
decimosegundo parmetro: a2
decimosegundo parmetro: l
Comando shift
El comando shift n permite desplazar los parmetros posicionales n veces. Si no se
precisa, se considera igual a 1: $1 toma el valor de $2, $2 toma el valor de $3, y as
sucesivamente:
[nicolas]$ cat prog.sh
#!/bin/bash
echo " p1=$1 p2=$2 p3=$3 p4=$4 p5=$5 p6=$6"
echo "shift" ; shift
echo " p1=$1 p2=$2 p3=$3 p4=$4 p5=$5 p6=$6"
echo "shift 2 " ; shift 2
echo " p1=$1 p2=$2 p3=$3 p4=$4 p5=$5 p6=$6"
[nicolas]$ ./prog.sh a b c d e f
p1=a p2=b p3=c p4=d p5=e p6=f
shift
p1=b p2=c p3=d p4=e p5=f p6=
shift 2
p1=d p2=e p3=f p4= p5= p6=
4. $#
El nmero de parmetros posicionales se encuentra en la variable $#:
[nicolas]$ cat prog.sh
#!/bin/bash
echo "nmero de parmetros: $#"
[nicolas]$ ./prog.sh a b c
nmero de parmetros: 3
[nicolas]$ ./prog.sh "a b" c
nmero de parmetros: 2
5. $*, $@
Estas dos variables contienen el conjunto de parmetros posicionales pasados en la lnea
de comandos:
[nicolas]$ cat prog.sh
#!/bin/bash
echo "conjunto de parmetros con \$*: $*"
echo "conjunto de parmetros con \$@: $@"
[nicolas]$ ./prog.sh a b c
conjunto de parmetros con $*: a b c
conjunto de parmetros con $@: a b c

La diferencia entre estas dos variables escapa al marco de esta obra.
6. $LINENO
Esta variable es el nmero de lnea del script del shell donde aparece. Slo tiene sentido
dentro del script donde aparece y se usa especialmente en la fase de depuracin:
[nicolas]$ cat prog.sh
#!/bin/bash
echo "++++++++++ lnea nmero $LINENO ++++++++++"
echo "mi PID: $$"
echo "mi PPID: $PPID"

echo "++++++++++ lnea nmero $LINENO ++++++++++"
echo "primer parmetro: $1"
echo "segundo parmetro: $2"
echo "tercer parmetro: $3"

echo "++++++++++ lnea nmero $LINENO ++++++++++"
echo "decimosegundo parmetro: $12"
echo "decimosegundo parmetro: ${12}"

echo "++++++++++ lnea nmero $LINENO ++++++++++"
echo "nmero de parmetros: $#"

echo "++++++++++ lnea nmero $LINENO ++++++++++"
echo "conjunto de parmetros con \$*: $*"
echo "conjunto de parmetros con \$@: $@"
[nicolas]$ ./prog.sh a b c d e f g h i j k l
++++++++++ lnea nmero 2 ++++++++++
mi PID: 1455
mi PPID: 1223
++++++++++ lnea nmero 6 ++++++++++
primer parmetro: a
segundo parmetro: b
tercer parmetro: c
++++++++++ lnea nmero 11 ++++++++++
decimosegundo parmetro: a2
decimosegundo parmetro: l
++++++++++ lnea nmero 15 ++++++++++
nmero de parmetros: 12
++++++++++ lnea nmero 18 ++++++++++
conjunto de parmetros con $*: a b c d e f g h i j k l
conjunto de parmetros con $@: a b c d e f g h i j k l

Comando test
El comando test permite efectuar una serie de pruebas sobre los archivos, las cadenas de
caracteres, los valores aritmticos y el entorno de usuario.
Este comando tiene un cdigo de retorno igual a cero cuando el test es positivo, y
diferente de cero en caso contrario; esto permite utilizarlo en encadenamientos de
comandos con ejecucin condicional (&& y ||) o en las estructuras de control que
veremos ms adelante.
El comando test posee dos sintaxis: test expresin y [ expresin ], donde "expresin"
representa el test que se debe efectuar.

La segunda sintaxis ofrece una lectura ms fcil de las condiciones en las estructuras de
control.
Los espacios detrs del corchete de apertura y antes del corchete de cierre son
obligatorios en la sintaxis [ expresin ]. En general, todos los elementos de sintaxis del
comando test deben ir separados por al menos un espacio.
El resto del apartado presenta los principales operadores que componen las
expresiones de test del comando.
1. Test de archivos
-f archivo
Devuelve verdadero (cdigo de retorno igual a cero) si el archivo es de tipo
estndar (file):
[nicolas]$ test -f /etc/passwd
[nicolas]$ echo $?
0
[nicolas]$ [ -f /etc ] || echo "/etc no es un archivo estndar"
/etc no es un archivo estndar
-d archivo
Devuelve verdadero si el archivo es de tipo directorio (directory):
[nicolas]$ archivo=/etc
[nicolas]$ [ -d "$archivo" ] && echo "$archivo es un directorio"
/etc es un directorio

Cuando se comprueba el contenido de una variable, es preferible encerrarla entre
comillas para evitar un error en la sintaxis del comando test si la variable no est
definida.
-r archivo
Devuelve verdadero si el usuario tiene permiso para leer el archivo (read).
-w archivo
Devuelve verdadero si el usuario tiene permiso para modificar el archivo (write).
-x archivo
Devuelve verdadero si el usuario tiene permiso para ejecutar el archivo (o entrar en l
en el caso de un directorio) (execute).
-e archivo
Devuelve verdadero si el archivo existe (exist).
-s archivo
Devuelve verdadero si el archivo no est vaco (size):
[nicolas]$ touch arch1
[nicolas]$ echo "abc" > arch2
[nicolas]$ ls -l arch*
-rw-r--r-- 1 nicolas curso 0 jul 3 00:49 arch1
-rw-r--r-- 1 nicolas curso 4 jul 3 00:49 arch2
[nicolas]$ test -s arch1; echo $?
1
[nicolas]$ test -s arch2; echo $?
0
archivo1 -nt archivo2
Devuelve verdadero si archivo1 es ms reciente que archivo2 (newer than).
archivo1 -ot archivo2
Devuelve verdadero si archivo1 es ms antiguo que archivo2 (older than):
[nicolas]$ ls -l /etc/passwd /var/log/messages
-rw-r--r-- 1 root root 1364 may 26 23:08 /etc/passwd
-rw-r----- 1 root adm 29436 jul 3 00:01 /var/log/messages
[nicolas]$ [ /etc/passwd -nt /var/log/messages ]; echo $?
1
[nicolas]$ [ /etc/passwd -ot /var/log/messages ]; echo $?
0
archivo1 -ef archivo2
Devuelve verdadero si archivo1 es idntico a archivo2 (equal file), es decir, si los dos
archivos poseen el mismo inodo.
2. Test de cadenas de caracteres
-n cadena
Devuelve verdadero si la cadena de caracteres no es nula:
[nicolas]$ cadena=abc
[nicolas]$ [ -n $cadena ]; echo $?
0
[nicolas]$ [ -n "" ]; echo $?
1
-z cadena
Devuelve verdadero si la cadena de caracteres es nula:
[nicolas]$ cadena=abc
[nicolas]$ [ -z $cadena ]; echo $?
1
[nicolas]$ [ -z "" ]; echo $?
0
cadena1 = cadena2
Devuelve verdadero si las dos cadenas de caracteres son iguales:
[nicolas]$ test "abc" = "abc" ; echo $?
0
[nicolas]$ test "abc" = "Abc" ; echo $?
1
[nicolas]$ test "abc" = "abc " ; echo $?
1
cadena1 != cadena2
Devuelve verdadero si las dos cadenas de caracteres son diferentes.
3. Test aritmtico
valor1 -eq valor2
Devuelve verdadero si los dos valores aritmticos son iguales (equal):
[nicolas]$ valor1=32
[nicolas]$ [ $valor1 -eq 32 ]; echo $?
0
[nicolas]$ [ $valor1 -eq 23 ]; echo $?
1

Atencin: los tests de valores aritmticos se hacen con operadores de "texto" (-eq, -ne, -
le, etc.) mientras que los tests con cadenas de caracteres se realizan con operadores
aritmticos (=, !=).
valor1 -ne valor2
Devuelve verdadero si los dos valores aritmticos son diferentes (not equal).
valor1 -lt valor2
Devuelve verdadero si valor1 es estrictamente inferior a valor2 (lower than).
valor1 -le valor2
Devuelve verdadero si valor1 es inferior o igual a valor2 (lower or equal).
valor1 -gt valor2
Devuelve verdadero si valor1 es estrictamente superior a valor2 (greater than).
valor1 -ge valor2
Devuelve verdadero si valor1 es superior o igual a valor2 (greater or equal).
4. Test del entorno de usuario
-o opcin
Devuelve verdadero si la opcin del shell especificada est activa:
[nicolas]$ set -o
allexport off
braceexpand on
emacs on
errexit off
hashall on
histexpand on
history on
ignoreeof off
interactive-comments on
keyword off
monitor on
noclobber off
noexec off
noglob off
nolog off
notify off
nounset off
onecmd off
physical off
posix off
privileged off
verbose off
vi off
xtrace off
[nicolas]$ test -o emacs ; echo $?
0
[nicolas]$ test -o vi ; echo $?
1
5. Combinacin de expresiones
! expresin
Devuelve verdadero si la expresin es falsa, y viceversa:
[nicolas]$ [ -d /etc ] ; echo $?
0
[nicolas]$ [ ! -d /etc ] ; echo $?
1
expresin1 -a expresin2
-a (and) representa el "y lgico" entre expresin1 y expresin2:
[nicolas]$ valor=23
[nicolas]$ [ -d /etc -a $valor -eq 12 ] ; echo $?
1
El ejemplo anterior puede traducirse por: "si /etc es un directorio Y la variable $valor es
igual a 12".
expresin1 -o expresin2
-o (or) representa el "o lgico" entre expresin1 y expresin2:
[nicolas]$ valor=23
[nicolas]$ [ -d /etc -o $valor -eq 12 ] ; echo $?
0
El ejemplo anterior puede traducirse por: "si /etc es un directorio O la variable $valor es
igual a 12".
\( expresin \)
Se pueden agrupar varias expresiones para evitar toda ambigedad en el campo de
aplicacin de !, -a y -o.
[nicolas]$ valor=23
[nicolas]$ [ -d /etc -o $valor -eq 12 ] ; echo $?
0
[nicolas]$ [ ! \( -d /etc -o $valor -eq 12 \) ] ; echo $?
1

Las barras invertidas son necesarias para evitar una incorrecta interpretacin de los
parntesis por parte del shell.
Operaciones aritmticas
Como todo lenguaje de programacin, el Bash ofrece las herramientas necesarias para el
clculo aritmtico.
Para ello, existen principalmente los comandos expr, let y bc.
1. expr
expr es un antiguo comando externo del Bash y se presenta aqu sucintamente porque
se prefiere el comando let que ofrece una sintaxis menos restrictiva.
Este comando devuelve en su salida estndar el resultado de las expresiones aritmticas
pasadas como argumentos. Su sintaxis es expr expresin.
Todos los elementos de la expresin deben ir separados por al menos un espacio, y
ciertos operadores aritmticos llevan como prefijo una barra invertida para evitar toda
confusin con los caracteres especiales del shell.
Operadores aritmticos
Los operadores aritmticos son:
+: suma
-: resta
\*: multiplicacin
/: divisin entera
%: resto de la divisin entera o mdulo
\( y \): parntesis
Se utiliza generalmente una sustitucin de comandos para asignar el resultado del
comando expr a una variable. Se obtiene por ejemplo:
[nicolas]$ expr 2 + 3
5
[nicolas]$ expr 2 - 3

-1
[nicolas]$ expr 2 + 3 \* 4
14
[nicolas]$ expr \( 2 + 3 \) \* 4
20
[nicolas]$ resultado=$(expr 9 / 2)
[nicolas]$ echo $resultado
4
[nicolas]$ expr $resultado % 3
1
Operadores lgicos
Los operadores lgicos son:
\|: o lgico
\&: y lgico
\<: estrictamente menor
\<=: menor o igual
\>: estrictamente mayor
\>=: mayor o igual
=: igual
!=: desigual
El lgebra de Boole (base matemtica del razonamiento lgico) define el valor 1 como
"verdadero" y 0 como "falso"; por ello, cuando una expresin es verdadera, expr
devuelve 1 en su salida estndar con el cdigo de retorno 0. Por el contrario, cuando una
expresin es falsa, expr devuelve 0 en su salida estndar con el cdigo de retorno 1.
Por ejemplo:
[nicolas]$ expr 2 = 2
1
[nicolas]$ echo $?
0
[nicolas]$ expr 3 \> 6
0
[nicolas]$ echo $?
1
[nicolas]$ expr 1 \| 0
1
[nicolas]$ expr 1 \& 0
0
[nicolas]$ expr \( 2 != 3 \) \& \( 6 \<= 5 \)
0
2. let, (())
El comando let est integrado en el Bash y permite, como el anterior, efectuar
operaciones aritmticas.
Las ventajas de este comando respecto al anterior son:
Es ms rpido porque est integrado en el shell y no requiere la creacin de un
subproceso.
Los operadores utilizados son los que se emplean habitualmente en
matemticas y en otros lenguajes de programacin.
No es necesario insertar un espacio entre cada elemento en una expresin ni
preceder con una barra invertida ciertos operadores como *, < y >.
El trabajo con variables se simplifica porque es posible asignar una variable
dentro de una expresin, y los nombres de variables no van precedidos de un $.
Existe un mayor nmero de operadores para el clculo aritmtico.
Como en el caso del comando test, let puede llamarse de dos maneras: let expresin o
((expresin)). Adems, es posible especificar varias expresiones separadas por una
coma en una misma llamada al comando.
Operadores aritmticos
Los operadores aritmticos son:
+: suma
-: resta
*: multiplicacin
/: divisin entera
%: resto de la divisin entera o mdulo
**: potencia
=: asignacin
Veamos distintos ejemplos de operaciones aritmticas realizadas mediante el comando
let. La sintaxis $(()) se sustituye por el resultado de la expresin:
[nicolas]$ let var=2+3
[nicolas]$ echo $var
5
[nicolas]$ (( var = 2**3 ))
[nicolas]$ echo $var
8
[nicolas]$ echo $((9/4))
2
Operadores lgicos
Los operadores lgicos son:
&&: y lgico
||: o lgico
!: negacin lgica
<: estrictamente menor
<=: menor o igual
>: estrictamente mayor
>=: mayor o igual
==: igual
!=: desigual
Como en expr, el comando let es coherente con el lgebra de Boole:
[nicolas]$ (( var=1 && 0 ))
[nicolas]$ echo $?
1
[nicolas]$ echo $var
0
Otros operadores
El comando let tiene tambin otros operadores, como:
~: negacin binaria
>>: desplazamiento binario a la derecha
<<: desplazamiento binario a la izquierda
&: y binario
|: o binario
: o exclusivo binario
var++, var--, ++var, --var: postincremento, postdecremento, preincremento y
predecremento de variable. Se usa generalmente en las expresiones de las
estructuras de control, como los bucles.
Este ejemplo muestra el postincremento de la variable $i; la comparacin > se evala
antes del incremento de la variable:
[nicolas]$ (( i=0 ))
[nicolas]$ (( i++ > 2 )); echo "cdigo de retorno: $? - variable i:
$i"
cdigo de retorno: 1 - variable i: 1
[nicolas]$ (( i++ > 2 )); echo "cdigo de retorno: $? - variable i:
$i"
cdigo de retorno: 1 - variable i: 2
[nicolas]$ (( i++ > 2 )); echo "cdigo de retorno: $? - variable i:
$i"
cdigo de retorno: 1 - variable i: 3
[nicolas]$ (( i++ > 2 )); echo "cdigo de retorno: $? - variable i:
$i"
cdigo de retorno: 0 - variable i: 4
Comando read
El comando read interrumpe la ejecucin del shell hasta que el usuario introduzca una
cadena de caracteres (aunque sea vaca) en su entrada estndar.
Las palabras que componen la cadena de caracteres escrita por el usuario se asignan a
las variables cuyos nombres se pasan como argumentos al comando read:
[nicolas]$ read a b c
1 2 3
[nicolas]$ echo $a ; echo $b ; echo $c
1
2
3
Si hay ms palabras que variables, la ltima variable contendr el fin de la cadena de
caracteres. En el caso inverso, las variables suplementarias sern nulas:
[nicolas]$ read a b c
1 2 3 4
[nicolas]$ echo $a ; echo $b ; echo $c
1
2
3 4
[nicolas]$ read a b c
1 2
[nicolas]$ echo $a ; echo $b ; echo $c
1
2
Si se llama al comando read sin argumentos, la respuesta del usuario se asigna a la
variable de entorno $REPLY:
[nicolas]$ read
respuesta del usuario
[nicolas]$ echo $REPLY
respuesta del usuario
Se puede hacer que la entrada de una frase est precedida por la opcin -p (prompt) del
comando read:
[nicolas]$ read -p "edad del capitn? " edad
edad del capitn? 12
[nicolas]$ echo $edad
12
Este comando se utiliza generalmente en los scripts interactivos; veamos un ejemplo de
programa que pide la intervencin del usuario:
[nicolas]$ cat prog.sh
#!/bin/bash
# Se pide al usuario que escriba un nombre de archivo
read -p "escriba un nombre de archivo: " archivo
# Si el archivo no existe,
# se sale del script con el cdigo de retorno igual a 1
[ -e "$archivo" ] || exit 1
# Se dan las caractersticas del archivo:
[ -f "$archivo" ] && echo "archivo de tipo estndar"
[ -d "$archivo" ] && echo "archivo de tipo directorio"
[ -r "$archivo" ] && echo "permiso de lectura activo" \
|| echo "permiso de lectura desactivado"
[ -w "$archivo" ] && echo "permiso de modificacin activo" \
|| echo "permiso de modificacin desactivado"
[ -x "$archivo" ] && echo "permiso de ejecucin activo" \
|| echo "permiso de ejecucin desactivado"
[nicolas]$ ./prog.sh
escriba un nombre de archivo: zorglub
[nicolas]$ echo $?
1
[nicolas]$ ./prog.sh
escriba un nombre de archivo: /etc/passwd
archivo de tipo estndar
permiso de lectura activo
permiso de modificacin desactivado
permiso de ejecucin desactivado
[nicolas]$ echo $?
0
[nicolas]$ ./prog.sh
escriba un nombre de archivo: /root
archivo de tipo directorio
permiso de lectura desactivado
permiso de modificacin desactivado
permiso de ejecucin desactivado
[nicolas]$ echo $?
0
Condiciones generales de uso
Copyright - Editions ENI
Estructuras de control
Las estructuras de control permiten ejecutar uno o ms comandos segn el resultado de
una expresin.
La expresin proporcionada como condicin de la estructura puede ser cualquier
comando; el cdigo de retorno de este comando es determinante. Se usan
principalmente los comandos test o let como condiciones.
Slo presentaremos las instrucciones "if", "for" y "while".
1. La instruccin if
La instruccin "if" ejecuta una serie de comandos si la condicin indicada es verdad.
La sintaxis general es:
if condicin
then
serie de comandos si condicin verdadera else
serie de comandos si condicin falsa
fi
Cada palabra clave de la estructura (if, then, else y fi) debe encontrarse en una lnea
distinta; la clusula "else" no es obligatoria.
Veamos un ejemplo de uso:
[nicolas]$ cat prog.sh
#!/bin/bash
if [ "$1" = "vale" ]
then
echo "est bien"
else
echo "no est bien"
fi
[nicolas]$ ./prog.sh vale
est bien
[nicolas]$ ./prog.sh novale
no est bien
2. La instruccin for
El bucle "for" ejecuta la misma serie de comandos tantas veces como valores haya en
una lista dada; en cada iteracin, una variable contiene el valor considerado en esta lista.
Su sintaxis es:
for variable in lista de valores
do
serie de comandos
done
Por ejemplo:
[nicolas]$ cat prog.sh
#!/bin/bash
for var in a b c 1 5 4
do
echo "\$var=$var"
done
echo fin
[nicolas]$ ./prog.sh
$var=a
$var=b
$var=c
$var=1
$var=5
$var=4
fin
No es posible especificar lmites para la lista de valores como en otros lenguajes. Sin
embargo, el desarrollo de caracteres genricos en nombres de archivos en el directorio
actual resulta interesante:
[nicolas]$ cd /
[nicolas]$ ls
bin dev home lib media opt dir1 sbin sys usr
boot etc initrd libro mnt proc root srv tmp var
[nicolas]$ for f in b*
> do
> echo "directorio que empieza por b: $f"
> done
directorio que empieza por b: bin
directorio que empieza por b: boot
3. La instruccin while
La instruccin "while" ejecuta la serie de comandos mientras la condicin es verdad:
while condicin
do
serie de comandos
done
Por ejemplo:
[nicolas]$ cat prog.sh
#!/bin/bash
((i=0))
while ((i++ < 10))
do
echo "\$i=$i"
done
echo fin
[nicolas]$ ./prog.sh
$i=1
$i=2
$i=3
$i=4
$i=5
$i=6
$i=7
$i=8
$i=9
$i=10
fin
Introduccin
Aunque los usuarios normales no poseen los derechos necesarios para la administracin
del sistema, sin embargo pueden modificar su entorno personal.
El usuario puede personalizar la definicin de su cuenta (contrasea, nombre completo,
shell predeterminado), modificar el comportamiento del shell que emplea (variables de
entorno, alias...), adaptar la interfaz grfica a sus gustos y, desde luego, organizar sus
archivos en los directorios previstos al efecto.
Modificacin de la cuenta
El administrador crea las cuentas de usuario durante o despus de la instalacin del
sistema. Sus definiciones contienen valores predeterminados que el usuario tiene
derecho a ver y cambiar mediante los comandos siguientes.
Los comandos finger y who, descritos en el captulo Inicio de sesin y primeros
comandos, devuelven informacin respecto a las cuentas de usuario. El archivo
/etc/passwd contiene gran parte de esta informacin y slo puede ser modificado por
root.
Ejemplo de archivo /etc/passwd:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
nicolas:x:500:100:Nicolas Pons:/home/nicolas:/bin/bash
linus:x:504:100:Linus Torvalds:/home/linus:/bin/bash
richard:x:505:100:Richard M. Stallman:/home/richard:/bin/bash
ken:x:501:100:Ken Thompson:/home/ken:/bin/bash
dennis:x:502:100:Dennis Ritchie:/home/dennis:/bin/bash
eric:x:506:100:Eric S. Raymond:/home/eric:/bin/bash
alan:x:507:100:Alan Cox:/home/alan:/bin/bash
gordon:x:503:100:Gordon E. Moore:/home/gordon:/bin/bash
Cada lnea de este archivo caracteriza una cuenta de usuario y los siete campos
separados por : (dos puntos) son:
El login (o nombre de usuario): es el nombre utilizado para conectarse al
sistema. Debe ser nico.
La contrasea : esta contrasea no se encuentra en este archivo por razones de
seguridad; el carcter x la reemplaza e indica una referencia al archivo
/etc/shadow que no es accesible en lectura a los usuarios normales.
El UID : identificador de la cuenta de usuario; normalmente es nico.
El GID : identificador del grupo principal de la cuenta.
Nombre completo: llamado tambin GECOS de "General Electric
Comprehensive Operating System" (el historial de este trmino se explica en la
pgina del manual sobre el archivo /etc/passwd), este campo libre y opcional
indica generalmente la identidad real de la persona asociada a la cuenta de
Linux.
El directorio personal: es el directorio de base del usuario en el que se encuentra
al iniciar sesin.
El shell : es el programa que se ejecuta en el inicio de sesin. El shell
predeterminado en GNU/Linux es el Bash.
Los dems archivos que regulan las cuentas de usuario son /etc/shadow, que contiene
las contraseas cifradas, /etc/group y /etc/gshadow, que definen los grupos de usuarios.
chfn
Un usuario puede modificar el campo GECOS asociado a su propia cuenta con el
comando chfn.
Toda la informacin necesaria puede indicarse en la lnea de comandos, pero es ms
simple escribir nicamente el comando y responder a las preguntas propuestas:
[nicolas]$ chfn
Modificacin de la informacin de finger para nicolas.
Contrasea:
Nombre[]: Nicolas Pons
Oficina[]:
Telfono oficina[]:
Telfono casa[]:

La informacin de finger ha cambiado.

El campo GECOS es opcional y actualmente se usa poco; los detalles del comando chfn
se describen en el manual (man chfn).
chsh
Al igual manera que el comando anterior, chsh permite a un usuario modificar el shell
predeterminado cuando se inicia sesin:
[nicolas] $ chsh
Modificacin del shell para nicolas.
Contrasea:
Nuevo shell[/bin/bash]:
passwd
Mientras no se haya asignado una contrasea a una cuenta, no es posible utilizarla para
conectarse al sistema; por tanto, el administrador define generalmente una primera
contrasea al abrir una cuenta y pide al usuario que la modifique cuanto antes, para
evitar problemas de seguridad.
Se permiten todos los caracteres en las contraseas y se recomienda incluir tanto
minsculas como maysculas, cifras e incluso caracteres de puntuacin o caracteres
acentuados. Sin embargo, estos ltimos pueden presentar problemas si se puede acceder
al sistema desde varios terminales, y en particular con teclados con una disposicin de
teclas diferente (las teclas acentuadas no existen en un teclado QWERTY).
Se impone un nmero mnimo de seis caracteres y ciertas distribuciones truncan una
contrasea ms all del octavo; imponer una contrasea de ocho caracteres constituye,
pues, una buena solucin. Adems, no hay que utilizar una palabra corriente susceptible
de encontrarse en un diccionario de palabras prohibidas, como qwerty, root o
pinguino.

Las restricciones sobre las contraseas (nmero mnimo de caracteres, nmero mximo
de caracteres iguales a la antigua contrasea, nmero mnimo de minsculas...)
dependen de la configuracin del sistema.
La asignacin de una contrasea a una cuenta de Unix se hace con el comando passwd;
este comando ya se analiz en el captulo Inicio de sesin y primeros comandos.
Datos personales
Los datos de usuario -o ms exactamente los archivos que contienen los datos de los
usuarios- se guardan en distintos sitios en el sistema de archivos; conocer su ubicacin
es importante cuando se quiere guardar todos los datos de un usuario sin omitir ciertos
archivos.
1. /home
Los archivos pertenecientes a los usuarios se guardan mayoritariamente en los
directorios personales asociados. El directorio personal de un usuario es generalmente
un subdirectorio de /home con el nombre de la cuenta.
Todos los archivos de configuracin de las aplicaciones ejecutadas por el usuario se
guardan aqu. Estos archivos de configuracin tienen un nombre que empieza
habitualmente por un punto para que no se listen de modo predeterminado con el
comando ls.
[nicolas]$ pwd
/home/nicolas
[nicolas]$ ls
Escritorio Archivos Plantillas Pblico Vdeos
Documentos Imgenes Msica Descargas
[nicolas]$ ls -a
. .esd_auth Imgenes .pulse-cookie
.. Archivos .imsettings.log .recently-used.xbel
.bash_history .gconf .kde .setroubleshoot
.bash_logout .gconfd .lesshst Descargas
.bash_profile .gnome2 .local .themes
.bashrc .gnome2_private .mc .thumbnails
Escritorio .gnupg Plantillas Vdeos
.cache .gstreamer-0.10 .mozilla .viminfo
.config .gtk-bookmarks Msica .xine
.dbus .gtkrc-2.0-kde4 .nautilus .xsession-errors
.directory .gvfs .openoffice.org .xsession-errors.old
.dmrc .ICEauthority Pblico
Documentos .icons .pulse
Se encontrar, por ejemplo, la configuracin del navegador web Mozilla (y Firefox)
para el usuario nicolas en el subdirectorio /home/nicolas/.mozilla.
2. /tmp
El directorio /tmp es un espacio de almacenamiento comn para todos los usuarios del
sistema. Borrado regularmente por el administrador, no debera contener archivos de
usuario importantes.
Sin embargo, tngase presente que un usuario puede almacenar aqu archivos de forma
temporal.
3. /var/spool/*
Como se indica en el captulo que detalla el rbol de Linux, el directorio /var/spool
contiene las diferentes colas de espera de los servicios propuestos por el sistema.
Muchos datos personales se encuentran aqu; por ejemplo:
los trabajos de impresin en espera (/var/spool/lpd y /var/spool/cups);
la definicin de las tareas planificadas (/var/spool/cron y /var/spool/at);
el correo electrnico de los usuarios an no entregado a sus clientes de correo
(/var/spool/mail).
Condiciones generales de uso
Copyright - Editions ENI
Entorno de shell
Cuando el usuario se conecta al sistema en un terminal de texto, se leen varios archivos
al iniciar el shell para definir el entorno de trabajo.
1. /etc/profile
El archivo /etc/profile es un script de shell que se ejecuta en primer lugar, al conectarse
a un terminal de texto. Este archivo contiene las variables de entorno de base de todos
los procesos, y slo el administrador del sistema puede modificarlo. Por otra parte, este
archivo ejecuta comandos en el entorno del shell de conexin.
Este script slo se interpreta en la conexin del usuario.
2. ~/.bash_profile, ~/.bash_login, ~/.profile
Tras leer el archivo /etc/profile, Bash busca el archivo ~/.bash_pro- file, ~/.bash_login o
~/.profile en este orden y ejecuta los comandos contenidos en el primero de estos scripts
que encuentra y que est accesible en lectura.
Este archivo tiene la misma funcin que el archivo /etc/profile, con la diferencia de que
puede ser modificado por el usuario para cambiar su propio entorno.
Como el archivo anterior, este script slo se interpreta en la conexin; las
modificaciones aportadas slo son tenidas en cuenta tras una nueva conexin del
usuario.
3. ~/.bashrc
El archivo ~/.profile slo se ejecuta en el inicio de sesin. Si el usuario dispone de un
entorno grfico, se ignora cuando el usuario inicia un emulador de terminal con un shell.
Esto presenta problemas para todos los elementos, como los alias, definidos en el
archivo ~/.profile, distintos de las variables de entorno.
El archivo ~/.bashrc se usa para este fin porque se interpreta al arrancar cada nuevo
shell Bash interactivo.
En el caso de un shell no interactivo, si la variable de entorno $BASH_ENV contiene el
nombre de un archivo, se ejecuta ste.

Se califica de interactivo un shell empleado para introducir comandos
manualmente (con un prompt y una lnea de comandos). Por el contrario, un shell no
interactivo es, por ejemplo, el proceso lanzado para interpretar un script.
4. /etc/bashrc
El archivo /etc/bashrc tiene la misma funcin que el archivo anterior a escala del
sistema; slo lo puede modificar el administrador.
Invocado en el archivo ~/.bashrc, se lee en la ejecucin de cada nuevo proceso Bash.
5. ~/.bash_logout
Este script de shell slo se ejecuta en la desconexin del usuario. Incluye por ejemplo
los comandos de limpieza automtica (eliminacin de archivos de trabajo temporales) y
la copia de datos personales.
Condiciones generales de uso
Copyright - Editions ENI
Entorno grfico
La configuracin del entorno grfico depende del escritorio utilizado (KDE, GNOME...)
y de las aplicaciones que contiene. Dicho esto, es una buena idea utilizarlo porque
proporciona herramientas ergonmicas y amigables.
Los mens propuestos por los entornos de escritorio permiten acceder a estas
herramientas de configuracin.
Por ejemplo, en KDE el centro de control (systemsettings):

GNOME tiene un "Centro de control" (gnome-control-center) que rene la mayora de
las herramientas de configuracin del entorno:

Aunque el entorno y las aplicaciones grficas se configuran en gran parte
mediante herramientas grficas, los archivos de configuracin producidos por estas
herramientas siguen siendo archivos de texto presentes en el directorio personal del
usuario. Es fcil modificarlos con un editor como Vi o copiarlos en otras cuentas.
Condiciones generales de uso
Copyright - Editions ENI
Copia de seguridad de los datos del
usuario
La copia de seguridad de todos los datos en un sistema Unix -incluyendo los archivos
pertenecientes a los usuarios- es generalmente responsabilidad del administrador. Por
ello el tema de la copia de seguridad se aborda en detalle en las obras de administracin
del sistema en Linux.
Sin embargo, un usuario puede hacer su propia copia de seguridad de sus datos, aunque
slo sea para facilitar el transporte y la distribucin de sus archivos en medios extraibles
(disquetes, memoria USB...).
Para ello, el formato de copia de seguridad ms extendido en el mundo Linux es el
formato de archivo tar, asociado al formato de compresin gzip.
tar
El comando tar es una herramienta de archivo prevista originalmente para funcionar
con los lectores de cintas magnticas (tape archiver). Se usa mucho en el mundo Unix y
particularmente en GNU/Linux, donde los archivos fuentes de los programas libres se
archivan, principalmente, en este formato.
Por compatibilidad con otros Unix, el comando GNU tar acepta, adems de las
opciones largas, las opciones cortas (monocarcter) precedidas o no del carcter -.
Una de las opciones siguientes debe indicarse obligatoriamente para sealar al comando
el tipo de accin que se debe emprender:
c, --create crear de un archivo.
r, --append agregar archivos al final del archivo.
u, --update
agregar slo los archivos ms recientes que el archivo, til para
copias de seguridad incrementales.
x, --extract, -
-get
extraer de archivos del archivo.
t, --list
mostrar la TOC (Table Of Contents) del archivo: lista de
archivos contenidos en el archivo.
Pueden agregarse otras opciones, entre las destacan:
f, --file
nombre fichero de archivo (archivo.tar por ejemplo); sin esta
opcin, los datos del archivo aparecen en la salida estndar.
v, --verbose
modo verboso; el comando muestra los archivos tratados durante
el proceso.
z, --gzip, --
ungzip
uso de la compresin en formato gzip.
Generalmente se usan, pues, las sintaxis siguientes:
para crear un archivo: tar cvf <archivo> <fichero ...>
para enumerar el contenido de un archivo: tar tvf <archivo>
para restaurar un archivo: tar xvf <archivo>

Al crear un archivo, su nombre no debe formar parte de los archivos que hay que
guardar. As, se evitar incluir el propio archivo en la copia; un error clsico es escribir:
tar cvf archive.tar.
tar es una herramienta recursiva, por lo que un nombre de directorio pasado como
argumento al comando implica el archivado completo del rbol subyacente.
Veamos un ejemplo de creacin, verificacin y restauracin de un archivo que contiene
los archivos del usuario alan:
[alan]$ cd /home
[alan]$ ls -aR alan
alan:
. .. .bash_logout .bash_profile .bashrc .gnome2 .mozilla

alan/.gnome2:
. ..

alan/.mozilla:
. .. extensions plugins

alan/.mozilla/extensions:
. ..

alan/.mozilla/plugins:
. ..
[alan]$ tar cvf /tmp/archivo.tar alan
alan/
alan/.gnome2/
alan/.bashrc
alan/.bash_logout
alan/.mozilla/
alan/.mozilla/plugins/
alan/.mozilla/extensions/
alan/.bash_profile
[alan]$ tar tvf /tmp/archivo.tar
drwx------ alan/users 0 2011-02-22 17:35 alan/
drwxr-xr-x alan/users 0 2010-09-29 06:15 alan/.gnome2/
-rw-r--r-- alan/users 124 2010-06-22 17:15 alan/.bashrc
-rw-r--r-- alan/users 18 2010-06-22 17:15 alan/.bash_logout
drwxr-xr-x alan/users 0 2011-02-18 10:57 alan/.mozilla/
drwxr-xr-x alan/users 0 2009-07-27 05:01
alan/.mozilla/plugins/
drwxr-xr-x alan/users 0 2009-07-27 05:01
alan/.mozilla/extensions/
-rw-r--r-- alan/users 176 2010-06-22 17:15 alan/.bash_profile
[alan]$ cd /tmp
[alan]$ tar xvf archivo.tar
alan/
alan/.gnome2/
alan/.bashrc
alan/.bash_logout
alan/.mozilla/
alan/.mozilla/plugins/
alan/.mozilla/extensions/
alan/.bash_profile
[alan]$ ls -aR /tmp/alan
/tmp/alan:
. .. .bash_logout .bash_profile .bashrc .gnome2 .mozilla

/tmp/alan/.gnome2:
. ..

/tmp/alan/.mozilla:
. .. extensions plugins

/tmp/alan/.mozilla/extensions:
. ..

/tmp/alan/.mozilla/plugins:
. ..

La restauracin de un archivo tar se hace en el directorio actual (/tmp/alan) de modo
predeterminado. Para restaurar archivos en su lugar de origen, hay que situarse en el
directorio de origen antes de extraer los archivos.
Este comando es en principio slo una herramienta de archivado y no un programa de
compresin. A menudo se une a un programa de compresin para reducir el tamao de
los archivos.
[alan]$ pwd
/tmp
[alan]$ ls -l archivo.tar
-rw-r--r--. 1 alan users 10240 22 feb. 18:27 archivo.tar
[alan]$ gzip archivo.tar
[alan]$ ls -l archivo.tar.gz
-rw-r--r--. 1 alan users 513 22 feb. 18:27 archivo.tar.gz

El uso de la compresin gzip con el formato tar est muy extendido en Internet y la
extensin .tgz, ms corta, se usa tambin para designar estos archivos pasados por tar y
gzip.
Adems, la versin GNU del comando tar admite la compresin al vuelo con la opcin
z para el formato gzip; no siempre es as en los dems Unix.
Por ejemplo:
[alan]$ ls archivo.tar.gz
archivo.tar.gz
[alan]$ tar tvzf archivo.tar.gz
drwx------ alan/users 0 2011-02-22 17:35 alan/
drwxr-xr-x alan/users 0 2010-09-29 06:15 alan/.gnome2/
-rw-r--r-- alan/users 124 2010-06-22 17:15 alan/.bashrc
-rw-r--r-- alan/users 18 2010-06-22 17:15 alan/.bash_logout
drwxr-xr-x alan/users 0 2011-02-18 10:57 alan/.mozilla/
drwxr-xr-x alan/users 0 2009-07-27 05:01
alan/.mozilla/plugins/
drwxr-xr-x alan/users 0 2009-07-27 05:01
alan/.mozilla/extensions/
-rw-r--r-- alan/users 176 2010-06-22 17:15 alan/.bash_profile
Se obtiene, en resumen:

Ark
Para la copia de seguridad y la restauracin de datos, existen diferentes herramientas
integradas a los entornos de escritorio.
Ark es una herramienta grfica que permite generar archivos comprimidos como el
programa Winzip de Windows.

Evidentemente, esta herramienta puede trabajar con archivos tar comprimidos en
formato gzip.
Condiciones generales de uso
Copyright - Editions ENI
Presentacin de las principales
herramientas de Linux
Este captulo presenta una serie de herramientas de Linux que todo usuario debera
conocer. A menudo basta con una lnea de comandos adecuada para efectuar los mismos
tratamientos que un centenar de clics de ratn con un administrador de archivos grfico.
Al finalizar este captulo el lector sabr, entre otras cosas:
buscar archivos segn ciertos criterios y aplicarles un tratamiento;
filtrar el contenido de archivos y las salidas de comandos con expresiones
regulares;
ordenar y separar datos;
ver parcialmente el contenido de archivos.
1. find
El comando find permite buscar, en uno o ms rboles de directorios, archivos que
respondan a ciertos criterios y aplicarles un tratamiento segn una accin determinada.
La sintaxis global del comando es:
find ruta(s) parmetro(s) accin

La sintaxis del comando find no sigue las reglas elementales de sintaxis de los
comandos de Linux descritos en el captulo Inicio de sesin y primeros comandos.
a. Ruta de bsqueda
Se especifica en el comando find una o ms rutas de bsqueda; estas rutas son
directorios del sistema de archivos y find se encarga de recorrer todo el rbol
subyacente en busca de archivos.
Si no se especifica una ruta, find inicia su bsqueda en el directorio actual:
$ ls -R
.:
archivo1 archivo2 dir1 dir2

./dir1:

./dir2:
$ find
.
./dir2
./dir1
./archivo2
./archivo1
$ find .
.
./dir2
./dir1
./archivo2
./archivo1
Cuando se especifican varias rutas, se separan con espacios:
$ find /var/spool/mail . /etc/skel
/var/spool/mail
/var/spool/mail/alan
/var/spool/mail/linus
/var/spool/mail/richard
/var/spool/mail/gordon
/var/spool/mail/eric
/var/spool/mail/rpc
/var/spool/mail/ken
/var/spool/mail/dennis
/var/spool/mail/nicolas
.
./dir2
./dir1
./archivo2
./archivo1
/etc/skel
/etc/skel/.gnome2
/etc/skel/.bashrc
/etc/skel/.bash_logout
/etc/skel/.mozilla
/etc/skel/.mozilla/plugins
/etc/skel/.mozilla/extensions
/etc/skel/.bash_profile
b. Expresiones de seleccin
Los criterios de seleccin, o expresiones, empiezan con un - (guin) seguido por sus
parmetros.
Por ejemplo, la expresin -name nomarc pide al comando find que busque slo los
archivos cuyo nombre sea nomfic. La lnea de comando completa, para una bsqueda en
todo el rbol de Linux, es:
find / -name nomarc 2>/dev/null

Un usuario normal no tiene los permisos suficientes para acceder a todos los archivos
presentes en el sistema. Como por lo general slo se buscan los archivos a los que se
puede acceder, habitualmente se suprimen los mensajes de error del comando find
debidos a esta falta de permiso de acceso, redirigiendo la salida de errores estndar al
archivo /dev/null.
El comando find cuenta con un gran nmero de parmetros de seleccin; veremos a
continuacin las principales expresiones.
-name motivo
El parmetro -name afecta al nombre de los archivos presentes en los rboles de
bsqueda.
El motivo puede contener los mismos caracteres genricos de reemplazo que el shell,
pero el comando find debe interpretarlos; por ello, el motivo se pone generalmente entre
apstrofes para inhibir la interpretacin del shell.
Por ejemplo, los archivos cuyo nombre empieza por una s en el rbol subyacente de
/usr:
$ find /usr -name s* 2>/dev/null
/usr/src
/usr/libexec/perf-core/scripts
/usr/libexec/perf-core/scripts/python/sctop.py
/usr/libexec/perf-core/scripts/python/syscall-counts-by-pid.pyc
/usr/libexec/perf-core/scripts/python/syscall-counts-by-pid.py
/usr/libexec/perf-core/scripts/python/syscall-counts-by-pid.pyo
/usr/libexec/perf-core/scripts/python/syscall-counts.pyo
/usr/libexec/perf-core/scripts/python/syscall-counts.py
/usr/libexec/perf-core/scripts/python/bin/syscall-counts-by-pid-
report
/usr/libexec/perf-core/scripts/python/bin/syscall-counts-report
...
-size [+-]<tamao>(bck)
La expresin -size determina el tamao de los archivos que se quieren buscar.
El tamao de los archivos se indica en nmero de bloques, precedido eventualmente del
signo + o -; eso significa:
-size
12
archivos que usan exactamente doce bloques de datos, por tanto un
tamao comprendido entre 11 y 12 bloques.
-size -
12
archivos que usan menos de doce bloques de datos, por tanto de un
tamao estrictamente inferior a 12 bloques.
-size
+12
archivos que usan ms de doce bloques de datos, por tanto de un
tamao estrictamente superior a 12 bloques.
Los bloques de datos tienen un tamao predeterminado de 512 bytes, pero la unidad
puede especificarse aadiendo el carcter b, c, k, M o G justo despus del tamao:
b bloques de datos de 512 bytes (valor predeterminado).
c bloques de datos de 1 byte.
k, M o G bloques de datos de 1 KB, 1 MB o 1 GB.
Por ejemplo, los archivos cuyo tamao es de 10 KB en el rbol /usr:
$ find /usr -size 10k 2>/dev/null
/usr/libexec/ck-get-x11-server-pid
/usr/libexec/nm-avahi-autoipd.action
/usr/libexec/pulse/proximity-helper
/usr/libexec/mission-control-5
/usr/libexec/udisks-helper-drive-detach
...
$ ls -l /usr/libexec/ck-get-x11-server-pid
-rwxr-xr-x. 1 root root 9920 6 oct 00:32 /usr/libexec/ck-get-x11-
server-pid
$ ls -l /usr/libexec/nm-avahi-autoipd.action
-rwxr-xr-x. 1 root root 9300 15 oct 21:24 /usr/libexec/nm-avahi-
autoipd.action
$ ls -l /usr/libexec/pulse/proximity-helper
-rwsr-xr-x. 1 root root 9596 23 feb 2010
/usr/libexec/pulse/proximity-helper
$ ls -l /usr/libexec/mission-control-5
-rwxr-xr-x. 1 root root 10120 9 oct 00:34 /usr/libexec/mission-
control-5
$ ls -l /usr/libexec/udisks-helper-drive-detach
-rwxr-xr-x. 1 root root 9944 19 may 2010 /usr/libexec/udisks-
helper-drive-detach
-mtime [+-]<das>
La expresin -mtime especifica la fecha de la ltima modificacin de los
archivos buscados en nmero de das.
Como en el parmetro -size, el nmero de das puede ir precedido de los signos - y +:
-mtime 3
archivos modificados hace 3 das, o sea entre 72 horas (3 x 24 horas)
y 96 horas (4 x 24 horas).
-mtime -
3
archivos modificados hace menos de 3 das, o sea menos de 72 horas
(3 x 24 horas).
-mtime
+3
archivos modificados hace ms de 3 das, o sea ms de 96 horas (4 x
24 horas).
-perm <permisos>
Esta expresin permite recuperar todos los archivos con permisos de acceso
particulares.
Los permisos pueden indicarse en notacin octal o simblica, por ejemplo:
$ find /etc -perm 700 2>/dev/null
/etc/lvm
/etc/cups/ssl
/etc/selinux/targeted/modules/active
/etc/pki/CA/private
/etc/sssd
/etc/polkit-1/localauthority
$ find /etc -perm u=rwx 2>/dev/null
/etc/lvm
/etc/cups/ssl
/etc/selinux/targeted/modules/active
/etc/pki/CA/private
/etc/sssd
/etc/polkit-1/localauthority
$ ls -ld /etc/lvm
drwx------. 5 root root 4096 18 feb 11:05 /etc/lvm
$ ls -ld /etc/cups/ssl
drwx------. 2 root lp 4096 17 sept 18:30 /etc/cups/ssl
$ ls -ld /etc/selinux/targeted/modules/active
drwx------. 3 root root 4096 18 feb 17:31
/etc/selinux/targeted/modules/active
$ ls -ld /etc/pki/CA/private
drwx------. 2 root root 4096 30 jun 2010 /etc/pki/CA/private
$ ls -ld /etc/sssd
drwx------. 3 root root 4096 18 feb 11:07 /etc/sssd
$ ls -ld /etc/polkit-1/localauthority
drwx------. 7 root root 4096 18 feb 11:01 /etc/polkit-1/localauthority
-newer <archivo>
La expresin -newer busca todos los archivos con una fecha de modificacin ms
reciente que el archivo de referencia pasado como parmetro.
Este parmetro de seleccin es muy prctico para efectuar copias de seguridad
incrementales (guardar nicamente archivos modificados despus de la ltima copia):
$ touch ref
$ ls -l
total 8
-rw-r--r--. 1 nicolas users 0 23 feb. 09:10 archivo1
-rw-r--r--. 1 nicolas users 0 23 feb. 09:10 archivo2
-rw-r--r--. 1 nicolas users 0 23 feb. 09:26 ref
drwxr-xr-x. 2 nicolas users 4096 23 feb. 09:09 dir1
drwxr-xr-x. 2 nicolas users 4096 23 feb. 09:09 dir2
$ find . -newer ref
$ echo texto >> archivo1
$ find . -newer ref
./archivo1
-user <usuario>
Este parmetro permite recuperar todos los archivos pertenecientes a un mismo usuario.
El parmetro puede ser el login o el UID del usuario:
$ id nicolas
uid=500(nicolas) gid=100(users) grupos=100(users)
$ find /var -user nicolas 2> /dev/null
/var/cache/gdm/nicolas
/var/cache/gdm/nicolas/dmrc
/var/spool/mail/nicolas
$ find /var -user 500 2> /dev/null
/var/cache/gdm/nicolas
/var/cache/gdm/nicolas/dmrc
/var/spool/mail/nicolas
-group <grupo>
Al igual que la expresin anterior, -group permite buscar todos los archivos
pertenecientes a un mismo grupo de usuarios.
De nuevo, se puede indicar indiferentemente el nombre del grupo o su GID.
c. Operadores sobre las expresiones
Las expresiones se evalan como operaciones booleanas: devuelven verdadero o falso.
Es posible combinar varias expresiones; para ello, existe una serie de operadores.
-and o -a
Colocado entre dos expresiones, el operador -and (o -a) efecta un Y lgico entre las
dos expresiones.
El operador -and se utiliza de modo predeterminado cuando no se indica ningn
operador. La sintaxis expresin1 -and expresin2 equivale a expresin1 expresin2.
Por ejemplo, para buscar todos los archivos que pertenecen al usuario nicolas y cuyo
nombre empieza por s en el directorio /tmp:
$ find /tmp -user nicolas -and -name s* 2> /dev/null
/tmp/keyring-6wqI14/ssh
/tmp/sv6h.tmp
/tmp/.esd-500/socket
$ find /tmp -user nicolas -name s* 2> /dev/null
/tmp/keyring-6wqI14/ssh
/tmp/sv6h.tmp
/tmp/.esd-500/socket
-or u -o
Este operador efecta un O lgico entre dos expresiones.
Por ejemplo, para buscar todos los archivos que pertenecen al usuario nicolas y cuyo
nombre empieza por s en el directorio /tmp:
$ find /tmp -user nicolas -or -name s* 2> /dev/null
/tmp/keyring-6wqI14
/tmp/keyring-6wqI14/gpg
/tmp/keyring-6wqI14/pkcs11
/tmp/keyring-6wqI14/ssh
/tmp/keyring-6wqI14/control
/tmp/OSL_PIPE_500_SingleOfficeIPC_78d1f4adfd9e62660b247a5f42d4d7c
/tmp/virtual-nicolas.MyGDbR
/tmp/.ICE-unix/1758
/tmp/virtual-nicolas.fpLGsV
...
-not o !
El operador -not (o !) es la negacin lgica. Debe colocarse justo antes de la expresin
correspondiente.
Por ejemplo, para buscar todos los archivos cuyo nombre no empieza por s en el
directorio /tmp:
$ find /tmp -not -name s* 2>/dev/null
/tmp
/tmp/keyring-6wqI14
/tmp/keyring-6wqI14/gpg
/tmp/keyring-6wqI14/pkcs11
/tmp/keyring-6wqI14/control
/tmp/OSL_PIPE_500_SingleOfficeIPC_78d1f4adfd9e62660b247a5f42d4d7c
/tmp/alan
/tmp/virtual-nicolas.MyGDbR
/tmp/.X11-unix
/tmp/.X11-unix/X0
...
Los parntesis
Los parntesis permiten definir el orden de los operadores lgicos. Se colocan antes y
despus de un conjunto de expresiones para formar una sola a nivel lgico.

Los parntesis tienen un significado particular para el shell, por lo que hay que
protegerlos con el carcter de cita \ (barra invertida).
Por ejemplo:
$ find /tmp -not -name s* -or -user nicolas 2>/dev/null
/tmp
/tmp/keyring-6wqI14
/tmp/keyring-6wqI14/gpg
/tmp/keyring-6wqI14/pkcs11
/tmp/keyring-6wqI14/ssh
/tmp/keyring-6wqI14/control
/tmp/OSL_PIPE_500_SingleOfficeIPC_78d1f4adfd9e62660b247a5f42d4d7c
/tmp/alan
/tmp/virtual-nicolas.MyGDbR
/tmp/.X11-unix
...
$ find /tmp -not \( -name s* -or -user nicolas \) 2>/dev/null
/tmp
/tmp/alan
/tmp/.X11-unix
/tmp/.X11-unix/X0
/tmp/vmware-root
/tmp/.ICE-unix
/tmp/pulse-FDPK5kbTSV2P
/tmp/pulse-PKdhtXMmr18n
/tmp/archive.tar.gz
/tmp/orbit-gdm
...
En el primer ejemplo, se enumeran los archivos cuyo nombre no empieza por s o que
pertenecen a nicolas. En el segundo ejemplo, no se enumeran ni los archivos que
empiezan por s, ni los que pertenecen a nicolas.
d. Acciones
-print
La accin predeterminada (para el comando GNU, presente en Linux) que se aplica a
cada archivo encontrado por el comando find es -print que muestra el nombre de la
instancia encontrada:
$ find .
.
./ref
./dir2
./dir1
./archivo2
./archivo1
$ find . -print
.
./ref
./dir2
./dir1
./archivo2
./archivo1

Las rutas de los archivos mostrados son relativas a la ruta de bsqueda especificada en
el comando find.
-exec
Para ejecutar un comando externo del shell por cada instancia encontrada, se usa la
directiva de accin -exec. Las llaves {} se usan para especificar la ruta del archivo
encontrado en el comando que se debe ejecutar por find.
Para delimitar el fin de la directiva -exec, se termina obligatoriamente el comando con
la secuencia de caracteres \;.
Por ejemplo, para borrar todos los archivos cuyo nombre empieza por la letra s en el
directorio actual con el comando rm:
$ ls
cosa cubo sofia sonrisa tarta toro tren truco
$ find . -name s* -exec rm {} \;
$ ls
cosa cubo tarta toro tren truco
-ok
La directiva -ok funciona igual que -exec pero hay que confirmar, antes de ejecutar el
comando externo, en cada instancia de archivo encontrada:
$ ls
cosa tarta tren truco
$ find . -name t* -ok rm {} \;
< rm ... ./tarta > ? s
< rm ... ./tren > ? n
< rm ... ./truco > ? s
$ ls
cosa tren

Las preguntas planteadas por el comando find se inscriben en su salida de error; en este
caso no hay que redirigirla. Se corre el riesgo de no ver aparecer las preguntas de la
directiva -ok.
-ls
La accin -ls muestra, en detalle, los archivos encontrados, como el comando ls -ldi.
El resultado del ejemplo siguiente equivale al comando find . -exec ls -ldi {} \;:
$ find . -ls
934631 4 drwxr-xr-x 4 nicolas users 4096 feb. 23 10:14 .
934108 0 -rw-r--r-- 1 nicolas users 0 feb. 23 09:26
./ref
934648 4 drwxr-xr-x 2 nicolas users 4096 feb. 23 09:09
./dir2
934634 4 drwxr-xr-x 2 nicolas users 4096 feb. 23 09:09
./dir1
934652 0 -rw-r--r-- 1 nicolas users 0 feb. 23 09:10
./archivo2
934651 4 -rw-r--r-- 1 nicolas users 6 feb. 23 09:27
./archivo1
2. grep
El comando grep permite buscar en uno o ms archivos, o en la entrada estndar, las
lneas correspondientes a un filtro.
La sintaxis general de grep es:
grep opcin(es) filtro archivo(s)
Al utilizar la entrada estndar para filtrar la salida del comando ps, se limita el resultado
a las lneas que contienen una cadena de caracteres en particular; por ejemplo, para
encontrar rpidamente el PID del proceso sleep:
$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 09:45 ? 00:00:02 /sbin/init
root 2 0 0 09:45 ? 00:00:00 [kthreadd]
root 3 2 0 09:45 ? 00:00:00 [ksoftirqd/0]
root 4 2 0 09:45 ? 00:00:00 [migration/0]
root 5 2 0 09:45 ? 00:00:00 [watchdog/0]
root 6 2 0 09:45 ? 00:00:00 [events/0]
...
root 1528 1 0 09:46 ? 00:00:00 crond
root 1542 1 0 09:46 ? 00:00:00 /usr/sbin/atd
root 1550 1 0 09:46 ? 00:00:00 /usr/sbin/gdm-binary -
nodaemon
root 1555 1 0 09:46 tty2 00:00:00 /sbin/mingetty
/dev/tty2
root 1557 1 0 09:46 tty3 00:00:00 /sbin/mingetty
/dev/tty3
root 1559 1 0 09:46 tty4 00:00:00 /sbin/mingetty
/dev/tty4
root 1561 1 0 09:46 tty5 00:00:00 /sbin/mingetty
/dev/tty5
root 1565 1 0 09:46 tty6 00:00:00 /sbin/mingetty
/dev/tty6
root 1573 1550 0 09:46 ? 00:00:00 /usr/libexec/gdm-
simple-slave --
root 1576 1573 0 09:46 tty1 00:00:06 /usr/bin/Xorg :0 -nr -
verbose -a
root 1591 1 0 09:46 ? 00:00:00 /usr/sbin/console-kit-
daemon --n
root 1635 1 0 09:46 ? 00:00:00 /usr/libexec/upowerd
rtkit 1661 1 0 09:46 ? 00:00:00 /usr/libexec/rtkit-
daemon
root 1682 1573 0 09:46 ? 00:00:00 pam: gdm-password
root 1686 1477 0 09:46 ? 00:00:00 sshd: nicolas [priv]
nicolas 1698 1686 0 09:46 ? 00:00:03 sshd: nicolas@pts/0
nicolas 1699 1698 0 09:46 pts/0 00:00:00 -bash
nicolas 2162 1 0 09:48 ? 00:00:00 /usr/libexec/gvfsd-
metadata
nicolas 2490 1699 0 10:16 pts/0 00:00:00 sleep 9999
nicolas 2603 1699 3 10:18 pts/0 00:00:00 ps -ef
$ ps -ef | grep sleep
nicolas 2490 1699 0 10:16 pts/0 00:00:00 sleep 9999
nicolas 2605 1699 0 10:18 pts/0 00:00:00 grep sleep

La lnea que afecta al propio proceso grep se incluye en el resultado porque la cadena
de caracteres "sleep" est presente en la lnea de comandos.
Otro ejemplo, buscando esta vez en archivos pasados como argumentos al
comando grep; todas las lneas que se refieren al usuario nicolas en los
archivos /etc/passwd y /etc/group:
$ grep nicolas /etc/passwd /etc/group
/etc/passwd:nicolas:x:500:100:Nicolas Pons:/home/nicolas:/bin/bash
/etc/group:users:x:100:nicolas,linus,richard,ken,dennis,eric,alan,gord
on

Dado que el comando grep tiene varios nombres de archivo como argumentos, muestra,
adems de las lneas correspondientes al filtro, el nombre del archivo en el que se
encuentra la lnea.
Para el resto de los ejemplos, se usar el archivo deportistas con una lista de personas
que practican uno o ms deportes. El formato de este archivo es (los campos se separan
con espacios):
nombre apellido sexo deporte1,deporte2...
Veamos el contenido:
gilberto garca hombre ping-pong
daniel rigal hombre ping-pong,carrera
francisco cornaz hombre vela
gerardo cani hombre natacin
juana barrera mujer natacin,marcha
nicolas pons hombre petanca,carrera,ping-pong
esteban olivar hombre petanca
patricio chekib hombre squash,vela
sofia py mujer carrera,tenis
maria baeza mujer marcha
julia ramrez mujer tenis,petanca
vernica garca mujer vela,carrera
claudio bermejo hombre carrera,petanca
willy mario hombre carrera,squash
a. Opciones
Opcin -v
La opcin -v del comando grep imprime slo las lneas que no corresponden al filtro.
Por ejemplo, para ver todas las lneas que no contienen el deporte "carrera":
$ grep -v carrera deportistas
gilberto garca hombre ping-pong
francisco cornaz hombre vela
gerardo cani hombre natacin
juana barrera mujer natacin,marcha
esteban olivar hombre petanca
patricio chekib hombre squash,vela
maria baeza mujer marcha
julia ramrez mujer tenis,petanca
La opcin -v puede usarse tambin para suprimir la lnea del proceso grep en el primer
ejemplo del apartado con:
$ ps -ef | grep sleep
nicolas 2490 1699 0 10:16 pts/0 00:00:00 sleep 9999
nicolas 3624 1699 0 12:18 pts/0 00:00:00 grep sleep
$ ps -ef | grep sleep | grep -v grep
nicolas 2490 1699 0 10:16 pts/0 00:00:00 sleep 9999

Se pueden encadenar varios filtros seguidos mediante los tubos proporcionados por el
shell.
Opcin -c
Para conocer nicamente el nmero de lneas que concuerdan con el filtro, se usa la
opcin -c:
$ grep carrera deportistas
daniel rigal hombre ping-pong,carrera
nicolas pons hombre petanca,carrera,ping-pong
sofia py mujer carrera,tenis
vernica garca mujer vela,carrera
claudio bermejo hombre carrera,petanca
willy mario hombre carrera,squash
$ grep -c carrera deportistas
6
Opcin -l
La opcin -l muestra nicamente los nombres de archivos que cuentan con lneas que
concuerdan. Por ejemplo, para encontrar todos los archivos en /etc que tienen el nmero
192:
$ grep -l 192 /etc/* 2>/dev/null
/etc/dnsmasq.conf
/etc/hosts
/etc/jwhois.conf
/etc/mke2fs.conf
/etc/ntp.conf
/etc/pm-utils-hd-apm-restore.conf
/etc/rsyslog.conf
/etc/services

La redireccin del error permite suprimir los mensajes respecto a la falta de permisos de
acceso del usuario normal para leer ciertos archivos.
Opcin -n
El nmero de lnea donde se encuentra la lnea correspondiente se muestra con la opcin
-n:
$ grep -n carrera deportistas
2:daniel rigal hombre ping-pong,carrera
6:nicolas pons hombre petanca,carrera,ping-pong
9:sofia py mujer carrera,tenis
12:vernica garcia mujer vela,carrera
13:claudio bermejo hombre carrera,petanca
14:willy mario hombre carrera,squash
Opcin -i
La opcin -i le indica a grep que ignore la distincin entre maysculas y minsculas en
las comparaciones:
$ grep petanca deportistas
nicolas pons hombre petanca,carrera,ping-pong
julia ramrez mujer tenis,petanca
claudio bermejo hombre carrera,petanca
[francisco]$ grep -i petanca deportivos
nicolas pons hombre petanca,carrera,ping-pong
esteban olivar hombre petanca
julia ramrez mujer tenis,petanca
claudio bermejo hombre carrera,petanca
Opcin -w
Finalmente, la opcin -w considera el filtro como una palabra entera. As, si se busca
todos los hombres en el archivo deportivo, la lnea donde se encuentra la persona "julia
ramrez" no debe aparecer:
$ grep hombre deportistas
gilberto garca hombre ping-pong
daniel rigal hombre ping-pong,carrera
francisco cornaz hombre vela
gerardo cani hombre natacin
nicolas pons hombre petanca,carrera,ping-pong
esteban olivar hombre petanca
patricio chekib hombre squash,vela
julia ramrez mujer tenis,petanca
claudio bermejo hombre carrera,petanca
willy mario hombre carrera,squash
$ grep -w hombre deportistas
gilberto garca hombre ping-pong
daniel rigal hombre ping-pong,carrera
francisco cornaz hombre vela
gerardo cani hombre natacin
nicolas pons hombre petanca,carrera,ping-pong
esteban olivar hombre petanca
patricio chekib hombre squash,vela
claudio bermejo hombre carrera,petanca
willy mario hombre carrera,squash
b. Expresiones regulares
Los filtros del comando grep pueden ser expresiones regulares. Las expresiones
regulares sobre lneas de texto son del mismo tipo que los caracteres
genricos utilizados para los nombres de archivos en el shell, pero no son idnticas.
Los principales metacaracteres de las expresiones regulares son:
. cualquier carcter una vez (equivale al carcter genrico ?).
* cero instancias o ms del carcter anterior.
[a-n] un carcter de la lista, como en los caracteres genricos.
principio de lnea.
$ final de lnea.
\ inhibicin del metacarcter siguiente, como en el carcter de cita.

El equivalente del carcter genrico * en shell es .* en la expresin regular (cualquier
carcter repetido cero o ms veces).
Por ejemplo, para listar slo las lneas que empiezan por "g":
$ grep g deportistas
gerardo cani hombre natacin
gilberto garca hombre ping-pong

Los filtros con metacaracteres deben aparecer entre apstrofes para no ser interpretados
por el shell.
Para las lneas que empiezan por "g" y terminan por "n":
$ grep g.*n$ deportistas
gerardo cani hombre natacin

Esto es tan solo una idea aproximada de las expresiones regulares. Existen libros de la
misma coleccin, como "Programacin shell en Unix/Linux", que analizan esta
cuestin.
3. cut
El comando cut permite extraer columnas o campos seleccionados a partir de su entrada
estndar o de archivos.
Extraccin de campos
La primera sintaxis del comando cut para extraer campos es:
cut -f campo(s) -d delimitador archivo(s)
Cuando se especifican varios campos, los nmeros se separan con comas.
Para mostrar slo el tercero y el sexto campo del archivo /etc/passwd:
$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
nicolas:x:500:100:Nicolas Pons:/home/nicolas:/bin/bash
linus:x:504:100:Linus Torvalds:/home/linus:/bin/bash
richard:x:505:100:Richard M. Stallman:/home/richard:/bin/bash
ken:x:501:100:Ken Thompson:/home/ken:/bin/bash
dennis:x:502:100:Dennis Ritchie:/home/dennis:/bin/bash
eric:x:506:100:Eric S. Raymond:/home/eric:/bin/bash
alan:x:507:100:Alan Cox:/home/alan:/bin/bash
gordon:x:503:100:Gordon E. Moore:/home/gordon:/bin/bash
$ cut -f 3,6 -d : /etc/passwd
0:/root
1:/bin
500:/home/nicolas
504:/home/linus
505:/home/richard
501:/home/ken
502:/home/dennis
506:/home/eric
507:/home/alan
503:/home/gordon
Extraccin de columnas
El separador de campos es un carcter definido por la opcin -d, por lo que no es
posible ordenar lneas en las que la informacin est espaciada por un
nmero indeterminado de espacios.
Para extraer ciertos datos del comando ls -l, por ejemplo, se usa la nocin de columna
con el comando cut, es decir, para la salida del comando 1s -1 siguiente:
$ ls -l
total 16
-rw-r--r--. 1 nicolas users 6 23 feb. 09:27 archivo1
-rw-r--r--. 1 nicolas users 0 23 feb. 09:10 archivo2
-rw-r--r--. 1 nicolas users 0 23 feb. 09:26 ref
drwxr-xr-x. 2 nicolas users 4096 23 feb. 09:09 dir1
drwxr-xr-x. 2 nicolas users 4096 23 feb. 09:09 dir2
-rw-r--r-- 1 nicolas users 465 23 feb. 12:24 deportistas
La sintaxis es:
cut -c columnas archivo(s)
Las columnas se definen por los nmeros del primer y del ltimo carcter que las
componen, separados por un guin. Si se omite el lmite inferior, cut considera el
primer carcter de la lnea. Asimismo, si se omite el lmite superior, se usar
implcitamente el ltimo carcter de la lnea.
Como en la extraccin de campos, se puede especificar varias columnas separando sus
definiciones por comas.
Por ejemplo, para ver los permisos de los archivos, su tamao y su nombre filtrando la
salida del comando ls -l anterior mediante el comando cut:
$ ls -l | cut -c 2-10,28-32,48-
total 16
rw-r--r-- 6 archivo1
rw-r--r-- 0 archivo2
rw-r--r-- 0 ref
rwxr-xr-x 4096 dir1
rwxr-xr-x 4096 dir2
rw-r--r-- 465 deportistas
4. sort
El comando sort ordena las lneas de un archivo (o su entrada estndar) y devuelve el
resultado en su salida estndar.
Su sintaxis general es:
sort -t delimitador +campo.carcter opcin(s) archivo
El archivo de ejemplo frutas utilizado en este prrafo es:
manzana.2
tomate.10
pera.4
En su expresin ms simple, sort ordena alfabticamente por el primer carcter de cada
lnea:
$ sort frutas
manzana.2
pera.4
tomate.10
La clasificacin puede empezar a partir de cualquier carcter de cualquier campo en el
archivo. Se usa entonces la sintaxis -kn.m donde n es el nmero de campo y m el
nmero del carcter en el campo. Si el nmero de carcter se omite, la ordenacin se
efectuar a partir del primer carcter del campo especificado.
A diferencia del comando cut, el separador de campos predeterminado es uno o ms
caracteres de espacio. Adems, es modificable con la opcin -t.
Veamos una clasificacin a partir del tercer carcter en el primer campo de cada lnea:
$ sort -k1.3 frutas
tomate.10
manzana.2
pera.4
Veamos una clasificacin sobre el primer carcter del segundo campo de cada lnea:
$ sort -t. -k2 frutas
tomate.10
manzana.2
pera.4
La opcin -n clasifica los campos numricos en funcin de su valor aritmtico:
$ sort -t. -n -k2 frutas
manzana.2
pera.4
tomate.10
Para terminar, la opcin -r invierte la ordenacin del comando sort:
$ sort -r frutas
tomate.10
pera.4
manzana.2
5. head, tail
Los comandos head y tail permiten respectivamente mostrar slo el principio o el final
de los archivos.
El comando head muestra de modo predeterminado las diez primeras lneas de un
archivo. Se puede modificar esta opcin a las N primeras lneas del archivo con la
sintaxis head -nN.
El comando tail muestra de modo predeterminado las diez ltimas lneas de un archivo.
Se puede cambiar este valor de dos modos:
tail -nN muestra las N ltimas lneas del archivo.
tail -n+N muestra desde la lnea N hasta el final del archivo.
En resumen, se obtiene:

El comando tail se usa tambin para consultar archivos escritos al mismo tiempo por
otros procesos, como archivos de registro. La opcin -f le indica al comando tail que lea
las nuevas lneas del archivo de entrada a medida que estn disponibles; esto permite
controlar el crecimiento del archivo.

Slo se puede utilizar la opcin -f de tail especificando un archivo. Es imposible
emplearlo cuando el comando lee los datos en su entrada estndar.
Para detener la visualizacin con la opcin -f, se interrumpe el comando con las teclas
[Ctrl]+[c].
Introduccin
La configuracin del sistema es responsabilidad del administrador. Sin embargo, es
bueno que el principiante sepa efectuar ciertas tareas administrativas para instalar y
quitar programas complementarios, configurar el servicio de impresin, utilizar sus
dispositivos de audio y de red, etc.
Las operaciones indicadas en este captulo requieren, en su mayor parte, los permisos
del usuario root.
Condiciones generales de uso
Copyright - Editions ENI
Instalar programas
Los programas que funcionan en Linux se distribuyen en diferentes formatos:
los paquetes RPM (Red Hat Package Manager);
los paquetes Debian;
los archivos comprimidos (vase captulo Administracin de la cuenta de
usuario).
1. Los paquetes RPM
Creado por la empresa Red Hat, RPM (Red Hat Package Manager) es una herramienta
de gestin de paquetes de programas para Linux. Su distribucin bajo licencia GPL ha
contribuido a su notoriedad y actualmente la emplea un gran nmero de distribuciones
de Linux, como Mandriva y SuSE.
Un paquete se presenta en forma de archivo con extensin .rpm y contiene, adems de
los archivos de la aplicacin, informacin general sobre el paquete, como la versin, la
descripcin y el script de instalacin.
El nombre tpico de un archivo de paquete RPM es foo-1.0-1.i386.rpm. Este nombre de
archivo indica el nombre del paquete (foo), la versin (1.0), el nmero de revisin o
"release" (1) y la arquitectura (i386) para la que se ha compilado el software. Si el
nombre incluye src o noarch en lugar de la arquitectura, significa que se trata
respectivamente de un paquete que contiene nicamente los archivos fuente del
programa o de un paquete independiente de la arquitectura.
Los paquetes RPM se manejan mediante el comando rpm.
Instalacin
Para instalar o actualizar un paquete RPM, la sintaxis utilizada es:
rpm -Uvh paquete.rpm
Las opciones indican:
-
U
instalacin del paquete si an no est en el sistema o actualizacin en caso
contrario.
-v
modo verboso; el comando rpm muestra en salida el paquete que est
tratando.
-h
visualizar una barra de progreso que muestra el avance de la instalacin en
curso.
Por ejemplo:
[root]# rpm -ivh vorbis-tools-1.4.0-5.fc18.x86_64.rpm
Preparing...
########################################### [100%]

Updating / installing...
1:vorbis-tools-1:1.4.0-5.fc18
#################################### [100%]
Desinstalacin
La sintaxis del comando rpm para la desinstalacin de paquetes es algo diferente; no
hay que pasar el nombre de un archivo RPM como argumento, sino slo el nombre del
paquete que hay que borrar:
rpm -e paquete
La opcin -e (erase) es la que ordena al comando rpm borrar un paquete del sistema:
[root]# rpm -e vorbis-tools-1.4.0-5.fc18.x86_64.rpm
error: package vorbis-tools-1.4.0-5.fc18.x86_64.rpm is not installed
[root]# rpm -e vorbis-tools
[root]#

Los editores de las distribuciones suelen proporcionar herramientas como yum o
urpmi, que permiten gestionar paquetes RPM de forma sencilla.
2. Los paquetes Debian
Los paquetes Debian, utilizados por la distribucin del mismo nombre, tienen la
extensin.deb para los paquetes binarios y .dsc para los paquetes de fuentes.
Al igual que el formato RPM, el formato Debian est bajo licencia GPL. Por
consiguiente, otras distribuciones de Linux tambin lo usan.
Adems, los nombres de archivo de estos paquetes contienen tambin un cierto nmero
de indicaciones. As, un archivo llamado foo_1.0-1.deb significa que estamos ante un
paquete Debian con el software foo en la versin 1.0 y que el nmero de revisin
aportado por el desarrollador al crear el paquete es 1.
La principal herramienta de manejo de archivos de Debian es dpkg.
Instalacin
La sintaxis bsica para la instalacin de un paquete .deb es:
dpkg -i paquete.deb
La opcin -i (install) permite instalar el archivo Debian especificado como argumento:
[root]# dpkg -i vim_6.1.018-1_i386.deb
Selecting previously deselected package vim.
(Reading database ... 53816 files and directories currently
installed.)
Unpacking vim (from vim_6.1.018-1_i386.deb) ...
Setting up vim (6.1.018-1) ...
Desinstalacin
Segn el efecto buscado, se usar -r (remove) para borrar el software conservando los
archivos de configuracin:
dpkg -r paquete
O -P (purge) para borrar todos los archivos del paquete:
dpkg -P paquete
As:
[root]# ls /etc/vim/vimrc
/etc/vim/vimrc
[root]# dpkg -r vim
(Reading database ... 54685 files and directories currently
installed.)
Removing vim ...
dpkg - warning: while removing vim, directory `/etc/vim not empty
so not removed.
dpkg - warning: while removing vim, directory
`/usr/share/doc/vim/html
not empty so not removed.
dpkg - warning: while removing vim, directory `/usr/share/doc/vim
not empty so not removed.
[root]# ls /etc/vim/vimrc
/etc/vim/vimrc
[root]# dpkg -P vim
(Reading database ... 53821 files and directories currently
installed.)
Removing vim ...
Purging configuration files for vim ...
[root]# ls /etc/vim/vimrc
ls: /etc/vim/vimrc: No such file or directory
3. Los archivos comprimidos
Una gran mayora de las aplicaciones utilizadas en Linux est bajo licencia GPL y
asimiladas, por lo que los archivos fuentes de la mayor parte de los programas estn
disponibles en forma de archivos comprimidos.
Se pueden conseguir estos archivos en webs dedicadas a las aplicaciones de Linux y en
los CD-ROM que acompaan a algunas revistas de informtica.
Estos archivos tienen habitualmente la extensin .tar.gz o .tgz en el caso de archivos
creados mediante el comando tar y comprimidos con gzip.
Instalacin
Para instalar una aplicacin distribuida en este formato, es preciso:
descomprimir el archivo .tgz en el directorio /tmp o /usr/src previsto a tal efecto;
explorar los archivos contenidos en el archivo y recuperar el archivo llamado
normalmente README o INSTALL.
Los desarrolladores de estos programas se esfuerzan en indicar, en este archivo
README, el proceso detallado de instalacin.
Desinstalacin
Generalmente no hay un procedimiento de desinstalacin que acompaa a las
aplicaciones en forma de archivos comprimidos; la desinstalacin de este software
requiere un buen conocimiento del producto y de los archivos que lo acompaan para
evitar dejar archivos hurfanos
Herramientas de administracin
Existen en Linux diversas herramientas que facilitan la administracin del sistema.
stas son adecuadas para la mayora de tareas administrativas normales realizadas por
un usuario principiante.
Herramientas especficas de una aplicacin
Ciertas herramientas han sido desarrolladas por los autores de una aplicacin y estn
dedicadas a ella; es el caso de la herramienta SWAT (Samba Web Administration Tool).
Herramientas especficas de una distribucin de Linux
Los editores de una distribucin desarrollan otras herramientas para permitir la
configuracin bsica de dicha distribucin en particular.
Para encontrar las herramientas que acompaan a la distribucin, se recomienda a quien
empieza y a quien quiera administrar su sistema que lea la informacin indicada en la
documentacin y durante la instalacin.
Las distribuciones de Mandriva cuentan con un centro de control grfico.
Las distribuciones Red Hat y Fedora vienen con un conjunto de herramientas cuyo
nombre empieza por system-config-* y a las que puede accederse mediante mens de la
interfaz grfica:
[root]# cd /usr/bin
[root]# ls system-config-*
system-config-authentication system-config-printer-applet
system-config-date system-config-samba
system-config-keyboard system-config-services
system-config-printer system-config-users
La distribucin Ubuntu, y en general las basadas en la interfaz GNOME, ofrece distintas
herramientas de administracin desde el centro de control de GNOME:

En cuanto a SuSE, sus principales herramientas de configuracin del sistema se llaman
yast (Yet Another System Tool) y yast2; la primera propone una interfaz de lnea de
comandos y la segunda, una interfaz grfica. Veamos una captura de pantalla de yast2:

Herramientas genricas de Linux
Finalmente, existen otras herramientas genricas, como Webmin, que no estn
vinculadas a una distribucin o a una aplicacin.
Webmin propone al programador toda una serie de rutinas para el desarrollo de mdulos
de administracin. El nmero de mdulos desarrollados es muy alto y actualmente se
puede administrar casi la totalidad de servicios de un sistema Linux con la interfaz
propuesta por Webmin, es decir, mediante un navegador web:

Vous aimerez peut-être aussi