Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Linux Principios Basicos de Uso Del Sistema 1
Linux Principios Basicos de Uso Del Sistema 1
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.
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...
"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...
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.
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.
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.
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.
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.
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).
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.
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.
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:
Linus (torvalds@kruuna.helsinki.fi)
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!
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.
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
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...).
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.
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...
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.
openSUSE
Ubuntu
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.
KNOPPIX
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.
Red Hat
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.
SuSE
Debian
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.
Slackware
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.
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
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.
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.
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:
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:
Tanto si se trata del modo texto como del modo grfico, la contrasea escrita por el
usuario no se muestra en pantalla.
* Documentation:https://help.ubuntu.com/
[nicolas@ubuntu:~]$
El shell indica que est en espera de una instruccin presentando un smbolo del sistema
(o prompt) al principio de la lnea.
[nicolas@doe tmp]$
En Debian o Ubuntu:
nicolas@doe:~$
O incluso:
[root@doe bin]#
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]$
$ comando
En la mayora de los casos, los argumentos son los nombres de los archivos sobre los
que actuar el comando.
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.
$ 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 --help
$ comando --version
Segn su sintaxis, realizar la distincin entre opciones y argumentos puede ser difcil.
$ 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
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
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:
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
Historial de comandos
Varios
2. En modo grfico
Los atajos de teclado disponibles en la interfaz grfica dependen del administrador de
ventanas y del entorno de escritorio utilizado.
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.
[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
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)
$ 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.
Los usuarios inscriben en su archivo .plan ("planning") sus reuniones, citas y otra
informacin que figura en su agenda.
[nicolas]$ passwd
Changing password for nicolas
(current) UNIX password:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
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
[nicolas]$ wc -l /etc/archivo
2 /etc/archivo
[nicolas]$ wc -w /etc/archivo
14 /etc/archivo
[nicolas]$ wc -c /etc/archivo
82 /etc/archivo
[nicolas]$ clear
Para ser ms exactos, devuelve todos sus argumentos separados por un solo espacio:
[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
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:
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.
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...
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
NOMBRE
finger - buscar informacin sobre un usuario.
SINOPSIS
finger [-lmps] [user...] [user@host...]
DESCRIPCIN
finger muestra informacin sobre los usuarios.
Opciones:
Navegacin en la pgina
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.
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:
La visualizacin producida indica que el comando bc, en la seccin 1 del manual (cifra
mostrada entre parntesis), permite efectuar clculos matemticos.
$ 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
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.
$ info
File: dir Node: Top This is the top of the INFO tree
* Menu:
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".
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:
Synopses:
date [OPTION]... [+FORMAT]
date [-u|--utc|--universal] [ MMDDhhmm[[CC]YY][.ss] ]
En esta ocasin, nos encontramos en el nodo "date invocation" (Node: date invocation)
del archivo de documentacin "coreutils" (File: coreutils.info).
Organizacin de la documentacin
Navegacin
Varios comandos (teclas del teclado), bajo info, permiten pasar de un nodo a otro;
destacan:
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.
Sube pantalla por pantalla en la pgina o pasa al nodo anterior,
[Supr]
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.
Consideraciones
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.
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.
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
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.
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.
/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.
[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
http://www.tldp.org
Editores
http://www.redhat.es
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/
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.
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
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
Por razones no detalladas en esta obra, este directorio puede disponer de una particin
distinta.
3. /dev
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.
5. /root
Este directorio tiene la misma funcin que el anterior, pero est reservado al usuario
root que es el administrador del equipo.
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
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.
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.
10. /sys
11. /usr
Se puede crear una particin especial para este directorio al instalar el sistema.
/usr/games
Como su nombre indica, los juegos instalados en el sistema deberan encontrarse aqu.
/usr/include
/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.
/usr/share
/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.
/var/lib
/var/log
/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.
/var/run
/var/spool
/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.
Este directorio corresponde, en cierto modo, a la base de registros del sistema Windows.
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 /dev/fd0
mount /dev/cdrom
[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.
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.
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.
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:/
Atencin: los comandos mtools no pueden acceder a los medios ya montados con el
comando mount.
Sintaxis
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.
$ ls -fic
Longitud
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.
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.
1. Rutas absolutas
Una ruta absoluta se basa en la raz del rbol de Linux. Toda ruta absoluta empieza,
pues, por /.
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:
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
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
[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.
[willy]$ pwd
/var
[willy]$ whoami
willy
[willy]$ cd
[willy]$ pwd
/home/willy
[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
[willy]$ cd
[willy]$ pwd
/home/willy
[willy]$ ls
colores formas notas
[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
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.
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"
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
[willy]$ ls -i
15874 colores 15882 formas 15880 notas
[willy]$ ls -i /bin/gzip /bin/gunzip
32837 /bin/gunzip 32837 /bin/gzip
[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.
[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
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:
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.
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:
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
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
[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:
./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.
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
[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:
[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
./colores:
azul amarillo rojo
./formas:
amarillo rombo notas crculo tringulo
./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
-d (o --no-dereference) permite copiar los enlaces como tales en lugar de copiar los
archivos a los que apuntan.
[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
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/formas:
amarillo rombo notas crculo tringulo
./formas:
amarillo rombo crculo tringulo
[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
4. mv
El comando mv (move) permite mover y renombrar archivos o directorios.
El origen puede ser tanto un archivo normal como un directorio; este archivo:
[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:
./colores:
azul amarillo rojo verde
./formas:
cuadrado curva rombo crculo tringulo
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.
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
Sin la opcin -s, este comando crear un enlace duro (hard link), mientras que con la
opcin -s, crear un enlace simblico (soft link):
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.
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.
2. Konqueror, Nautilus
En la consola grfica, los administradores de archivos ms extendidos son Konqueror y
su substituto Dolphin y Nautilus.
Consultar archivos
1. cat
cat muestra en la pantalla el contenido de los archivos pasados como argumento en la
lnea de comandos:
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:
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.
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:
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:
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.
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
~
~
~
~
~
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.
$ vi archivo
$ 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:
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.
Los principales comandos de desplazamiento del cursor en una misma lnea son:
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.
Adems de las teclas [j] y [k], que permiten mover el cursor a la lnea siguiente o
anterior, existen principalmente:
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:
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".
Borrar caracteres
Una serie de comandos que empiezan por d (delete) permite borrar todo o parte de una
lnea:
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.
Anular y repetir
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
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.
/modelo o ?modelo.
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
:[rango]s/modelo/cadena/[g][i][I]
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
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:
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.
: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
:set nonumber
Por ejemplo, para fijar la anchura visible de una tabulacin en cuatro espacios:
:set tabstop=4
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:
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.
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
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:
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.
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
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
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.
En primer lugar, es necesario saber que los derechos de acceso en Linux se definen por:
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.
En el ejemplo del apartado anterior, el usuario willy que tiene los permisos rw-:
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).
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.
[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
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.
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
Como ocurre con los permisos estndar, se puede diferenciar el significado de estos
permisos extendidos segn el tipo de archivo considerado: archivo o directorio.
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
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/
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
[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/
./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
./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
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:
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:
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
Hay dos maneras de indicar los permisos de acceso a un archivo en Unix: en notacin
simblica y en notacin octal.
Notacin simblica
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.
<entidad(es)>[+-=]<permiso(s)>
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:
[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
Un nmero de 3 bits puede codificarse en una sola cifra de base octal; la tabla de
conversin siguiente permite relacionar las notaciones:
[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).
Archivo Directorio
conjunto de permisos rwxrwxrwx rwxrwxrwx
fundamentales
mscara 002 -------w- -------w-
La
permisos predeterminados de los rw-rw-r-- (supresin de los
rwxrwxr-x mscar
archivos permisos x) a del
admini
strador generalmente es 022; root otorga por tanto menos confianza a su grupo que un
usuario normal.
[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
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.
El trmino "tarea" equivale al trmino "proceso". Por ello se califica a Linux de sistema
multitarea.
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.
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
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.
Campo STAT
Los estados definidos por el campo STAT presentan tres caracteres. En Linux, los
valores del primero significan:
R
Proceso en curso de ejecucin.
(Running)
T
Proceso parado (con las teclas [Ctrl]+[z] por ejemplo).
(sTopped)
S
Proceso dormido, en espera de procesador.
(Sleeping)
Proceso dormido en espera de un recurso (generalmente una
D
entrada/salida). Los procesos en este estado no pueden
(Device)
interrumpirse.
Proceso terminado. Seguir en este estado hasta que su padre lo
Z note y recupere su cdigo de retorno. Como los anteriores (D), esos
(Zombie) procesos no pueden interrumpirse, pero no consumen ningn
recurso, excepto una entrada en la tabla de procesos.
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.
Para modificar los campos presentados, pulse la tecla [f] (field) y seleccinelos en un
men.
[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.
El comando killall debe utilizarse con mucha precaucin porque enva la seal a todos
los procesos con el nombre pasado como argumento.
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.
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)
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)
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 programa top, visto anteriormente, tambin permite enviar seales a los procesos;
para ello, hay que pulsar la tecla [k] una vez ejecutado ste.
Por ejemplo, el "Monitor del sistema GNOME" funciona tambin con el entorno de
escritorio KDE y se inicia con el comando gnome-system-monitor:
Les ejemplos presentados hasta ahora funcionan como programas iniciados en primer
plano, es decir, procesos que pasan el control al usuario slo cuando terminan.
Por ejemplo:
[nicolas]$ sleep 10
(espera de 10 segundos)
[nicolas]$
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:
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.
[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:
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:
Encontramos en esta lista con el carcter & el nmero de "job" indicado al ejecutar los
procesos en segundo plano.
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.
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)
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.
Este captulo pasa revista a diferentes funcionalidades ofrecidas por el shell Bash.
Generalidades y definiciones
El shell
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
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.
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:
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.
[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.
[nicolas]$ set
...
var1=12
var2=palabra
var3=dos palabras
var4=$car. especiales: $* ?{}()[]"\\&~|`!=%,.;#
var5=
var6=
var7=vender
...
[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:
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.
$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
$HOME
$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
[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.
PATH=$PATH:/nuevo_directorio
$PS1
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:
$PS2
Esta variable representa el smbolo del sistema secundario que se muestra cuando el
shell espera el resto de la entrada de un comando:
$PWD
$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
[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).
[nicolas]$ ls *e*
ejemplos redonda
[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.
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:
Los corchetes: [ ]
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
[nicolas]$ ls [b-e]*
banco blanco ejemplos
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].
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.
[:alnum:]
[:alpha:]
[:digit:]
[:graph:]
[:lower:]
Corresponde a los caracteres alfabticos en minscula. Equivale a [a-z].
[:print:]
[:space:]
[:upper:]
[:xdigit:]
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
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)
*(lista_motivo)
+(lista_motivo)
@(lista_motivo)
!(lista_motivo)
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 apstrofes:
Por ejemplo:
La barra invertida: \
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]$
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":
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.
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.
[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
[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:
5. Redirecciones combinadas
Se puede redirigir la entrada, la salida y el error simultneamente:
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.
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:
6. Ejemplos de redirecciones
Como en el comando wc, es necesario redefinir el comando cat de forma ms precisa
para comprender los ejemplos siguientes:
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:
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:
Sin argumentos y con redirecciones de entrada y salida, cat permite realizar una copia
de un archivo:
Con varios argumentos y una redireccin de salida, cat concatena los archivos de los
argumentos en el archivo de la redireccin:
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:
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
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.
[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.
Por ejemplo:
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.
Un alias est compuesto por un nombre (generalmente simple) que ser reemplazado
por un comando (generalmente complejo o largo).
[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 ..
[nicolas]$ pwd
/home/nicolas
[nicolas]$ s
[nicolas]$ pwd
/home
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:
Se puede suprimir todos los alias con la opcin -a del comando unalias:
[nicolas]$ unalias -a
[nicolas]$ alias
Ejecucin de comandos
Los comandos escritos por el usuario pueden ser de diferentes naturalezas:
alias;
comando interno;
comando externo.
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:
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.
[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 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
allexport
emacs
ignoreeof
noclobber
Con esta opcin, el shell no borra un archivo existente en una redireccin simple; para
forzarlo, hay que emplear la sintaxis >|:
noglob
[nicolas]$ echo *
blanco azul amarillo marrn rojo verde violeta
[nicolas]$ set -o noglob
[nicolas]$ echo *
*
nounset
verbose
Muestra las lneas de comandos a medida que se leen; muy til para la depuracin de
scripts del shell:
vi
La edicin de la lnea de comandos sigue el estilo del programa de edicin Vi.
xtrace
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.
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.
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.
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).
. prog.sh
El comando interno del shell . (punto) indica al bash actual que interprete las
instrucciones contenidas en el archivo pasado como argumento.
En este caso, el entorno del shell de conexin se modifica segn el cdigo del script que
ejecuta:
[nicolas]$ . prog.sh
mi jun 30 07:47:38 CEST 2008
nicolas
12
[nicolas]$ echo $var
12
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.
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.
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
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:
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.
Comentarios
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:
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.
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.
[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:
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
Los espacios alrededor del ; en la lnea de comandos no son obligatorios, pero mejoran
la legibilidad.
1. Ejecucin condicional
Para ejecutar el comando cmd2 slo si el comando cmd1 ha tenido xito, se separan
ambos con &&:
En el caso contrario, para ejecutar el comando cmd2 slo si el comando cmd1 termina
anormalmente, se separan ambos con ||:
Son tiles en fase de pruebas, los comandos true y false terminan respectivamente con
un cdigo de retorno de cero y uno:
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:
2. $0
La variable $0 contiene el nombre del script en curso de ejecucin tal como ha sido
llamado en la lnea de comandos:
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:
Comando shift
4. $#
El nmero de parmetros posicionales se encuentra en la variable $#:
5. $*, $@
Estas dos variables contienen el conjunto de parmetros posicionales pasados en la lnea
de comandos:
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:
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
-d archivo
[nicolas]$ archivo=/etc
[nicolas]$ [ -d "$archivo" ] && echo "$archivo es un directorio"
/etc es un directorio
-r archivo
-w archivo
-x archivo
-e archivo
Devuelve verdadero si el archivo existe (exist).
-s archivo
Devuelve verdadero si archivo1 es idntico a archivo2 (equal file), es decir, si los dos
archivos poseen el mismo inodo.
[nicolas]$ cadena=abc
[nicolas]$ [ -n $cadena ]; echo $?
0
[nicolas]$ [ -n "" ]; echo $?
1
-z cadena
cadena1 = cadena2
cadena1 != cadena2
3. Test aritmtico
valor1 -eq valor2
[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 (=, !=).
Devuelve verdadero si los dos valores aritmticos son diferentes (not equal).
[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
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
[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 \)
[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.
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.
Operadores aritmticos
+: suma
-: resta
\*: multiplicacin
/: divisin entera
%: resto de la divisin entera o mdulo
\( y \): parntesis
[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
\|: 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.
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
+: suma
-: resta
*: multiplicacin
/: divisin entera
%: resto de la divisin entera o mdulo
**: potencia
=: asignacin
Operadores lgicos
&&: y lgico
||: o lgico
!: negacin lgica
<: estrictamente menor
<=: menor o igual
>: estrictamente mayor
>=: mayor o igual
==: igual
!=: desigual
Otros operadores
~: 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.
[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
[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
[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:
Estructuras de control
Las estructuras de control permiten ejecutar uno o ms comandos segn el resultado de
una expresin.
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.
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:
Por ejemplo:
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:
Introduccin
Aunque los usuarios normales no poseen los derechos necesarios para la administracin
del sistema, sin embargo pueden modificar su entorno personal.
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.
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:
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
[nicolas]$ chfn
Modificacin de la informacin de finger para nicolas.
Contrasea:
Nombre[]: Nicolas Pons
Oficina[]:
Telfono oficina[]:
Telfono casa[]:
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.
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.
[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.
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 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.
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.
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.
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.
Los mens propuestos por los entornos de escritorio permiten acceder a estas
herramientas de configuracin.
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...).
tar
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:
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.
[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.
[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
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.
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 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
$ ls -R
.:
archivo1 archivo2 dir1 dir2
./dir1:
./dir2:
$ find
.
./dir2
./dir1
./archivo2
./archivo1
$ find .
.
./dir2
./dir1
./archivo2
./archivo1
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:
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.
-name motivo
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:
-size [+-]<tamao>(bck)
-size archivos que usan exactamente doce bloques de datos, por tanto un
12 tamao comprendido entre 11 y 12 bloques.
-size - archivos que usan menos de doce bloques de datos, por tanto de un
12 tamao estrictamente inferior a 12 bloques.
-size archivos que usan ms de doce bloques de datos, por tanto de un
+12 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:
-mtime [+-]<das>
-perm <permisos>
Esta expresin permite recuperar todos los archivos con permisos de acceso
particulares.
-newer <archivo>
La expresin -newer busca todos los archivos con una fecha de modificacin ms
reciente que el archivo de referencia pasado como parmetro.
$ 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.
$ 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.
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.
Por ejemplo, para buscar todos los archivos que pertenecen al usuario nicolas y cuyo
nombre empieza por s en el directorio /tmp:
-or u -o
Por ejemplo, para buscar todos los archivos que pertenecen al usuario nicolas y cuyo
nombre empieza por s en el directorio /tmp:
Por ejemplo, para buscar todos los archivos cuyo nombre no empieza por s en el
directorio /tmp:
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:
d. Acciones
$ 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.
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.
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.
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:
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":
La opcin -v puede usarse tambin para suprimir la lnea del proceso grep en el primer
ejemplo del apartado con:
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:
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
Opcin -i
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:
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.
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":
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
$ 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
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:
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.
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.
$ sort frutas
manzana.2
pera.4
tomate.10
Veamos una clasificacin a partir del tercer carcter en el primer campo de cada lnea:
Veamos una clasificacin sobre el primer carcter del segundo campo de cada lnea:
$ 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:
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.
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.
Instalar programas
Los programas que funcionan en Linux se distribuyen en diferentes formatos:
Instalacin
Por ejemplo:
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:
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.
Instalacin
dpkg -i paquete.deb
Desinstalacin
Segn el efecto buscado, se usar -r (remove) para borrar el software conservando los
archivos de configuracin:
dpkg -r 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
Instalacin
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.
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).
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
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: