P. 1
sor030

sor030

|Views: 943|Likes:

More info:

Published by: Daniel Leon Carrasco on Dec 11, 2010
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

12/05/2012

pdf

text

original

Open Source University RHEL4: Computing Essentials

Distribuye y comparte este libro Copy/paste and edit by Maelwys

1

Quick Tour
Inicio de sesión Conceptos clave • • • • • • • • En Linux, hay que comenzar las sesiones de usuario "iniciando la sesión" en la máquina. Para iniciar la sesión se debe contar de antemano con un nombre de usuario y una contraseña. Si una máquina Linux se encuentra ejecutando en un servidor X, los usuarios pueden iniciar la sesión utilizando la interfaz gráfica. Los usuarios pueden iniciar la sesión en cualquiera de las seis consolas virtuales. Las teclas CTRL-ALT-F1 hasta CTRL-ALT-F6 realizan el cambio entre las seis consolas virtuales. Las teclas CTRL-ALT-F7 cambian al servidor X predeterminado. Si una máquina Linux lo soporta, los usuarios pueden iniciar la sesión en la red utilizando una shell remota. El comando who enumera los usuarios que actualmente tienen una sesión activa y la manera en que iniciaron la sesión.

Discusión Inicio de Sesiones Linux El sistema operativo Unix, desarrollado originalmente a principios de los años setenta, precede los días de los computadores personales. Originalmente, muchos usuarios utilizarían Unix de manera simultánea operando en un computador central. En vez de que cada usuario tuviese un computador personal, utilizaban lo que se conoce comúnmente (hoy en día) como un"terminal tonto" - apenas un teclado y un monitor de texto conectados al computador central con una conexión serial. Para identificarse con el sistema operativo Unix, el usuario tenía que "iniciar sesión" primero con un userid y su contraseña. Aunque Linux (y otras versiones de Unix) han crecido para tomar ventaja de los computadores personales al alcance de todos, no ha perdido los conceptos esenciales como los usuarios, las contraseñas, el inicio de sesión y las terminales basadas en texto. Esta lección describirá muchas de las formas para iniciar una sesión interactiva con un sistema Linux. Consolas virtuales Red Hat Enterprise Linux proporciona seis "consolas virtuales" disponibles para los usuarios que se encuentran físicamente frente al computador. Las consolas virtuales actúan como "terminales tontos". Para acceder a ellas se deben pulsar las teclas desde CTRL-ALT-F1 hasta CTRL-ALT-F6 con una consola virtual asociada a cada una de las primeras teclas de función (si se encuentra en un entorno gráfico debe recordar que CTRL-ALT-F7, le llevará de regreso a esta consola antes de intentar cambiar de consola virtual). Al iniciar una sesión en una máquina Linux utilizando una consola virtual, la pantalla se verá así:

2

Red Hat Enterprise Linux ES release 4 (Nahant) Kernel 2.6.9-5.EL on an i686 station login: Para iniciar la sesión, el usuario digita su nombre de usuario sin espacios y pulsa la tecla INTRO. Después se le pide que escriba la contraseña , la cual no aparece en la pantalla, y luego pulsaINTRO. Iniciada la sesión, se recibe al usuario con un intérprete de comandos de la shell. Red Hat Enterprise Linux ES release 4 (Nahant) Kernel 2.6.9-5.EL on an i686 station login: elvis Password: [elvis@station elvis]$

La siguiente parte de este curso tratará de lo que se puede hacer desde el intérprete de comandos o "prompt" . Por ahora sólo vamos a aprender a terminar una sesión escribiendo el comando "exit" y pulsandoRETURN. La consola virtual debe regresar a la pantalla original de inicio de sesión. ¿Por qué los usuarios quieren utilizar una consola virtual en vez del entorno gráfico? Primero, puede que la máquina no tenga suficiente memoria o hardware para soportar el entorno gráfico y puede que todo lo que se encuentre disponible sean las consolas virtuales. Sin embargo, incluso en las máquinas modernas, es muy frecuente que las consolas virtuales sean una interfaz más rápida y más eficaz para los usuarios experimentados. Como son implementadas directamente por el kernel de Linux, también son útiles en la reparación de sistemas en donde no estén funcionando los gráficos. Por último, puesto que los servidores de red usualmente pasan la vida encerrados en armarios, los administradores quieren a menudo evitar la complejidad que la interfaz gráfica le añade al sistema. El Entorno Gráfico X Cuando Linux opera en computadores personales modernos, utiliza un programa de bajo nivel conocido como el "servidor X" para proveer el entorno gráfico. Como usuario del sistema, usted no interactúa directamente con el servidor X, sino que proporciona la base para todos los programas gráficos que ejecuta. Cuando el servidor X inicia, como parte de la secuencia de inicio del sistema, generalmente busca la "primera" consola virtual disponible. Debido a que hay seis consolas virtuales para los terminales de texto, el servidor X usualmente toma la séptima. Si se encuentra en una consola virtual y piensa que hay un servidor X ejecutando en la máquina, usted puede cambiarse a ésta pulsando las teclas CTRL-ALT-F7. Si un sistema se encuentra configurado para arrancar en el entorno gráfico, entonces se le presentará al usuario el Administrador de Inicio de Sesión, el cual se ve de la siguiente manera: Figure 1. Administrador de Inicio de Sesión de Red Hat Enterprise Linux

3

De nuevo, un usuario inicia la sesión al escribir su nombre de usuario seguido de INTRO y su contraseña seguida de INTRO. Terminales en el entorno gráfico El menú de aplicaciones en el entorno gráfico se encuentra en la esquina superior izquierda y sirve como portal de entrada a una amplia variedad de aplicaciones gráficas, incluyendo navegadores, editores de texto, editores de imágenes, juegos y mucho más. Aunque le alentamos a que explore estas aplicaciones , comenzaremos este curso enfocándonos en los fundamentos de operación dentro del entorno Linux tales como la administración de archivos y procesos. Por ahora, la aplicación más importante para usted en el entorno gráfico es la terminal. En Red Hat Enterprise Linux, la terminal comúnmente utilizada es la llamada gnome-terminal. Se puede abrir una nueva ventana gnome-terminal haciendo click en el botón derecho del ratón sobre el fondo del escritorio y seleccionando la primera opción del menú "Abrir una terminal". Figure 1. Apertura de una gnome-terminal Los usuarios experimentados de Linux con frecuencia prefieren la versatilidad y la potencia de la interfaz de la línea de comandos en vez de las aplicaciones gráficas. De manera similar a una consola virtual, el terminal proporciona una interfaz de línea de comandos de shell. Debido a que el usuario ya ha iniciado sesión para poder arrancar en la sesión gráfica, no necesita iniciar otra vez la sesión al abrir una nueva terminal. Figure 2. gnome-terminal Cuando termine puede cerrar la gnome-terminal escribiendo el comando exit (seguido de INTRO), o haciendo click en el botón izquierdo de la "opción para cerrar" que se encuentra en la esquina superior derecha de la terminal. Salida del entorno gráfico Cuando un usuario termina con el entorno gráfico, este puede salir seleccionando la última opción del menú de Acciones que está justo a la derecha del menú de Aplicaciones. Esto cerrará todas las ventanas y regresará el entorno gráfico a su pantalla de inicio original, listo para el siguiente usuario. Figure 1. Salida del entorno gráfico Uso del comando who para determinar quién se encuentra en el sistema Los usuarios pueden utilizar el comando who para determinar quién se encuentra en el sistema y cómo iniciaron la sesión. Desde cualquier terminal los usuarios pueden escribir who y presionar la tecla INTRO. Deben ver una salida similar a la siguiente: [elvis@station elvis]$ who elvis tty2 May root tty1 May blondie :0 May blondie pts/0 May

5 3 5 5

15:07 07:50 08:48 09:03 (:0.0)

4

La primera columna lista los usuarios que han iniciado sesión y las últimas columnas establecen la hora en que la iniciaron. Con un poco de experiencia, la segunda columna le dice el lugar en donde el usuario inició la sesión. Para los primeros dos usuarios, elvis y root, tty1 y tty2 se refiere a las consolas virtuales 1 y 2 respectivamente. La primera entrada para blondie, :0, se refiere al servidor X mismo y pts/0 se refiere a la primera terminal abierta en el servidor X. Sin detenernos mucho en los detalles, podemos ver que elvis ha iniciado sesión en la segunda consola virtual, root en la primera y blondie ha iniciado sesión utilizando el entorno gráfico. Inicio de sesión en una máquina a través de la red Al utilizar la opción ssh ("secure shell"), los usuarios pueden iniciar una sesión fácilmente en máquinas remotas ya sea en el mismo lugar o al otro lado del mundo. Asumiendo que la máquina remota se encuentra configurada para permitir el inicio de sesión de manera remota y que el usuario tiene una cuenta en la máquina, el iniciar una sesión en una máquina remota puede ser tan fácil como iniciar una sesión en una consola virtual. En el siguiente ejemplo, elvis iniciará una sesión en una consola virtual en la máquina local llamada station.redhat.com. Después utilizará ssh para iniciar la sesión en una máquina remota nimbus.example.com, muy posiblemente al otro lado del mundo. Preste mucha atención al intérprete de comandos en el siguiente ejemplo. Como con frecuencia los usuarios de Linux van "saltando" de máquina en máquina utilizando shells remotas, el intérprete de comandos ha sido diseñado para ayudar al usuario a recordar en qué máquina está operando la shell. Red Hat Enterprise Linux ES release 4 (Nahant) (Taroon) Kernel 2.4.21-4.0.1-EL on an i686 station login: elvis Password: Last login: Thu Apr 3 13:03:06 from hedwig [elvis@station elvis]$ who elvis tty2 May 3 07:48 [elvis@station elvis]$ ssh elvis@nimbus.example.com elvis@nimbus.example.com's password: Last login: Thu May 1 17:38:43 2003 from station.redhat.com [elvis@nimbus elvis]$ who elvis pts/1 May 3 11:59 (station.redhat.com) [elvis@nimbus elvis]$ exit Connection to nimbus.example.com closed. [elvis@station elvis]$ exit

Observe que cuando elvis ejecutó el comando who en la máquina remota, ésta reportó la máquina desde donde inició la sesión llamada station.redhat.com. Hay clientes ssh para sistemas operativos diferentes de Linux. Por ejemplo, la aplicación Open Source PuTTY se puede instalar en casi cualquier máquina windows y se puede utilizar para abrir un intérprete de comandos en un servidor Linux remoto.

5

Ejemplos Uso de consolas virtuales En el siguiente ejemplo, un usuario inicia sesión en la primera consola virtual como el usuario elvis, pero luego se da cuenta de que su sistema se encuentra mal configurado. Para poder arreglar esto, va a cambiar a la segunda consola virtual e iniciará sesión como root y arreglará el problema. Luego saldrá y regresará a la primera consola virtual listo para iniciar. Red Hat Enterprise Linux ES release 4 (Nahant) Kernel 2.6.9-5.EL on an i686 station login: elvis Password: Last login: Mon May 5 15:07:16 on tty2 [elvis@station elvis]$ cat /tmp/README cat: /tmp/README: Permission denied [elvis@station elvis]$ who elvis tty1 May 5 15:54 En este momento, elvis ha tratado de leer el archivo /tmp/README, pero los permisos del archivo no le permitieron hacerlo. Debido a que el usuario conoce la contraseña para la cuenta de root (del administrador) en la máquina, puede arreglar el problema cambiándose a otra consola virtual (utilizando las teclas CTRL-ALT-F2), iniciando sesión como root y cambiando los permisos del archivo. Red Hat Enterprise Linux ES release 4 (Nahant) (Taroon) Kernel 2.4.21-4.0.1-EL on an i686 station login: root Password: Last login: Mon May 5 15:54:18 on tty6 [root@station root]# who root tty2 May 5 15:55 elvis tty1 May 5 15:54 [root@station root]# chmod go+r /tmp/README [root@station root]# exit Observe que la salida del comando who muestra que el usuario inició sesión como elvis en la primera consola virtual e inició sesión como root en la segunda. El usuario ahora cambia de vuelta a la primera consola virtual utilizando CTRL-ALT-F1 y reanuda la sesión. [elvis@station elvis]$ cat /tmp/README Kudzu FAQ: ---------1) So, what is kudzu? kudzu is the hardware autodetection & configuration tool, originally introduced in Red Hat Linux 6.1. It detects changes in the system's hardware configuration, and gives the option of configuring ...

6

El kernel, los programas y los procesos Conceptos clave • • • • • • El kernel de Linux es un sistema operativo que proporciona un entorno para la ejecución de procesos. Los programas son archivos ejecutables (usualmente binarios) que se encuentran en un sistema de archivos. Un proceso es una instancia de un programa en ejecución. Una shell es un proceso interactivo que permite al usuario specificar otros procesos a ejecutar. Aunque Red Hat Enterprise Linux se entrega con diferentes versiones de shells, la shell predeterminada es un programa llamado bash. El comando ps lista los procesos iniciados desde una terminal individual. El comando ps aux le da una lista detallada de todos los procesos operando actualmente en una máquina.

Discussion El kernel de Linux El kernel de Linux es un sistema operativo así como Windows, MacOS y OS/2. El sistema operativo es un entorno en el cual se ejecuta un programa. proporcionándole los mecanismos a los programas para interactuar con el hardware del computador. El kernel le permite saber a un programa cuándo se pulsa una tecla, cuándo se mueve el ratón o cuándo llegó un paquete destinado para el programa a través de la red . El kernel le permite a los programas acceder al disco duro, quizás para leer los archivos de configuración o almacenar datos. Así como sería difícil explicar lo que es un lenguaje a una persona que ha crecido con el conocimiento de un solo idioma, con frecuencia es difícil explicar lo que es un sistema operativo a aquellas personas nuevas en el área de los computadores o a aquellos que solamente han utilizado un sistema operativo. El sistema operativo funciona en un nivel tan bajo que los usuarios no interactúan con éste directamente y a menudo no se dan cuenta de que los programas que se encuentran ejecutando lo están utilizando. Figure 1. El kernel y los procesos

Los programas Los programas son archivos almacenados en el disco duro de un computador. Un programa es una serie de instrucciones básicas que le indican al sistema operativo qué hacer y cuándo hacerlo de una manera bastante detallada y específica. Las siguientes pueden ser las instrucciones escritas en el archivo /usr/X11R6/bin/xcalc, un programa común de calculadora.

7

"Mientras que el usuario no esté haciendo nada, el cursor titila. Cuando el usuario pulsa una tecla, si es un número, lo escribe en la pantalla. Si no es un número lo ignora, a menos que sea la tecla intro. Si es la tecla intro, añade el número anterior al total y muestra el total." Claro está que las instrucciones no se encuentran en inglés ni en ningún otro lenguaje humano. En cambio, un computador en el nivel más bajo sólo sabe cómo realizar un pequeño número de tareas, digamos 256 de ellas. Imagine que cada una de esas tareas estuviesen numeradas de 0 a 255. Los programas se ven en realidad más como las siguientes instrucciones: "Realice la tarea 23. Si el resultado es mayor que 0, entonces haga la tarea 45. De otra forma, complete la tarea 82. Tome el resultado y almacénelo en la memoria." Debido a que las tareas que un computador puede llevar a cabo varían dependiendo del tipo de CPU, y que diferentes sistemas operativos podrían listar las tareas de forma diferente, los programas compilados para un tipo de sistema operativo, por lo general, no ejecutarán en otros sistemas operativos. Los procesos Cuando un usuario le pide al kernel que ejecute un programa, el kernel lee las instrucciones que se encuentran en el el archivo del programa y las carga en la memoria. Después empieza a llevar a cabo las instrucciones . La copia del programa ejecutando en la memoria se denomina un proceso. Observe que el mismo programa se puede cargar en la memoria y se puede ejecutar más de una vez para que en cualquier momento el kernel pueda ejecutar varios procesos del mismo programa. Linux, como la mayoría de sistemas operativos modernos, es un sistema operativo de funciones múltiples. Esto significa que el kernel parece estar ejecutando múltiples procesos de manera simultánea. En realidad, el kernel se encuentra ejecutando un sólo proceso por un breve periodo de tiempo, usualmente alrededor de 50 milisegundos. Luego intercambia ese proceso por otro con sus 50 milisegundos de acción. Finalmente, el kernel termina todos los procesos y comienza de nuevo. El rápido cambio de proceso a proceso le da la impresión a los usuarios de la máquina de que todos los procesos se están ejecutando simultáneamente. Las shells Los usuarios de Linux con frecuencia utilizan un tipo especial de programa llamado shell para interactuar con el kernel. La shell ejecuta dentro de una terminal emitiendo un "prompt"y esperando a que le digan qué hacer. Luego, el usuario le pide a la shell que ejecute un programa escribiendo el nombre del programa. En el siguiente ejemplo, el usuario elvis le pide a la shell que ejecute un programa sencillo de calendario llamado cal. La shell ejecuta obedientemente el programa y reporta la salida del programa a la terminal:

[elvis@station elvis]$ cal May 2003 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

8

18 19 20 21 22 23 24 25 26 27 28 29 30 31 [elvis@station elvis]$

Debido a que los usuarios utilizan una shell para llevar a cabo casi todas las tareas en el sistema, la shell es un programa importante y sofisticado. Gran parte de este curso se dedicará a aprender a utilizar la shell para realizar tareas de manera efectiva. Cuando el usuario le pide a la shell que ejecute un programa, se dice que el usuario está especificando un comando para la shell. Con frecuencia la shell se conoce como la interfaz de línea de comandos. El comando ps El comando ps se utiliza comúnmente para enumerar los procesos ejecutándose en un sistema. El comando ps, sin ningún argumento, muestra todos los procesos que se iniciaron desde una sola terminal (o una terminal en un entorno gráfico). En el siguiente ejemplo, elvis descubre que actualmente su terminal tiene dos procesos en ejecución: su shell bash y el comando mismo ps. [elvis@station elvis]$ ps PID TTY TIME CMD 1378 pts/1 00:00:00 bash 1418 pts/1 00:00:00 ps

La primera columna muestra el id del proceso (PID del inglés Process ID). Todo proceso ejecutándose en el sistema se identifica con un ID de proceso único. La segunda columna identifica la terminal de elvis y la tercera reporta el tiempo de CPU que el proceso ha utilizado. El comando ps aux muestra una lista detallada de todos los procesos ejecutándose en el sistema. Por ahora no explicaremos lo que significa "aux", sólo piense que es como un acto de magia negra que debe memorizar. Tampoco le explicaremos todos los campos, todo esto se discutirá en el siguiente cuaderno. Simplemente observe que en cualquier momento hay, por lo general, un gran número de procesos ejecutándose en un sistema Linux (note que en la siguiente salida se han eliminado bastantes líneas y se han reemplazado con "...").

9

[elvis@station elvis]$ ps USER PID %CPU %MEM root 1 0.0 0.1 root 2 0.0 0.0 ... root 548 0.0 0.2 root 552 0.0 0.1 rpc 570 0.0 0.2 root 622 0.0 0.2 root 628 0.0 0.0 root 633 0.0 0.1 root 644 0.0 0.5 root 655 0.0 0.3 root 674 0.0 0.9 smmsp 683 0.0 0.8 root 693 0.0 0.1 root 702 0.0 0.2 xfs 781 0.0 1.5 root 800 0.0 0.2 root 807 0.0 0.1 ... root 1375 0.0 0.3 elvis 1378 0.0 0.5 elvis 1438 0.0 0.2

aux VSZ 1388 0 1460 1384 1560 1496 0 1380 3524 2040 6204 6004 1424 1580 5272 3416 1364

RSS TTY 460 ? 0 ? 580 428 552 632 0 484 1512 860 2504 2256 444 672 4004 544 396 ? ? ? ? ? ? ? ? ? ? ? ? ? ? tty1

STAT START S 18:52 SW 18:52 S S S S SW S S S S S S S S S S S S R 18:53 18:53 18:53 18:53 18:53 18:53 18:53 18:53 18:53 18:53 18:53 18:53 18:53 18:53 18:53 20:11 20:11 20:30

TIME COMMAND 0:04 init [ 0:00 [keventd] 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 syslogd -m 0 klogd -x portmap /sbin/cardmgr [kapmd] /usr/sbin/apmd -p /usr/sbin/sshd xinetd -stayalive sendmail: accepti sendmail: Queue r gpm -t ps/2 -m /d crond xfs -droppriv -da rhnsd --interval /sbin/mingetty tt

4120 968 pts/1 4324 1404 pts/1 2648 696 pts/1

0:00 su - elvis 0:00 -bash 0:00 ps aux

El sistema de archivos Conceptos clave • • • • • • • La base del árbol de directorios de Linux es un directorio llamado / y conocido como el" directorio root". Las referencias absolutas de archivos, tales como /home/elvis/lsout.txt, se refieren a los archivos relativos al directorio raíz. Las referencias relativas de archivo, tales como lsout.txt, hacen referencia a archivos relativos al directorio de trabajo actual de un proceso. El comando ls se utiliza para enumerar el contenido de un directorio. El comando cat se utiliza para examinar el contenido de un archivo. Al utilizar el caracter > desde la línea de comandos de la shell, la salida de un comando puede redireccionarse desde la terminal a un archivo. El directorio home es uno de los pocos lugares en donde los usuarios pueden crear archivos nuevos.

Discusión Dar nombres a archivos y directorios En Linux,la información y los programas se encuentran almacenados en discos como archivos. Los archivos se encuentran agrupados en los directorios, los cuales pueden contener archivos y otros directorios (otros sistemas operativos con frecuencia se refieren a directorios como "carpetas").

10

Esta jerarquía de directorios que contienen directorios se conoce a menudo como el "árbol de directorios". La base del árbol de directorios es un directorio llamado simplemente / y se conoce como "el directorio raíz". Los archivos dentro del directorio raíz se conocen como /nombre del archivo. En Red Hat Enterprise Linux, el directorio raíz contiene principalmente otros directorios tales como /etc. Los archivos dentro de estos subdirectorios se conocen como /etc/nombre del archivo y el proceso continúa así para cada nuevo nivel de subdirectorios. Por ejemplo, el archivo network que se encuentra en el directorio sysconfig, que a su vez se encuentra en el directorio etc, el cual está en el directorio root /, puede conocerse como /etc/sysconfig/network. Obviamente, el iniciar en el directorio raíz cada vez que se refiera a un archivo es bastante trabajo. Afortunadamente, Linux proporciona una manera más fácil. Todo proceso, incluyendo la shell de un usuario, utiliza un "directorio actual de trabajo" por contexto. Los archivos en un directorio actual de trabajo se conocen simplemente como nombre de archivo, sin la barra oblicua inicial. Los archivos en los subdirectorios del directorio actual de trabajo se conocen como nombre del directorio/nombre del arhivo, de nuevo sin la barra oblicua inicial. Por ejemplo, si el directorio actual de trabajo de un proceso fuese /etc, el archivo network mencionado anteriormente se conocería como sysconfig/network. Si el directorio de trabajo fuese /etc/sysconfig entonces el archivo podría ser simplemente network. En resumen, siempre hay dos maneras de referirse a un archivo. Las referencias de archivo relativas al directorio raíz, siempre comienzan con una barra oblicua inicial / y se llaman referencias absolutas absolute. Las referencias de un archivo relativas al directorio de trabajo actual comienzan con cualquier cosa que no sea una / y se conocen como referencias relativas. Listado del contenido de un directorio con ls Desde una shell los usuarios pueden utilizar el comando ls para hacer un listado del contenido de un directorio (imagínese que ls es la forma corta para la palabra "lista"). En el siguiente ejemplo, el usuario elvis quiere hacer una lista del contenido del directorio /etc/sysconfig/rhn. [elvis@station elvis]$ ls /etc/sysconfig/rhn rhn-applet systemid up2date-keyring.gpg up2date-uuid rhnsd up2date up2date.rpmnew

El comando ls, cuando se emite sin ningún argumento (por ejemplo, sin especificar un directorio) lista el contenido del directorio de trabajo actual de la shell. Si utiliza una terminal con colores,el comando ls también le pone color a los nombres de los directorios para ayudar a distinguir el contenido de los directorios que tienen archivos comunes (en blanco) y los que son directorios (en azul). El ls es un comando muy flexible que puede proporcionar mucha información. Este se estudiará en más detalle en lecciones posteriores. Ver el contenido de un archivo con cat Mientras el comando ls lista los archivos que se encuentran en un directorio dado, éste no revela el contenido de los archivos. Aunque hay varios comandos disponibles para ver los archivos, el comando más sencillo es cat. Cuando se le da una lista de archivos al comando cat este concatena los archivos a la salida del terminal. Si sólo se le da el nombre de un archivo entonces mostrará el contenido de solo ese archivo.

11

0. [elvis@station elvis]$ ls /etc/sysconfig/rhn > lsout. [elvis@station elvis]$ cat /etc/hosts # Do not remove the following line. sólo tenga en cuenta que el comando cat presenta todo el contenido de este archivo de cinco líneas. La shell bash permite a los usuarios "redireccionar" la salida estándar a otros lugares. cat lo hará obedientemente.0.txt. Permisos y el directorio de inicio de un usuario Observe lo que pasa cuando elvis trata de redireccionar la salida a un archivo que se encuentra en un lugar diferente al directorio actual de trabajo de la shell. pero quiere redireccionar la salida a un archivo recién creado. una pantalla a la vez.1 localhost. Observe que si le pide a cat que presente un archivo muy largo o un archivo binario (no texto).gpg up2date.168. el usuario elvis quiere ver el contenido del archivo de configuración /etc/hosts. lo cual se verá más adelante. En "lenguage Unix" elvis "redireccionó la salida del comando ls al archivo lsout.1 station1. Hay comandos más sofisticados para ver archivos largos.168. Redireccionamiento de salidas de los comandos a archivos Cuando los comandos ls y cat se ejecutan su salida se presenta en la terminal.txt [elvis@station elvis]$ cat lsout. 127. En Linux. Después utiliza el comando cat para observar el contenido del archivo.0.example. Por ahora. or various programs # that require network functionality will fail.txt rhn-applet rhnsd systemid up2date up2date-keyring. Por defecto se encuentra conectado a la terminal.txt [elvis@station elvis]$ ls lsout. no se preocupe de lo que significa el contenido. la mayoría de los comandos que generan texto en la salida utilizan un concepto común de Unix denominado "salida estándar".com server1 192.example. el usuario elvis de nuevo va a hacer una lista del contenido del directorio /etc/sysconfig/rhn.rpmnew up2date-uuid La salida del comando ls /etc/sysconfig/rhn no se mostró en la terminal sino que se introduce en el archivo recién creado lsout.En el siguiente ejemplo.0. En el siguiente ejemplo. Despúes elvis toma el comando ls de su directorio de trabajo actual y ve el archivo recién creado.com station1 Por ahora.254 server1. vamos a aprender el caso más fácil: la utilización del caracter > para redireccionar la salida estándar a un archivo.localdomain localhost 192. 12 .txt".

txt [prince@station prince]$ cat calendar. De hecho. el directorio inicial de un usuario se llama /home/username. dondeusername se reempla con el nombre del nombre del usuario. sólo hay unos pocos lugares en donde se pueden crear archivos. El usuario elvis trató de crear el nuevo archivo /etc/lsout. los usuarios no pueden crear archivos en cualquier lugar. Por ahora.txt: No such file or directory El usuario elvis se ha encontrado con otro concepto común en Linux: propiedad y permisos de un archivo. Por defecto en Red Hat Enterprise Linux.txt. Ejemplos Redirección de la salida de un comando a un archivo El usuario prince quiere utilizar el comando cal para almacenar un calendario del mes actual en el archivo calendar.[elvis@station elvis]$ ls /etc/sysconfig/rhn > /etc/lsout. en Red Hat Enterprise Linux. su shell utiliza su directorio inicial como su directorio actual de trabajo.txt. [prince@station prince]$ cal May 2003 Su Mo Tu We Th Fr Sa 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 [prince@station prince]$ cal > calendar. Todo usuario tiene un directorio de inicio. en donde puede crear nuevos archivos (y nuevos subdirectorios). sólo tenga en cuenta que a los usuarios.txt [prince@station prince]$ ls calendar.txt May 2003 Su Mo Tu We Th Fr Sa 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 13 . Por defecto. sólo se les permite crear archivos en su directorio de inicio. pero elvis no tiene el permiso para crear archivos en el directorio /etc. generalmente. cuando los usuarios inician una sesión en Linux. Afortunadamente.txt -bash: /etc/lsout. Otros cuaderno abordarán el sistema de archivos y los permisos en mucho más detalle.

Aprender nuevos programas será mucho más fácil si toma un poco de tiempo para aprender estas convenciones. adverbios y objetos directos. El comando which seguido del nombre de otro comando le dirá "qué" archivo se está ejecutando. Los comandos usualmente soportan las opciones --help. incluyendo la eficiencia y la flexibilidad. existen convenciones que (casi) todos los programas siguen. los adverbios son las diferentes opciones que se pueden utilizar para modificar el comportamiento del comando (“calmadamente” o “con fluidez”) y las palabras que quedan son los objetos directos (sobre lo que el comando debe actuar). la lección anterior utilizó los comandos ps y who. las cuales presentan un resumen de cómo utilizar el comando. la simplicidad no es una de ellas. Comandos La primera palabra en cualquier comando es generalmente el nombre de un programa que vive como archivo en algún lugar del sistema de archivos. -h o -?. Si queremos saber qué archivo contiene estos programas. prince ejecuta otra vez el comando cal redireccionando la salida al archivo calendar. Ejecución de comandos Conceptos clave • • • • • • Como cualquier otro idioma la shell bash utiliza una gramática específica. [elvis@station elvis]$ which ps /bin/ps [elvis@station elvis]$ which who 14 . Además. [1] Por ejemplo. El comportamiento de los comandos se puede modificar con las opciones de la línea de comandos (usualmente opcional). El verbo es el comando a ejecutar.txt prince confirma que el nuevo archivo ha sido creado listando el contenido de su directorio de trabajo actual (en este caso su directorio de inicio).o --).prince primero ve la salida del comando cal directamente. Afortunadamente. Las palabras u opciones que siguen después del comando se llaman argumentos del comando arguments Algunas opciones de la línea de comandos también toman argumentos. hay irregularidades y para casi toda regla mencionada habrá excepciones. prince examina el contenido del nuevo archivo para confirmar que contiene la salida del comando cal. hay un programa llamado which que nos puede ayudar. La primera palabra en cualquier línea de comandos es el nombre del programa que se va a ejecutar. Discussion Gramática de la línea de comandos Aunque la interfaz de la línea de comandos tiene muchas ventajas. Si los comandos que se introducen en la línea de comandos se comparan con las oraciones en inglés entonces los comandos tienen verbos. así como en los idiomas. las cuales siempre empiezan con uno o dos guiones (.

Un ejemplo fácil es el comando ls utilizado para listar el contenido de un directorio. Considere los siguientes tres usos del comando ls cada vez que lista los archivos en el directorio /usr: [elvis@station elvis]$ ls /usr bin etc include lib local share tmp dict games kerberos libexec sbin src X11R6 [elvis@station elvis]$ ls -s /usr total 132 40 bin 4 games 40 lib 8 sbin 0 tmp 4 dict 8 include 4 libexec 8 share 4 X11R6 4 etc 4 kerberos 0 local 4 src [elvis@station elvis]$ ls -l /usr total 132 drwxr-xr-x 2 root root 40960 Apr 25 06:36 bin drwxr-xr-x 2 root root 4096 Jan 24 18:52 dict drwxr-xr-x 2 root root 4096 Jan 24 18:52 etc drwxr-xr-x 4 root root 4096 Jan 24 18:52 games drwxr-xr-x 100 root root 8192 Apr 11 05:55 include drwxr-xr-x 8 root root 4096 Mar 31 21:52 kerberos drwxr-xr-x 90 root root 40960 Apr 25 06:36 lib drwxr-xr-x 10 root root 4096 Apr 11 05:51 libexec lrwxrwxrwx 1 root root 14 Sep 13 2002 local -> . Opciones de la línea de comandos Se puede modificar el comportamiento de muchos de los comandos especificando las diferentes opciones de la línea de comandos. la salida estándar) del proceso se escriba en la terminal. Por ahora. Sólo observe cómo se utilizan las opciones de la línea de comandos para modificar el comportamiento básico del comando ls. Una vez el comando termina. el proceso de la shell le pide al kernel que ejecute el programa especificado como un proceso separado y hace que la salida (o mejor./home/local/ drwxr-xr-x 2 root root 8192 Apr 25 06:36 sbin drwxr-xr-x 212 root root 8192 Apr 23 16:30 share drwxrwxr-x 5 root pst 4096 Apr 25 08:12 src lrwxrwxrwx 1 root root 10 Apr 1 11:07 tmp -> . Entonces la shell realiza una pausa hasta que el proceso del comando termina. A veces estas opciones 15 ../var/tmp drwxr-xr-x 8 root root 4096 Jan 24 18:52 X11R6 El primer comando ls simplemente hace una lista del contenido del directorio. Opciones cortas de la línea de comandos Observe que las dos opciones que se utilizaron anteriormente -s y -l son opciones de una sola letra. presenta también el tamaño del contenido también.. propiedad y la fecha de modificación. no se preocupe de los detalles en la salida. la shell presenta otro intérprete de comandos y espera a que se le diga que hacer. el cual incluye la opción -s. El tercer comando ls -l presenta una lista "larga". ésto se abarcará en un cuaderno posterior sobre la utilización del sistema de archivos. El segundo comando ls -s. Estas se conocen como opciones "cortas" de la línea de comandos./usr/bin/who Cuando se ejecuta un comando. incluyendo todo tipo de detalles sobre los archivos tales como los permisos.

Múltiples opciones cortas de la línea de comandos Se puede utilizar más de una opción de la línea de comandos a la vez. el cual invierte el orden de búsqueda. De esta manera. como en el siguiente ejemplo: [elvis@station elvis]$ ls -srw 40 /usr/ total 132 4 X11R6 0 local 4 games 0 tmp 4 libexec 4 etc 4 src 40 lib 4 dict 8 share 4 kerberos 40 bin 8 sbin 8 include Todas las opciones con letras individuales que no tienen argumento. de la salida en caracteres. A diferencia de las opciones con sólo una letra. el comando ls tiene la opción -w. Los argumentos de las opciones simplemente siguen la opción de la línea de comandos. Observe cómo se utiliza junto con las opciones -s y -w. [elvis@station elvis]$ ls -s -w total 132 4 X11R6 0 local 4 0 tmp 4 libexec 4 4 src 40 lib 4 8 share 4 kerberos 40 8 sbin 8 include 40 -r /usr/ games etc dict bin Con frecuencia. los usuarios tomarán ventaja del atajo que les permite poner todas las opciones juntas con un sólo guión (-).cortas también pueden tener un argumento. en este caso -s y -r. la cual especifica la "extensión". la palabra 40 no se considera un argumento del comando ls sino que es un argumento de la opción del comando -w (¿Qué tan extensa debe ser la salida? 40 caracteres). cuando se utilizan múltiples opciones. Con la evolución de Unix. El siguiente ejemplo presenta una nueva opción -r para el comando ls. Las múltiples opciones simplemente se ponen juntas entre el comando y el argumento. pero pronto mencionaremos formas de encontrar ayuda también. la gente empezó a necesitar lo que se conoce como opciones "largas". Por ejemplo. se pueden poner juntas compartiendo un solo -. se puede especificar el argumento justo al lado de la línea de comandos. todas las opciones de la línea de comandos compartían la sintaxis mencionada anteriormente. Si una opción sí tiene argumento tal como -w 40. Considere el siguiente ejemplo: [elvis@station elvis]$ ls -w 40 /usr/ bin games lib sbin tmp dict include libexec share X11R6 etc kerberos local src En este caso. las opciones largas están compuestas de palabras. Opciones largas de la línea de comandos En los primeros días de Unix. las opciones largas 16 . En vez de empezar con un guión inicial. ¿Cómo se sabe cuales opciones tienen argumentos y cuales no? La respuesta corta es por experiencia. sólo puede compartir un guión si está de última.

los usuarios experimentados de Linux han aprendido a refrescar fácilmente su memoria ya que la mayoría de los comandos soportan la opción --help o las opciones cortas -h o -?. Observe que las opciones tanto largas como cortas. la sintaxis también difiere un poco.. El comando ps no espera ningún argumento. los argumentos son fáciles. Algunos comandos utilizan sólo opciones cortas y algunos comandos utilizan opciones largas. Por ejemplo. 17 . No obstante. manejan ambos. Muchos comandos. el argumento se pone junto con la opción larga separada por un =. como en --width=40. las opciones que se soportan y lo que hacen.. Sort entries alphabetically if none of -cftuSUX nor --sort. [elvis@station elvis]$ ls --width=40 --size -r total 132 4 X11R6 0 local 4 games 0 tmp 4 libexec 4 etc 4 src 40 lib 4 dict 8 share 4 kerberos 40 bin 8 sbin 8 include /usr/ Argumentos Comparados con las opciones de la línea de comandos.están precedidas de dos guiones (--). si se le da algún argumento al comando ls el comando tratará los argumentos como archivos o directorios a enumerar. [elvis@station elvis]$ ls --size /usr/ total 132 40 bin 4 games 40 lib 4 dict 8 include 4 libexec 4 etc 4 kerberos 0 local 8 sbin 8 share 4 src 0 tmp 4 X11R6 Cuando las opciones largas tienen un argumento. Observe que el mensaje de uso generado por el comando ls es bastante largo y ha sido abreviado en la siguiente salida. Ayuda: uso ¿Cómo recordar todas estas opciones de la línea de comandos? No es necesario. también se pueden mezclar.. Estas opciones usualmente hacen que el comando emita un mensaje de "uso" en vez de realizar su operación normal. El aprender qué argumentos espera un programa y lo que hace con estos es parte del aprender a utilizar ese comando. un mes y un año posibles para poder generar el calendario.. después del nombre del comando y después de cualquier opción de la línea de comandos se le denomina argumentos del comando. List information about the FILEs (the current directory by default). Lo que el comando espera o no como argumento depende del comando. [elvis@station elvis]$ ls --help Usage: ls [OPTION]. incluyendo ls. Este mensaje de uso contiene un resumen de los argumentos que se esperan. Cualquier palabra que quede en la línea de comandos. [FILE]. El comando cal toma de cero a dos. En vez de que el argumento siga la opción como una palabra separada.

el mensaje de uso se refiere a las opciones cortas utilizando la forma abreviada. --all do not hide entries starting with . --width=COLS -x ... -v -w. Aquí está la opción -w o --width. --author print the author of each file -b. Más adelante en este cuaderno se discutirán otras formas de encontrar ayuda. 18 . -k -l . --almost-all do not list implied .. --recursive -s. Los mensajes de uso no proporcionan una referencia completa para el comando.. Observe que ls soporta tanto las formas cortas (-s) como largas (--size) de esta opción.Mandatory arguments to long options are mandatory for short options too.. in blocks like --block-size=1K use a long listing format Algunos detalles que se deben observar en el mensaje de uso: Los elementos opcionales se encuentran entre corchetes ([ y ]). --size .. --reverse -R. and .. sort by version assume screen width instead of current value list entries by lines instead of by columns reverse order while sorting list subdirectories recursively print size of each file. -A. Aquí... -r. sino que simplemente proporcionan información para refrescar la memoria. -a. --escape print octal escapes for non-graphic characters . las cuales requieren un argumento.

-b. Intenta mostrar el contenido del archivo /etc/anacrontab.org>. -t -T.daily run-parts /etc/cron. or when FILE is -. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 1 7 30 65 70 75 cron. Ella nunca ha utilizado este comando antes y está interesada en aprender a utilizarlo. pero puede entender lo suficiente de la primera línea como para comprender que el comando cat espera los nombres de archivo como su argumento.monthly run-parts /etc/cron.weekly cron.daily cron. or standard input.monthly Al ver algunas de las opciones de los mensajes de uso observa que la opción -n numera las líneas de salida y decide probar esta opción: 19 .. [madonna@station madonna]$ cat /etc/anacrontab # /etc/anacrontab: configuration file for anacron # See anacron(8) and anacrontab(5) for details. -u -v.weekly run-parts /etc/cron. Report bugs to <bug-coreutils@gnu. Todavía no entiende todo el mensaje de uso. empieza por examinar el mensaje de uso del comando. -s. -A. --show-all --number-nonblank equivalent to -vET number nonblank output lines equivalent to -vE --show-ends display $ at end of each line --number number all output lines --squeeze-blank never more than one single blank line equivalent to -vT --show-tabs display TAB characters as ^I (ignored) --show-nonprinting use ^ and M. [madonna@station madonna]$ cat --help Usage: cat [OPTION] [FILE]. las referencias a la entrada y a la salida estándar.notation. como por ejemplo. to standard output. -e -E. read standard input. -n. except for LFD and TAB --help display this help and exit --version output version information and exit With no FILE.. Concatenate FILE(s). Entonces.Ejemplos Aprender a utilizar el comando cat Una amiga del usuario madonna le dijo que el comando cat se utiliza para mirar el contenido de los archivos.

[madonna@station madonna]$ cat -n /etc/anacrontab 1 # /etc/anacrontab: configuration file for anacron 2 3 # See anacron(8) and anacrontab(5) for details.weekly 10 30 75 cron.daily 7^I70^Icron.monthly run-parts /etc/cron.monthly^I^Irun-parts /etc/cron.weekly$ 30^I75^Icron.$ $ SHELL=/bin/sh$ PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin$ $ 1^I65^Icron. [madonna@station madonna]$ cat -t /etc/anacrontab # /etc/anacrontab: configuration file for anacron # See anacron(8) and anacrontab(5) for details. Prueba ambos para ver si está en lo correcto. el cual ella asume que es el atajo de la opción corta -v. intenta confirmar su sospecha.monthly^I^Irun-parts /etc/cron.weekly^I^Irun-parts /etc/cron. [madonna@station madonna]$ cat -A /etc/anacrontab # /etc/anacrontab: configuration file for anacron$ $ # See anacron(8) and anacrontab(5) for details.daily$ 7^I70^Icron.weekly^I^Irun-parts /etc/cron.weekly run-parts /etc/cron.daily^I^Irun-parts /etc/cron.daily run-parts /etc/cron.monthly Ahora observa que el uso de la opción -A es "equivalente a -vET". -E y -T. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 1^I65^Icron. Sospecha que el espacio que hay entre las palabras desde el renglón 8 hasta el 10 son efecto del tabulador en vez del espaciador.monthly 4 X11R6 0 local 4 games 0 tmp 4 libexec 4 etc 4 src 40 lib 4 dict 8 share 4 kerberos 40 bin 8 sbin 8 include Desde la salida ahora es fácil ver que este archivo tiene 10 líneas y es fácil referirse a la línea 6.monthly$ [madonna@station madonna]$ cat -vET /etc/anacrontab # /etc/anacrontab: configuration file for anacron$ $ 20 .weekly 30^I75^Icron.daily 9 7 70 cron.daily^I^Irun-parts /etc/cron. Al observar del mensaje de uso que la opción -t reemplazará cualquier espacio del tabulador con ^I. 4 5 SHELL=/bin/sh 6 PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 7 8 1 65 cron.

La terminal hace lo mejor que puede. como por ejemplo. Los otros se utilizan para codificar secuencias de control (vea a continuación) y otras condiciones especiales.daily$ 7^I70^Icron. los caracteres usualmente se encuentran codificados como un valor de bytes en números enteros utilizando el formato ASCII. A veces los usuarios accidentalmente (o intencionalmente) le piden a una terminal que presente datos no codificados como texto ASCII. el comando reset puede restablecer la terminal a una conducta cuerda. CTRL-D y CTRL-Z pueden ser útiles para administrar procesos desde la terminal. Sin embargo. Esta lección introduce algunas carcterísticas que las terminales comparten en general y una de ellas que no debería dejarse para más tarde: el completar con el tabulador. decide que ha interpretado correctamente el mensaje de uso. Cuando los computadores manejan texto humano. La configuración de una terminal puede ser devuelta a su estado inicial con el comando reset. Discussion Control de terminales La shell bash y el terminal en que ejecuta son las herramientas principales que los usuarios experimentados de Linux utilizan. Se pueden distinguir varios tipos de terminales al saber cómo se refiere Linux a los dispositivos. si 21 .daily^I^Irun-parts /etc/cron. cuando quiere utilizar este comando ni siquiera podrá ver al escribirlo.$ $ SHELL=/bin/sh$ PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin$ $ 1^I65^Icron.weekly^I^Irun-parts /etc/cron. pero con frecuencia presenta lo que parecen ser simplemente garabatos. muestran un byte a la vez.weekly$ 30^I75^Icron. En estas situaciones. Usualmente. Más adelante en este curso se dedicará un cuaderno completo a la manera de utilizar las potentes características de la shell de bash. Administración de terminales Conceptos clave • • • • Varias secuencias de control tales como CTRL-C. La shell bash ofrece la oportunidad de completar con el tabulador. sólo se utiliza un pequeño número de éstos (alrededor de 100) para caracteres de texto y puntuación.# See anacron(8) and anacrontab(5) for details. Reinicio de terminales Cuando las terminales presentan información.monthly$ Al ver que las salidas son idénticas.monthly^I^Irun-parts /etc/cron. Incluso la terminal puede terminar en un modo alterno de gráficos para que inclusive se vea mal lo que se debe ver como texto ASCII normal. la cual le puede ahorrar bastante tiempo al escribir especificando comandos o archivos. una imagen o un ejecutable. Mientras que un byte puede codificar hasta 256 valores diferentes.

los teletipos y las consolas "tontas" o las similares a vt100. Ésta llega al rescate cada vez que un usuario siente que "SOLO QUIERO QUE SE DETENGA".tiene un intérprete de comandos bash con caracteres incomprensibles. utilizan la tecla CTRL para enviar esas señales "fuera de banda". La siguiente tabla resume muchas de las secuencias de control utilizadas con frecuencia que todos los terminales Linux comparten y su uso común en orden alfabético. Alguien atascado en esta situación podría utilizar CTRL-C para cancelar el comando.termina el proceso en el primer plano Señalamiento normal del final de la entrada Hacer sonar una campana audible en la terminal Tecla de retroceso.es una alternativa para la tecla RETURN Form feed-Hace que bash limpie la pantalla y que otros programas basados en la pantalla "refresquen" la pantalla actual... escribiendo CTRL-Cterminará el proceso que se está ejecutando en ese momento y lo devolverá al intérprete de comandos bash.) [elvis@station elvis]$ CTRL-D 22 . al escribir reset seguido de la tecla INTRO usualmente la terminal se restaurará a una conducta cuerda. El nodo del dispositivo /dev/null es un pseudo dispositivo que bota cualquier información escrita en él. Después de la tabla se discuten estas secuencias de acuerdo con su utilidad en general. Las terminales de Linux. Por lo tanto. Al utilizar la shell bash. Secuencias de control de la terminal Los terminales Linux comparten bastante con sus ancestros primitivos. Descongelar la pantalla (vea CTRL-S) Congelar la terminal (descongelar con CTRL-Q) Borrar la línea actual Suspender el proceso en el primer plano NAK SIGSTOP CTRL-C es probablemente una de las secuencias más útiles mencionadas anteriormente. El nodo de dispositivo /dev/zero es un pseudo dispositivo que cuando se lee devuelve un número infinito de ceros (binarios). Secuencias de control de la terminal Linux Combinación de teclas CTRL-C CTRL-D CTRL-G CTRL-H CTRL-J CTRL-L CTRL-Q CTRL-S CTRL-U CTRL-Z Nombre simbólico SIGINT EOT BEL BS LF FF Uso Interrupción anormal .borra el caracter anterior Introducir una línea . [elvis@station elvis]$ cat /dev/zero > /dev/null (. una campanilla audible o un final de transmisión.. como sus predecesores. Estos dispositivos tenían mecanismos para enviar señales "fuera de banda" o secuencias que señalaban un evento fuera del flujo normal de caracteres escritos tales como un espacio. Table 1. user types CTRL-C . el siguiente comando ejecutaría por siempre leyendo y botando ceros..

. user types CTRL-D ..com:elvis): anónimo 331 Please specify the password. ftp> (..232.redhat.com ftp> ls 227 Entering Passive Mode (66.187. Infortunadamente.com Trying 66.212) 150 Here comes the directory listing. Connected to ftp.Como lo verá en un cuaderno posterior muchos de los comandos Unix leen su entrada directamente del teclado.. All transfers are logged.51.. no siempre es obvio el cómo decirle al comando que pare de escuchar. El usuario señala el final de la entrada con CTRL-D.com [elvis@station elvis]$ pwd /home/elvis [elvis@station elvis]$ fg ftp> ftp.redhat.51. [elvis@station elvis]$ wc polly wants a cracker polly wants a cracker polly wants a cracker (. 12 palabras utilizando 66 caracteres (aunque esto no parece útil por el momento. el usuario escribe CTRL-Z . ejecuta el comando pwd desde la shell y luego restablece la sesión ftp con fg. ¿Qué pasaría si el usuario hubiese escrito CTRL-C en cambio? CTRL-Z CTRL-Z se utiliza para suspender un programa.redhat. para los nuevos usuarios Unix. el cual se puede restablecer posteriormente con el comando fg ("foreground"... En la mitad de una sesión ftp.51).187... 220 Red Hat FTP server ready. Have fun.) 3 12 66 [elvis@station elvis]$ El comando wc reporta obedientemente que el usuario ha escrito 3 líneas. primer plano en inglés). encontrará más usos para wc en un cuaderno posterior).187. Using binary mode to transfer files. [elvis@station elvis]$ ftp ftp.redhat. elvis quiere determinar el directorio actual de trabajo de su shell.232. Password: 230 Login successful. (FTP) Name (ftp.. Esta secuencia se utiliza para enviar un mensaje de "Fin de la Transmisión" (usualmente interpretado como "Final del Archivo") al proceso de escucha.com (66. drwxr-xr-x 6 ftp ftp 4096 May 24 01:33 pub 23 . Suspende la sesión ftp con CTRL-Z. Remote system type is UNIX. La respuesta es CTRL-D. El comando wc es un ejemplo de un comando que al no recibir el nombre de un archivo como argumento entonces contará el número de líneas.232.67. palabras y caracteres digitadas por el usuario.redhat.) [1]+ Stopped ftp ftp.

CTRL-L se utilizaba para ordenarle a la impresora de línea que expulsara la página actual y que iniciara en la próxima. Si ha cambiado tanto una línea de comandos bash y sólo quiere volver a empezar en limpio pulse CTRL-U. este comando tiene la función de restablecer la pantalla. CTRL-L hará que el programa refresque la pantalla. si la pantalla se torna alguna vez inentendible debido a mensajes inesperados. La administración de procesos de esta manera es un tema bastante complicado que se estudiará en detalle en un cuaderno posterior. En los terminales en línea. CTRL-L hace que bash deje en limpio la pantalla.. restableciéndola correctamente. Para muchos programas de pantalla. es difícil saber lo que ha escrito. CTRL-S Vea CTRL-Q arriba. se introduce primero (como el comando más útil) ya que nadie utiliza intencionalmente CTRLS. Por el contrario. es suficiente con que sepa que CTRL-Z suspende y fg reanuda.226 Directory send OK. Como los caracteres usualmente no aparecen en la pantalla. Si alguna vez su terminal parece muerta. intente presionar CTRL-Q y vea si eso la arregla. Sólo pulse CTRL-U e inicie de nuevo. en algunas terminales laTECLA DE RETROCESO se encuentra mapeada de manera incorrecta y por lo tanto no funciona bien. CTRL-J Casi nunca se utiliza. CTRL-L Tradicionalmente. (en su lugar. La shell bash. el comando vi y nano. Aunque sólo es útil después de haber utilizado CTRL-S. CTRL-U CTRL-U usualmente se utiliza para "limpiar" la línea actual. . CTRL-Q CTRL-Q "descongela" una pantalla (haciendo que se active de nuevo) después de que se ha "congelado" con CTRL-S. la gente utiliza la tecla ENTER). CTRL-G 24 . CTRL-H casi siempre funcionará en estas situaciones.. CTRL-U es muy útil cuando cometa errores al ingresar una contraseña. pero preserva la línea de comandos actual. Por ahora. incluyendo los editores. Sin embargo. CTRL-H CTRL-H tiene la misma función que la TECLA DE RETROCESO. También. los nuevos usuarios de Unix a veces pulsarán por error CTRL-S y no entenderán el porqué su terminal no responde.

La terminal ttyS0 en Unix se relaciona con COM1 en DOS. [elvis@station root tty2 elvis tty3 blondie :0 blondie pts/0 blondie pts/1 blondie pts/2 blondie pts/3 [elvis@station PID TTY 4384 tty3 4427 tty3 elvis]$ who Jun 21 Jun 21 Jun 21 Jun 21 Jun 21 Jun 21 Jun 21 elvis]$ ps TIME CMD 00:00:00 bash 00:00:00 ps 10:12 16:50 10:13 16:43 10:14 10:31 10:39 (:0. incluyendo las consolas virtuales. una línea en serie conectada a terminales VT100. En ambos casos el terminal es especificado en la columna "TTY".El único uso real es que hace pitar la terminal. Nombres de los Dispositivos de Terminal Nombre ttyn ttySn pts/n Dispositivo Consola Virtual Dispositivo de puerto serial Pseudoterminal Servidor X ¿Cómo se utiliza? Se accede a esta con la combinación CTRL-ALT-Fn. módems. Cuando un usuario inicia la sesión utilizando el Administrador de Inicio de sesión en el entorno gráfico X. etc. En el siguiente extracto. Identificación de terminales Así como con la mayoría de los otros dispositivos. Una emulación de terminal.0) (:0. Al identificar las terminales en estas situaciones. Las pseudo-terminales no pueden estar relacionadas directamente a un dispositivo físico. con frecuencia su terminal es listada como el servidor X mismo. Table 1.0) (:0. los programas interactúan con los terminales en un nivel bajo por medio de nodos de dispositivos. Por ejemplo. etc. Un módem o un terminal similar a VT100 adjunto a un puerto en serie. La siguiente tabla lista algunos de los nombres comunes para terminales utilizados convencionalmente para algunos de los dispositivos de terminal comúnes. que se encuentran dentro del directorio /dev. o por shells originadas en la red tal como con telnet o ssh. por ejemplo. El servidor X no es realmente una terminal. la terminal se conoce por medio de su nodo de dispositivo.0) Linux trata muchos dispositivos diferentes como una terminal. con frecuencia utilizado por terminales en el entorno gráfico X. elvis hace una lista de los usuarios actuales en una máquina con who y enumera los procesos ejecutándose en ese momento desde su terminal con ps. tty1. la comunicación con la primera consola virtual utiliza el nodo de dispositivo /dev/tty1.0) (:0. :0 25 . La mayoría de los procesos mantienen un registro de la terminal en donde empezaron y las sesiones de inicio de los usuarios usualmente se encuentran asociadas con la terminal que se encuentran utilizando. impresionando a sus amigos con su basta reserva de conocimiento inútil sobre Unix. ttyS1 en COM2.

2. En el segundo y tercer caso. Puede pasar una de tres cosas: 1. Al escribir el nombre de un comando como la primera palabra de una línea de comandos bash. El usuario elvis quiere habilitar el modo Unicode para su terminal. elvis escribe una a y presiona el tabulador. Parte del comando que estaba escribiendo aparece mágicamente pero luego bash para y 3. pero en algún momento antes de que termine la palabra. le pita. Empieza a escribir el comando y presiona el tabulador.Completar con el tabulador Completar con el tabulador no es una característica de las terminales sino de la shell bash que usualmente ejecuta dentro de éstas. más de un comando inicia con las letras que usted escribió. En el primer caso. Un ejemplo es en orden. Proporcione lo suficiente del comando para que sea único y oprima el tabulador de nuevo. Al ver que el comando que elvis quiere ejecutar es el único que empieza con unicode_sta. 26 . La shell bash hace lo mejor que puede seleccionando el comando que usted empezó a escribir de la lista de todos los comandos posibles. bash solo le pita. Para poder ver la lista de opciones disponibles para completar. bash terminará de escribir el comando por usted. [elvis@station elvis]$ unicode_st<TAB><TAB> unicode_start unicode_stop bash le devuelve una lista con dos opciones posibles que enmpiezan con unicode_st. pare y pulse la tecla del TABULADOR. comience a escribir el comando que quiera ejecutar. El resto del comando que empezó a escribir aparecerá mágicamente. Por ahora no se preocupe de lo que es el modo Unicode o el por qué quiere tenerlo. bash completó el comando tanto como pudo pero paró y le pitó para dejarle saber que usted aún tiene que escoger. oprima el tabulador dos veces y bash hará una lista de todos los comandos que inician con las letras que usted escribió inicialmente. Se puede ahorrar bastante tiempo y esfuerzo aprendiendo a hacer buen uso del tabulador al escribir los nombres de los comandos y archivos. Para poder ver las opciones de los comandos que bash ha delimitado. elvis teclea el tabulador dos veces. Ha terminado. sólo hay un comando que comienza con las letras que usted escribió así que bash puede descubrir exactamente el comando que usted había empezado y lo termina de escribir por usted. [elvis@station elvis]$ unic<TAB> bash expande la palabra a unicode_st y pita. Sólo necesita saber que el comando que habilita este modo se llama unicode_start y el comando que lo desactiva es unicode_stop.

suponga que madonna quiere examinar el archivo /etc/prelink..?????aaa????aac????-?????[??? 27 . ella puede escribir la primera parte y después presionar el tabulador. # If a directory name is prefixed with `-h '.[elvis@station elvis]$ unicode_sta<TAB> bash completa el comando y pone el cursor para que esté listo para comenzar a escribir cualquier argumento u opciones para el comando. le llegará a doler el dedo meñique izquierdo de tanto presionar el tabulador.conf es el único archivo que inica con /etc/prel. En vez de tener que escribir el nombre completo del archivo. Al final de un día muy ocupado. [blondie@station blondie]$ cat /bin/arch ELF??414 (44???4????/lib/ld-linux. the directory hierarchy # will be walked as long as filesystem boundaries are not crossed. /bin/arch. el utilizar el tabulador se convertirá en parte de su naturaleza. [elvis@station rha030]$ unicode_start bash no sólo completa la primera palabra al compararla con los comandos disponibles sino que también se pueden completar las otras palabras en la línea de comandos con base en el sistema de archivos. -l /bin -l /usr/bin .conf. bash puede completar todo el archivo..2GNU???y??6. contiene bytes que no se pueden mostrar en una terminal y esto la descontrola. symbolic links in a # directory hierarchy are followed. Al avanzar en el curso se dará cuenta de que el tomarse un poco de tiempo explorando la característica de completar con el tabulador le ahorrará mucho tiempo en adelante. Por ejemplo.conf # This config file contains a list of directories both with binaries # and libraries prelink should consider by default.so. [madonna@station madonna]$ cat /etc/prel<TAB> Debido a que /etc/prelink. [madonna@station madonna]$ cat /etc/prelink. Después de un tiempo. Ejemplos Reiniciar el terminal después de ver un archivo binario El usuario blondie accidentalmente utiliza el comando cat para ver un archivo ejecutable. Como el archivo es un ejecutable compilado. # If a directory name is prefixed with `-l '.

5. Confirme que ha suspendido el proceso. Mientras que esté apareciendo la salida. suspenda el proceso con la secuencia CTRL-Z. Mientras que la salida aún se encuentre fluyendo. tome una lista recursiva del directorio root del sistema de archivos utilizando el comando ls -R /. [blondie@station blondie]$ Cancelar un comando El usuario prince piensa que puede ser interesante el listar recursivamente el contenido de su sistema de archivos. 2. considera que ha visto lo suficiente. Como en el ejemplo de prince. congele su terminal utilizando la secuencia CTRL3.Tiempo estimado: 5 minutos.static aumix-minimal awk basename bash bash2 cut date dd df dmesg dnsdomainname doexec domainname gawk gettext grep gtar gunzip gzip hostname igawk mnt opt proc rha root RPMS sbin tmp usr var web mail mkdir mknod mktemp more mount mt mv rm rmdir rpm rvi rview sed setfont setserial touch true umount uname unicode_start unicode_stop unlink usleep Después de ver pasar los archivos por varios minutos. Especificaciones 1. S.Para restablecer la terminal. Descongele la terminal utilizando la secuencia CTRL-Q. Debería poder alternar el congelamiento y descongelamiento de la salida utilizando estas secuencias. blondie escribe el comando reset a ciegas y su terminal se restablece. [prince@station prince]$ ls -R / /: bin data etc initrd lost+found boot dev home lib misc /bin: arch ash ash. 4. Cancela el comando presionando CTRL-C. [prince@station prince]$ Suspender la salida de una terminal Lab Exercise Objetivo: Aprender a administrar la salida de la terminal para aquellos comandos con una ejecución larga. Deliverables A title Question 28 . iniciando con el directorio raíz /. El comando termina y regresa al intérprete de comandos bash.

1 El comando suspendido ls -R / Limpieza Después de conseguir el resultado deseado. Ahora cancélelo con la secuencia CTRL-C. restablezca el proceso suspendido al primer plano con el comando fg. 29 .

en la forma de "usages" o breves resúmenes de sintaxis que se producen cuando se invoca el comando con las opciones -h. las cuales se pueden ver con el comando man. -? y --help Al avanzar el curso probablemente se dará cuenta de que a menudo Unix toma decisiones de diseño en favor de la brevedad y la eficiencia más que de la transparencia al nombrar los comandos y las opciones. sino que se deben encontrar en el sistema de manera que sea de fácil acceso para los usuarios. Obtención de usos con -h. el directorio /usr/share/doc contiene menos documentación estructurada específica para un paquete en particular. La primera capa de ayuda con frecuencia la proporcionan los comandos mismos. Los comandos más complicados se describen de manera más completa en las páginas info. cualquier documentación menos convencional asociada con un paquete específico se puede encontrar en /usr/share/doc. 30 .Getting Help Conceptos clave • • • • • • • La mayoría de los comandos proporcionan resúmenes cuando se invocan las opciones -h. -? o --help. en particular . Esto hace de Unix una opción muy efectiva para el usuario conocedor. Los manuales de Red Hat proporcionan documentación específica a la distribución de Red Hat Enterprise Linux. Los usos se abordaron en la lección anterior pero se mencionan otra vez aquí para que todo esté completo. Discussion Getting Help Unix y Linux. pero con frecuencia a expensas del aprendiz. Nadie recuerda todas las opciones para el comando ls así que la mayoría de los comandos proporcionan breves resúmenes llamados "usages" cuando se invocan con las opciones apropiadas. La información de referencia más completa que se puede encontrar para la mayoría de los comandos está en las páginas "man" pages e "info". tienen la tradición de que los manuales y la documentación no se deben mantener en un estante. Las páginas man tienen capítulos y el contenido de un capítulo anterior puede llegar a obscurecer el contenido de un capítulo en desarrollo. Nadie recuerda todas las funcionalidades de cada uno de los comandos. Por último. Puede encontrar información de referencia mucho más amplia en las "páginas del manual". El Proyecto de documentación de Linux brinda una gran cantidad de documentación relacionada con Linux. -? o --help. ps y vi. En Red Hat Enterprise Linux. En Red Hat Enterprise Linux. pero los usuarios experimentados de Unix saben cómo encontrar la información en línea de manera rápida. Esto es en particular cierto para los comandos más utilizados tales como mv. también puede encontrar bastantes manuales y tutoriales en el Proyecto de Documentación Linux o en los paquetes de documentación de Red Hat Enterprise Linux.

los formatos de archivos. como para el archivo /etc/passwd. q es para salir. se puede navegar utilizando solo letras: space se utiliza para ver la siguiente página. Por ejemplo. Por ejemplo. con frecuencia abreviado como "páginas man". Table 1. que se encuentra en el capítulo cinco que cubre los formatos de archivos. Al ver archivos (incluyendo las páginas man) en less. en este caso la entrada del capítulo uno. para el usuario que está tratando de encontrar documentación sobre el formato del archivo /etc/passwd. Capítulos Man Capítulo 1 2 3 4 5 6 7 8 Audiencia usuarios estándar desarrolladores desarrolladores administradores usuarios estándar usuarios estándar usuarios estándar administradores Tema Comandos Llamadas del sistema Llamadas de bibliotecas Archivos de dispositivos Formatos de archivos ??? (ver las preguntas) Información general Comandos del administrador Acción Ver la próxima página Ver la página anterior Salir Busca la palabra text Encuentra la siguiente ocurrencia de la palabra que se buscó anteriormente 31 . existen páginas tanto para el comando passwd. la siguiente tabla resume algunos de los comandos de navegación más útiles al ver las páginas man con less. Table 1. Algunas de las páginas comparten nombres idénticos en diferentes capítulos. El paginador less Red Hat Enterprise Linux usa less para ver las páginas del manual. Infortunadamente. man ls genera la documentación para el comando ls. son la fuente tradicional de referencia e información de los sistemas Unix. utilizando el comando man. Para poder ver la página man del capítulo cinco. que se encuentra en el capítulo uno sobre los comandos del usuario. less se abordará en más detalle en una lección posterior. b se utiliza para ver la página anterior. se debe especificar explícitamente el capítulo como en man 5 passwd. sin embargo. las llamadas de programación y temas en general. Navegación de less básica Comando space b q / text RETURN n Capítulos Man Las páginas man están organizadas en ocho capítulos estándares como se muestra en las siguientes tablas. man passwd sólo presenta la primera página que encuentra. Puede ver las páginas de documentación para la mayoría de los comandos.Las páginas man Las páginas del manual.

para realizar búsquedas de palabras y -a..compute password hashes set a user's sasl password The Samba encrypted password file change a user's SMB password madonna obtuvo mucho más de lo que estaba buscando. Dichas páginas se pueden ver ya sea utilizando el comando info tradicional o Red Hat Enterprise Linux proporciona un comando similar con una interfaz más fácil llamada pinfo. Búsquedas de palabras clave y la opción -a Dos de las opciones más utilizadas con el comando man son -k. la cual hace que manvea todas las páginas relevantes en orden.change the password of an LDAP entry lppasswd (1) . Las páginas info se utilizan principalmente para software desarrollador por the GNU project. así que utiliza man -k para realizar la búsqueda de la palabra clave en passwd. or delete digest passwords pam_localuser (8) . Ya descubrió que man passwd sólo presenta la página man para el comando passwd. change..add. Cada capítulo tiene una página de introducción llamada intro para que el comando man 5 intro presenta una introducción al capítulo 5. (5) (1ssl) (8) (5) (8) password file .require users to be listed in /etc/passwd passwd (1) .update password file in batch gpasswd (1) . las referencias a las páginas man usualmente incluyen el número del capítulo en paréntesis despúes del número de la página. La usuaria madonna está tratando de hallar información sobre el formato para el archivo /etc/passwd.Create and update user authentication files ldappasswd (1) .y el hecho de que la información se encuentra en el capítulo 5 de las páginas man. [madonna@station madonna]$ man -k passwd . Los comandos mucho más complicados se encuentran documentados en las páginas "info" con hipervínculos. 32 . Las páginas info preceden los días de los navegadores y los enlaces.En Unix. chpasswd (8) . pero incluida en la salida se encuentra la referencia al archivo de la contraseña. Ahora madonna sabe cuál es el capítulo que necesita así que saca la página con man 5 passwd.Hesiod functions for retrieving passwd information htpasswd (1) .. Otra opción podriá haber sido utilizar la opción -a..Hesiod functions for retrieving passwd information hesiod_getpwuid [hesiod_getpwnam] (3) .update a user's authentication tokens(s) passwd passwd [sslpasswd] saslpasswd smbpasswd smbpasswd .administer the /etc/group file hesiod_free_passwd [hesiod_getpwnam] (3) . tal como passwd(1) o passwd(5).Hesiod functions for retrieving passwd information hesiod_getpwnam (3) . Las páginas info Las páginas man usualmente están diseñadas para proporcionar información de referencia no tutoriales o ayuda en un contexto en general. para ver todas las "páginas relevantes" para un argumento.

[elvis@station elvis]$ ls -s /usr/share/doc/ggv-1. Al desarrollar software. este se distribuye tan pronto como sea útil así no se haya pulido o esté bien documentado todavía.vfs-recycle printing recycle. Navegación con pinfo Comando SPACE b q /text RETURN FLECHA DERECHA FLECHA IZQUIERDA FLECHA ARRIBA FLECHA ABAJO Acción Página siguiente Página anterior Salir Busca la palabra text Seguir el vínculo Atrás Enlace anterior Siguiente enlace El directorio /usr/share/doc Uno de los principios de diseño detrás del software de código abierto con frecuencia se resume en la frase "lanzamiento temprano. la falta de NEWS es una buena noticia.El comando pinfo. lanzamiento frecuente". elvis descubrió que la documentación informal proporcionada por el visor de archivos PostScript ggv es muy poca. ya que consta del ChangeLog poco estructurado de los desarrolladores. El permitir a los usuarios utilizar pronto el software. brinda la ventaja de que ellos pueden ayudar a influir en su diseño continuo. Los enlaces entre las páginas info se pueden cruzar utilizando las cuatro flechas como se señala en la siguiente tabla.97/ total 144 120 ChangeLog 20 COPYING 0 NEWS 4 TODO En contraste. Con un poco de suerte. samba. La navegación básica es similar al paginador less. [elvis@station elvis]$ autofs LDAP COPYING libsmbclient docs Manifest ls /usr/share/doc/samba-2. Table 1. bajo su directorio /usr/share/doc incluyendo los subdirectorios que contienen documentación en una variedad de formatos. organizado por el paquete de Red Hat propietario del software.txt Manual de Documentación de Red Hat 33 . Con frecuencia. Su dimensión variará de acuerdo con el grado de utilidad que tenga la documentación para un paquete dado.conf Roadmap WHATSNEW. Red Hat Enteprise Linux adopta esta filosofía e incluirá software estable y útil aún si éste no se encuentra formalmente documentado en las páginas man o en la páginas info. Por ejemplo. sin argumentos.2. se puede encontrar mucha información sobre la configuración del complicado servicio para compartir archivos. Red Hat Enteprise Linux incluye tal documentación poco estructurada.7a/ misc README printer-accounting README. la documentación sobre cómo utilizar los productos recién desarrollados puede ser un simple archivo de texto llamado README.99. realizará una lista de la tabla de contenidos para todas las páginas info instaladas. pero útil dentro del directorio /usr/share/doc. agrupados de manera rápida por el desarrollador.

Inc presta. Aunque la documentación no es específica para la distribución Red Hat Enterprise Linux. yelp: El navegador de ayuda de GNOME 34 . HOWTOs HOWTOs brinda instrucciones paso a paso sobre cómo configurar una faceta en particular de Linux tal como el CD-Writing-HOWTO (como-grabar-CDs) o el ETHERNET-HOWTO (como-eternet). Los siguientes manuales de documentación se encuentran disponibles en online. el navegador de ayuda de Gnome. yelp proporciona la documentación básica para muchas de las aplicaciones gráficas especificas de GNOME. presentamos yelp. La documentación en este sitio sigue los formatos desarrollados en los primeros días de desarrollo de Linux. en el CD de documentación en formato RPM o en los libros que vienen como parte del paquete. MANUALES Los manuales proporcionan un cubrimiento más profundo sobre temas más amplios tales como la administración de sistemas o incluso la programación del módulo del kernel de Linux. Preguntas más frecuentes Las FAQs son una compilación de las Preguntas más frecuentes sobre un tema en particular tal como FAQ sobre Linux-RAID. incluyendo Nautilus File Manager y los applets de GNOME. incluyendo información básica e instrucciones paso a paso para varias tareas. yelp: El navegador de ayuda de Gnome Por último. El proyecto de documentación de Linux El proyecto de documentación de Linux ha asumido la poco envidiable tarea de documentar todos los desarrollos rápidos asociados con el sistema operativo Linux. Figure 1. gran parte de la información es útil y relevante. • • • • • • Manual de Instalación de x86 Manual de Inicio Manual para personalización Manual de referencia Manual de Seguridad Manual básico de administración del sistema Estos manuales dan información específica sobre el sistema operativo de Red Hat Enterprise Linux.Red Hat Enterprise Linux incluye manuales de documentación desarrollados como parte de un servicio que Red Hat. el cual se puede reiniciar seleccionando "Ayuda" del menú de aplicaciones.

de tal manera que muchas personas puedan verlos y modificarlos. Un usuario no puede cambiar el archivo del usuario propietario. Tres tipos de permisos: lectura (r). pero el usuario tiene algunas habilidades para cambiar el grupo propietario. alguien puede estar haciendo la lista de regalos para un cumpleaños próximo. y una serie de permisos. chgrp. En las siguientes secciones veremos cómo utilizar la primera columna para determinar los permisos del archivo. [student@station student]$ ls -l /var/gigs/ total 28 -rw-rw-r-1 elvis elvis 129 Jan 13 14:48 atlanta -rw-r--r-1 blondie music 142 Jan 13 14:46 boston -rw-rw-r-1 elvis music 143 Jan 13 14:48 chicago -rwxr-x--1 root music 55 Jan 13 15:25 generate_report. y ejecución(x) 35 . y permitirle a unos pocos modificarlo. muy poca gente querrá que alguien le lea su diario. mejor. Por ejemplo. los miembros del grupo que poseen el archivo y cualquier otro usuario. Cuando un usuario crea un archivo.Propiedades de Archivos regulares y Permisos Conceptos clave • • • • • Los archivos tienen usuario propietario. otros querrán tener un archivo de lectura para todos en el sistema. Por ejemplo. y chown Discusión Usuarios propietarios. Los bits de permisos definen la forma como las tres clases diferentes de usuarios pueden usar el archivo: el propietario del archivo. un grupo propietario y una serie de permisos otorgados. un grupo propietario.sh -rw-rw-r-1 root music 2057 Jan 13 14:47 los_angeles -rw-rw-r-1 elvis music 142 Jan 13 14:47 san_francisco -rw-rw-r-1 blondie blondie 135 Jan 13 14:47 springfield La última columna es el nombre del archivo. Se espera que algunos de estos archivos sean compartidos. Entre más gente pueda leer este archivo. personas muy diferentes pueden estar trabajando al mismo tiempo con una serie de archivos sencillos. Figure 1. éste se convierte en el propietario del archivo del usuario y por lo general. Los tres tipos de permisos: lectura (r). y (o)tro Ver la propiedad y los permisos de archivo: ls -l Modificar la propiedad y permisos:chmod. escritura (w) y ejecución (x) Tres clases de acceso: (u)suario. respectivamente. Considere el siguiente listado largo del directorio /var/gigs. (g)rupo propietario. Grupos propietarios y Permisos Linux es un entorno multiusuario y como tal. escritura (w). Sin embargo. Cada archivo en Linux tiene tres propiedades que permiten a los usuarios controlar quién tiene acceso al archivo y cómo: un usuario propietario. el grupo primario del usuario. indican los propietarios del archivo de usuario y grupo. puede que haya otros archivos que se quieran mantener en privado. mientras que la tercera y cuarta columnas. se convierte en el propietario del archivo de grupo. Listado largo de directorio /var/gigs.

Cada archivo tiene una serie de permisos de lectura(r). tales como rwxr-xr-x. Para iniciar una aplicación o ejecutar un script. las siguientes tres. Linux hace las siguientes preguntas en este orden: 1. y las últimas tres el permiso del "otro". con una serie de nueve caracteres. El propietario del archivo utiliza el primer grupo. y ejecución(X) para las tres clases diferentes de acceso de archivo. Figure 1. y (o)tro. se utilizan los otros permisos. 2. el usuario elvis es también el 36 . el archivo que contenga la aplicación o el script deberá ser ejecutable. Permisos de Archivos Regulares Lectura(r) Ver el archivo escritura (w) Modificar el archivo ejecución (X) Usar el archivo como comando Las tres clases de acceso: (u)suario. Los permisos de ejecución. Alguien puede ver un archivo si tiene permisos de lectura. Los miembros del grupo propietario del archivo utilizan el segundo y todos los demás que no estén incluidos en las dos categorías anteriores utilizan el último. ¿El usuario es propietario del archivo? Si lo es entoces utiliza los permisos de usuario. un usuario puede distinguir entre tres tipos de permisos. elvis posee el archivo y como propietario de archivo tiene permisos de escritura y de lectura. De lo contrario. Permisos para las tres clases de acceso de archivo Cuando alguien trata de acceder a un archivo. por lo general.Al decidir quién puede tener acceso al archivo. 3. (g)rupo propietario. Table 1. Los archivos normales de datos no usan el tipo de permiso ejecutable. escritura(w). permiten que alguien utilice el archivo como un comando. Los permisos de un archivo se presentan. ¿El usuario es miembro del grupo que dueño del archivo? Si lo es entonces se utilizan los permisos de grupo. Las primeras tres letras representan los permisos del "usuario". pero deberá tener permisos de escritura para modificarlo. Ejemplos Archivos recién creados Considere el siguiente verso que elvis está componiendo: [elvis@station elvis]$ echo "Había una vez un hombre peruano" > /tmp/limerick [elvis@station elvis]$ ls -l /tmp/limerick -rw-rw-r-1 elvis elvis 32 Jan 14 13:42 /tmp/limerick Observe que por defecto. mientras que si aparece un guión esto significa que no se tiene permiso. Una letra indica que el permiso correspondiente se ha activado. Los otros usuarios sólo pueden leer el archivo (debido a que Red Hat Enterprise Linux utiliza el esquema del grupo privado de usuario. los permisos del "grupo".

music. Los permisos en lyrics tienen el mismo efecto de aquellos en lyrics. solo pueden leer el archivo. Hulk Hogan ha estado trabajando en routines para una función de lucha libre. se da cuenta que no tiene los permisos apropiados. que todo le importaba un pepino. Cuando blondie trata de sobrescribir el archivo con su propio verso. Cualquier músico. ha dejado un archivo de sólo lectura para todos los miembros del grupo wrestle. En contraste. Aunque el archivo tiene permiso de escritura. y sus respectivas membresías de grupo: user blondie elvis hogan bob grupos blondie.emperors hogan. pero cualquiera que pertenezca al grupo music puede leer o escribir en este archivo.physics. [blondie@station blondie]$ cat /tmp/limerick Había una vez un peruano.único miembro del grupo elvis). el cual no está aún listo para compartir.old routines El arhivo diary de bob sólo lo puede leer y escribir Bob.music elvis. puede añadir (o borrar) un evento en la programación y cualquiera puede leer el archivo para saber cuándo tocan los músicos. puede modificar el archivo añadiendo la próxima línea del verso: [elvis@station elvis]$ echo "que todo le importaba un pepino" >> /tmp/lime rick Otros usuarios como blondie. [blondie@station blondie]$ echo "Había una vez un argentino " > /tmp/limerick -bash: /tmp/limerick: Permission denied Archivos compartidos por un grupo Considere los siguientes usuarios. Observe que otros luchadores pueden leer el 37 . es de propiedad del grupo de blondie.old. la usuaria blondie debería ser la única miembro del grupo blondie. Para no tomar a otros luchadores (wrestlers en inglés) por sorpresa. Elvis es el propietario del archivo gigs. Como Red Hat implementa el esquema de grupo privado de l usuario. sin embargo. Como elvis tiene permisos para escribir.wrestle bob La siguiente es una lista de archivos en el directorio /tmp: [elvis@station elvis]$ ls -l /tmp total 28 -rw------1 bob bob -rw-rw-r-1 elvis music -rw-rw-r-1 elvis elvis -rw-rw---1 blondie blondie -rw------1 blondie blondie -rw-r----1 hogan wrestle 136 142 70 134 29 146 Jan Jan Jan Jan Jan Jan 14 14 14 14 14 14 15:58 15:58 13:42 15:59 16:00 15:58 diary gigs limerick lyrics lyrics. blondie ha estado trabajando en el archivolyrics.wrestle.

1.. Los permisos de lectura para mozilla.txt -rw-rw-r-1 student student 77 Jan 15 07:12 /tmp/student/resolutions. Por ejemplo. pero permite a los usuarios ver el contenido del archivo (a menudo binario).. El que no sea miembro del grupo de wrestlers no tiene acceso al archivo.txt. [elvis@station elvis]$ ls -l /bin/ls /usr/bin/mozilla -rwxr-xr-x 2 root root 67884 Sep 2 07:21 /bin/ls -rwxr-xr-x 1 root root 5607 Oct 3 13:58 /usr/bin/mozilla El comando ls es ejecutable por cualquiera. Las decisiones de acceso "fracasan" de a cuerdo al archivo al que se refiere el enlace simbólico. [elvis@station elvis]$ ls -l /bin/view /bin/vi -rwxr-xr-x 1 root root 451628 Aug 27 19:09 /bin/vi lrwxrwxrwx 1 root root 2 Sep 11 11:32 /bin/view -> vi El comando view. (compose and save your text) . si su nombre de usuario es elvis. Almacene el archivo en su directorio recién creado como /tmp/nombredeusuario/resolutions. los permisos son siempre rwxrwxrwx. por ejemplo. permiten a los usuarios observadores darse cuenta de que el comando es realmente un script de texto navegable.txt 38 . Archivos ejecutables Los archivos que se deben interpretar como comandos necesitan tener permisos de ejecución. Observe que el permiso de lectura no se necesita para ejecutar el comando.txt . pero no pueden cambiar ninguna de las rutinas. cree el directorio /tmp/elvis. el cual es en realidad un enlace simbólico. tendría los mismos permisos que: rwxr-xr-x.. A este directorio se le llamará /tmp/nombre de usuario. Ejercicios en línea Exploración de permisos en archivos recién creados Lab Exercise Objetivo:Examinar la conducta predeterminada de los archivos recién creados Tiempo estimado:10 minutos Cree un subdirectorio en el archivo/tmp con el mismo nombre de su nombre de usuario. Enlaces simbólicos A pesar de que los enlaces simbólicos tienen permisos. [student@station student]$ nano /tmp/student/resolutions.txt keep room clean don't eat all of the pop tarts use less proprietary software [student@station student]$ ls -l /tmp/student/resolutions..archivo. Haga una lista corta de propósitos para el año entrante en su editor de texto preferido o simplemente desde la línea de comandos. [student@station student]$ cat /tmp/student/resolutions.

Un archivo recién creado titulado /tmp/nombredeusuario/resolutions.txt: Permission denied Deliverables A title Question 1 content_view let_ 1.2. Conviértase en uno de sus usuarios de cuenta alterna. Como el usuario alterno.al usuario alterno.txt -bash: /tmp/student/resolutions. 39 .txt keep room clean don't eat all of the pop tarts use less proprietary software [student_a@station student_a]$ echo "lose weight" >> /tmp/student/resolutions. con permisos predeterminados. Puede reiniciar desde otra consola virtual. desde una conexión de red o sencillamente con ejecutar su .txt. confirme si puede ver el archivo. ¿Por qué no puede modificar el archivo como el usuario alterno? [student_a@station student_a]$ cat /tmp/student/resolutions.student_a Password: [student_a@station student_a]$ 3. Trate de añadir un nuevo punto a la lista. [student@station student]$ su .

Usualmente. El nombre chmod es un atajo para cambiarmodo. Cuando elvis haya decidido la letra de la canción entonces puede restaurar la lectura del archivo para otros." > blue_suede echo "Two for the show. el comando ls -l muestra que otros ya no lo pueden leer. después del comando chmod. escritura(w) y ejecución(x). y tres clases de acceso ((u)suario. (g)rupo. cat. los cuales definen la manera en que se puede utilizar el archivo. it's one for the honey. aprendimos que los archivos tienen permisos de lectura (r). Supongamos que elvis estuviera trabajando en la letra de una nueva canción y no quisiera que nadie la leyera antes de haberla terminado. al permiso de archivo se le conoce como el "modo" del archivo. menos. Sin embargo. necesitaría utilizar el comando chmod. Los permisos son administrados por el comando chmod. utilizando una vez más chmod. go. seguidas por los signos: más. [elvis@station elvis]$ [elvis@station elvis]$ [elvis@station elvis]$ -rw-rw-r-1 elvis [elvis@station elvis]$ [elvis@station elvis]$ -rw-rw---1 elvis echo "Well. cuando alguien crea un archivo." >> blue_suede ls -l blue_suede elvis 48 Jan 16 08:09 blue_suede chmod o-r blue_suede ls -l blue_suede elvis 48 Jan 16 08:09 blue_suede Observe que en el primer uso del comando ls -l. el archivo tenía permiso de lectura para todos. y (o)tro. Primero crearía el archivo y para no permitir a otros la lectura de éste. en Linux." >> blue_suede ls -l blue_suede elvis 48 Jan 16 08:10 blue_suede chmod o+r blue_suede ls -l blue_suede elvis 85 Jan 16 08:11 blue_suede El comando chmod le permite al usuario cambiar cualquier permiso asociado con un archivo." >> blue_suede echo "Now go. o igual y por otra secuencia de letras que 40 . it's one for the money. El primer argumento está compuesto por una secuencia de letras que especifican las clases de acceso. Discussion En la lección anterior." >> blue_suede echo "Three to get ready. [elvis@station elvis]$ [elvis@station elvis]$ [elvis@station elvis]$ [elvis@station elvis]$ [elvis@station elvis]$ -rw-rw---1 elvis [elvis@station elvis]$ [elvis@station elvis]$ -rw-rw-r-1 elvis echo "Well. por defecto el archivo puede ser modificado por sólo una persona. Por ejemplo. pero puede ser leíble por todos en el sistema." > blue_suede echo "Two for the snow.Cambio de permisos de archivos: chmod Conceptos clave • • El comando chmod se utiliza para modificar los permisos de archivo El primer argumento para chmod usa una sintaxis [ugoa]+/-[rwx] para describir cómo deberían cambiarse los permisos.

escritura y ejecución a grupo y otro suprime el permiso de escritura a todos suprime el permiso de lectura para el usuario y otro permisos resultantes rw-rw---rw-r--r-rwxrwxr-rw-rw-rwrw------r--r--r--w-rw---- 41 . con los permisos predeterminados de rw-rw-r--. Cualquier argumento subsecuente especifica una lista de archivos para aplicar los cambios. La sintaxis se resume en la siguiente tabla: Figure 1. La primera columna es un ejemplo del uso del comando chmod y la última columna son los permisos que el archivo tendría después de ejecutar el comando. Uso del comando chmod abreviación u g o a + = r w x interpretación user grupo otro todos agregar borrar set leer escribir ejecutar Ejemplos Uso del comando chmod en archivos La siguiente tabla presenta varios ejemplos de cómo el comando chmod se puede utilizar para modificar permisos de un archivo llamadofoo. [elvis@station elvis]$ ls -l foo -rw-rw-r-1 elvis elvis 42 Jan 16 08:09 foo command chmod o-r foo chmod g-w foo chmod ug+x foo chmod o+w foo chmod go-rwx foo chmod a-w foo chmod uo-r foo efecto suprime el permiso de lectura a otros suprime el permiso de escritura para el grupo agrega permiso de ejecución al usuario y grupo agrega permiso de escritura a otro suprime el permiso de lectura.especifican el tipo de permiso a cambiar.

[student@station student]$ cat > /tmp/student/resolutions.txt 4.txt -rw-rw---1 student student 77 Jan 16 17:52 /tmp/student/resolutions. Cree el directorio /tmp/nombredeusuario. Por ejemplo. Tiempo esperado: 10 minutos 1. Asuma que quiere mantener sus propósitos en secreto. [student@station student]$ chmod o-r /tmp/student/resolutions. le permiten a todos los usuarios en el sistema leer el archivo. si su nombre de usuario es elvis. su archivo del ejercicio anterior si todavía está disponible. Cree una lista sencilla de propósitos en el archivo /tmp/nombredeusuario/resolutions.chmod foo go=rx establece el permiso de lectura y ejecución pero no de escritura para el grupo y otro rw-r-xr-x A pesar de que las dos últimas entradas funcionarían. confirme que otros usuarios en el sistema no pueden leer sus propósitos. si no existe todavía. o simplemente cree uno nuevo como en el siguiente ejemplo.txt. Puede utilizar un editor de texto.txt 3. Al utilizar una de las cuentas alternas.txt [student@station student]$ ls -l /tmp/student/resolutions.txt -rw-rw-r-1 student student 77 Jan 16 17:52 /tmp/student/resolutions.txt cat: /tmp/student/resolutions. Modifique los permisos de archivos de tal forma que los otros no tengan acceso de lectura.txt keep room clean don't eat all of the pop tarts use less proprietary software Ctrl-D [student@station student]$ ls -l /tmp/student/resolutions. ¿En qué difiere esto del ejercicio de la lección anterior? Deliverables 42 . cree el directorio /tmp/elvis. [student@station student]$ su .student_a Password: [student_a@station student_a]$ cat /tmp/student/resolutions. Observe que los permisos en un archivo creado recientemente.txt: Permiso negado 5. ¿por qué es difícil imaginar un uso para un archivo con cualquiera de los dos permisos resultantes? Ejercicios en línea Hacer un Archivo Privado Lab Exercise Objetivo: Cambiar permisos en un archivo de tal manera que otros no puedan leerlo. 2.

A title Question 1 content_view let_ 1. 43 . Un archivo /tmp/resolutions.txt. recien creado es leíble únicamente por el propietario del archivo.

y el usuario debe ser un miembro del nuevo grupo de propietarios del archivo.305(governor) [ventura@station ventura]$ echo "Raise tax on oatmeal" > taxplan. ¿Qué sucedería si usted quisiera compartir el archivo con un grupo de personas pero no con todos? o ¿qué pasaría si quisiera modificarlo? En estas situaciones. Debido a que usted es el único miembro. debe cambiar el propietario del archivo de grupo. Crear el archivo. Cambiar el propietario del archivo de grupo al grupo governor utilizando el comando chgrp. Cuando se crea un archivo nuevo. Cambio de propietario de ARCHIVO(s) a GRUPO El primer argumento especifica el nuevo grupo propietario de archivo. En el siguiente ejemplo. 2.Cambio de Propiedad de Archivos con el comandochgrp y chown Conceptos clave • • El comando chgrp cambia el grupo de propietarios El comando chown cambia los usuarios propietarios Discussion Cambio de Propietarios de Grupo y Archivos con chgrp En la lección anterior. pero nadie más lo puede hacer. Esto se realiza con el comando llamadochgrp. Para compartir el archivo. [ventura@station ventura]$ id uid=2306(ventura) gid=2308(ventura) groups=2308(ventura). ventura). éste sería usualmente el grupo privado del creador. vimos cómo los usuarios de Linux pertenecen a una colección de grupos. chgrp GROUP ARCHIVO. debe realizar los siguientes pasos: 1.a rw-r----utilizando el comando chmod. El propietario del grupo sólo lo puede cambiar el usuario dueño del archivo. aprendimos cómo modificar los permisos de un archivo y vimos un ejemplo de cómo crear un archivo privado: el propietario del archivo podría leer el archivo. Para repasar.txt [ventura@station ventura]$ ls -l taxplan. el propietario del archivo del grupo es establecido como el grupo primario del creador. su grupo privado no es útil para trabajar en colaboración. desea crear un plan de impuestos que otros gobernadores deberían poder leer pero no modificar y al cual nadie más debería tener acceso. usted hace uso del grupo propietario de archivo y de los permisos de grupo. el usuario ventura es un miembro del grupo wrestler y del grupo governor (aparte de su grupo privado. En Red Hat Enterprise Linux. cada usuario pertenece a un grupo primario y también a un número de grupos secundarios. mientras que los argumentos subsecuentes listan los archivos cuyo propietario de grupo se va a cambiar. Para este fin..302(wrestle). Cambiar permisos en el archivo desde los permisos predeterminados rw-rw-r-. En el cuaderno anterior. 3.txt 44 .. Primero.

ventura) le gustaría compartir sus planes de lucha libre (wrestling) con el usuario hogan y con otros miembros del grupo wrestle. los permisos de acceso no tendrían sentido. La tabla de abajo resume estas habilidades. root. Esto se puede hacer utilizando chown.txt [ventura@station ventura]$ ls -l /tmp/plans. si algún usuario pudiera cambiar el archivo del propietario. Cambie el propietario del (los) archivo(s) a USUARIO.txt -rw-rw-r-1 ventura ventura 23 Jan 20 07:16 /tmp/plans. él ejecuta la siguiente secuencia de comandos." > /tmp/plans. puede usar chown. Sin embargo.txt [ventura@station ventura]$ chgrp governor taxplan. [ventura@station ventura]$ echo "beat chest and scream. cuando se utiliza el comando chgrp. el archivo del nuevo propietario del grupo.. sólo el propietario de un archivo puede cambiar los permisos o propiedades de archivo de un archivo. debe ser uno de los grupos subscritos del usuario.txt Usuarios autorizados root y el propietario del archivo root y el propietario de archivo (únicamente los grupos subscritos) sólo root 45 . Sólo el usuario administrativo. quien es miembro de los grupos secundarios governor y wrestler (aparte de su grupo privado.. ¿Quién puede Modificar las Propiedades de Archivos y los Permisos? Operación chmod chgrp chown Ejemplos Manejo de Archivos de Grupos Considere que al usuario ventura. El usuario administrativo. ¿Quién puede Modificar los Propietarios de archivos y los Permisos? En general. puede realizar cualquiera de estas operaciones.txt ¿Pueden intercambiarse los pasos dos y tres? Cambio de los propietarios de archivos con el comando chown En raras ocasiones.txt [ventura@station ventura]$ ls -l taxplan. cuya sintaxis es casi idéntica al del comando chgrp: chown USER ARCHIVO. es necesario que el administrador cambie el usuario propietario del archivo.txt -rw-rw-r-1 ventura governor 21 Jan 16 09:55 taxplan. para impedir el acceso a los que no son miembros del grupo wrestler. El primer argumento es el nombre del nuevo usuario del archivo y los argumentos siguientes son los nombres de los archivos a cambiar. Además. Como root es el único que puede ejecutar el comando chown éste no se estudiará a fondo.-rw-rw-r-- 1 ventura ventura 21 Jan 16 09:55 taxplan. root. Table 1.

txt.txt [hogan@station hogan]$ cat /tmp/plans.txt [ventura@station ventura]$ ls -l /tmp/plans. Al remplazar el nombre de usuario con su nombre de usuario. Grabe el archivo como /tmp/nombredeusuario/shopping.txt eggs bacon milk M and M's [student@station student]$ ls -l /tmp/student/shopping. a hogan le gustaría poner los planes a la vista de todos. /tmp/nombre de usuario.txt para lograr el mismo efecto en la secuencia anterior? Ahora al usuario hogan le gustaría agregarse a los planes de ventura..txt chmod: changing permissions of `/tmp/plans.txt -rw-rw-r-1 student wrestle 26 Jan 16 10:48 /tmp/student/shopping. si su nombre de usuario es student cree el directorio /tmp/student. throw large objects. Por ejemplo. él no es el dueño del archivo. si éste todavía no existe. Orgulloso de su contribución.. Usted puede reiniciar la sesión 46 . o simplemente desde la línea de comandos. [hogan@station hogan]$ echo "throw large objects.. Tiempo estimado:15 minutos Especificaciones 1.txt': Operation not permitted Aunque hogan es miembro del grupo wrestle.txt beat chest and scream..[ventura@station ventura]$ chmod o-rw /tmp/plans. Conviértase en su primer usuario alterno (i. Para ésto hace el archivo disponible para sólo lectura para todod el mundo. (compose and save your text) .e.txt . Haga una lista de mercado en su editor de texto preferido. [hogan@station hogan]$ chmod o+r /tmp/plans. Como miembro del grupo wrestle tiene permiso para hacerlo.txt -rw-rw---1 ventura wrestle 23 Jan 20 07:16 /tmp/plans. Recuerde que su primera cuenta alterna es también miembro del grupo wrestle.txt 3. [student@station student]$ chgrp wrestle /tmp/student/shopping. Cambie el propietario del grupo del archivo a wrestle. cree el directorio 2.txt [student@station student]$ cat /tmp/student/shopping. ¿Quiénes son los únicos dos usuarios en el sistema que pueden cambiar el propietario del grupo del archivo? Ejercicios en línea Compartir un archivo con un grupo Lab Exercise Objetivo: Crear un archivo compartido entre miembros de un grupo determinado." >> /tmp/plans. estudiante_a).txt ¿Pudo el usuario ventura haber usado el comando chmod o-r /tmp/plans. [student@station student]$ nano /tmp/student/shopping.txt [ventura@station ventura]$ chgrp wrestle /tmp/plans.

observe que puede modificar el archivo agregando un artículo más a la lista de mercado.al usuario alterno.student_a Password: [student_a@station student_a]$ groups student_a wrestle physics 4. Recuerde que su segunda cuenta alterna (i.desde la consola virtual. [student_a@station student_a]$ cat /tmp/student/shopping. Como el usuario alterno.e.txt eggs bacon milk M and M's [student_a@station student_a]$ echo "wheaties" >> /tmp/student/shopping. de propiedad de su usuario primario.txt [student_a@station student_a]$ cat /tmp/student/shopping. estudiante_b) no es un miembro del grupo wrestle.student_b Password: [student_b@station student_b]$ groups student_b emperors [student_b@station student_b]$ cat /tmp/student/shopping. 47 . confirme que puede ver el archivo. o simplemente con el comando su . [student@station student]$ su .txt. Usted podrá ver el archivo pero no modificarlo.txt eggs bacon milk M and M's wheaties 5. También.txt -bash: /tmp/student/shopping.txt eggs bacon milk M and M's wheaties [student_b@station student_b]$ echo "chips" >> /tmp/student/shopping.txt: Permission denied Deliverables A title Question 1 El archivo /tmp/nombre de usuario/mercado. es de escritura para los miembros del grupo wrestle y de sólo lectura para los demás. desde la conexión de red. perteneciente al grupo propietario wrestle. [student@station student]$ su . Trate de convertirse en segundo usuario alterno y repita los pasos anteriores.

a saber: lectura (r). Sin embargo. Con el fin de referirse a cualquier archivo dentro de un directorio. Los permisos de directorio se pueden modificar con el comando chmod. los tipos de permiso que ya hemos visto. Este permiso se conoce como el permiso "buscar". Discussion Permisos de Directorio Cuando alguien está usando un archivo dentro de Linux. pero como el tercer permiso ya ha sido llamado de "ejecución". Por lo tanto. por eso Linux no trata de definir una conducta similar. En cambio. Linux considera que hacer la lista del contenido de un directorio. No hay una analogía razonable para "ejecutar" un directorio. Agregar o suprimir un archivo desde un directorio se considera "escribir"el directorio y por lo tanto alguien debe tener permisos de escritura (w) para barajar los archivos dentro del directorio. Los permisos de directorio deberían dar derecho al propietario del directorio de controlar quién puede realizar estas operaciones. un directorio es solo un tipo especial de archivo. Los permisos de escritura le dan al usuario el derecho de agregar y borrar archivos. un propietario de grupo y una serie de permisos. un grupo propietario y las mismas clases de acceso ((u)suario. lo que no tiene nada que ver con el comando de ejecución. (g)rupo. el permiso de ejecución (x) controla la conducta de los directorios. es obvio que los directorios se utilizan de una manera diferente. 48 . y por lo tanto. y mueven archivos de un directorio a otro. generalmente puede estar leyendo su información. tienen muchas interpretaciones. escritura (w) y ejecución (x). La primera fila de la siguiente tabla parece familiar.Propiedad de Directorios y Permisos Conceptos clave • • • • • Como los directorios también son archivos. tambien tiene las mismas clases de permisos lectura (r). tienen un usuario propietario de archivo. una persona debe tener permisos de lectura (r) para listar su contenido. ¿Qué hace la gente con los directorios? Hacen la lista del contenido con el comando ls. (como con el comandols) es análogo a "leer" un directorio. Borran archivos desde ahí. por lo tanto. un usuario debe tener permisos de ejecución (x). escritura (w) y ejecución (x). modificándola o tratando de ejecutar el archivo como un script o aplicación. Los permisos de ejecución le dan derecho al usuario de acceder a un archivo dentro del directorio. ¿Tendría sentido si abriéramos un directorio en un editor tal como nano /home/elvis? Debido a que la gente usa directorios diferentes. Los permisos de lectura permiten al usuario listar el contenido de un directorio. crean nuevos archivos dentro de ellos.y (o)tro). los permisos de directorio tienen diferentes interpretaciones. Se ha agregado una fila para directorios para comparar y contrastar la interpretación del permiso de ambos tipos de archivo. Esta repite cómo interpretar los permisos para archivos regulares. un usuario propietario. para los archivos regulares. se utiliza la misma palabra (y letra) para los directorios. (incluyendo subdirectorios). Para Linux.

dat -rw-rw-r-1 nero nero 42 Jan 16 15:48 gaul. 2. El decide crear un directorio llamado /tmp/censuspara guardar todos los datos.. quien está recolectando información del censo de varias provincias.dat rm: remove write-protected regular file `/tmp/census/iberia. pero sólo el usuario y el grupo propietario del archivo pueden modificarlos. él no puede agregar ni suprimir nuevos archivos. [julius@station julius]$ ls -al /tmp/census/ total 20 drwxrwxr-x 2 nero nero 4096 Jan 16 15:48 .dat'? y rm: cannot remove `/tmp/census/iberia. pero no modificar el contenido de los archivos. pero debido a los permisos por defecto de un directorio. -rw-rw-r-1 nero nero 42 Jan 16 15:48 egypt.dat [julius@station julius]$ rm /tmp/census/iberia. A causa de los permisos predeterminados de archivo.Table 1. drwxrwxrwt 23 root root 4096 Jan 16 15:45 . 3. Cualquiera puede buscar archivos dentro del directorio.dat': Permission denied 49 . Estos permisos tienen las siguientes implicaciones: 1. Solo el propietario de directorio (o miembros de un grupo propietario) puede añadir o borrar archivos dentro del directorio. Por ejemplo. Observe que julius puede navegar los directorios y los archivos dentro de los directorios. él puede ver.dat -rw-rw-r-1 nero nero 42 Jan 16 15:47 iberia. Todos pueden listar los archivos dentro del directorio. ¿Cómo se manejan los directorios recién creados? Estudie el caso de nero. julius decide que le gustaría hojear la información que tiene nero sobre el censo. [nero@station nero]$ mkdir /tmp/census [nero@station nero]$ ls -ld /tmp/census/ drwxrwxr-x 2 nero nero 4096 Jan 16 15:33 /tmp/census/ (¿Por qué nero necesitó agregar la opción -d al comandols?) Observe que los permisos predeterminados para los directorios recién creados son rwxrwxr-x. Permisos para archivos regulares y directorios Lectura(r) Ver el archivo lista el contenido del directorio escritura (w) Modificar el archivo añade o borra archivos ejecución (X) Usar el archivo como comando "busca" un archivo conocido dentro del directorio archivo regular directorio Ejemplos Propiedades predeterminadas para los directorios nuevos Los archivos normales recién creados son de lectura para todos.

en Red Hat Enterprise Linux. el directorio /tmp es "barrido. En el primer ejemplo. éste se borra del sistema. nero escoge crear un subdirectorio público dentro de su directorio de inicio. hay sólo dos lugares en donde los usuarios pueden crear archivos. Usualmente. Si en 10 días no se ha tenido acceso a un archivo dentro de /tmp. [nero@station nero]$ ls -l ~augustus ls: /home/augustus: Permission denied ¿Ha notado que la mayoría de nuestros ejercicios que involucran a varios usuarios entrando a un archivo han utilizado el directorio /tmp/nombredeusuario en lugar del directorio de inicio del usuario? ¿Por qué razón no hemos utilizado el directorio de inicio del usuario? Creación de un directorio ~/pub Ahora a Nero le gustaría hacer pública su información sobre el censo. se llama pub. Por defecto.dat: No such file or directory [julius@station julius]$ cat /tmp/census/gaul.". nero crea el directorio ~/puby copia en él la información del censo desde /tmp/census. [nero@station nero]$ mkdir pub [nero@station nero]$ cp /tmp/census/* pub 50 ..dat -bash: /tmp/census/thrace. Convencionalmente. compartir archivos desde el directorio de inicio del usuario. en Red HatEnterprise Linux. Nero necesita buscar un sitio mejor. sólo el usuario propietario de un directorio de inicio tiene permisos de buscar. nero escoge crear un directorio censusdentro de /tmp. Sin embargo. Con el fin de crear un sitio accesible al público permanente para sus datos del censo. Primero.[julius@station julius]$ echo "110 CE 42" > /tmp/census/thrace.dat -bash: /tmp/census/gaul.dat 110 CE 45430 120 CE 53200 130 CE 55820 [julius@station julius]$ echo "140 CE 583420" >> /tmp/census/gaul. un directorio de inicio no sigue los permisos predeterminados. un subdirectorio como tal en Linux.. el directorio /tmp y ~ (el directorio de inicio del usuario). [nero@station drwx-----[nero@station total 120 drwx-----drwx-----drwx-----drwx-----. Como las siguientes secuencias lo mostrarán. los directorios de inicio están "protegidos". nero]$ ls -ld ~ 3 nero nero nero]$ ls -l /home/ 3 3 3 3 alice augustus austin blondie alice augustus austin blondie 4096 Jan 16 16:04 /home/nero 4096 4096 4096 4096 Jan Jan Jan Jan 15 14 14 14 08:04 15:22 15:22 13:46 alice augustus austin blondie En Red Hat Enterprise Linux.dat: Permission denied Directorios de inicio En Red Hat Enterprise Linux. no es tan fácil como crear un directorio leible (r) o ejecutable (x) por todo el mundo.

" siempre se refiere al directorio padre actual en este caso /home/nero.dat cat: /home/nero/pub/egypt. no todo sale bien: [julius@station julius]$ cat /home/nero/pub/egypt. incluyendo los subdirectorios. julius busca archivos y obtiene un listado de directorio. un usuario debe haber buscado permisos para el directorio. [nero@station nero]$ chmod o+x /home/nero/ [nero@station nero]$ ls -al /home/nero/pub total 20 drwxrwxr-x 2 nero nero 4096 Jan 16 16:13 . Recuerde que ". -rw-rw-r-1 nero nero 42 Jan 16 16:13 egypt. Como los permisos en /home/nero/pub le dan acceso de lectura(r) y ejecución (x) a otros. el usuario debe permitir a la gente buscar en su directorio de inicio..dat Recuerde que ". julius trata de tener acceso a los archivos. otros tienen permisos de ejecución (x) en /home/nero."siempre se refiere al directorio actual en este caso/home/nero/pub. Para crear un directorio accesible al público dentro de un directorio de inicio.dat: Permission denied ¿Qué ha olvidado nero? Recuerde que para tener acceso al archivo dentro de un directorio. Infortunadamente. drwx-----x 4 nero nero 4096 Jan 16 16:14 .d Ahora. no puede tener acceso a /home/nero/pub.. es decir que otros tienen acceso a los archivos. Pero como julius no tiene los permisos de búsqueda para /home/nero.dat 51 . Nero revisa concienzudamente los permisos en el directorio y los archivos recién creados. Como todo parece estar en orden.dat -rw-rw-r-1 nero nero 42 Jan 16 16:13 gaul. Los permisos en /home/nero/pub están correctos. En /home/nero/pub encuentra los permisos de rwxrwxr-x. todo estaría bien. le dice a julius dónde encontrar la información. -rw-rw-r-1 nero nero 42 Jan 16 16:13 egypt. Los archivos mismos de datos tienen permisos de rw-rw-r--.[nero@station nero]$ ls -al /home/nero/pub/ total 20 drwxrwxr-x 2 nero nero 4096 Jan 16 16:13 .." en la lista de arriba o listados de nuevo a continuación): [nero@station nero]$ ls -ld /home/nero/ drwx-----4 nero nero 4096 Jan 20 14:05 /home/nero/ Si julius pudiera tener acceso al archivo /home/nero/pub.dat -rw-rw-r-1 nero nero 42 Jan 16 16:13 iberia. Nero arregla el problema en la siguiente secuencia de comandos. julius trata de nuevo de examinar el archivo.dat -rw-rw-r-1 nero nero 42 Jan 16 16:13 iberia. Interesado en los datos. drwx-----4 nero nero 4096 Jan 16 16:12 .dat -rw-rw-r-1 nero nero 42 Jan 16 16:13 gaul. lo que implica que otros pueden buscar una lista de archivos desde el directorio.. pero observe los permisos en /home/nero (". [julius@station julius]$ cat /home/nero/pub/egypt.

pero no lee(r) en su directorio de inicio. por ejemplo.dat iberia.dat gaul. [julius@station julius]$ ls /home/nero ls: /home/nero: Permiso negado Protección de subdirectorios de inicio Es frecuente que los usuarios permitan a otros usuarios el acceso a sus directorios de inicio (considere. tiene ahora permisos de rwx-----x. Otros usuarios pueden aún "adivinar" el contenido de un directorio del cuál tienen permisos para ejecutar (x) pero no de lectura (r). Aunque el no añadir permisos de lectura (r) al directorio de inicio brinda alguna protección contra otros usuarios que estén navegando. permitiéndole a julius sólo permisos de ejecución(x). julius puede obtenerlo.. Esto se muestra en la siguiente transcripción: [nero@station drwx-----x [nero@station [nero@station [nero@station total 12 drwxrwxr-x drwx-----x -rw-rw-r-nero]$ 3 nero nero]$ nero]$ nero]$ 2 nero 4 nero 1 nero ls -ld ~ nero 4096 Jan 20 16:41 /home/nero mkdir mail cal 2002 > mail/sent ls -al mail nero nero nero 4096 Jan 20 16:41 . no obstante. otros usuarios deben saber que un directorio existe dentro del directorio de inicio para tener acceso a éste.dat En contraste. Suponga que nero le ha dado a otros permiso de ejecución (x) a su directorio de inicio (como en el ejemplo anterior). /home/nero. el ejemplo anterior). Al permitir a otros ejecutar (x). julius no puede navegar el contenido de un directorio con el comando ls. Debido a que otros usuarios no pueden usar el comando ls para descubrir el contenido de su directorio de inicio. para almacenar mensajes. el directorio de inicio de nero. nero le dijo que éste estaba allí). si julius ya sabe que un archivo está en el directorio (porque. 4096 Jan 20 16:41 . Por lo tanto. los directorios de inicio de los usuarios permanecen siendo privados y sólo las partes que ellos quieran exponer estarán disponibles a otros usuarios.110 CE 45430 120 CE 53200 130 CE 55820 [julius@station julius]$ ls /home/nero/pub egypt. Si elvis fuera a adivinar si dicho directorio existe. los usuarios usualmente crean un directorio llamado ~/mail. 2027 Jan 20 16:41 sent 52 . y más tarde crea un directorio ~/mail. ésta no es infalible. los permisos por defecto en ~nero/maille permitirían navegar sus contenidos. Por ejemplo.

Adopte el siguiente plan: 1. Por defecto. music y wrestle. ~/pub.. pero que no se pueda listar. que se puedan buscar y listar sólo para los miembros de los grupos music ywrestle. Cree un sudirectorio públicamente fácil de buscar. aparte de su grupo privado. mientras que su tercera cuenta alterna debería ser un miembro del grupo music. Cree dos subdirectorios de ~/pub. Permita que otros tengan acceso a archivos en su directorio de inicio otorgándoles permisos de "búsqueda".[elvis@station elvis]$ cat ~nero/mail/sent 2002 January Su Mo Tu We Th 1 2 3 6 7 8 9 10 13 14 15 16 17 20 21 22 23 24 27 28 29 30 31 Fr 4 11 18 25 Sa 5 12 19 26 February Su Mo Tu We Th Fr Sa 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 March Su Mo Tu We Th Fr 1 3 4 5 6 7 8 10 11 12 13 14 15 17 18 19 20 21 22 24 25 26 27 28 29 31 Sa 2 9 16 23 30 .. Además. 3. si alguien puede adivinar el nombre del directorio. en su directorio de inicio. La solución de nero sería cancelar su subdirectoriomail. [student@station student]$ groups student student : student wrestle music [student@station student]$ groups student_a student_a : student_a wrestle physics [student@station student]$ groups student_c student_c : student_c music Desde dentro de su directorio de inicio. 53 . su primera cuenta alterna debe ser un miembro de los grupos wrestle y physics. Observe que usted necesitará tener en cuenta a los propietarios de grupo de los directorios como también los permisos. Usted preferiría que un grupo ni siquiera se diera cuenta de la existencia de otro directorio de grupo. también será capaz de navegar un subdirectorio. usted quisiera compartir información con otros músicos y luchadores. [nero@station nero]$ chmod o-rx mail Ejercicios en línea Creación de directorios públicos para grupos distintos Lab Exercise Objetivo: Crear directorios accesibles a grupos dentro del directorio de inicio de un usuario Especificaciones Su cuenta debería ser miembro de dos grupos secundarios. respectivamente: ~/pub/music y ~/pub/wrestle. ¿Cuál es la lección que nero debe aprender? Si usted permite a otros el acceso a su directorio de inicio como es frecuente el caso. debe considerar los permisos que hay en los subdirectorios recién creados. 2. pero no le gustaría que los músicos vieran la información de los luchadores y vice versa.

. ~/pub/wrestle/plan. drwx-----x 4 student student 4096 Jan 20 15:17 . row. un directorio de búsqueda y que solo los miembros del grupo music pueden listar. content_view let_ Ayudas La siguiente serie de comandos demuestra una solución posible para hacer el directorio ~/pub/music. 5. 1 Un directorio de inicio de búsqueda para todos y donde sólo usted puede listarlo. ~/pub/music/lyrics. 4. un archivo de lectura y escritura para los miembros del grupo wrestle. 54 . un directorio de búsqueda para todos y de listado sólo para usted. un directorio de búsqueda y que solo los miembros del grupo wrestle pueden listar. ~/pub. [student@station student]$ ls -ld ~ drwx-----3 student student 4096 Jan 20 15:17 /home/student [student@station student]$ chmod o+x ~ [student@station student]$ mkdir ~/pub [student@station student]$ chmod o-r ~/pub [student@station student]$ ls -al ~/pub total 8 drwxrwx--x 2 student student 4096 Jan 20 15:17 . ~/pub/wrestle. [student_a@station student_a]$ ls /home/student/pub/wrestle plan [student_a@station student_a]$ cat /home/student/pub/wrestle/plan pin the other guy [student_a@station student_a]$ ls /home/student/pub ls: /home/student/pub: Permission denied [student_c@station student_c]$ ls ~student/pub/music lyrics [student_c@station student_c]$ cat ~student/pub/music/lyrics row. row your goat [student_c@station student_c]$ ls ~student/pub ls: /home/student/pub: Permission denied Deliverables A title Question 1. Cree los archivos ~/pub/music/lyricsy ~/pub/wrestle/plan. 3. ~/pub/music. Los miembros de los grupos music y wrestle deberían poder leer y escribir respectivamente. usted debería poder confirmar la conducta apropiada utilizando sus cuentas alternas (student_a y student_c).4. Cuando haya terminado. un archivo de lectura y escritura para todos los miembros del grupo music. 2.

Cree un archivo dentro del directorio y use una de las cuentas alternas para confirmar que otros usuarios no puedan acceder al archivo. Cree un subdirectorio memos en su directorio de inicio y modifique sus permisos de tal manera que otros en el sistema no tengan acceso al directorio. Solución:La siguiente serie de comandos demostró una solución posible para las especificaciones anteriores (la salida asume que usted acaba de completar el ejercicio anterior). content_view let_ chmod Revisitado: Notación octal Conceptos clave • • El comando chmod puede usar un sintaxis octal alterna La sintaxis octal es a menudo más rápida y más motivante. Discussion ¿Por qué una sintaxis diferente? 55 .[student@station [student@station [student@station [student@station total 16 student]$ student]$ student]$ student]$ mkdir ~/pub/music chmod o-rx ~/pub/music/ chgrp music ~/pub/music ls -al ~/p Protección de subdirectorios dentro del directorio de inicio Lab Exercise Objetivo: Proteger un subdirectorio recién creado dentro de su directorio de inicio. [student@station student]$ ls -ld ~ drwx-----x 4 student student 4096 Jan 20 16:50 /home/student [student@station student]$ mkdir memos [student@station student]$ chmod o-rx memos/ [student@station student]$ ls -l total 8 drwxrwx--2 student student 4096 Jan 20 16:50 memos drwxrwx--x 4 student student 4096 Jan 20 15:18 pub [student@station student]$ echo "feed cat" > memos/todo [student_a@station student_a]$ ls ~student/memos ls: /home/student/memos: Permission denied [student_a@station student_a]$ cat ~student/memos/todo cat: /home/student/memos/todo: Permission denied Deliverables A title Question 1. que sólo el propietario del directorio puede navegar. Estos ejercicios asumen que otros ya tienen permisos de ejecución (x) en su directorio de inicio. de una navegación no intencionada. Un directorio llamado~/memos.

Los dígitos de una notación octal son la suma de los permisos concedidos para cada clase de acceso. y otro (o)). (w) tiene 2. 755 = rwxr-xr-x 7 = 4 + 2 + 1 = rwx for (u)ser 5 = 4 + 0 + 1 = r-x for (g)roup 5 = 4 + 0 + 1 = r-x for (o)ther 640 = rw-r----6 = 4 + 2 + 0 = rw. grupo propietario (g). usted no puede decir si el archivo tiene permisos de escritura para los miembros del grupo o para otros. la cual resuelve estos problemas: [student@station student]$ chmod 600 diary Después de aprender la sintaxis. ¿Cuáles son los permisos resultantes en diary? Un problema de sintaxis es que. usted no puede saber. Sin saber los permisos originales. A cada tipo de permiso se le concede un valor: (r) tiene 4. Esta lección ilustrará una sintaxis octal alterna para el comando chmod. Modos de archivos 56 .for (o)ther 701 = rwx-----x 7 = 4 + 2 + 1 = rwx for (u)ser 0 = 0 + 0 + 0 = --. al saber que sólo este comando fue ejecutado. el comandochmod se utilizó para modificar permisos de un archivo utilizando una sintaxis simbólica como la siguiente: [student@station student]$ chmod og-r diary Esta sintaxis tiene algunas ventajas y desventajas. una vez aprendida. Los siguientes ejemplos demuestran cómo se traducen los números octales a una sintaxis convencional de permisos.En las lecciones anteriores.. Como un beneficio agregado. Como la sintaxis es muy legible.for (u)ser 4 = 4 + 0 + 0 = r-. la intención de un comando es bastante evidente: el estudiante no quiere que otros usuarios lean el archivo diary. Con la notación octal.for (g)roup 0 = 0 + 0 + 0 = --. escritura (w) y ejecución (x). usted sabría que.for (g)roup 1 = 0 + 0 + 1 = --x for (o)ther Esta notación se llama la notación "octal" debido a que cada dígito tiene 8 posibles valores(de 0 a 7). y (x) tiene 1. ¿De dónde salió 600? Recuerde que un archivo tiene tres tipos diferentes de permisos (lectura (r). la sintaxis octal tiende a ser más rápida para el usuario. para las tres clases de usuario: usuario propietario (u). cada clase de acceso obtiene un dígito. las "decenas" para el grupo (g) y las "unidades" para otro (o) . al ejecutar el comando anterior. el archivo diary tendría permiso de rw-------. las "centenas" para el usuario (u).

elvis pudo ajustar los permisos de grupo (g)y de otro (o) con un simple comando. Ejemplos Creación de un directorio ~/pub (utilizando la notación octal) Al usuario elvis le gustaría establecer un directorio compartido ~/drafts. [elvis@station elvis]$ mkdir ~/drafts [elvis@station elvis]$ chmod 701 ~ [elvis@station elvis]$ chmod 770 ~/ [elvis@station [elvis@station [elvis@station total 12 drwxrwx--2 drwx-----5 -rw-rw-r-1 elvis]$ echo "One for the honey" > ~/drafts/lyrics elvis]$ chgrp -R music drafts/ elvis]$ ls -al drafts/ elvis elvis elvis music elvis music 4096 Feb 14 10:16 .." siempre se refiere al directorio actual en este caso /home/elvis/drafts. al estado de los permisos de archivo se les conoce como el modo de un archivo. la notación octal brinda una forma rápida de referirse a los permisos de archivo. ¿Cómo habría tenido que hacer esto utilizando una notación simbólica? Observe que el comando chgrp -Rle dice a chgrp que vaya de modo recursivo por un directorio (y todos sus subdirectorios). Por ejemplo. un administrador de sistema podría decir que los "Directorios se crean con un modo predeterminado de 755"." siempre se refiere al directorio padre actual en este caso/home/elvis. Los comandos chmod y chown tienen esta opción. elvis utilizará la notación octal. 4096 Feb 14 10:15 . 57 . Quisiera que los miembros del grupo music tuvieran libre acceso al directorio y que otros usuarios no. Recuerde que ".Una vez aprendida. Por ejemplo. este término se utiliza para referirse a los permisos de archivo de notación octal. ". En particular.. Al utilizar el comando chmod. los administradores experimentados de Linux a menudo se referirán a un permiso de archivo de "644" o de un directorio de "755". 18 Feb 14 10:16 lyrics En este uso del comandochmod. En Unix.

relativity `-. pero como el directorio ahora tiene el modo 660. el comando chmod hizo lo que debe hacer.time_travel El usuario einstein ahora decide cambiar los permisos en todos sus archivos dentro de su directorio sin publicar. el comando chmod R no distingue entre archivos y directorios. Dicho comando find se presentará en la siguiente sección). los archivos regulares no.unpublished/ |-. mientras que.eismcsquared |-. (Con el fin de obtener el resultado deseado. por lo general. otros no. einstein podría utlilizar el comando find para buscar de modo recursivo. einstein decide utilizar la forma recursiva del comando chmod. papers/ |-. Infortunadamente. einstein ya no tiene permiso de acceso a su propio directorio y el comando ¡falla! ¿Qué lección nos deja este ejemplo? Los directorios y archivos regulares tienen diferentes permisos "razonables". [einstein@station einstein]$ chmod -R 660 papers/unpublished/* chmod: failed to get attributes of `papers/unpublished/unlikely/time_travel': Permission denied [einstein@station einstein]$ ls papers/unpublished/unlikely/ ls: papers/unpublished/unlikely/time_travel: Permission denied ¿En qué se ha equivocado einstein? ¿Por qué ni siquiera puede ver su propio directorio? Preste atención a los permisos de los archivos en papers/unpublished: [einstein@station einstein]$ ls -l papers/unpublished/ total 4 -rw-rw---1 einstein einstein 0 Feb 14 10:46 eismcsquared -rw-rw---1 einstein einstein 0 Feb 14 10:45 photoelectric_effect drw-rw---2 einstein einstein 4096 Feb 14 10:46 unlikely Cuando einstein ejecutó el comando chmod -R 660 papers/unpublished/*. para que otros usuarios no puedan leerlos. Por ejemplo. los directorios deben tener establecido el permiso de ejecutar (x).photoelectric_effect `-. Con el fin de ahorrar tiempo.Mal uso de la notación octal El usuario einstein tiene la siguiente serie de artículos.unlikely/ `-.published/ | `-. Luego trató de ir en forma recursiva al directorio unlikely. algunos ya han sido publicados. Estableció el modo de cada archivo como 660 (incluyendo el directorio unlikely). Ejercicios en línea 58 . Todos los archivos y direcciones tienen permisos predeterminados.

data 2001.q2.q4.final 2003.final 2002. Usted desea moverlos a un directorio dedicado ~/reports/final.q3. los archivos.final} [student_b@station reports]$ ls 2001. {data.draft 2002.final 2002.data 2002.data 2001.q1.q1. 2. Cualquiera pueda leer 3.draft 2003.q1.q4.q1.Administración de Permisos en Grupos de Archivos Lab Exercise Objetivo: Administrar permisos en un grupo grande de archivos.final 2001.draft 2002.data 2003.q2.data contienen datos crudos.draft.q4. poder listar el contenido del directorio y poder leer los informes (pero no modificarlos). Inicie la sesión bajo esa cuenta y cree un directorio ~/reports y ejecute el comando cd en ese directorio.final 2001. Especificaciones Desea implementar los siguientes principios 1.q3.q2. Todos los archivos que terminen en .2002. Solo los miembros del grupo emperors deberían tener accceso al subdirectorio.final 2001.data 2002.q1.draft Observe que todos los archivos tienen permisos predeterminados.q2.q2.final 2003.q2.final 2003. pero otros usuarios no deberían tener acceso a ellos.final 2002.data 2001.q4.q1.q3. [student_b@station reports]$ touch {2001. Todos los archivos terminados en .q4}.{q1. Use el comando chmod con una notación octal para obtener estos resultados.q4.2003}. Deliverables A title Question 1 59 .finalson borradores finales.q2. [student_b@station student_b]$ groups student_b emperors [student_b@station student_b]$ mkdir reports [student_b@station student_b]$ cd reports Use el siguiente comando "mágico" para crear un número grande de archivos en el directorio actual.q4.draft 2003.draft 2001.data 2003.data 2002.q2.q3.q3. pero solo usted tiene derecho a modificarlos.final 2001.q3. en los cuales usted desea ayudar.draft 2002.draft 2001.q3.draft 2003.q4. Todos los archivos que terminen en .draft 2001.final 2002. Todos los archivos (incluyendo directorios) deberían pertenecer al grupo emperors.draft contienen borradores de trabajo de sus informes.data 2002.q4. La sintaxis de paréntesis que está utilizando será presentada en un cuaderno posterior. 4.q1.q1.q4.data 2001.data 2003.q2.draft 2003.q2.data 2003. Los miembros del grupo emperors deberían poder leer y modificar los archivos.q3.q3.q1. utilizando la notación octal.final 2003.q3.draft 2002. Configuración Su segunda cuenta alterna (student_b) debe ser miembro del grupo emperors.

Un directorio ~/reports de libre acceso y lectura.data. de lectura y escritura sólo para miembros del grupo emperor. de escritura y lectura para el propietario del archivo. 4. Possible Solution The following sequence of commands provides one possible solution to this exercise. [student_b@station [student_b@station [student_b@station [student_b@station [student_b@station [student_b@station [student_b@station reports]$ reports]$ reports]$ reports]$ reports]$ reports]$ reports]$ chmod 644 *.final final/ chgrp -R emperors . 2. 60 .final. deberían pertenecer al grupo propietario emperor. Un directorio ~/reports/final de acceso y lectura solo para miembros del grupo emperor. 1.final mkdir final chmod 750 final/ mv *. Una serie de archivos ~/reports/*. 3.data chmod 660 *. pero sólo con permiso de escritura para usted.draft. Otros usuarios no tendrían acceso.El directorio ~/reports y todos sus archivos y directorios subyacentes. Una colección de archivos ~/reports/final/*. pero de lectura y de no escritura para los miembros del grupo emperor. de lectura para todos. Una colección de archivos ~/reports/*.draft chmod 640 *.

tiene un número octal de tres dígitos. implicando que cualquier persona puede acceder o navegar en el directorio. Como un modo octal. el cual desenmascará alguno de estos permisos por defecto. una umask de 002 resultaría en permisos por defecto de 664: kernel default: 666 --> rw-rw-rwumask: 002 --> -------w----------------------------------------default permissions: 664 --> rw-rw-r-- Otro ejemplo. la umask está compuesta por valores de permisos no deseados. 4 para lectura (r). Sin embargo. una umask de 077 resultaría en permisos por defecto de 600: kernel default: 666 --> rw-rw-rwumask: 077 --> ---rwxrwx ----------------------------------------default permissions: 600 --> rw------- 61 . Cada proceso posee un parámetro "umask". La umask está compuesta justo como un modo octal. (rw-rw-rw). cada tipo de permiso tiene un valor. Cada proceso. 2 para escritura (w). Por ejemplo. Como un modo octal. el cual se utiliza para "desenmascarar". En el nivel de kernel de Linux cree directorios con el modo por defecto de 777(rwxrwxrwx). lo que implica que todos pueden leer el archivo. el umask por defecto para usuarios estándar es 002. a diferencia de los modos octales. Permisos predeterminados para archivos Con el fin de determinar los permisos para archivos recién creados. La umask de la shell bash se puede modificar con el comando umask. los directorios recién creados tienen un modo por defecto de 775 (rwxrwxr-x). pero sólo el propietario del directorio puede añadir o borrar archivos.Control de permisos por defecto: umask Conceptos clave • • • • • A nivel de Kernel. Los permisos predetermiandos de los archivos recién creados se pueden alterar a través de un concepto Unix estándar llamado umask. pero el significado es invertido. incluyendo el comando de shell bash. (g)rupo propietario en las "decenas" y (o)tros en las "unidades". cada clase de acceso es representado por un sólo dígito: (u)suario está en las "centenas". pero únicamente el propietario de archivo puede modificar un archivo recién creado. Linux crea archivos con el modo por defecto de 666 (rw-rw-rw). y 1 para ejecución(x). Todos los valores asignados en la umask son "revelados" de los permisos predeterminado de 666. Discussion Control de las permisos predeterminados con umask En las lecciones anteriores vimos que los archivos recién creados tienen un modo por defecto de 664 (rw-rw-r--). Igualmente. El kernel luego aplica la umask para el proceso que creó el archivo. En Red Hat Enterprise Linux. el kernel de Linux comienza con un modo global por defecto de 666.

pero nadie más tiene acceso. una umask de 077 tiene el mismo efecto general tanto en archivos como en directorios: el usuario propietario puede leer y modificar. Cualquiera puede leer. una umask de 077 resultaría en permisos predeterminados de 700: kernel default: 777 --> rwxrwxrwx umask: 077 --> ---rwxrwx ----------------------------------------default permissions: 700 --> rwx------ Observe que. una umask de 002 tiene el mismo efecto general para los archivos y directorios. Modificación de la umask de shell: el comando umask La umask de shell bash se puede examinar y modificar con el comando umask. el comando umask reporta la umask de shell actual.Al determinar los permisos por defecto. Cuando se llama con una umask octal como un único argumento. Igualmente. en ambos casos. pero sólo el propietario puede modificar. la umask se reporta como un número octal de cuatro dígitos. Por ahora. blondie y otros músicos están colaborando con la letra de una canción. A blondie le gustaría crear varios archivos que los miembros del grupo de music pueden ver y modificar. una umask de 002 resultaría en permisos por defecto para directorios de 775: kernel default: 777 --> rwxrwxrwx umask: 002 --> -------w----------------------------------------default permissions: 775 --> rwxrwxr-x Igualmente. [student@station student]$ umask 0002 [student@station student]$ umask 077 [student@station student]$ umask 0077 (Observe que. Cuando se llama sin argumentos. Permisos predeterminados para directorios Los permisos predeterminados para los directorios se crean utilizando la misma técnica. en la salida. se le asigna a la umask de shell el valor especificado. el "0" del comienzo se puede ignorar (su significado será más claro en la siguiente lección). Una posibilidad sería crear los archivos y 62 . Por ejemplo. Ejemplos Uso del comando umask para crear archivos compartidos por grupos En la siguiente secuencia. pero que nadie más puede leer o escribir. cualquier permiso que sea asignado en la umask es "desenmascarado" del kernel predeterminado. excepto que el modo por defecto del kernel para directorio es 777 (rwxrwxrwx).

existe por defecto en el directorio de inicio del usuario. [blondie@station blondie]$ umask 0002 [blondie@station blondie]$ umask 007 [blondie@station blondie]$ umask 0007 [blondie@station blondie]$ echo "Twinkle. Siempre que se inicia una nueva shell bash.bashrc. blondie va a utilizar el comando umaskpara cambiar sus permisos por defecto de shell en los archivos recién creados.txt Observe que la umask de shell de 007 "desenmascaró" los permisos que hubiesen podido ser asignados por (o)tros.txt [blondie@station blondie]$ ls -l total 12 -rw-rw---1 blondie music 30 Feb 20 14:20 song1. nero examina primero.txt [blondie@station blondie]$ echo "Bah. luego agrega una nueva línea y después reexamina su archivo ~/.txt [blondie@station blondie]$ chgrp music song*.bashrc se ejecutan como si fueran escritos desde la línea de comandos.txt -rw-rw---1 blondie music 23 Feb 20 14:20 song3. el cual por lo general.luego cambiar los permisos de archivo con chmod. Por ahora. En cambio. los comandos listados en el archivo especialmente nombrado ~/. sólo observe que el archivo modificado ejecuta el umask como su último comando.bashrc para cambiar automáticamente la umask de la shell bash El emperador Nero. la umask de la shell sea establecida automáticamente como 077. él configurará su shell de tal forma que la umask de shell automáticamente será configurada como 077 al iniciar. En la siguiente secuencia.bashrc de nero.bashrc. 63 . no se preocupe por el contenido original del archivo.txt [blondie@station blondie]$ echo "Mary had a little lamb" > song3. Hará esto editando el archivo ~/. Quisiera configurar su shell bash de tal forma que cada vez que inicie.txt -rw-rw---1 blondie music 22 Feb 20 14:20 song2. twinkle. Al anexar "umask 077" al archivo ~/. black sheep" > song2. en un estado de paranoia está sospechando que los otros usuarios le están mirando sus archivos. Utilización de ~/. bah. little star" > song1.

64 . then .bashrcse ejecutará como si los hubiera escrito en la línea de comandos.bashrc # .bashrc [nero@station nero]$ cat ~/. Cuando nero sale y luego reinicia. Estimated Time: 10 mins.bashrc. su umask se establecerá automáticamente como 077 cada vez que comience una nueva shell.bashrc para cambiar los permisos por defecto de la shell bash. los archivos recién creados ahora tienen permisos por defecto de 600 (rw-------). Red Hat Enterprise Linux release 3.4. then Ahora que nero ha modificado su archivo ~/. Este archivo se utiliza a menudo para personalizar la conducta predeterminada de bash. Lab Exercise Objetivo: Uso del archivo ~/.20-4-ES on an i686 station login: nero Password: [nero@station nero]$ umask 0077 [nero@station nero]$ echo "All of Gaul is divided into three parts" > notes.bashrc # User specific aliases and functions # Source global definitions if [ -f /etc/bashrc ].bashrc # . /etc/bashrc fi [nero@station nero]$ echo "umask 077" >> ~/.0 (Taroon) Kernel 2.bashrc # User specific aliases and functions # Source global definitions if [ -f /etc/bashrc ]. Especificaciones Cada vez que inicie una shell bash.[nero@station nero]$ cat ~/.txt Ejercicios en línea Cambio de los permisos predeterminados de la shell bash. el contenido del archivo ~/.txt [nero@station nero]$ ls -l total 4 -rw------1 nero nero 40 Feb 20 14:44 notes.

el archivo no debería ser de escritura para el grupo propietario).txt [student@station student]$ ls -l total 4 -rw-r--r-1 student student 29 Feb 20 14:52 test_file.txt Observe que los permisos de los archivos recién creados es 644.bashrc # . then . Possible Solution The following sequence of commands provides one possible solution to this exercise.bashrc [student@station student]$ cat . Limpieza Después de haber evaluado este ejercicio.Si quiere que su umask de shell por defecto sea cambiada automáticamente cada vez que inicia una sesión. agregue una línea al final de su archivo ~/. 65 .bashrc. no el permiso por defecto de Red Hat de 664. el cual establece la umask de la shell. pero de escritura únicamente para el usuario propietario por defecto. /etc/bashrc fi umask 022 Al salir e iniciar de nuevo.bashrc que establecezca la umask de shell bash por defecto de tal manera que los archivos sean de lectura para todos pero sólo de escritura para el usuario propietario del archivo (en particular. Deliverables A title Question 1 Un archivo ~/. Los archivos recién creados deberían ser de lectura para todos. usted debería ver el siguiente comportamiento. [student@station student]$ echo "umask 022" >> .bashrc la línea que ha agregado. [student@station student]$ date > test_file.bashrc # User specific aliases and functions # Source global definitions if [ -f /etc/bashrc ]. suprima de su archivo~/.

Esta información se almacena en una estructura llamada inodo. El comando ls -i se puede utilizar para examinar los números de inodo. Luego. Dentro del kernel de Linux. en Linux cada archivo tiene información adicional asociada a éste. data Los datos son el contenido del archivo. lista el contenido del directorio para asegurarse de que esté ahí. Los nombres de archivos se encuentran en estructuras de datos llamadas dentries (del inglés directory entries). los 16 bytes que componen la lista del mercado de elvis (13 caracteres visibles y 3 invisibles de "retorno" que indican el final de la línea). metadatos Además de su contenido. en este caso. nodos de dispositivo y otros. directorios. es decir. En Linux como en Unix. enlaces simbólicos.The Linux FileSystem Detalles de archivo Conceptos clave • • • • • El término archivo se refiere a los archivos regulares. Eggs bacon milk Cuando termina. Discussion Cómo guarda archivos Linux Suponga que elvis abre el editor de texto y hace la siguiente lista de mercado. y cierra el editor. cada contenido de archivo se almacena como una serie de bytes. [elvis@station elvis]$ ls -l total 4 -rw-rw-r-1 elvis elvis 16 Jul 11 07:54 shopping. le preguntan cómo le gustaría llamar al archivo.txt Este corto ejemplo ilustra los tres componentes que Linux asocia con un archivo. La información de un inodo un de archivo se puede examinar con los comandos ls -l y stat. Todo el cuaderno anterior estuvo enfocado en dicha información. Escoge shopping. el 66 . permisos y la información de temporización. Todos los archivos tienen atributos comunes: usuario propietario.txt. grupo propietario. los archivos están generalmente identificados por un número de inodo.

En esencia. Esto incluye archivos regulares y directorios. filename El nombre de archivo es la excepción a la regla. Muchos de estos metadatos son reportados al ejecutar el comando ls -l. El entender las relaciones entre estas estructuras le ayudará a entender más adelnate otros conceptos. En su lugar. que ya hemos visto.propietario de archivo. (el términodentry es un acortamiento para directory entry. En resumen. y un par de criaturas más oscuras 67 . Información. tales como enlaces y directorios. ¿Qué puede encontrar en un inodo? Tipo de archivo En Linux (y UNIX). tal como la última vez que el archivo fue modificado o leído. Aunque el nombre del archivo podría considerarse como metadatos asociados con el archivo. y como veremos más adelante. tiene un inodo asociado con éste) es un archivo. cada archivo existente en el sistema de archivos tiene un inodo asociado. el término archivo tiene un significado muy general: cualquier cosa que exista en el sistema de archivos (y por tanto. el cual almacena toda la información de los archivos. también se almacena. el nombre de archivo asocia un nombre con un inodo. la cual contiene un nombre de archivo y se refiere a un inodo. toda la información adicional asociada al archivo (con la excepción importante que pronto veremos) se almacena en una estructura llamada inodo. enlaces simbólicos y nodos de dispositivos que veremos pronto. el cual contiene los metadatos del archivo y se refiere a datos del archivo. la estructura está asociada a los directorios). el grupo propietario y los permisos. En Linux (Unix). el archivo se almacena en una estructura llamada dentry. hay tres estructuras asociadas con cada archivo: unadentry. a excepción del nombre de archivo. Estas estructuras están resumidas así: Figure 1. Estructuras de archivos ¿Qué hay en un inodo? En Linux (y Unix). éste no se almacena directamente en el inodo.

la tercera. el usuario propietario y la cuarta. cambiado. la primera columna muestra los permisos (y el tipo de archivo). Cuando se utiliza en oraciones tales como "El comando head sólo funciona en archivos. Note El término file está sobrecargado en Linux (Unix) y tiene dos significados. permisos. Cuando tiene que hacerse alguna distinción. a saber chmod. por lo tanto. d l c b p s Uso Almacemiento de datos Organización de archivos Referencia a otros archivos Acceso a dispositivos Acceso a dispositivos Comunicación entre procesos Comunicación entre procesos Cada uno de los siete tipos de archivos mencionados anteriormente utiliza la misma estructura de inodo. un usuario propietario y una serie de permisos de escritura. Información de temporización Cada inodo almacena tres tiempos importantes para el archivo: el atime . Por lo general. Table 2. todos los siete tipos de archivos usan los mismos mecanismos para controlar quién tiene acceso a ellos. el tipo de archivo del archivo es identificado por el primer caracter. etc. y la estructura de inodo es la misma para todos los archivos. Debido a que esta información se almacena en un inodo de archivo. el término archivo se refiere sólo al tipo específico de archivo que contiene datos. Al listar archivos con ls -l. Tiempos de Archivo Abbreviation atime Nombre Tiempo de acceso Propósito Actualiza cada vez que los datos del archivo son leídos 68 . chgrp. modificar tiempos. cada uno tiene los mismos tipos de atributos: propietarios. Los posibles tipos de archivos se presentan en la siguiente tabla. se utiliza el término archivo regular como en "El comando ls -l identifica archivos regulares con un guión (-)". o modificado. el grupo propietario. Propiedades y Permisos Como lo discutimos en el cuaderno anterior. el término se refiere a cualquiera de los tipos de archivo listados en el cuadro anterior. el significado es claro en el contexto. Cuando se utiliza en oraciones tales como "cada archivo tiene un inodo".relacionadas con la comunicación entre procesos y que van más allá del alcance del curso. lectura y ejecución. utilizando las abreviaturas de la segunda columna. Estos tiempos registran la última vez que se tuvo acceso (leído). respectivamente. Table 1. no en directorios". el ctime y el mtime . cada archivo y directorio regular tiene un grupo propietario. y chown. Tipos de archivos Linux (Unix) Tipo de archivo Archivo regular Directorios Enlaces simbólicos Nodos de dispositivos de caracteres Nodos de dispositivos de bloques Tuberías nombradas Sockets ls abbr. Cuando se listan los archivos con ls -l.

¿Qué ocurre con el tiempo de creación? A menudo. la gente confunde el ctime con un "tiempo de creación". Si se encuentra con que su máquina no tiene el comando stat. Por lo general. cuando simplemente se lea un archivo (y. En cambio. por tanto. cambie el atime) el ctime no se actualiza. El comando stat reporta el estatus de un archivo. Por lo general. la longitud del archivo (en bytes) aparecerá en la quinta columna. Sin embargo. Los dos difirencian el bajo nivel de detalles de cómo se almacenan los archivos en el disco. Note El comando stat generalmente no está instalado por defecto en Red Hat Enterprise Linux.. 69 . Ver la información del inodo con el comando stat Red Hat Enterprise Linux incluye el comando stat para examinar en detalle la información del inodo de un archivo. Conteo de enlaces Por último. el Unix tradicional ( y Linux) no registra el tiempo preciso en que el archivo se creó. Aunque parezca raro.. Longitud y tamaño del archivo El inodo registra dos medidas de longitud de un archivo: la longitud de un archivo (el número real de bytes de datos). los archivos regulares sólo tienen un nombre y el conteo de enlace es uno. por tanto. Cuando se listen los archivos con el comandols -l. a una colección de archivos de información de inodo se le denomina estatus del archivo. En la programación de Unix. se dice que el archivo cambia y el ctime del archivo se actualiza. el inodo registra un conteo de enlaces entre archivos o el número de dentries (nombres de archivos) que se refieran al archivo. Al modificar un archivo (y. esto no siempre es el caso. Al listar los archivos con ls -l.ctime mtime Cambia Tiempo Última modificación Actualiza cada vez que la información del inodo de archivo cambia Actualiza cada vez que cambian los datos del archivo ¿Cuál es la diferencia entre cambiar y modificar ? Cuando cambian los datos de un archivo. Cuando la información de inodo de un archivo cambia. cambiar el mtime) el ctime también se actualiza. cuando se listan los archivos con el comando ls -s se reporta el tamaño del archivo (en kilobytes). haga que su instructor le instale el archivo del paquete stat RPM. stat [OPCIÓN] ARCHIVO. el tamaño del archivo aumenta en fragmentos (suele ser 4 kilobytes) a la vez. y el mtime es actualizado. y el tamaño del archivo (la cantidad de espacio de disco que el archivo utiliza). se dice que el archivo es modificado. Algunas personas han identificado la falta de un tiempo de creación como una debilidad en el diseño del sistema de archivos de Unix. mientras que la longitud aumenta byte por byte cada vez que se agrega información al archivo. la segunda columna entrega el conteo de enlaces. Muestra la información sobre el estatus del archivo (o el sistema de archivos).

esta vez para discutir algunas de las opciones importantes para mostrar la información del inodo. Aparentemente. Muestra la información sobre el sistema de archivos al que el archivo pertenece. El número de bloques del sistema de archivos que el archivo consume. como se explicó anteriormente.. lista el contenido de un directorio. archivo/usr/games/fortune.. vea la página del manual stat (1).Opción -c. El conteo de enlaces o número de nombres de archivo que se enlazan a este inodo (no se preocupe si no entiende esto aún). o si es un directorio. mtime.. Ver la información del inodo con el comandols Cuando el comando stat es conveniente para listar la información del inodo de archivos individuales.000000000 -0400 Modify: 2002-08-22 04:14:02. --directorio Efecto Incluye archivos que empiezan con . --format=FORMAT -f. lista información acerca del directorio mismo y no sobre el contenido del directorio. el comando stat está usando un tamaño de bloque de 2 kilobytes.. --filesystem -t.000000000 -0400 Change: 2002-09-11 11:38:09. Lista los archivos FILE .. 70 . [madonna@station madonna]$ stat /usr/games/fortune File: `/usr/games/fortune' Size: 17795 Blocks: 40 IO Block: 4096 Regular File Device: 303h/771d Inode: 540564 Links: 1 Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2003-07-09 02:36:41. ls [OPCIÓN.] ARCHIVO. en este caso. --all -d. en lugar del archivo. sino en la dentry. y ctime para el archivo. De modo poco práctico para la terminología presentada anteriormente. Los atime. Esta es la información que no está realmente almacenada en el inodo. Muestra salida en formato terso (una línea) madonna examina la información del inodo en el En el siguiente ejemplo. el comando stat etiqueta la longitud de un "tamaño" de un archivo.. un archivo regular. el grupo propietario y los permisos. Para mayor información. Opción -a. el comando ls suele hacer un mejor trabajo resumiendo la información para varios archivos.. Si ARCHIVO es un directorio. --terse Efecto Sólo muestra la información solicitada usando el formato especificado. Volveremos a ver el comando ls. [1] El tipo de archivo.000000000 -0400 El nombre del archivo. El usuario propietario del archivo.

Lista el número de índice de cada inodo de archivo. a cada inodo se le asigna un número único de inodo.. Los diferentes elementos que ls -l reporta se discuten en detalle. Identificación de archivos por inodo Mientras que la gente tiende a usar nombres de archivos para identificar archivos. madonna toma un listado largo de todos los archivos en el directorio /usr/games.) El propietario del archivo. --recursivo --time=WORD -t Agrega al nombre de archivos alguno de estos *. "access".-F. --leíble por humanos -i.. El tipo de archivo y los permisos del archivo. Clasifica por tiempo de modificación. --numeric-uidgid -r.. El grupo propietario del archivo. El conteo de enlaces del archivo o el número total de dentries (nombres de archivos) que se refieren a este archivo (observe que. ummm. "ctime" o "estatus". --reverse -R. WORD puede ser "atime". En el siguiente ejemplo. --clasificar -h. --inodo -l -n.. Invierte el orden de la clasificación. Reporta (o clasifica) tiempo especificado por WORD en lugar de mtime.. La longitud del archivo en bytes (observe que los directorios tienen una longitud también y que la longitud parece aumentar en bloques. Usa abreviaturas "leíbles por humanos"cuando reporta la longitud de archivos. =. para los directorios. El número inodo de un archivo se puede listar con la opción -i para el comando ls. Lista subdirectorios de modo recursivo. 71 . [madonna@station madonna]$ ls -l /usr/games/ total 28 drwxr-xr-x 3 root root 4096 Jan 29 09:40 chromium -rwxr-xr-x 1 root root 17795 Aug 22 2002 fortune dr-xrwxr-x 3 root games 4096 Apr 1 11:49 Maelstrom El número total de bloques que los archivos utilizan en el directorio (observe que esto no incluye subdirectorios). Dentro de un sistema de archivos. el kernel de Linux suele usar el inodo directamente. éste es siempre mayor que ¡1! ummm. Usa formato de listado largo Usa UIDs y GIDs numéricos en vez de nombres de usuario y nombres de grupo.) El mtime del archivo o la última vez que se modificó el archivo. /. @ ó | para indicar el tipo de archivo.

Luego. el comando ls reporta el tamaño del archivo en kilobytes. que todos los tamaños son divisibles por cuatro. el archivo ash ocupará 96 Kbytes de espacio en el disco. elvis examina la información del directorio mediante el comando ls -l. Por último. las longitudes de los archivos se reportan en bytes. En la salida (abreviada). la longitud es reportada como 92444 bytes. Tenga en cuenta que el archivo awk parece no estar ocupando ningún espacio. Resuelve su problema agregando la opción -d. el directorio chromium tiene un número inodo de 540838. Esto es razonable porque redondeando a los próximos 4 Kilobytes. Por ejemplo. cuando ejecuta ls -l /bin. Aparentemente. [elvis@station elvis]$ ls -l /bin total 4860 -rwxr-xr-x 1 root root -rwxr-xr-x 1 root root -rwxr-xr-x 1 root root -rwxr-xr-x 1 root root lrwxrwxrwx 1 root root . Volviendo a mirar en el archivo ash. Ejemplos Comparar tamaños de archivo con ls -s y ls -l El usuario elvis está examinando los tamaños de los archivos ejecutables en el directorio /bin. Observe otra vez el archivo awk.. el espacio de disco asigna espacio de disco a los archivos en fragmentos de 4 Kbytes. [elvis@station elvis]$ ls -ld /bin drwxr-xr-x 2 root root 4096 Jul 8 09:29 /bin Esta vez. 72 .. Primero ejecuta el comando ls -s. obtenemos los 96 Kbytes reportados por el comando ls -s. elvis quiere saber acerca de los permisos en el directorio /bin. El archivo no es un archivo regular. Los enlaces simbólicos se verán en más detalle próximamente..static Jan 24 16:47 aumix-minimal Apr 1 11:11 awk -> gawk Luego para cada nombre de archivo. 20 72 72 20 20 login ls mail mkdir mknod 92 32 20 0 16 sed setfont setserial sh sleep En este ejemplo.static 12 echo 12 aumix-minimal 44 ed 0 awk 4 egrep . no del directorio mismo. obtiene una lista de contenido del directorio /bin. Sin embargo. lo que explica el porqué no estaba consumiendo espacio. cuando se almacena un archivo en el disco. 2644 92444 492968 10456 4 Feb 24 19:11 arch Feb 6 10:20 ash Feb 6 10:20 ash.. Un archivo se puede identificar de manera única si se conoce su sistema de archivos y el número de inodo. (esto se denomina un "tamaño de bloque" del sistema de archivos).[elvis@station elvis]$ ls -s /bin total 4860 4 arch 0 domainname 96 ash 56 dumpkeys 488 ash. sino un enlace simbólico.

log Ahora elvis puede leer fácilmente los archivos cron. prince repite el comando. prince rápidamente se cansa de revisar los archivos recientes.1 boot.0.1 cron. prince]$ ls -l /var/log root root root root root servlet root root root root root root root root servlet root root root 20847 45034 29116 18785 15171 4096 57443 62023 74850 Jul Jul Jun Jun Jun Jan Jul Jul Jun 12 6 29 22 15 20 12 6 29 2002 2002 2002 2002 2002 2002 2002 2002 2002 boot. Decide dejarle este trabajo dispendioso al comando ls.log. agregándole la opción -r.[madonna@station madonna]$ ls -iF /usr/games/ 540838 chromium/ 540564 fortune* 312180 Maelstrom/ Listar archivos. especificando que la salida se debería ordenar por mtime con la opción -t..4 ccm-core-cms cron cron. maillog y messages como los archivos modificados más recientemente. [prince@station total 16296 -rw------1 -rw------1 -rw------1 -rw------1 -rw------1 drwxr-xr-x 2 -rw------1 -rw------1 -rw------1 . ordenados de acuerdo con la última modificación El usuario prince está explorando los archivos de registro del sistema en el directorio /var/log. [prince@station total 16296 -rw------1 -rw------1 -rw------1 -rw-rw-r-1 -rw-r--r-1 -rw-r--r-1 ... por eso quiere saber cuáles archivos han sido accedidos recientemente..3 boot.log.log. Le interesa saber acerca de la actividad reciente en el sistema.log boot..2 Con 74 archivos para examinar.log. 73 . Interesado en saber cuáles archivos de registro no se están utilizando. prince]$ ls -lt /var/log root root root root root root root root root utmp root root 57443 2536558 956853 622464 22000 38037 Jul Jul Jul Jul Jul Jul 12 12 12 12 12 12 2002 2002 2002 2002 2002 2002 cron maillog messages wtmp rpmpkgs xorg.2 boot. Hace un listado largo del directorio y comienza a examinar las últimas modificaciones reportadas de los archivos.

log vsftpd.log xorg.1.4 Representar listados con ls -F La usuaria blondie está explorando el directorio /etc/X11.log.conf.setup.old ccm-core-cms vbox pgsql samba xorg.backup xkb desktop-menus proxymngr twm xorg.wbx gdm/ sysconfig/ xorg. Agrega la opción -F para representar la salida.conf. Ejercicios en línea Ver los metadatos de un archivo Lab Exercise Objetivo: Listar archivos de acuerdo con la última modificación Tiempo estimado: 5 minutos.1.works lbxproxy/ twm/ XftConfig..log.backup fs/ starthere/ xorg. tiene dificultad para distinguir entre un archivo regular y un directorio.conf.README-OBSOLETE prefdm* X@ xinit/ proxymngr/ xdm/ xkb@ Xmodmap Xresources xserver/ xsm/ Ahora. [blondie@station blondie]$ ls -F /etc/X11/ applnk/ rstart/ xorg.conf xinit xsm Dado que ella no tiene una terminal en color.wbx Xmodmap fs rstart X xorg.conf.conf. y los archivos regulares con permisos ejecutables (lo que implica que son comandos que se deben ejecutar) terminan en un *. los diversos archivos se representan por tipo.conf. Especificaciones 74 . los enlaces simbólicos en un @.README-OBSOLETE xserver lbxproxy starthere xorg. [blondie@station blondie]$ ls /etc/X11/ applnk prefdm sysconfig xorg.works Xresources gdm serverconfig xdm XftConfig.[prince@station total 16296 -rw-r--r-1 drwxr-xr-x 2 drwxr-xr-x 2 -rwx-----1 drwx-----2 -rw-r--r-1 -rw-r--r-1 -rw------1 . prince]$ ls -ltr /var/log root servlet root postgres root root root root root servlet root postgres root root root root 32589 4096 4096 0 4096 42053 1371 0 Oct 23 Jan 20 Feb 3 Apr 1 Apr 5 May 7 May 9 Jun 9 2001 2002 2002 2002 2002 2002 2002 2002 xorg.. Los directorios terminan en un /.conf desktop-menus/ serverconfig/ xorg.

3. con el último archivo más reciéntemente modificado.bytime deberían verse de la siguiente manera. directorio /etc. El archivo debe contener un listado largo del directorio /etc. Cree un archivo en su directorio de inicio llamado etc.conf yp. ordenado de acuerdo con la última modificación. (observe que está pidiendo el inodo del directorio mismo). Cree un archivo llamado etc. El archivo modificado más reciéntemente debería estar en la última línea de la lista del archivo.bytime. ordenado a la inversa de acuerdo con la última modificación. con el primer archivo modificado más recientemente en primer lugar. 3. Un archivo llamado etc. en primer lugar.inum que contenga el número de inodo del directorio /etc como su único símbolo. Cree un archivo en su directorio de inicio llamado etc.bytime.save lvmtab lvmtab. ordenado de acuerdo con la última modificación.reversed. Deliverables A title Question 1 1. ordenado de acuerdo con la última modificación. Un archivo llamado etc.1.reversed que contiene un listado largo de todos los archivos en el directorio /etc. El archivo modificado más reciéntemente debería estar en la primera línea del archivo. Un archivo llamado etc. Final del formulario Sugerencias Las primeras líneas del archivo etc.bytime que contiene un listado largo de todos los archivos en el 2. listado largo del directorio /etc.inum que contiene el número de inodo del archivo del directorio de archivo /etc como su único símbolo.conf ioctl. aunque los detalles (tal como la última modificación) pueden diferir.bytime. total 2716 -rw-r--r--rw-r--r--rw-r-----rw-rw-r--rw-r--r--rw-------rw-r----drwxr-xr-x -rw-r--r-content_view let_ 1 1 1 2 1 1 1 2 1 root root root root root root root root root root root smmsp root root root root root root 258 699 12288 107 28 60 1 4096 46 May May May May May May May May May 21 21 21 21 21 21 21 21 21 09:27 09:13 09:10 09:10 09:10 09:10 09:10 09:10 08:55 mtab printcap aliases.d adjtime 75 . El archivo debe contener un 2.db resolv.

txt está editando también el archivo /home/blondie/music/duet. el cual es grupo propietario con permiso de escritura de los miembros del grupo music.txt [blondie@station blondie]$ cat music/duet.txt [blondie@station blondie]$ ln music/duet.txt. Un método es crear un enlace duro. Los enlaces blandos son inodos distintos que hacen referencia a otros nombres de archivos.txt Debido a que el archivo fue enlazado y no copiado. En lugar de copiar un archivo actualizado de cada uno. cada vez que hacen un cambio y mantener sus copias individuales sincronizadas. Luego crea el archivo ~/music/duet.txt.txt Knock knock who's there? Detalles de enlaces duros ¿Cómo se implementan los enlaces duros? Cuando se crea el archivo /home/blondie/music/duet. Cuando elvis edita /home/elvis/music/duet.Enlaces duros y blandos Conceptos clave • • • El comando ln crea dos tipos distintos de enlaces. los usuarios de Linux quieren que el mismo archivo exista en dos lugares diferentes o que tengan dos nombres diferentes. como se ilustra a continuación. 76 . Suponga que elvis y blondie están colaborando en un dueto. ejecuta chgrp al grupo music y usa el comando lnpara enlazar el archivo en el directorio de elvis.txt [blondie@station blondie]$ chgrp music music/duet. Los enlaces duros asignan múltiples dentries (nombres de archivos) a un inodo único. deciden crear un enlace duro. Ella hace que elvis haga lo mismo.txt /home/elvis/music/duet. inodo y datos. Blondie ha establecido un directorio de colaboración llamado ~/music.txt. Discussion El caso de enlaces duros En ocasiones. es el mismo archivo bajo dos nombres. A ellos les gustaría poder trabajar en la letra de las canciones si el tiempo les permite y poder beneficiarse del trabajo uno del otro. [elvis@station elvis]$ echo "who's there?" >> music/duet. consta de dentry. [blondie@station blondie]$ ls -ld music/ drwxrwxr-x 2 blondie music 4096 Jul 13 05:45 music/ [blondie@station blondie]$ echo "Knock knock" > music/duet.

dos dentries hacen referencia al inodo y el archivo tiene un conteo de enlace 2. ¿qué sucede al archivo /home/elvis/music/ duet. Enlace duro Cuando blondie ejecuta el comando ls -l. [blondie@station blondie]$ ls -l music/duet. pero ahora hay dos dentries refiriéndose a éste. el archivo es todavía un sólo inodo.txt 77 . la cual reporta el conteo de enlace para el archivo.txt Hasta ahora. no hemos prestado atención al conteo de enlaces y casi siempre ha sido 1 para archivos regulares (implicando una dentry que hace referencia a un inodo). ahora. Figure 2. Archivo regular Después de usar el comando ln para crear el enlace. examina detenidamente en la segunda columna.txt? [blondie@station blondie]$ chmod o-r music/duet.Figure 1.txt. Si blondie cambia los permisos en el archivo /home/blondie/music/duet.txt -rw-rw-r-2 blondie music 25 Jul 13 06:08 music/duet. Sin embargo.

Enlace duro despues de suprimir la mitad ¿Cómo esperaría que fuera ahora el conteo de enlaces del archivo /home/elvis/music/duet. pero con una dentry menos que hace referencia a éste.txt aún existe.txt -rw-rw---2 blondie music 25 Jul 13 06:08 music/duet. En un nivel bajo. Aunque de modo superficial son similares. sino que lo "desenlaza". una para cada día de la semana.txt? [elvis@station elvis]$ ls -l music/duet. La usuaria madonna es muy organizada y ha agrupado sus tareas en siete listas. 78 .[elvis@station elvis]$ ls -l music/duet.txt -rw-rw---1 blondie music 25 Jul 13 06:08 music/duet.txt Puesto que ambas partes del enlace comparten el mismo inodo.txt Un poco incómodo. los enlaces blandos se implementan de una manera muy diferente a la de los enlaces duros. aún es un archivo válido. el comando rm no borra un archivo.txt? El inodo /home/elvis/music/duet.txt Figure 3. elvis se ha quedado con un archivo de blondie. elvis también ve los permisos cambiados. [blondie@station blondie]$ rm music/duet. el inodo de archivo y los datos) se borran automáticamente desde el sistema cuando su conteo de enlace va hasta 0 (lo que implica que no hay más dentries (nombres de archivo) haciendo referencia al archivo). no obstante. El caso de los enlaces blandos Al otro método para asignar dos nombres a un archivo único se le denomina un enlace blando. Un archivo (es decir. ¿Qué sucede si blondie suprime /home/blondie/music/duet.

un inodo.txt. usa el mismo comando ln utilizado para crear enlaces duros.todo today. pero agrega la opción de línea de comando -s para especificar el enlace blando. y datos.todo -rw-rw-r-1 madonna madonna 37 -rw-rw-r-1 madonna madonna 6587 wednesday. el archivotuesday.todo sunday.todo thursday.todo monday. pero nota que le cuesta trabajo recordar qué día de la semana es hoy.txt fue creado. Afortunadamente.todo wednesday.todo.todo. [madonna@station todo]$ cat today. como se ilustra en la parte de abajo.todo.todo monday.todo implica el enlace blando denominado today. igual que la mayoría de archivos.todo -> Jul 14 09:54 tuesday.todo feed cat take out trash water plants Detalles de los enlaces blandos ¿Cómo se implementan los enlaces blandos? Al ser creado. sino un "l". estará en realidad examinando el archivotuesday.todo saturday. también denominado enlace "blando".todo thursday.todo Consulta la lista varias veces al día.todo Examine de cerca el tipo de archivo (el primer caracter de cada línea en el comando ls -l) del archivo recién creado today. es un archivo que hace referencia a otro archivo por nombre de archivo.todo Jul 14 09:55 wednesday. consta de una dentry. ni un directorio ("d"). Ahora. Cuando el enlace blando today. Este no es un archivo regular ("-").todo sunday. [madonna@station todo]$ ls friday.todo today.todo sunday.todo hace referencia al archivo tuesday. Los enlaces blandos son similares a alias encontrados en otros sistemas operativos.todo que se actualice cada mañana. Debido a que hoy es martes (Tuesday en inglés). el enlace blando (a diferencia del enlace duro) es en 79 . Un enlace simbólico.todo monday.todo -> tuesday.todo saturday.[madonna@station madonna]$ ls todo/ friday.todo. donde today. cada vez que madonna haga referencia al archivo today.todo thursday.todo Jul Jul Jul Jul Jul Jul 14 14 14 14 14 14 09:54 09:54 09:54 09:54 09:54 09:55 friday.todo tuesday.todo feed cat take out trash water plants [madonna@station todo]$ cat tuesday.todo [madonna@station todo]$ ln -s tuesday.todo saturday.todo tuesday.todo [madonna@station todo]$ ls -l total 32 -rw-rw-r-1 madonna madonna 138 -rw-rw-r-1 madonna madonna 29 -rw-rw-r-1 madonna madonna 579 -rw-rw-r-1 madonna madonna 252 -rw-rw-r-1 madonna madonna 519 lrwxrwxrwx 1 madonna madonna 12 tuesday. Decide utilizar un enlace blando en su lugar. indicando un enlace simbólico. el comando ls -l también muestra a qué archivo el enlace blando hace referencia. Preferiría tener un archivo único llamado today.

Figure 1. [DIRECTORIO] Crea enlace(s) para el (los)archivo(s) DESTINO en el directorio DIRECTORIO. Cuando se le pide al kernel de Linux referirse a los enlaces simbólicos.". Enlaces blandos Creación de enlaces con el comando ln Como se ilustró anteriormente. tanto los enlaces duros como los blandos se crean con el comando ln. A diferencia del comando cp.. el comando ln espera primero el nombre del (los) archivo(s) original(es) y el nombre del último enlace.. ln [OPCIÓN. --symbolic Efecto sobrescribir archivos de destino existentes hacer un enlace simbólico (blando) en lugar de un enlace duro El comando ln se comporta de un modo similar al comando cp: si el último argumento es un directorio. --force -s. sino un enlace simbólico. ln [OPCIÓN. el kernel automáticamente apunta al enlace buscando el nuevo nombre de archivo... Invertir 80 .] DESTINO. si sólo se da un argumento.. Los enlaces simbólicos. almacenan el nombre de otro archivo. el comando crea enlaces en el directorio especificado que refieren a los argumentos anteriores (y se nombran de un modo idéntico). en lugar de almacenar datos reales. con un inodo recién creado. El usuario (o en realidad. Opción -f. Al especificar enlaces.realidad un archivo nuevo. el comando ln asumirá un último argumento de "..] DESTINO [ENLACE] Crea el enlace que hace referencia al archivo DESTINO. Sin embargo. el enlace no es un archivo regular. el proceso en nombre del usuario) que hizo referencia al enlace simbólico no conoce la diferencia.

hide [madonna@station todo]$ ls -l total 32 -rw-rw-r-1 madonna madonna 138 May 14 09:54 -rw-rw-r-1 madonna madonna 29 May 14 09:54 -rw-rw-r-1 madonna madonna 579 May 14 09:54 -rw-rw-r-1 madonna madonna 252 May 14 09:54 -rw-rw-r-1 madonna madonna 519 May 14 09:54 lrwxrwxrwx 1 madonna madonna 12 May 14 09:55 tuesday.todo. Enlaces colgantes 81 . El primero se llama enlaces colgantes.todo thursday. madonna crea el archivo orig.txt Problemas con enlaces blandos Enlaces colgantes Los enlaces blandos son susceptibles a un par de problemas que los enlaces duros no tienen. En el siguiente ejemplo corto.todo today. encuentra un error. pero obtiene el orden de los argumentos incorrectamente.txt [madonna@station madonna]$ ln newlnk.el orden primero no genera los resultados esperados.todo.todo monday.txt. pero el archivo tuesday.todo tuesday.todo ¡ya no existe! Cuando madonna trata de leer el contenido de today.txt ln: accessing `newlnk.todo saturday.todo El enlace simbólico today.todo? [madonna@station todo]$ mv tuesday. Dándose cuenta del error. ¿Qué sucede si madonna renombra o suprime el archivo tuesday.txt. Luego trata de hacer un enlace duro para éste llamado newlnk. Figure 1.todo sunday.hide wednesday.txt': No such file or directory [madonna@station madonna]$ ln orig. cuando tenga alguna duda.todo -rw-rw-r-1 madonna madonna 37 May 14 10:22 -rw-rw-r-1 madonna madonna 6587 May 14 09:55 [madonna@station todo]$ cat today.todo cat: today.todo aún hace referencia al archivo tuesday. recuerde la conducta del comandocp.Otra vez. corrige el problema.txt orig.todo -> tuesday.txt newlnk. [madonna@station madonna]$ date > orig.todo: No such file or directory friday.

los enlaces recursivos no son tan comunes como los enlaces colgantes. link_a. Enlaces recursivos Cuando madonna trata de leer el archivo link_a. el cual hace referencia al archivo link_a. ¿Qué sucede si alguien tiene que estar buscándolos para crearlos? ¿Qué ocurre si madonna crea dos enlaces simbólicos.Enlaces recursivos En segundo lugar. como se ilustra a continuación? [madonna@station madonna]$ ln -s link_a link_b [madonna@station madonna]$ ln -s link_b link_a [madonna@station madonna]$ ls -l total 0 lrwxrwxrwx 1 madonna madonna 6 Jul 14 10:41 link_a -> link_b lrwxrwxrwx 1 madonna madonna 6 Jul 14 10:41 link_b -> link_a Figure 1. el kernel solo 82 . Afortunadamente. el kernel apunta al enlace _a para enlazar_b. ylink_b. En el uso diario. y alguien casi que tiene que buscarlos para poder crearlos. que hagan referencia a un archivo llamado link_b. los enlaces simbólicos son susceptibles a los enlaces recursivos. el cual luego vuelve a apuntar al enlace _a y así sucesivamente.

los enlaces duros son más apropiados si ambas instancias del enlace tienen un uso razonable. Algunas veces. nunca van a ser reubicados la opción no importa. Table 1. no endurecen ni agilizan las reglas. sin embargo. No se preocupe si no entiende los dos últimos puntos. enlaces relativos blandos Al crear enlaces blandos. elvis podría continuar trabajando razonablemente sin el otro archivo. Normalmente. En el ejemplo anterior. y desiste. Los enlaces blandos pueden no referirse a archivos externos de un directorio con "chroot". Comparar enlaces duros y blandos Enlaces duros Los directorios pueden no tener enlaces duros. Una vez se ha creado un enlace duro. incluso si blondie decidiera no trabajar en el dueto y removiera el archivo. [madonna@station madonna]$ cat link_a cat: link_a: Too many levels of symbolic links Enlaces relativos vs. Enlaces blandos Los enlaces blandos pueden hacer referencia a directorios. incluso si la otra instancia no existiera. Si el enlace blando y su destino. los usuarios a menudo no pueden prever cómo se van a utilizar en el futuro los archivos que crean. A continuación. Los enlaces duros no tienen un concepto de "original" y "copia". Los enlaces duros se pueden compartir entre directorios con "chroot". todas las instancias se tratan igual. los enlaces relativos son más resistentes a cambios inesperados.apuntará a un enlace muchas veces antes de sospechar de que se encuentra en un enlace recursivo. Los enlaces duros deben hacer referencia a archivos en el mismo sistema de archivos. Estos lineamientos generales. Los enlaces blandos tienen un concepto de "referencia" y "referido". restricciones más prácticas escogen de una manera más fácil entre enlaces duros y blandos. Sin embargo. Los enlaces blandos pueden abarcar archivos del sistema (particiones). los usuarios pueden elegir entre especificar el enlace del destino mediante una referencia relativa o absoluta. 83 . En el ejemplo anterior. se muestran algunas diferencias entre los enlaces duros y blandos. madonna no hubiera podido tener tareas para "today" si no hubiera tenido para "tuesday". estos se mencionan aquí para completar la información proveída. Al suprimir archivos "referidos" se crea una referencia colgante. Comparar enlaces duros y blandos ¿Cuándo debería utilizarse un enlace blando y cuándo un enlace duro? Generalmente.

Puesto que cada inodo en un sistema de archivos tiene un número único de inodos. cuando se lleve el rastro de archivos internamente. De hecho. los permisos en hard_link también cambiarán. observe que el número de inodos tanto para rhyme como para hard_link es 246085. blondie tiene un archivo llamado rhyme y un directorio llamado stuff. [blondie@station blondie]$ chmod 660 rhyme [blondie@station blondie]$ ls -li 246085 -rw-rw---2 blondie blondie 51 246085 -rw-rw---2 blondie blondie 51 542526 drwxrwxr-x 2 blondie blondie 4096 [blondie@station blondie]$ echo "Hickory. aunque hay dos nombres para el archivo (dos dentries) hay un sólo inodo. donde la opción -i hace que el comandols imprima el número de inodos de cada archivo como la primera columna de la salida. Dock. el número de inodos que se puede utilizar para identificar un archivo. [blondie@station blondie]$ ln rhyme hard_link [blondie@station blondie]$ ls -li 246085 -rw-rw-r-2 blondie blondie 51 Jul 18 15:29 hard_link 246085 -rw-rw-r-2 blondie blondie 51 Jul 18 15:29 rhyme 542526 drwxrwxr-x 2 blondie blondie 4096 Jul 18 15:34 stuff El conteo de enlaces para rhyme ahora es 2. el kernel suele referirse al archivo más por el número de inodo que por nombre de archivo. también comparten los mismos datos. Dickory. Ella hace un listado largo con el comando ls -li." >> hard_link 84 . Jul 18 15:29 hard_link Jul 18 15:29 rhyme Jul 18 15:34 stuff Dock.Ejemplos Trabajar con enlaces duros En su directorio de inicio. [blondie@station blondie]$ ls -il total 8 246085 -rw-rw-r-1 blondie blondie 542526 drwxrwxr-x 2 blondie blondie 51 Jul 18 15:29 rhyme 4096 Jul 18 15:34 stuff Ella crea un enlace duro en el archivo rhyme y ve el contenido del directorio una vez más. ¿Por qué? los dos nombres de archivo se refieren al mismo inodo. lo que implica que. Puesto que el inodo hace referencia al contenido de un archivo. Dickory. Three mice ran up a clock. [blondie@station blondie]$ echo "Three mice ran up [blondie@station blondie]$ cat rhyme Hickory." > rhyme a clock. Además. Si cambiamos los permisos en rhyme.

Cuando se hace referencia. [blondie@station blondie]$ echo "Hickory.Mover o incluso suprimir el archivo original no tiene efecto en el archivo de enlace. A diferencia del enlace duro. 85 . Comienza con una configuración idéntica a la del ejemplo anterior." >> soft_link [blondie@station blondie]$ cat rhyme Hickory. pero utiliza un enlace blando en lugar de uno duro./stuff: total 4 246085 -rw-rw---- 51 Jul 18 15:29 hard_link 4096 Jul 18 15:38 stuff 2 blondie blondie 51 Jul 18 15:29 rhyme Trabajar con enlaces blandos La usuaria blondie ahora repite el mismo ejercicio. [blondie@station blondie]$ ls -li total 8 246085 -rw-rw-r-1 blondie blondie 542526 drwxrwxr-x 2 blondie blondie 29 Jul 18 15:25 rhyme 4096 Jul 18 15:25 stuff Ahora crea un enlace blando en el archivo rhyme y ve el contenido del directorio otra vez." > rhyme [blondie@station blondie]$ echo "Three mice ran up a clock.: total 8 246085 -rw-rw---2 blondie blondie 542526 drwxrwxr-x 2 blondie blondie . [blondie@station blondie]$ mv rhyme stuff [blondie@station blondie]$ ls -Rli . el enlace blando existe como un inodo distinto (con un número de inodo distinto) y el conteo de enlaces de cada uno de los archivos permanece en 1. blondie queda con el enlace colgante. Dock. los archivos se comportan de una manera idéntica al caso de los enlaces duros. Dock. Dickory. Lo que implica que ahora hay dos dentries y dos inodos. sin embargo. [blondie@station blondie]$ ln -s rhyme soft_link [blondie@station blondie]$ ls -li total 8 246085 -rw-rw-r-1 blondie blondie 29 Jul 18 15:25 rhyme 250186 lrwxrwxrwx 1 blondie blondie 5 Jul 18 15:26 soft_link -> rhyme 542526 drwxrwxr-x 2 blondie blondie 4096 Jul 18 15:25 stuff A diferencia del enlace duro del ejemplo anterior. Three mice ran up a clock. Dickory. el enlace blando no puede sobrevivir si se mueve o suprime el archivo original. En cambio.

3. Cree un enlace duro para el archivo cal. 4.orig de tal manera que el enlace blando que acaba de crear sea ahora un enlace colgante. usando una referencia relativa.[blondie@station blondie]$ ls -liR . texto del mes actual (como el comando cal lo produce). 6. 1. [einstein@station einstein]$ ln -s /usr/share/doc docs [einstein@station einstein]$ ls -il 10513 lrwxrwxrwx 1 einstein einstein 14 Mar 18 20:31 docs -> /usr/share/doc 10512 -rw-rw---2 einstein einstein 949 Mar 18 20:10 hard_link 55326 drwxrwxr-x 2 einstein einstein 1024 Mar 18 20:28 stuff El usuario einstein ahora puede fácilmente cambiarse a los documentos del directorio sin tener que recordar o teclear la ruta absoluta larga. Crear un archivo llamado cal. (observe que. Cree un enlace blando para el directorio /usr/share/doc llamado docabs mediante una referencia absoluta. 86 . desde el archivo siguiente.orig en su directorio de inicio que contenga un calendario de 2.. Cree un enlace blando para el directorio . Ejercicios en línea Crear y administrar listas Lab Exercise Objetivo: Crear y administrar enlaces duros y blandosEstimated Time: 10 mins. dependiendo de la ubicación de su directorio de inicio.orig llamadocal.harda Cree un enlace duro para el archivo cal.orig llamado cal.. usted podría necesitar agregar o suprimir algunas referencias . Incluya suficientes para que el enlace blando sea una verdadera referencia relativa para el directorio /usr/share/doc). Especificaciones Todos los archivos se deben crear en su directorio de inicio. 7.softa Suprima el archivo cal.orig llamadocal. Los enlaces duros sólo se pueden utilizar con archivos ordinarios./. 5./usr/share/doc llamado docrel.: total 4 250186 lrwxrwxrwx 1 blondie blondie 542526 drwxrwxr-x 2 blondie blondie ../stuff: total 4 246085 -rw-rw-r-1 blondie blondie [blondie@station blondie]$ cat soft_link cat: soft_link: No such file or directory 5 Jul 18 15:26 soft_link -> rhyme 4096 Jul 18 15:31 stuff 51 Jul 18 15:29 rhyme Trabajar con enlaces blandos y directorios Los enlaces blandos también son útiles como punteros en directorios.hardb Cree un enlace blando para el archivo cal.

Especificaciones Usted desearía crear un archivo de enlace duro que le permita compartir con otro usuario. el cual es un enlace blando para el directorio /usr/share/doc. 2. Como su primer usuario alterno. 4. drwxrwxrwt 28 root root 4096 Jul 21 10:12 . Un archivo llamado docabs.harda. cree un enlace duro para el archivo /tmp/student/novel. Un archivo llamado docrel. usando una referencia absoluta.lnk. crea un subdirectorio /tmp llamado como su nombre de cuenta.orig docabs -> /usr/share/doc docrel -> Deliverables A title Question 1 1. 4. Ahora inicie sesión (o ejecute su -) en su primera cuenta alterna. 5. como por ejemplo /tmp/student. Compartir un archivo de enlace duro Objetivo: Compartir un archivo de enlace duro entre dos usuarios.hardb que sea un enlace duro para el siguiente archivo. llamado /tmp/student_a/novel. -rw-rw-r-1 student student 18 Jul 21 10:13 novel.txt [student@station student]$ ls -al /tmp/student/ total 12 drwxrwxr-x 2 student student 4096 Jul 21 10:13 . [student@station student]$ ls -l total 12 -rw-rw-r-2 student student -rw-rw-r-2 student student lrwxrwxrwx 1 student student lrwxrwxrwx 1 student student lrwxrwxrwx 1 student student ." > /tmp/student/novel. en su directorio recien creado. Todavía como su usuario primario. donde student es remplazado por su nombre de usuario.txt 3.txt que contenga el texto "Once upon a time. Como usuario primario.Si ha terminado el ejercicio correctamente." [student@station student]$ mkdir /tmp/student [student@station student]$ echo "Once Upon a Time. 1./..txt.orig. el cual se llama como su cuenta alterna tal como /tmp/student_a. usando una referencia relativa. el cual es un enlace blando para el directorio /usr/share/doc.harda cal. cree un archivo llamado /tmp/student/novel. Un archivo llamado cal. el cual es un enlace blando colgante para el archivo no existente cal./usr/share/doc 138 138 8 14 19 Jul Jul Jul Jul Jul 21 21 21 21 21 10:03 10:03 10:03 10:03 10:03 cal. 2. debería poder reproducir una salida similar a la siguiente.. Un archivo llamado cal. 3.softa -> cal..Cree un directorio en /tmp.hardb cal. Trate de editar el 87 . Un archivo llamado cal.softa.

¿Por qué tuvo problemas? ¿Puede modificar las propiedades o permisos del archivo novel.txt.". donde student_a es remplazado por el nombre de su primera cuenta alterna. El archivo debe tener propiedades y permisos apropiados para que éste pueda ser modificado por su primera cuenta alterna. donde student es remplazado por el nombre de usuario primario.archivo cambiando la línea desde "Once upon a time.lnk.txt.lnk? ¿Por qué sí o por qué no? content_view let_ 5. de propiedad de su usuario primario. El archivo debería contener sólo el texto "It was a dark and stormy night. 6.". Un archivo llamado /tmp/student/novel. Un archivo llamado /tmp/student_a/novel. hasta "It was a dark and stormy night. 88 . El archivo debería ser un enlace duro para el archivo /tmp/student/novel.".

el directorio ".y ". Cada directorio en realidad contiene entradas denominadas . [prince@station prince]$ ls -iaR report report: 592253 . 592255 html 592254 text report/html: 592255 . 592255 . Los nombres de archivos están en unas estructuras de datos llamadas entradas de directorio (dentries). Ahora veremos cómo se relacionan estas estructuras con los directorios. La meta información de un archivo se puede examinar con los comandos ls -l y stat. dentries que asocian nombres de archivos con inodos e inodos. y. no se visualizan a no ser que se especifique el comando -a. Todos los archivos tienen atributos comunes: usuario propietario. 249482 . nodos de dispositivo y otros. El usuario prince está usando un directorio llamado report para administrar archivos de un informe que está escribiendo. junto con su número de inodos. directorios.txt 592258 chap2. incluyendo los que comienzan por un "..". 89 .") y el comando -i (el cual especifica listar el número de inodos de un archivo así como el nombre del archivo).html 592263 figures Observe que los archivos (directorios) "... enlaces simbólicos. De modo recursivo lista el directorio report.").. que asocian todos los atributos de un archivo con su contexto. grupo propietario. La meta información de un archivo se encuentra en una estructura de datos llamada inodos."están incluídos en la salida.."se refiere al directorio padre. 592261 chap1. Como se mencionó en un cuaderno anterior.png 592257 chap1. 592253 ."se refiere al directorio mismo y el directorio ". incluyendo -a (el cual especifica listar "todas"las entradas.txt 592262 chap2.. aunque sean tratadas como archivos ocultos (debido a que "comienzan por .. report/html/figures: 592263 .. Discussion Directorios Estructura del directorio Al comienzo. 592253 . report/text: 592254 . presentamos dos estructuras asociadas con los archivos.Directorios y nodos de dispositivo Conceptos clave • • • • • El término archivo se refiere a los archivos regulares. permisos e información de temporización.html 592264 image1. Lo que resulta es el siguiente listado de directorios y archivos.

son las dentries asociadas con los archivos de directorio que se dice que contienen. los directorios tienen la misma estructura de los archivos regulares: una dentry. path | inode -------------------------------------------report/ | 592253 |-. y datos.chap1. los datos almacenados en los directorios.chap1.html | 592255 | |-. el nombre dentry se decía que se derivaba de directoryentry.html | 592262 | `-.html | 592261 | |-.chap2. La estructura interna de los directorios Enlaces de directorios 90 . asignando nombres de archivo as los inodos subyacentes que representan archivos. un inodo. Figure 1.text | 592254 |-. Un directorio es un poco más que un cuadro de dentries. Cuando fue presentado.figures | 592263 | `-. archivos y números de inodo se reproducen abajo en un formato más fácil. Ahora vemos que los directorios no son más complicados que eso: un directorio es una colección de dentries.image1.png | 592264 `-.txt | 592258 Como se puede ver en la siguiente gráfica del directorio report.Los mismos directorios.txt | 592257 `-. No obstante.chap2.

El siguiente diagrama sirve de ilustración de las dentries que se encuentran en el directorio report . y su subdirectorio figures). fue siempre 2 o más."). El directorio padre (no mostrado) contiene una entrada llamada report. [prince@station prince]$ ls -ial total 16 592253 drwxrwxr-x 4 prince 249482 drwx-----x 6 prince 592255 drwxrwxr-x 3 prince 592254 drwxrwxr-x 2 prince report prince prince prince prince 4096 4096 4096 4096 Jul Jul Jul Jul 14 14 14 14 13:27 13:27 13:49 13:49 . que se encuentra en el directorio mismo. Cuadros dentry para los directorios report.Anteriormente vimos que el conteo de enlaces de directorios. 1. . ¿Podemos responder por cada uno de los enlaces? Comencemos por listar las referencias al número de inodo 592253 (el directorio report o el anterior ". html text Cada archivo en el listado es un directorio y el conteo de enlaces (aquí la tercera columna. su subdirectorio html. como se muestra en la segunda columna del comando ls -l. una por sí mismos (como el ". y otra como su padre (con un nombre de directorio real. report/html y report/html/figures. Cuando prince hace un listado largo del directorioreport. ya que el numero de inodos ha sido adjuntado con antelación en la primera columna) de cada uno es o igual o mayor de dos. 91 . Esto se deduce naturalmente del hecho que cada directorio se referencia al menos dos veces. la cual hace referencia al mismo inodo. 2.. tal como report). ve los cuatro archivos en el primer cuadro. La entrada ."). Figure 1.

Cada directorio contiene al menos dos enlaces. .html figures En resumen. el directorio report/html tiene un conteo de enlaces de 3. y sus dos subdirectorios (a los cuales llama ". Del mismo modo. A continuación el usuario elvis hace un listado largo de archivos en el directorio /dev. ¿puede encontrar todas las tres referencias para el número de inodo 592255 en la gráfica de arriba? [prince@station prince]$ ls -ial total 20 592255 drwxrwxr-x 3 prince 592253 drwxrwxr-x 4 prince 592261 -rw-rw-r-1 prince 592262 -rw-rw-r-1 prince 592263 drwxrwxr-x 2 prince report/html prince prince prince prince prince 4096 4096 2012 2012 4096 Jul Jul Jul Jul Jul 14 14 14 14 14 13:49 13:27 13:28 13:28 13:28 .. Respondiendo por si mismo (al cual llama ". En el siguiente listado. los nodos de dispositivo viven dentro de un directorio llamado /dev.html chap2.". pero no contienen datos de la misma forma que los archivos regulares o incluso los directorios y enlaces simbólicos.. los cuales asignan los nombres de archivo a los inodos. 4. los cuales hacen referencia al directorio como ". el nodo del dispositivo transfiere la información al controlador de dispositivo apropiado en el kernel. Nodos de dispositivo Hemos analizado tres tipos de "criaturas" que pueden existir en el sistema de archivos de Linux. nodos de dispositivo de bloque y de caracter. la cual hace referencia al inodo 592253 como su directorio padre. se lee desde ese nodo de dispositivo asociado con el dispositivo justo como si leyera desde un archivo."."). su padre (al cual llama"report"). el subdirectorio text (no descrito) contiene una entrada llamada . los directorios son simplemente colecciones de dentries para los archivos que se dice que están en el directorio. chap1. es decir los archivos regulares. Por convención. la labor de un dispositivo de nodo es actuar como un conducto hacia un controlador de dispositivo determinado dentro del kernel. que hace referencia al mismo inodo. y otro desde su entrada padre con el nombre convencional del directorio. discutiremos los dos últimos tipos de entradas del sistema de archivos (que se tratarán en este curso). hemos hallado todos nuestros enlaces en el inodo 592253 reportados por el comando ls -l. En su lugar. Nodos de dispositivos de bloque y de caracter Los nodos de dispositivos existen en el sistema de archivos. En esta sección.. Cuando un usuario desea recopilar información desde un dispositivo particular.. 92 . uno desde su propia entrada de directorio ".. El subdirectorio html contiene una entrada llamada.").3. Se hace referencia a los directorios por un enlace adicional para cada subdirectorio. los directorios y los enlaces simbólicos.. Cuando el usuario escribe en el nodo del dispositivo.

lo que significa que un bloque de datos podría leerse desde cualquier parte del dispositivo. 2 crw------1 root root 4. vimos la manera de identificar terminales por nombre y hallamos que el nombre de la primera consola era tty1. Es costumbre que los dispositivos de bloque permitan acceso aleatorio. la salida se limita sólo a los primeros archivos. Terminales como dispositivos En el siguiente ejemplo. En el listado siguiente. Enfocándonos en el primer caracter de cada línea. en la primera y segunda consola virtual. 0 Jan 30 10. 1 crw--w---1 elvis tty 4. Dispositivos de Caracter Los dispositivos de caracter son dispositivos que leen y escriben información como un flujo de bytes ("caracteres"). Ejemplos de dispositivos de bloque incluyen. discos duros. los nodos de dispositivo /dev/tty1 a través de /dev/tty6 son los nodos de dispositivo para las primeras 6 consolas virtuales. 7 Jan 30 29. o nodos de dispositivos de bloque ("b"). y hay un concepto natural de lo que significa leer o escribir el "próximo " caracter.. sino nodos de dispositivo de caracter ("c").. respectivamente. 4 Jan 30 05:24 amigamouse 14. 10 Jan 30 05:24 adbmouse 10. 175 Jan 30 05:24 agpgart 10. Ejemplos de dispositivos de caracter incluyen teclado. 128 Jan 30 41. 0 Jan 30 05:24 05:24 05:24 05:24 05:24 audioctl aztcd beep bpcd capi20 Como hay más de7000 entradas en el directorio /dev. crw------1 elvis root brw-rw---1 root disk crw------1 elvis root brw-rw---1 root disk crw------1 root root 10. Dispositivos de bloque Los dispositivos de bloque son dispositivos que leen y escriben información en fragmentos ("bloques") a la vez. [elvis@station elvis]$ ls -l /dev/tty[1-6] crw--w---1 elvis tty 4. 4 crw------1 root root 4. 5 crw------1 root root 4. elvis ha iniciado sesión en una máquina de Linux. 0 Jan 30 68. disquetes y controladores de CD/ROM. en cualquier orden.[elvis@station elvis]$ ls -l /dev total 228 crw------1 root root crw-r--r-1 root root crw------1 root root . Los dos tipos de nodos de dispositivos reflejan el hecho de que los controladores de dispositivos en Linux se dividen en dos clases principales: los dispositivos de caracter y los dispositivos de bloque. tarjetas de sonido e impresoras. 3 crw------1 root root 4. podemos ver que el "nombre" de la terminal es en realidad el nombre del nodo de dispositivo asignado a esa terminal. ratón. En el primer cuaderno. la mayoría de los archivos dentro de /dev no son archivos regulares o directorios. 6 May May May May May May 14 14 14 14 14 14 16:06 16:06 08:50 08:50 08:50 08:50 /dev/tty1 /dev/tty2 /dev/tty3 /dev/tty4 /dev/tty5 /dev/tty6 93 . Ahora. y la segunda consola virtual era tty2.

elvis halla los siguientes caracteres en la pantalla. pero sí lo hizo. Observe la falta de 94 . y redirigirá tres veces la salida del comando cal. el cual hizo lo que se "suponía que tenía que hacer". ¿A dónde va la salida del comando cal esta vez? La información fue redirigida al nodo de dispositivo para la segunda consola virtual.20-4ES on an i686 station login: elvis Password: Last login: Mon May 14 16:55:22 on tty1 You have new mail." Al cambiar a la segunda consola virtual. mostrarla en la segunda consola virtual. elvis. es decir.En el siguiente ejemplo. /dev/tty1. Redirigir la salida de comando a / dev/tty1 es como decir "en lugar de escribir su salida en mi terminal. lo cual hizo lo que se "suponía que debía hacer". pareció no haber redirigido nada en absoluto. escriba su salida en mi terminal. [elvis@station elvis]$ May 2003 Su Mo Tu We Th Fr Sa 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 Aquí es donde estaba el cursor de elvis después de iniciar sesión en la segunda consola virtual y cambiar a la consola virtual número 1. utilizando la secuencia de teclas CTRL-ALT-F2.4. Red Hat Enterprise Linux release 3 (Taroon) Kernel 2. no se pudo redirigir. al nodo de dispositivo /dev/tty2. la salida simplemente se redirige al archivo recién creado cal. Aparentemente. ¿Por qué? Cuando elvis ejecuta comandos interactivos sin redirigir. La segunda forma de redirigir amerita un poco más de atención. mostrar toda la información escrita en la pantalla. Cuando elvis redirigió la salida al nodo de dispositivo que controla su consola virtual actual. escriben en los nodos de dispositivo que controlan las terminales por defecto. a un archivo llamado /tmp/cal. está trabajando desde la consola virtual número 1. [elvis@station [elvis@station May 2003 Su Mo Tu We Th 1 2 3 6 7 8 9 10 13 14 15 16 17 20 21 22 23 24 27 28 29 30 31 [elvis@station elvis]$ cal > /tmp/cal elvis]$ cal > /dev/tty1 Fr 4 11 18 25 Sa 5 12 19 26 elvis]$ cal > /dev/tty2 Este caso debería ser familiar. es decir. segundo. a un nodo de dispositivo /dev/tty1 y por último. primero. La salida del comando fue redirigida al nodo del dispositivo de la primera consola virtual. Aquí es donde la salida del comando cal estaba escrita en la terminal.

2 crw--w---1 prince tty 4. 4 crw------1 root root 4. 6 May May May May May May 16 16 16 16 16 16 13:38 13:38 13:46 10:02 10:02 10:02 /dev/tty1 /dev/tty2 /dev/tty3 /dev/tty4 /dev/tty5 /dev/tty6 Cuando un usuario inicia sesión. filename>tty1 [elvis@station elvis]$ cal > /dev/tty3 -bash: /dev/tty3: Permission denied ¿Por que elvis no pudo realizar el mismo truco en la tercera consola virtual? Porque elvis no ha iniciado sesión en la tercera consola virtual y por lo tanto. Por último. 5 May May May May May May 16 16 16 16 16 16 13:38 13:38 10:02 10:02 10:02 10:02 /dev/tty1 /dev/tty2 /dev/tty3 /dev/tty4 /dev/tty5 /dev/tty6 Puesto que los nodos de dispositivo se consideran archivos. grupo propietarios y una colección de permisos. 3 crw------1 root root 4.espacios separando la salida. 4 crw------1 root root 4. Examine de nuevo el listado largo de comandos ls -l de los nodos de dispositivo de la consola virtual: [elvis@station elvis]$ ls -l /dev/tty[1-6] crw--w---1 elvis tty 4. 95 . no posee el dispositivo. Esta no es una ocurrencia natural con buen formato. ¿Qué sucede cuando prince inicia sesión en la tercera consola virtual? [elvis@station elvis]$ ls -l /dev/tty[1-6] crw--w---1 elvis tty 4. 5 crw------1 root root 4. 1 crw--w---1 elvis tty 4. es decir. los permisos en los nodos de dispositivos no permiten a los usuarios estándares acceder a los dispositivos directamente. pero observe que bash shell no ofrece un intérprete de comandos fresco. el usuario elvis (quien ha iniciado sesión en las primeras dos consolas virtuales. la shell bash ni siquiera se dio cuenta que los caracteres fueron escritos en la terminal. Al leer o escribir desde el nodo de dispositivo aplica solo como si leyera o escribiera a un archivo regular. 5 crw------1 root root 4. Aún está esperando que elvis entre el comando. también tienen usuarios propietarios. se obtiene propiedad del nodo de dispositivo que controla su terminal. 2 crw------1 root root 4. Hay dos excepciones. sino algo extraño que elvis le pidió hacer al controlador del dispositivo. 1 crw--w---1 elvis tty 4. Permisos de dispositivo. En general. De hecho. 3 crw------1 root root 4. administrando los propietarios de archivo y los permisos de archivo. seguridad y usuario de consola Continuando con lo anterior. Los procesos que ellos ejecutan pueden luego leer o escribir salida en la terminal. Esto le permite a un administrador de sistemas (o al software en el sistema) controlar quién ha tenido acceso a los dispositivos particulares mediante una técnica familiar. la salida del comando cal disminuyó.

por ejemplo. Pueden tratar toda las salidas y las entradas como si estuvieran simplemente leyendo o escribiendo un archivo. ellos (o más exactamente. cuando un usuario inicia sesión en una consola virtual o en un servidor gráfico X. las propiedades para estos dispositivos son restauradas a las predeterminadas del sistema. [elvis@station elvis]$ ls -l /var/spool total 64 drwxr-xr-x 2 root root 4096 drwx-----3 daemon daemon 4096 drwxrwx--2 smmsp smmsp 4096 drwx-----2 root root 4096 drwx-----3 lp sys 8192 drwxr-xr-x 23 root root 4096 drwxrwxr-x 2 root mail 4096 drwx-----2 root mail 8192 drwxr-xr-x 17 root root 4096 drwxr-xr-x 2 rpm rpm 4096 drwxrwxrwt 2 root root 4096 drwxr-xr-x 2 root root 8192 drwxrwxrwt 2 root root 4096 Jan Jun Jul Jun Jul Jan Jul Jul Feb Apr Apr Jul Feb 24 18 21 18 18 24 21 21 24 11 5 16 3 16:26 02:00 10:42 16:12 17:38 18:52 10:11 10:43 19:41 06:18 23:46 17:53 19:13 anacron at clientmqueue cron cups lpd mail mqueue postfix repackage samba up2date vbox 96 .Terminales Puesto que los usuarios necesitan comunicarse con el sistema. hemos visto suficiente acerca de cómo se utilizan los nodos de dispositivo de la terminal para presentar el concepto e identificar un par de ventajas en el enfoque del nodo de dispositivo. sino por desde dónde se ha iniciado la sesion. A manera de introducción. Suele presentarse que parte del proceso de inicio de sesión en un sistema implica la transferencia de propiedad de nodos de dispositivos de terminal al usuario. Los usuarios de consola tienen acceso a dispositivos de hardware asociados con la consola. tales como disquetes y tarjetas de sonido. Nada de esto sucede si un usuario inicia sesión en una red. los programadores no necesitan tratar con detalles de dispositivos. los procesos que ellos ejecutan) deben ser capaces de leer y escribir en la terminal que están usando. Es decir. El acceso a dispositivos se puede controlar a través de las mismas técnicas de propietarios de archivos y permisos utilizados en los archivos regulares. Cuando los usuarios de consola terminan sesión. a los usuarios se les otorgan permisos no por quiénes son. ¿sería razonable usar disquetes? En resumen. Está interesado en interpretar el conteo de enlaces del subdirectorio como aparece en la segunda columna. La administración de dispositivos en un sistema de Linux puede ser un tema extenso y complejo. se considera un "usuario de consola". • • Al escribir programas. "Usuarios de Consola" En Red Hat Enterprise Linux. Ejemplos Interpretación de conteos de enlaces de directorio El usuario elvis hace un listado largo del directorio /var/spool. Linux (y UNIX) utilizan los nodos de dispositivo para permitir a los usuarios el acceso a dispositivos en el sistema. -Si el usuario no está en la máquina.

1 enlace como se muestra arriba para la entrada postfix .Al notar que tiene un conteo de enlaces de 17. 1 enlace para la entrada . [elvis@station elvis]$ ls -l /var/spool/postfix/ total 60 drwx-----2 postfix root 4096 Feb 24 drwx-----2 postfix root 4096 Feb 24 drwx-----2 postfix root 4096 Feb 24 drwx-----2 postfix root 4096 Feb 24 drwx-----2 postfix root 4096 Feb 24 drwxr-xr-x 2 root root 4096 Apr 1 drwx-----2 postfix root 4096 Feb 24 drwx-----2 postfix root 4096 Feb 24 drwxr-xr-x 2 root root 4096 Apr 11 drwx-wx--2 postfix postdrop 4096 Feb 24 drwxr-xr-x 2 root root 4096 Feb 24 drwx-----2 postfix root 4096 Feb 24 drwx--x--2 postfix postdrop 4096 Feb 24 drwx-----2 postfix root 4096 Feb 24 drwxr-xr-x 3 root root 4096 Feb 24 19:41 19:41 19:41 19:41 19:41 12:22 19:41 19:41 05:54 19:41 19:41 19:41 19:41 19:41 19:41 active bounce corrupt defer deferred etc flush incoming lib maildrop pid private public saved usr 97 . dentro de 15 subdirectorios. concluye que estaba en lo cierto (hay 15 subdirectorios). que se encuentra dentro de postfix (no se muestra) y 15 para las entradas . Al examinar un listado largo del directorio/var/spool/postfix. elvis concluye que el directoriopostfix contiene 15 subdirectorios..

Por lo general. Los sistemas de archivos se crean con algunas variantes del comando mkfs. El comando df se utiliza para reportar el uso del sistema de archivos y mapea los dispositivos actualmente montados. El siguiente cuadro lista los nombres de archivos de los nodos de dispositivos comunes y los discos con los cuales están asociados. El sistema de archivos predetermiando de Red Hat Enterprise Linux es el sistema de archivos ext3. de bajo nivel a los controladores de disco a través de los nodos de dispositivos en el directorio /dev. Discussion Dispositivos de disco Linux (y Unix) permite a los usuarios acceso directo. los discos se formatean con un sistema de archivos y se montan en un directorio. El comando umount se utiliza para desmontar un sistema de archivos de un punto de montaje. Nodos de dispositivos de disco Linux Nodo de dispositivo /dev/fd0 /dev/hda /dev/hdb /dev/hdc /dev/hdd /dev/sd[a-z] /dev/cdrom Disco Disquete Master Primario IDE Esclavo Primario IDE Master Secundario IDE Esclavo Secundario IDE Discos SCSI Enlace simbólico al CD/ROM Aunque los nodos de dispositivo existen para los controladores de disco. Ese directorio se denomina punto de montaje.Discos. A continuación elvis ha realizado un listado largo de varios nodos de dispositivo que aparecen en el cuadro anterior. sistemas de archivos y montaje Conceptos clave • • • • • • • Linux permite el acceso de bajo nivel a los controladores de disco a través de nodos de dispositivo en el directorio /dev. 98 . El comando mount se utiliza para asignar el directorio root de un sistema de archivos (o una partición de un disco) a un directorio ya existente. Table 1. los usuarios estándar no suelen tener permisos de acceso directo.

El nombre de una partición de nodo de dispositivo es simplemente un número adjunto al nombre de nodo de dispositivo del disco.conf y luego redirigiendo la salida del comando al controlador del disquete (/dev/fd0). Curiosamente. Por ejemplo. Así como hay nodos de dispositivo para cada disco. 0 Jan 30 05:24 /dev/sda Por defecto. elvis no tiene permisos para acceder a los controladores fijos de la máquina. /dev/cdrom da acceso al CD/ROM. Los discos duros suelen dividirse en particiones. el archivo /dev/cdrom no es un nodo de dispositivo. Sin embargo.[elvis@station elvis]$ ls -l /dev/fd0 /dev/hd[abcd] /dev/sda /dev/cdrom lrwxrwxrwx 1 root root 8 Oct 1 2002 /dev/cdrom -> /dev/hdc brw-rw---1 elvis floppy 2. el nodo de dispositivo para la tercera partición del controlador IDE esclavo primario se denomina /dev/hdb3. Comienza por asegurarse si tiene permisos de lectura y escritura en su nodo de dispositivo del disquete ejecutando cat en el archivo /etc/resolv. y así aparecen al kernel simplemente como otro controlador SCSI o IDE. Los controladores más modernos de CD/ROM están físicamente conectados a la máquina mediante una interfaz de IDE o SCSI. 99 . 64 Jan 30 05:24 /dev/hdb brw------1 elvis disk 22. 0 Jan 30 05:24 /dev/hdc brw-rw---1 root disk 22. Aprovecharemos este hecho durante esta lección. Las particiones son regiones del disco duro que se pueden utilizar como si cada una fuera un disco individual. se considera el "usuario de la consola" y ha ganado permisos para acceder a los disquetes y al CD/ROM. Dado que (aparentemente) está conectado en la consola. Para ellos. 64 Jan 30 05:24 /dev/hdd brw-rw---1 root disk 8. desean acceder al "CD/ROM". sin importar cómo se enlaza al sistema. 0 Jan 30 05:24 /dev/fd0 brw-rw---1 root disk 3. los hay también para cada partición de disco. Figure 1. elvis está explorando el acceso al nivel bajo para su disquete. El siguiente diagrama ilustra un disco duro que se ha dividido en cuatro particiones y los nodos de dispositivo dirigidos a cada una de ellas. sino un enlace simbólico que apunta al nodo de dispositivo de bloque /dev/hdc. algunas aplicaciones tales como el reproductor de CD de audio gnome-cd. Particiones de disco duro Controladores de acceso de bajo nivel A continuación. 0 Jan 30 05:24 /dev/hda brw-rw---1 root disk 3.

pero si realmente quiere hacerlo. lo examina. abandona el paginador.254 B^RA^^@^@V^^|F^@^@^@AdDBP^A^^|^C^F^B|^@DVP|Q^^^R ABAoot failed^@^@^@LDLINUX SYS . Cuando cree que lo logra.conf. [elvis@station elvis]$ cat /etc/resolv. elvis quita el disquete del controlador.168. Curioso por ver lo que ha escrito en el disquete. agrega la opción -f.0. 100 . desliza la lengüeta del disquete a la posición de escritura e inserta de nuevo el disquete. search example.conf > /dev/fd0 -bash: /dev/fd0: No such device or address En un comienzo. elvis nota que no hay disquete en su controlador de disquete.168.conf > /dev/fd0 Finalmente. 0 Jan 30 05:24 /dev/fd0 [elvis@station elvis]$ cat /etc/resolv.conf search example. elvis reconoce los primeros caracteres como el contenido /etc/resolv.254 [elvis@station elvis]$ cat /etc/resolv. Coloca un disco antiguo en blanco (para no preocuparse del contenido) en el controlador.com nameserver 192. "La gente cuerda no lee los nodos de dispositivo directamente.conf > /dev/fd0 -bash: /dev/fd0: Read-only file system Perplejo de nuevo. el paginador muestra datos ilegibles con textos de lectura humana ocasionales e intercalados. [elvis@station elvis]$ less /dev/fd0 /dev/fd0 is not a regular file (use -f to see it) El paginador less parece estarle diciendo a elvis.com nameserver 192. [elvis@station elvis]$ less -f /dev/fd0 En la primera página. El usuario elvis continua a través del "archivo" usando el paginador less. trata luego de leerlo con el paginador less. la luz del controlador del disquete se alumbra y elvis escucha al disco dando vueltas porque hay información en el disquete. [elvis@station elvis]$ cat /etc/resolv. viendo aparentemente pedazos de texto aleatorios y caracteres binarios. Después de esto.[elvis@station elvis]$ ls -l /dev/fd0 brw-rw---1 elvis floppy 2.." Como realmente quiere hacerlo. yo se lo permito.0. perplejo por el mensaje de error.. sin embargo.

Cuando elvis hace cat en el contenido de un archivo al nodo de dispositivo del controlador. En cambio. Es obvio que la gente no le gusta almacenar su información en controladores como un flujo de datos. los sistemas de archivos se crean con algunas variantes del comando mkfs. Cuando elvis va atrás para leer el contenido del controlador.msdos /sbin/mkfs. estos 3 bloques aquí y ese allá. En Linux. por lo tanto no pueden invocarse como simples comandos.ext2 /sbin/mkfs. diciendo "este bloque contendrá sólo dentries". Sistemas de archivos La sección anterior demostró la manera de acceder a los controladores en un nivel bajo. elvis lista todos los comandos que comienzan por mkfs en el directorio /sbin. se debe ser inicializar con este tipo de estructura de bajo nivel. ¿Quién es el usuario propietario? ¿Cuáles son los permisos?No hay ninguno. se denomina una "creación de un sistema de archivos". ve lo que habia en el disquete antes de iniciar. ext3). A ellos les gusta organizar su información en archivos y darle nombres a los archivos. viven en el directorio /sbin. el contenido del archivo /etc/resolv. El sistema de archivos organiza estos bloques. byte por byte al controlador. En los primeros bytes del disquete. A ellos les gusta organizar sus archivos en directorios y decir quién puede tener acceso al directorio y quién no.cramfs /sbin/mkfs.conf. En Linux. No tiene . Dado que estos comandos se suelen utilizar solamente por el usuario administrativo.ext3 /sbin/mkfs. los usuarios pueden ver (y escribir) el contenido del controladorbyte por byte. elvis ve una copia del contenido del archivo /etc/resolv. no viven en los directorios estándar /bin ni en el directorio /usr/bin. en el disquete? Pregunta delicada. es decir. A continuación. Antes de que un disco se pueda utilizar para almacenar archivos en el sentido convencional . ve los datos que escribió allí. Después de eso. Es sólo datos.reiserfs /sbin/mkfs. Toda esta estructuración de información es responsabilidad de lo que se denomina un sistema de archivos. En otros sistemas operativos. Un sistema de archivos proporciona el orden a los controladores de disco organizando el controlador en fragmentos del mismo tamaño llamados bloques. la información es transferida. se suele referir como "formatear el disco".jfs /sbin/mkfs. también es compatible con los sistemas de archivo nativos de muchos sistemas operativos tales como el sistema de archivos DOS FAT o el sistema de archivos de alta ejecución OS/2.conf. el cual está reservado para los comandos administrativos.vfat 101 . contendrán el contenido del archivo /etc/services" o "este primerbloque almacenará información sobre la manera en que se están utilizando los otros bloques". Aunque el sistema de archivos nativo de Linux es ext2 (o en Red Hat Enterprise Linux. Los sistemas de archivos proveen toda esta estructura que generalmente se ignora. el controlador se ve como un archivo bien grande.¿Para qué todo esto? Al acceder a los controladores de disco a través de sus nodos de dispositivo. Para el usuario. ¿Cuál es el nombre de archivo asociado con la información. [elvis@station elvis]$ ls /sbin/mkfs* /sbin/mkfs /sbin/mkfs. Linux soporta un gran número de tipos diferentes de sistemas de archivos (la página del manual fs(5) lista apenas unos pocos).

Sin embargo. este es el final de la historia. Con el fin de acceder a los sistemas de archivos en las otras particiones. las diversas opciones se predeterminan para propósitos generales por defecto.ext2. [elvis@station elvis]$ /sbin/mkfs. los 102 . El comando mkfs. los usuarios necesitan alguna forma de acceder los directorios y los archivos que el sistema de archivos provee. las cosas se complican. el sistema de archivo ha sido inicializado y el disquete está listo para ser utilizado. El directorio / tiene subdirectorios y esos subdirectorios tienen subdirectorios. Encontrará mayor información en las páginas del manual mkfs. los usuarios suelen no darse cuenta de las particiones porque las diferentes particiones de disco están organizadas en una estructura única de directorio. El usuario elvis luego formatea el mismo disco utilizado anteriormente con el sistema de archivo ext2. Una vez se haya iniciado el sistema.ext2 no vivió en uno de los directorios "estándar".ext2 /dev/fd0 mke2fs 1. incluyendo los sistemas de archivos ext2 y msdos.00%) reserved for the super user First data block=1 1 block group 8192 blocks per group. elvis necesita referirse al comando mediante una referencia absoluta.ext2 muestra información acerca del sistema de archivos a medida que se crea en el dispositivo /dev/fd0. Dado que el comando mkfs. hay una copia del comando mkfs por cada tipo de sistema de archivo que se puede construir. Afortunadamente. si un sistema tiene múltiples discos. whichever comes first. Use tune2fs -c or -i to override.32 (09-Nov-2002) Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) 184 inodes. 1440 blocks 72 blocks (5. Cuando el comando completa.Aparentemente. una de sus particiones de discos actúa como la partición raíz y su directorio raíz se convierte en el directorio raíz del sistema /. El comando mkfs y sus variantes. En otros sistemas operativos. los usuarios suelen ser mas conscientes de la particiones de disco porque tienen que referirse a ellos mediante etiquetas tales como C: o D:. Montaje del sistemas de archivos Una vez se le ha dado formato al disco o a la partición del disco con el sistema de archivos. las cuales especifican detalles del nivel bajo acerca del sistema de archivos. /sbin/mkfs. ¿Cómo se hace esto? Cada sistema de archivos proporciona un directorio raíz que sirve como base de este sistema de archivos. o si un disco tiene múltiples particiones. los cuales residen en el sistema de archivo de la partición raiz. Algunas veces. 8192 fragments per group 184 inodes per group Writing inode tables: done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 34 mounts or 180 days.ext2(8) y similares. Estos detalles van más allá del objetivo de este curso. En Unix. pueden configurarse con una gran colección de líneas de opciones.

/tmp.directorios raíz de aquellos sistemas se asignan a un directorio existente a través de una técnica estándar de Unix llamada montaje. /home y otros directorios esperados. dicho directorio se denomina punto de montaje. éste se monta en el directorio /home. todas las referencias al directorio /home se asignan de un modo transparente al directorio raíz del sistema de archivos en /dev/hda4.mode=620) none on /dev/shm type tmpfs (rw) 103 . elvis. Este montaje suele presentarse como parte del proceso de arranque del sistema.gid=5. [elvis@station elvis]$ ls /home blondie elvis madonna prince ¿Cómo puede elvis saber qué partición contiene un archivo determinado? Usando sólo el comando ls¡no puede! Para ejecutar el comando ls y usualmente en la mente del usuario. La partición /dev/hda4 también se ha formateado con el sistema de archivos y su directorio raíz contiene los directorios /blondie. etc. todas las particiones se combinan correctamente dentro de una aparente única estructura de directorio. En el siguiente diagrama. [elvis@station elvis]$ mount /dev/hda3 on / type ext3 (rw) none on /proc type proc (rw) usbdevfs on /proc/bus/usb type usbdevfs (rw) /dev/hda1 on /boot type ext3 (rw) none on /dev/pts type devpts (rw. Montaje de un sistema de archivos Ahora. como se muestra a continuación. Figure 1. el sistema de archivos en la partición /dev/hda2 está siendo utilizado como la partición raíz y contiene los directorios /etc. /prince y otros más. Con el fin de hacer uso del sistema de archivos. el cual ya existía en el sistema de archivos de la partición raíz. Ver puntos de montaje ¿Cómo puede un usuario determinar qué directorios se están usandos como puntos de montaje? Un método es ejecutar el comando mount sin argumentos. dando la apariencia que el directorio /home contiene los subdirectorios blondie. Cuando el sistema de archivos se monta sobre un directorio de esta manera.

. sino que presenta en un cuadro leíble de dispositivos montados en cada directorio. En Unix.. --leíble humanos -i. --print-type por Efecto Muestra todos los sistemas de archivos. --all -h. esto no afecta al directorio /tmp porque éste pertenece a otro sistema de archivos. que pueden empeorar. daremos dos razones. no se pueden crear más archivos bajo el directorio/home. el comando mount devuelve una lista de puntos de montaje. Imprime tamaños en formato legible por humanos Lista el uso de inodos en lugar del uso del bloques incluye el tipo des sistema de archivos No solo el comando df muestra el espacio restante en las particiones particulares. sólo afecta a la parte de la estructura del directorio bajo su punto de montaje.. relacionados con el sistema de archivos subyacente. cuando una partición se llena. el tipo de sistema de archivos con el que el dispositivo le ha dado formato y cualquier otra opción de montaje asociadas con el montaje. Estos son sistemas de archivos virtuales. ¿Para qué molestarnos? Si rara vez usted sabe qué directorios se están utilizando como puntos de montaje y qué archivos existen en las particiones. Si a un archivo montado en /home se le acaba el espacio. --inodes -T.] Muestra información sobre todas las particiones o una partición en la cuales reside un ARCHIVO. ¿para que molestarse incluso por hablar de esto? Por ahora.. está montada en un directorio no estándar denominado /data. Sin embargo. Observe que varios sistemas de archivos listados arriba no tienen "ningún" dispositivo. En el ejemplo anterior. A las particiones se les puede acabar el espacio. df [OPCIÓN. Una partición en un segundo disco. el cual significa "disk free". A continuación. los cuales son implementados por el kernel directamente y no existen en ningún dispositivo físico. es decir la partición /dev/hdb2. [elvis@station elvis]$ df Filesystem 1K-blocks /dev/hda2 8259708 /dev/hda1 102454 /dev/hda4 5491668 /dev/hdb2 4226564 none 127592 Used Available Use% Mounted on 6708536 1131592 86% / 24227 72937 25% /boot 348768 4863936 7% /home 1417112 2594748 36% /data 0 127592 0% /dev/shm 104 . el dispositivo que está montado a ésta. incluyendo aquellos de tamaño 0. la partición /dev/ hda3 se está utilizando como partición raíz y el sistema de archivo ext3 en la partición /dev/hda1 ha sido montado en el directorio /boot.Sin argumentos. el sistema de archivos en /dev/hda2 se está utilizando como partición raíz. el sistema de archivos en / dev/hda1 está montado en el directorio /boot y /dev/hda4 está montado en /home.] [ARCHIVO. Los usuarios pueden determinar cuánto espacio está disponible en una partición con el comando df. La primera razón es que pueden haber problemas sutiles. Opción -a. no a todo el árbol de directorios.

(así el nombre del directorio /media). La segunda razón por la cual los usuarios necesitan conocer los sistemas de archivos y los puntos de montaje. [elvis@station elvis]$ mount /media/floppy [elvis@station elvis]$ df Filesystem 1K-blocks Used Available Use% Mounted on /dev/hda2 8259708 6708536 1131592 86% / /dev/hda1 102454 24227 72937 25% /boot /dev/hda4 5491668 348768 4863936 7% /home /dev/hdb2 4226564 1417112 2594748 36% /data none 127592 0 127592 0% /dev/shm /dev/fd0 1412 13 1327 1% /media/floppy En la última línea. Montaje de un disquete con formato [elvis@station elvis]$ cp /etc/services /media/floppy/ [elvis@station elvis]$ ls /media/floppy/ lost+found services ¿De dónde viene el directoriolost+found? Este directorio se crea al mismo tiempo que el sistema de archivos y siempre existe en el directorio raíz de un sistema de archivos ext2 o ext3. Si quisiera hacer uso de un disco temporal. involucra los medios temporales tales como los disquetes y los CD/ROM. ¿Qué directorio debería utilizarse? El directorio /media contiene subdirectorios tales como /media/floppy y /media/cdrom. tal como un disquete. el comandodf reporta ahora el controlador de disquete recién montado y elvis puede copiar archivos en el disquete. o incluso /media/camera que están pensados con este único propósito: servir como puntos de montaje para los medios temporales. Como cualquier dispositivo de bloque. Se usa ocasionalmente para reparar daños en los sistemas de archivos. debe primero montar el sistema de archivos en una estructura de directorios usando el comando mount. Figure 1. los disquetes y los discos CD/ROM se formatean con sistemas de archivos.Medios de montaje temporal: el directorio /media. mediante un directorio (ya existente) como un punto de montaje. Con el fin de acceder a estos sistemas de archivos deben montarse en la estructura del directorio. 105 .

el comando se tomará un tiempo para volver mientras se confirman la escritura en el disquete. al desmontar el disquete con el comando umount. el kernel es forzado a confirmar todas las transaccciones pendientes en el disco. El programa de montaje automático es parte del entorno gráfico y no existe si un usuario ha iniciado sesión a través de una consola virtual. Sin embargo. Los siguientes problemas se pueden presentar y agravar el asunto: Permisos Por defecto. cuando copia un archivo en un disquete. Por ejemplo.Cuando elvis ha terminado de usar el disco. [elvis@station elvis]$ umount /media/floppy/ [elvis@station elvis]$ ls /media/floppy/ Una vez el disco del sistema de archivos haya sido desmontado del directorio/media/floppy. Programas de montaje automático El entorno gráfico GNOME ejecuta un programa de montaje automático.'Más tarde. Kernel Buffering Con el fin de mejorar el rendimiento. Al desmontar el dispositivo. El "usuario de consola" (alguien que está conectado desde una consola virtual o una pantalla X de inicio) gana propiedades de dispositivos asociados con la máquina física tales como un disquete y los permisos especiales para montar estos dispositivos a los puntos de montaje predeterminados tales como /media/floppy. Además. 106 . el kernel memoriza todas las interacciones del dispositivo de bloque (disco duro). el archivo puede parecer haber sido copiado casi inmediatamente. lo desmonta del sistema de archivo mediante el comando umount. ¿Qué puede mantener a un sistema de archivo "ocupado"? Cualquier archivo abierto o cualquier proceso que tenga un directorio actual de trabajo en el sistema de archivos. y de modo automático monta el sistema de archivos de un disco recién insertado. los medios temporales se manejan de un modo diferente. el programa de montaje automático sólo funciona para el controlador de CD/ROM. el cual vigila el controlador del CD/ROM. solo el usuario root puede montar y desmontar dispositivos. no serán considerados "usuarios de consola" y no tendrán permiso para montar estos dispositivos. Sistemas de archivo ocupados Un sistema de archivo puede solo ser desmontado si se considera "no ocupado". Si los usuarios inician en el sistema de alguna otra manera como por ejemplo. La única forma para que el sistema de archivo sea desmontado es rastrear los procesos que puedan estar "ocupando" el sistema de archivos y matarlos. por red o vía el comando su. "ocupa" el sistema de archivos. El disquete y los otros dispositivos deben montarse "manualmente". el directorio es sólo un directorio vacio. Aspectos del montaje Los dispositivos de montaje son uno de los temas mas raros y problemáticos para los nuevos usuarios de Linux ( Unix).

ext2 /dev/fd0 mke2fs 1.ogg song03.ogg song01.ogg song07. sería que puede haber dañado el disco y puede que confunda al Kernel de Linux la próxima vez se intente montar un disquete.ogg song06. El resultado: no sólo debe montar medios temporales (como disquetes) antes de poder utilizarlos. [madonna@station madonna]$ umount /media/floppy/ umount: /media/floppy: device is busy 107 . [madonna@station madonna]$ mount /media/floppy/ [madonna@station madonna]$ cp song* /media/floppy/ [madonna@station madonna]$ cd /media/floppy/ [madonna@station floppy]$ ls lost+found song02.¿Qué sucedería si usted quitara el disquete del controlador antes de que la escritura almacenada en el búfer fuera guardada en el disco? El mejor de los casos podría ser que los archivos que creyó que tenía ya copiados en el disco no estuvieran allí. Luego. whichever comes first.ogg song04. decide formatear un disquete con un sistema de archivos ext2. 1440 blocks 72 blocks (5. monta el disquete y copia sus archivos en él.32 (09-Nov-2002) Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) 184 inodes.ogg Luego desmonta su disquete. Ejemplos Uso de un disquete sin formato La usuaria madonna tiene una colección de canciones para copiar a un disquete sin formato y compartirlas con sus amigos.ogg song05. Use tune2fs -c or -i to override. debe también desmontar los medios al terminar. Lo peor.00%) reserved for the super user First data block=1 1 block group 8192 blocks per group. Como sabe que sus amigos usan Red Hat Enterprise Linux. [madonna@station madonna]$ /sbin/mkfs. 8192 fragments per group 184 inodes per group Writing inode tables: done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 21 mounts or 180 days.

msdos /dev/fd0 mkfs. ¿Qué sucede cuando madonna trata de cambiar los permisos en uno de los archivos? [madonna@station madonna]$ cd /media/floppy/ [madonna@station floppy]$ ls song01.8 (28 Feb 2001) [madonna@station madonna]$ mount /media/floppy/ [madonna@station madonna]$ cp song0* /media/floppy/ ¿Por qué madonna no pudo crear el enlace? Aunque Linux soporta el sistema de archivos MSDOS. madonna se encuentra con un amigo quien insiste que puede solo usar los disquetes con formato DOS. [madonna@station madonna]$ /sbin/mkfs. [elvis@station elvis]$ umount /media/floppy/ [elvis@station elvis]$ ls /media/floppy/ Después de copiar los archivos en el disquete.ogg [madonna@station floppy]$ ln -s song06. ¿Cómo maneja Linux esto? Linux trata todos los archivos como propiedad del mismo usuario y todos los permisos como 755. la operación no es permitida. esta vez con el sistema de archivo MSDOS. Uno de estos es que el sistema de archivos MS-DOS no soporta enlaces blandos (ni enlaces duros). Linux necesita hacer algunos acuerdos. Los diferentes sistemas de archivo proporcionan diferentes capacidades y el sistema de archivos de MS DOS no es tan destacado como el sistema de archivos ext2. decide que le gustaría crear un enlace blando para identificar la canción favorita para su amigo. Para desmontar el disquete. Uso de un disquete con formato DOS Finalmente.¿Por qué no se podría desmontar el disquete? Algún proceso tiene un archivo abierto. como su directorio de inicio.ogg song06. [madonna@station floppy]$ cd [madonna@station madonna]$ umount /media/floppy/ Ahora ella puede quitar el disquete del controlador. Ningún sistema de archivos soporta los archivos propietarios y permisos de archivo. o un directorio de trabajo actual en el disco del sistema de archivos.msdos 2.ogg song04.ogg song03.ogg my_favorite_song.ogg': Operation not permitted Otra vez.ogg ln: creating symbolic link `my_favorite_song. madonna debe cd a otra parte. 108 . cuyo directorio de trabajo actual es /media/floppy . monta el disquete y copia sus archivos en él. El proceso infractor es la shell bash de madonna.ogg song07.ogg song02. Madonna da formato a otro disquete. el sistema de archivos MS-DOS es mucho más sencillo que los sistemas de archivos tradicionales de Linux.ogg song05.ogg' to `song06.

ext2 /dev/fd0 > /dev/null mke2fs 1. copia. [madonna@station floppy]$ chmod 664 song05.ogg song07.img 109 . actual: 0644): Ope ration not permitted ¿Por qué no ejecutó primero el comando cd a su directorio de inicio? Imágenes de disquete Varios amigos le han pedido a mandonna varias copias del mismo disco. dentro de un archivo llamado songs. copia. ella tiene un nuevo archivo.ogg chmod: changing permissions of `song05. byte por byte.ogg' (requested: 0664.Ahora que ha terminado. Después de unos pocos segundos de dar vueltas el disquete. el contenido del disquete desmontado. Primero prepara un disquete con los archivos que quiere distribuir. byte por byte.32 (09-Nov-2002) [madonna@station madonna]$ mount /media/floppy/ [madonna@station madonna]$ cp song* /media/floppy/ [madonna@station madonna]$ ls /media/floppy/ lost+found song02.ogg song05. copiar las mismas 8 canciones y desmontarlos. [madonna@station madonna]$ cat /dev/fd0 > songs.img. Después de un tiempo.img 1444 songs. dentro de un archivo llamado songs.ogg song04.ogg song06. sirve tanto como los archivos binarios o en este caso. montarlos. ejecuta el comandocd a su directorio de inicio y desmonta el disquete.ogg song01. Decide agilizar el proceso creando un archivo de imagen para su disquete. [madonna@station madonna]$ /sbin/mkfs.ogg [madonna@station madonna]$ umount /media/floppy/ Luego. ¿Qué tan grande es? [madonna@station madonna]$ ls -s songs. el contenido del disquete desmontado. los datos de disco binarios. [madonna@station floppy]$ cd [madonna@station madonna]$ umount /media/floppy/ Luego.img.ogg song03. se cansa de formatear los disquetes.img El comando cat que hemos estado usando para ver los archivos de texto sencillos.

este comando tiene el efecto de dar formato al disquete con un sistema de archivo ext2 y copia los archivos a éste. Si es posible.floppy. [madonna@station madonna]$ cat songs. Especificaciones En este ejercicio de laboratorio. 5.floppy en su directorio de inicio. el cual contiene la salida del comando df. copiará archivos en él y luego lo desmontará. capture la salida del comando df en el archivo df. montado en el directorio /media/floppy. montar. lo montará. 6. Un directorio /media/floppy/sysconfig. el kernel muy seguramente se habría confundido y el disquete se habría dañado. byte por byte. 4. ¡Qué se puede esperar de un disquete! Ella almacena este archivo de imagen desde el disquete y cada vez que alguien quiere una nueva copia de su disquete. El contenido del disquete será destruído. Cuando se accede a los dispositivos en un bajo nivel. usted formateará un disquete. Desmonte su disquete. y desmontar un disquete Configuración Usted necesitará un disquete para este ejercicio. intercambie disquetes con su vecino en este momento. Esta es una técnica muy poderosa conocida como controladores de imagen. Un disquete formateado con ext2. Un archivo en su directorio de inicio llamado df. De modo recursivo copie el contenido del directorio /etc/sysconfig en su disquete (ignore los anuncios de error de que usted no tiene permisos de lectura para algunos archivos). 2. al nuevo disquete. no sólo en disquetes. Si madonna hubiera ejecutado de último en un disquete montado.4 MBytes. 1. es importante que el dispositivo sea desmontado. Ejercicios en línea Uso de disquetes Lab Exercise Objetivo: Formatear.img > /dev/fd0 Dado que la imagen del archivo es transferida. todo en un solo paso. 3. Dé formato al disquete con el sistema de archivo ext2 mediante el comando /sbin/mkfs.ext2. Monte el disco en el directorio /media/floppy mediante el comando mount. Con el disquete aún montado. y funciona en cualquier tipo de disco. 2. el cual es una copia recursiva del directorio /etc/sysconfig (quizás con unos pocos archivos inaccesibles omitidos). invierte el proceso ejecutando cat volviendo a un disco sin formato. Deliverables A title Question 1 1. 7.1. exactamente. Asegúrese que el disquete no sea protegido contra escritura y colóquelo en el controlador. Possible Solution 110 . Monte el disquete de su vecino (vuelva a montar el suyo) en el directorio /media/floppy.

[student@station student]$ df > df. restaure su disquete desde el archivo imagen. Monte otra vez su disquete en el directorio /media/floppy. confirme que el sistema de archivos ext2 original ha sido restaurado. Mediante el comando ls -s. [student@station student]$ /sbin/mkfs.. Configuración Necesitará el disquete creado en el ejercicio anterior.ext2 /dev/fd0 mke2fs 1. desmonte el disquete con el comando umount.floppy [student@station student]$ umount /media/floppy/ Limpieza Usted puede desmontar su disquete después de haber sido calificado.img. Mediante el comando cat.. [student@station student]$ mount /media/floppy/ [student@station student]$ cp -r /etc/sysconfig /media/floppy/ cp: cannot open `/etc/sysconfig/rhn/up2date' for reading: Permission denied cp: cannot open `/etc/sysconfig/rhn/systemid' for reading: Permission denied . Monte su disquete en el directorio /media/floppy y con el comando mount sin argumentos. También revise que el disquete no esté montado. Si es necesario. 3. 4. haga un archivo de imagen de un disquete en su directorio de inicio llamado floppy.msdos). si piensa seguir al siguiente ejercicio.32 (09-Nov-2002) Filesystem label= OS type: Linux . 111 . usted creará un archivo imagen de un disquete y luego restaurará el disquete mediante el archivo imagen. sin argumentos. confirme que el disquete haya sido formateado con el sistema de archivo msdos (vfat). Asegúrese de que el disquete no esté protegido contra escritura y colóquelo en el 2. vuelva a formatear el disquete con el sistema de archivos msdos (mediante el comando /sbin/mkfs. controlador del disquete. confirme que el tamaño de su imagen es de 1444 kbytes. grabe el contenido de su disquete. 6. 7. Especificaciones En este ejercicio de laboratorio. es decir. Mediante el comando file. 8. 5. Mediante el comando cat.The following sequence of commands provides one possible solution to this exercise. un disquete con formato ext2 que contenga una copia recursiva del directorio /etc/sysconfig. asegúrese de que el archivo ha sido identificado como un sistema de archivo ext2. Desmonte el disquete. Con el comando mount. Con el disquete aún en el controlador y aún desmontado. 1... Creación de un disco imagen Lab Exercise Objetivo:Crear una imagen de un controlador de disquete Tiempo estimado: 15 minutos.

Deliverables A title Question 1 1. puede suprimirlo después de que el ejercicio haya sido calificado.0 ext2 filesystem data [student@station student]$ ls -s total 1448 4 df. almacenada en un archivo floppy. Un disquete formateado con ext2.img en su directorio de inicio.floppy 1444 floppy. 2. [student@station student]$ cat /dev/fd0 > floppy. montado en el directorio /media/floppy. Possible Solution Los siguientes comandos dan una solución para los primeros cuatro pasos de este ejercicio. 112 .img: Linux rev 1.img floppy.img Limpieza Dado que el archivo imagen que usted creó en este ejercicio es bastante grande.img [student@station student]$ file floppy. Una imagen del mismo disquete.

png /usr/src/linux-2. La desventaja de esto es que no encontrará archivos creados hoy y encontrará archivos que hayan sido borrados desde la última actualización de la base de datos. El comando find puede ejecutar comandos arbitrarios en archivos. grupo.2. Veamos qué archivos en el sistema de archivos incluyen la cadena "umount" en sus nombres.2. El comando locate escribe los nombres de los archivos y directorios que coinciden con un modelo proporcionado.8. El comando find puede hallar archivos por nombre.c /bin/umount 113 .cualquier nombre de comando puede utilizarse. una busqueda de modo recursivo del sistema de archivos.Localización de archivos con locate y find Conceptos clave • • • • El comando locate utiliza una base de datos para localizar rápidamente los archivos en el sistema por el nombre de archivo. usamos el comando umount para desenlazar un sistema de archivo desde un árbol de directorios. Una búsqueda slocate considera los permisos de los archivos con respecto al usuario que realiza la búsqueda y sólo devolverá archivos que el usuario normalmente puede ver. Dos de las herramientas comunes para esto son los comandos locate y find.18-24. Es el más rápido de los dos comandos porque éste depende de una base de datos (actualizada a diario por defecto) en lugar de buscar en tiempo real.gz /usr/share/icons/slick/16x16/devices/hdd_umount. [blondie@station blondie]$ locate umount /usr/bin/smbumount /usr/share/man/man2/umount.gz /usr/share/man/man8/smbumount. Con su búsqueda en tiempo real a través del árbol de directorio es más lento que con locate. pero también es más flexible. Discussion Ubicación de archivos Es común encontrar archivos de configuración en /etc o ejecutables en un directorio bin. El comando find puede buscar archivos basados en información de inodo.gz /usr/share/man/man2/umount2. Anteriormente. pero también puede buscar archivos por propietario. tipo. El comando find realiza en tiempo real. Uso de Locate El comando /usr/bin/locate es un enlace simbólico para /usr/bin/slocate .gz /usr/share/man/man8/umount. fecha de modificación y otros criterios. algunas veces es necesario buscar un archivo específico en el sistema.8.8. sin embargo.4.0/fs/jfs/jfs_umount.

.png Uso de find El comando find se utiliza para buscar en el sistema de archivos archivos que cumplan con el criterio especificado.png /usr/share/aquarium/sherman/swordfish. ?.0/white-xifish.png /usr/share/doc/libvorbis-devel-1. si usted supiera que había una imagen PNG de un pescado en alguna parte del sistema. Buscar (directorio raíz) (criterios) (acción) El directorio predeterminado es ". el tamaño. pero una vez aprendida es muy útil. e incluso el conteo de enlaces (la única excepción es el contenido del archivo.png /usr/share/icons/Bluecurve/22x22/actions/babelfish. Si se diera un directorio como único argumento. el nombre.0/white-xifish. [blondie@station blondie]$ locate *fish. Para el cual debemos esperar por un comando llamado grep. criterios de búsqueda y una acción.png /usr/share/backgrounds/tiles/fish. el cual se complementa muy bien con find).. lo mismo se haría para ese directorio.png /usr/share/aquarium/sherman/blowfish. e imprimirá cada nombre de archivo.Observe que además de /bin/umount también hemos localizado el comando smbumount y varios archivos de páginas del manual.] como la shell bash. la expansión del nombre de ruta mediante las mismas expresiones *. Casi cualquier aspecto del archivo se puede especificar como por ejemplo.png /usr/share/icons/Bluecurve/16x16/actions/babelfish. y la acción por defecto es "imprimir" (el nombre de archivo).". Un comando find consta por naturaleza de tres partes: un directorio raíz (o directorios). Toma un poco de tiempo familiarizarse con la sintaxis del comando find.png /usr/share/doc/libogg-devel-1.png /usr/share/galeon/babelfish.png /usr/share/icons/Bluecurve/16x16/apps/sawfish. la última modificación. por lo tanto al ejecutar el comando find sin argumentos simplemente bajará el directorio actual. Por ejemplo. usted trataría de ejecutar el siguiente comando de localización. y [.png /usr/share/icons/Bluecurve/48x48/apps/sawfish. los criterios por defecto son "todo archivo". El comando de localización también soporta los "comodines de archivos" o más formalmente.png /usr/share/pixmaps/gnome-fish.png /usr/share/icons/Bluecurve/32x32/apps/sawfish. 114 .

Casi cualquier aspecto del archivo que el comando stat o el comando ls puedan reportar es parte del juego limpio.conf /etc/nsswitch..conf /etc/sysconfig/networking/profiles/netup/resolv. pero evita el problema de una base de datos "fuera de sincronización" Tenga en cuenta que si no se sigue el orden correcto.. descubrirá que se pueden especificar una cantidad abrumadora de criterios para su búsqueda. Criterios de búsqueda para el comando find 115 .conf /etc find: paths must precede expression Usage: find [path. Aunque superficialmente similar a las funciones de los comandos locate...conf /etc/sysconfig/networking/profiles/default/resolv. El siguiente cuadro resume algunos de los criterios de búsqueda más comunes.[madonna@station madonna]$ find /etc/sysconfig/networking/ /etc/sysconfig/networking/ /etc/sysconfig/networking/devices /etc/sysconfig/networking/devices/ifcfg-eth0 /etc/sysconfig/networking/profiles /etc/sysconfig/networking/profiles/default /etc/sysconfig/networking/profiles/default/network /etc/sysconfig/networking/profiles/default/resolv. la opción -name se utiliza para buscar archivos con un nombre dado (o nombre comodín). Por ejemplo. el comando find funciona realizando una búsqueda en tiempo real.conf /etc/X11/gdm/gdm.conf /etc/host. [madonna@station madonna]$ find /etc -name *. Esto puede tardar mucho más.conf find: /etc/sysconfig/pgsql: Permission denied /etc/X11/gdm/factory-gdm. en forma de opciones (no estándar).] [expression] Busque criterios Si usted navega la página find(1) del manual.conf /etc/modprobe.conf /etc/sysconfig/networking/profiles/default/hosts /etc/sysconfig/networking/profiles/default/ifcfg-eth0 /etc/sysconfig/networking/profiles/netup /etc/sysconfig/networking/profiles/netup/network /etc/sysconfig/networking/profiles/netup/resolv. por lo general el comando find se le da criterios para refinar su búsqueda. Table 1. el comando find se torna confuso rápidamente. [madonna@station madonna]$ find -name *.conf .conf /etc/sysconfig/networking/profiles/netup/hosts /etc/sysconfig/networking/profiles/netup/ifcfg-eth0 /etc/sysconfig/networking/ifcfg-lo No obstante.

todos los criterios deben cumplirse. El archivo pertenece al grupo gname. los cuales no tienen permiso de escritura para el grupo. Hay más opciones disponibles. El archivo tiene un tamaño de n. Los criterios pueden ser invertidos por los criterios anteriores con -not. en donde c es "f" (archivo regular).opción -empty -group gname -inum n -links n -mmin n -mtime n -nombre patrón -newer filename -permmode -perm -mode -perm +mode -size n -type c -user uname especificaciones El archivo es un directorio o un archivo regular y está vacío. Si hay múltiples criterios especificados. por defecto. reconoce los argumentos de la forma +3 (lo que significa mayor que 3). El archivo fue modificado hace n días. o "l" (enlace simbólico). pero con estas se puede dar una idea de la flexibilidad del comando find. El archivo es de tipo c. El archivo es de propiedad del usuario uname. El archivo tiene un número de inodo n. Los permisos del archivo son exactamente mode. un archivo por línea.. Vea la página del manual para encontrar mayor información. El archivo fue modificado hace n minutos. cualquier condición puede cumplirse. el nombre del archivo imprime en salida estándar. [elvis@station elvis]$ find /var -not -perm +20 /var /var/lib /var/lib/rpm /var/lib/rpm/Packages /var/lib/rpm/Basenames /var/lib/rpm/Name /var/lib/rpm/Group . Cualquier criterio que tome un argumento numérico tal como -size o -mtime. A manera de ejemplo. No obstante. El archivo fue modificado más recientemente que filename. si los múltiples criterios son separados por -or. ó 3 (significa exactamente 3). Cualquiera de los bits de permiso modese establecen para el archivo.. Table 1. "d" (directorio). El nombre del archivo coincide con el archivo comodín patrón. el siquiente comando busca todos los archivos bajo /var. El archivo tiene n enlaces. -3 (significa menor que 3). Las demás opciones se resumen en el siguiente cuadro. Especificaciones de acción para el comando find 116 . Buscar acciones Usted puede también especificar qué le gustaría hacer a los archivos que cumplen con los criterios especificados. Todos los bits de permisos mode se establecen para el archivo.

recordando lo siguiente. -ls Acción Ejecuta commanden archivos coincidentes.xml 34176 216 -rw-r--r-1 root root 215419 Apr 1 11:52 /etc/gconf/gc onf.xml. el comando más útil y sin duda más extraño de estos es -exec.xml 588723 456 -rw-r--r-1 root root 459213 Feb 24 18:41 /etc/gconf/sc hemas/metacity. Hay otras más.defaults/schemas/apps/metacity/window_keybindings/%gconf. tiene un significado especial para la shell y por lo tanto se debe "escapar" agregándole un \.schemas (El comando 2>/dev/null sirve para "botar " las quejas acerca de los directorios a los que madonna no tiene permisos de acceso).Opción -exec command . ejecuta los comandos arbitrarios. 117 . [madonna@station madonna]$ find /etc -size +200k -ls 2>/dev/null 228520 728 -rw-r--r-1 root root 738310 Jan 25 02:14 /etc/termcap 35154 296 -rw-r--r-1 root root 295168 Apr 1 11:52 /etc/gconf/gc onf. Quizás. y su primo cercano -ok. El comando debería escribirse después de la opción-exec.schemas Ahora. El mecanismo del comando -exec es extraño porque la sintaxis para especificar el comando es complicada. literal. pero prompt para cada archivo Imprime archivo en formato ls -dils. El comando debería terminarse con un . Consulte la página find (1) del manual.xml. utilizando un {} literal como parámetro para el nombre de archivo.schemas 591139 292 -rw-r--r-1 root root 290975 Feb 24 17:50 /etc/gconf/sc hemas/gnomemeeting. Igual que -exec. Para confirmar los tamaños de los archivos. [madonna@station madonna]$ find /etc -size +200k 2>/dev/null /etc/termcap /etc/gconf/gconf.defaults/schemas/apps/metacity/window_keybindings/%gconf.defaults/schemas/apps/metacity/general/%gconf. Suponga que madonna quería una copia de cada archivo mayor de 200 bytes del directorio /etc.xml /etc/gconf/schemas/metacity.xml. busca los archivos que cumplen con los criterios.schemas /etc/gconf/schemas/gedit. ella crea un directorio llamado /tmp/big y compone un comando cp en la línea de comando find. Veamos el siguiente ejemplo. ella vuelve a ejecutar el comando. Usa {}para indicar dónde debe sustituirse el nombre de archivo.schemas 588743 304 -rw-r--r-1 root root 304919 Feb 4 10:45 /etc/gconf/sc hemas/gedit. especificando la "acción" de -ls. pero como veremos en un cuaderno más adelante.schemas /etc/gconf/schemas/gnomemeeting.xml. • Coloque {} como parámetro para nombres de archivos coincidentes. -ok command . Primero. El mecanismo de -exec es un mecanismo poderoso: en lugar de imprimir los nombres de los archivos coincidentes.xml /etc/gconf/gconf. el .defaults/schemas/apps/metacity/general/%gconf.

png /usr/share/galeon/themes/Remembrance/Up-prelight.png /usr/share/galeon/themes/Remembrance/Stop.schemas [madonna@station madonna]$ [madonna@station madonna]$ 2>/dev /null [madonna@station madonna]$ %gconf.png /usr/share/galeon/themes/Remembrance/Up.png /usr/share/galeon/themes/Remembrance/Stop-prelight.schemas metacity.. el comando find copió los archivos en el directorio /tmp/ big.png /usr/share/galeon/themes/Remembrance/Print-prelight. locate muestra todo en la base de datos con la cadena "rmdir"incluyendo el comando y las páginas del manual.al /usr/share/doc/bash-2.• Termine el comando con un \.0/i386-linux-thread-multi/auto/POSIX/rmdir. El comando find muestra todos los archivos bajo el /bin que incluyen "dir" en el nombre.png 118 .schemas termcap En lugar de imprimir el nombre del archivo. Ejemplos Uso de locate Hay varias formas de hallar un archivo específico. mkdir /tmp/big find /etc -size +200k -exec cp {} /tmp/big \.png /usr/share/galeon/themes/Remembrance/empty-prelight.gz /bin/rmdir [blondie@station blondie]$ find /bin -name "*dir*" /bin/mkdir /bin/rmdir [blondie@station blondie]$ which rmdir /bin/rmdir En los ejemplos anteriores. el comando which muestra la ruta absoluta para un comando conocido.gz /usr/share/man/man2/rmdir. ls /tmp/big/ gnomemeeting..png /usr/share/galeon/themes/Remembrance/Print. /usr/share/galeon/themes/Remembrance/New.1.png /usr/share/galeon/themes/Remembrance/Refresh.png /usr/share/galeon/themes/Remembrance/empty.2. Por último.xml gedit.c /usr/share/man/man1/rmdir. [blondie@station blondie]$ locate rmdir /usr/lib/perl5/5..8. Usted también puede incluir los caracteres de expansión del nombre de archivo en su búsqueda: [blondie@station blondie]$ locate "*theme*png" .05b/loadables/rmdir.

bash_profile /home/elvis/. El ejemplo anterior no debería mostrar ninguna salida de dicho comando. [elvis@station elvis]$ find /home/elvis -name "*bash*" [elvis@station elvis]$ find /home/elvis -name ". 119 .gtkrc /home/elvis/somefile El comando find listará todos los archivos incluyendo todos los archivos ocultos cuando sólo se especifica un directorio de inicio.kde/Autostart /home/elvis/.emacs /home/elvis/. [blondie@station blondie]$ touch ~/locate_example_file [blondie@station blondie]$ locate locate_example_file Uso de find El comando find busca el árbol de directorios real desde el punto de inicio especificado. [elvis@station elvis]$ find /home/elvis /home/elvis/ /home/elvis/.bash_logout /home/elvis/.desktop /home/elvis/.Recuerde que el comando locate usa una base de datos y no localizará archivos que hayan sido creados desde la última modificación de la base de datos.kde/Autostart/Autorun.bash_logout /home/elvis/.*bash*" /home/elvis/.kde/Autostart/.bashrc /home/elvis/.kde /home/elvis/.bashrc El directorio de inicio para find pueden ser múltiples directorios de inicio. Sin embargo.directory /home/elvis/. es importante especificar si se van a buscar archivos ocultos.bash_profile /home/elvis/. cuando se está buscando el nombre de archivo.

[einstein@station einstein]$ find ~ -type l /home/einstein/docs /home/einstein/fd0 Genera con ls -l un listado de estilos de todo lo que no sea propiedad en el sistema de los usuarios root.db 42301 8 -rw-r----1 smmsp root 12288 Mar 4 /etc/mail/dom aintable. Pueden haber directorios donde el acceso de búsqueda sea negado por lo tanto.db 28204 12 -rw-r----1 smmsp smmsp 12288 Mar 16 /etc/aliases.. bin o student.. db 44276 2044 -rwxr-xr-x 1 rpm rpm 2083816 Sep 4 -not -user student 17:08 /etc/ntp 2002 2002 2002 08:17 08:17 08:18 08:18 15:36 2002 /bin/rpm 120 . 8037 1 drwxr-xr-x 2 ntp ntp 1024 Dec 22 8040 0 -rw-r--r-1 ntp ntp 0 Aug 31 /etc/ntp/step -tickers 8038 1 -rw-r--r-1 ntp ntp 4 Aug 31 /etc/ntp/drif t 8039 1 -rw------1 ntp ntp 266 Aug 31 /etc/ntp/keys 42299 8 -rw-r----1 smmsp root 12288 Mar 4 /etc/mail/vir tusertable. también redirige los errores a /dev/null para que no aparezcan en la pantalla. [elvis@station elvis]$ find / -not -user root -not -user bin -ls 2> /dev/null .db 42300 12 -rw-r----1 smmsp root 12288 Mar 4 /etc/mail/acc ess.[elvis@station elvis]$ find /bin /usr/bin -name "*dir*" /bin/mkdir /bin/rmdir /usr/bin/dir /usr/bin/dircolors /usr/bin/vdir /usr/bin/dirname /usr/bin/mdir /usr/bin/ttmkfdir /usr/bin/directomatic /usr/bin/pi-nredir Busca los enlaces simbólicos creados en el capítulo anterior.db 42302 8 -rw-r----1 smmsp root 12288 Mar 4 /etc/mail/mai lertable.

Al listar los archivos asegúrese de que cada nombre de archivo sea una referencia absoluta. Encontrará un número de mensajes de "Permiso denegados" cuando find trata de acceder de modo recursivo a los directorios.find.Uso de find para ejecutar comandos en archivos Busca todos los archivos que están bajo /tmp con el conteo de enlace mayor que 1 y hace una copia de cada uno en un directorio llamado /tmp/links. pertenecientes al usuario "games". No se preocupe por estos mensajes de error. Usted los puede suprimir añadiendo el comando 2> /dev/null a su comando find.big contiene un listado de estilos ls -dils de todos los archivos bajo el directorio /usr/bin mayores de 1000000 caracteres de tamaño. Puede que necesite consultar la página del manual find(1) para hallar respuesta a algunos de los problemas. Ejecute el comando file en cada archivo bajo /etc/sysconfig y registre la salida en el archivo sysconfig. 3. 4. para los cuales usted no tiene permiso. El archivo var. Deliverables A title Question 1 content_view let_ 1. [blondie@station blondie]$ linkfile newfile ls -l /tmp/*file blondie 0 Mar 17 22:33 blondie 0 Mar 17 22:33 /tmp/newfile mkdir /tmp/links find /tmp -type f -links +1 -exec cp {} /tmp/ ls /tmp/links Ejercicios en línea Ubicación de archivos Lab Exercise Objetivo: Diseñar y ejecutar un comando find que genere el resultado descrito en cada uno de los siguientes.rootmail contiene un listado de todos los archivos bajo el directorio /var. Especificaciones Use el comando find para buscar archivos coincidentes con los siguientes criterios y redireccione la salida a los archivos especificados en su directorio de inicio. 121 . El archivo varlib.Tiempo estimado: 20 minutos. [blondie@station blondie]$ -rw-rw-r-2 blondie /tmp/linkfile -rw-rw-r-2 blondie [blondie@station blondie]$ [blondie@station blondie]$ links \. El archivo bin. pertenecientes al usuario "root" y al grupo "mail". 2.games contiene un listado de todos los archivos bajo el directorio /var/lib.

el cual tiene un conteo de enlaces mayor a 100.5. El archivo big.links contiene un listado de nombres de archivos regulares bajo el directorio / usr/lib/locale. 122 .

se compensa entre la eficiencia de compresión y la actividad de CPU. Opción -c -d -r -1 . Las ventajas del ahorro de espacio y de amplitud de banda suelen superar el tiempo que toma para comprimir o descomprimir archivos. El comando bzip2 es más reciente y proporciona la compresión maś eficaz. Los archivos comprimidos con gzip se descomprimen con gunzip. es incluso posible que un archivo binario sea ¡más grande que el original! Utilidades estándares de compresión Linux Dado que se han desarrollado cada vez mejores técnicas de compresión. Además.Comprimir archivos: gzip y bzip2 Conceptos clave • • • La comprensión de archivos pocas veces ahorra espacio en el disco.gz) El comando gzip es la utilidad de descompresión más versátil y la que más se utiliza. -9 Efecto Redireccionar la salida a stdout Descomprimir en lugar de comprimir el archivo Ir de modo recursivo a través de subdirectorios. para compatibilidad retroactiva las utilidades de compresión aún se retienen. comprimiendo archivos individuales. Sin embargo. gzip (. A menudo. el comando gzip soporta las siguientes opciones.bz) El comando bzip2 es un recién llegado que tiende a generar los archivos comprimidos más compactos. La siguiente lista presenta las dos utilidades para comprimir más comunes que se utilizan en Linux y Unix. bzip2 (. Especificar la compensación entre la intensidad del CPU y la eficiencia de la comprensión. De hecho. Discussion ¿Por qué comprimir archivos? Los archivos que no se utilizan mucho con frecuencia se comprimen. Los archivos grandes también se comprimen antes de transferirlos a otros sistemas o usuarios. Los archivos de texto a menudo tienen patrones que se pueden comprimir hasta un 75% .. Los archivos comprimidos con bzip2 se descomprimen con bunzip2. pero utiliza la CPU de manera más intensiva. Algunas veces.. pero los archivos binarios rara vez comprimen más de un 25%. El comando más utilizado para comprimir es gzip. El comando bzip2 soporta las siguientes opciones. 123 . se han ganado nuevas utilidades de compresión. utilidades más antiguas son "suficientemente "buenas para hacer el trabajo en mucho menos tiempo.

bz2 [elvis@station elvis]$ [elvis@station elvis]$ 725K termcap ls -sh termcap bzip2 termcap ls -sh termcap* bunzip2 termcap. Copie los archivos /etc/gconf/schemas/gnome-terminal. Esta utilidad es compatible con las utilidades de DOS/Windows PKzip/Winzip y pueden comprimir más de un archivo en un archivo único.Opción -c -d Efecto Redireccionar la salida a stdout Descomprimir en lugar de comprimir el archivo Los ejemplos a continuación ilustran el uso y la eficiencia relativa de los comandos de compresión.schemas y /usr/bin/gimp dentro de su directorio de inicio. Por última vez.schemas y /usr/bin/gimp dentro de su directorio de inicio. Utilice el comando ls -s para comparar los tamaños de varias de las técnicas de compresión. Utilice el comando gzip para comprimir cada uno de los archivos recién creados. Esta vez. algo que los comandos gzip y bzip2 no pueden hacer. [elvis@station elvis]$ 725K termcap [elvis@station elvis]$ [elvis@station elvis]$ 234K termcap. conservando sus nombres de archivo originales. copie los archivos /etc/gconf/schemas/gnome-terminal. Nuevamente.schemas y /usr/bin/gimp dentro de su directorio de inicio. Ejercicios en línea Trabajar con las utilidades de compresión Lab Exercise Objetivo: Comprimir archivos grandesEstimated Time: 10 mins. Los usuarios de Linux y Unix prefieren usar los comandos tar ygzip juntos en lugar de zip.gz [elvis@station elvis]$ [elvis@station elvis]$ 725K termcap ls -sh termcap gzip termcap ls -sh termcap* gzip -d termcap ls -sh termcap* [elvis@station elvis]$ 725K termcap [elvis@station elvis]$ [elvis@station elvis]$ 185K termcap. Especificaciones 1. (el primero es un ejemplo de un archivo de texto grande. el segundo es un ejemplo de un archivo grande binario). 124 . utilice el comando bzip2 para comprimir los dos archivos. 3. 2. copie los archivos /etc/gconf/schemas/gnome-terminal. El comando tar se describe en la siguiente lección.bz2 ls -sh termcap* Otras utilidades de compresión Otra utilidad de compresión disponible en Red Hat Enterprise Linux es zip.

4.gz.schemas.schemas.gz. la versión con bzip2 degnome-terminal. /etc/gconf/schemas/gnome-terminal. El archivo gimp en su directorio de inicio.bz2. El archivo gnome-terminal.Deliverables A title Question 1 1. el cual es una copia de /usr/bin/gimp. la versión con gzip de gnome-terminal. 5.schemas. la versión comprimida con bzip2 de gimp. El archivo gimp.schemas. la versión comprimida con gzip de gimp. El archivo gimp. el cual es una copia de 2. 3. El archivo gnome-terminal.schemas.schemas en su directorio de inicio. El archivo gnome-terminal.bz2. content_view let_ 125 .

los archivadores de ficheros también se comprimen. Los archivos se crean. En Linux (y Unix). --extract -t. o si el árbol entero de directorios se transfiere de un lugar a otro. --create -x. Opción -c. el comando más común para crear y extraer archivos es el comando tar. Para mayor información consulte la página del manual tar(1). pero casi siempre uno de estos tres será suficiente. En un inicio. La aplicación fileroller proporciona una interfaz GUI para archivadores de ficheros. El archivo contiene el directorio y sus archivos y subdirectorios subyacentes. la estructura entera de directorio se convertía en un solo archivo.Archivar ficheros con tar Conceptos clave • • • • Al archivar ficheros se puede almacenar una estructura entera de directorio como un archivo único. El comando tar se deriva del inglés "t"ape "ar"chive. se debe seleccionar la primera línea del comando de las siguientes opciones. el comando tar se utiliza muy rara vez para escribir directamente en las cintas. Al hacer una copia de seguridad de un sistema de archivos. o algunas veces de un modo informal como "tarballs". A estos paquetes de archivos suele dárseles la extensión del nombre de archivo . "archivos tar". si un directorio y sus archivos subyacentes no se van a utilizar por un tiempo. se listan y se extraen con el comando tar. Conceptos básicos del comando Tar Cuando se ejecuta el comandotar. el usuario prince ha estado trabajando en un informe. los archivadores de ficheros fueron una solución para hacer una copia de seguridad de discos en cintas magnéticas. Discussion Archivadores de ficheros Con frecuencia. pero en su lugar crea archivadores de ficheros que a menudo se denominan "ficheros tar". A menudo. empacados como un solo archivo. Casi cada invocación del comando tar debe incluir la opción -f y su argumento.tar. extrayendo o listando. el cual se escribía directamente al controlador de cinta. --list Efecto Crear un archivador de ficheros Extraer un archivador de ficheros Lista el contenido de un archivador de ficheros Hay otros. el cual especifica el archivador de ficheros que se está creando. la gente convierte al árbol de directorios en un archivador. 126 . A manera de ejemplo. el cual involucra varios archivos y subdirectorios. Actualmente.

report/ |-.chap1.figures/ | `-. [prince@station prince]$ tar -c -f report.txt report/text/chap2.png report/html/chap1.tar El archivador de ficheros recién creado report. [prince@station prince]$ tar -t -f report.html | `-. Utiliza el comando tar.tar report/ report/text/ report/text/chap1. contiene ahora todo el contenido del directorio report y sus subdirectorios.txt report/html/ report/html/figures/ report/html/figures/image1.txt `-. prince extrae el archivador de ficheros en el directorio /tmp mediante el comando tar -x.html report/html/chap2. Con el fin de confirmar que el archivo fue creado correctamente.tar. 127 . prince lista el contenido del archivador del fichero con el comando tar -t (utilizando una vez más -f para especificar el archivador de fichero). especificando -c para "c"rear un archivo y utilizar la opción -f para especificar el archivador de ficheros que va a crear.image1. En lugar de adjuntar cada archivo de manera individual a un correo-e decide crear un archivador del directorio del informe. 5 files Le gustaría enviar por correo-e una copia del informe a un amigo.png `-.html/ | |-.html | |-.text/ |-.chap2.html Para confirmar una vez más.chap1.tar report [prince@station prince]$ ls -s total 24 4 report 20 report.txt 3 directories.chap2.

[prince@station prince]$ cd /tmp [prince@station tmp]$ tar -x -f /home/prince/report.txt figures Convencido de que el archivador de ficheros contiene el informe y que su amigo podrá extraerlo. el comando tar permite un atajo. limpia la copia de prueba y utiliza el comando mutt para enviar por correo-e el archivador a manera de anexo. usted no necesita incluir el guión inicial.tar [prince@station tmp]$ ls -R report/ report/: html text report/html: chap1.tar report/ report/text/ report/text/chap1.png report/text: chap1. Algo más acerca del comando tar La primera opción de tar debe ser una de las opciones especiales descritas anteriormente.png report/html/chap1.txt report/html/ report/html/figures/ report/html/figures/image1. [prince@station prince]$ tar cf report. [prince@station tmp]$ rm -fr report/ [prince@station tmp]$ cd [prince@station prince]$ mutt -a report.tar report [prince@station prince]$ tar tf report. Puesto que la primera es siempre una de las pocas opciones. Con frecuencia. • ¿Cuando se crean archivos. los usuarios con experiencia en ejecutar tar utilizan el modo abreviado de la línea de comando de la siguiente manera.html report/html/figures: image1.com No se preocupe si no está familiarizado con el comando mutt.html Crear archivos presenta una serie de preguntas complicadas tales como las siguientes. cómo se deberían manejar los enlaces? ¿Debo archivar el enlace? o ¿a qué se refiere el enlace? 128 .txt report/text/chap2.html chap2.txt chap2.tar -s "My Report" elvis@example.html report/html/chap2. Sólo sirve de ejemplo del porqué alguien podría querer crear un archivador tar.

¿Por qué sucede esto? ¿Qué sucede si prince vuelve y extrae el archivo? Efecto Cambia al directorio DIR sin / inicial desde los nombres de archivos Lista los archivos procesados internamente gzip el archivo internamente bzip2 el archivo 129 . El siguiente cuadro lista algunos de las opciones que se utilizan con más frecuencia a continuación explicaremos su uso. Podría ejecutar un comando como el siguiente (observe la inclusión de la opción -v que lista cada archivo a medida que se procesa).. lo que era una referencia absoluta para /etc/sysconfig/networking se convierte en referencias relativas dentro del archivo: Ninguna de las entradas tienen barras oblicuas iniciales. --absolute-reference -v.. --directory=DIR -P.tar /etc/sysconfig/networking tar: Removing leading `/' from member names etc/sysconfig/networking/ etc/sysconfig/networking/devices/ etc/sysconfig/networking/devices/ifcfg-eth0 etc/sysconfig/networking/profiles/ etc/sysconfig/networking/profiles/default/ etc/sysconfig/networking/profiles/default/network . Opción -C.• • Cuando extraemos los archivos como root. ¿quiero que todos los archivos pertenezcan a root o al propietario original? ¿Qué sucede si el propietario original no existe en el sistema en el que estoy desempacando el tar? ¿Qué sucede si el controlador de cinta magnética en el que estoy archivando no tiene más espacio cuando voy en la mitad del archivo? Las respuestas a estas y otras preguntas se pueden resolver con un abrumador número de opciones para el tar como tar --help o una mirada rápida a la página del manual tar(1) se lo mostrará. --gzip -j. [prince@station prince]$ tar cvf net. Como lo implica el mensaje inicial. --verbose -z. --bzip2 Referencias absolutas Suponga que prince desea archivar una instantánea de la configuración de la red de trabajo actual de su máquina.

cuando se extrae el archivo y "adicional" etc y etc/sysconfig son creados. Al construir el archivo. el archivador fue desempacado en el directorio local. el primer directorio "interesante" es el directorio networking. [prince@station prince]$ ls -R etc/ etc/: sysconfig etc/sysconfig: networking etc/sysconfig/networking: devices ifcfg-lo profiles etc/sysconfig/networking/devices: ifcfg-eth0 etc/sysconfig/networking/profiles: default netup etc/sysconfig/networking/profiles/default: hosts ifcfg-eth0 network resolv. la opción -C puede utilizarse para ayudar a establecer el contexto cambiando el directorio antes de que se construya el archivo. esta conducta se puede anular con la opción -P.. alguien tiene que abrirse camino.tar etc/sysconfig/networking/ etc/sysconfig/networking/devices/ etc/sysconfig/networking/devices/ifcfg-eth0 etc/sysconfig/networking/profiles/ etc/sysconfig/networking/profiles/default/ etc/sysconfig/networking/profiles/default/network etc/sysconfig/networking/profiles/default/resolv. Para obtener un directorio interesante.conf Dado que las entradas al fichero fueron relativas. Como regla. porque contiene los directorios y subdirectorios relevantes.[prince@station prince]$ tar xvf net. 130 . los archivadores de ficheros siempre desempacarán de modo local.conf etc/sysconfig/networking/profiles/netup: hosts ifcfg-eth0 network resolv. Establecer el contexto Al extraer el archivo anterior.conf . reduciendo la posibilidad de sobrescribir ficheros en el sistema al desempacar un archivo en ellos. Al construir un archivo.. Sin embargo. Compare los siguientes dos comandos tar.

tar /etc/sysconfig/networking tar: Removing leading `/' from member names etc/sysconfig/networking/ etc/sysconfig/networking/devices/ etc/sysconfig/networking/devices/ifcfg-eth0 etc/sysconfig/networking/profiles/ etc/sysconfig/networking/profiles/default/ etc/sysconfig/networking/profiles/default/network . Dado que las entradas al fichero fueron relativas. la opción -C puede utilizarse para ayudar a establecer el contexto cambiando el directorio antes de que se construya el archivo..tar.gz 28 /tmp/prince. Como regla.tar [prince@station prince]$ [prince@station prince]$ 28 /tmp/prince.tar -C /etc/sysconfig networking networking/ networking/devices/ networking/devices/ifcfg-eth0 networking/profiles/ networking/profiles/default/ networking/profiles/default/network .. [prince@station prince]$ tar cvf net. ls -s /tmp/prince. reduciendo la posibilidad de sobrescribir ficheros en el sistema al desempacar un archivo en ellos.tar. Al construir un archivo.tar.tar. cuando se extrae el archivo y "adicional" etc y etc/sysconfig son creados...tar. el comando tar proporciona tres opciones para comprimir internamente (o descomprimir) archivadores de ficheros.gz 131 .[prince@station prince]$ tar cvf net.tar gzip /tmp/prince. el archivador fue desempacado en el directorio local. prince pudo haber obtenido el mismo resultado al agregar la opción -z. el primer directorio "interesante" es el directorio networking.gz -C /home/prince . Establecer el contexto Al extraer el archivo anterior. esta conducta se puede anular con la opción -P. Para obtener un directorio interesante. los archivadores de ficheros siempre desempacarán de modo local. Sin embargo. porque contiene los directorios y subdirectorios relevantes. Arriba. [prince@station prince]$ tar czf /tmp/prince.tar -C /home/prince .gz Dado que los usuarios están a menudo creando y comprimiendo archivos o trantando con archivos que han sido comprimidos.tar ls -s /tmp/prince.gz tar cf /tmp/prince. [prince@station prince]$ [prince@station prince]$ 224 /tmp/prince. [prince@station prince]$ ls -s /tmp/prince. Al construir el archivo. Compare los siguientes dos comandos tar. alguien tiene que abrirse camino.

05b/ bash-2.kde/ ..kde/Autostart/ ./.bash_logout . Ejemplos Creación de un archivo tar El usuario einstein desea hacer una copia de la documentación de bash para poder llevarla consigo. 132 ./ .. [prince@station prince]$ tar tzf /tmp/prince.tgz -C /home/prince .05b/FAQ . ¿Qué sucede si trata un archivo comprimido como si fuera un archivo descomprimido? [prince@station prince]$ tar tf /tmp/prince.ms bash-2..desktop .05b/COMPAT bash-2..tgz.kde/Autostart/. [prince@station prince]$ tar czf /tmp/prince. extrae el archivo.bash_profile .directory .tgz -C /usr/share/doc/ bash-2.05b/CHANGES bash-2./. Es importante etiquetar los archivos con las extensiones de nombre de archivo apropiadas para que cualquiera sepa cómo desempacarlo.05b./.tgz Una vez pone el fichero en su nueva ubicación./.tgz tar: This does not look like a tar archive tar: Skipping to next header tar: Error exit delayed from previous errors Como el archivo estaba comprimido.tgz . debe descomprimirse (ya sea con la opción o con el comando de descompresión apropiados) antes de que el archivo pueda ser extraído o examinado. Pronto ejecuta tar en el directorio/usr/share/doc/bash-2. [einstein@station einstein]$ ls -s bashdoc.kde/Autostart/Autorun. [einstein@station einstein]$ tar cvzf bashdoc.La combinación de los comandos tar y gzip se encuentra tan a menudo. que la extensión de./.tgz 264 bashdoc.tar.05b bash-2./.gzsuele abreviarse como .05b/article.

el comando gzip) se quejó de la "basura de rastreo". formateando un disquete. pero ambas tienen un disquete. [maxwell@station maxwell]$ tar cvzf /dev/fd0 -C /etc openldap openldap/ openldap/ldapfilter.conf openldap/ldaptemplates.. trailing garbage ignored tar: Child died with signal 13 tar: Error exit delayed from previous errors Aunque el comando tar (o más exactamente. [maxwell@station maxwell]$ tar xvzf /dev/fd0 openldap/ openldap/ldapfilter.05b/FAQ bash-2.ms bash-2. para que el archivador de fichero fuera escrito byte por byte al disquete como datos crudos.[einstein@station einstein]$ tar xvzf bashdoc.05b/CHANGES bash-2.conf openldap/ldaptemplates. Ejecutar tar directamente en el disquete El usuario maxwell desea comparar rápidamente la configuración LDAP en dos equipos diferentes. el comando gzip sigue ejecutándose.05b/INTRO .05b/article. Esta es la "basura de rastreo" de la que el comando gzip se quejó. En lugar de crear un archivo. maxwelll decide ahorrarse unos cuantos pasos.tgz bash-2. ejecuta el siguiente comando. ¿Cuál era el nombre de archivo del archivador cuando estaba en el disquete? -¡Pregunta delicada! ¡Ay! 133 . Al extraer el archivador. ¿Qué sucedió aquí? El comando tar escribió directamente al nodo de dispositivo del disquete.05b/COMPAT bash-2. Con un disquete desmontado en el controlador.conf openldap/ldaptemplates. tratando de descomprimir lo que estaba en el disquete antes de que se escribiera el archivo. Las máquinas no están conectadas a la red. el archivo se extrajo con éxito. Sin embargo.conf gzip: stdin: decompression OK.conf openldap/ldap.05b/ bash-2. A continuación extrae el archivo en su directorio local.conf openldap/ldapsearchprefs. montando un disquete..conf openldap/ldapsearchprefs. el archivo completo se lee byte por byte.conf openldap/ldap.conf Luego retira el disquete y lo lleva a la segunda máquina. copiando el archivo y desmontando el disquete.

documentación para el paquete comprimido con zip ubicado en el directorio /usr/share/doc/ zip*. [einstein@station einstein]$ tar czf /tmp/einstein. era el largo tiempo de espera que se tomaba el comando tar para ejecutar. El archivo /tmp/student.El usuario einstein quiere crear un archivo de su directorio de inicio.Tiempo estimado: 15 minutos.bash_history home/einstein/einstein. En los "viejos tiempos" (no tan distantes). Ejercicios en línea Archivar directorios Lab Exercise Objetivo: Crear un archivo con el comando tar. Ensaya el siguiente comando. el comando tar es lo suficientemente inteligente como para detectar referencias circulares. En su directorio de inicio. cree el archivo zip_docs. era el mensaje de error que decía que el disco no tenía espacio.tgz ~ tar: Removing leading `/' from member names [einstein@station einstein]$ mv /tmp/einstein. el cual es un archivo comprimido con gzip de su directorio de inicio.tgz.tgz ~ tar: Removing leading `/' from member names home/einstein/ home/einstein/.tgz .. con student remplazado con su nombre de usuario.tgz. Esto obviamente causa problemas. Cree el archivo /tmp/student. el cual es un archivo de su directorio /usr/ share/doc/zip*.tgz. el cual es un archivo comprimido con gzip de su directorio de inicio. Afortunadamente. Especificaciones 1. 2. Remplace student con su nombre de usuario.tar. El archivador incluyó cada fichero en el directorio /home/einstein. el cual es un archivo de 2.tgz. y la segunda clave.kde/Autostart/ . 134 .tgz al archivador /home/einstein/ einstein.tgz: file changed as we read it tar: Error exit delayed from previous errors ¿Por qué el comando tar mostró un error? El archivador estaba siendo escrito en el fichero /home/ einstein/einstein. Deliverables A title Question 1 1.tar en su directorio de inicio. home/einstein/.kde/ home/einstein/. el comando tar trató de adjuntar el fichero /home/einstein/einstein. [einstein@station einstein]$ tar cvzf ~/einstein.tgz tar: /home/einstein/einstein. Por último. El archivo zip_docs. el primer signo de que algo andaba mal en situaciones como estas.. El directorio /tmp es muy útil. ¿Qué solución? Asegúrese que el archivador de ficheros que está creando no existe en el directorio que usted está archivando.

el contenido de un disco se sobrescribirá. Extraiga el archivo del disquete a su directorio de inicio. En el laboratorio. Possible Solution El siguiente comando es una solución para el paso 1 del ejercicio. Especifique el directorio usando una referencia absoluta. en donde el directorio se especificó como una referencia absoluta. Deliverables A title Question 1 1.. directamente en un disquete.Creación de un archivo crudo en un disquete Lab Exercise Objetivo: Crear un archivo directamente en un disquete. Escriba un archivo crudo. Deje el disquete en el controlador cuando haya terminado.. Especificaciones 1. Configuración El laboratorio requiere un disquete. Un disquete que contiene un archivo crudo comprimido con gzip del directorio /usr/share/doc/gzip*. [student@station student]$ tar cvzf /dev/fd0 /usr/share/doc/gzip-* 135 .. los directorios usr/share/doc/. los cuales fueron extraídos de su disquete.Tiempo estimado: 5 minutos. En su directorio de inicio. comprimido con gzip del directorio /usr/share/doc/gzip* 2.

la cual es la shell por defecto en Red Hat Enterprise Linux. todas siguen la misma conducta básica: escuchar los comandos del usuario. Otros rasgos. los scripts de shell suelen ejecutar una serie de comandos de modo no interactivo y muchas de estas características de la shell bash proveen una programación lógica (tales como ramas y bucles) para escribir scripts sofisticados. A diferencia de las shells interactivas. La shell bash no sólo es de fácil uso para tareas sencillas. Usted ya está familiarizado con el uso del comando bash como una shell interactiva. tales como el historial de comandos.The Bash Shell Introducción a Bash Conceptos clave • • • • La shell por defecto en Red Hat Enterprise Linux es la shell bash. Discussion La shell bash En Linux. que pronto veremos. La shell bash guarda el historial de las líneas de comando ejecutadas. Aunque hay una variedad de shells disponibles. trate de tener en la mente estos dos usos diferentes de la shell bash. Shells interactivas vs. iniciar procesos como se especifica en los comandos e informar los resultados al usuario. bash ejecuta comandos hallados en el archivo ~/. La shell es lo que usted ve cuando inicia sesión o cuando abre una terminal y lo que más usa para iniciar cada comando. Los scripts de shell permiten a los usuarios automatizar las acciones repetidas al combinar una serie de comandos. Scripts de shell La shell bash está diseñada para ser eficaz para dos tipos diferentes de uso. tales como la sustitución aritmética.500 líneas) para convencerse. son casi inútiles en los scripts de shell. la shell es el programa más utilizado. solo basta con dar un vistazo a la página bash del manual (que tiene mas de 4. La shell bash también está diseñada para ser un lenguaje de escritura de gran alcance. Al final de este cuaderno encontrará una introducción a la escritura de shell. Muchas de estas características de bash permiten a las personas escribir comandos de una manera más fácil y eficaz y gran parte de este cuaderno se enfocará en estas habilidades. pueden no parecer út¡les en la línea de comandos.bashrc. permitiéndole a los usuarios personalizar su shell. Al continuar a través de este cuaderno. sino también tiene capacidades de gran alcance para facilitar tareas complejas o incluso hacerlas posibles. La shell más utilizada en Linux es la shell bash. Esta eficacia trae consigo complejidad. Los scripts de la shell bash son programas pequeños escritos mediante la misma sintaxis que se utiliza en la línea de comandos. La líneas de comando se pueden recuperar desde el historial mediante varias expansiones de historial que comienzan por "!". pero pueden ser útiles en un script de shell. Algunas características de bash. La shell bash se puede utilizar de modo interactivo o como un lenguaje de escritura de gran alcance. Este cuaderno presentará muchas de estas capacidades de gran alcance. Si 136 . Tras el arranque.

una shell se inicia automáticamente. Shells de inicio En la práctica. nuevas shells pueden iniciarse desde la shell existente. Cuando se sale de la subshell. Sin embargo.bashrc Como parte de su inicialización. a veces los usuarios desearían ejecutar una shell diferente u otra instancia de la misma shell. Cada vez que alguien inicie sesión o abra una terminal. trate de verla en otro contexto.la utilidad de una característica de un bash no es de inmediato obvia. 137 . la shell bash "lee" el archivo. Cuando la shell inicia. los usuarios a veces necesitan iniciar una shell de modo manual. El archivo se emplea para personalizar la shell bash. las diferencias aparentes entre la subshell y la shell padre son mínimas y se debe tener cuidado de seguir el rastro de la shell en la que se encuentra. Dado que la shell es sólo "otro programa". madonna inicia una subshell bash. En el siguiente ejemplo. la shell bash buscará en el directorio de inicio del usuario un archivo titulado . Aquí. [madonna@station madonna]$ bash [madonna@station madonna]$ ps PID TTY TIME CMD 9750 pts/5 00:00:00 bash 9786 pts/5 00:00:00 bash 9814 pts/5 00:00:00 ps [madonna@station madonna]$ exit exit [madonna@station madonna]$ Cuando inicia una subshell bash. lista los procesos desde dentro de ésta para confirmar que las dos shells se están ejecutando y luego sale de la subshell. presentaremos rápidamente este sólo archivo para poder hacer uso de él en ejercicios posteriores. para que tras el arranque la shell bash se presente un calendario del mes actual. madonna edita su archivo ~/. A continuación. El archivo ~/. los comandos listados en el archivo se ejecutan como si fueran escritos en la línea de comandos. La nueva shell se denomina subshell de la shell original. el control vuelve a la shell original. Técnicamente.bashrc. Los conceptos relacionados con la lectura de archivos y la inicialización de shell se tratarán en detalle más adelante.bashrc agregándole el comando cal.

.bashrc .. /etc/bashrc fi cal La usuaria madonna agregó esta única línea. 138 . Las líneas restantes se encuentran en un archivo por defecto ~/.[madonna@station madonna]$ nano .bashrc # .bashrc de un usuario. el comando shell bash mantiene el historial de cada uno de los comandos escritos por el usuario y ofrece una variedad de formas para hacer que los comandos desde este historial estén a su alcance. La shell escucha al teclado de entrada y emplea la tecla de ENTER para reconocer el final de la entrada como en la siguiente ejecución del comando echo. cada vez que madonna inicia una shell bash (por ejemplo. [madonna@station madonna]$ bash August 2003 Su Mo Tu We Th Fr Sa -*// 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 [madonna@station madonna]$ exit Introducir Comandos Las shells interactivas repiten el ciclo de escuchar una línea de comandos. realizan todas las acciones solicitadas y muestran los resultados. Ahora. La forma más fácil de ver el historial actual es mediante el comandohistory. then . [madonna@station madonna]$ echo "hello world" hello world Historial de comandos Como conveniencia para los usuarios de shells interactivas.bashrc # User specific aliases and functions # Source global definitions if [ -f /etc/bashrc ]. [madonna@station madonna]$ cat . iniciando en una consola virtual o abriendo otra ventana de terminal). evalúan el comando solicitado. se presenta un calendario.. (madonna appends a single line containing the command "cal") ..

la cual se desencadena por el signo de exclamación. 139 . El siguiente cuadro resume la sintaxis de sustitución de historial más utilizada. El comando history va hasta el final de la lista. Podría entonces pulsar dos veces la tecla de dirección IZQUIERDA y RETROCESO para suprimir R de la línea de comandos seguido por la tecla ENTER.. si blondie quisiera luego ejecutar el comando ls -li. editar y ejecutar comandos tecleados anteriormente. Desde la línea de comandos. Mediante las teclas de flecha. analice la siguiente salida (abreviada) cuando blondie ejecuta el comando history. Por ejemplo. las teclas de dirección ARRIBA y ABAJO atraviesan pronto la lista de arriba a abajo. podría pulsar la tecla ARRIBA 5 veces y su intérprete de comandos llenaría con el comando ls -Rli. el comando history entrega un historial de los comandos previamente escritos. Sustitución de historial Como una alternativa a las teclas de dirección.. con cada entrada precedida por un "número de historial". los usuarios pueden rápidamente revisar. Table 1. mientras que las teclas de dirección IZQUIERDA y DERECHA moverán el cursor para permitir al usuario editar un comando dado.[blondie@station blondie]$ history 1 ls -l /home/ 2 ls -ln /home/ 3 exit 4 exit 5 id . 167 mv rhyme stuff/ 168 ls -Rli 169 exit 170 171 exit 172 history Como se muestra. la shell bash también realiza "sustitución de historial". Sustitución de historial bash Sintaxis !! !n !-n !cmd Sustitución Comando anterior Comando número n El comando más reciente n El comando más reciente que comienza por cmd A manera de ejemplo de la sintaxis anterior.

El número máximo de comandos que se escribrirán al salir en el archivoHISTFILE. 161 ls 162 ls -il 163 ln rhyme hard_link 164 ls -il 165 chmod 660 rhyme 166 ls -il 167 mv rhyme stuff/ 168 ls -Rli 169 exit 170 171 exit 172 history El siguiente cuadro lista lo que blondie escribiría en la línea de comandos y el comando resultante que ejecutaría. ¿Qué repercusión tienen estas shells interactivas múltiples (pertenecientes a un mismo usuario) al ejecutar al mismo tiempo? Puesto que el historial solo se ha guardado en el disco cuando la shell sale. 140 ..bash_history en un directorio de inicio del usuario. Si está establecido así. Table 1. la última shell al salir sobrescribirá las historias de las shells que salieron anteriormente. Línea de comandos !! !165 !-5 !mv Comando resultante historial chmod 660 rhyme ls -Rli mv rhyme stuff/ Conservar el historial entre sesiones No sólo el comando shell bash mantiene un historial de comandos dentro de una sesión.bash_history 1000 1000 Efectos El archivo en el cual el historial de comandos se guarda al salir y desde el cual se inicializa al arrancar. sino que también conserva los historiales de comandos entre sesiones. las siguientes variables configuran los detalles de cómo se guarda el historial de comandos.[blondie@station blondie]$ history . entrega el historial actual del comando dentro de un archivo llamado .. Variables del historial de comandos de shell bash Variable HISTFILE HISTFILESIZE HISTSIZE Valor predeterminado ~/. Cuando la shell bash sale. El archivo HISTFILE se truncará a este tamaño en el arranque. la shell inicializa el historial de comandos desde el contenido de este archivo. los comandos ejecutados en un proceso bash no están disponibles en el historial de comandos de un procesobash ejecutado simultáneamente. Además. Tras el arranque.

Después de ejecutar el programa. decide hacer algunos cambios.Trucos del historial de comandos La shell bash ofrece muy pocas técnicas para acceder previamente los comandos tecleados (o elementos del mismo). 141 . el nuevo texto se ejecutará de inmediato. fc El comando fc permite a los usuarios "arreglar" el comando escrito anteriormente al abrir el editor por defecto del usuario (por defecto vi) con el comando anterior escrito como texto. la shell bash continuará el ciclo a través de los últimos símbolos de las primeras líneas de comando. El último símbolo de la línea de comandos tecleados anteriormente puede recuperarse con cualquiera de las dos secuencias de teclas mencionadas anteriormente. Ejemplos Uso del historial de comandos para acortar el ciclo "editar/compilar/ejecutar" Con frecuencia. Para aquellos expertos en salir del editor rápidamente. Una vez aprendido. alguien podría hacer un directorio y enseguida ejecutar cd en éste o editar un archivo e inmediatamente querer utilizar chmod para cambiar sus permisos. Hace entonces uso del historial de comandos para agilizar el proceso. este truquito suele ser muy útil. el comando es muy útil. madonna edita un archivo que contiene un programa pequeño C y luego lo compila con el compilador C gcc. El texto tecleado después de CTRL-R coincide con los comandos tecleados anteriormente con la ventaja de que las líneas de comandos coincidentes se ven de modo inmediato al teclear el texto. Tras salir del edtor (presumiblemente después de editar de alguna forma el comando). A continuación. Usted también tiene la oportunidad de editar la línea recuperada (utilizando las teclas de dirección IZQUIERDA y DERECHA u otros golpes de teclado de edición de líneas de comando) antes de ejecutar el comando. y ALT-. El último simbolo de un comando suele representar el objeto que alguien está manipulando. ESC-. los programadores de lenguajes compilados tales como C suelen hallarse en un ciclo repetitivo: editar un archivo. CTRL-R Esta secuencia clave imita a !cmd en espíritu. Por ejemplo. Si la secuencia clave se repite. compilarlo y luego ejecutar el programa.

h" int main(void) { printf("hello world\n").> ls <ESC-.> mv hello <ESC-..[madonna@station madonna]$ nano hello.0/HTML/..> Quizas no es el ejemplo más interesante porque bin es un directorio muy pequeño para teclear de todas maneras.c #include "stdio.c #include "stdio.c (. replacing the string "hello world" with "hello dolly" .c [madonna@station madonna]$ . para agilizar el proceso. Uso de ESC.c [madonna@station madonna]$ !. .) [madonna@station madonna]$ !c cat hello.c [madonna@station madonna]$ cat hello. los golpes de teclado grabados serían impresionantes. return 0./hello hello world [madonna@station madonna]$ !n nano hello... Usa la secuencia de teclas ESC-./hello hello dolly Observe que la shell bash imprime el comando seleccionado desde el historial de madonna antes de ejecutar el comando.h" int main(void) { printf("hello dolly\n").8. 142 . madonna edits the file. } [madonna@station madonna]$ gcc -o hello hello. } [madonna@station madonna]$ !g gcc -o hello hello. Sin embargo. establece sus permisos para que sólo ella pueda acceder a éste y mover su archivo ejecutable hello en él. return 0. [madonna@station [madonna@station [madonna@station [madonna@station hello madonna]$ madonna]$ madonna]$ madonna]$ mkdir bin chmod 700 <ESC-. Ahora madonna quisiera crear un subdirectorio bin. si hubiera sido el directorio /usr/lib/perl5/ven or_perl/5.

bash_history [madonna@station madonna]$ ls -l .Estimated Time: 10 mins.bashrc modificado que agregue una marca de tiempo al archivo . un . Observe el archivo . Use un editor de texto para modificar el archivo . agregando la siguiente línea al final del archivo.bashrc desde su directorio de inicio. 143 .bash_timestamps cada vez que se inicie una shell bash. [madonna@station madonna]$ rm .bashrc para mantener un registro de cuándo se inician las shells.bash_history lrwxrwxrwx 1 madonna madonna 9 Aug 26 16:35 .bash_history [madonna@station madonna]$ Madonna ahora puede usar el historial de comandos de bash para recuperar los comandos utilizados en la shell actual. date >> . y confirme si se agrega una nueva marca de tiempo 2.bash_timestamps 1.bashrc debe también contener una línea de comentario que incluya su nombre de usuario.bash_timestamps.Inhibición del historial de comandos Madonna es desconfiada y preferiría que su historial de comandos fuera almacenado en el disco al salir de la shell. mediante un editor de texto. Deliverables A title Question 1 En su directorio de inicio. Ejercicios en línea Lab Exercise Objetivo: Personalizar su archivo ~/. agregue una línea de comentario a su archivo .bash_history -> /dev/null [madonna@station madonna]$ cat . cada vez que inicia una nueva shell bash. Especificaciones 1. El archivo . De nuevo. pero ningún historial de comandos se almacenará entre las instancias de shell.bash_history [madonna@station madonna]$ ln -s /dev/null . Suprime su archivo del historial y crea un enlace blando con el mismo nombre que apunta al nodo de dispositivo /dev/null.bashrc que describa brevemente por qué el comando de fecha fue agregado e incluya su nombre de usuario como la persona que hizo la modificación.

README-OBSOLETE xinit xkb Xmodmap Xresources xserver xsm La única diferencia entre los dos enfoques es que no se tiene la oportunidad de examinar el efecto del primer comando antes de que el segundo comando se ejecute. las frases independientes se separan con un punto y coma). La variable de shell $? se expande al valor de retorno de un comando ejecutado previamente. Ejecución de comandos en una subshell La shell bash permite a los usuarios la fácil ejecución de comandos en una subshell.works XftConfig.conf X11]$ xorg. cada comando devuelve un entero a su padre denominado valor de retorno.README-OBSOLETE xinit xkb Xmodmap Xresources xserver xsm El efecto es idéntico al escribir comandos en líneas separadas. Discussion Ejecución de comandos múltiples La shell bash permite a los usuarios unir comandos múltiples en una sola línea de comandos separando los comandos con un . pero suele ser conveniente combinar los comandos. [elvis@station [elvis@station applnk desktop-menus fs gdm lbxproxy [elvis@station elvis]$ cd /etc/X11 X11]$ ls prefdm sysconfig proxymngr twm rstart X serverconfig xdm starthere xorg.wbx xorg.backup xorg. && y || separan condicionalmentecomandos múltiples. Considere el siguiente ejemplo: 144 ...conf. Tras la salida. Veamos un ejemplo: [elvis@station applnk desktop-menus fs gdm lbxproxy [elvis@station elvis]$ cd /etc/X11. Muy pocas veces existe la necesidad real de ejecutar comandos múltiples desde una solo línea de comandos. delimitando el comando entre paréntesis.conf.Listas de comandos y scripts Conceptos clave • • • • Comandos múltiples se pueden separar con un .conf. ls prefdm sysconfig proxymngr twm rstart X serverconfig xdm starthere xorg. (en inglés es igual.conf.conf.conf X11]$ xorg.works XftConfig.wbx xorg.backup xorg.conf.

¿Por qué podría alguien desear ejecutar un comando en una subshell? Las subshells se utilizan para evitar efectos secundarios. se sale de la subshell.conf. En el ejemplo anterior.conf. Las secciones anteriores ilustraron la manera de encadenar comandos para ejecutar de modo consecutivo o simultáneo en lugar de esperar a que el comando termine 145 .conf. [elvis@station [elvis@station applnk desktop-menus fs gdm lbxproxy [elvis@station exit [elvis@station elvis]$ bash elvis]$ cd /etc/X11. Un buen administrador de Linux debe ser en realidad extremadamente perezoso cuando se trata de hacer algo aburridor o repetitivo. cuando los comandos se separan apenas por un punto y coma. Lo que suceda en la subshell no debería tener efecto en el entorno original de la shell (como en inglés. El efecto es parecido a la siguiente secuencia de comandos. ls prefdm sysconfig proxymngr twm rstart X serverconfig xdm starthere xorg.backup xorg.README-OBSOLETE xinit xkb Xmodmap Xresources xserver xsm La subshell se inicia manualmente al ejecutar el comando bash.conf xinit elvis]$ xkb Xmodmap Xresources xserver xsm A primera vista.README-OBSOLETE starthere xorg. la conducta parece idéntica a la del ejemplo anterior.wbx xorg. ls) prefdm sysconfig xorg. En el primer ejemplo.works serverconfig xdm XftConfig.works XftConfig. éste genera un nuevo proceso hijobash (llamado subshell) y ejecuta los comandos dentro de la subshell. al delimitar los comandos entre paréntesis. Después de ejecutarlos. después de ejecutados los comandos. la shell del directorio de trabajo actual ha cambiado a /etc/X11 como resultado del comando cd. El intérprete de comandos de bash revela que.[elvis@station applnk desktop-menus fs gdm lbxproxy [elvis@station elvis]$ (cd /etc/X11.conf. Los comandos se ejecutan ahora en la subshell.conf X11]$ exit elvis]$ xorg.backup proxymngr twm xorg.wbx rstart X xorg.conf. Cuando bash encuentra un paréntesis en la línea de comandos. Introducción a los scripts de shell La clave para usar Red Hat Enterprise Linux de modo efectivo es la automatización. Al terminar. Ahora que elvis está de nuevo en su shell original.conf. los comandos se ejecutan en la shell actual. las modificaciones en la subshell (tales como el cambio en el directorio de trabajo actual) han quedado atrás. el directorio de shell actual no cambia. Una mirada más de cerca revela una diferencia sutil pero importante. lo que está entre paréntesis no debe cambiar la frase que lo rodea). la subshell sale y el usuario queda en la shell original (shell sin cambios).

pero todos los usuarios tienen un bin personal. Para resolver este problema tiene dos alternativas: 1. 2. por ejemplo. También le introdujeron a las características del historial de bash y le mostraron cómo referirse a comandos tecleados previamente para que sólo tenga que escribirlos una vez. eso es todo) pero mientras esto proporciona un buen resumen de quién ha iniciado sesión. aún falta una parte importante de la caja de herramientas del administrador del sistema: la escritura de scripts. aprenderá más acerca de la RUTA en capítulos siguientes./foo. Veamos un simple ejemplo. Suponga que creó un script llamado wdate." siempre se refiere al directorio actual). Este intérprete suele ser la shell bash (conocida como /bin/bash o /bin/sh) y cada comando es un comando común de Linux. Esto se hace con una cadena especial llamada "shebang" (pronunciada "shuh-bang"). Sin embargo.sh (". La mayoría de los scripts sólo usan #!/bin/sh.. A la shebang le sigue un nombre de un intérprete para este script. usted debe habilitar el permiso "ejecutable" en él (de lo contrario. pero no la información del usuario. para usar bash como su intérprete usted debería usar #!/bin/sh o #!/bin/bash. Otro comando. en su forma más simple. El comando para esto es chmod u+x <scriptname>. si foo. Los comandos se envían a través de un programa específico llamado intérprete. Suponga que usted es un administrador que necesita ver con frecuencia qué usuarios han iniciado sesión en el sistema. su RUTA nunca incluye el directorio actual. es un texto con una lista de comandos en él. Esto se debe a que cuando teclea un comando hay una serie de directorios en donde Linux busca ese comando. Un script. Le otorga (y sólo a usted) permiso para ejecutar este script justo como usted haría con otro comando. llamado date imprime la fecha y hora actual. el cual ejecuta un comando a la vez. Por lo tanto. Python y Ruby.sh en su directorio personal bin: • • 146 . al cual pueden escribir en su directorio de inicio. la cual se ve así: #!. Así. Los usuarios que no son root no tienen permiso para colocar archivos en la mayoría de estos directorios. no imprime la hora en la que se tomó esta instantánea de la actividad del usuario. es sólo un archivo de texto). El comando chmod se tratará en detalle más adelante en esta clase.sh en la línea de comandos. Esta información puede obtenerse al ejecutar el comando w (sí. Al referirse al intérprete como #!/bin/bash se habilitan otras características. Antes de ejecutar un script.sh fuera movido a ~/bin se podría ejecutar al teclear simplemente foo.sh o . Otros intérpretes permiten utilizar lenguajes de programación de gran alcance como Perl.antes de teclear el próximo. pero se limita la compatibilidad del script con los sistemas antiguos de Unix y rara vez es necesario. Puede colocar el script en un directorio que sea parte de su RUTA..sh obtendría el mensaje de error "no existe tal directorio o archivo". Si solo usted pudiera combinar esos dos comandos. Estos directorios se conocen colectivamente como su RUTA y.sh en su directorio de inicio y justo después tecleó foo. Antes de comenzar a escribir sus propios scripts hay algunas cosas importantes que recordar: • La primera línea de su script debe especificar a qué intérprete enviar las instrucciones. Si creó un script llamado foo. Usted puede especificar de modo explícito la ubicación del script al teclear ~/foo. por razones de seguridad. Esta es la técnica preferida.

pero observemos que el valor de esta variable (por ejemplo.sh Thu Jul 14 12:13:54 PDT 2005 12:13:54 up 2 days. A menudo. Dado que el comando "funciona". y el proceso recién nacido el hijo. no hemos descrito aún todas las variables de shell (eso sigue luego).00s 2.sh #!/bin/sh date w [student@station ~]$ chmod u+x ~/bin/wdate. El material complementario de esta lección describe técnicas avanzadas para scripts y pueden habilitarse a discreción de su instructor.[student@station ~]$ cat ~/bin/wdate. concéntrese en dominar los scripts básicos como una valiosa técnica de almacenamiento. El proceso padre es responsable de reunir los valores de retorno de los hijos muertos.19s 0. 0. y luego elige morir.06s /bin/bash student tty2 :0.sh [student@station ~]$ wdate. En contraste. (si no está familiarizado con el comandodiff. llamado el valor de retorno del proceso o estatus de salida.¡haga un script! Valores de retorno Cada proceso en Linux tiene un ciclo de vida. los scripts pueden ser mucho más eficaces que apenas una lista de comandos y pueden ser programas complejos en su propio derecho. los siguientes ejemplos /etc/passwd [elvis@station elvis]$ ls -l muestran cómo responde el comando ls al listar un archivo -rw-r--r-1 root root 3694 Aug 15 16:26 /etc/passwd [elvis@station elvis]$ echo $? 0 147 . este script podría luego modificarse para ejecutar un número arbitrario de comandos seguidos. el valor de retorno del programa ejecutado antes). Una convención de Linux (y Unix) es que un programa devuelve en 0 para implicar "éxito" en lo que estaba intentando hacer. Los programas pueden escoger líbremente el valor al salir [1]. Por ahora. el comando ls devuelve un valor de retorno de 0. De hecho. Al ejecutar date seguido por w. La regla de oro del administrador es que si usted tiene que hacer una tarea más de dos veces.00s /bin/sh / home/student/bin/wdate. 12:50. lo que significan las implicaciones por valores de retorno son parte de una interfaz de un programa bien definido y están documentadas en la página man del programa. y un valor de retorno de no cero que implica algun tipo de error. El proceso hijo suele realizar sus deberes (incluyendo generar sus propios hijos).0 Tue17 0. La shell bash almacena el valor de retorno del comando ejecutado anteriormente en una variable especial llamada ?.sh [student@station ~]$ Observe que el script había sido colocado en ~/bin y era ejecutable antes de ejecutarse como un comando normal. Todos los procesos comienzan a solicitud de otro proceso (a menudo shell). load average: 0. 0. Los valores de retorno vienen en forma de enteros los cuales van de 0 a 255. puede examinarse con el comando echo $?. En el siguiente ejemplo.35. 8 users.18 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT student_a tty1 Mon23 ?xdm? 2:43m 3.27. Infortunadamente. ¡nos da dos comandos por el precio de uno! Obviamente. El proceso solicitado se denomina padre. la sección de "DIAGNÓSTICO" de su página del manual ofrece un ejemplo). el comando ls se utiliza para examinar los permisos del archivo /etc/passwd. Un proceso de salida deja atrás una pequeña parte de información cuando muere.

En el siguiente ejemplo.txt [elvis@station elvis]$ mkdir /tmp/boring && mv numbers. Los dos comandos pueden acoplarse de la siguiente forma. bash no trató de ejecutar el comando mv. el segundo comando sólo ejecutará el primer comando que tuvo éxito (por ejemplo. [elvis@station elvis]$ echo "one two three" > numbers. generalmente se puede asumir esta conducta. ¿Qué sucedería si el comando mkdir fracasara? [elvis@station elvis]$ echo "one two three five seven eleven" > primes. devolvió un valor de retorno de 1.[elvis@station elvis]$ ls -l /etc/password ls: /etc/password: No such file or directory [elvis@station elvis]$ echo $? 1 Dado que el comando "no funcionó".txt [elvis@station elvis]$ mkdir /tmp/mostly/boring && mv primes. elvis intenta cambiar los permisos en un archivo. es una conducta normal. El segundo comando puede que se ejecute o no dependiendo del valor de retorno del primer comando. 148 . Si la creación del directorio fracasa. el comando mkdir tuvo éxito y luego el archivo se movió.txt Dado que el comando mkdir fracasó (el directorio /tmp/mostly no existá. bash ejecutará el segundo comando sólo si el primer comando "fracasa"(tiene un valor de retorno diferente a cero). Si una página man del programa no menciona otra cosa. por lo tanto el directorio /tmp/mostly/boring no se pudo crear). Esto es similar a la operación "and" que se encuentra en varios lenguajes de programación.txt /tmp/boring [elvis@station elvis]$ ls Al acoplar los dos comandos con &&. En el ejemplo anterior. Si el comando fracasa. Devolver un 0 de éxito y un 1 cuando se presenta cualquier tipo de error. un mensaje para ese efecto se imprime en la pantalla. un usuario puede desear crear un directorio y luego mover un nuevo archivo dentro de ese directorio. tuvo un valor de retorno de 0).txt /tmp/mostly/boring mkdir: cannot create directory `/tmp/mostly/boring': No such file or directory [elvis@station elvis]$ ls primes. los comandos múltiples pueden combinarse con ||. Ejecución de comandos múltiples de modo condicional La shell bash usa &&y || para unir dos comandos de modo condicional. Esto es igual al operador "or" que se encuentra en lenguajes de programación. En este caso. el primero siempre se ejecutará. Por ejemplo. Cuando los comandos se unen de este modo. entónces no hay razón para mover el archivo. Igualmente.

el comando chmod fracasó (porque el archivo no existía) y apareció el mensaje "chmod failed" (aparte del mensaje de error estándar de chmod).txt || echo "chmod failed. la variable de bash ? contiene 1." [elvis@station elvis]$ chmod 600 /tmp/mostly/boring/primes. éste contenía el valor de retorno (sin éxito) del comando ls. Crea un archivo en el directorio de inicio llamado reminders con el texto brush your teeth y agrega la siguiente línea a su archivo ~/. se da cuenta que ahora contiene un 0. Visualización de recordatorios El usuario ahora quiere desarrollar un esquema en donde pueda dejar recordatorios y que automáticamente aparezcan al iniciar una shell.txt': No such file or directory chmod failed En el primer caso. Después de ejecutar (sin éxito) el comando ls. ¿Qué hizo cambiar el valor? [elvis@station elvis]$ ls -l /etc/password ls: /etc/password: No such file or directory [elvis@station elvis]$ echo $? 1 [elvis@station elvis]$ echo $? 0 Recuerde que la variable de bash ? contiene el valor de retorno de los comandos ejecutados más recientemente. Al examinar la variable otra vez. cat /home/elvis/reminders Luego prueba su configuración de modo manual iniciando una nueva shell bash.bashrc. el comando chmod tuvo éxito.[elvis@station elvis]$ chmod 600 /tmp/boring/numbers. como era de esperar. 149 . Ejemplos Echoing $? twice El usuario elvis acaba de aprender sobre los valores de retorno. En el primer caso. En el segundo caso. éste contenía el valor de retorno del comando echo (con éxito). encuentra que.txt || echo "chmod failed" chmod: failed to get attributes of `/tmp/mostly/boring/primes. y no se imprimió ningún mensaje. y está examinando los valores de retorno de varios comandos. En el segundo caso.

[elvis@station elvis]$ echo "brush your teeth" > reminders [elvis@station elvis]$ nano . Agregue una sola línea al final del archivo . hasta que elvis sigue su consejo de limpieza y borra su archivo reminders. pero aún no hemos aprendido lo suficiente para hacerlo. porque el archivo reminders existe.bashrc [elvis@station elvis]$ cat .bashrc con lo siguiente: ls reminders > /dev/null && cat reminders Ahora el comando cat sólo se ejecutará si el comando ls tiene éxito. then .bashrc # User specific aliases and functions # Source global definitions if [ -f /etc/bashrc ]. La próxima vez que inicia una shell se encuentra con lo siguiente: [elvis@station elvis]$ bash cat: reminders: No such file or directory [elvis@station elvis]$ Dándose cuenta que le gustaría ejecutar el comando cat sólo si el archivo reminders existe.) Si se implementa correctamente. al iniciar una nueva shell debería ver una salida similar a la siguiente: 150 . /etc/bashrc fi cat reminders [elvis@station elvis]$ bash brush your teeth [elvis@station elvis]$ exit exit [elvis@station elvis]$ Todo parece funcionar bien.bashrc en su directorio de inicio. el directorio de trabajo actual de su shell no se afectará.bashrc # .Estimated Time: 10 mins. edita la línea que agregó a su archivo .) Ejercicios en línea Lab Exercise Objetivo: Ejecutar comandos dentro de una subshell. Especificaciones 1. (¿hay una mejor forma de hacer esto? Sí. (al ejecutarla. La línea debe ejecutar los comandos cd /usr y ls en una sola subshell .

bashrc al estado original. Limpieza Una vez obtenga la calificación. 151 .bashrc cuya última línea ejecute los comandos cd /usr y ls en una sola subshell. restaure su archivo ~/. Un archivo ~/.[elvis@station elvis]$ bash bin etc include lib dict games kerberos libexec [elvis@station elvis]$ local sbin share src tmp X11R6 Deliverables A title Question 1 1.

Esto se llamadesreferenciar la variable A. Las shells hijas heredan las variables de entorno como cuando se lanza una terminal después de iniciar sesión. [prince@station prince]$ A=apple Si usted sigue. el cliente de correo electrónico mutt ejecuta un editor externo al escribir un mensaje. Por ejemplo. iniciando la variable con el signo ($). ver a continuación). respectivamente. ¿Qué sucede si prince. luego hablaremos acerca de cómo definir variables de entorno incluyendo la bash misma. Las variables se examinan ("desreferencian") con el caracter $ como en echo $A. entonces el comando definido por EDITOR se utiliza en lugar de vi. En el nivel de kernel. [prince@station prince]$ echo $A apple La variable se puede utilizar en cualquier parte de la línea de comandos (o en los scripts de shell). Sin embargo. Discussion Conceptos básicos de la variable de shell La shell bash le permite a los usuarios establecer y hacer referencia a las variables de shell. El configurar las variables locales es bastante sencillo.Variable de bash Conceptos clave • • • • • Las variables de la shell se asignan mediante una sintaxis A=apple. Las variables de shell se pueden utilizar en comandos y scripts de shell y pueden también referenciarse en programas como opciones de configuración. Primero. veremos cómo definir una variable local. cada proceso tiene una colección de variables de entorno que los procesos hijos heredan. decidiera escribir unas cuantas líneas acerca de las 152 . asegúrese de no dejar ningún espacio a los lados del signo =. Cada vez que prince quiera usar el valor "apple". prince establecerá la variable A con el valor apple. Una variable de shell es simplemente un valor con nombre que la shell recuerda. Por defecto este editor esvi. Los comandos set y env listan las variables de shell y las variables de entorno. en lenguaje colorido. El comando export convierte una variable de shell en una variable de entorno. Hay dos tipos de variables de shell: variables locales y variables de entorno. Una variable local existe solo dentro de la shell en la cual se crea. antes de ejecutar vi comprobará si una variable llamadaEDITOR se ha establecido. puede usar la variable A en su lugar. La mayoría de los programas que lanzan editores externos funcionan del mismo modo. En el siguiente ejemplo. como en el comando echo mostrado abajo. Si se ha establecido. Ahora la shell se "cuelga"a esta asociación por todo el tiempo que exista la shell (o hasta que se anule explícitamente.

Pero esto no es lo importante. con resultados esperables. sin dejar espacios. como se muestra a continuación. pero no pueden comenzar por un número. remplazó $A por apple. y el guión bajo (_). ¿Cuál puede ser el valor de la variable? Cualquier cosa. la shell remplaza la referencia $b con nada. a-z. el cual establece la variable name sólo para la ejecución del comando especificado. [prince@station prince]$ B=banana [prince@station prince]$ echo $B is my favorite fruit banana is my favorite fruit [prince@station prince]$ echo $b is my favorite fruit is my favorite fruit En el primera impresión en pantalla. El truco se presenta en la asignación. la sintaxis es nombre=valor.txt [prince@station prince]$ ls ode_to_apple. las variables suelen definirse con mayúsculas. Detalles de la variable de shell ¿Qué puede utilizarse como nombres de variables? Los nombres de variables pueden ser cualquier cadena de caracteres alfanuméricos (A-Z. $B fue remplazado por el valor banana.txt. debe incluir el valor entre comillas.manzanas (o apples en inglés) y las almacenara en un archivo llamado ode_to_apple. Dado que b se considera como una variable diferente a B. ¿Qué sucedería si prince quisiera que la variable FRUIT apuntara a la frase mushy bananas? [prince@station prince]$ FRUIT=mushy bananas -bash: bananas: command not found Nos hemos tropezado con una sintaxis avanzada para configurar las variables. lo importante es que si quiere establecer una variable a un valor que contenga espacios. ¿Cómo fue desreferenciado $b? Si se le pide a la shell desreferenciar una variable no establecida. con nada). Las variables se establecen y se configuran con una sintaxis VAR=valor y se desreferencian con una sintaxis $VAR.txt Cuando la shell bash examinó la línea de comandos. y que la variable b nunca ha sido asignada. pero esto no es más que protocolo. Cuando se asignan las variables. Las variables de shell distinguen mayúsculas de minúsculas. La siguiente línea podría ayudarlo a empezar: [prince@station prince]$ echo "Oh. 0-9). Por protocolo. I like them squishy" >> ode_to_$A. 153 . es decir nombre=valor comando. Estos son los conceptos básicos de las variables de shell. La shellbash obedientemente estableció la variable FRUIT en el valor mushy y fue a ejecutar el comando bananas. ésta remplaza la referencia de la variable con una cadena vacía (en otras palabras.

prince obtiene la conducta correcta desde la shell bash.bashrc .txt Oh. Al terminar con una variable. así como ls -a lo revela.txt. [prince@station prince]$ ls -a . Cuando se desreferencian las variables. en el mismo directorio como se muestra arriba.viminfo .bash_profile .bash_history . [prince@station prince]$ unset A [prince@station prince]$ echo $A [prince@station prince]$ 154 . si no la gramática inglesa correcta.txt ¿Dónde está el archivo apple_ode.xauthizv2EF El usuario prince puede salir de esta situación utilizando corchetes para delimitar el nombre deseado de la variable. [prince@station prince]$ echo "Oh. pero no el que prince quería. En segundo lugar. Por ejemplo. si es necesario. I like them squishy" > ${A}_ode.txt [prince@station prince]$ ls ode_to_apple.gtkrc .gnupg .bash_logout .txt? El ensaya el primer método obvio. . [prince@station prince]$ echo $A apple [prince@station prince]$ echo "Oh. la shell bash desreferenció el nombre correcto de variable. La shell bash apuntó a la variable (sin inicializar) A_ode (a nada) y creó el archivo resultante . debido a que .. es necesario.pgpkey [prince@station prince]$ cat .kde .[prince@station prince]$ FRUIT="mushy bananas" [prince@station prince]$ echo $FRUIT is my favorite fruit mushy bananas is my favorite fruit Con esta modificación. ¿De qué puede estar compuesta una variable? De caracteres alfanuméricos y minúsculas.gnome-desktop ode_to_apple. la variable se puede desligar de su valor con el comando unset. es un "archivo oculto". I like them squishy .txt? Un par de cosas han conspirado contra prince.txt .txt Utilizar corchetes para delinear nombres de variable siempre es correcto y en algunos casos.txt [prince@station prince]$ ls apple_ode.txt .. prince hubiera querido guardar su poema dentro de un archivo llamado apple_ode. ¿qué sucedería si arriba. I like them squishy" > $A_ode. Primero.txt ode_to_apple.plan . . el nombre de la variable puede marcarse con corchetes {}.txt comienza por un .

Ahora presentaremos un concepto un poco más sutil y mucho más útil: variables de entorno. Lo más importante es que cada vez que se inicie un proceso (tal como la shell bash iniciando el comando ls). Esto le permite a los usuarios 155 . simplemente como el id del proceso.Variables de Bash El siguiente cuadro lista algunas variables que se establecen automáticamente con la shell bash. Variables Bash preasignadas Variable BASH_VERSION HOSTNAME OLDPWD PWD RANDOM SECONDS Se expande hasta La versión actual bash El nombre del host DNS de la máquina actual El directorio de trabajo anterior The current working directory Un número aleatorio entre 0 y 32767 El número de segundos desde que la shell se inició Variables de entorno El configurar y resolver variables debería ser bastante sencillo. Estas variables son de sólo lectura y no pueden ser configuradas por el usuario. Así como la shell bash permite asignar parejas de valores-nombre llamados variables de shell. Table 2. las variables de entorno son heredadas por el proceso hijo. el id del usuario y el directorio actual de trabajo son parte del proceso. Variables Bash de sólo lectura Variable ? $ ! _ PPID SHELLOPTS UID Se expande hasta El estatus de salida del comando ejecutado más recientemente Opciones de banderas de la shell actualmente activadas Id (pid) del proceso de la shell actual Id (pid) del proceso del comando secundario más reciente Último símbolo del comando anterior Id (pid) del proceso padre de la shell. el kernel de Linux permite a cualquier proceso definir las parejas nombre-valor llamadas variables de entorno. Table 1. (siempre y cuando se acuerde de los espacios). pero pueden ser reasignadas. Estas no se pueden reasignar por el usuario. El userid del usuario actual Estas variables son establecidas por la shell para proveer información. [prince@station prince]$ echo $SHELLOPTS braceexpand:emacs:hashall:histexpand:history:interactivecomments:monitor [prince@station prince]$ SHELLOPTS=foo -bash: SHELLOPTS: readonly variable Las siguientes variables son inicializadas por la shell bash. Estas variables son una parte del proceso almacenado en el kernel. así como prince lo descubre a continuación. Lista separada por comas de las opciones de shell actual como lo informó el comando set -o.

donde la variable B está aún definida. Cuando prince sale de la shell hija. El usuario prince inicia una subshell bash. La variable A se promueve a una variable de entorno con el comando export. Considere el siguiente ejemplo: [prince@station prince]$ A=apple [prince@station prince]$ B=banana [prince@station prince]$ echo a:$A b:$B a:apple b:banana [prince@station prince]$ export A [prince@station prince]$ bash [prince@station prince]$ ps PID TTY TIME CMD 2251 pts/5 00:00:00 bash 2316 pts/5 00:00:00 bash 2342 pts/5 00:00:00 ps [prince@station prince]$ echo a:$A b:$B a:apple b: [prince@station prince]$ exit exit [prince@station prince]$ echo a:$A b:$B a:apple b:banana [prince@station prince]$ unset A B El usuario prince ha creado dos variables de shell. una variable de shell se crea y luego la variable de shell es "promovida" a una variable de entorno mediante el comando export. (la variable será luego exportada a cualquier proceso hijo futuro). Por último. la información acerca del entorno local. prince desenlaza tanto la variable de entornoA como la shell de entorno B con el mismo comando unset. A manera de ejemplo. A y B. Al ejecutar el comando ps.utilizar la shell bash para crear o modificar una variable de entorno y luego todos los comandos iniciados por la shell heredarán esa variable. muchos comandos buscarán una variable de entorno llamada LANG para determinar el lenguaje del usuario y modificar su salida como corresponde. 156 . Las variables de entorno suelen utilizarse para configurar comandos con información acerca de configuraciones locales o en otras palabras. prince confirma que hay otras shells ejecutándose: el padre y el hijo (su shell actual). ¿Cómo creamos variables de entorno dentro de la shell bash? Primero. ésta fue heredada por la shell hija del padre. la shell hija no sabe nada de la variable de shell padreB. Por el contrario. vuelve a la shell padre. Dado que la variable A pasa a ser una variable de entorno.

asignado y exportado la variable EDITOR. Al establecer LANG como es_ES. lista las variables de shell y las variables de entorno asociadas con la shell. la abreviatura habitual para el día "viernes" en alemán entonces se convierte en la abreviación alemana por regla. prince ha creado. no sólo shells. puesto que las abreviaturas de los días y meses han cambiado al español (como también las convenciones de las mayúsculas). El comando set. se puede modificar ( y suprimir) mediante la misma sintaxis de las variables de shell. lista sólo variables que han sido exportadas al entorno. los usuarios utilizan una sintaxis más corta para crear y exportar una variable de entorno: [prince@station prince]$ export EDITOR=nano Con este sólo comando. A menudo. Esto simplemente sucedió para heredar esta variable de la shell bash. otra vez sin argumentos. los efectos son incluso más obvios. Un punto importante que merece reformularse.[prince@station prince]$ echo $LANG en_US. Todos los procesos tienen variables de entorno. El comando date no cambió la conducta porque el comando bash tenía una variable de entorno denominada LANG (directamente). 157 .UTF-8 [prince@station prince]$ date Fri Aug 1 11:54:24 EDT 2002 [prince@station prince]$ LANG=de_DE [prince@station prince]$ date Fre Aug 1 11:54:53 EDT 2002 [prince@station prince]$ LANG=es_ES [prince@station prince]$ date vie ago 1 11:55:09 EDT 2002 Al establecer la variable de entorno LANG para de_DE. sin argumentos. Listado de variables Examinar variables con set y env La shell bash provee dos comandos para listar variables definidas. ¿Por qué prince no tuvo que exportar explícitamente la variable LANG? La variable ya es una variable de entorno configurada por los scripts de arranque. mientras que el comando env. Una vez que una variable es una variable de entorno. El proceso al ejecutar el comando date modificó su salida porque tenía su propia variable de entorno llamada LANG.

[prince@station prince]$ env HOSTNAME=localhost SHELL=/bin/bash TERM=xterm HISTSIZE=1000 USER=prince MAIL=/var/spool/mail/prince .05b. Ejemplos Uso de variables para hacer referencia a las palabras más utilizadas El usuario prince desea mantener al día los aspectos relacionandos con el software de Open Source y suele utilizar los enlaces de texto del navegador web links para visitar http://www. La mayoría de los comandos que envían o administran trabajos de impresión examinarán esta variable de entorno para determinar la impresora predeterminada. el editor especificado se utilizará en su lugar. para que la URL sea almacenada en la variable OSNISSUES.xterm COLUMNS=80 . Si la variable de entorno EDITOR está establecida. prince modifica su archivo ~/. Table 1. Variables de entorno más utilizadas El siguiente cuadro lista algunas variables de entorno que con frecuencia se utilizan para personalizar un entorno de usuario. En lugar de teclear de modo repetitivo la URL.redhat. el editor por defecto es vi.com/opensourcenow/key_issues. 158 . La variable es más relevante al utilizar una consola de línea serial ("terminal tonta") para acceder al sistema.0(1)-release' COLORS=/etc/DIR_COLORS. Especifica los directorios para buscar archivos ejecutables en ellos. Ahora prince puede referirse a la página web de un modo más fácil.[prince@station prince]$ set BASH=/bin/bash BASH_VERSINFO=([0]="2" [1]="05b" [2]="0" [3]="1" [4]="release" [5]="i386-redhatlinux-gnu") BASH_VERSION='2. Especifica qué clientes del servidor X deberían usar el entorno gráfico. A menudo. Especifica el lenguaje preferido para los programas internacionalizados.....bashrc.html. Muchos programas dependen de un editor externo para la entrada de parte del usuario. Variables de entorno más utilizadas Variable TERM PATH DISPLAY LANG EDITOR PRINTER Uso Especifica la configuración de bajo nivel de la terminal del usuario.

com/opensourcenow/key_issues.1. debe configurar su navegador de red para usar el servidor proxy encontrado en la dirección IP 10.1.com Unable to locate remote host www. links: Can't access startfile http://www. then . HTTP_proxy=http://10.redhat.com/opensourcenow/key_issues.1 y en el puerto 8080. (http. Mientras trata de entender cómo establecer un servidor proxy para el navegador de texto links. below).html 159 .html Looking up www.bashrc sea leído) y trata de tener acceso a la página web de Open Source. can be mapped separately by setting environment variables of the form PROTOCOL_proxy (literally: HTTP_proxy. etc). agrega la siguiente línea a su archivo ~/. /etc/bashrc fi OSNISSUES=http://www.1:80 Prince inicia una nueva shell (para que el archivo .bashrc [prince@station prince]$ cat . to "http://some. etc). Con el fin de establecer el servidor proxy.com Alert!: Unable to connect to remote host.redhat.redhat. PROTOCOL_proxy Links supports the use of proxy servers that can act as firewall gateways and caching servers. Each protocol used by Links.1. gopher.redhat.com www. HTTPS_proxy. [prince@station prince]$ links http://www. They are preferable to the older gateway servers (see WWW_access_GATEWAY.redhat.redhat.dom:port/". ftp.com/opensourcenow/key_issues.bashrc # .server.html [prince@station prince]$ bash [prince@station prince]$ links $OSNISSUES Mediante http_proxy para definir un servidor Proxy HTTP Dado que prince está utilizando un computador sin conexión directa al internet.bashrc # User specific aliases and functions # Source global definitions if [ -f /etc/bashrc ].1.[prince@station prince]$ vim . se encuentra con lo siguiente en la página de manual links(1).bashrc. FTP_proxy.

La variable de entorno PATH contiene una lista de directorios en los cuales deberían buscar los archivos ejecutables.bashrc otra vez) y ensaya una vez más. separados por una coma: [prince@station prince]$ echo $PATH /bin:/usr/bin:/usr/local/bin:/usr/bin/X11:/usr/X11R6/bin:/home/prince/bin Considere ejecutar el comando xclock. ls en todo un sistema de archivos. [prince@station prince]$ links http://www. se da cuenta que aunque configuró la variable http_proxy. agregándole la palabra exportar: [prince@station prince]$ cat . es heredada por el proceso links. no es heredada por el proceso links. Cuando prince revisa sus pasos. Luego debe ubicar el archivo que contiene el programa en el sistema de archivos. Por medio de la variable PATH. Dado que la búsqueda de un archivo ejecutable.bashrc.redhat. /etc/bashrc fi export HTTP_proxy=http://10.html Dado que la variable http_proxy ahora es exportada como una variable de entorno.bashrc # User specific aliases and functions # Source global definitions if [ -f /etc/bashrc ]. Puesto que prince incluyó la línea en su archivo ~/.bashrc # . Dado que la variable es una variable de shell establecida y no una variable de entorno. por ejemplo. bash primero busca el archivo /bin/xclock. busca entonces /usr/bin/xclock. tardaría mucho. 160 . Prince edita la línea que agregó a su archivo .1. asume que la primera palabra es el nombre del programa que se va a ejecutar. olvidó exportar la variable.bashrc. la shell busca en la variable de entorno PATH para obtener instrucciones. then . el cual comienza por un reloj en el entorno gráfico X. y prince no necesita preocuparse por esto. y links usa con éxito el servidor de proxy para contactar el sitio. El proceso continua hasta encontrar el archivo ejecutable /usr/bin/X11/xclock.com/opensourcenow/key_issues.1:80 De nuevo inicia una nueva shell (para que lea el archivo .El navegador de enlaces aparentemente no está tratando de usar el servidor proxy. y al no encontrarlo.1. Agregar un directorio a su PATH Cuando la shell bash examina una línea de comandos. la variable de entorno se configurará automáticamente cada vez que inicie una nueva shell.

así que prince trata de ejecutar el comando como una referencia absoluta. [prince@station prince]$ -rwxr-xr-x 1 root [prince@station prince]$ -bash: lsof: command not ls -l /usr/sbin/lsof root 95640 Jan 24 lsof -c init found 2003 /usr/sbin/lsof Al examinar su PATH. el cual se adhiere "fuera del" PATH por defecto en Red Hat Enterprise Linux.2. Tras examinarlo. el directorio /usr/sbin no está listado. [prince@station prince]$ echo $PATH /bin:/usr/bin:/usr/local/bin:/usr/bin/X11:/usr/X11R6/bin:/home/prince/bin:/usr/sbin [prince@station prince]$ lsof -c init COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME init 1 root mem REG 3. Sin embargo. el comando vive en el directorio /usr/sbin.so /lib/tls/libc-2. A manera de ejemplo.so 161 . Significa que usted debe especificar el comando mediante una referencia absoluta.3. Utiliza un truco estándar de Linux (y Unix) para agregar el directorio a su ruta. prince desearía agregar el directorio /usr/sbin a su ruta.so init 1 root mem REG 3. (el nombre se deriva del inglés LiSt Open Files.3.so Dado que él preferiría poder ejecutar el comando directamente.No todos los archivos ejecutables en el sistema residen en directorios que están en la lista por su variable de entorno PATH. el comando lsof lista los archivos actualmente abiertos en el sistema. la variable PATH ha agregado el directorio /usr/sbin y prince ahora puede listar los archivos fácilmente. y no usuarios "normales".3 27036 245377 /sbin/init init 1 root mem REG 3. pero luego agregue :/usr/sbin. Se dice que algunos programas viven "fuera de su ruta".2. [prince@station prince]$ /usr/sbin/lsof -c COMMAND PID USER FD TYPE DEVICE SIZE init 1 root mem REG 3. el hecho que un programa viva fuera de su ruta. no significa que no pueda ejecutarse. [prince@station prince]$ PATH=$PATH:/usr/sbin El comando puede ser pensado como si se dijera "establezca la variable PATH"sea cualquiera que sea actualmente.3 104560 244833 /lib/ld-2.2.3 1536292 476416 /lib/tls/libc-2. El usuario prince desearía usar el comando para listar todos los archivos actualmente abiertos que el proceso init está utilizando.3.) Dado que este comando lo suelen utilizar administradores de sistemas.3.3 27036 init 1 root mem REG 3.3 104560 init 1 root mem REG 3.2.3 1536292 init NODE 245377 244833 476416 NAME /sbin/init /lib/ld-2.

Varios tipos de expansiones de bash. sustituyendo uno de los elementos en "llave" para cada palabra.Expansión de la línea de comandos Conceptos clave • • • • • La shell bash expande ciertos metacaracteres de línea de comandos antes de interpretar el comando. se describió de modo extensivo en una lección anterior.. Expansión de llaves La expansión de llaves expande una sola palabra en palabras múltiples. Table 1. La expansión de llaves amplía los símbolos con corchetes ({}) en palabras múltiples. La expansión con la tilde amplía los símbolos que comienzan por una tilde (~) a los directorios de inicio de usuarios. Expansiones de línea de comandos en la shell bash Expansión Historial Llaves Tilde Variable Aritmética Sustitución comandos Nombre de ruta Sintaxis ! {} ~username $. tales como la expansón del nombre de ruta (comodín) y la expansión de variables ya se han descrito.) *.. la cual se invoca con un signo de exclamación. La expansión de llaves se utiliza para referirse (o crear) archivos que tienen prefijos. La sustitución de comandos expande el texto delimitado por comillas invertidas (``) o "dólar paréntesis" ($()) en la salida producida por el comando encerrado." ). las comillas sencillas ('..b. Por ejemplo.. (recuerde que varios ejercicios de laboratorio 162 .} $((. cada una contiene una sola palabra a partir de la lista especificada.') y el caracter de barra invertida pueden usarse para evitar que la shell expanda los caracteres.. la shell bash ejecuta varias expansiones en la línea de comandos. Se expande hasta Una línea de comandos anterior Texto especificado Directorio de inicio de un usuario Shell y variables de entorno Cálculo numérico Salida de la ejecución del comando en una subshell Nombres de archivos coincidentes en el sistema de archivos de Expansión del historial La expansión del historial.] [.. Aquí se incluye debido al contexto. [^... ${. Discussion Expansiones de línea de comandos Generalidades Antes de ejecutar un comando.. $(.]...)) `... Las comillas dobles (". El siguiente cuadro lista los tipos de expansiones bash con una descripción de cada una a continuación. postfijos o componentes de ruta comunes..r}at se expandiría en tres palabrascat bat rat... ?.`. la expresión {c.

[prince@station prince]$ mkdir chap{01.02. y luego un subdirectorio del directorio de inicio de elvis. chap03. las palabras expandidas no tienen que ser nombres de archivos.04} El usuario prince ahora tiene los siguientes cuatro directorios: |-|-|-`-chap01/ chap02/ chap03/ chap04/ 4 directories. las palabras que resultan de la expansión de llaves no coinciden con los archivos en el sistema de archivos (los archivos no tienen que existir). De hecho.04}/{html. En el segundo comando mkdir.02.html/ `-. la palabra con doble corchete se expande a ocho directorios chap01/html. chap02. A diferencia de los archivos/comodines. y chap04.text/ 12 directories. 163 .text} Ahora se han agregado los siguientes directorios.html/ `-. Expansión de tilde Quizás este es el concepto más sencillo de expansión. aunque en la práctica suelen serlos. como se listó en el archivo/etc/passwd (o la base de datos apropiada del usuario).text/ chap03/ |-. prince utiliza la expansión tilde para referirse a su directorio propio y a los directorios de elvis. 0 files En el primer comando mkdir. la palabra entre corchetes se expande a cuatro directorios chap01. |-| | |-| | |-| | `-chap01/ |-. 0 files [prince@station prince]$ mkdir chap{01. chap01/text.text/ chap02/ |-. la expansión de tilde.03.han utilizado expansión de llaves para crear rápidamente un gran número de directorios o archivos y luego subdirectorios dentro de ellos).html/ `-.text/ chap04/ |-.html/ `-. A continuación. el cual expande un ~nombredeusuario para el usuario del directorio de inicio del nombredeusuario. chap02/html y así sucesivamente.03.

*. La shell bash "expandirá" toda la expresión y la remplazará por el resultado numérico. Expansión aritmética La shell bash suele considerarse un entorno deficiente para cálculos numéricos y los operadores aritméticos tales como +.8 [prince@station prince]$ echo $(( $WIDTH * $HEIGHT)) -bash: 16. la shell bash expandirá (desreferenciará) expresiones de la forma $VARNAME o ${VARNAME} al valor de la shell o variable de entornoVARNAME.8 * 82: syntax error in expression (error token is ". *. las limitaciones de cálculos numéricos se descubren rápidamente cuando prince trata de volver a calcular el área mediante un número de punto flotante. y segundo. Sin embargo. Los operadores aritméticos son los mismos del lenguaje de programación C y están totalmente documentados en la página de manual bash(1) bajo "EVALUACIÓN ARITMÉTICA". prince utilizará una expansión aritmética para calcular el área de un rectángulo.bash_history. [prince@station prince]$ WIDTH=16 [prince@station prince]$ HEIGHT=82 [prince@station prince]$ echo $(( $WIDTH * $HEIGHT)) 1312 Sin embargo. y / se tratan como tal.8 * 82") La shell bash sólo soporta enteros aritméticos.[prince@station drwx-----x 15 drwx-----x 9 [prince@station total 4 drwxrwxr-x 2 prince]$ elvis prince prince]$ elvis ls -ld ~ ~elvis elvis 4096 Jul 21 17:41 /home/elvis prince 4096 Aug 4 06:58 /home/prince ls -l ~elvis/pub music 4096 Jul 13 05:46 music A menudo en este curso y en otros textos. la shell bash trata de manera especial texto delimitado con una sintaxis $ ((. Sustitución de comandos Quizás de las expansiones más complejas y útiles. la tilde se utiliza para implicar que un archivo debería existir en el directorio de inicio del usuario. -. y / en la línea de comando no tienen el significado matemático habitual.. Expansión de variables La expansión de variables se trató de modo extenso en la lección anterior. -. En el siguiente ejemplo. Ahora podemos ver la razón de esta convención. las variables se tratan como enteros numéricos cuando resulte apropiado. [prince@station prince]$ WIDTH=16. los operadores matemáticos estándar como por ejemplo +.. Reformulando. la sustitución de comandos permite a los usuarios ejecutar comandos arbitrarios en la subshell e incorporar los resultados dentro de la línea 164 . tal como el archivo ~/. Primero.)).

Table 1. Aunque es eficaz..$(date +%d%b%Y) [prince@station prince]$ ls reports. prince desearía crear un directorio que contenga la fecha en su nombre. se describió en el cuaderno anterior. Ahora podemos ver que el nombre de ruta es uno de los tipos de expansiones implementados por la shell bash.. [prince@station prince]$ mkdir reports..de comandos. y el comando de sustitución suele denominarse "sustitución de acentos graves". pero no se introdujo como una expansión de shell. El texto se utiliza para invocar la sustitución de comandos luego es remplazado por la salida registrada desde el comando. pero con solo un par de paréntesis: $(subcomando) Como ejemplo de una sustitución de comandos.$(!da) mkdir reports. cerca de 1 en la mayoría de los teclados).] [^. redirecciones y otra clase de actos de expertos. hay situaciones en que los usuarios desean utilizar uno de estos caracteres sin la invocación de 165 . La sintaxis de la"vieja escuela" para la sustitución de comandos es encerrar el comando entre "acentos graves" (la comilla simple inclinada hacia la izquierda que se encuentra en la misma tecla de ~. crea una cadena de formato para generar la fecha en un formato compacto.04May2003 O pudo haber combinado las ventajas de la sustitución de comandos y la sustitución del historial como se muestra a continuación.] Coinciden 0 ó más caracteres exactamente un caracter exactamente uno de los caracteres incluídos exactamente uno de los caracteres excluídos Comillas y caracteres de escape La shell bash usa varios caracteres de puntuación que se encuentran en el teclado para ejecutar diferentes tipos de expansiones.. ejecuta el comando mkdir mediante la sustitución de comandos. [prince@station prince]$ mkdir reports. la sintaxis de la expansión del nombre de ruta vea la siguiente tabla. Expansión de nombre de ruta La expansión de nombre de ruta o "comodín de archivo". Para repasar. registrar la salida y salir de la subshell. La sintaxis más moderna soportada por la shell bash es similar a la expansión aritmética.04May2003 La shell bash implementa la sustitución de comandos al generar una nueva subshell. Después de examinar la página de manual date(1). ejecutar el comando. Expansión del nombre de ruta bash Caracter * ? [. [prince@station prince]$ date +%d%b%Y 04May2003 Ahora.$(date +%d%b%Y) [prince@station prince]$ ls reports.

[prince@station prince]$ echo "<pre>little red $CAR</pre>" <pre>little red corvette</pre> En este caso. todos los caracteres de puntuación fueron protegidos de la interpretación de la shell." La shell bash proporciona tres mecanismos para evitar que los caracteres sean interpretados por la shell. y ` (acento grave). trata de nuevo.. bash interpretó los caracteres > y < como solicitudes para redirigir la salida (y entrada) del comando.. esta vez utilizando comillas dobles. Impide que todos los caracteres incluídos sean interpretados por la shell. el signo de dólar. El usuario prince. El usuario prince intenta de nuevo con comillas sencillas. Sin embargo. En el primer caso. los caracteres pueden escaparse individualmente con una barra invertida precedente. !.' Efecto Impide que el siguiente caracter sea interpretado por la shell. Considere los siguientes ejemplos." '. La shell se confundió cuando se le pidió redirigir la salida dos veces. Table 1.. donde prince está tratando de imprimir en pantalla. todavía se interpreta como marcador para una variable. utilizando comillas dobles o sencillas. exceptuando los caracteres $. "A veces un signo dólar es sólamente un signo de dolar. Uso de comillas y escape de la shell bash Sintaxis \ ".. [prince@station <pre>little red [prince@station >pre<little red prince]$ echo \<pre\>little red $CAR\</pre\> corvette</pre> prince]$ echo \<pre\>little red \$CAR\</pre\> $CAR</pre> Una nota sobre las comillas 166 . [prince@station prince]$ CAR=corvette [prince@station prince]$ echo <pre>little red $CAR</pre> -bash: syntax error near unexpected token `newline' SIn comillas. prince define la variable CAR. Como una alternativa.ningún tipo de conducta especial. [prince@station prince]$ echo '<pre>little red $CAR</pre>' <pre>little red $CAR</pre> En este caso. y trata de imprimir la línea sin comillas. escapando. las comillas dobles protegieron los caracteres < y >. Parafraseando a Sigmund Freud. Impide que los caracteres incluídos sean interpretados por la shell.

Como hemos visto. La frase incluye una sutileza que no siempre es apreciada y puede algunas veces llevar a confusiones.. bash podría "expandirlos" antes de que el comando los vea. no son para citar..conf en el directorio /etc... Si no se tiene cuidado al utilizar comillas o escapar los caracteres especiales. Al iniciar desde un directorio vacío.conf find: /etc/sysconfig/pgsql: Permission denied /etc/sysconfig/networking/profiles/default/resolv.. pero aún puede hacer uso de variables. se traten literalmente. El siguiente ejemplo del comando find en acción podría ayudar. 167 .conf /etc/modprobe. Comillas sencillas inclinadas a la derecha (apóstrofes): '.conf find: /etc/default: Permission denied /etc/X11/gdm/factory-gdm.. Con el fin de reforzar las diferencias. los tres estilos de comillas se describen a continuación. Un ejemplo es el comando find.. prince ejecuta find para buscar todos los archivos terminados en . Comillas sencillas inclinadas hacia la izquierda (acentos graves): `. [prince@station prince]$ FOOD=guacamole [prince@station prince]$ echo "wow! `whoami` sells $FOOD" 'for $!' wow! prince sells guacamole for $! Comillas dobles: ". Los tres estilos de comillas se ilustran con el comando echo de abajo." Las comillas dobles se utilizan en situaciones donde usted desearía tratar la mayoría de la puntuación literalmente o combinar palabras en un sólo símbolo.conf /etc/sysconfig/networking/profiles/netup/resolv.conf . Sutilezas de la expansión de línea de comandos Hemos visto que bash se aplica a un gran número de expansiones de línea de comandos antes de que un comando se ejecute..conf /etc/X11/gdm/gdm. Las expansiones de shell se presentan antes de que el comando se ejecute. Estos acentos se utilizan para invocar la sustitución de comandos en el texto incluido. asignando a cada uno un propósito diferente. incluyendo las variables y la sustitución de comandos. A veces. algunos los comandos esperan argumentos que contienen caracteres especiales para la shell bash. bash hace uso de una variedad de signos de puntuación relacionados con comillas.` Los acentos graves son básicamente diferentes a las comillas simples o dobles. [prince@station prince]$ find /etc -name *.' Las comillas sencillas son las más poderosas y se utilizan en situaciones similares a las comillas dobles cuando quiere que toda la puntuación. sustitución de comandos y sustitución de historial.

como podría esperarse. el comando se ve de esta manera.conf /etc/X11/gdm/gdm.conf [prince@station prince]$ ls a. La lección es: si está pasando un caracter especial 168 .conf /etc/sysconfig/networking/profiles/netup/resolv. como se muestra a continuación: [prince@station prince]$ find /etc -name "*. prince crea los archivos a. Si un comodín "falta " (por ejemplo.conf con los nombres de archivo coincidentes.conf y b.conf en el directorio local e intenta de nuevo.conf /etc/X11/gdm/factory-gdm. el cual genera un mensaje de error (porque la opción -name no pudo manejar dos argumentos).Pasando por alto algunas quejas acerca de los directorios inaccesibles. Volviendo al primer comando.conf ¿Qué hace primero bash? Aplica la expansión de línea de comandos. Esta es una expansión de nombre de ruta bastante antigua. Después de la expansión. En el primer caso. [1] ¿Cuál es la forma correcta de manejar la situación? Usar comillas o escapar los caracteres especiales.conf [prince@station prince]$ find /etc -name *. como ninguno de los archivos coincidió con *. Luego. find /etc -name a. tiene que ver con la expansión de línea de comandos. Después de examinar el directorio local y hallar los archivos a. [prince@station prince]$ touch a.conf b.conf y b. ningún archivo coincide con la expresión especificada).conf b.conf b. ¿por qué funcionó? Al implementar la expansión del nombre de ruta. la shell remplaza el comodín *. La shell bash encontró el siguiente comando. bash pasó el argumento al comando find como está escrito. Primero.conf find: paths must precede expression Usage: find [path. a.conf" find: /etc/sysconfig/pgsql: Permission denied find: /etc/default: Permission denied /etc/sysconfig/networking/profiles/default/resolv. la shell bash no intentará realizar una expansión de nombre de ruta y el comando funciona como se desea.conf. Debido a que se ha utilizado el * . el comando funciona. la shell bash intenta ayudar a la gente.conf. find /etc -name *.conf.] [expression] ¿Por qué el comando que funcionó hace apenas unos segundos no funciona ahora? La respuesta.conf Ahora bash ejecuta el comando. bash conserva el comodín... veamos el segundo caso.conf /etc/modprobe..conf b.conf ..

folk. La shell bash completará nombres de usuario y variables.blues | `-.pop}/playlist En este punto. prince usa una expansión de llave para agilizar su trabajo.dentro de un comando.folk | `-... De la misma manera. En la siguiente transcripción. si un usuario escribe ~el<TAB>. [prince@station prince]$ mkdir ogg [prince@station prince]$ mkdir ogg/{blues. Ejemplos Uso de expansión de llaves El usuario prince está configurando un directorio llamadoogg en el que va a almacenar archivos de música que ha "quemado" (copiado) de sus discos favoritos. folk. Más acerca de la terminación con el tabulador Hemos visto que la shell bash graba las pulsaciones al completar nombres de comandos o nombres de archivos cuando se pulsa la tecla TAB.playlist 4 directories. le gustaría crear directorios basados en estilos diferentes de música y en cada uno de los subdirectorios crear un archivo llamado playlist. bash podría completar el símbolo ~elvis. folk.rap. no existían. Para situaciones en que el archivo podría o no existir. respectivamente. Por ejemplo. Con el fin de organizar las cosas. pero ninguno de los archivos playlist existia. ¿Qué sucedería si prince hubiera utilizado el comodín de archivo para el comando touch? [prince@station prince]$ touch ogg/*/playlist touch: creating `ogg/*/playlist': No such file or directory Los directorios blues. existeron. etc. por lo tanto el comodiín se perdió. el comodín de archivo habría sido inútil porque los directorios blues. etc.pop | `-. De forma similar a la expansión del comando y 169 .rap.playlist `-. la expansión de llaves tiende a funcionar mejor que el comodín. ogg/ |-. 4 files ¿Pudo prince haber utilizado el comodín de archivo (expansión de nombre de ruta) en su lugar? Al utilizar el comando mkdir. cuando las palabras comienzan por los caracteres ~ o $.folk. prince ha creado la siguiente estructura de directorio.playlist |-.playlist |-..pop} [prince@station prince]$ touch ogg/{blues. usted debería proteger el caracter con comillas (o un escape de barra invertida). $PA<TAB> podría completarse $PATH.rap `-.

[prince@station prince]$ touch 'Make $$$ *Fast* !!' [prince@station prince]$ ls 13986$ *Fast* l Make Make $$$ *Fast* !! Con sólo ls. si los caracteres iniciales tecleados hasta el momento no especifican únicamente una variable (o nombre de usuario). la shell bash invoca touch con cuatro argumentos. (¿De dónde 3. Al pulsar dos veces el TAB se listarán las posibles terminaciones. Por último. Poner entre comillas los nombres de archivos raros En un cuaderno anterior. Primero. 170 . es difícil distinguir entre múltiples archivos y un archivo único con espacios en el nombre. creando los archivos que bash le pide hacer. 4. Luego la shell bash aplica sus distintas expansiones a las palabras. [prince@station prince]$ touch Make $$$ *Fast* !! touch Make $$$ *Fast* l [prince@station prince]$ ls 13986$ *Fast* l Make El comando touch accede. el cual aparentemente (y un poco extraño) fue el anterior comando ejecutado. ¿De qué manera persuadimos a bash para que cree un archivo con nuestro rito proporcionado por Linux de incluir espacios y puntuación en el nombre de archivo? Obviamente con comillas. La shell bash aplica la sustitución de variables a $$$. Ahora estamos en una buena posición para ver el porqué. Una vez se han aplicado las extensiones. Un ls -l ayuda a aclarar la situación. como los símbolos están separados por espacios. pero ese no tenía que ser el caso.nombre de archivo. !! se expande a l desde el historial de comandos del usuario. para que touch obedientemente cree cuatro archivos. se les dijo a los estudiantes que aunque se podían utilizar caracteres especiales. Suponga que prince quiere crear un archivo único llamado Make $$$ *Fast* !!. sale el número 13986?[2]) El símbolo *fast* sobrevive con el preservado del *. mencionamos que los nombres de archivo en Linux (y Unix) podrían estar compuestos por cualquier caracter a excepción de uno (¿Recuerda cuál?[1]) En el mismo cuaderno. 1. El archivo Make se crea fácilmente. bash los trata como cuatro palabras separadas. 2. bash emite un pitido. resultando en 13986$. era mejor evitarlos.

tee. por lo que deberá establecer la variable de modo dinámico. la cual es la forma como la shell bash compone argumentos para los programas que ejecuta.XL. archivo sin título b.inv y así sucesivamente. la variable LINUX_VERS debe establecerse para que contenga la 2. a. L. el directorio debería contener archivos titulados tee. el comando touch "one two three" haría que bash pase el único argumento del comando touch a one two three (aunque uno con espacios). two.XXL. (el archivo /var/log/dmesg se regenera cada vez que se arranca la máquina. Los archivos a continuación deberían existir en el directorio de inicio del usuario. S. cree 108 archivos de la forma estilo.info. M.XL. XS Color red. En su directorio de inicio. Deliverables A title Question 1 1. y three. Por el contrario. blue Extensión info. donde cada archivo contenga una combinación de valores a partir del cuadro siguiente. Dentro del subdirectorio. cree un subdirectorio denominado shirts. one. crew. Las comillas inhiben la interpretación de los signos de puntuación como lo solicitan las expansiones de shell.red.red.red. inv 4. XL. Ejercicios en línea Lab Exercise Objetivo: Usar varias sustituciones de shell bash de modo efectivo. Tras el arranque.[prince@station total 0 -rw-rw-r-1 -rw-rw-r-1 -rw-rw-r-1 -rw-rw-r-1 -rw-rw-r-1 *Fast* !! prince]$ ls -l prince prince prince prince prince prince prince prince prince prince 0 0 0 0 0 Aug Aug Aug Aug Aug 31 31 31 31 31 06:19 06:19 06:19 06:19 06:40 13986$ *Fast* l Make Make $$$ Observe que las comillas sirven en realidad para dos propósitos. Por ejemplo. el comando touch one two three haría que bash ejecute el comandotouch con tres argumentos. cree archivos con los sigu¡entes nombres de archivo. tee. >> README!! << 3. turtleneck Tamaño XXL. primera línea del archivo /var/log/dmesg.red. Especificaciones 1. >> README!! << 171 .ext. yellow.color. Por ejemplo. tras el arranque. 2. (el contenido de los archivos es irrelevante). tee.bashrc para que. En su directorio de inicio.inv. Recuerde que el comando head -1 mostrará la primera línea del archivo). Estilo tee. Tiempo estimado: 15 minutos.tamaño. Las comillas impiden la división de palabras. **'s y ||'s c.XXL. 1. 2. a. **'s y ||'s c. archivo sin título b.info. la variable LINUX_VERS contenga toda la primera línea del archivo /var/log/dmesg. Configure su archivo ~/.

172 . Cada nombre de archivo contiene una combinación de los valores que aparecen en el cuadro de arriba. cada uno de forma estilo. el cual contiene exactamente 108 archivos.tamaño.color. Un directorio llamado ~/shirts.3.ext.

sino que la shell misma los implementa. En un cuaderno anterior. Una lista de comandos internos de 173 . La lección comienza con un tema que no es la personalización real. A continuación. personalizar el intérprete de comandos de la shell y establecer las opciones de la shell. Los alias de shell se remueven con el comando unalias.Personalización de la shell Conceptos clave • • • • • • • La shell bash internamente implementa ciertos comandos sencillos que están muy ligados con la conducta de la shell. presentamos el comando which. el comando cd no existe como ejecutable en el sistema de archivos. Discussion Esta lección se centra en las técnicas utilizadas para personalizar la shell bash. Las opciones de shell se examinan. el cual reportará en qué parte del sistema de archivo reside el archivo ejecutable que contiene un comando en particular. pero está relacionada con la conducta de la shell. Las banderas de shell se pueden establecer con el comando set -f y se limpian con set +f. Estos comandos se conocen como comandos internos de la shell. la shell trata la primera palabra como un comando. Los alias de shell se establecen y examinan con el comando alias. La shell bash implementa algunos comandos de modo interno. Los alias de shell crean comandos aparentes que expanden a texto arbitrario. lo que significa que los comandos no existen en el sistema de archivos como un programa cargable. Estos se conocen como los comandos incorporados. El comando cd es un ejemplo de un comando interno de la shell. como por ejemplo crear comandos alias. establecen y se anulan con el comando shopt. Comandos internos de la shell Al evaluar una línea de comandos. Estos suelen ser comandos sencillos relacionados con cambios a la shell misma. el tema de los comandos internos.1/bin:/bin:/usr/bin:/usr/local/bin :/usr/bin/X11:/usr/X11R6/bin:/home/madonna/bin) De acuerdo con which. El intérprete de comandos de la shell bash se puede personalizar mediante la variable PS1. madonna observa que el comando date es implementado por el programa que se encuentra en el archivo ejecutable /bin/date: [madonna@station madonna]$ which date /bin/date ¿Qué sucede cuando madonna utiliza which para buscar el archivo ejecutable que contiene el programa cd? [madonna@station madonna]$ which cd /usr/bin/which: no cd in (/usr/local/j2sdk1.3.

Alias Los alias permiten a los usuarios personalizar los nombres de los comandos o enlazar comandos con las opciones o argumentos más utilizados. [madonna@station madonna]$ help cd cd: cd [-L|-P] [dir] Change the current directory to DIR. El comando alias Los alias se crean (y examinan) mediante el comando interno alias. `. Al crear alias. . ] bind [-lpvsPVS] [-m keymap] [-f fi builtin [shell-builtin [arg . i. El comando help también se puede utilizar para ver documentación detallada acerca de un comando interno específico...'... Use `info bash' to find out more about the shell in general. The variable $HOME is the default DIR.. son en realidad internos de la shell.]] cd [-L|-P] [dir] compgen [-abcdefgjksuv] [-o option . Observe que la lista contiene el comando cd. If DIR begins with a slash (/). 174 . menciona un par de sitios donde la documentación de bash puede encontrarse y presenta bota una lista de comandos internos.la shell y su documentación correspondiente se puede ver mediante el comando help. tales como cd. [madonna@station madonna]$ help GNU bash.. Use `man -k' or `info' to find out more about commands not in this list. es decir. Type `help' to see this list. y echo.. A null directory name is the same as the current directory.. alias [-p] [name[=value] . then CDPATH is not used.. Varios comandos que ya ha estado utilizando. Alternative directory names in CDPATH are separated by a colon (:).05b. Dado que el comando cd está ligado a la conducta de la shell.. pwd. and the . The variable CDPATH defines the search path for the directory containing DIR. version 2.e. Type `help name' to find out more about the function `name'.. cambia el directorio de trabajo de la shell. el comando alias utiliza la siguiente sintaxis. el cual es en sí mismo un comando interno de la shell.. Una vez creados. command [-pVv] command [arg . bg [job_spec] break [n] case WORD in [PATTERN [| PATTERN]. If the directory is not found.0(1)-release (i386-redhat-linux-gnu) These shell commands are defined internally. este es un buen candidato para un comando interno. los alias se utilizan como si fueran cualquier otro comando.] complete [-abcdefgjksuv] [-pr] [-o El comando help entrega una versión de la información sobre la shell.

Decide entonces que cada vez que ejecute ps.v 1.0 0.0 0. most entries here have two entries # even if the protocol doesn't support UDP operations.alias NAME=VALOR Este comando crearía un alias denominado NOMBRE. La sintaxis debería ser reminiscente a la utilizada para asignar variables de shell. las frases que contienen múltiples palabras (separadas por espacios) deben ir entre comillas. only the more common ones. el cual apuntaría al valor VALOR.0 1376 72 ? S Aug30 root 2 0. [madonna@station madonna]$ alias h=head [madonna@station madonna]$ h /etc/services # /etc/services: # $Id: 010_text. En el siguiente ejemplo. la asignación de alias no permite espacios en ningún lado del signo de igual. madonna advierte que a menudo está listando todos los procesos ejecutándose en la máquina con el comando ps aux.0 0 0 ? SW Aug30 root 5 0. Internet style # # Note that it is presently the policy of IANA to assign a single wellknown # port number for both TCP and UDP. En el siguiente ejemplo.0 0 0 ? SWN Aug30 [ksoftirqd_CPU0] root 9 0. madonna no tiene que preocuparse por citar el valor. como en la asignación de variable.0 0 0 ? SW Aug30 root 4 0.. Dado que el alias apunta a una sola palabra (head)..0 0 0 ? SW Aug30 . madonna establece el alias h como un atajo para el comando head.0 0. hence. ``Assigned Numbers'' (October 1994). [madonna@station madonna]$ alias ps="ps aux" [madonna@station madonna]$ ps USER PID %CPU %MEM VSZ RSS TTY STAT START root 1 0. Not all ports # are included. prefería la salida más completa que ps aux presenta y por lo tanto establece un alias para el comando ps.dbk. TIME 0:04 0:00 0:00 0:00 COMMAND init [ [keventd] [kapmd] 0:00 [bdflush] 0:00 [kswapd] 175 . Del mismo modo.0 0.0 0. Luego utiliza el nuevo alias para examinar varias de las primeras líneas del archivo /etc/services. En particular.3 2004/01/07 18:41:02 bowe Exp $ # # Network services.0 0.0 0 0 ? SW Aug30 root 3 0. # Updated from RFC 1700. dado que la sintaxis sólo espera un símbolo único después del signo igual.

A continuación madonna suprime el alias que creó anteriormente para ps. como la primera palabra en la línea de comando).='ls -d . Si madonna quisiera repasar los alias que estableció podría sencillamente ejecutar el comando alias (sin argumentos). necesitó encerrar la frase entre comillas (para que tras "la división de palabras". la shell de bash busca alias en donde se espera un comando (es decir. como también otros alias establecidos por los scripts de arranque bash de madonna (y son parte de la configuración predeterminada de Red Hat Enterprise Linux). El comando alias también se utiliza para examinar los alias actualmente definidos.En este caso. los usuarios podrían fácilmente crear alias que pondrían la shell en un bucle infinito). la shell trate la frase como una sola palabra). el alias se expande. Si se dan argumentos (sin el signo de igual). no hay signos de puntuación asociados con ninguna clase de "expansión de alias". [madonna@station madonna]$ unalias ps [madonna@station madonna]$ alias ps -bash: alias: ps: not found Evaluación de alias ¿Cuándo busca alias la shell de bash ? A diferencia de las variables. La excepción es si el alias se expande al comando que tiene el mismo nombre de alias en cuyo caso la shell simplemente ejecuta la expansión y sigue adelante.* --color=tty' alias ll='ls -l --color=tty' alias ls='ls --color=tty' alias ps='ps aux' alias vi='vim' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' El comando alias lista los alias establecidos por madonna (h y ps). Para suprimir un alias. el comando alias mostrará el alias actual para el argumento. En su lugar. Si la primera palabra es reconocida como un alias . 176 . [madonna@station madonna]$ alias alias h='head' alias l. puesto que ella quiso que el alias apuntara a una frase de dos palabras (ps y aux). pase el nombre de alias como un argumento al comando unalias. si existe alguno: [madonna@station madonna]$ alias ps h foo alias ps='ps aux' alias h='head' -bash: alias: foo: not found El comando unalias Los alias se pueden suprimir con el comando interno de la shell unalias. (de otra manera.

el intérprete de comandos también provee más información. (el siguiente no es el algoritmo exacto. pero no vuelve a expandir alias). [madonna@station madonna]$ echo "Little Miss Muffet > Sat on a Tuffet" Little Miss Muffet Sat on a Tuffet Personalización del intérprete de comandos de bash con PS1 y PS2 177 . la siguiente lista resume los pasos que la shell bash realiza al evaluar la primera palabra de la línea de comandos. incluyendo el nombre de usuario actual. expanda el alias y vuelva a comenzar (a menos que el alias se expanda a un comando que tenga el mismo nombre del alias en cuyo caso expande el alias y empieza de nuevo. pero la línea de comandos tiene obviamente una sintaxis inacabada (tal como unas comillas que aún no se han cerrado). "evaluar" y "ejecutar". ¿La palabra se define como un alias? Si es así. pero sirve como una aproximación útil). Realiza cualquier expansión de la shell. nombre de la máquina y directorio de trabajo. Ejecución de comandos Hemos descrito varios tipos de palabras considerados por la shell bash como "comandos". Si la palabra no contiene un /. la cual alias el comando ls al valor ls --color=tty. ejecute el archivo si existe y tiene permisos ejecutables. ejecute el comando interno. Si existe un archivo coincidente y tiene permisos ejecutables. pero solo si el comando está escribiendo en una terminal. Para resumir. mientras que repite su bucle de "escuchar". 6. busque un archivo con un nombre similar en todos los directorios en orden como se definió en el entorno de variable PATH. 5. no se presenta ningún color). Cuando se redirige a un archivo. pero están incuídas aquí para completar la información). Personalizar el intérprete de comandos de bash La shell bash interactiva. Los dos más vistos son el intérprete de comandos primario. llame la función de la shell en la shell actual. ¿La palabra es un comando intermo de la shell? Si es así. el cual es más complicado. 1. 4. A continuación [madonna@station madonna]$ sirve de intérprete de comandos primario. mientras que> sirve de intérprete de comandos secundario. (este instruye a ls para proporcionar caracteres de control especiales que dan color a diferentes tipos de archivos. ¿La palabra se define como una función de una shell? Si es así. y proveer un contexto. En la configuración predeterminada de Red Hat Enterprise Linux . utilizado cada vez que bash está listo para un nuevo comando y el intérprete de comandos secundario utilizado cuando un usuario presiona la tecla INTRO. El intérprete de comandos se utiliza para contarle al usuario que la evaluación de la etapa anterior ha terminado y que la shell está esperando intrucciones. ejecute el archivo. 3.Los usuarios pueden no darse cuenta de que están usando alias en lugar del comando mismo. (las funciones de la shell van más allá del alcance de este curso. El comando bash en realidad tiene cuatro intérpretes de comandos diferentes los cuales se utilizan en diferentes situaciones. Un buen ejemplo es la configuración predeterminada de Red Hat Enterprise Linux. expide un intérprete de comandos cada vez que vuelve a la etapa de "escuchar". 2. ¿La palabra contiene un /? Si es así.

Inmediatamente tras cambiar el valor de la variable PS1. bash comenzó a utilizar el nuevo valor como su intérprete de comandos primario. de lo contrario un $ el caracter correspondiente al número octal nnn La expansión de parámetros (variables). Con la secuencia de escape \$. A menudo los usuarios desearían que el intérprete de comandos también visualizara información útil... La secuencia de escape \$ puede requerir más explicación. El cuadro a continuación resume algunas de las secuencias más comunes. Para plantear el punto de una forma obvia. PS2="I'm still waiting .. que remplaza con información dinámica cuando se genera el intérprete de comandos. three mice ran up the clock" Hickory Dickory Dock three mice ran up the clock Estoy esperando . Table 1. " I'm waiting . [madonna@station madonna]$ PS1="I'm waiting .. la expansión aritmética. el intérprete de comandos suele verse más limpio si la variable PS1 está definida con un espacio al final.. El intérprete de comandos por defecto de la shell Bourne es un dólar ($) para los usuarios estándar y un signo (#) para el usuario root. Al personalizar el intérprete de comandos de bash. " I'm waiting . Opciones y banderas de la shell de bash 178 . echo "Hickory Dickory Dock I'm still waiting . y el intérprete de comandos secundario es la forma de decir de bash "Todavía estoy esperando".... un #. El ejemplo anterior implicó que el intérprete de comandos primario es la forma de decir de bash "Estoy esperando". Secuencias de escape comunes utilizadas en intérpretes de comandos bash Secuencia \a \d \h \T \u \W \! \$ \nnn Expansión Campana audible de la terminal fecha en formato"día mes" el nombre del host hasta el primer "." La hora actual en formato de 12 horas HH:MM:SS el nombre de usuario del usuario actual el nombre de la base del directorio de trabajo actual El número de historial de este comando Si el UID efectivo es 0. Para obtener una lista más completa. y la sustitución de comandos se aplican al valor de PS1 cuando el intérprete de comandos es generado también.. madonna personalizará sus intérpretes de comandos para decir justo eso. La shell de bash utiliza esta secuencia para reproducir una característica de la shell Bourne originial (/bin/sh).Los usuarios pueden personalizar los intérpretes de comandos de bash mediante las variables de shell PS1 y PS2. vea la página de manual bash(1).. La shell de bash permite a los usuarios insertar secuencias de escape dentro de la definición de PS1... un valor predeterminado PS1 para todo el sistema puede utilizarse. las cuales bash usa para componer los dos prompts. imitándo esta conducta original.

-v -x -C El comando set con la sintaxis normal de las opciones (tal como set -x) habilita la bandera especificada. a continuación. Para inhabilitar la bandera. Bandera -f -n -o nombredeopción Efecto Inhabilita la expansión de nombres de ruta (comodín) Lee comandos pero no los ejecuta (se usa para revisar sintaxis en los scripts). el cual se utiliza para modificar la conducta de shell mediante (por lo general) banderas de una letra. El último uso del comando incorporado se utiliza en la escritura de shell y por ahora puede hacerse caso omiso sin ningún problema. el comando se utiliza para establecer. Observe el cuadro siguiente con las banderas más utilizadas y sus opciones. y el otro esshopt.Se utilizan dos comandos internos para configurar la conducta de la shell mediante las opciones de shell. madonna temporalmente inhabilita el comodín de archivo (habilitando la bandera de shell -f) y luego restaurando el comodín de archivo (inhabilitando el mismo). remplace el guión (-) por un signo más (+) (tal como set +x). Algunas de las opciones más comunes incluyen lo siguiente. el comando set visualiza todas las variables de shell y sus valores (como se describió en una lección anterior). Por ejemplo. usado para configurar las opciones de la shell. Uno es el comando set. Cuando se llamado sin argumentos. Establece la opción especificada. emacs Emplea líneas de comandos con enlaces de teclas del estilo emacs ignoreeof No sale de la shell cuando se lee EOF (CTRL-D) vi Usa enlaces clave de línea de comando del estilo vi Imprime comandos como se leen (útil para depurar scripts) Imprime comandos despues de aplicadas las expansiones (útil para depurar scripts y examinar expansiones de la shell) No le permite a la shell reescribir archivos en redirección. Cuando se utiliza con la línea de comandos. Banderas de la shell: el comando interno set El comando set realiza una labor triple. La lista de opciones establecidas puede almacenarse en la variable de shell $-. como suele ser el caso. Banderas de la shell que el comando interno set utiliza. 179 . o anular las banderas de shell. Table 1.

. Habilita alias de shell Habilita sintaxis coincidente de patrones de comodines extendidos No considera el caso cuando se aplican comodines de archivo.conf /etc/resolv. y shopt -u nombreopción anula la opción. por ejemplo. Opciones de la shell: el comando interno shopt El comando bash también tiene una segunda serie de variables de configuración. [prince@station prince]$ touch ogg/*/playlist touch: creating `ogg/*/playlist': No such file or directory 180 .conf /etc/libuser.conf /etc/lftp. lo habilita y luego el de cd en el directorio /etc con un deletreo descuidado. Table 1. Revise la página de manual de bash(1) para obtener una lista completa.conf /etc/cdrecord.conf /etc/rndc. En su lugar. mientras que solo shopt visualiza todas las opciones de la shell. madonna. Después de observar este hecho. Lo anterior se presenta a manera de ejemplos. descubre que la opción de shell solo efectúa el comando interno de cd. Opciones de la shell bash Opción cdspell expand_aliases extglob nocaseglob Efecto Intenta corregir palabras mal escritas de los nombres de directorios cuando utiliza el comando incorporado cd. madonna examina el estado de la opción de shell cdspell.conf: No such file or directory [madonna@station madonna]$ set +f [madonna@station madonna]$ ls /etc/*.conf . no se afecta por esta opción.conf /etc/aeplog. No se preocupe si no entiende aún los efectos de todas las banderas de shell.conf ls: /etc/*. [madonna@station madonna]$ shopt cdspell cdspell off [madonna@station madonna]$ shopt -s cdspell [madonna@station madonna]$ cd /ect /etc Una vez allá.conf /etc/lpd. que no es un incorporado de shell. Estas se establecen y se anulan mediante el comando shopt donde shopt -s nombreopciónestablece la opción nombreopción. las cuales se conocen como "opciones de shell". asegúrese de saber cómo se utiliza el comando set para habilitar o inhabilitar una bandera si es necesario.. Si en una lección posterior le dijeran "esta acción puede inhabilitarse al configurar la bandera -H de shell ".conf /etc/logrotate. usted sabrá cómo hacerlo. El comando shopt nombreopción visualiza el estado actual de la opción. Algunas de las opciones de shell más fáciles de entender están listadas en el cuadro siguiente.conf /etc/pnm2ppa. A continuación.conf /etc/pwdb.[madonna@station madonna]$ set -f [madonna@station madonna]$ ls /etc/*.conf /etc/aep. El comando ls. inhabilita la opción cdspell.conf /etc/esd.

alguna redundancia se descubre. La expansión de alias resulta en ls --color=tty -l --color=tty.gnome2_private . El segundo alias. l. ls. que hay dos mecanismos para establecer banderas de shell y opciones de shell (set y shopt. .bash_history .gnome2 .bash_logout .gconf . para que . la expansión resultante ll especifica dos veces --color=tty. bash expande el alias a ls -l --color=tty. El tercer alias. Tras iniciar sesión en el comando alias se revela lo siguiente.". Ejemplos Alias predeterminados en Red Hat Enterprise Linux La configuración predeterminada en Red Hat Enterprise Linux proporciona varios usos ilustrativos de alias.. bash no intenta otras expansiones de alias. se utiliza para listar todos los archivos ocultos (aquellos que comienzan por ".bashrc .") en el directorio actual. Cuando sea habilitado.xauthxLTmDk Observe que la shell bash ejecuta la expansión de nombre de ruta después de expandir el alias. respectivamente) y recuerde dónde buscar información sobre cada una (el comando help y la página de manual bash(1)). para que cada invocación de ls incluya la opción de línea de comandos --color=tty.gnome . provee una forma más fácil para invocar el comando ls con su opción de línea de comando más usada -l.fonts. [madonna@station madonna]$ alias alias l. Si consideramos cómo bash evalúa alias.bash_profile .gtkrc . Puesto que el alias ls se expandió al comando cuya primera palabra fue otra vez ls. ll.. [madonna@station madonna]$ l. Cuando un usuario ejecuta ll.* sea remplazado por cada archivo en el directorio local que comienza con ". La bandera de shell bash "x" es útil para descubrir estos tipos de problemas. en efecto cambia la conducta por defecto del comando ls. ls.* --color=tty' alias ll='ls -l --color=tty' alias ls='ls --color=tty' alias vi='vim' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' El primer alias.viminfo . .='ls -d . La shell de bash luego examina la primera palabra de la expansión.Se estará preguntando cómo recordar todas estas opciones y cómo recordar cuáles se modifican con set y cuáles con shopt. cada comando se imprime en pantalla (con un prefijo "+") después de que todos los alias y expansiones se hayan aplicado. Recuerde sin embargo.kde .gconfd . Sin embargo. .cache-1 .gnome-desktop . 181 . la cual es en sí misma un alias. La respuesta es que no es necesario.

mv. 182 . al habilitar la bandera "x" de la shell genera líneas complejas reflejando la generación de cada intérprete de comandos. mv y cp revela que todos comparten la opción -i que se utiliza para invocar un modo interactivo. se utilliza para reasignar un comando empleado para una implementación alterna. Red Hat Enterprise Linux se distribuye con una versión mejorada de vi. Uso de alias para crear comandos rm. conocida como vim (para "Vi IMproved"). Uno de los editores más comunes de Linux (y Unix) es el editor vi.íneas [madonna@station madonna]$ set -x ++ echo -ne '\033]0. [madonna@station madonna]$ date > a [madonna@station madonna]$ date > b [madonna@station madonna]$ cp -i a b cp: overwrite `b'? y [madonna@station madonna]$ mv -i a b mv: overwrite `b'? y [madonna@station madonna]$ rm -i b rm: remove regular file `b'? y Muchos administradores de sistemas establecen alias por defecto para estos comandos.c drwxr-xr-x 4 madonna madonna 4096 Jul 21 17:05 networking ++ echo -ne '\033]0. para que cada invocación de estos comandos sea una invocación interactiva. y cp más seguros El examen de los usos de las opciones de los comandos rm.madonna@station:~\007' [madonna@station madonna]$ ll + ls --color=tty -l --color=tty total 12 drwx-----2 madonna madonna 4096 Aug 26 16:23 bin -rw-rw-r-1 madonna madonna 76 Aug 26 16:10 hello. El cuarto alias. para que los alias también sean reportados como sitios de archivos ejecutables hallados en la ruta de un usuario. vi. Con el fin de hacer uso transparente del editor mejorado.madonna@station:~\007' [madonna@station madonna]$ set +x + set +x [madonna@station madonna]$ Infortunadamente. pero expandido totalmente el ls --color=tty -l --color=tty se ve con claridad que es en realidad ejecutado como resultado del comando ll. Cuando se utiliza. El último alias crea un delimitador para el comando which. el comando más utilizado vi ha sido reasignado. El uso de la opción -i se ilustra a continuación. estos comandos le pedirán al usuario confirmación antes de ejecutar una operación que causaría la pérdida de información (tal como los comandos comodines cp o mv de un archivo de destino ya existente o cualquier uso del comando rm).

c networking timestamp. Observe el uso de la sustitución de comandos para determinar el tiempo actual en el primer alias. Sin embargo. El primero llamado Para crear el primer alias. agrega las dos líneas siguientes a su directorio ~/. el cual listará todos los archivos que han sido modificados antes que un archivo especificado. [madonna@station madonna]$ ts [madonna@station madonna]$ ls bin hello. [madonna@station madonna]$ date +timestamp. Uso de alias para crear marcadores de tiempo La usuaria madonna quiere saber cuál de sus archivos y directorios "ocultos" en su directorio de inicio son creados o modificados por aplicaciones que ella ejecuta.bashrc. -newer" Abre una nueva shell (para que el . la cuenta de root tiene dichos alias establecidos por defecto. alias ts="touch $(date +timestamp.[madonna@station madonna]$ alias cp="cp -i" mv="mv -i" rm="rm -i" [madonna@station madonna]$ alias cp mv rm alias cp='cp -i' alias mv='mv -i' alias rm='rm -i' [madonna@station madonna]$ date > a [madonna@station madonna]$ date > b [madonna@station madonna]$ cp a b cp: overwrite `b'? y [madonna@station madonna]$ rm a b rm: remove regular file `a'? y rm: remove regular file `b'? y En Red Hat Enterprise Linux. Desearía crear dos alias. Cada uno de estos comandos también viene con la opción -f para "forzar" la conducta requerida.%H:%M:%S timestamp.19:30:23 Para crear los alias. Dado que la opción -f anula la opción -i y puede emplearse para evitar la aburridora interrogación al suprimir un gran número de archivos.19:39:18 183 . y ensaya sus nuevos alias.%H:%M:%S)" alias tsc="find . primero dedica un poco de su tiempo a la lectura de la página de manual date(1) y determina que el siguiente comando generará el nombre de archivo apropiado para el archivo marcador de tiempo. Primero utiliza ts para crear un archivo marcador de tiempo.bashrc modificado tenga efecto). pueden configurar estas protecciones por su cuenta si así lo desean. Ella sabe que el comando find implementa un criterio -newer. los usuarios estándar. Quisiera saber una forma fácil de controlar cuáles archivos se crean o cambian antes o después de ciertas operaciones.

mover su nueva carpeta a la papelera y luego buscar archivos modificados relativos a sus nuevo archivo marcador de tiempo. [madonna@station madonna]$ ls -l timestamp. Examina la hora modificada del archivo original ejecutando un ls -l.gnome-desktop.19:39:18' Ahora madonna entiende el problema. Explorando aún más madonna confirma el alias ts.nautilus/metafiles/file:%2F%2F%2Fhome%2Fmadonna%2F. madonna asume (correctamente) que el directorio ~/.19:39:18 -rw-rw-r-1 madonna madonna 0 Sep 1 19:42 timestamp.19:39:18 . creando el archivotimestamp.El alias ts parece funcionar. Observando que un archivo titulado untitled folder fue creado en un subdirectorio llamado .gnome-desktop.nautilus/metafiles . Decide crear un nuevo archivo marcador de tiempo.19:39:18 Asombrada. [madonna@station madonna]$ alias ts alias ts='touch timestamp./. Luego hace clic derecho en la ventana secundaria del escritorio Gnome y elige "Nuevo Folder" desde el menu emergente.%H:%M:%S)" 184 ./. Vuelve a llamar la línea desde su directorio ~/. madonna no ve su nuevo archivo. Ella quiere sondear un poco más. el alias lista todos los archivos que han sido modificado más recientemente que el archivo marcador de tiempo especificado. A continuación ejecuta el alias tsc especificando su archivo marcador de tiempo recién creado como el archivo con el que se compara.gnome-desktop .19:39:18.gnome-desktop contiene todos los elementos que se muestran en el escritorio de Gnome.19:39:18 Extrañamente.c networking timestamp.bashrc donde definió el alias ts: alias ts="touch $(date +timestamp.xml Como se esperaba. esta vez explorando la conducta de la papelera. la hora modificada del archivo implica que se ha modificado aproximadamente tres minutos después de su tiempo de creación hallado en el nombre del archivo.gnome-desktop/untitled folder . [madonna@station madonna]$ ts [madonna@station madonna]$ ls bin hello. Un folder recién creado untitled folder aparece en su ventana del escritorio. [madonna@station madonna]$ tsc timestamp././.

%H:%M:%S)' Ahora. [madonna@station madonna]$ tsc timestamp./.gnome-desktop . Después de comenzar una nueva shell (para que ~/./.gnome-desktop a la carpeta .Trash. [madonna@station madonna]$ ts_correct [madonna@station madonna]$ ls bin hello. alias ts_correct='touch $(date +timestamp.bashrc. el alias se define mediante comillas sencillas. la carpeta fue removida del directorio .19:47:18' alias ts_correct='touch $(date +timestamp. madonna confirma sus definiciones de alias.) Ejercicios en línea Lab Exercise Objetivo: laboratorio de práctica Tiempo estimado: 15 minutos. Especificaciones Edite su archivo ~/.Trash Aparentemente.Aunque intentó la sustitución de comandos date para que se produjera cada vez que se invocara el alias Para confirmar sus instintos.xml . (el archivo untitled folder no es listado.bashrc para que las shellsbash recién creadas tengan las siguientes propiedades.19:48:12 .bashrc surta efecto). busca de nuevo archivos modificados.nautilus/metafiles/file:%2F%2F%2Fhome%2Fmadonna%2F. al utilizar ts_correct. [madonna@station madonna]$ alias ts_incorrect ts_correct alias ts_incorrect='touch timestamp. la sustitución de comandos se realiza cuando se invoca el alias (contrario a cuando éste se define).nautilus/metafiles/file:%2F%2F%2Fhome%2Fmadonna%2F.xml . renombrando el alias ts ts_incorrect y agregando la siguiente línea.c networking timestamp. Luego sigue explorando para saber qué archivos se modifican al utilizar la aplicación de la papelera Nautilus.%H:%M:%S)' Esta vez.nautilus/metafiles . evitando que la sustitución de comandos sea evaluada al crearse el alias. edita su archivo~/././. Esta es la conducta que madonna deseaba. porque el hecho de mover un archivo de un directorio a otro no afecta la hora modificada del archivo./.Trash.19:48:12 Después de arrastrar el icono untitled folder del escritorio al icono basura.19:39:18 timestamp. sólo las horas modificadas de los directorios. 185 .gnome-desktop.

6. 4. después de un comando fallido. La shell tiene la opción de shell cdspell habilitada.1. de tal forma que shells bash recién iniciadas tengan las siguientes características. Si está bien configurado. El comando rm es un alias para rm -i. La shell tiene habilitada la opción de shell cdspell. apropiada).. No será calificado por el script automático de calificación. 3. el intérprete debería tener una conducta igual a la siguiente. y cómo se relaciona con el número de historial del comando previamente ejecutado. El alias dir ejecuta el comando ls -l. El alias complementario globon habilita la expansión del nombre de ruta (inhabilitando la bandera de shell apropiada).bashrc bien configurado. Observe con cuidado la conducta del intérprete de comandos después de un comando con éxito. Un alias rm. El alias globoff inhabilita la expansión de nombre de ruta (habilitando la bandera de shell 3. 6. la shell bash no sobrescribirá un archivo existente. Configure el intérprete primario para que contenga el número de historial y el código de salida del comando previamente ejecutado. [madonna@station madonna] /tmp [madonna@station madonna] ls: /TMP: No such file or [madonna@station madonna] .. El alias globoff inhabilita las expansiones de nombre de ruta. La coma debería ser la única coma incluida en el intérprete. el cual ejecuta el comando rm -i. Ejercicio de desafio El siguiente ejercicio debe completarse como un ejercicio de desafio. 2. Al redireccionar la salida a un archivo. Al redireccionar la salida. 186 . El alias globon habilita expansiones del nombre de ruta. 5. separado por un : (sin espacios). 41 ls -d /tmp 42 ls -d /TMP 43 history [madonna@station madonna] ls -d /TMP ls: /TMP: No such file or [madonna@station madonna] 40:0 $ ls -d /tmp 41:0 $ ls -d /TMP directory 42:1 $ history 43:0 $ !42 directory 44:1 $ Deliverables A title Question 1 Un archivo ~/. 1. El alias dir ejecuta ls -l 2. la shell no sobrescribirá los archivos existentes. 4. 5.

/etc/profile. sin complicarnos con detalles de scripts e inicialización de shell.script whadda you want? 187 . le permite a los usuarios aplicar automáticamente muchas de las personalizaciones aprendidas en lecciones anteriores.bashrc es el único que puede utilizarse para personalizar la shell bash. De modo apropiado. el propósito de esta lección es cambiar esa idea. Discussion Hasta el momento en este cuaderno. El saber qué scripts son leídos en el arranque.bashrc como si fuera el único archivo que pudiera ser usado para personalizar la shell bash. a riesgo de dejar al estudiante con la impresión de que el archivo ~/. Si esta es la impresión que se ha dado. utiliza un editor para crear un archivo de texto llamado prompts. blondie desearía explorar diferentes estilos de intérpretes de shell. comenta todo menos la primera línea. Lectura de scripts La shell bash permite a los usuarios coleccionar múltiples comandos dentro de un sólo archivo y luego ejecutar los comandos como si fueran tecleados directamente en ese intérprete. Por último.bashrc se leen en el arranque de cada shell de inicio. Como ejemplo.. el comando usado para leer un archivo es el comando interno de shell source. /etc/bashrc y ~/.script PS1="whadda you want? " #PS1="\a\u@\H \$(date --iso-8601) \t [\!] \$ " #PS1="[\u@\h \W]\$ " Con el fin de ensayar el primer intérprete. En esta lección. [blondie@station blondie]$ cat prompts. Esto nos ha permitido enfocarnos en temas. Agrega varias líneas.d y ~/. lee el archivoprompts. Las shells bash pueden ser tanto shells de inicio como de no inicio.script. Todos los scripts de shell se ejecutan en la misma shell que lee el script. ~/.Lectura de scripts de shell e inicialización de shell Conceptos clave • • • • • • • Los scripts de shell son leídos con el comando source o con . cada una proporcionando una definición diferente para la variable PS1.bash_profile leídos en el arranque de cada shell de inicio de sesión. archivos dentro del directorio /etc/profile. Las shells bash pueden ser tanto shells interactivas como no-interactivas. hemos estado utilizando el archivo ~/.bash_logout es leída por cada salida de shell de inicio de sesión. discutiremos cómo se pueden leer los scripts de shell y cuáles scripts se leen por defecto en el arranque con Red Hat Enterprise Linux. Para ayudar a comparar. [blondie@station blondie]$ source prompts. Esto se conoce como leer el archivo.script. tales como los alias y expansiones de shell.

com 2003-09-02 05:55:35 [15] $ Edita de nuevo el archivo. Después de describir la secuencia de arranque. no inicio.script. blondie edita prompts. Cuando usted inicia utilizando la consola virtual o dentro de una máquina remota. 188 .Tras originar el archivo. Luego lee el script otra vez. blondie@station. Este punto importante merece repetición: cuando se originan los scripts de shell.com 2003-09-02 05:57:07 [16] $ cat prompts. Como el nombre lo dice. interactivas y no interactivas Habiendo aprendido cómo leer scripts de shell de modo arbitrario. comentando la primera línea y sin comentar la segunda. comentando la segunda línea y dejando de comentar la última (que restaura su intérprete al predeterminado de Red Hat Enterprise Linux). prompts. la shell bash también tiene un comando interno llamado . Cuando . Para comenzar a distinguir sutilmente entre diferente tipos de shells: shells deinicio y no-inicio. blondie@station. whadda you want? cat prompts. Cuando inicie mediante el entorno gráfico X. el cual es un sinónimo para el comando source. Cuando . es sinónimo del comando source. la cual tiende a ser un tema demasiado complicado.script #PS1="whadda you want? " #PS1="\a\u@\H \$(date --iso-8601) \t [\!] \$ " PS1="[\u@\h \W]\$ " Como un atajo. adquiere diferentes significados en diferentes contextos. el proceso será resumido en una forma más sucinta. aparece como la primera palabra en la línea.script blondie@station. ahora volvemos la atención a la inicialización de bash. Esta vez. Luego. y shells interactivasy no-interactivas. las shells de inicio de sesión son la primera shell que usted ve cuando inicia sesión en una máquina. la palabra .example.example. es el directorio de inicio actual) Inicialización de bash Shells de Inicio. aparece en cualquier otra parte.com 2003-09-02 05:57:09 [17] $ . su primera shell interactiva es una shell de inicio. la variable PS1 se modifica como si el contenido del script fuera tecleado en la línea de comando.. blondie hace uso de su atajo al originar el archivo.script [blondie@station blondie]$ (Algo confuso. el contenido del script se ejecuta (y puede modificarse) dentro de la shell actual.example. la shell no vista utilizada para empezar su inicialización X es una shell de inicio de sesión.script #PS1="whadda you want? " PS1="\a\u@\H \$(date --iso-8601) \t [\!] \$ " #PS1="[\u@\h \W]\$ " whadda you want? source prompts.

d/*.sh. Obviamente. El script /etc/profile luego origina todos los archivos coincidentes al patrón /etc/profile. Shells de inicio de sesión Tras el arranque. se crea una nueva shell de inicio de sesión. si usted fuera a iniciar manualmente una subshell. las shells de inicio de sesión primero leen el archivo /etc/profile. [1] Luego. ésta sería una shell de no-inicio. Scripts bash de arranque ¿Cuál es la diferencia entre una shell de inicio de sesión y una shell de no-inicio de sesión? o entre una shell interactiva y una no-interactiva? Principalmente. ¿Con qué frecuencia ve shells de no-inicio de sesión? Por todas partes. son shells interactivas. USER. o ejecuta scripts de shell (como se describirá en la siguiente lección). Las shells invocadas como resultado de una sustitución de comandos y similares son shells no-interactivas. Cada vez que usted abre una nueva terminal en un entorno gráfico X. las shells difieren en qué archivos de inicialización se leen tras el inicio. las subshells iniciadas de forma manual o las shells en terminales X recién abiertas. El siguiente cuadro ayudará a distinguir los diferentes tipos de shells. A continuación. Diferentes tipos de shells bash Contexto Shells de inicio de sesión desde consolas virtuales Shells de inicio de sesión cuando se inicie dentro de una máquina a través de la red Shell de inicialización X Shell de terminal X subshell iniciada al ejecutar manualmente bash subshell utilizada en sustitución de comandos subshell utilizada para comandos agrupados en () subshell utilizada al ejecutar scripts ¿Shell de inicio de sesión? Si Si Si No No No No No ¿Shell interactiva? Si Si Si Si Si No No No El cuadro de arriba lista los predeterminados para Red Hat Enterprise Linux. En Red Hat Enterprise Linux. La version por defecto de este archivo apenas agrega $HOME/bin al PATH del usuario. En Red Hat Enterprise Linux. HOSTNAME. y HISTSIZE. la shell es una shell de no-inicio. Table 1. este archivo inicializa varias variables de entorno tales como PATH.bash_profile. la shell bash busca una serie de archivos en el directorio de inicio del usuario. se indicará el bash de inicialización de shell como se presenta en Red Hat Enterprise Linux. Diferentes conductas pueden invocarse al especificar explícitamente ciertas opciones de línea de comandos. y lee la primera que existe.bashrc descrito a continuación. y busca y origina el archivo~/.Cada shell de por medio se conoce como una shell de no-inicio de sesión. las shells pueden ser interactivas o no-interactivas. Además. Vea la página del manual de bash(1) para obtener mayor información. Cada vez que usted usa la sustitución de comandos o comandos de grupo entre paréntesis. el archivo por defecto es ~/. 189 . Usualmente.

las variables de entorno se copian automáticamente en el hijo (por el kernel de Linux).bashrc hallado en el directorio de inicio del usuario. El archivo global /etc/bashrc realiza varias operaciones. HISTSIZE del usuario. Archivos de configuración de arranque bash ¿Por qué hay shells de inicio de sesión y shells de no inicio de sesión? ¿Por qué tanta complejidad? Al arrancar. cuando las subsehells se inician. observe que los archivos /etc/profile y ~/.bash_profile son leídos śolo por las shells de inicio de sesión. mientras que los archivos 190 . Otras personalizaciones de shell. Siempre que un proceso hijo es generado por la shell de inicio de sesión. En la configuración por defecto de Red Hat Enterprise Linux. Si la subshell luego lee los mismos scripts de arranque como su shell de inicio del padre. etc). Al examinar los scripts de arranque listados arriba. con el fin de agilizar los tiempos de arranque. los varios scripts de arranque leídos por shells de inicio tienden a emplear mucho tiempo personalizando variables de entorno (tales como el PATH. Shells de no-inicio de sesión (no interactivas) Las shells no-interactivas de no-inicio de sesión no leen por defecto ninguno de los archivos de arranque (aunque esta conducta puede cambiarse estableciendo la variable de entorno BASH_ENV. la única personalización que este archivo realiza es buscar y leer el archivo /etc/bashrc. son conceptos específicos de bash. el único archivo utilizado para personalizar shells de no-inicio de sesión es el archivo ~/. el esfuerzo de inicializar variables de entorno se duplicaría sin necesidad. No obstante. Figure 1. no de nivel de kernel y deben reinicializarse cada vez que se inicie una nueva shell. sea ésta una subshell u otro caso. Para mayor información ver la página de manual bash(1)). Por lo tanto. incluso establece la usmask por defecto del usuario y define la variable PS1 (la cual define el prompt de shell). principalmente los alias. las shells de no-inicio intentan acortar el proceso.Shells de no-inicio de sesión (interactivas) En lo que concierne al programa bash. no se necesita repetir todo este trabajo.

bash_profilesiguiente línea a su archivo ~/. las shells de inicio de sesión leerán el archivo ~/.bash_profile). Del mismo modo. Una situación parecida se presenta con /etc/bashrc y ~/. el cual inicia una shell de inicio de sesión como el nuevo usuario. Salida de las shells de inicio de sesión: ~/. El segundo es ejecutar su . usando paréntesis para agrupar comandos o usando sustitución de comandos. presentamos el comando su como una forma de cambiar el userid (cambiar el id del usuario). El primero era simplemente su nombredeusuario. agrega la sourcing" echo "~/. el archivo simplemente ejecuta el comando clear para que la pantalla se limpie de información tras la salida. funciones de shell y opciones de shell Alias globales.bashrc /etc/bashrc Tipo de shell Shells de inicio de sesión Shells de inicio de sesión Shells de inicio de sesión Todas las shells interactivas Todas las shells interactivas Uso previsto Variables de entorno globalmente útiles Variables de entorno de paquetes específicos Variables de entorno de usuarios específicos Alias de usuario específico.d/*.bash_logout Tras la salida. El primero puede utilizarse por el administrador del sistema para establecer la configuración de todo el sistema. Ejemplos El comando su revisitado En un cuaderno anterior.~/. El último lo pueden utilizar usuarios individuales para personalizar su propio entorno. Con el fin de evitar posibles efectos secundarios del script de arranque. Mientras que los dos últimos archivos se utilizan para personalizaciones específicas de la shell tales como alias y opciones de shell. las shells no-interactivas no leen scripts de arranque tras el inicio.nombredeusuario.bashrc y /etc/bashrc son leídos por todas las shells (de inicio y no-inicio).sh ~/. Los dos archivos anteriores suelen utilizarse para configurar variables de entorno. introdujimos dos modos de usar el comando su.bashrc. hay un archivo de arranque global (/etc/profile) y un archivo de arranque local (~/. porque sólo tienen que ser inicializadas una vez.bashrc. Table 1. funciones de shell y opciones de shell ¿Por qué hay shells interactivas y no-interactivas? Las shells no-interactivas son shells iniciadas como resultado de ejecutar un script (ver la siguiente lección). Archivos de configuración de arranque bash Archivo /etc/profile /etc/profile. el cual inicia una nueva shell de no-inicio como el nuevo usuario. Con el fin de explorar las implicaciones de estos dos modos haremos que blondie agregue la siguiente línea a su archivo ~/. Observe la simetría. Para la configuración de variables de entorno.bash_profile ~/. En Red Hat Enterprise Linux. 191 .bash_logout si existe. En ese momento.bash_profile.

se les pide a los usuarios "salir e ingresar otra vez" para que los cambios de configuración surtan efecto. [blondie@station blondie]$ . podría leer de modo manual el archivo /etc/profile.bash_profile como ~/. si una membresía de grupo de usuarios ha cambiado. sino sólo para aquellos relacionados con la shell bash. [blondie@station blondie]$ . [elvis@station elvis]$ su blondie Password: ~/. Por ejemplo. Por ejemplo.bashrc fue leído. Agregue la siguiente línea a su archivo de arranque ~/. A menudo.echo "~/. En el segundo caso. tanto ~/.bashrc son leídos. De modo explícito. ejecutando source en /etc/profile y ~/. ~/.blondie Password: ~/. Especificaciones 1.bashrc sourcing ~/. /etc/profile De otro modo. si blondie sospecha que sus archivos de arranque locales bash han cambiado.bash_profile (Observe que esto no funcionaría para todos los cambios de configuración. Esto suele darse porque al instalar un nuevo software o algún otro cambio se han alterado los archivos de configuración del usuario (o del sistema) bash y las direcciones desearían que el usuario reiniciara la shell para que los archivos de arranque sean leídos otra vez. 192 .bash_profile sourcing En el primer caso. en general.bashrc sourcing" Ahora haremos que el usuario elvis haga su en blondie usando ambas formas. entonces puede leer su archivo de configuración local bash manualmente.bash_profile A menudo en este cuaderno y en las direcciones de Linux (y Unix). entonces el usuario sí tiene que salir e ingresar otra vez para que los cambios surtan efecto) Ejercicios en línea Lab Exercise Objetivo: Configurar los scripts de arranque bashEstimated Time: 10 mins. sólo el archivo ~/. los usuarios pueden evitarlo releyendo los archivos clave de configuración en su lugar.bashrc.bashrc sourcing [blondie@station elvis]$ exit exit [elvis@station elvis]$ su . si blondie sospecha que un cambio ha ocurrido en el sistema de archivos de arranque bash.

Trash/* Deliverables A title Question 1 content_view let_ 1.bashrc 2.bash_profile. Una shell bash que tras la salida de una shell de inicio de sesión suprima el contenido (nooculto) de la papelera de Nautilus.bash_logout.echo "sourcing ~/. 193 . Agregue la siguiente línea a su archivo de arranque ~/.bashrc y sourcing ~/.bashrc. Una shell bash que tras el arranque de una shell de inicio de sesión emita los mensajes 3. echo "sourcing ~/.bashrc" 2. sourcing ~/. Agregue la siguiente línea a su archivo ~/. rm -fr ~/.bash_profile" 3. Una shell bash que tras el arranque de una shell de no-inicio de sesión emita el mensaje sourcing ~/.

Programas de terminal Los programas de terminal reunen entradas y salidas de pantalla en un flujo. La salida de un comando puede utilizarse como la entrada para otro comando. Hacen uso de toda la pantalla y manejan la presentación del texto y rediseño de pantalla en formas sofisticadas. No necesitan ratón y son apropiados para terminales y consolas virtuales. del inglés standard out) y suele estar conectada a la pantalla de la terminal. Los editores de texto vi. Cuando se utiliza la shell bash. Discussion Muchos comandos de Linux leen la entrada desde el teclado y muestran la salida en la terminal.Standar I/O and Pipes Entrada estándar y salida estándar Conceptos clave • • • • Los programas basados en la terminal tienden a leer información desde una fuente y a escribir la información en un destino. El navegador de red mozilla es un ejemplo de un programa gráfico. los programas basados en la terminal suelen llamarse simplemente comandos. Tres tipos de programas En Linux (y Unix). la stdout puede redirigirse mediante > o >> y la stdin puede redirigirse mediante <. permitiendo que los comandos sencillos se utilicen conjuntamente para realizar tareas más complejas. La fuente desde donde se leen los programas se conoce como una entrada estándar (stdin. raras veces rediseña la pantalla como si escribiese directamente a la impresora lo cual no permite al cursor devolver la página. nano y el navegador de red links son ejemplos de este tipo de programas. Esperan que el usuario esté utilizando el ratón y los componentes gráficos comunes tales como menús emergentes y botones para la entrada de parte del usuario. El destino al que los programas escriben se conoce como una salida estándar (stdout. 194 . aprenderá cómo se puede redirigir desde dónde se lee la entrada y a dónde va la salida. En este cuaderno. Debido a su sencillez. Programas gráficos Los programas gráficos están diseñados para ejecutarse en el entorno gráfico X. los programas se pueden agrupar en los siguientes tres diseños. Ejemplos de este tipo de programas son ls. del inglés standard in) y suele estar conectada al teclado de la terminal. grep y useradd. Programas de pantalla Los programas de pantalla esperan utilizar una consola de texto.

0 0 0 ? root 8 0.0 0.0 0. Con el fin de diagnosticar el problema. Redirección de stdout Escritura de una salida a un archivo Cuando un programa de terminal genera salida. recoge información ahora pero la analiza más tarde.0 0 0 ? root 5 0. El usuario elvis puede examinar el archivo más tarde en un momento más apropiado. Elvis puede redirigir la salida del comando ps aux al archivo sluggish.0 0. suponga que la máquina que elvis está utilizando se vuelve muy lenta y no responde. escriben información como un flujo a un solo destino como por ejemplo una pantalla. por lo general. La shell bash usa > para redirigir un flujo de stdout de proceso a un archivo. El comando ps escribe en stdout. dado que la máquina es tan lenta.0 0. No permita que la simplicidad de estos comandos que reciben entradas y salidas lo engañen. Algunas veces para automatizar los comandos más repetidos. Con frecuencia el flujo de stdout está conectado a la terminal que inició el proceso para que la salida sea escrita a la pantalla de la terminal. [elvis@station elvis]$ head sluggish.0 0 0 ? root 7 0.0 0.txt y regresar para examinar el archivo cuando la máquina esté respondiendo mejor.Este capítulo se enfoca en este último tipo de programa. usualmente suele escribir esa salida a su flujo de stdout. pero stdout es redirigida por la shell bash al archivo sluggish.0 0.0 0. sin saber qué está conectado al final receptor de ese flujo. Por lo general.txt USER PID %CPU %MEM VSZ RSS TTY root 1 0. [elvis@station elvis]$ ps aux > sluggish.0 0. En Linux (y Unix). como siempre lo hace. Usted hallará que muchos de estos comandos son muy sofisticados y le permiten utilizar la interfaz de la línea de comandos de manera eficaz. el flujo de entrada se conoce como entrada estándar (suele abreviarse stdin) y el flujo de salida se conoce como salida estándar (o en forma abreviada stdout). Entrada estándar (stdin) y salida estándar (stdout) Los programas de terminal suelen leer información como un flujo desde una sola fuente tal como el teclado de una terminal.0 1380 76 ? root 2 0. grabar la salida de un comando o incluirlo más tarde en un informe o correo se considera conveniente redirigir stdin desde stdout hacia los archivos. elvis desearía examinar los procesos que están ejecutándose.0 0 0 ? root 4 0.0 0.txt.0 0 0 ? root 9 0.0 0 0 ? root 3 0. Por ejemplo. Sin embargo.txt [elvis@station elvis]$ Observe que no se ve ninguna salida en la terminal. Igualmente.0 0 0 ? root 6 0.0 0 0 ? STAT S SW SW SWN SW SW SW SW SW START Jun02 Jun02 Jun02 Jun02 Jun02 Jun02 Jun02 Jun02 Jun02 TIME 0:04 0:00 0:00 0:00 0:00 0:00 0:00 0:37 0:00 COMMAND init [ [keventd] [kapmd] [ksoftirqd_CPU0] [bdflush] [kswapd] [kscand/DMA] [kscand/Normal] [kscand/HighMem] 195 . stdin y stdout están conectadas a la terminal que ejecuta el comando.

0 1380 76 ? S root 2 0. El cuerpo del texto del correo electronico se introduce luego desde el teclado.. [elvis@station elvis]$ mail Hey sysadmin. El comando mail espera un destinatario como argumento y la línea de asunto se puede especificar con la opción -s. Esto suele conocerse como sobrescribir un archivo. en lugar de sobrescribirlo.0 0.0 0 0 ? SW root 5 0. Thanks! .txt ya existió. bash usa >>.0 0.0 0. como también una lista de los procesos actuales en ejecución. su contenido original se perdería. Habla con su administrador local de sistemas .0 0 0 ? SW root 6 0.0 0 0 ? SW root 7 0. bash usa < para hacer que lean entradas desde alguna parte diferente al teclado.com 196 . quien piensa que examinar la lista de los procesos en ejecución es una buena idea y le pide a elvis que le envíe una copia por correo. I'm sending a list of processes that were running when the computer was running in a separate email. El final del texto se señala con un punto aparte en una línea.0 0.0 0 0 ? SW START Jun02 Jun02 Jun02 Jun02 Jun02 Jun02 Jun02 Jun02 TIME 0:04 0:00 0:00 0:00 0:00 0:00 0:00 0:37 COMMAND init [ [keventd] [kapmd] [ksoftirqd_CPU0] [bdflush] [kswapd] [kscand/DMA] [kscand/Normal] Redirección de stdin Así como bash usa > para lograr que los comandos entreguen su salida en alguna otra parte que no sea la pantalla.txt [elvis@station elvis]$ head sluggish. Por medio del comando mail basado en la terminal. Suponga que elvis quiso registrar un marcador de tiempo de cuando se estaba presentando la conducta lenta.0 0 0 ? SW root 3 0. El usuario elvis todavía está tratando de entender el porqué su máquina está lenta. elvis escribe "manualmente" desde el teclado un correo electrónico al administrador.Agregando una salida a un archivo Si el archivo sluggish.0 0 0 ? SWN root 9 0. [elvis@station elvis]$ date > sluggish. Cc: --elvis -s "Computer is sluggish" sysadmin@example. Primero podría crear (o sobrescribir ) el archivo con la salida del comandodate mediante > y luego agregarlo a la salida del comando ps aux mediante >>.txt Tue Jun 3 16:57:23 EDT 2003 USER PID %CPU %MEM VSZ RSS TTY STAT root 1 0.0 0..0 0.0 0 0 ? SW root 4 0.0 0. Para agregar una salida de un comando a un archivo.txt [elvis@station elvis]$ ps aux >> sluggish.0 0.

existe un enlace simbólico para cada archivo abierto por el proceso. El kernel de Linux ofrece una forma fácil de examinar los archivos abiertos y los descriptores de archivos de un proceso en ejecución mediante el sistema de archivos /proc.txt. elvis ejecuta con cat el archivo /etc/termcap y luego casi de inmediato suspende el programa con CONTROL-Z. Sólo redirige el flujo de stdin del comando mail para leerlo desde el archivo. 197 . [elvis@station elvis]$ cat /etc/termcap [1]+ Stopped cat /etc/termcap Usando el comando ps busca el PID del proceso. la stdin del proceso mail estaba conectada a la terminal y el cuerpo del mensaje lo proporcionó el teclado. Los procesos de Linux (y Unix) mantienen el registro de los archivos que están abiertos mediante la asignación de un número entero a cada uno.txt como el cuerpo del texto. Este lee el cuerpo del mensaje desde stdin. Dentro del subdirectorio /proc/pid/fd. El comando mail no cambia su conducta básica.txt El administrador de sistemas recibirá un correo electrónico de elvis con "salida ps" como su línea de asunto y el contenido del archivo sluggish.txt y el cuerpo del mensaje fuera provisto por su contenido. A continuación.Para su mensaje de seguimiento.com < sluggish. En el segundo caso. Con el fin de leer o escribir información en un archivo un proceso debe abrir el archivo. elvis puede fácilmente enviar la salida del comando ps grabada en el archivo sluggish. [elvis@station elvis]$ mail -s "ps output" sysadmin@example. El nombre del enlace simbólico es el número entero del descriptor de archivo abierto y el enlace simbólico apunta al archivo mismo. luego elvis examina el directorio del proceso /proc/pid/fd. bash arregló para que la stdin del proceso mail se conectara al archivo sluggish. El número entero se conoce como un descriptor de archivos. El subdirectorio del proceso a su vez tiene un subdirectorio llamado fd (del inglésfile descriptor). Cada proceso tiene un subdirectorio asociado bajo /proc llamado como su PID (ID del proceso). En el primer caso. [1] Dentro del cofre: archivos abiertos y descriptores de archivos Archivos abiertos y descriptores de archivos Para apreciar plenamente cómo administrar procesos de entrada y salida estándar y archivos debemos introducir el concepto de un descriptor de archivos.

es el error estándar (será tratado en la siguiente lección). salida estándar y descriptores de archivos de error estándar Flujo Entrada estándar Salida estándar Error estándar Descriptor 0 1 2 Abbreviation stdin stdout stderr Recuerde que /dev/tty1 es el nodo del dispositivo conectado al controlador dentro del kernel. elvis ejecuta con cat el archivo /etc/termcap pero esta vez redirige stdout al archivo /tmp/foo. Redirección En el siguiente ejemplo. es la entrada estándar. Table 1. el mismo archivo abierto tres veces: /dev/tty1. elvis ahora mira en el subdirectorio. ¿Qué sucede si el proceso cat lee desde stdin? Éste lee la entrada desde el teclado de elvis. y el tercero. Una vez más. Entrada estándar. el archivo descriptor 2. el archivo descriptor 1. el descriptor de archivo 0. El primero. [elvis@station elvis]$ cat /etc/termcap > /tmp/foo [1]+ Stopped cat /etc/termcap >/tmp/foo 198 . El comando cat tiene tres archivos abiertos antes que éste o más exactamente. elvis suspende el comando en la mitad del camino con las teclas CONTROL-Z. No es de sorprender que el proceso cat tenga abierto el archivo /etc/termcap (debe poder leer el archivo para mostrar su contenido). Cualquier cosa que elvis teclee se puede leer desde este archivo y cualquier cosa que se escriba en este archivo aparecerá en la terminal de elvis. es la salida estándar. cada proceso hereda tres archivos abiertos tras el inicio.[elvis@station elvis]$ ps PID TTY TIME CMD 1368 pts/1 00:00:00 bash 1910 pts/1 00:00:00 cat 1911 pts/1 00:00:00 ps [elvis@station elvis]$ ls -l /proc/1910/fd total 0 lrwx-----1 elvis elvis 64 lrwx-----1 elvis elvis 64 lrwx-----1 elvis elvis 64 lr-x-----1 elvis elvis 64 Sep Sep Sep Sep 13 13 13 13 06:42 06:42 06:42 06:42 0 1 2 3 -> -> -> -> /dev/tty1 /dev/tty1 /dev/tty1 /etc/termcap elvis observa que el PID del proceso cat es 1910. el cual corresponde al PID observado. Quizás un poco extraño es que éste no esté sólo o incluso que no sea el primer archivo abierto por el proceso. ¿Qué archivos abiertos heredó el comando cat de la shell bash que lo inició? El nodo del dispositivo /dev/tty1 para todos los tres. Como protocolo de Linux (y Unix). ¿Qué sucede si éste escribe a stdout? Cualquier cosa que se escriba se verá en la terminal de elvis. El segundo.

elvis examina los archivos que el comando cat ha abierto y los descriptores de archivo asociados con ellos. como el anterior). 199 . la salida estándar) no está conectado a la terminal sino al archivo /tmp/foo. ¿Qué sucede cuando elvis redirige tanto la entrada como la salida estándar? [elvis@station elvis]$ cat < /etc/termcap > /tmp/foo [1]+ Stopped cat </etc/termcap >/tmp/foo [elvis@station elvis]$ ps PID TTY TIME CMD 1368 pts/1 00:00:00 bash 1980 pts/1 00:00:00 cat 1988 pts/1 00:00:00 ps [elvis@station elvis]$ ls -l /proc/1980/fd total 0 lr-x-----1 elvis elvis 64 Sep 13 07:07 0 -> /etc/termcap l-wx-----1 elvis elvis 64 Sep 13 07:07 1 -> /tmp/foo lrwx-----1 elvis elvis 64 Sep 13 07:07 2 -> /dev/pts/1 El descriptor de archivo 0 (entrada estándar) no está conectado a la terminal sino al archivo /etc/termcap. sin ningún nombre de archivo o archivos para mostrar). el comando cat lee desde stdin. Con el fin de apreciar el beneficio real del diseño de comandos para leer desde la entrada estándar en lugar de los archivos llamados debemos esperar hasta que veamos las tuberías en una próxima lección. éste muestra la entrada estándar en su lugar. [elvis@station elvis]$ ps PID TTY TIME CMD 1368 pts/1 00:00:00 bash 1976 pts/1 00:00:00 cat 1977 pts/1 00:00:00 ps [elvis@station elvis]$ ls -l /proc/1976/fd total 0 lrwx-----1 elvis elvis 64 l-wx-----1 elvis elvis 64 lrwx-----1 elvis elvis 64 lr-x-----1 elvis elvis 64 Sep Sep Sep Sep 13 13 13 13 07:05 07:05 07:05 07:05 0 1 2 3 -> -> -> -> /dev/pts/1 /tmp/foo /dev/pts/1 /etc/termcap Observe que el descriptor de archivo 1 (en otras palabras. Cuando el comando cat se llama sin argumentos (por ejemplo.Utilizando la misma técnica anterior. ¿Cuál es la diferencia de eficiencia entre los siguientes tres comandos? [elvis@station elvis]$ cat < /etc/termcap > /tmp/foo [elvis@station elvis]$ cat /etc/termcap > /tmp/foo [elvis@station elvis]$ cp /etc/termcap /tmp/foo No hay ninguna. En lugar de abrir un archivo específico (mediante el descriptor de archivo 3.

200 . Por último. trata de alguna manera de salir del comando que ha iniciado. esperará entradas desde stdin. puede automatizarse con un script sencillo de texto y redirección. [blondie@station blondie]$ cat zoo elephant seal ape giraffe fish [blondie@station blondie]$ sort zoo ape elephant fish giraffe seal Como el nombre en inglés lo indica. [blondie@station blondie]$ sort < zoo ape elephant fish giraffe seal Aunque esta conducta parece (y es) perfectamente razonable. Salida del comando sort A continuación. por ejemplo.Ejemplos Los siguientes ejemplos incluyen un ejemplo rápido de cómo los nuevos usuarios suelen confundirse con comandos que leen desde la entrada estándar y un par de ejemplos de "la vida real" que los programas ftp y gnuplot utilizan. asuma que blondie no sabe aún sobre la entrada estándar. Sin entender que el comando sort está esperando para leer la entrada estándar. Al igual que el comando cat. "sólo para ver qué hace". invoca el comando sort. nombres de archivo para ordenar). su teclado. Los programas ftp y gnuplot son complicados y estos ejemplos apenas introducen algunas de sus funciones que sirven para hacer énfasis en uno de los temas más importantes en este cuaderno: si el programa es conducido desde una interfaz de línea de comandos. blondie emplea el comando sort para ordenar los animales que se encuentran en el archivo de texto zoo. a menudo confunde a los nuevos usuarios quienes inocentemente teclean un nombre de comando. cuando el comando sort se ejecuta sin argumentos (por ejemplo. A continuación. el comando sort (en su forma más simple) lee un archivo y escribe línea por línea en orden alfabético. Al explorar. un amigo le dice en voz baja "CONTROL-D".

Transferencias automáticas FTP La usuaria blondie usualmente toma un archivo README desde el servidor ftp para el proyecto del kernel de Linux.org ftp permite usuarios anónimos. 201 . Cuándo se les pide una contraseña. el comando sort imprime una lista ordenada de todo lo que se lee en la entrada estándar.org. la secuencia de control convencional "Fin del archivo" (recuerde el cuaderno 1). usuarios que entran con el nombre de usuario "anónimo". ftp. El servidor kernel. pero por protocolo dan su dirección de correo electrónico en su lugar.[blondie@station blondie]$ sort ls quit man sort exit get me out of this CTRL-D exit get me out of this ls man sort quit [blondie@station blondie]$ Tras teclear CONTROL-D. los usuarios anónimos de ftp no necesitan entregar ninguna. es decir.kernel.

g150 Opening ASCII mode data connection for file list drwxrws--2 korg korg 4096 Mar 18 04:05 RCS -r--r--r-1 korg korg 1963 Oct 4 2001 README -r--r--r-1 korg korg 578 Mar 18 04:04 README_ABOUT_BZ2_FILES drwxrwsr-x 4 korg korg 4096 Oct 26 2000 dist .org] Name (ftp. 1963 bytes received in 0. 226 Transfer complete.kernel.[blondie@station student]$ ftp ftp. Sin embargo.237.116).4e+03 Kbytes/sec) ftp> quit 221 Goodbye.com). 150 Opening BINARY mode data connection for README (1963 bytes).189.237. ftp> ls 227 Entering Passive Mode (204.org (204. blondie utiliza un editor de texto sencillo para crear el archivo getreadme.org:blondie): anonymous 331 Anonymous login ok. getreadme. esta vez usaría < para hacer que bash redirija stdin desde el archivo getreadme. ftp> get README local: README remote: README 227 Entering Passive Mode (204. Contraseña: (blondie teclea su dirección de correo-electrónico) 230 Anonymous access granted.org. 202 .229). la información es provista por el archivo en lugar del teclado. ftp> ls 227 Entering Passive Mode (204.kernel. Cuando el comando ftp lee la entrada desde su flujo de stdin.ftp.116. el cual reproduciría los comandos tecleados por ella.189.152. blondie@example.kernel.000564 secs (3. Remote system type is UNIX. 220 ProFTPD [ftp..237. el cual contiene todos los comandos que ella escribió de modo interactivo en el teclado (incluyendo la contraseña que dio al servidor anónimo ftp. restrictions apply.116.152.116. Si blondie descargara este archivo a menudo. Primero. blondie teclea comandos para navegar los directorios del servidor ftp.ftp. Podría entonces ejecutar el mismo comando ftp ftp. 150 Opening ASCII mode data connection for file list drwxr-s--2 korg mirrors 4096 May 21 2001 for_mirrors_only drwx-----2 root root 16384 Mar 18 00:27 lost+found drwxrwsr-x 8 korg korg 4096 Mar 24 17:46 pub 226 Transfer complete. Using binary mode to transfer files..237).ftp.152.189.kernel. 226 Transfer complete.189. podría sentirse tentada a escribir un archivo de texto sencillo.org Connected to ftp. Cuando el comando ftp hace una pausa con el intérprete de comandosftp>.224). ftp> cd pub 250 CWD command successful.kernel. send your complete email address as your password.152.

Cuando ftp intentó leer la contraseña desde la terminal.com ls cd pub ls get README quit Observe cómo el contenido del archivo coincide exactamente con lo que tecleó al utilizar el comando anterior ftp.kernel. (los comandos no tienen que depender de stdin como su único medio de entrada.kernel. Por razones de seguridad.ftp anonymous blondie@example. primero hace uso de un archivo~/. hay una línea rara que dice ?Invalid Input.org pero redirige stdin desde el archivo recién creado.com. Luego. no se infirió desde el archivo getreadme. sino desde la terminal directamente. no las leen desde stdin.org:blondie): ?Invalid command drwxr-s--2 korg mirrors 4096 May 21 2001 for_mirrors_only drwx-----2 root root 16384 Mar 18 00:27 lost+found drwxrwsr-x 8 korg korg 4096 Mar 24 17:46 pub drwxrws--2 korg korg 4096 Mar 18 04:05 RCS -r--r--r-1 korg korg 1963 Oct 4 2001 README -r--r--r-1 korg korg 578 Mar 18 04:04 README_ABOUT_BZ2_FILES drwxrwsr-x 4 korg korg 4096 Oct 26 2000 dist -r--r--r-1 korg korg 1507 Oct 11 2001 index. el cual fue descargado por el comando ftp. no necesita ver esos listados cada vez que ejecuta el comando. Segundo. cuando leen contraseñas. Debido a que blondie sabe dónde esta localizado el archivo y ha incluido esa información dentro de un script.ftp. lo que no reconoció como un comando. muchos comandos. aunque la mayoría lo hacen). escribió la salida en stdout. blondie tiene un nuevo archivo README en su directorio. el programa se suspendió hasta que blondie pulsó la tecla ENTER.txt.netrc. El comando ftp está diseñado para buscar un archivo como ese en el directorio de inicio del usuario y si existe. [blondie@station blondie]$ ftp ftp.ftp Password:Name (ftp.org < getreadme. Cuando el comando ftp ejecutó los comandos ls desde getreadme.[blondie@station blondie]$ cat getreadme.kernel. el comando se detuvo y ella tuvo pulsar una vez ENTER para que continuara. Sin embargo. • Primero. Por último. Dado que la contraseña fue leída directamente desde la terminal. Cuando el comando ftp fue a leer la siguiente línea de la entrada decía blondie@example. los listados de directorio fueron descargados en la terminal al ejecutar el comando. éste 203 . blondie tuvo un par de contratiempos.html drwxrwsr-x 8 korg korg 4096 Jan 21 2002 linux drwxrwsr-x 3 korg korg 4096 Mar 24 17:46 scm drwxrwsr-x 3 korg korg 4096 Oct 11 2001 site drwxrwsr-x 11 korg korg 4096 Jan 1 2002 software [blondie@station blondie]$ ls -l README -rw-rw-r-1 blondie blondie 1963 Jun 3 17:37 README Después de ejecutar el comando. vuelve a ejecutar ftp ftp. • • Para resolver estos problemas. la cual está aún conectada a la terminal.

[blondie@station blondie]$ cat . Recopila 60 segundos de datos desde su máquina. vuelve a ejecutar el comando ftp y la operación se realiza sin problemas. [blondie@station blondie]$ head .ftp ==> . el primero.netrc ahora provee su nombre de usuario y contraseña.txt modificado (para proveer los comandos del programa ftp). del usuario ("us") y en estado inactivo ("id").kernel.ftp. el cual hace muestreos y cuadros de varios parámetros relacionados con el funcionamiento del sistema. blondie los suprime de su script getreadme.ftp [blondie@station blondie]$ ftp ftp.ftp <== cd pub get README quit [blondie@station blondie]$ ls getreadme. [blondie@station blondie]$ cat getreadme. Está familiarizada con el comando vmstat.ftp README Generación automática de gráficos con gnuplot La usuaria madonna desearía generar fácilmente diagramas de la actividad de la CPU de su máquina. especifica el periodo de muestreo en segundos y el último.netrc default login anonymous password blondie@example.provee el nombre de usuario del usuario y la contraseña. blondie usa un editor de texto sencillo para crear el siguiente archivo ~/.ftp cd pub get README quit Armada con su archivo ~/.netrc (para proveer su nombre de usuario y contraseña) y su archivo getreadme.com Dado que el archivo ~/. quita los comandos innecesarios ls también desde el script. Ella está interesada en las tres últimas columnas. las cuales son el porcentaje de tiempo que está gastando la CPU en el sistema ("sy"). el número de muestras para recopilar.netrc. la cual realiza muestreos cada segundo.netrc <== default login anonymous password user@site ==> getreadme. Luego.netrc getreadme.ftp [blondie@station blondie]$ ls getreadme.org < getreadme. El comando puede tomar dos argumentos numéricos. 204 . Después de estudiar la página del manual netrc(5).

. Terminal type set to 'x11' gnuplot> set term png Terminal type set to 'png' Options are ' small color' gnuplot> set output 'cpu. el cual usa comandos leídos desde una interfaz de terminal para generar diagramas de funciones matemáticas y datos numéricos.txt head stats.txt' using 0:14 title "system" with lines. [madonna@station madonna]$ gnuplot G N U P L O T Version 3. utiliza gnuplot. 'stats.png Figure 1. donde utiliza el visor de pantalla eog para ver su diagrama.txt' using 0:13 title "user" with lines.7 patchlevel 3 . Para diagramar los datos. [madonna@station madonna]$ eog cpu.png.png' gnuplot> plot 'stats. madonna abre el archivo stats.. 'stats.[madonna@station madonna]$ [madonna@station madonna]$ procs r b swpd free buff 2 6 0 17348 65604 1 5 0 15736 66008 1 6 0 11496 67224 0 6 0 10492 67944 0 6 0 10168 68324 3 3 0 8848 69424 3 3 0 8056 70188 1 6 0 12248 71084 vmstat 1 60 > stats.txt memory swap io cache si so bi bo 277768 0 0 15 16 277788 0 0 376 6269 277392 0 0 1216 8 277676 0 0 940 28 277644 0 0 576 0 277864 0 0 1252 64 277892 0 0 1068 1148 277636 0 0 940 28 in 126 314 422 338 261 429 422 341 system cpu cs us sy id wa 221 1 0 97 1 725 5 2 0 93 1533 15 16 0 69 1193 7 8 0 85 992 6 1 0 93 1386 10 16 0 74 1215 8 16 0 76 1275 9 4 0 87 Un poco frustrada porque las dos líneas de los encabezados interferirán con la diagramación de los datos.txt' using 0:15 title "idle" with lines gnuplot> quit Después de salir de gnuplot vuelve a la shell bash.txt en un editor de texto y los borra con facilidad. un sofisticado paquete de diagramación. Gráfico de madonna de la actividad de la CPU 205 . Después de navegar un poco a través de la ayuda en línea disponible dentro de gnuplot desarrolla los siguientes comandos para diagramar sus datos como un archivo de gráficos PNG llamado cpu.

Dado que madonna desearía a menudo generar un diagrama semejante.Tiempo estimado: 20 minutos. 2.gnuplot Ejercicios en línea Uso de la entrada estándar y la salida estándar Lab Exercise Objetivo: Usar la redirección de la shell bash para controlar de modo efectivo la entrada estándar y la salida estándar. y no tener la angustia de teclear el comando gnuplot a cada instante.txt' using 0:15 title "idle" with lines Ahora puede diagramar con facilidad datos recopilados recientemente redirigiendo su script como la stadin de gnuplot. 206 .gnuplot set term png set output 'cpu.txt. 3. teniendo el cuidado de poner un comando por línea. El comando uname -a lista información sobre su versión actual de kernel. usted debería poder reproducir una salida semejante a la siguiente.txt. El comando hostname informa su nombre de máquina asignado de la estación actual. Ejecute el comando uptime (sin argumentos) usando la redirección para agregar la salida al archivo ~/stdoutlab. genera un script que se puede utilizar para automatizar gnuplot. Ejecute el comando usando la redirección para agregar la salida al archivo ~/stdoutlab. Ejecute el comando (sin argumentos) y redirige la salida al archivo ~/stdoutlab.txt' using 0:14 titl e "system" with lines.png' plot 'stats. (no se preocupe si la información difiere de la que se muestra a continuación). [madonna@station madonna]$ gnuplot < cpu_plot. El comando uptime reporta cuánto tiempo ha pasado desde que arrancó su máquina y otra información de uso del sistema.txt. Si ha completado con éxito los tres pasos anteriores. Especificaciones 1. el cual contiene todos comandos gnuplot que entró desde el teclado. crea el archivo cpu_plot. [madonna@station madonna]$ cat cpu_plot. Mediante un editor de texto.txt' using 0:13 title "user" with lines. 'stats. 'stats.gnuplot.

debería generar un diagrama de una expresión matemática simple tal como el seno de x (sin(x)) o x al cuadrado (x**2).9 #1 Mon Aug 18 11:45:58 EDT 2003 i686 i686 i386 GNU/Linux 4. seguido por la salida del comando uptime.png: PNG image data. establezca su tipo de terminal a png (para gráficos PNG) y su archivo de salida en "gnuplot. Genere un archivo de texto sencillo. y genere su diagrama una vez más. 0. Estrategia sugerida para la automatización de un gnuplot Utilizando el ejemplo 3 como su guía..png script.06. experimente de modo interactivo con gnuplot. Deliverables A title Question 1 1. Un script ~/script. 0. Cuando gnuplot lea su script desde stdin.gnuplot [student@station student]$ ls gnuplot. 207 . load average: 0.19. el cual sirva de script para controlar gnuplot.png gnuplot. Una vez completado su script debería poderse utilizar como en el próximo ejemplo. El diagrama debería generarse como un gráfico PNG llamado "gnuplot.. gnuplot> set term dumb ... 640 x 480.png conteniendo un diagrama de una función matemática simple. non-interlaced [student@station student]$ eog gnuplot.txt station 07:09:31 up 11:30.gnuplot [student@station student]$ file gnuplot. 8-bit colormap.[student@station student]$ cat stdoutlab.png" mediante los siguientes comandos .20-20.txt.gnuplot. el cual contiene la salida del comando hostname.gnuplot [student@station student]$ gnuplot < script. ~/script. Si está utilizando una terminal de texto de un entorno gráfico X puede generar diagramas de texto al establecer su terminal de salida gnuplot como terminal "tonta": [student@station student]$ ls script. que cuando se utliliza como stdin para el comando gnuplot. Cuando haya entendido la secuencia de comandos para generar un diagrama como un archivo PNG registre los comandos como su script gnuplot.gnuplot. Un archivo llamado ~/stdoutlab. genera un archivo de gráficos PNG titulado gnuplot. seguido por la salida del comando uname -a.01 Linux station 2. 5 users. 2. hasta que pueda generar un diagrama sencillo.4.png".png Una vez que pueda producir gráficos.

stderr está conectado a una pantalla de terminal y los mensajes de error se encuentran entremezclados con las salidas estándar. Usualmente. 208 .Error estándar Conceptos clave • • • • Los programas Unix reportan condiciones de error a un destino llamado error estándar (stderr). elvis está utilizando el comando head -1 para generar una lista de las primeras líneas de todos los archivos en el directorio /etc/rc. muy usado para reportar condiciones de error. Ahora estamos listos para complicar un poco las cosas introduciendo un segundo flujo de salida. stdin y stdout y cómo usar > y < en la línea de comandosbash para redirigirlos. llamado error estándar (a menudo abreviado stderr). el flujo de stderr puede combinarse con el flujo de stdout mediante 2>&1 o >& Discussion Error estándar (stderr) Hemos discutido los flujos de salida y de entrada estándar. En la siguiente secuencia. el flujo de stderr puede redirigirse a un archivo mediante 2>. Al utilizar bash.d. Cuando se utiliza la shell bash.

d <== head: /etc/rc.d/rc1. No obstante. Luego.d/ rc6.d <== head: /etc/rc. Ambos flujos suelen estar conectados a la terminal y por eso es difícil distinguirlos.d/ rc* rc1.d <== head: /etc/rc.out head: /etc/rc.d/rc2.d/rc3. Sin embargo.d/rc6.d <== head: /etc/rc. Aunque no es obvio desde el principio.d: Is a directory head: /etc/rc. la información escrita a stderr es evidente.d: Is a directory head: /etc/rc.d/* > rcsummary.d/rc4.sysinit.d/rc5. el comando head está realmente enviando salida a dos flujos independientes.d <== head: /etc/rc.local* [elvis@station elvis]$ head -1 /etc/rc.d/ rc3.sysinit.d/rc5.d/rc2.d/rc2.sysinit* rc.d: Is a directory ==> /etc/rc.d: Is a directory La mayor parte de la salida es obedientemente redirigida al archivo rcsummary.d/rc0.d/ rc.d: Is a directory ==> /etc/rc.d/rc0. seguido por el primer número especificado de las líneas (en este caso. [elvis@station elvis]$ head -1 /etc/rc.d <== head: /etc/rc.d: Is a directory ==> /etc/rc.d/rc <== #! /bin/bash ==> /etc/rc.sysinit <== #!/bin/bash ==> /etc/rc. Redirección de stderr 209 .d/init.d/rc1.out.d: Is a directory ==> /etc/rc.d/ rc2.d/ init.d/rc.d: Is a directory head: /etc/rc. elvis ejecuta el mismo comando. cuando el comando head encuentra un directorio apenas se queja.rpmsave <== #!/bin/bash rc.d/rc5.d/rc.d/rc4.[elvis@station elvis]$ ls -F /etc/rc. pero un mensaje de error se escribe en un flujo separado llamado error estándar (a menudo abreviado stderr). al redireccionar stdout.local <== #!/bin/sh ==> /etc/rc.d/init.d: Is a directory head: /etc/rc.d <== head: /etc/rc. uno).d/* ==> /etc/rc.out.d/rc4.d/rc6.d: Is a directory ==> /etc/rc.d/rc0.d/rc1.d/rc3.rpmsave* Cuando se alimenta el comando head con múltiples archivos como argumentos este representa de manera conveniente el nombre del archivo.d: Is a directory head: /etc/rc.d/ rc4.d: Is a directory head: /etc/rc.d: Is a directory ==> /etc/rc. pero las quejas del directorio aún se visualizan.d/rc3.d: Is a directory head: /etc/rc.d/ rc0.d/init.d/rc.d/ rc5.d/rc6.d: Is a directory ==> /etc/rc. La salida normal se escribe en la salida estándar. redirigiendo stdout al archivorcsummary.d: Is a directory ==> /etc/rc.d <== head: /etc/rc.

pero en vez de redirigir stdout a rcsummary.d/rc0. la información escrita a stderr es evidente.local <== #!/bin/sh ==> /etc/rc.d <== ==> /etc/rc.d/rc.d <== ==> /etc/rc. Aunque no es obvio desde el principio.err.d <== ==> /etc/rc.d <== ==> /etc/rc.d/rc <== #! /bin/bash ==> /etc/rc.d/rc.d/rc5. Ambos flujos suelen estar conectados a la terminal y por eso es difícil distinguirlos.d <== ==> /etc/rc. pero en vez de redirigir stdout a rcsummary. el comando head está realmente enviando salida a dos flujos independientes.d/* 2> rcsummary. [elvis@station elvis]$ head -1 /etc/rc.d/init.d <== ==> /etc/rc.err ==> /etc/rc.sysinit <== #!/bin/bash ==> /etc/rc. pero un mensaje de error se escribe en un flujo separado llamado error estándar (a menudo abreviado stderr). redirige el stderr al archivo rcsummary.rpmsave <== #!/bin/bash 210 .err ==> /etc/rc.Así como bash usa > para redirigir lastdout.d/rc.d <== ==> /etc/rc.err.out.d/init.d/rc6.d/rc5.d/* 2> rcsummary.d <== ==> /etc/rc.rpmsave <== #!/bin/bash La mayor parte de la salida es obedientemente redirigida al archivo rcsummary.d/rc <== #! /bin/bash ==> /etc/rc. Por ejemplo. pero las quejas del directorio aún se visualizan.d <== ==> /etc/rc.d/rc2.sysinit.d/rc1.d <== ==> /etc/rc.d/rc1.d <== ==> /etc/rc. al redireccionar stdout. bash usa 2> para redirigir elstderr. elvis repite el comando head desde arriba. redirige el stderr al archivo rcsummary.d/rc4. elvis repite el comando head desde arriba.out.d/rc3.d/rc2.local <== /bin/sh ==> /etc/rc.d/rc.d/rc.d/rc6.d <== ==> /etc/rc. Por ejemplo.sysinit <== #!/bin/bash ==> /etc/rc. bash usa 2> para redirigir elstderr. [elvis@station elvis]$ head -1 /etc/rc.d/rc4.out. No obstante.d <== ==> /etc/rc. Redirección de stderr Así como bash usa > para redirigir lastdout.d/rc0. La salida normal se escribe en la salida estándar.d <== ==> /etc/rc.d/rc3.d/rc.sysinit.d <== ==> /etc/rc.d <== ==> /etc/rc.

d/* > rcsummary.d <== ==> /etc/rc. [elvis@station elvis]$ cat rcsummary.d/rc1.d/rc6.both.both head: /etc/rc.d/init.d/rc1.d: Is a directory head: /etc/rc.d/* > rcsummary.err [elvis@station elvis]$ En este caso.La salida es el complemento al ejemplo anterior.d/rc2.local <== #!/bin/sh ==> /etc/rc.sysinit <== #!/bin/bash ==> /etc/rc. ==> /etc/rc.d/rc2.sysinit.d/rc4.d/rc6.d <== ==> /etc/rc.d <== ==> /etc/rc.err head: /etc/rc. Ahora vemos la salida normal visualizada en la pantalla.d/rc0.d/rc0. elvis no halla lo que espera. tras examinar el archivo rcsummary. elvis ensaya el siguiente comando.d: Is a directory head: /etc/rc.d/rc.d/rc3head: / ==> /etc/rc.both Sin embargo.rpmsave <== #!/bin/bash 211 . [elvis@station elvis]$ head -1 /etc/rc.d: Is a directory head: /etc/rc.d: Is a directory En el siguiente ejemplo tanto > como 2> se utilizan para redirigir stdout y stderr de modo independiente.d: Is a directory head: /etc/rc.d/rc4.d: Is a directory head: /etc/rc.d/rc5.d/init.d: Is a directory head: /etc/rc.both 2> rcsummary.out.d: Is a directory head: /etc/rc. Como un primer intento. pero sin mensajes de error.d/rc. Combinación de stdout y stderr: vieja escuela Con frecuencia. ¿A dónde fueron a parar los mensajes de error? No costaría mucho trabajo adivinar. la salida estándar puede encontrarse en el archivo rcsummary. [elvis@station elvis]$ head -1 /etc/rc.dhead: /etc/rc.d/rc3.out 2> rcsummary.d/rc5. desearíamos redirigir los flujos de stdout y stderr combinados en un sólo archivo.d: I ==> /etc/rc.err y no queda nada para mostrar en la pantalla.d/rc. se pueden encontrar mensajes de error en rcsummary.d: Is a directory head: /etc/rc. [elvis@station elvis]$ cat rcsummary.d: Is a direc ==> head: /etc/rc.

bash usa >& para combinar stdin y stdout como en el siguiente ejemplo. stdout. y envíelo a dónde stdout está actualmente". Al usar ">out.d: Is a directory . Sin embargo.both ==> /etc/rc. el último símbolo 2>&1 debería considerarse como si se dijera "tome al stderr. [elvis@station elvis]$ head -1 /etc/rc.d/* >& rcsummary.both contiene la salida esperada. sobrescribieron la información de cada cual.. Cuando stdout y stderr escribieron al archivo. sobrescribir file si existe.d: Is a directory ==> /etc/rc. Redirección de stdin.d/init.".both Resumen El siguiente cuadro resume la sintaxis empleada por la shell bash para redireccionar stdin. Mucha de esta salida fue truncada y remplazada por "..d/rc <== #! /bin/bash ==> /etc/rc. Dado que bash está diseñado para ser compatible con sintaxis anteriores sh también soporta esta sintaxis. esa forma existe. 212 . y stderr tratados en la lección anterior y en ésta.d: Is a directory ==> /etc/rc. el orden de las redirecciones es importante. Además de ser difícil de escribir.txt" ¡no produce el mismo efecto! Para simplificar las cosas.d/rc1. Lo que se necesitaba en su lugar es de alguna manera pedirle a bash combinar de modo eficaz stderr y stdout dentro de un sólo flujo y luego redirigir ese flujo a un archivo único.both 2>&1 Aunque un poco extraño. Combinación de stdout y stderr: nueva escuela Al usar 2>&1 para combinar stdout y stderr se introdujo en la shell Unix original.d <== head: /etc/rc.rcsummary.d <== head: /etc/rc.d/rc0.d/* > rcsummary.d <== head: /etc/rc.La shell bash abrió dos veces el archivo rcsummary. Redirigir stdout a file agregando file si existe. Como es de esperarse.txt 2>&1" y "2>&1 >out. stdout y stderr en bash sintaxis cmd < file cmd > file cmd >> file efecto Redirección stdin desde file Redirigir stdout a file..d/rc1.d/rc0. Ahora.. [elvis@station elvis]$ head -1 /etc/rc. Table 1.d/init.both. la sintaxis no es conveniente. [elvis@station elvis]$ cat rcsummary. la shell Bourne (sh). pero trató cada archivo abierto como un archivo independiente.

. los usuarios experimentados de Unix suelen redirigir la salida a un seudo dispositivo llamado /dev/null.. elvis queda con un archivo llamado /tmp/foo que en realidad no quería. y redirigirlos a file. [elvis@station elvis]$ find /var -user elvis 2> /dev/null /var/spool/mail/elvis 213 . find: /var/spool/lpd/three-west: Permission denied find: /var/spool/lpd/one-east-color: Permission denied find: /var/spool/lpd/server1: Permission denied /var/spool/mail/elvis find: /var/spool/at: Permission denied . también pueden ser trabajos de impresión en espera. o por ejemplo. elvis redirige stderr a algún archivo en el directorio /tmp.cmd 2> file cmd 2>> file cmd > file 2>&1 cmd >& file Redirigir stderr a file sobrescribir file si existe. también puede tener archivos en el directorio /var. Combinar stdout y stderr. pero que no han sido vistos.").. Con el fin de ayudar a apartar lo útil de lo inservible.. Intrigado usa el comando find para buscar todos los archivos dentro del directorio /var que posee. En situaciones como ésta. la salida es difícil de hallar dentro de todos los mensajes de error de "Permiso negado" reportados desde varios subdirectorios de /var. [elvis@station elvis]$ find /var -user elvis 2> /tmp/foo /var/spool/mail/elvis Aunque esto funciona.(sintaxis conveniente) Ejemplos Uso de /dev/null para filtrar stderr El usuario elvis recientemente ha aprendido que aparte de los directorios /home/elvis y /tmp con los que está familiarizado.. Aunque el comando find reportó correctamente el archivo /var/spool/mail/elvis. Estos archivos en espera suelen ser archivos para correos electrónicos recibidos. Redirigir stderr a file agregando file si éste existe. (sintaxis portátil) Combinar stdout y stderr y redirigirlos a file. find: /var/tux: Permission denied find: /var/tomcat4/webapps: Permission denied (Mucha de la salida de ese comando ha sido truncada y remplazada por ". [elvis@station elvis]$ find /var -user elvis find: /var/lib/slocate: Permission denied find: /var/lib/nfs/statd: Permission denied find: /var/lib/xdm/authdir: Permission denied . cuando un usuario quiere deshacerse de un flujo de información..

Ejercicios en línea Lab Exercise Objetivo: Administrar de modo efectivo los flujos de la entrada estándar. [elvis@station elvis]$ ls -l /dev/null crw-rw-rw1 root root 1. Un archivo llamado ~/stderrlab. 2.both que contenga los flujos stdout y stderr combinados desde el comando cat /etc/X11/*.. la información es apenas descartada por el kernel. Observe que /dev/null es uno de los pocos archivos en Red Hat Enterprise Linux que tiene permisos de escritura por defecto para todo el mundo. 2. 214 . Deliverables A title Question 1 1. Especificaciones 1.err que contenga el flujo de stderr desde el comando cat /etc/X11/*.err. 3. Repita la línea de comandos pero redirija stdout a un archivo llamado ~/stderrlab. 1. la salida estándar y el error estándar Estimated Time: 10 mins. [elvis@station elvis]$ cat /etc/X11/* cat: /etc/X11/applnk: Is a directory cat: /etc/X11/desktop-menus: Is a directory cat: /etc/X11/fs: Is a directory cat: /etc/X11/gdm: Is a directory cat: /etc/X11/lbxproxy: Is a directory #!/bin/sh PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin .out y stderr a un archivo llamado ~/stderrlab. Cuando un usuario lee desde /dev/null encuentra inmediatamente un fin de archivo. Un archivo llamado ~/stderrlab. Repita el comando pero esta vez combine stdout y stderr en un sólo flujo y redirija el flujo al archivo ~/stderrlab.both. Un archivo llamado ~/stderrlab. /dev/null es un nodo de dispositivo de caracter como aquellos de los controladores de dispositivo convencionales. Utilice la siguiente línea de comandos para mostrar el contenido de todos los archivos dentro del directorio /etc/X11.Como lo muestra el siguiente listado largo.out que contenga el flujo de stdout desde el comando cat /etc/X11/*. 3 Jan 30 05:24 /dev/null Cuando un usuario escribe en /dev/null..

Él entuba la salida de su comando de búsqueda hacia sort. (en la mayoría de los teclados este caracter está en la misma tecla de una barra invertida encima de ENTER). Cuando dos comandos se unen por medio de una tubería.xml. [prince@station prince]$ find /etc -size +100k 2>/dev/null /etc/termcap /etc/gconf/gconf.xml /etc/gconf/gconf.xml. donde la salida (salida estándar) de un comando es "entubada" directamente dentro de la entrada (entrada estándar) de otro comando formando lo que Linux (y Unix) llaman tubería.. Una de las formas más comunes y eficaces para redirigir es una combinación de las dos. Con el fin de crear unq tubería por medio de bash.Tuberías Conceptos clave • • • El flujo de stdout desde un proceso puede estar conectado al flujo de stdin de otro proceso mediante lo que Unix llama una "tubería". Comienza por escribir el comando find para obtener un listado de archivos con un tamaño mayor a 100kbytes.defaults/schemas/apps/tasklist_applet/prefs/%gconf.. leer la entrada desde stdin y enviar la salida a stdout. piense que prince está tratando de hallar los archivos más grandes bajo el directorio /etc. hemos visto que una salida de un proceso se puede redirigir a cualquier parte con excepción de la pantalla de la terminal o que puede pedírsele a un proceso que lea desde alguna parte con excepción del teclado de la terminal. aprovecha que el comando sortse invoca sin argumentos y espera los datos desde la entrada estándar para ordenarlos. Al observar que el comando find no parece listar los archivos en ningún orden en particular.xml . En lugar de redirigir la salida a un archivo y luego sort el archivo.defaults/schemas/apps/mailcheck_applet/prefs/%gconf. A manera de ejemplo. 215 . el flujo de stdout del primer proceso es ligado directamente a la secuencia stdin del segundo proceso para que múltiples procesos puedan combinarse en una secuencia. Discussion Tuberías En las lecciones anteriores.defaults/schemas/desktop/gnome/interface/%gconf.xml.xml /etc/gconf/gconf. prince decide que sus archivos sean listados en orden alfabético. bash usa "|" para crear una tubería entre dos comandos. A todos los procesos unidos en una tubería se les llama un grupo de proceso. Varios de los comandos en Unix están diseñados para operar como un filtro. los dos comandos se unen con una barra vertical |.

.conf. [prince@station prince]$ grep root /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin El primer argumento para el comando grep es la cadena de texto que va a ser buscada.3. [prince@station prince]$ locate templates /etc/openldap/ldaptemplates. Por ejemplo..1/docsrc/templates.html /usr/share/doc/libxslt-1..27/templates.gif /usr/share/doc/docbook-style-xsl-1.defaults/schemas/apps/gedit-2/preferences/editor/save/ %gconf.d/dac960 /etc/squid/squid.bin /etc/gconf/gconf. prince tiene tantos archivos en su directorio de inicio que está teniendo problemas para seguirles el rastro.conf /etc/squid/squid. pero no archivos).d/cciss /etc/makedev. espera la entrada estándar como su fuente de información en la cual operar. Aquí presentamos el comando grep en su forma más sencilla.gz /usr/share/man/man3/ldap_free_templates. Filtro de salida con grep El comando tradicional de Unix grep se utiliza en tuberías para reducir datos a sólo las partes "interesantes".gz /usr/share/man/man3/ldap_init_templates. El comando grep se analizará más tarde en un cuaderno. /etc/makedev..defaults/schemas/apps/gnomemeeting/general/%gconf.0.3.gz /usr/share/man/man3/ldap_init_templates_buf.conf /usr/share/doc/libxslt-1. 216 .3.27/html/libxslt-templates. Utiliza el comando locate para encontrarlo.default /etc/termcap Ahora los archivos están listados en orden alfabético.58.5. y los argumentos restantes son archivos que van a ser buscados para el texto.xml.xml.[prince@station prince]$ find /etc -size +100k 2>/dev/null | sort /etc/aep/aeptarg.0.xml .conf. El comando grep se utiliza para buscar y extraer líneas que contengan una cadena de texto específico.xml /usr/share/man/man5/ldaptemplates.xml /etc/gconf/gconf.gz . prince imprime todas las líneas que contienen el texto "root" desde el archivo /etc/passwd. En el siguiente. Trata de hallar un directorio llamadotemplates que él creó hace unos meses. Si el comando grep llamado con un solo argumento (una cadena de texto para ser buscada. a continuación.

espera a la stdin. "buscando" la palabra "prince".lock: Permission denied . donde encuentra el flujo de stdout del comando locate. grep: /etc/lvmtab: Permission denied /etc/passwd:prince:x:502:502::/home/prince:/bin/bash grep: /etc/passwd-: Permission denied grep: /etc/passwd. Con el fin de reducir la información a archivos más importantes. grep sólo duplica a sus líneas stdout que coincidieron con el texto especificado. como también otro directorio creado por la aplicación quanta.edu> grep: /etc/vsftpd. prince toma la stdout desde el comando locate y crea una tubería para la stdin del comandogrep. El usuario prince encuentra fácilmente su directorio bajo ~/proj. prince quiere ver dónde aparece en los archivos de configuración del sistema y utiliza la herramienta "grep" con su nombre en el directorio /etc..deny: Permission denied grep: /etc/default: Permission denied /etc/group:music:x:205:elvis.Por desgracia para prince.. Emplea el mismo truco de buscar con "grep" todas las líneas que contengan la palabra "passwd".db: Permission denied grep: /etc/at. hay muchos archivos en el sistema que contienen el textotemplates en su nombre y se confunde con líneas y líneas de salida. "prince".blondie.. 217 .. [prince@station prince]$ grep prince /etc/* grep: /etc/aliases. grep: /etc/sudoers: Permission denied /etc/termcap:# From: John Doe <jd@princeton. El resto fue descartado. [prince@station 010_section_discussion]$ locate templates | grep prince /home/prince/.kde/share/apps/quanta/templates /home/prince/proj/templates Dado que al comando grep no se le da un archivo para buscar. Tuberías y stderr En el próximo ejemplo.conf.rpmsave: Permission denied De nuevo. Al filtrar el flujo.student /etc/group:prince:x:502: grep: /etc/group-: Permission denied grep: /etc/group.lock: Permission denied . prince está abrumado con tanta salida desde este comando.madonna.prince.

0 0.2 ps aux | grep httpd 18248 100 ? 18436 1320 ? 18436 1952 ? 18436 1332 ? 18360 1524 ? 18388 2140 ? 18360 1524 ? 3572 640 pts/1 S S S S S S S S Sep22 Sep22 Sep22 Sep22 Sep22 Sep22 Sep22 06:19 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 /usr/sbin/httpd /usr/sbin/httpd /usr/sbin/httpd /usr/sbin/httpd /usr/sbin/httpd /usr/sbin/httpd /usr/sbin/httpd grep httpd Búsqueda eficaz en el historial de comandos 218 . [prince@station root 889 apache 907 apache 913 apache 914 apache 1979 apache 1980 apache 1981 prince 4905 prince]$ 0. y awk por nombrar unos cuantos. Él lista todos los procesos pero luego reduce la salida a solo aquellas líneas que contengan el texto httpd. usted verá que hay muchos comandos estándar de Linux (y Unix) diseñados para este propósito. de alguna manera modifica o filtra la información y pasa el resultado a stdout.deny: Permission denied grep: /etc/default: Permission denied grep: /etc/group-: Permission denied grep: /etc/group.lock: Permission denied .0 0.0 0. head.0 0. Aunque ps aux presenta un montón de información sobre procesos actuales en ejecución. grep: /etc/lvmtab: Permission denied /etc/passwd:prince:x:502:502::/home/prince:/bin/bash grep: /etc/passwd-: Permission denied grep: /etc/passwd. El comando grep puede ayudar a simplificar la salida. el número de procesos ejecutándose en la máquina puede resultar en una la salida abrumadora.0 0. el comando httpd. tail. En un próximo cuaderno. ¿Cómo le iría a prince si suprimiera también stderr? Comandos como filtros El concepto de tubería se extiende naturalmente para que múltiples comandos se puedan usar en conjunto.0 0.5 0.7 0. incluyendo algunos de los cuales usted ya conoce: grep... stderr no se afectó y aún se muestra en la pantalla. sed.5 0.8 0. cada información de lectura desde stdin. Ejemplos Listado de procesos por nombre A menudo.db: Permission denied grep: /etc/at. sort.5 0.0 0. quisiéramos listar información acerca de procesos que están ejecutando un comando específico. A continuación.5 0.. Aunque stdout desde el primer comando con grep fue filtrado correctamente. prince quiere listar información sobre los procesos que están implementando su servidor de red.0 0. cut.0 0.[prince@station prince]$ grep prince /etc/* | grep passwd grep: /etc/aliases.lock: Permission denied ..

No se preocupe de los detalles de cómo usar los comandos. la cual listaba todos los archivos grandes bajo el directorio /etc. [prince@station prince]$ history | grep find 102 find /var -user elvis 175 find -exec file {} \. en su lugar.. Observe que la dirección IP 192. 2>/dev/null 728 /etc/termcap 132 /etc/gconf/gconf. leyendo información desde una fuente estándar manipulando los datos y entregando el resultado a un destino estándar. se basa fundamentalmente en la filosofía de que los sistemas complejos deberían crearse de componentes simples y de componentes especializados que funcionen fácilmente entre sí. Suponga que un administrador de sistemas está examinando los mensajes de alquiler DHCP en un archivo de registro bien conocido.168.xml. /var/log/messages. En las siguientes líneas de /var/log/messages enfóquese en la línea que contiene la palabra DHCPOFFER.Recientemente. es el protocolo por medio del cual las direcciones IP se pueden asignar a máquinas basadas en la dirección de hardware (MAC) construídas dentro de una tarjeta de Ethernet de la máquina. 2>/dev/null 682 find -size +100k /etc 683 find /etc -size +100k 690 history | grep find Ahora localiza la línea de comandos que quería y utiliza la sustitución del historial para repetir el comando con facilidad. 434 find /etc -name *. En lugar de repetir su esfuerzo prefiere ver si el comando está aún en su historial. Esta filosofía es importante para ilustrar el uso de un ejemplo largo y detallado.. Siguiendo esta filosofía. Si usted no está familiarizado con DHCP. muchos programas estándar de Linux están diseñados para operar como filtros. 219 .xml 304 /etc/gconf/schemas/gedit.conf | head 675 find /etc -size +100k 680 find /etc -size +100k -exec ls -s {} \. enfóquese en cómo funcionan juntos. el usuario prince tomó un buen tiempo construyendo una línea de comandos find. al igual que Unix.11 se está ofreciendo a la tarjeta de Ethernet con la dirección de hardware de 00:08:74:37:c5:c3. Filosofía de Unix: Herramientas sencillas que funcionan bien juntas Linux. incluyendo el tamaño. Dado que su historial contiene cientos de líneas. [prince@station prince]$ !680 find /etc -size +100k -exec ls -s {} \.schemas . cada comando realiza un pequeña parte para producir el resultado deseado.defaults/schemas/desktop/gnome/interface/%gconf. El ejemplo utilizará comandos con los que usted aún no está familiarizado. utiliza el comando grep para ayudar a reducir la salida.0.

.1 192.1 192.0.1 to 00:08:74:d9:41:9e via eth0 192. el cual quita las primeras palabras de cada línea.0.11 to 00:08:74:37:c5:c3 via eth0 May 27 12:20:27 server1 dhcpd: DHCPREQUEST for 192.168.168. Un administrador experimentado podría emplear el siguiente método. suponga que el administrador deseara extraer una lista de direcciones IP y las direcciones de hardware que se ofrecen en el archivo de registro.168..0. Con el fin de extraer sólo la información pertinente.168.168..2 to to to to to 00:08:74:d9:41:9e 00:08:74:d9:41:9e 00:08:74:d9:41:9e 00:08:74:d9:41:9e 00:08:74:d9:41:32 via via via via via eth0 eth0 eth0 eth0 eth0 Este es un comienzo pero el administrador aún está manejando demasiada información (la toma de pantalla de arriba sólo lista las primeras 5 de 90 líneas producidas por este comando).0.168.0.1 to 00:08:74:d9:41:9e via eth0 192..0.11 (192.0.0.1 to 00:08:74:d9:41:9e via eth0 192. el administrador primero utiliza el comando grep para reducir la información a las líneas pertinentes.168.168.3 to 00:08:74:d9:40:a4 via eth0 . el administrador toma la salida del comando grep y la entuba a un comando llamado sed. 220 .0.1 to 00:08:74:d9:41:9e via eth0 192.0..0.0. Sin preocuparse por detalles del protocolo de DHCP.168..2 to 00:08:74:d9:41:32 via eth0 192. Dándose cuenta que el archivo /var/log/message es un archivo muy grande. 192.0.0..1 192.*on //" 192.110 to 00:09:6b:d0:ce:8f via eth0 May 27 12:18:27 server1 login(pam_unix)[1981]: session closed for user root May 27 12:19:15 server1 named[24350]: listening on IPv4 interface eth1.0. 192.168.168.254) from 00:08:74:37:c5:c3 via eth0 .1 192.168.168.0. [root@station log]# grep DHCPOFFER messages | sed "s/^. es decirla dirección IP y la dirección de hardware.2 to 00:08:74:d9:41:32 via eth0 192.2 to 00:08:74:d9:41:32 via eth0 192.2 to 00:08:74:d9:41:32 via eth0 192.168. May 27 12:18:21 server1 dhcpd: DHCPACK on 192..22.168. en este caso más de 1000 líneas de longitud..168.0.0.168.168.168. [root@station log]# grep DHCPOFFER messages May 27 11:46:22 server1 dhcpd: DHCPOFFER on May 27 11:46:22 server1 dhcpd: DHCPOFFER on May 27 11:46:30 server1 dhcpd: DHCPOFFER on May 27 11:46:30 server1 dhcpd: DHCPOFFER on May 27 11:48:40 server1 dhcpd: DHCPOFFER on .20#53 May 27 12:19:21 server1 vsftpd: warning: can't get client address: Bad file descriptor May 27 12:19:21 server1 last message repeated 3 times May 27 12:20:27 server1 dhcpd: DHCPDISCOVER from 00:08:74:37:c5:c3 via eth0 May 27 12:20:27 server1 dhcpd: DHCPOFFER on 192.

7 00:08:74:d9:41:53 192.168.2 00:08:74:d9:41:32 192.168.0.0.16 00:08:74:d9:41:ac 192.0.0.168..168.0.168.168.0.168. donde los campos están separados por un punto..0. y quitar las líneas que se duplican. De nuevo. no por dirección IP.168. no se preocupe por los detalles del comando awk.168.0.168.16 00:08:74:d9:41:ac 192.*on // " | awk '{print $1.0. [root@station log]$ grep DHCPOFFER messages | sed "s/^.110 00:09:6b:d0:ce:8f 192. el administrador toma la salida de esta combinación grep-sed y la entuba al comando llamado awk..168.0.0.0.9 00:08:74:35:00:1f Esta es casi la lista que el administrador quería pero el comando sort no funcionó bien. pulsando en el cuarto campo.4 00:08:74:d9:3f:7f 192. sólo observe que el argumento de sed quitó el texto inicial de cada línea hasta la palabra "on".168.Si no está familiarizado con el comando sed (muy probablemente no lo está).168. [root@station log]$ grep DHCPOFFER messages | sed "s/^.168.0.0.0. pero en orden alfabético.0.14 00:08:74:34:fe:bc 192.$3}' | sort | uniq 192.8 00:08:74:d9:41:7b 192.0.168.168.13 00:08:74:35:00:d0 192.15 00:08:74:37:c8:eb 192.0.5 00:08:74:34:fd:36 192.168.$3}' .168.*on // " | awk '{print $1.7 00:08:74:d9:41:53 192.168.12 00:08:74:d9:41:dd 192.168.0. Con el fin de ordenar la información.16 00:08:74:d9:41:ac 192.17 00:08:74:35:00:e3 .0. 192.0.168.17 00:08:74:35:00:e3 192.. El administrador modifica el comando sort con un par de opciones para especificar el orden de modo numérico. Como no queda mucho texto.168.10 00:08:74:d9:40:95 192.6 00:08:74:d9:41:a3 192.14 00:08:74:34:fe:bc 192.5 00:08:74:34:fd:36 192.168.15 00:08:74:37:c8:eb 192.168.0.0. no se preocupe por los detalles.168. observe que el resultado era extraer la primera y tercera columna de la salida anterior.3 00:08:74:d9:40:a4 192.0.168.6 00:08:74:d9:41:a3 192.0.11 00:08:74:37:c5:c3 192. el administrador toma la salida desde la cadena y la entuba a través de los comandos sort y uniq.168. 221 .15 00:08:74:37:c8:eb 192.0. La información está ordenada.1 00:08:74:d9:41:9e 192.0.

0.16 00:08:74:d9:41:ac 192.168.0.9 00:08:74:35:00:1f 192.168.168.11 00:08:74:37:c5:c3 192. Mediante el visualizador de página less desearía navegar la salida del comando ls -R /.168. Escriba un línea de comando con dos 2.0.168. sed.3 00:08:74:d9:40:a4 192. [root@station log]$ grep DHCPOFFER messages | sed "s/^.0. Redirige todo esta salida a un archivo en su directorio de inicio.168.4 00:08:74:d9:3f:7f 192.*on //" | awk '{print $1 .1 00:08:74:d9:41:9e 192.168.0.12 00:08:74:d9:41:dd 192.*on //" | awk '{print $1.0.168.0.0. como pudo utilizar la flexibilidad de la línea de comando. Si el administrador utilizara un sistema operativo que no estuviera diseñado en torno a esta filosofía de "pequeñas herramientas que trabajan juntas".[root@station log]$ grep DHCPOFFER messages | sed "s/^.168.txt En este ejemplo. viendo sólo archivos que contengan la letra s. | uniq 192.txt. en el orden deseado.6 00:08:74:d9:41:a3 192.0. 222 .2 00:08:74:d9:41:32 192.168.0.168.0.13 00:08:74:35:00:d0 192. sort. Redirija la salida de esta tubería dentro del archivo ~/pipelab. yuniq.0.168. $3}' | sort -n -k4 -t. Hizo esto mediante un puñado de herramientas que son para la mayoría de los administradores de Unix una caja de herramientas mentales: grep. Especificaciones 1.0.Estimated Time: 10 mins.168.168.14 00:08:74:34:fe:bc 192. un administrador (experimentado) que navega un archivo de registro pudo emplear unos pocos minutos y desarrollar una cadena de comandos que filtraran la información original a la información precisa deseada.168.15 00:08:74:37:c8:eb 192. awk.5 00:08:74:34:fd:36 192.168. Ejercicios en línea Lab Exercise Objetivo: Usar tuberías para filtrar información de modo efectivo. En cambio.$3}' | sort -n -k4 -t. Usted desearía crear una lista ordenada de todos los servicios de TCP services que se encuentran en el archivo /etc/services. Entube la salida del comandogrep tcp /etc/services dentro del comando sort. pudo también manejar la información por sí mismo.0. habría necesitado depender de algún programador para desarrollar la utilidad ip_mac_extractor y posiblemente depender de ese programador para crear también una interfaz gráfica de usuario.0.168.0.17 00:08:74:35:00:e3 192.8 00:08:74:d9:41:7b 192.0.10 00:08:74:d9:40:95 192.110 00:09:6b:d0:ce:8f Esta es la lista que el administrador quería.7 00:08:74:d9:41:53 192. | uniq > ~/ip_dhcp.0.168.

Deliverables A title Question 1 1. Final del formulario Limpieza Después de calificar su ejercicio puede salir del paginador less. Abandone el visualizador de página less en el primer plano mientras califica su ejercicio.tuberías para encadenar los comandos ls -R /. 223 . y less. grep s.txt que contenga la salida del comando grep tcp /etc/services entubado a través del comando sort. Un archivo ~/pipelab.

stores information that needs to be preserved outside of the context of any individual process in files. [1] What type of information is stored in files? Here are but a few examples. Linux (and Unix) files store information using a simple model: information is stored as a single. Discussion En este cuaderno. In order to accommodate the demands of a variety of languages.String Processing Tools Herramientas para procesamiento de cadenas de texto Conteo de palabras y codificación de texto Conceptos clave • • • • • • When storing text. The individual colors that make up the picture you took with your digital camera are stored in the file (say) /mnt/camera/dcim/100nikon/dscn1203. clasificación y manipulación de texto. (un byte suele correlacionarse con un caracter). El comando wc cuenta el número de caracteres. El comando cat tiene opciones que permiten la representación de caracteres de no impresión tal como el caracter NEWLINE. and for most of this Workbook. estas herramientas deberían considerarse no sólo como ayuda de redacción sino de manipulación de datos en general. el comando wc puede convertirse en una herramienta versátil de conteo. like most operating systems. el cual sirve aún como el denominador menos común entre otras técnicas. Archivos ¿Qué son archivos? Linux. Los comandos head y tail tienen opciones que le permiten imprimir sólo un cierto número de líneas o un cierto número de bytes de un archivo. Puesto que Linux (antes Unix). These techniques are represented by a variety of character sets. This process is referred to as encoding the text. The number of bytes in the array is the length of the file. Cuando se aplica a datos estructurados. comenzamos examinando varias herramientas de búsqueda. ordered array of bytes. starting from at first and ending at the last. computers transform characters into a numeric representation. 224 . • • The characters that compose the book report you want to store until you can come back and finish it tomorrow are stored in a file called (say) ~/bookreport. several different encoding techniques have been developed. La técnica de codificación más prevalente y antigua se conoce como el conjunto de caracteres ASCII. palabras y líneas en un archivo.txt. the term file is meant in the sense of regular file). tiene una tradición muy fuerte de almacenamiento de datos en formatos legibles por humanos. (In this context.jpg.

. One encoding technique would divide the picture into pixels (dots). The first three bytes of the file would record the information for the first pixel. As computers have developed. ASCII 225 . After grouping the light switches into groups of eight.. your computer views the contents of your file as an array of bytes. the first and second switch on. Only the first switch on. Each permutation of ons and offs for a group of 8 switches can be assigned a number. from the simple in concept (which could encode only the Latin alphabet used in Western languages) to complicated but powerful techniques that attempt to encode all forms of human written communication. 2. "greenness". many much more complex. which balances the goals of simplicity. Both of these are too difficult to mentally picture. record three bytes of information: the pixel's "redness". some just as simple. A picture format known as "PNM" does just this (plus some header information. resilience to corruption. All switches off. the second three bytes the second pixel. computers can only answer one type of question: is it on or off? What is it? When dealing with disks. the information must be somehow converted into a series of values ranging from 0 to 255. The specific instructions which tell an x86 compatible CPU how to use the Linux kernel to list the files in a given directory are stored in the file /bin/ls. How many numbers will it take to label each possible permutation for 8 light switches? A mathematician will quickly tell you the answer is 2^8. even attempting to include historical languages such as Egyptian hieroglyphics. each with a value ranging from 0 to 255. consider the picture taken by a digital camera mentioned above. Using a single light switch. or 256.• • The characters which define the usernames of users on a Linux system (and their home directories. we'll assign 0. What is a Byte? At the lowest level. so we will speak in terms of light switches that can either be on or off. only the second switch on. 3. and for each pixel. or transistors. Converting information into such a format is called data encoding. More formally. we'll assign 1. To be more useful. such as how many pixels are in a row). Data Encoding In order to store information as a series of bytes. the contents of your file is reduced to what can be thought of as an array of (perhaps millions of) light switches. What's the best way to do it? There is no single best way that works for all situations. and so on. it is a transistor which either has current or doesn't. The following sections discuss many of the encoding techniques commonly used in Red Hat Enterprise Linux. To your computer. As one example. it is a magnetic domain which is oriented up or down. Codificación de texto Perhaps the most common type of data which computers are asked to store is text. Each light switch can be used to store one bit of information (is it on. a variety of techniques for encoding text have been developed. Each series of 8 light switches (or magnetic domains.. or is it off). you cannot store much information. Developing the right technique to encode data. each on a scale of 0 to 255. Many other encoding techniques for images exist. an early convention was established: group the light switches into bunches of 8. .) are stored in the file /etc/passwd. and so on. and "blueness". is much of the art of computer science. etc. When dealing with memory chips. etc. a byte consists of 8 bits.) is a byte. efficiency (in terms of CPU performance and on disk storage).

and still most commonly used techniques for encoding text is called ASCII encoding. as outlined in the following table. Many of these control signals have special interpretations within Linux (and Unix). For example.*(*+. ASCII encoding simply takes the 26 lowercase and 26 uppercase letters which compose the Latin alphabet. The following characters are commonly called "whitespace" characters. while a backspace can be sent using CTRL-H. and we have already mentioned that CTRL-D is used to generate an "End of File" (or "End of Transmission"). ASCII Encoding of Printable Characters Integer Range 33-47 48-57 58-64 65-90 91-96 97-122 123-126 Caracter Puntuación: !"#$%&. what CTRL key combination generates a tab? What does CTRL-J generate? As you explore various control sequences./ Los dígitos de 0 a 9 Puntuación: :. but instead sent "out of band" control signals between two teletypes. Can you determine how the whitespace and control characters are mapped to the various CTRL key combinations? For example.32? These integers are mapped to special keys on early teletypes. 10 digits. if necessary. 226 .<=?>@ Letras mayúsculas de la A hasta la Z Puntuación: [\]^_` Letras minúsculas de la a hasta la z Puntuación: {|}~ What about the integers 0 . many of which have to do with manipulating the spacing on the page being typed on. and maps them to an integer between 0 and 255. ASCII Encoding of Control Signals Número entero 4 7 27 Caracter Nombre común Representación común EOT End of Transmission BEL Campana audible de terminal '\a' ESC Escape Generating Control Characters from the Keyboard Control and whitespace characters can be generated from the terminal keyboard directly using the CTRL key.-. and common English punctuation characters (those found on a keyboard). Table 2.One of the oldest. Codificación ASCII de caracteres de espacio en blanco Número entero 8 9 10 12 13 32 127 Caracter BS HT LF FF CR SPACE DEL Nombre común Backspace Tab Nueva línea Form Feed Carriage Return Space Bar Delete Representación común '\b' '\t' '\n' '\f' '\r' Others of the first 32 integers are mapped to keys which did not directly influence the "printed page". remember that the reset command will restore your terminal to sane behavior. an audible bell can be generated using CTRL-G. Table 3. Table 1.

What are some of the features and drawbacks of Unicode encoding? Scale 227 . commonly referred to as UCS. including their informal name. a Universal Character Set has been developed. For example. 2. Instead. Choosing a particular character set extends the range of characters that can be encoded. Unicode can encode over 4 billion glyphs (nearly enough for every person on the earth to have their own unique glyph.967. The ASCII standard only defines the first 128 values of a byte. If we were to again label each permutation of on and off for 32 switches with integers. The following table lists some character sets which are supported in Linux. 1. diacritical marks found in many European languages. Some ISO 8859 Character Sets supported in Linux Nombre informal Latín-1 Latin-2 Árabe Griego Latín-9 Nombre formal ISO 8859-1 ISO 8859-2 ISO 8859-6 ISO 8859-7 ISO 8859-15 Descripción West European languages Central and East European languages Latin/Arabic Latín/Griego West European languages All of these character encoding schemes use a common technique. but both use the value 101 to encode a Latin lowercase e.What about the values 128-255? ASCII encoding does not use them. Thus. formal name. and use the remaining 128 values to encode glyphs unique to the particular encoding. Table 1. the user prince would approve).294. Unicode (UCS) In order to overcome the limitations of ASCII and ISO 8859 based encoding techniques. or Unicode. you could not encode both a Latin capital A with a grave and a Greek letter Delta simultaneously. and non Latin alphabets to the latter 128 values of a byte which the ASCII standard leaves undefined. Notice a couple of implications about ISO 8859 encoding. is simply not enough to encode the variety of glyphs found in human communication. so that the number of letters encoded in a file equals the number of bytes which are required to encode them. ISO 8859 and Other Character Sets Other standard encoding schemes have been developed. Each of the alternate encodings map a single glyph to a single byte. but you cannot encode characters from different character sets simultaneously. and a brief description. They preserve the first 128 values of a byte to encode traditional ASCII. For example. The following table lists a few of these standard encoding schemes. with its ability to encode 256 different values. The Unicode standard acknowledges the fact that one byte of information. the Unicode standard uses 4 bytes to encode each character. which map various glyphs (such as the symbol for the Yen and Euro). which are referred to as character sets.296 (over 4 billion) integers. while ISO-8859-7 (Greek) uses the value 196 to encode the Greek capital letter Delta (). ISO 8859-1 (Latin-1) uses the value 196 to encode a Latin capital A with an umlaut (). leaving the remaining 128 values to be defined by other schemes. the mathematician would tell you that you would need 4. Think of 4 bytes as 32 light switches.

and the programs that expect to read it. the traditional 127 ASCII characters are encoded using 1 byte (and. which can be viewed as the primitive days of text encoding. while minimizing waste and maintaining ASCII compatibility. what is there to lose? ISO 8859 (and similar) character set compatibility. the simple relationship between the number of characters that are being stored and the amount of space (measured in bytes) it takes to store them is lost. ASCII Non-compatibility For better or for worse. With full backwards compatibility to ASCII. and the same functional range of pure Unicode. much of the communication that occurs today uses less than a few hundred glyphs. With variable length encoding. Of the 32 bits (light switches) used to encode each character. but in reality. in fact. the answer is closer to twice that much. a huge amount of existing data is already ASCII encoded. with a significant sacrifice: variable length encoding. The next 63000 or so characters are encoded using three bytes. which can be viewed as the utopia to aspire toward. decisions such as what type of character encoding to use can be made centrally. The ability to encode 4 billion glyphs is nice. and perhaps forever will be. the "intermediate" methods. The Unicode standard is an effective standard in principle. The next most commonly used 2000 or so characters are encoded using two bytes. or simply 4 bytes. in the open source development 228 . and the practicality and pervasiveness of ASCII. Details of the encoding technique can be found in the utf-8(7) man page. Formato de transformación Unicode (UTF-8) UTF-8 encoding attempts to balance the flexibility of Unicode. would have to be converted. Desperdicio While the Unicode standard is simple in concept. In practice. the answer is 879. other techniques have been developed which attempt to preserve the scale and versatility of Unicode. The number of bytes required to encode a set of characters is simply the number of characters multiplied by 4. the ISO 8859 and other alternate character sets. UTF-8 attempts to bridge the gap between ASCII. each character is no longer encoded using simply 1 byte. are identical to the existing ASCII standard). Unfortunately. Simplicidad The Unicode standard does have the simplicity of a sledgehammer.The Unicode standard will easily be able to encode the variety of glyphs used in human communication for a long time to come. Text Encoding and the Open Source Community In the traditional development of operating systems. How much space will it take to store 879 printed characters? If they are pure ASCII. and the more esoteric characters may be encoded using from four to six bytes. What must be sacrificed? Simplicity. that data. it is also very wasteful. the first 20 or so would always be "off". with the possible disadvantage that the decision is wrong for some community of the operating system's users. In contrast. but in many respects it is ahead of its time. Instead. are as incompatible with UTF-8 as they are with each other. If they are Greek or Cyrillic. In order to convert fully to Unicode. and Unicode. Additionally.

The UTF-8 encoding format seems to be evolving as an accepted standard. The variable is expected to be set to a string using the following syntax: LL_CC. these types of decisions are generally made by individuals and small groups of contributers. sorting. leading to a significantly richer environment for handling plain text. At the simplest. leading to a significantly richer environment for handling plain text. and possibly the default encoding technique as well. and in recent releases has become the default for Red Hat Enterprise Linux. Applications which have been internationalized take into account different languages. In the open source community. says it well: It can be hoped that in the foreseeable future. When contributors to the open source community are faced with decisions involving potentially incompatible formats. In the Linux (and Unix) community. because some parts of the assembled system use one technique while others parts use another. The library of man pages is an excellent example. the topic of internationalization cannot be avoided. internationalization is often abbreviated as i18n. The advantages of the open source model are a flexible system which can accommodate a wide variety of encoding formats. this implies that programs will emit messages in the user's native language. UTF-8 will replace ASCII and ISO 8859 at all levels as the common character encoding on POSIX systems. UTF-8 will replace ASCII and ISO 8859 at all levels as the common character encoding on POSIX systems.enc 229 . It can be hoped that in the foreseeable future. Internacionalización (i18n) As this Workbook continues to discuss many tools and techniques for searching. and manipulating text. [elvis@station elvis]$ echo $LANG en_US. they generally balance local needs with an appreciation for adhering to widely accepted standards where appropriate. The following paragraph.model. extracted from the utf-8(7) man page. a shorthand for saying "i-n with 18 letters in between".UTF-8 [elvis@station elvis]$ chmod 666 /etc/passwd chmod: changing permissions of `/etc/passwd': Operation not permitted [elvis@station elvis]$ export LANG=de_DE.utf8 [elvis@station elvis]$ chmod 666 /etc/passwd chmod: Beim Setzen der Zugriffsrechte fr /etc/passwd: Die Operation ist nicht erlaubt The LANG environment variable The LANG environment variable is used to define a user's language. most applications look for the LANG environment variable to determine which language to use. The disadvantage is that users must often be educated and made aware of the issues involved with character encoding.

Códigos de lenguaje seleccionados ISO 639 Código de el en es fr ja zh Lenguaje Alemán Griego Inglés Español Francés Japonés Chino Table 3. Selected ISO 3166 Country Codes Código CA CN DE ES FR GB GR JP NG US País Canadá China Alemania España Francia Britain (UK) Grecia Japón Nigeria Estados Unidos Table 4.The variable context consists of the following three components. Table 1. 230 . The following tables list some selected language codes. Components of LANG environment variable Componente LL CC enc Función Código de lenguaje ISO 639 de dos letras (Optional) Two letter ISO 3166 Country Code (Optional) Character Encoding Code Set The locale command can be used to examine your current configuration (as can echo $LANG). Table 2. while locale -a will list all settings currently supported by your system. and code set specifications. or pinfo gettext) for a complete listing. Selected Character Encoding Code Sets Código utf8 iso88591 iso885915 iso88596 iso88592 País UTF-8 ISO 8859-1 (Latín 1) ISO 8859-15 (Latín 10) ISO 8859-6 (Árabe) ISO 8859-2 (Latín 2) See the gettext info pages (info gettext. country codes. The extent of the support for any given language will vary.

Table 1. Sin embargo. 231 . If you do not fit into one of these two categories. the answer will hopefully be no. Additionally. con n indicando la secuencia para el caracter de no impresión CTRL.¿Necesito saber todo esto? We have tried to introduce the major concepts and components which affect how text is encoded and stored within Linux. the iconv command can be used to convert text files from one form of encoding to another. A file encoded in one of the ISO 8559 character sets is not valid in UTF-8. lo mismo que -vET Muestra "todo" excepto avances de línea. Opciones para el comando cat Opción -E -T -v -A -t -e Efecto muestra avances de línea (ASCII 10) como $ muestra tabulaciones (ASCII 9) como ^I muestra espacio en blanco y caracteres de control como ^n. restricted to the Latin alphabet of 26 characters. Hopefully. Start with charsets(7). 2. the answer is no. Volviendo a cat. iso_8859_1(7). Using UTF-8. avances de línea y otras secuencias de control por medio de las siguientes convenciones. one might be led to wonder. several man pages provide a more detailed introduction to the concepts outlined above. Until then. If you are asking the question 10 years from now. cuando se llama el comando cat con una de las siguientes opciones indicará la presencia de tabulaciones. as the open source community converges on a single encoding technique (currently UTF-8 seems the most likely). lo mismo que -vT Muestra "todo" excepto tabulaciones. and then follow with ascii(7). Un archivo ASCII ya es válido en uno de los conjuntos de caracteres ISO 8559. and the role of the LANG environment variable. Por lo general. sin modificaciones o conversiones. do I really need to know about all of this? If you are using simple text. head y tail Retomando cat Hemos estado utilizando el comando cat para simplemente mostrar el contenido de archivos. el comando cat genera una copia fiel de su entrada. and must be converted. most of these issues will disappear. After reading about character sets and language codes. Un archivo ASCII ya es válido en UTF-8. Muestra "todo". however. If you are interested in more information. these are some key points to remember. a continuación el comando cat se utiliza para visualizar el contenido del archivo de configuración /etc/hosts. 1. lo mismo que -vE A manera de ejemplo. 4. There is a one to one mapping between characters and bytes if and only if all of the characters are pure ASCII characters. character sets. you should have at least an acquaintance with the concept of internationalization. 3. unicode(7) and utf-8(7).

51 station51 station51.com 192. Pero. 127.201^Iz$ Retomando head y tail Los comandos head y tail se han utilizado para visualizar las primeras y úĺtimas líneas de un archivo.0.0.0.51^Istation51 station51. Por ejemplo.129.example.1 rha-server 192. ¿de qué consta una línea? Imagínese trabajando en una máquina de escribir: ¡clic! ¡clac! ¡clic! ¡clac! ¡clac! ¡sssiin! En lugar del ¡sssiin! del carro de la máquina al final de cada línea se selecciona el caracter de avance de línea (ASCII 10) para marcar el final de líneas.0.[student@station student]$ cat /etc/hosts # Do not remove the following line.com 192.168.0.168. respectivamente.0. el siguiente archivo contiene una lista de cuatro músicos. [student@station student]$ cat -A /etc/hosts # Do not remove the following line. mientras que los sistemas operativos de Macintosh utilizan el caracter de retorno de carro (ASCII 13.example. Hoy en día no se comparte entre todos los sistemas operativos dominantes en uso una sóla convención para marcar el final de una línea.0. [student@station student]$ cat -A musicians elvis$ blondie$ prince$ madonna$ Si este archivo fuese creado en un sistema operativo de Microsoft o Macintosh y copiado dentro de Linux.example.example.168.1 station1 station1.com $ 127.example. al remplazar las tabulaciones por ^I y los avances de línea son representados por$. los archivos se verían de la siguiente manera.168.201 z Al utilizar la opción -A. ASCII 10).0.1^Istation1 station1. a menudo representado \n).0.com$ 192.1^Ilocalhost.1^Irha-server$ 192. la estructura de espacio en blanco del archivo se hace evidente.example. or various programs$ # that require network functionality will fail. 232 .com$ 192.0.129.1 localhost.example.com www1 www1.0.com www1 www1.0.example. Linux (y Unix) utilizan el caracter de avance de línea (ASCII 10. or various programs # that require network functionality will fail.com 127.localdomain^Ilocalhost station.168. a menudo representado \r o ^M) y los sistemas operativos de Microsoft utilizan un par de retorno de carro/avance de línea (ASCII 13.localdomain localhost station.168.$ 127.

500 palabras? Con wc puede verificar fácilmente que su aporte cumpla con los criterios. el nombredearchivo será escrito como la última línea de cada informe de conteo.dos elvis^M$ blondie^M$ prince^M$ madonna^M$ [student@station student]$ cat -A musicians. Table 1. Opciones para el comando head Opción -N. el intérprete de comandos bash no se visualiza en el sitio acostumbrado.[student@station student]$ cat -A musicians.mac elvis^Mblondie^Mprince^Mmadonna^M[student@station student]$ Los archivos de texto de Linux (y Unix) por lo general se adhieren a la convención de que el último caracter del archivo debe ser un avance de línea para la última línea de texto. Para mayor claridad. incluso si sólo se utiliza sólo un nombredearchivo. El comando wc cuenta el número de caracteres. A continuación verá una forma de línea de comandos para el programa wc: Figure 1. Tomará su entrada ya sea de archivos llamados en su línea de comandos o desde su entrada estándar. Siguiendo el cat del archivo musicians. Muestra los primeros N bytes del archivo. El nombredearchivo que se va a contar. Conteo de palabras de cómputo. entonces el texto se leerá desde la entrada estándar. Uso del comando wc Opción -c -l -w filename Resultados Conteo de caracteres de cómputo. Muestra los primeros N bytes del archivo. -nN -cN Efecto Muestra las dos últimas líneas N del archivo. Table 2. Opciones para el comando tail Opción -N.mac. Si N se antepone a un + muestra el archivo restante que comienza en la cuarta línea. palabras y líneas. Si no se especifica ningún nombredearchivo. El comando wc (Conteo de palabras) Forma fácil de conteo ¿Alguna vez ha tratado de contestar un test de “25 palabras o menos”? ¿Alguna vez ha tenido que escribir un ensayo de 1. Conteo de línea de cómputo. 233 . que no contiene ninguno de los caracteres convencionales de avance de línea de Linux. -nN -cN Efecto Muestra las primeras líneas N del archivo.

Sólo la forma de la palabra es importante. tales como caracteres de espacio o caracteres horizontales TAB. tales como números y letras. ¿qué es una palabra? Una palabra es un grupo de caracteres de impresión tales como letras y dígitos. Otras lenguas son representadas por reglas de codificación diferentes. líneas y palabras. 234 . Los caracteres invisibles también son importantes. Las líneas adicionales en el archivo siguen inmediatamente la primera línea.Cuando se utiliza sin opciones. la línea también tiene un caracter NL al final. Algunos caracteres se utilizan para movimiento vertical tales como retornos de carro y avances de línea. también llamado “Latín-1”. de líneas o de palabras. Algunos caracteres se utilizan para distancia horizontal tales como espacios y caracteres TAB. Los caracteres que usted no puede ver también ocupan espacio en un archivo. no su semántica. el valor exacto utilizado para cada símbolo varía dependiendo del alfabeto que se escoja. para que el valor numérico exacto para un determinado caracter dependa del lenguaje humano que se está registrando. En lo que respecta a Linux. Las opciones pueden combinarse para retornar cualquier combinación de conteo de caracteres. Una línea en un archivo de texto es una serie de cualquier caracter diferente a un caracter NEWLINE (avance de línea). Ejemplos Caracteres de conteo Para contar los caracteres en un archivo ejecute wc -c: [student@station student]$ echo hello | wc -c 6 Además de las cinco letras en la palabra. ¿Cómo reconocer un caracter real? Los archivos de texto están compuestos por un alfabeto de caracteres. wc reportará el número de caracteres. Algunos caracteres son visibles. Aunque un computador representa caracteres como números. una línea tal como: Ahora es el momento para que todos utilicen foogle. El alfabeto más utilizado por los hablantes de inglés es ASCII. Entonces. Observe que la definición de una palabra no incluye ninguna noción de “significado”. contiene 10 palabras perfectamente buenas: caracteres de impresión rodeados por un espacio en blanco o puntuación. rodeados por un espacio en blanco.

¿Cuál es mi línea? Ejecute el comando wc -l para contar las líneas en un archivo: [student@station [student@station [student@station [student@station 3 foo student]$ student]$ student]$ student]$ echo First line > foo echo Second line >> foo echo Third line >> foo wc -l foo Las quiero todas Al utilizar wc sin ningún argumento todo cuenta: caracteres. En la salida anterior. uno en una máquina Microsoft y otro en una Macintosh)? [student@station student]$ wc musicians* 4 4 29 musicians 4 4 33 musicians. que no contenía ningun avance de línea convencional de caracteres Linux. a cada caracter en un archivo de texto le corresponde el golpe de una tecla de una máquina de escribir.mac 8 12 91 total Para el archivo musicians. palabras y líneas: [student@station [student@station [student@station [student@station 3 6 station]$ student]$ student]$ student]$ 31 x echo one > x echo two words >> x echo three more words >> x wc x Archivos Linux.mac tienen sólo 29? Conteo de usuarios 235 . el número de líneas se reporta como 0. Dos y Macintosh ¿Cómo manejaría el comando wc los tres archivos de los músicos mencionados anteriormente (uno escrito en una máquina de Linux.dos tiene 33 caracteres mientras que musicians y musicians. ¿por qué el archivo musicians.[student@station student]$ echo Hello.mac.dos 0 4 29 musicians. World! > greetings [student@station student]$ wc -c greetings 14 Tenga en mente también que los espacios y TABs se cuentan como caracteres. ¿Recuerda la analogía con la máquina de escribir? Tanto el espaciador como el TABULADOR se deben pulsar.

0 0.0 0 0 root 3 0. palabras y caracteres. el cual reportaría el número de usuarios actualmente en la máquina.0 0. Cuando se hace ejecutable y se coloca en el directorio ~/bin (el cual es parte de una búsqueda estándar ejecutable PATH).0 0. TTY ? ? ? ? STAT S SW SW SWN START Sep28 Sep28 Sep28 Sep28 TIME 0:04 0:00 0:00 0:00 COMMAND init [ [keventd] [kapmd] El comando tail. [student@station student]$ ps aux USER PID %CPU %MEM VSZ RSS root 1 0.El comando wc suele utilizarse para contar el número de cosas. tail +2 ? ? ? ? ? S SW SW SWN SW Sep28 Sep28 Sep28 Sep28 Sep28 0:04 init [ 0:00 [keventd] 0:00 [kapmd] 0:00 0:00 [bdflush] El siguiente script corto combina ps aux.. tail +2 y wc para crear un nuevo comando llamado nprocs. Sin embargo.0 0.. La siguiente línea crearía un alias denominado nusers.0 1384 76 root 2 0. [student@station student]$ alias nusers='users | wc -w' [student@station student]$ users student student student student root [student@station student]$ nusers 5 Procesos de conteo Al examinar la salida de un comando tal como ps aux. [student@station student]$ ps aux | root 1 0. Por ejemplo.0 0 0 [ksoftirqd_CPU0] root 9 0.0 0.0 0. 236 .0 0.0 0 0 root 4 0.. con su habilidad para imprimir el remanente de un archivo iniciando a partir de una línea especificada. el script queda disponible desde la línea de comandos. no sólo líneas.0 0 0 [ksoftirqd_CPU0] . el comando wc -l puede utilizarse para contar el número de procesos ejecutándose en una máquina.0 1384 76 root 2 0. puede suprimirse de la línea de encabezado.0 0 0 root 4 0.0 0 0 .0 0. la línea inicial que contiene los títulos en columna debe suprimirse de la cuenta. al examinar la salida de ps aux.0 0 0 root 3 0.. el cual imprime en pantalla información sobre un proceso por línea. el comando users genera una lista de usuarios que están actualmente en la máquina.0 0.

Cree el archivo ~/usrlibs. Un archivo llamado ~/localusers. Tras la ejecuación. el cual contiene el número de usuarios localmente definidos como su única palabra. 3. Las bibliotecas compiladas estáticamente de modo convencional se encuentran en el directorio/usr/lib y tienen nombres que comienzan por lib y terminan en la extensión . Crear un script ejecutable llamado~/bin/nrecent. Un archivo llamado ~/gplwords.[student@station student]$ cat nprocs #!/bin/bash ps aux | tail +2 [student@station [student@station [student@station [student@station 86 | wc -l student]$ student]$ student]$ student]$ mkdir bin mv nprocs bin chmod a+x bin/nprocs nprocs Ejercicios en línea Lab Exercise Objetivo: Usar el comando wc como herramienta de conteo. 237 . debería poder reproducir una salida semejante a la siguiente (no se preocupe si sus números reales difieren de los listados abajo).txt que contenga el número de los archivos cuyo nombre siga esta convención en el directorio /usr/lib como su única palabra (no incluya subdirectorios).txt ==> gplwords. El script no debería generar mensajes de error de los directorios en el flujo de error estándar. el script debería retornar un solo número.txt.a. Estimated Time: 10 mins. archivo /usr/share/doc/redhat-release-4ES/GPL. Especificaciones 1. 4. [student@station student]$ head *. El script debería esperar un solo argumento.txt que contenga el número de palabras (como fue reportado 2.txt que contiene el número de palabras halladas en el 2. el cual es un nombre de un directorio. el cual es el número de archivos en el directorio modificados en las últimas 24 horas. Si usted ha implementado los ejercicios de modo correcto.txt <== 2009 ==> localusers. Cree el archivo ~/localusers.txt que contiene el número de los usuarios localmente definidos en el sistema de Linux. por el comando wc) en el archivo /usr/share/doc/redhat-release-4ES/GPL como su única palabra.txt <== 216 [student@station student]$ nrecent /var/log Deliverables A title Question 1 1.txt <== 89 ==> usrlibs. Cree el archivo ~/gplwords.

Considere el utilizar el comando find para generar una lista de archivos coincidentes con los criterios y luego cuente el número de líneas (o palabras) en la salida. Tras la ejecución. Para el script ~/bin/nrecent recuerde que $1 desreferencia un argumento del script bash.txt recuerde que los usuario locales están definidos en el archivo /etc/passwd.a que se encuentran en el directorio /usr/lib. 4. que espera el nombre de un directorio como su único argumento. Un archivo llamado ~/usrlibs.txt que contiene el número de archivos que comienzan por lib y terminados en .3. Usted podría desear utilizar los directorios /etc o /var/log para probar su script. un usuario por línea. 238 . el script devolvería un solo número el cual es el número de archivos bajo el directorio especificado modificados en las últimas 24 horas. Ayudas Para el archivo ~/localusers. Un script ejecutable llamado ~/bin/nrecent. El script no debe retornar mensajes de error sobre directorios en el flujo de error estándar.

Patrones de búsqueda de mayor alcance son posibles y los examinaremos en la siguiente sección. una herrramienta útil para la búsqueda de palabras específicas o secuencias de caracteres en el contenido de archivo de texto. Utilice este comando para localizar rápidamente patrones sin caracteres comodines. Forma de los comandos grep Hay en realidad tres nombres diferentes para la herramienta grep [1]: fgrep Hace una búsqueda rápida de patrones simples. grep suele utilizarse como filtro para reducir salida a sólo lo deseado. egrep 239 . útil para buscar una palabra común. Discussion Búsqueda de contenido de archivo de texto con el comando grep En una lección anterior. El nombre grep representa en inglés general regular expression parser. dos caracteres consecutivos “l” y un caracter “o” final. La figura de abajo da una idea general de la línea de comandos grep: Figure 1. vimos cómo el programa wc puede utilizarse para contar los caracteres. En esta lección presentamos el programa grep. grep -r buscará de modo recursivo bajo un directorio determinado. grep -v imprime líneas NO coincidentes con una cadena o patrón de texto. Una expresión regular sencilla sería “Hello”. “e”.Búsqueda de Texto: grep Conceptos clave • • • • • grep es un comando que imprime en pantalla líneas coincidentes con un patrón de una cadena de texto especificado. para hacer coincidir con alguna secuencia de caracteres. palabras y líneas en archivos de texto. pero por ahora es suficiente saber que una expresión regular es simplemente una forma de describir un patrón o plantilla. grep Búsqueda de patrones con expresiones regulares comunes. la cual coincide exactamente con cinco caracteres: “H”. Usted puede preguntarse. Muchas de las opciones permiten a los usuarios especificar el formato de salida de grep. ¿qué es una expresión regular y ¿por qué razones usted quisiera analizar una expresión regular sintácticamente? Daremos una definición más formal de las expresiones regulares en una lección posterior.

salga con un estatus de salida cero si encuentra algún archivo coincidente. El argumento del patrón proporciona caracteres de plantillas que grep debe buscar. En lugar de buscar una cadena de texto literal. Al emplear este método en un archivo grande se sufre porque podemos fácilmente perder una palabra en un archivo de varios miles o incluso cientos de miles de palabras. En su lugar.Búsqueda de patrones con expresiones regulares extendidas de gran alcance. para ver si un archivo contiene la palabra “even”. vemos que sí contiene las letras “even”. (útil para especificar varios patrones alternos). usted debe encerrar el patrón entre comillas para evitar que la shell lo expanda o lo divida. Aquí buscamos una palabra con su deletreo exacto. "Quieto" No escriba nada a la salida estándar. Utiliza expresión como un patrón de búsqueda. por lo tanto si el patrón contiene espacios u otros caracteres especiales de la shell. Sólo coincide con palabras completas. Imprime nombres de archivos que contienen solo un patron coincidente. Incluye dos líneas de contexto antes y después de la línea coincidente. Se espera que el patrón sea un solo argumento. Podemos utilizar la herramienta grep para que nos busque el archivo de una forma automática: [student@station student]$ grep even file It also has even more words. Incluye números de línea a lo largo de las líneas coincidentes. Búsqueda de varios archivos al mismo tiempo 240 . It also has even more words. Opciones para el comando grep Opción -c -h -e expresión -i -l -n -q -r -w -C Efecto Imprime un conteo de las líneas coincidentes únicamente. Busca todos los archivos de modo recursivo a través de directorios. podría tan solo examinar visualmente el archivo: [student@station student]$ cat file This file has some words. el argumento del patrón puede también ser una plantilla general para coincidir con secuencias de caracteres más complicadas. eso lo veremos con detenimiento en una próxima lección. Ignora las mayúsculas o minúsculas al determinar coincidencias. Muestra todas las ocurrencias de una cadena de texto en un archivo En Linux. hay varias formas de realizar la misma tarea. Al leer el archivo. El cuadro a continuación resume algunas de las opciones más utilizadas de grep. Por ejemplo. Consulte la página del manual grep(1) (o invoque grep --help) para mayor información. Suprime prefijos de nombres de archivos. Table 1.

Al añadir la opción -l a la línea grep hace justo eso: [student@station student]$ grep -l nine general specific fallacy specific Búsqueda de directorios de modo recursivo Grep también puede buscar con un solo comando todos los archivos en un árbol de directorio completo. such as ifcfg-eth0-range0 and /etc/sysconfig/network-scripts/ifup-aliases:# ifcfg-eth0-range1. Podemos más adelante limitar los archivos listados a sólo aquellos que se refieran al dispositivo real. Quizás estemos más interesados en descubrir el archivo que menciona la palabra “nine” que en ver la línea misma. filtrando la salida de grep -r a través de un grep DEVICE: 241 . the following configuration variables /etc/sysconfig/network-scripts/ifup-aliases:# The above example values create \ the interfaces eth0:0 through eth0:253 using /etc/sysconfig/network-scripts/ifup-ipv6:# Example: \ IPV6TO4_ROUTING="eth0-:f101::0/64 eth1-:f102::0/64" /etc/sysconfig/network-scripts/ifcfg-eth0:DEVICE='eth0' /etc/sysconfig/networking/devices/ifcfg-eth0:DEVICE='eth0' /etc/sysconfig/networking/profiles/default/ifcfg-eth0:DEVICE='eth0' Cada archivo en /etc/sysconfig que mencione eth0 aparece en los resultados. En el directorio /etc/sysconfig hay tres archivos de texto que contienen mucha de la información de configuración del sistema de Linux. El nombre Linux para el primer dispositivo de red de Ethernet en un sistema es “eth0”. fallacy:Therefore. etc. Esto puede ser útil si trabajamos con un gran número de archivos.Una forma fácil para buscar varios archivos es nombrarlos en la línea de comandos grep: [student@station student]$ echo Every cat has one more tail than no cat. usted puede buscar qué archivo contiene la configuración para eth0 al permitirle al comando grep -r hacer la búsqueda por usted[1]: [student@station student]$ grep -r eth0 /etc/sysconfig 2>/dev/null /etc/sysconfig/network-scripts/ifup-aliases:# Specify multiple ranges using \ multiple files. > fallacy [student@station student]$ grep cat general specific fallacy general:Every cat has one more tail than no cat. > specific [student@station student]$ echo Therefore. La forma más fácil de entender esto es verlo en acción. > general [student@station student]$ echo No cat has nine tails. every cat has ten tails. specific:No cat has nine tails. In these \ files. every cat has ten tails.

En estas instancias. Identifique qué línea contiene la palabra “dictionary”: [student@station student]$ fgrep -n dictionary /usr/share/dict/words 12526:dictionary 242 . Esto suele ser lo deseado. El archivo /usr/share/dict/words contiene una lista de palabras comunes de diccionario. pero algunas veces se puede tener interés en las líneas no coincidentes con el patrón. la opción -v invierte el funcionamiento de grep.[student@station student]$ grep -r eth0 /etc/sysconfig 2>/dev/null | grep DEVICE /etc/sysconfig/network-scripts/ifcfg-eth0:DEVICE='eth0' /etc/sysconfig/networking/devices/ifcfg-eth0:DEVICE='eth0' /etc/sysconfig/networking/profiles/default/ifcfg-eth0:DEVICE='eth0' Esto muestra un uso común de grep como filtro para simpl¡ficar las salidas de otros comandos. la salida podría simplificarse con la opción -l. [student@station student]$ grep -rl eth0 /etc/sysconfig 2>/dev/null /etc/sysconfig/network-scripts/ifup-aliases /etc/sysconfig/network-scripts/ifup-ipv6 /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/networking/devices/ifcfg-eth0 /etc/sysconfig/networking/profiles/default/ifcfg-eth0 Inversión de grep La herramienta grep muestra por defecto sólo las líneas coincidentes con el patrón de búsqueda. ¿pero cómo se hace para localizar aquellas líneas en el archivo original? Utilizando el comando grep -n también listará el número de cada línea coincidente. Grep listará cada línea que contiene una o más coincidencias. Si solamente los nombres fueran de interés. [student@station student]$ head -n 4 /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin: daemon:x:2:2:daemon:/sbin adm:x:3:4:adm:/var/adm: [student@station student]$ grep -v root /etc/passwd | head -n 3 bin:x:1:1:bin:/bin: daemon:x:2:2:daemon:/sbin: adm:x:3:4:adm:/var/adm: Obtención de números de línea Usted puede estar buscando con frecuencia un archivo grande que tiene varias ocurrencias del patrón.

¿Ve lo que sucedió? Hicimos coincidir con la cadena de texto“at” ya sea que fuera una palabra aislada o parte de una palabra más grande. Examinemos otra vez nuestra rima infantil: 243 . [student@station student]$ grep -w at file at home. rodeados por cualquier otra cosa. Si ensayamos el comando: [student@station student]$ fgrep at rhyme The cat sat on the mat at home.También podría querer combinar la opción -n con la opción-r al buscar en los siguientes archivos de directorio: [student@station station]$ fgrep -nr dictionary /usr/share/dict linux. El comando grep -i resuelve justo este problema. El comando grep proporciona la opción -w para implicar que el patrón especificado sólo debería coincidir con palabras enteras. números y caracteres de subrayado. La opción -w considera como una palabra a una secuencia de letras.words:12526:dictionary words:12526:dictionary Límite de coincidencias con palabras completas ¿Recuerda el archivo anterior que contenía nuestra rima infantil? [student@station student]$ cat rhyme The cat sat on the mat at home. algunas veces queremos encontrar cualquiera sin importarnos si la palabra está en mayúsculas o no. Suponga que queremos recuperar todas las líneas que contienen la palabra “at”. Ignorar mayúsculas o minúsculas La cadena “Bob” tiene un significado bastante diferente a la cadena “bob”. Sin embargo.

utilizada por la línea de herramientas de impresión. Vea si el archivo que contiene la palabra “the”.[student@station student]$ cat rhyme The cat sat on the mat at home. Busque de nuevo ignorando las mayúsculas y minúsculas: [student@station student]$ grep -i LP /etc/passwd lp:x:4:7:/var/spool/lpd: 244 . Ejemplos Búsqueda de cadenas sencillas de caracteres Verifique que su computador tenga la cuenta del sistema “lp”. está todo en minúsculas: [student@station student]$ grep the rhyme the mat Ahora observe qué líneas contienen las letras “t”. [student@station student]$ grep lp /etc/passwd lp:x:4:7:lp:/var/spool/lpd: En esa clase de letra Búsqueda de una copia exacta del patrón: [student@station student]$ grep LP /etc/passwd [student@station student]$ Nada coincidió debido a que el patrón no coincidió con el tipo de letra para el nombre de cuenta. Ayuda: el archivo /etc/passwd contiene una línea por cada cuenta de usuario en el sistema. “h” y “e” en cualquier combinación de letras mayúsculas y minúsculas: [student@station student]$ grep -in the rhyme 1:The cat 3:the mat Observe que también utilizamos la opción -n para agregar los números de línea a la salida.

Palabras completas coincidentes Hemos visto que grep coincidirá con el patrón siempre que el patrón esté situado. De nuevo. incluso en medio de palabras. Busque el patrón“honey” en el diccionario de palabras del sistema /usr/share/dict/words: [student@station student]$ grep honey /usr/share/dict/words honey honeybee honeycomb honeycombed honeydew honeymoon honeymooned honeymooner honeymooners honeymooning honeymoons honeysuckle Mahoney Es evidente que el diccionario contiene varias palabras con la cadena “honey” como una palabra root. trate de buscar“honey” en el diccionario: [student@station student]$ grep -w honey /usr/share/dict/words honey A falta de una mejor palabra: perfecto. Mientras navega a través de los archivos existentes. Podemos limitarnos a hacer coincidir un montón de palabras utilizando el comando grep -w. por lo tanto la primera y última palabra en una línea se reconoce correctamente. dígitos o caracteres de subrayado rodeados por cualquier otra cosa. Usted quisiera que sus archivos de ayuda sean consistentes y decide que la anterior es la correcta. El comando grep considera que una palabra es un grupo de letras. observa que en algunos archivos de ayuda se utilizan las dos palabras línea de comandos y en otros sitios una sola palabra líneadecomandos. Usted desearía ahora buscar cada ocurrencia del textocommandline y cambiarla por command line. El comienzo y fin de una línea también clasifica como “cualquier otra cosa”. Comienza por identificar los archivos que contienen el texto commandline. 245 . Combinar grep y xargs Suponga que se le ha encargado de mantener la documentación del archivo de ayuda para el editor vim.

1/docs/options.txt que contenga sólo líneas desde el archivo /etc/passwd que no contengan el texto home (implicando que el usuario asociado tiene un directorio de inicio no estándar). el editor gedit se abre con múltiples memorias inmediatas. 246 . El comando xargs leerá la entrada estándar y añadirá las palabras encontradas en la línea de comandos provista. Las palabras provistas en la entrada estándar fueron intercambiadas por argumentos en la línea de comandos.txt /usr/share/doc/vim-common-6.txt /usr/share/doc/vim-common-6.1/docs/tags /usr/share/doc/vim-common-6.1/docs/todo. Entuba los resultados de su búsqueda en el comando gedit.txt /usr/share/doc/vim-common-6. para esto sirve el nombre xargs. Crear el archivo ~/bashusers. Uso de xargs para convertir la entrada estándar en argumentos para gedit Observe que nunca ha tenido que teclear nombres de archivos individuales.txt que contenga las líneas del archivo /etc/passwd que contengan el texto /bin/bash. Especificaciones 1.1/docs/message. Sin embargo. Afortunadamente. 2. Estimated Time: 10 mins. ¡Esto no es lo que quería! Usted quería que gedit abriera los nombres de archivo provistos por el comando grep en la entrada estándar. Crear el archivo~/nostdhome. no mediante la entrada estándar. [student@station student]$ grep -ril commandline /usr/share/doc/vim* | xargs gedit Ahora.1/docs/version5. gedit (al igual que la mayoría de los editores de texto) espera que los nombres de archivo estén provistos de argumentos en la línea de comandos. así funciona gedit.txt /usr/share/doc/vim-common-6. Con su conocimiento acerca del comando xargs modifique su método anterior.txt Usted desearía abrir cada uno de estos archivos en el editor de texto gedit para hacer sus modificaciones. la cual ayuda justo en situaciones como éstas. Esperemos que el siguiente ejemplo lo aclare.1/docs/os_risc.[student@station student]$ grep -ril commandline /usr/share/doc/vim* /usr/share/doc/vim-common-6. existe la utilidad estándar de Linux (y Unix): xargs.txt /usr/share/doc/vim-common-6. una para cada salida de archivo con el comando grep. a manera de argumentos adicionales. no la entrada estándar misma.1/docs/various. ¡Muy útil! Ejercicios en línea Lab Exercise Objetivo: Usar el comando grep para buscar ocurrencias de texto específico. pero con un buffer vacío llamado"sin título". Figure 1. [student@station student]$ grep -ril commandline /usr/share/doc/vim* | gedit El editor gedit se abre.

txt que contenga el número de la línea de la palabra mayhem del archivo /usr/share/dict/words como su única palabra. ANSI. Crear el archivo ~/ansiterms. ansi.txt que contenga líneas del archivo /etc/passwd que no contengan el textohome. Los archivos deben listarse uno por línea mediante referencias absolutas.txt que contenga el número de línea de la palabra mayhem del archivo /usr/share/dict/words como su única palabra. El archivo ~/nostdhome.txt que contenga un listado clasificado en orden alfabético de todos los archivos bajo el directorio /usr/share/firstboot (y sus subdirectorios) que contengan el texto redhat. Crear el archivo ~/firstredhat. utilizando una búsqueda insensible a las mayúsculas y minúsculas. utilizando una búsqueda que no tenga en cuenta las mayúsculas y minúsculas. Ansi y AnSi todas coincidirían).txt que contenga líneas del archivo /etc/passwd que contengan el texto /bin/bash. mediante una búsqueda sin tener en cuenta las mayúsculas y minúsculas. Deliverables A title Question 1 1. (en otras palabras. El archivo ~/ansiterms.txt que contenga cada línea del archivo /etc/termcap que contenga el texto ansi. 247 . El archivo ~/mayhemnum.txt que contenga cada línea del archivo /etc/termcap que 4. 4. El archivo ~/bashusers. contenga el texto ansi. 5.3. 2. Crear el archivo ~/mayhemnum. 3.

Esto de por sí es poderoso especialmente junto con otros argumentos como -i y -v. * y? especifican un número de ocurrencias consecutivas. A continuación se presentan algunos ejemplos de búsquedas que la herramienta grep que hemos estudiado hasta el momento no puede realizar: Primero.txt ========================== Name: Joe Green Age: 36 Pets: Name: Aida Age: 5 Species: Cat -----------Name: Hawn Age: 1 Species: Goldfish ========================== Name: Sarah Jane Age: 29 Pets: Name: Orfeus Age: 7 Species: Dog ------------Name: Euridice Age: 8 Species: Dog 248 . Dentro de las expresiones regulares ^ y $ especifican el comienzo y el final de una línea. Dentro de las expresiones regulares.Introducción a las expresiones regulares Conceptos clave • • • • • • • Las expresiones regulares son una sintaxis estándar de Unix para especificar los patrones de texto. (. y [] se utilizan para coincidir caracteres. La página del manual regex (7) proporciona detalles completos. +. pero no es apropiado para todos los escenarios de búsqueda. . vi y varios lenguajes de escritura. suponga que usted tuviera un archivo como éste: [biafra@station]$ cat people_and_pets. Dentro de las expresiones regulares. Discussion Introducción de expresiones regulares En el capítulo anterior se describió grep para coincidir una parte o toda una palabra. Dentro de las expresiones regulares. Las expresiones regulares son entendidas por muchos comandos incluyendo grep. ) y| especifican grupos alternativos. sed.

Habiendo tomado ambas declaraciones. ¿Qué sucedería si el número de la placa del causante del accidente fuera realmente "4135VB8"? En otras palabras.. lo que significa que esas líneas comienzan por caracteres de espacio en blanco en lugar de texto. find y sed. seguido por un '3'. Parece que usted leyó como una 'I' el segundo caracter y su amigo lo leyó como un '1'.. seguidos por una 'I' o por un '1'. A propósito. seguido por un '5' o una 'S'. Es un buen hábito entrar pronto porque así se evita que bash interprete caracteres especiales destinados para grep. cada uno recuerda el número con algunas diferencias. Ambos vieron el número de la placa del auto que se escapó. sin embargo. Esto podría representarse con una expresión regular así: 249 .txt? Un comando como grep -w Name: coincidiría con el 'Name:' línea para cada persona. podríamos realizar una meta si tuviéramos una forma de decir "Muéstreme todas las líneas comenzadas por 'Name:'". pero su amigo leyó "413SV88". en Linux y muchos lenguajes de programación.¿Qué sucedería si quisiera sacar únicamente los nombres de las personas en people_and_pets. seguido por dos caracteres que sean una 'B' o un '8'".txt Name: Joe Green Name: Sarah Jane . Escenarios como estos se pueden resolver utilizando expresiones regulares. qué sucedería si usted tuviera algunos caracteres correctos.. donde queríamos decir "Muéstreme todas las líneas que comienzan por 'Name:'" podría verse así: [biafra@station]$ grep '^Name:' people_and_pets.. vi. No se preocupe si estos parecen un poco complicados.eso es! Las expresiones regulares tienen que ver con el uso de caracteres especiales llamados metacaracteres para representar parámetros de búsqueda avanzada. seguido por dos caracteres que sean una 'B' o un '8'". Entonces. el resto de la unidad comenzará desde el principio y cubrirá expresiones regulares detalladamente.". seguido por un '5' o una 'S'. veamos algunas soluciones a dos problemas descritos anteriormente. pero también el 'Name:' línea para cada mascota de las personas. Usted leyó el número de la placa como "4I35VBB". seguido por una 'I' o un '1'. como se muestra aquí significa "Líneas que comienzan por. Para introducir el uso de expresiones regulares. ¿Cómo podríamos hacer coincidir sólo el 'Name:' líneas para las personas? Observe que las líneas para nombres de mascotas tienen todas sangría. ¿entonces qué pasa con el segundo problema? Este último involucra una pregunta un poco más compleja: "Muéstreme todos los números de placas que comienzan por '4'. El acento circunflejo ("^"). Diferencias similares aparecen en sus interpretaciones de otras partes de la placa como '5' en lugar de 'S' y 'BB' en lugar de '88'. seguida por una 'V'. el término se refiere a un conjunto de caracteres muy específico utilizado para resolver problemas como el anterior. Aunque los científicos informáticos algunas veces utilizan el término "expresión regular " (o "regex" para acortar) para describir cualquier método de descripción de patrones complejos. Otro ejemplo: suponga que usted y un amigo suyo vieron un accidente de auto. observe que la expresión regular está en comillas sencillas. Está bien. pero su amigo tuviera otros correctos? Sería más efectivo si la policía pudiera preguntar por un patrón que efectivamente dijera: "Muéstreme todos los números comenzados por un '4'. seguido por un '3'. Una solución podría ser realizar peticiones por separado para "4I35VBB" y "413SV88". pero al hacer esto se asume que uno de ustedes estaba en lo cierto. la policía necesita ahora acortar la lista de los sospechosos consultando su base de datos con las placas que puedan coincidir con las que ustedes vieron. seguido por una 'V'. Una regex que pueda resolver el primer problema. Las expresiones regulares son compatibles con un gran número de herramientas incluyendo grep.

Con el fin de no estancarse con las diferencias.4[I1]3[5S]V[B8]{2} ¡Oh! es bastante corta si consideramos el tiempo que nos tomó escribir lo que estamos buscando! Hay sólo dos tipos de metacaracteres regex utilizados aquí: los paréntesis cuadrados ('[]') y los paréntesis curvos ('{}'). Uno de los usos más comunes para expresiones regulares es especificar patrones de búsqueda para el comando grep. Cuando dos o más caracteres se muestran dentro de paréntesis significa "cualquiera de estos". los tres difieren en la manera de interpretar expresiones regulares. Entonces '[B8]' cerca del final de la expresión significa "'B' u '8'". un caracter literal coincide únicamente consigo mismo. Cuando un número se muestra sin ningún paréntesis curvo significa "estos cuantos del caracter anterior". esta lección describirá la sintaxis extendida. Por lo tanto. egrep El comando egrep interpreta cada patrón mediante la sintaxis expresión regular extendida. Fuimos cautelosos al utilizar sólo caracteres literales en sus expresiones regulares. Dado que no estamos distinguiendo entre una sintaxis de expresión regular básica y una extendida. grep El comando grep interpreta cada patrón mediante la sintaxis básica original de expresión regular. expresiones regulares extendidas y comando grep Como la implementación de sintaxis de expresiones regulares de Unix ha evolucionado. Como lo mencionamos en una lección anterior. se han introducido nuevos caracteres. Expresiones Regulares. resumiendo las diferencias al final de la discusión. comencemos desde el principio y cubrámoslas a fondo. hay tres versiones del comandogrep. ¡Un argumento bastante convincente! Ahora que sabe el significado y la utilidad de las expresiones regulares. el comando egrep debería utilizarse cada vez que el patrón de búsqueda contenga expresiones regulares. Nuestros ejemplos fueron cuidadosamente construídos para que el patrón contuviera exactamente el texto que estábamos buscando. '[B8]{2}' significa "dos caracteres que sean una 'B' o un '8'". pero en su lugar interpreta cada caracter en un patrón de búsqueda especificado literalmente. Anatomía de una expresión regular En nuestra discusión de la familia de programas de grep. El comando fgrep no soporta expresiones regulares. se nos introdujo la idea de utilizar un patrón para identificar el contenido del archivo de interés. Con el fin de preservar compatibilidad con los anteriores. los comandos suelen escoger implementar las expresiones regulares o expresiones regulares extendidas. Reiterando. fgrep El comando fgrep está diseñado para ser un grep "rápido". Entonces cuando utilizamos un “hello” como 250 .

nuestro patrón significa coincidir con cualquier secuencia de caracteres que conste de una “a”.” se utiliza como un marcador para coincidir con algún caracter. “abc”.”) coincide con cualquier caracter. no nos permitió obtener una apreciación completa del poder de las expresiones regulares. Interpretación de los caracteres literales de modo literal Los literales son directos porque cada caracter literal en una expresión regular coincide con una y sólo con una copia de sí mismo en el texto examinado. Dentro de una expresión. Aunque esto nos permitió concentrarnos en cómo operar el programa grep. “abbc”. Antes de ver las expresiones regulares. Por ejemplo. dígitos y la mayoría de los caracteres son ejemplos de caracteres literales (vea a continuación las excepciones). la expresión “ab*c” coincide con cadenas de texto “ac”. cualquier cosa. Por ejemplo. estábamos utilizando una expresión regular de cinco caracteres. Cada una de éstas se tratará en más detalle en las siguientes secciones. Los caracteres en mayúsculas se distinguen de los caracteres en minúsculas para que “A” no coincida con “a”. Anclas Las anclas establecen el contexto para el patrón tal como "el comienzo de una línea" o "el final de una palabra". Las letras. Una expresión regular es una secuencia de: Caracteres literales Los caracteres literales coinciden únicamente con ellos mismos. De esta manera. En el siguiente ejemplo.una expresión regular. un dígito. 251 . una letra. Modificadores Un modificador altera el significado del caracter patrón precedente inmediato. la expresión “cat” coincidiría con cualquier ocurrencia de las tres letras mientras que “^cat” sólo coincidirían con las líneas que comienzan por “cat”. Comodines El comodín "punto" El caracter “. un punto (“. “abbbc” y así sucesivamente porque el asterisco (“*”) es un modificador que significa “cualquier número de (incluyendo cero)”. el patrón coincide con cualquier ocurrencia de los caracteres literales “x” y “s” separados exactamente por dos caracteres. ya sea un espacio. Comodines Los caracteres comodines coinciden con cualquier caracter. primero deberíamos ver cómo están construídas. (posiblemente vacía) un conjunto de caracteres “b” y un caracter final “c”. puntuación.

Una expresión entre paréntesis coincidente con el conjunto de vocales en minúsculas podría escribirse “[aeiou]” y coincidiría exactamente con una vocal. la expresión “[^aeiou]” coincidiría con cualquier caracter que no sea una vocal. Una expresión de paréntesis es un intervalo de literales encerrados entre paréntesis cuadrados (“[” y “]”).[student@station student]$ grep "x. si éste coincide con alguno. En el siguiente ejemplo. En el primer caso. [student@station student]$ egrep '[aeiou][aeiou][aeiou]' /usr/share/dict/words | head -5 absenteeism Achaean Achaeans acquaint acquaintance [student@station student]$ egrep '[aeiou][^aeiou][aeiou][^aeiou][aeiou] [^aeiou]' /usr/share/dict/words | head -5 abased abasement abasements abases abasing 252 . En el segundo caso. El siguiente ejemplo primero lista palabras que consten de tres vocales consecutivas y luego lista palabras que consten de tres consonantes-vocales. la interpretación se invierte y la expresión entre paréntesis coincidirá con cualquier ocurrencia de un caracter no incluido en el intervalo. Si el primer caracter de una expresión entre paréntesis es “^”. Por ejemplo. las expresiones entre paréntesis se utilizan para buscar palabras desde el archivo /usr/share/dict/words. Suponga que queremos buscar una cadena de texto “hello” sin importar las mayúsculas: queremos hacer coincidir “Hello” y “HeLLo” también. Por ejemplo..s" /usr/share/dict/words | head -5 antitoxins axers axles axons boxers Expresiones entre paréntesis: intervalo de caracteres literales Normalmente un caracter literal en un patrón regex coincide exactamente con una ocurrencia de sí mismo en el texto examinado. el conjunto coincide exactamente con un caracter. se imprimen las primeras 5 palabras que contengan minúsculas en el patrón de vocal-consonante-vocalconsonante-vocal-consonante. el patrón regex “[Hh]” es una variedad de caracteres que coinciden exactamente con uno: ya sea en “H” mayúscula o o en “h” minúscula. las primeras cinco palabras que contienen tres vocales consecutivas (en minúsculas) son impresas en pantalla. ¿Cómo podríamos hacer esto? Una característica de regex llamada una expresión entre paréntesis resuelve el problema claramente. Observe que no importa qué tan grande es el conjunto de caracteres dentro de un intervalo.

c o d. Las clases de caracteres evitan este error.. Usted puede ejecutar: [elvis@station]$ grep '[[:upper:]]' /usr/share/dict/words 253 . El siguiente cuadro lista algunas de las clases de caracteres y la expresión equivalente en el intervalo ASCII donde es apropiado. El valor codificado de la letra se utiliza para determinar si un caracter es "menor" o "mayor" que otro. como en el caso de ASCII..Intervalo de expresiones versus clases de caracteres: vieja y nueva escuela Otra forma de expresar un intervalo de caracteres es dar letras de arranque y final de la secuencia de esta forma: “[a-d]” coincidiría con cualquier caracter del conjunto a. en sistemas menos recientes se utiliza un sistema de esquema de codificación de caracteres diferente en donde el orden alfabético dado es sensible a las mayúsculas y minúsculas. Mientras el conjunto de caracteres que define la codificación sea ordenado correctamente. ¿qué pasa con el conjunto de caracteres latino -1 (ISO-8859-1) ? ¿Es verdad que “” va después de “z”? Como una alternativa a estos dilemas. Clases de caracteres de expresiones regular Expresión [:alnum:] [:alpha:] [:blank:] [:digit:] [:lower:] [:punct:] [:space:] [:upper:] Clase de caracter alfanumérico caracter alfabético espacio o tabulación dígito numérico Letras minúsculas caracteres imprimibles.. suponga que usted fuera a ejecutar el comando: [elvis@station]$ grep '[A-Z]' /usr/share/dict/words En un sistema de Red Hat Enterprise Linux. Table 1. Por ejemplo. ¿la“C” mayúscula. utilizando convenciones específicadas de lenguaje para decidir si determinado caracter es letra mayúscula o minúscula o si debería considerarse como parte del alfabeto o como puntuación.etc].etc]. ¿Cómo se ordenan los caracteres? Por ejemplo. Un uso típico de esta forma sería “[0-9]” para representar cualquier dígito sencillo o “[A-Z]” para representar todas las letras mayúsculas. Pero. pero no sólo aquellas que contengan mayúsculas como puede asumirse. excluyendo alfanuméricos caracter de espacio en blanco letra mayúscula Intervalo equivalente A-Za-z0-9 A-Za-z 0-9 a-z espacios y ASCII A-Z Las clases de caracteres evitan problemas que se encuentran al usar expresiones regulares en sistemas que utilizan diferentes esquemas de codificación de caracteres en donde las letras son ordenadas de modo diferente. Esto se debe a que en unicode (utf-8). En dichos sistemas [A-Z] sería equivalente a [ABC. están ordenados alfabéticamente sin importar las mayúsculas o minúsculas para que [A-Z] sea equivalente a [AaBbCc. el esquema de codificación de caracteres que RHEL utiliza. b. cada palabra coincidiría en el archivo. todo está bien. va antes o después de “b” minúscula? Recuerde la discusión acerca del caracter de codificación en la primera lección. Sin embargo. la expresión regular moderna hace uso de las clases de caracter. Las clases de caracter coinciden con cualquier caracter sencillo..

pero no con “abc” o “abbbbbc”. El patrón regex “ab*c” coincide con las cadenas de texto “ac”. Por ejemplo. Si quiere aprender acerca de cómo se utilizan los esquemas de codificación de caracteres para soportar otros idiomas en Red Hat Enterprise Linux. El patrón regex “b{2. Para mayor información acerca de los intervalos de expresiones predefinidas consulte la página grep del manual. El patrón regex “ab+c” coincide con las cadenas de texto “abc” y “abbc” pero no coincide con “ac”. refiérase al capítulo 8. pero luego sin duda. b+ El modificador más (“+”) significa “uno o más”. por lo tanto el patrón regex “b+” coincide con una secuencia de no-espacio vacío de b.3. 254 . egrep imprime líneas desde /usr/share/dict/words que contienen patrones que comienzan con una (letra mayúscula o minúscula) “a”. el modificador de paréntesis se utiliza para especificar exactamente n occurrencias para el caracter precedente. comience por la página del manual locale. b{n} Con sólo un número entero. En el siguiente ejemplo. “abbc” y así sucesivamente. seguida por una “a” (minúscula).4}” coincidiría con “abbc” y “abbbc” y “abbbbc”. b* El modificador asterisco (“*”) significa “cualquier número (incluyendo cero)” del caracter literal precedente. b{m.n} El modificador de paréntesis se utiliza para especificar un intervalo entre las ocurrencias m y n del caracter precedente. Caracteres modificadores comunes Vimos un uso común del modificador regex en nuestro ejemplo reciente “ab*c” para coincidir con un caractera y c con algún número de letras b intermedias. el patrón regex “ab?c” coincide con las cadenas de texto “ac” y “abc”. Para mayor información en esquemas de codificación de caracteres bajo Linux. “abc”.en cualquier sistema sin importar el esquema de codificación que se esté utilizando y sólo coincidiría con las líneas que contengan mayúsculas. Listado de algunos de los caracteres modificadores comunes: b? El signo de interrogación final (“?”) significa “uno o ninguno”: el caracter literal se considera como opcional en el texto examinado. pero no con “abbc”. luego podría o no tener una “b”(minúscula). El caracter “*” cambió la interpretación del caracter literal b de coincidir exactamente con una letra a coincidir con cualquier número de b.

la diferencia se vuelve importante.*bra' /usr/share/dict/words | head Observe que hallamos variaciones en las palabras algebra y calibrate.*e y el flujo de salida: ahora es el momento nuestro patron coincide con: el tiempo En lugar de sólo “the”. Notemos que los caracteres modificadores son ambiciosos: siempre quieren coincidir con la cadena de texto más larga posible. seguidas por el patrón “bra”. cuando las expresiones regulares se utilizan para buscar y remplazar operaciones.” para especificar 0 o más ocurrencias de cualquier caracter. la cual se interpreta como "0 o más de cualquier caracter". aparece a menudo en patrones regex. La expresión “. Cuando se utiliza para búsquedas tales como grep. la diferencia suele ser insignificante.[student@station student]$ egrep '[Aa]b?a' /usr/share/dict/words | head -5 Aarhus Aaron Ababa aback abaft El siguiente ejemplo imprime líneas que contienen patrones que comienzan por“al”. Para la anterior. luego usan el comodín “. [student@station student]$ algebra algebraic algebraically algebras calibrate calibrated calibrates calibrating calibration calibrations egrep 'al.*”. actuando como la "goma elástica " dentro de dos patrones importantes.* coincidió con “ge” mientras que la última coincidió con la letra “i”. dado el patrón regex: t. 255 . Sin embargo. Por ejemplo. la expresión . como se hace con muchos editores.

lista sólo líneas que terminen en “ion”. \< y \> también suelen utilizarse como pares. “^foo” coincide con la cadena de texto“foo” sólo cuando está al comienzo de la línea. Nuestro ejemplo “foo$” coincide con la cadena de texto “foo” sólo al final de la línea inmediatamente antes del caracter newline. De esta manera el patrón “\>cat\<” coincide con la palabra “cat”. En el siguiente ejemplo. respectivamente. también utiliza paréntesis para recopilar especificadores de patrones de expresiones regulares dentro de grupos. [student@station student]$ egrep ion /usr/share/dict/words | head -5 abbreviation abbreviations abduction abductions aberration [student@station student]$ egrep 'ion$' /usr/share/dict/words | head -5 abbreviation abduction aberration abjection ablation Aceptación de la agrupación Regex De la misma manera que usted utiliza los paréntesis para agrupar términos dentro de una expresión matemática. El patrón regex “^foo$” coincide con una línea entera que contiene sólo “foo” y no coincidiría con la línea si ésta contuviera espacios. la primera búsqueda lista todas las líneas que contienen las letras “ion” en cualquier parte de la línea. Al usar el caracter de barra invertida para escaparlos significan “primero de una palabra ”y “fin de una palabra”. “*” y “+” 256 .Búsquedas de anclaje Cuatro modificadores de caracteres de búsqueda disponibles: ^foo Un acento circunflejo (“^”) coincide con el comienzo de una línea. Nuestro ejemplo. \<foo\> Solos. los signos menor que (“<”) y mayor que (“>”) son literales. Usted verá con frecuencia tanto^ como$ utilizados juntos. La segunda. foo$ Un signo de dólar (“$”) coincide con el final de una línea. pero no con la palabra “catalog”. Esto le permite a los caracteres modificadores “?”.

Suponga que necesitamos una expresión regular para coincidir ya sea con “foo” o “foobar”. podemos volver a escribir nuestro ejemplo anterior como “(foo|foobar)”. Observe una molesta excepción a esta regla. siempre encierre los grupos entre paréntesis. Mientras usted esté aprendiendo.” para inhabilitar el periodo de interpretación como un caracter comodín. La agrupación de especificadores regex mediante paréntesis se hace aún más flexible cuando se utiliza el símbolo de tubería (“|”) para separar patrones alternativos. utilice el patrón regex “cat\.” al final de una oración. éste habilita la interpretación especial (fijando el comienzo o el final de una palabra) en lugar de inhabilitar la interpretación especial. Para coincidir sólo con las letras “cat. Podríamos escribir la regex como “foo(bar)?” y obtener los resultados esperados. seguida (en alguna parte) de una doble “e”. los especificadores regex tienen prioridad. Al utilizar alternativas. [student@station student]$ egrep '[aeiou]{4}' /usr/share/dict/words | head -5 aqueous dequeue dequeued dequeues dequeuing [student@station student]$ egrep '(o|e){2}. una doble “e”. Esto le permite al modificador “?” aplicar toda la cadena de texto “bar” en lugar de únicamente al caracter precedente “r”. el patrón regex “cat. Cuando el caracter de barra inversa precede a “<” o al caracter “>”. simplemente escápelos mediante el caracter de barra inversa (“\”). Por ejemplo.aplicarse a los grupos de especificadores de regex en lugar de sólo inmediatamente al especificador anterior. La segunda búsqueda encuentra palabras que contengan una doble “o”o. En el siguiente ejemplo.*ee' /usr/share/dict/words bookkeeper bookkeepers bookkeeping Chattahoochee doorkeeper freewheel Greentree Escape de Metacaracteres Algunas veces usted necesita coincidir un caracter que comúnmente sería interpretado como un comodín para una expresión regular o un caracter modificador. Escribir esto como “foo| foobar” es más sencillo y funciona de la misma manera. ¡Ni pensar en lo que pasará! Pero puede ser peorvea la nota de pie de página en la parte inferior del siguiente cuadro. el cual contiene cuatro vocales consecutivas (compare la sintaxis con la utilizada anteriormente al presentar el intervalo de expresiones). el primero busca lineas impresas en el archivo /usr/share/dict/words. porque al igual que en matemáticas. Para inhabilitar temporalmente el significado especial de estos caracteres. Resumen de la sintaxis de expresiones regulares de Linux 257 .” coincidiría con las letras “cat” seguidas por cualquier caracter: “cats” o “catchup”.

). Función comodín intervalo inclusión intervalo exclusión modificador modificador Sintaxis Regex básico básico 258 . “?”. etc. Ambos se utilizan para hacer coincidir patrones en texto. pero utiliza la barra inversa para permitir interpretaciones ampliadas del caracter siguiente. ¡Da escalofrío! Las expresiones regulares NO son comodines de archivos Al encontrar expresiones regulares por primera vez se entiende que los estudiantes confundan las expresiones regulares con la expansión del nombre de ruta (comodín de archivos).. | . la expresión “e\{3\}” coincidiría con “eee” cuando se utilicen expresiones regulares.El cuadro siguiente resume la sintaxis de expresiones regulares e identifica los componentes hallados en la sintaxis de expresión regular básica y en la sintaxis de expresiones regulares extendidas.. Utiliza la expresión “*” para goma elaśtica. Sin embargo... Resumen de la sintaxis de expresiones regulares de Linux Caracter . la barra inversa suele quitar la interpretación especial del caracter siguiente.. Red Hat Enterprise Linux utiliza extensiones GNU cuando analiza sintácticamente las expresiones básicas regulares.n} modificador extendido coincide con ocurrencias dentro dem y n (inclusive) del término precedente {n} modificador extendido coincide exactamente con ocurrencias n del término precedente ^ ancla básico señala el comienzo de una línea $ ancla básico marca el final de una línea \< ancla básico señala el comienzo de una palabra \> ancla básico señala en final de una palabra (.. [a] Cuando se utilizan las expresiones regulares extendidas. El siguiente cuadro compara y contrasta expresiones regulares y comodines de archivos. Comodines de archivo Implementado por la shell bash para coincidir nombres de archivos y disminuir la extensión se encuentra en algunas aplicaciones y lenguajes de escritura.) agrupación extendido permite que los patrones alternos sean especificados \ escapa [a] extendido escapa (o permite) la interpretación (básico) especial del caracter siguiente. [abc]. busca y remplaza utilidades tales comogrep.])”.. [^ade básico coincide con cualquier caracter no incluido z] en el intervalo ? extendido coincide con 0 ó 1 del término precedente * básico coincide con 0 o más del término precedente + modificador extendido coincide con 1 o más del término anterior {m. Table 1. [a-z] Interpretación coincide con cualquier caracter de coincide con cualquier caracter incluido en un intervalo [^abc]. Por ejemplo. python.*” para goma elaśtica. “[. sed y muchos lenguajes de escritura tales como perl. Utiliza la expresión “. son bien diferentes. etc..) agrupación básico permite a los modificadores actuar en un grupo de caracteres (. vi. Comparación y contraste de expresiones regulares y comodines de archivo Expresiones regulares Implementado dentro de la búsqueda. Ambas comparten metacaracteres similares (“*”. Table 1.

mientras que el segundo argumento es un comodín de archivo que especifica todos los archivos en el directorio /etc cuyo nombre de archivo comienza por “l” y termina en “.conf”. /etc/ltrace.conf' /etc/l*.conf:.conf /etc/ldap.” para coincidir exactamente con cualquier caracter. pero aún así. el primer argumento es una expresión regular especificando texto que comienza por “l” y terminando en “. Dado el archivo rhyme que contiene el texto: [student@station student]$ cat rhyme The cat sat on the mat at home.conf”. ¿Por qué fue emparejada por la expresión regular especificada? En un esfuerzo similar en vano. En todos los ejemplos de este análisis.Utiliza la expresión “. [student@station student]$ egrep 'l. Para mayor información en línea sobre las expresiones regulares consulte: • • La página de manual regex(7). ltrace. La explicación provista será adecuada a sus necesidades diarias.conf:# Set this only if it differs from the default in /etc/krb5. La página de manual grep(1).v 1. Utiliza la expresión “?” para exactamente con cualquier caracter. En dónde encontrar mayor información sobre las expresiones regulares Apenas hemos tocado el tema de la utilidad de las expresiones regulares. el primer argumento al comando egrep está protegido con comillas justo por esta razón.conf Observe de cerca la segunda línea de salida. al especificar las expresiones regulares en la línea de comandos bash.2 2004/01/07 16:39:53 bowe Exp $ /etc/libuser. coincidir En el siguiente ejemplo. las expresiones regulares ofrecen mucho más poder.dbk.*\.conf.conf:# @(#)$Id: 087_warning. Ejemplos Búsquedas literales Ahora que entendemos las expresiones regulares en mayor detalle volvamos a ver algunos ejemplos anteriores con una nueva perspectiva. se debe tener cuidado al poner entre comillas o escapar los metacaracteres regex no sea que se expandan por medio de la shell bash con resultados inesperados. al facilitar búsquedas de texto aún mas complicadas. La expresión regular “at” coincide con: 259 .

incluyendo cero. La expresión regular “\<at\>” sólo coincide con la palabra individual “at”. de ocurrencias del especificador precedente: 260 . si éste existe.• • • el at en “cat” y el at en “mat” y el at en “at”. Intervalo de expresiones Un intervalo de expresiones coincide exactamente con una instancia de cualquiera de los caracteres listados por el intervalo de expresión. [student@station student]$ egrep 'ab?c' file ac abc El signo más (+) coincide con uno o más de los especificadores precedentes: [student@station station]$ egrep 'ab+c' file abc abbc abbbc El asterisco (*) coincide con cualquier número. Modificadores REGEX Los modificadores controlan cuántas ocurrencias del especificador anterior regex coinciden: [student@station [student@station [student@station [student@station student]$ student]$ student]$ student]$ echo echo echo echo ac > file abc >> file abbc >> file abbbc >> file El signo de interrogación (?) coincide exactamente con una ocurrencia del especificador precedente. [student@station [student@station [student@station [student@station [student@station car far student]$ student]$ student]$ student]$ student]$ echo echo echo echo grep bar > file car >> file far >> file are >> file '[cf]ar' file El intervalo de expresión “[cf]ar” coincide con una c o con una f seguida por “ar”.

261 . Podríamos escribir una expresión regular para coincidir con la línea de saludo como esta: ^Dear (Dr|Mr|Ms)\. [student@station [student@station [student@station [student@station [student@station i am sam sam i am am i sam sam [student@station sam i am [student@station i am sam am i sam sam [student@station sam student]$ student]$ student]$ student]$ student]$ echo "i am sam" echo "sam i am" echo "am i sam" echo "sam" cat file > >> >> >> file file file file student]$ egrep '^sam' file student]$ egrep 'sam$' file student]$ egrep '^sam$' file Donde ^ y $ se fijan a las líneas. Suponga que estamos escribiendo una carta en inglés.[student@station student]$ egrep 'ab*c' file ac abc abbc abbbc Búsquedas de anclaje Las búsquedas de anclaje se utilizan para hallar coincidencias entre el comienzo y el final de la línea de entrada. Utilice el símbolo de tubería (“|”) para indicar alternativas. las anclas \< y \> coinciden con el comienzo y el final de las palabras: [student@station student]$ egrep '\<am\>' file i am sam sam i am am i sam Agrupación del término REGEX Utilice paréntesis para agrupar varios especificadores regex dentro de una sóla unidad.

Esta línea contiene la expresión regular de interés. en lugar de la máquina local. 262 . el cual se espera sea un nombre de usuario.Esto coincidiría con las líneas: Dear Dr. Crea el siguiente script. then echo "$1 is in the house. Ella en su lugar. Smith Dear Mr. ¿Está elvis en la casa? La usuaria blondie quisiera crear un guión que revise si alguien está definido como un usuario local en un sistema Linux. [blondie@station blondie]$ cat inhouse #!/bin/bash if [ ! $# == '1' ]." fi En esta estanza." else echo "$1 is not in the house. El comando grep buscará la línea que comienza con el argumento rastreado por “:”. los nombres de usuario cumplen estas condiciones. then echo "usage: inhouse USERNAME" exit 1 fi if grep -q "^$1:" /etc/passwd. Smith Dear Ms. Este patrón regex coincidiría de la siguiente manera: ^Dear (Dr|Mr|Ms)\. el script asegura que se haya pasado exactamente un argumento. decide examinar directamente la base de datos local del usuario (el archivo/etc/passwd).? Ya sea que el punto esté presente o no. Smith pero no coincidirían con un saludo tal como: Dear Miss Smith Quizás el saludo no coincidió porque olvidamos agregar el punto después de la abreviatura. Ella podría utilizar el comando id para confirmar si existe un usuario llamado username. Recordando la estructura del archivo /etc/passwd. El guión toma un argumento. pero el comando id incuiría usuarios que podrían definirse por un servidor NIS o algún otro tipo de base de datos de acceso a la red.

/libart_lgpl-2.. Después de observar las primeras pocas líneas./bash-2. Suite 330.2. Boston.28/esound. Está buscando todos los códigos postales como también los números telefonónicos.11/COPYING: 59 Temple Place. blondie ensaya el guión en el usuario elvis (existente) y en el usuario barney (no existente). Boston. [elvis@station doc]$ egrep -r '[^[:digit:]][[:digit:]]{3}(-| )[[:digit:]]{4} [^[:digit:]]' . [elvis@station doc]$ egrep -r '[[:digit:]]{3}(-| )[[:digit:]]{4}' . Comienza por buscar dicho patrón de modo recursivo a través de todos los archivos en el directorio /usr/share/doc. [blondie@station blondie]$ inhouse barney barney is not in the house. Boston./libjpeg-6b/README: phone (408) 944-6300..ai. Suite 330.28/esound.75/COPYING: 59 Temple Place. elvis nota que su patrón regex es demasiado general. 263 . tal como 555-1212 o 555 1212.mit. Refina su patrón de búsqueda especificando que cualquier caracter precedente o de rastro no debe ser un número./esound-0. or from Global Engineering Documents at (800) 8547179. Búsqueda de números telefónicos La combinación de expresiones regulares y el comando grep crea una herramienta de gran alcance para extraer las deseadas pepitas de oro de las grandes cantidades de información.. [blondie@station blondie]$ mv inhouse bin/ [blondie@station blondie]$ chmod a+x bin/inhouse [blondie@station blondie]$ inhouse elvis elvis is in the house. MA 02111-1307 USA . Comienza por observar el hecho que los número de los Estados Unidos tienen al menos 7 dígitos. (ANSI .ps:7 w(9)p Black 0 TeXcolorgray 795 1665 a Fm(New)k(Featu r)o(es)p . pero no recuerda dónde.05b/article.ms:\f(CRgnu@prep.Al grabar el archivo y hacerlo ejecutable. ./esound-0.75/COPYING: Foundation.)20 b(Miscellaneous)d(Information)p .edu\fP or call \f(CR+1-617-876-3296\fP .ps:0 TeXcolorgray 596 1554 a Fk(4./libjpeg-6b/README:642-4900. .28/esound.2. A continuación.. MA 02111-1307 USA . elvis recuerda haber visto un número telefónico en alguna parte del directorio /usr/share/doc. MA 02111-1307 USA .3./esound-0.000 archivos).ps:7 w(5)p Black 0 TeXcolorgray 795 1077 a Fm(esd)p Black . Comienza un proceso de búsqueda por todos los números telefónicos dentro del directorio /usr/share/doc (que en este caso contiene cerca de 12. fax (408) 944-6314 . por convención escritos con los primeros tres dígitos separados de los últimos cuatro ya sea con un “-” o con un espacio./hwdata-0.2./hwdata-0.2. Inc. Suite 330../esound-0.ps:7 w(5)p Black 0 TeXcolorgray 795 1168 a(esdctl)p Black . 59 Temple Place.28/esound.

ms:\f(CRgnu@prep./gawk-3. hasta que él toque el archivo esound.Esta vez. elvis diseña una forma de excluir todos los archivos terminados en la extensión . 264 ./libjpeg-6b/README:642-4900.edu\fP or call \f(CR+1-617-876-3296 \fP . Este archivo contiene PostScript. Primero utiliza el comando find para listar cada archivo en el directorio.solaris:# P./gawk-3.solaris:Columbus. | egrep -v '\./libjpeg-6b/README: phone (408) 944-6300.1/README_d/README. la búsqueda de elvis precede mucho mejor. elvis repite su búsqueda. | egrep -v '\. elvis revisa la salida formateando y pidiéndole a grep no mostrar los nombres de archivos y dar 2 líneas de contexto alrededor de cada número telefónico.mit. el cual por rutina utiliza números escritos en texto ASCII para especificar coordenadas. Entonces utiliza el comando xargs para alimentar estos nombres de archivos dentro de su comando original grep como argumentos..(ps|fig|pdf)$' | xargs egrep -h -C2 '[^[:digit:]][[:digit:]]{3}(-| )[[:digit:]]{4} [^[:digit:]]' .ps. ya que pueden contener muchos números ASCII y estan bloqueando su salida.05b/article.1/README_d/README.O. Puesto que sus archivos están siendo especificados de modo individual la línea de comandos ya no necesita utilizar grep de modo recursivo.figy .. [elvis@station doc]$ find . fax (408) 944-6314 . or from Global Engineering Documents at (800) 8547179.1./bash-2. Ahora que la búsqueda parece ir bien. Ohio 43210-1174 1-614 -292-5310 (Office/Answering Device) .1. Box 354 Home Phone: +972 8 979-0381 Fax: +1 603 761-6761 .ai.ps. Luego la salida de grep a todos los archivos no terminados en .ps$' | xargs egrep '[^[:digit:]][[:digit:]]{3}(-| )[[:digit:]]{4}[^[:digit:]]' .. (ANSI . [elvis@station doc]$ find . Al saber que no estaba examinando un archivo PostScript.. Después de observar unas cuanta líneas más de la salida.pdf. Al modificar la expresión regular en su primer comando grep. elvis se da cuenta que debería también excluir de su búsqueda los archivos terminados en .ps desde su búsqueda.

_.edu/~jat/ Columbus.. | egrep -v '\.Pa.. Elvis termina con 289 " coincidencias " las cuales puede revisar en un tiempo razonable. el cual es un nombre de archivo.._. or from Global Engineering Documents at (800) 854-7179. Joe Farwell | phone 610-843-6020 | Platinum technology Systems Administrator | vmail 800-123-9096 x7512 | 620 W.com) # D. Observe que los nombres y números han sido alterados en esta salida.net/graphics/jpeg/jfif.com [ <<=== NOTE: NEW ADDRESS!! ] # P.-*~'`^`'~*-.. .Tiempo estimado: 45 minutos.O. but Global does.math. fax (408) 944-6314 A PostScript version of this document is available by FTP at ftp://ftp.ai.uu.._. Milpitas.) It's not cheap: as of 1992.math.ohio-state.-*~'`^`'~*-.edu\fP or call \f(CR+1-617-876-3296\fP for more information. nada menos)..gz.. (ANSI doesn't take credit card orders..ps.-*~'`^`'~*-. .. Ohio 43210-1174 1-614-292-5310 (Office/Answering Device) The United States of America 1-614-292-1479 (Math Dept Fax) -. Box 354 Home Phone: +972 8 989-0381 Fax: +1 603 761-6761 # Nof Ayalon Cell Phone: +972 51 227-545 (See www..-*~'`^`'~*-. send electronic mail to \f(CRgnu@prep.. Shimshon 97784 Laundry increases exponentially in the -The Ohio State University http://www.19462 '~*-.-*~'`^`'~*-._.edu/~nevai/ 231 West Eighteenth Avenue http://www. plus 7% -1778 McCarthy Blvd. el 265 ..PP -# -# Aharon (Arnold) Jones arnold@sleeve.ohio-state.) In the USA._.efax.. Ejercicios en línea Lab Exercise Objetivo: Usar expresiones regulares para buscar patrones de texto... There is also a plain text -The Free Software Foundation sells tapes and CD-ROMs containing Bash. Crear un ejecutable pequeño de un script bash llamado ~/bin/ispython...-*~'`^`'~*-.._._.[elvis@station doc]$ find . que espera un argumento sencillo.-*~' delay needs to be calibrated using outside sources.. Si la primera línea del nombre de archivo proporcionada es exactamente“#!/usr/bin/python” (nada más. ANSI was charging $95 for Part 1 and $47 for Part 2. copies of the standard may be ordered from ANSI Sales at (212) 642-4900.-*~'`^`'~*-.-*~'`^`'~*-.com | fax 610-872-6021 | Plymouth Meeting..(ps|pdf|fig)$' | xargs egrep -h -C2 '[^[:digit:]][[:digit:]]{3}(-| )[[:digit:]]{4}[^[:digit:]]' it's much cheaper and includes a great deal of useful explanatory material._.N. CA 95035 phone (408) 944-6300. Especificaciones 1. Germantown Pike joe@platinum.-*~'`^`'~*-.mit._.

escrito mediante el patrón 1-###-###-####.txt newsitems23. \V. Recopile los nombres de archivos de cada archivo en el directorio /etc que contenga dicho patrón de números y colóquelos en el archivo ~/etcphone. script debería imprimir en pantalla el número 1.. O o U tanto en mayúsculas como en minúsculas. almacenadas una por línea. The history file ($HISTFILE) is now truncated to $HISTFILESIZE after being written. donde cada # es remplazado por un dígito numérico. I. el scripts imprimiría 0 (ayuda: esto puede realizarse combinando los 266 . El archivo /usr/share/dict/words contiene una colección de palabras de diccionario comunes. imprimirá en pantalla 1 si la primera línea del archivo es exactamente #!/usr/bin/ python. que al ejecutarse con un solo nombre de archivo como argumento. z.txt. filename newsitems. Al utilizar el comando egrep. Deliverables A title Question 1 content_view let_ 1. cada uno en mayúsculas. \e. el script debería imprimir en la pantalla el número 0.txt newsitems3. \H. El archivo /usr/share/doc/bash-*/NEWS contiene muchas listas detalladas.2.txt newsitems2. Bash now defaults to using command-oriented history. 3. aa. Tanto las palabras comunes como los nombres propios están incluidos. un archivo por línea. De lo contrario. Variable expansion in prompt strings is now controllable via a shell option (shopt prompt vars). \@.  Crear los siguientes archivos. \T. De lo contrario. \v. E. considere las vocales como sólo las letras A. New prompting expansions: \a. determine qué palabras comienzan con una letra mayúscula seguida únicamente por vocales.) Liste estas palabras. con los elementos de la lista marcados por líneas cuyos caracteres sean una serie de una o más letras. clasificado en orden alfabético. No incluya palabras de una sola letra.txt pregunta ¿Cuántas líneas comienzan por una serie de una o máś letras seguidas por un punto? ¿Cuántas líneas comienzan por una serie de dos o tres letras seguidas por un punto? ¿Cuántas líneas comienzan por una serie exacta de dos letras seguidas por un punto? ¿Cuántas líneas comienzan por una serie exacta de tres letras. Un script llamado ~/bin/ispython.txt. una por línea y clasifíquelas en orden alfabético en el archivo ~/vowel2. cada uno conteniendo el número que contesta la pregunta especificada como su palabra única. bb. Usted está buscando archivos en el directorio /etc (pero no en subdirectorios) que contengan un número estándar de larga distancia en los Estados Unidos. (para propósitos de este ejercicio. seguidas por un punto y un espacio como a continuación: y. usando referencias absolutas. seguidas por un punto? 4.

que contiene una lista de todos los archivos en el directorio /etc (no en subdirectorios) que contienen el patrón 1-###-###-####. El archivo ~/etcphone.txt y ~/newsitems3. ~/newsitems23.txt. una por línea en orden alfabético. que contiene un listado clasificado en orden alfabético de todas las palabras en /usr/share/dict/words que comienzan con una mayúscula y seguidas de solo vocales (excluya las palabras de una sola letra).comandos head ygrep). 2. 4.txt. Los archivos deberían listarse como referencias absolutas. El número debería ser la respuesta a la pregunta respectiva acerca del archivo /usr/share/doc/bash-*/NEWS en el cuadro anterior. cada uno de los cuales contiene un solo número como su única palabra. 3.txt. Los archivos ~/newsitems. donde cada # se remplaza por un número digital. 267 .txt.txt. El archivo ~/vowel2. ~/newsitems2.

Discussion En cuadernos anteriores hemos presentado el comando sort en su forma más sencilla: una herramienta para ordenarr las líneas de un archivo o salida desde un comando en orden alfabético. clasifica el contenido del archivo en orden alfabético. sort -n ordena numéricamente. El comando sort utiliza la definición local de locale (definición de lenguaje) para determinar el orden de caracteres (conocido como orden de recopilación). madonna muestra primero el contenido del archivo /etc/sysconfig/mouse tal como está. El comando sort Clasificación básica La clasificación es el proceso de arreglar los registros en una secuencia específica. Ejemplos de clasificación sería el arreglar una lista de nombres de usuario dentro de un orden alfabético o una serie de archivos de diferentes tamaños en orden numérico.Ordenando todo: sort y uniq Conceptos clave • • • • El comando sort clasifica datos en orden alfabético. y luego. En el siguiente ejemplo. los argumentos se interpretan (en lo posible) como nombres de archivos para ser clasificados. Modificación del orden de clasificación 268 . sort -u clasifica y suprime duplicados. sort -k y -t clasifica en un campo específico en datos en patrones. Esta lección presentará el comando sort en más detalle. [madonna@station madonna]$ cat /etc/sysconfig/mouse FULLNAME="Generic . el comando sort clasificará lo que lea de la entrada estándar.2 Button Mouse (PS/2)" MOUSETYPE="ps/2" XEMU3="yes" XMOUSETYPE="PS/2" Si se llama con argumentos.2 Button Mouse (PS/2)" MOUSETYPE="ps/2" XEMU3="yes" XMOUSETYPE="PS/2" DEVICE=/dev/psaux [madonna@station madonna]$ sort /etc/sysconfig/mouse DEVICE=/dev/psaux FULLNAME="Generic . Si se llama sin argumento. En su forma más simple. el comando sort clasificará en orden alfabético líneas (incluyendo cualquier espacio en blanco o caracteres de control hallados).

952 saliendo antes de 20). el comando sort clasifica líneas en orden alfabético. --ignore-case -g. Al darse cuenta que esto no era lo que buscaba.1 4 /var/log/messages 560 /var/log/messages.3 1236 /var/log/maillog.2 216 /var/log/messages. [madonna@station madonna]$ ls -s /var/log/m* | sort 1236 /var/log/maillog.1 384 /var/log/messages. A manera de ejemplo. [madonna@station madonna]$ ls -s1 /var/log/m* 20 /var/log/maillog 3104 /var/log/maillog.4 Luego clasifica la salida con el comando sort. Compare palabras como números de punto flotante.Por defecto.3 20 /var/log/maillog 216 /var/log/messages. el comando sort clasificó las líneas en orden alfabético (con 1.2 Sin habérsele dicho. Trate a todos los caracteres como mayúsculas.2 1952 /var/log/maillog. madonna agrega la opción -n. --numeric-sort -r. --reverse Efecto Ignora espacios y tabulaciones al comienzo de una línea. 269 . --dictionary-order -f.1 1552 /var/log/maillog.3 3104 /var/log/maillog. madonna está examinando los tamaños de archivo de todos los archivos que comienzan por unam en el directorio /var/log. Table 1. Compare palabras como números enteros.4 1552 /var/log/maillog. Opciones para especificar el orden de clasificación Opción -b.4 4 /var/log/messages 384 /var/log/messages.3 560 /var/log/messages.2 1952 /var/log/maillog. El siguiente cuadro lista las opciones que pueden utilizarse para modificar el orden de clasificación predeterminado. Clasifique en orden descendente en vez de en orden ascendente. --ignore-leading-blanks -d. Considere solamente los caracteres en blanco y los alfanuméricos.1 636 /var/log/messages. --general-numeric-sort n.4 636 /var/log/messages.

La opción también fuerza esta conducta para la salida de la terminal. el comando sort permite a los usuarios especificar qué columna de datos tabulares utilizar para determinar el tipo de orden o de un modo más formal.4 636 /var/log/messages. cuando el comando ls está utilizando una terminal para la salida estándar.2 1236 /var/log/maillog. la información formateada no se arregla de modo tan conveniente. [madonna@station madonna]$ ls -s /var/log/m* | sort -nr 3104 /var/log/maillog. éste agrupará los nombres de archivo en múltiples comandos para una lectura fácil. Sin embargo.4 1552 /var/log/maillog.3 3104 /var/log/maillog.2 560 /var/log/messages. Utilice el caracter o caracteres SEP para separar campos (en lugar de un 270 . A menudo.4 636 /var/log/messages.1 1952 /var/log/maillog. Opciones para especificar teclas de clasificación Opción -k.1 560 /var/log/messages. uno por cada línea.1 Mejor pero madonna preferiría invertir el orden para que los archivos más grandes estén primero. pero no en los otros? Por defecto. --fieldEfecto Utilice la tecla en POS para determinar el orden de clasificación. cuando el comando ls está utilizando una tubería o archivo para salida estándar. Table 1.2 1236 /var/log/maillog. El siguiente cuadro de opciones puede utilizarse para determinar la tecla de clasificación.1 216 /var/log/messages. Afortunadamente.3 20 /var/log/maillog 4 /var/log/messages ¿Por qué ls -1? ¿Por qué la opción -1 fue dada al comando ls en el primer ejemplo.[madonna@station madonna]$ ls -s /var/log/m* | sort -n 4 /var/log/messages 20 /var/log/maillog 216 /var/log/messages. --key=POS -t.3 384 /var/log/messages. el comando sort realizó su clasificación con base en los primeros caracteres buscados en una línea.3 1552 /var/log/maillog. Agrega la opción -r. imprimirá los archivos. qué columna debería utilizarse como la tecla de clasificación.2 1952 /var/log/maillog. Especificar teclas de clasificación En los ejemplos anteriores.4 384 /var/log/messages.

Clasificar salida por una columna en particular A manera de ejemplo. Ella trata simplemente de clasificar su salida de modo numérico. Utiliza el comando grep para extraer la información del archivo.4 /var/log/messages.1 Especificar teclas de clasificación múltiples Luego. repite la clasificación con la opción -k para ordenar su salida por la quinta columna obteniendo la salida esperada.separator=SEP espacio en blanco).2 /var/log/maillog.3 /var/log/messages. [madonna@station madonna]$ ls -l /var/log/m* | -rw------1 root root 651 Oct -rw------1 root root 31187 Oct -rw------1 root root 216885 Sep -rw------1 root root 387345 Oct -rw------1 root root 567049 Sep -rw------1 root root 644859 Sep -rw------1 root root 1260041 Sep -rw------1 root root 1581750 Sep -rw------1 root root 1993522 Sep -rw------1 root root 3172217 Oct sort -n -k5 5 05:40 /var/log/messages 5 06:05 /var/log/maillog 22 10:22 /var/log/messages.2 14 04:05 /var/log/maillog.4 28 06:22 /var/log/messages. el cual presenta parámetros de formato a nivel bajo para los controladores de disquete. En su lugar. 271 .3 5 04:05 /var/log/maillog.2 22 10:16 /var/log/maillog. eliminando los comentarios y las líneas en blanco.4 /var/log/maillog.3 5 04:07 /var/log/messages. suponga que madonna quisiera volver a examinar sus archivos de registro utilizando el formato largo del comando ls. madonna está examinando el archivo /etc/fdprm.1 /var/log/messages. se le dificulta.4 28 06:15 /var/log/maillog.1 14 04:08 /var/log/messages.2 /var/log/messages Ahora que los tamaños ya no se reportan al comienzo de la línea.1 /var/log/messages. [madonna@station madonna]$ ls -l /var/log/m* | -rw------1 root root 1260041 Sep -rw------1 root root 1581750 Sep -rw------1 root root 1993522 Sep -rw------1 root root 216885 Sep -rw------1 root root 31187 Oct -rw------1 root root 3172217 Oct -rw------1 root root 387345 Oct -rw------1 root root 567049 Sep -rw------1 root root 644859 Sep -rw------1 root root 651 Oct sort -n 14 04:05 28 06:15 22 10:16 22 10:22 5 06:05 5 04:05 5 04:07 14 04:08 28 06:22 5 05:40 /var/log/maillog.3 /var/log/maillog /var/log/maillog.

Sin embargo.[madonna@station madonna]$ grep "^[[:alnum:]]" /etc/fdprm 360/360 720 9 2 40 0 0x2A 0x02 0xDF 1200/1200 2400 15 2 80 0 0x1B 0x00 0xDF 360/720 720 9 2 40 1 0x2A 0x02 0xDF 720/720 1440 9 2 80 0 0x2A 0x02 0xDF 720/1440 1440 9 2 80 0 0x2A 0x02 0xDF 360/1200 720 9 2 40 1 0x23 0x01 0xDF 720/1200 1440 9 2 80 0 0x23 0x01 0xDF 1440/1440 2880 18 2 80 0 0x1B 0x00 0xCF 1440/1200 2880 18 2 80 0 ???? ???? ???? 1680/1440 3360 21 2 80 0 0x0C 0x00 0xCF cbm1581 1600 10 2 80 2 0x2A 0x02 0xDF 800/720 1600 10 2 80 0 0x2A 0x02 0xDF 0x50 0x54 0x50 0x50 0x50 0x50 0x50 0x6C ???? # ????? 0x6C # ????? 0x2E 0x2E Luego clasifica los datos en forma numérica utilizando la quinta columna como su tecla. [madonna@station madonna]$ grep "^[[:alnum:]]" /etc/fdprm | sort -n -k5 360/1200 720 9 2 40 1 0x23 0x01 0xDF 0x50 360/360 720 9 2 40 0 0x2A 0x02 0xDF 0x50 360/720 720 9 2 40 1 0x2A 0x02 0xDF 0x50 1200/1200 2400 15 2 80 0 0x1B 0x00 0xDF 0x54 1440/1200 2880 18 2 80 0 ???? ???? ???? ???? # ????? 1440/1440 2880 18 2 80 0 0x1B 0x00 0xCF 0x6C 1680/1440 3360 21 2 80 0 0x0C 0x00 0xCF 0x6C # ????? 720/1200 1440 9 2 80 0 0x23 0x01 0xDF 0x50 720/1440 1440 9 2 80 0 0x2A 0x02 0xDF 0x50 720/720 1440 9 2 80 0 0x2A 0x02 0xDF 0x50 800/720 1600 10 2 80 0 0x2A 0x02 0xDF 0x2E cbm1581 1600 10 2 80 2 0x2A 0x02 0xDF 0x2E La información ha sido clasificada con éxito utilizando la quinta columna. dentro de estos grupos madonna desearía clasificar la información por la tercera columna. Ella agrega una opción adicional -k al comandosort especificando la tercera columna como su tecla secundaria. [madonna@station madonna]$ grep "^[[:alnum:]]" /etc/fdprm | sort -n -k5 -k3 360/1200 720 9 2 40 1 0x23 0x01 0xDF 0x50 360/360 720 9 2 40 0 0x2A 0x02 0xDF 0x50 360/720 720 9 2 40 1 0x2A 0x02 0xDF 0x50 720/1200 1440 9 2 80 0 0x23 0x01 0xDF 0x50 720/1440 1440 9 2 80 0 0x2A 0x02 0xDF 0x50 720/720 1440 9 2 80 0 0x2A 0x02 0xDF 0x50 800/720 1600 10 2 80 0 0x2A 0x02 0xDF 0x2E cbm1581 1600 10 2 80 2 0x2A 0x02 0xDF 0x2E 1200/1200 2400 15 2 80 0 0x1B 0x00 0xDF 0x54 1440/1200 2880 18 2 80 0 ???? ???? ???? ???? # ????? 1440/1440 2880 18 2 80 0 0x1B 0x00 0xCF 0x6C 1680/1440 3360 21 2 80 0 0x0C 0x00 0xCF 0x6C # ????? 272 . con los formatos que especifican 40 pistas agrupadas en la parte superior y 80 pistas agrupadas en la parte inferior.

la tercera columna se ha utilizado para determinar el orden final. el ejemplo del archivo /etc/passwd. Resumen En resumen.Ahora que los datos han sido clasificados por la quinta columna.e. una serie de espacios o tabulaciones). En todos los ejemplos. madonna utiliza el comando sort con la opción -t para clasificar las primeras 10 líneas del archivo /etc/passwd por el directorio de inicio (el sexto campo). mediante la opción -k para especificar el campo de clasificación(quizás más de una vez) y la opción -t para especificar el delimitador del campo. [madonna@station madonna]$ head /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin news:x:9:13:news:/etc/news: Las líneas están estructuradas en siete campos cada una. los campos se separaron por un espacio en blanco (i. Un número arbitrario de teclas puede especificarse al agregar más opciones -k. está ahora en la parte superior y la usuaria mail con un directorio de inicio de /var/spool/mail. Examine. pero los campos están separados con un “:” en lugar de espacios en blanco. Para filas con columnas quintas idénticas. hemos visto que el comando sort puede utilizarse para clasificar datos estructurados. Con la opción -t se puede dar instrucciones al comando sort para utilizar algún caracter especificado (tal como “:”) para separar campos. Especificación del separador de campo Los ejemplos anteriores han demostrado cómo clasificar información con un campo especificado como una tecla de clasificación. está en la parte inferior. 273 .. [madonna@station madonna]$ head /etc/passwd | sort -t: -k6 bin:x:1:1:bin:/bin:/sbin/nologin news:x:9:13:news:/etc/news: root:x:0:0:root:/root:/bin/bash sync:x:5:0:sync:/sbin:/bin/sync halt:x:7:0:halt:/sbin:/sbin/halt daemon:x:2:2:daemon:/sbin:/sbin/nologin shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin La usuaria bin. A continuación. con un directorio de inicio de /bin.

py [madonna@station madonna]$ . Imprime en pantalla sólo las líneas duplicadas. Evita comparar los primeros campos n.6) [madonna@station madonna]$ chmod 755 three_dice. Table 1. contar o suprimir registros duplicados en la información clasificada. Ver la página de manual sort(1) para mayor información.6)+randint(1. --checkchars=n Línea prefijo con el número de sus ocurrencias. al escribir la suma de 100 funciones una por línea. El comando uniq El programa uniq se utiliza para identificar. --ignore-case -s. El comando uniq utiliza las siguientes opciones para clasificar su conducta. No compara más de n caracteres en cada línea. --skip-charsn -u. --count -d. --skip-fields=n -i. los cuales sirven para especificar posiciones de caracteres dentro de un campo o personalizar opciones de clasificación para campos individuales. necesitamos datos repetitivos en los cuales operar.py #!/usr/bin/python from random import randint for i in range(100): print randint(1. el comandouniq opera en la entrada estándar. casi siempre se utiliza junto con el comandosort. Si no se proporcionan argumentos.py > trial1 [madonna@station madonna]$ wc trial1 100 100 260 trial_run [madonna@station madonna]$ head trial1 10 10 10 13 8 8 10 10 8 6 274 . --repeated -f. Imprime sólo líneas únicas.6)+randint(1. [madonna@station madonna]$ cat three_dice. esta es la longitud de“run”. Para poder entender el comportamiento del comando uniq. El siguiente script python simula el lanzamiento de tres dados de seis caras. --unique -w.La opción -k puede recibir argumentos más sofisticados. Si se dan argumentos de línea de comandos./three_dice. Ignora mayúsculas o minúsculas Salta los primeros n caracteres. Argumentos de linea de comando para uniq -c. La usuaria madonna hace el script ejecutable y luego graba la salida en un archivo llamado trial1. delimitados por un espacio en blanco. Dado que el comando uniq sólo funciona en información ya clasificada. se interpretan como nombres de archivo para los archivo en los cuales operar.

esta vez anteponiendo el número de ocurrencias de cada entrada en el archivo. [madonna@station madonna]$ sort -n trial1 | uniq 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Sin ninguna opción el comando uniq ha suprimido entradas reduciendo los datos de 100 a sólo 15 líneas. madonna utiliza el comando uniq para reproducir su salida anterior. Puesto que sólo una combinación de dados podría producir una suma de 3 (todos unos).Reducción de datos a enteros únicos Ahora. Esto hace que el comando uniq cuente el número de ocurrencias de un registro particulars anteponiendo el resultado al registro en la salida. a excepción de 3. madonna espera que sea una ocurrencia relativamente poco frecuente. En el siguiente ejemplo. trial1 quisiera analizar la información. madonna observa que la información es razonable: la suma de cada combinación para los tres dados de seis caras es representada. [madonna@station madonna]$ sort -n trial1 | uniq -c 1 4 4 5 6 6 10 7 10 8 13 9 13 10 9 11 13 12 4 13 8 14 4 15 1 16 2 17 2 18 275 . Comienza por clasificar la información y entubar la salida a través del comando uniq. Conteo de instancias de datos Una opción particularmente conveniente para el comando uniq es -c o --count. Fácilmente.

madonna identifica las combinaciones de dados que se presentan sólo una vez. la gente está solo interesada en identificar datos únicos o repetidos.0 0 0 head -4 TTY ? ? ? STAT S SW SW START 02:05 02:05 02:05 TIME 0:04 0:00 0:00 COMMAND init [ [keventd] [kapmd] El siguiente cuadro identifica las columnas seleccionadas. [madonna@station madonna]$ sort -n trial0 | uniq -u 4 16 [madonna@station madonna]$ sort -n trial1 | uniq -d 5 6 7 8 9 10 11 12 13 14 15 17 18 Ejemplos Clasificación de la salida de ps aux La usuaria madonna está examinando los procesos que están ejecutándose en su máquina local. identifica las combinaciones repetidas al menos una vez.Como es de esperarse (al menos por un experto en estadísticas). Las opciones d y -u permiten al comando hacer justo eso.0 1380 76 root 2 0. Está familiarizada con el comando ps aux que presenta la información sobre cada proceso en ejecución. Table 1.0 0 0 root 3 0.0 0. En el primer caso.0 0. [madonna@station madonna]$ ps aux | USER PID %CPU %MEM VSZ RSS root 1 0. Columnas seleccionadas desde el comando ps aux Número columna de Título Función 276 . Identificación única o datos repetidos con uniq Algunas veces. mientras que los números intermedios se presentan en mayor cantidad.0 0. La primera columna puede sumarse hasta 100 para confirmar que el comando uniq identifique cada ocurrencia. En el segundo caso. los números más grandes y los más pequeños tienen relativamente pocas ocurrencias.

5 18248 1468 ? S 02:06 0:00 /usr/sbin/httpd Curiosamente una colección de procesos ocupa la parte superior de la lista incluyendo el servidor X y varias instancias del demonio sshd (que implementa el servicio de Secure Shell).0 0. El ID del proceso Utilización de la CPU relativa del proceso La utilización relativa de la memoria del proceso El "tamaño virtual " del proceso o cuánta memoria ha solicitado el proceso El "tamaño residente" del proceso o cuánta memoria real está consumiendo.2 9916 3140 ? S 02:06 0:00 cupsd xfs 978 0.0 0. 277 . en términos de cantidad de memoria que están solicitando.2 37828 13396 ? S 02:06 0:01 /usr/bin/gdmgreeter madonna 1844 0.0 0.0 0. Observe el uso del comando tail +2 para suprimir el encabezado de la lista de procesos.5 18320 1464 ? S 02:06 0:00 /usr/sbin/httpd apache 907 0. Se presume que estos son los procesos activos en el momento.0 0. clasificándolos en orden numérico y listándolos en orden descendente.5 18320 1464 ? S 02:06 0:00 /usr/sbin/httpd apache 905 0.6 6716 1736 ? S 03:31 0:00 /usr/sbin/sshd root 1746 0.0 0. Luego.0 0.0 0.1 2 3 4 5 6 USER PID %CPU %MEM VSZ RSS El usuario propietario del proceso.0 0. madonna clasifica la salida por la sexta columna.5 18320 1464 ? S 02:06 0:00 /usr/sbin/httpd apache 908 0. [madonna@station madonna]$ ps aux | tail +2 | sort -rn -k5 | head gdm 1074 0.5 18320 1464 ? S 02:06 0:00 /usr/sbin/httpd apache 902 0.5 4388 1472 pts/2 S 03:31 0:00 -bash root 885 0. Primero.5 18320 1464 ? S 02:06 0:00 /usr/sbin/httpd apache 906 0.7 6768 2008 ? S 03:31 0:00 /usr/sbin/sshd root 1662 0.0 0.5 18320 1464 ? S 02:06 0:00 /usr/sbin/httpd apache 904 0.6 6716 1724 ? S 03:31 0:00 /usr/sbin/sshd madonna 1752 0.5 17836 6444 ? R 02:06 0:00 /usr/X11R6/bin/X root 914 0.0 5.5 18320 1464 ? S 02:06 0:00 /usr/sbin/httpd apache 903 0. que presenta los tamaños de los procesos residentes en la memoria.2 19436 632 pts/0 S 03:42 0:00 sort -rn -k5 apache 909 0.0 0.0 5.0 0.0 0.5 18320 1468 ? S 02:06 0:00 /usr/sbin/httpd El comando gdmgreeter(que administra registros para el entorno gráfico X) y el demonio httpd (que implementa el servidor de red Apache) son los procesos más grandes en la memoria de la máquina de madonna.0 0. La usuaria madonna desearía ordenar los procesos en términos de algunos de estos parámetros. [madonna@station madonna]$ ps aux | tail +2 | sort -rn -k6 | head gdm 1074 0.0 2.0 1.0 0.9 4816 2512 ? S 02:06 0:00 xfs -droppriv elvis 1664 0.2 37828 13396 ? S 02:06 0:01 /usr/bin/gdmgreet root 1066 0.0 0. (observe también que el comando sort aparece). ordena los procesos por tamaño de memoria virtual.7 6768 2020 ? S 03:31 0:00 /usr/sbin/sshd madonna 1748 0.

Table 1.8 0. Uso de sort y uniq para recopilar información de procesos en ejecución Al seguir examinando los procesos en ejecución en su máquina. Especificadores de formato seleccionados para el comandops Tag cmd pid estado user Especifica El nombre corto del comando El ID del proceso El estado actual del proceso (R=en ejecución.0 0.0 1.3 0.0 5732 4 Queue rpc 586 0.0 0. madonna utiliza el comando ps con la opción -e.0 0. S=dormido) El usuario propietario del proceso Como algunos ejemplos al utilizar la opción -o. a excepción de tres procesos diferentes cat que parecen dividir de modo uniforme su CPU. madonna clasifica por la tercera columna.0 1572 172 root 885 0. madonna encuentra las entradas en un cuadro de especificadores de formato en la página de manual ps(1). el usuario propietario del proceso y el comando ejecutándose.cmd | head -5 PID USER CMD 1 root init [ 2 root [keventd] 3 root [kapmd] 4 root [ksoftirqd_CPU0] 278 . madonna presenta los procesos con su propio ID de proceso. la actividad relativa de laCPU. [madonna@station madonna]$ ps aux | elvis 1744 33. la cual especifica listar cada proceso y la opción -o que toma un listado de nombres en la columna como un argumento.user.0 0.0 0 0 root 894 0. [madonna@station madonna]$ ps -e -o pid.7 0.0 0.Luego.2 9916 3140 root 9 0.9 4816 2512 -droppriv smmsp 864 0.1 3408 400 zero elvis 1745 33.0 0. La opción -o le permite a madonna listar solo la información que le interesa.1 3412 400 zero xfs 978 0.0 1548 4 root 914 0.5 18248 1468 /usr/sbin/httpd tail +2 | sort -rn -k3 | head pts/1 R 03:31 6:01 cat /dev/ pts/1 pts/2 ? ? ? ? ? ? ? R R S S S S SW S S 03:31 03:32 02:06 02:06 02:05 02:06 02:05 02:06 02:06 6:00 cat /dev/ 5:45 cat /dev/ 0:00 xfs 0:00 sendmail: 0:00 0:00 0:00 0:00 0:00 portmap cupsd [bdflush] crond Su máquina no está viendo mucha actividad actual.1 3412 400 zero blondie 1826 33.

Observe de nuevo el uso del comando tail +2 para eliminar el encabezado desde la salida del comando ps. [madonna@station madonna]$ ps -e -o pid. Primero desea saber quién está ejecutando procesos en la máquina y cuántos procesos están ejecutándose. elvis. [madonna@station madonna]$ ps -e -o user | tail +2 | sort | uniq -c | sort -rn 48 root 8 apache 6 madonna 3 elvis 2 blondie 1 xfs 1 smmsp 1 rpc 1 gdm 1 daemon Ahora blondie ve con facilidad que el root y apache están ejecutando la mayor parte de los procesos (presumiblemente demonios en segundo plano). seguidos por madonna. Luego pasa la salida a través de sort y uniq -c.state| head -5 PID S 1 S 2 S 3 S 4 S Ahora que se ha familiarizado un poco con el comando ps y la opción -o. ¿Cuántos de estos proceso están ejecutándose y cuántos 279 . está lista para comenzar a hacer algunas preguntas. y blondie (presumiblemente usuarios interactivos). [madonna@station madonna]$ ps -e -o user | tail +2 | sort | uniq -c 8 apache 2 blondie 1 daemon 3 elvis 1 gdm 5 madonna 48 root 1 rpc 1 smmsp 1 xfs Ella preferiría que la salida fuera clasificada por lo tanto agrega uno o más sort al final de la tubería. listando únicamente el nombre de usuario propietario del proceso.Luego. hace un cuadro del id del proceso y el estado.

la siguiente línea de comandos listará los permisos en un archivo de notación octal.bylogin. [madonna@station madonna]$ ps -e -o state | tail +2 | sort | uniq -c | sort -rn 73 S 5 R La mayoría de los procesos en su máquina (73) están durmiendo.byfs. Como se vio en la página de manual stat(1) (o stat --help). Ejercicios en línea Lab Exercise Objetivo: Utilizar sort y uniq para administrar informacion de modo eficiente. El archivo /etc/fstab se utiliza para predefinir puntos de montaje en su sistema. Almacene la salida en el archivo recién creado ~/fstab. Clasifique el archivo /etc/passwd en orden alfabético ascendente mediante la shell de inicio 4. Tiempo estimado: 45 minutos. Clasifique el contenido del archivo en orden alfabético ascendente.byuc. El cuadro debería clasificarse en orden numérico 280 .están dormidos? Mediante un truco similar. mientras que relativamente pocos (5) están ejecutándose (lo que implica que están utilizando la CPU de modo activo). Almacene los resultados en el archivo~/modules. 2. Almacene los resultados en el archivo recién creado passwd. Clasifique el contenido de este archivo en orden numérico descendente. El comandostat utiliza la opción --format para especificar su formato de salida. El archivo /proc/modules lista los módulos cargados en el kernel junto con el tamaño del módulo (la segunda columna) y un uso de conteo actual (tercera columna). La tercera columna del archivo especifica el tipo de sistema de archivo del dispositivo que va a ser montado. ella sale con esta respuesta. con la primera para el número de veces que se presenta el modo octal especificado en la segunda columna. pero esta vez listando el estado de los procesos del usuario propietario. mediante la tercera columna como su tecla primaria. Especificaciones 1. Utilice los comandos sort y uniq para reducir esta información a un sencillo cuadro. [student@station student]$ stat --format="%a" /etc/passwd 644 Utilice el comando para listar los permisos en todos los archivos (y directorios. con el uso de conteo (tercera columna) como una tecla primaria y el tamaño de módulo (segunda columna) como su tecla secundaria. del usuario como la tecla primaria. 3. etc) en el directorio / etc/ (pero no en subdirectorios).

su cuadro debería tener una forma parecida a la siguiente (no se preocupe si los valores reales del cuadro difieren). [student@station student]$ cat etcmodes. La segunda columna del cuadro debería ser el modo octal y la primera columna el número de archivos a los cuales el modo aplica.txt que presenta los permisos octales (modos) de todos los archivos en el directorio /etc. Los cuadros deberían clasificarse en orden numérico descendente. El archivo passwd. El archivo fstab. orden numérico descendente con la tercera columna como la tecla primaria y la segunda columna como la tecla secundaria. 5. 281 . clasificada en orden numérico descendente. La línea del encabezado producida por el comando df debería eliminarse de la salida.bylogin que incluye el contenido del archivo /etc/passwd clasificado en orden alfabético ascendente con la shell de inicio del usuario como la tecla primaria. El archivo modules. El archivo etcmodes. con la primera columna como una tecla primaria. Si ha realizado los ejercicios correctamente. que al ejecutarse (sin argumentos) muestra la salida del comando df clasificado en orden numérico descendente. Deliverables A title Question 1 content_view let_ 1. La línea del encabezado generada a partir del comando df debería eliminarse de la salida. usando la tercera columna como la tecla primaria.txt 127 644 63 755 16 600 15 777 6 640 5 664 3 444 2 400 1 775 1 750 1 440 5. debería poder generar salida similar a la siguiente.txt.byfs que incluye el contenido de un archivo /etc/fstab clasificado en orden alfabético ascendente. mediante la cuarta columna como su tecla primaria. No se preocupe si sus valores actuales difieren. 4.byuc que incluye el contenido del archivo /proc/modules clasificado en 3. La cuarta columna de esta salida del comando lista la cantidad de espacio disponible en bloques. Almacene el cuadro en un archivo recién creado llamado ~/etcmodes. Elscript ejecutable ~/bin/avail. 2. utilizando el número de ocurrencias (la primera columna) como su tecla primaria. Si se ha completado correctamente. Crea un script ejecutable llamado ~/bin/avail. Cuando sea ejecutado el script debería listar las particiones disponibles (la salida del comando df). El comando df lista las particiones de disco montadas actualmente junto con uso actual del disco.descendente.

282 .

el comando cut debe llamarse con una de las siguientes opciones. Elementos N a través de M (inclusive) Desde el comienzo de la línea a través del número del elemento M (inclusive). o reunir columnas en un flujo más ancho: cut y paste. Quédese con la parte del medio que contiene las direcciones de correo-e y bote las otras dos. El comando paste fusiona dos archivos de texto por línea.Extraer y reunir texto: cut y paste Conceptos clave • • El comando cut extrae textos de archivos de texto. caracteres o campos. Table 1. Especificaciones de intervalo N NNM -M Solo el número del elemento N. Opción -b lista -c lista -f lista Efecto Extrae bytes especificados en lista Extrae caracteres especificados en lista Extrae campos especificados en lista Los argumentos de listado son en realidad una lista separada por comas de intervalos. caracteres. Todos los elementos desde el comienzo de la línea hasta el final de la línea. Elementos N a través del final de la línea. o campos se cortan. Imagine que toma una hoja de papel que lista filas de nombres. El comando cut interpreta cualquier argumento de línea de comandos como nombres de archivo en los cuales operan u opera el flujo de entrada estándar si ninguno es provisto. basados en columnas especificadas por bytes. Para especificar cuáles bytes. direcciones de correo-e y números telefónicos. "Obligatorio" Opciones para el comando cut. Table 2. exploramos dos comandos utilizados para extraer columnas de un flujo de texto. Esta es la mentalidad detrás del cut. Rasgue la página verticalmente dos veces para que cada columna sea un pedazo separado. Extracción de texto por posición de caracter con cut -c 283 . El comando cut Extracción del texto con cut El comando cut extrae columnas de texto desde un archivo de texto o flujo. Cada intervalo puede tomar una de las siguientes formas. Discussion En esta lección.

como en el siguiente ejemplo (observe el uso del comando grep para reducir primero el archivo únicamente a las líneas pertenecientes a líneas de interrupción. ohci1394 8: 1 XT-PIC rtc 10: 166 XT-PIC usb-uhci. podrían especificarse intervalos múltiples de caracteres. el resto del archivo podría ser cut. [student@rosemont student]$ cat /proc/interrupts CPU0 0: 4477340 XT-PIC timer 1: 25250 XT-PIC keyboard 2: 0 XT-PIC cascade 3: 7344 XT-PIC ehci-hcd 5: 310187 XT-PIC usb-uhci. eth1 11: 6575295 XT-PIC usb-uhci. (no se preocupe si no está familiarizado con los conceptos de un controlador de dispositivo o línea IRQ. A manera de ejemplo. la list especifica una posición de caracter en una línea de texto. 284 . el comando cut puede extraer regiones particulares de interés.Con la opción -c. donde el primer caracter es el primer caracter número 1. Si sólo la línea IRQ y los números de interrupciones fueran de interés. el archivo /proc/interrupts lista controladores de dispositivo. si únicamente los controladores de dispositivos se unen a líneas IRC de interés particulares. Audigy 12: 544632 XT-PIC PS/2 Mouse 14: 80379 XT-PIC ide0 15: 341407 XT-PIC ide1 NMI: 0 ERR: 0 Debido a que los caracteres en el archivo se formatean en columnas. eth0. la solicitud de interrupción (IRQ) a la cual se añaden y el número de interrupciones ocurridas en la línea IRQ.) [student@rosemont student]$ grep '[[:digit:]]:' /proc/interrupts 0: 4512997 1: 27954 2: 0 3: 7344 5: 312095 8: 1 10: 166 11: 6629756 12: 545523 14: 81025 15: 344239 | cut -c1-15 De forma alterna. Enfóquese en la manera como cut se utiliza para manipular la información).

¿podría utilizarse el comando cut para reorganizar el orden de la información? [student@rosemont student]$ grep '[[:digit:]]:' /proc/interrupts -c34-. En salida. Table 1.. Audigy 12: PS/2 Mouse 14: ide0 15: ide1 | cut Si las especificaciones de caracteres se invirtieran. separados por tabulaciones. Las siguientes opciones pueden utilizarse para clasificar lo que se conoce como un campo o para líneas de fuente más selectivas.1-5 0: timer 1: keyboard 2: cascade . en el mismo orden de aparición en la fuente. Extracción de campos de texto con cut -f El comando cut también sirve para extraer texto que no está estructurado por la posición de caracteres. Por ejemplo. el archivo /usr/share/hwdata/pcitable lista más de 3000 IDS de vendedores IDS de dispositivos (que pueden ensayarse desde dispositivos PCI) y los módulos de kernel y cadenas de texto que deberían asociarse con ellos.340: timer 1: keyboard 2: cascade 3: ehci-hcd 5: usb-uhci. incluso si las especificaciones de intervalos están superponiéndose o reordenanándose. ohci1394 8: rtc 10: usb-uhci.. sino por un caracter delimitador tal como un TABULADOR o “:”. El texto aparecerá sólo una vez. Opciones para cut -f Opción -d DELIM -s --delimitador de salida=CADENA DE TEXTO Efecto Utilice DELIM para separar campos en entrada en lugar del caracter por defectoTAB. eth0. 285 .[student@rosemont student]$ grep '[[:digit:]]:' /proc/interrupts -c1-5. eth1 11: usb-uhci. utilice el texto especificado por CADENA DE TEXTO en lugar del delimitador de campo. | cut La respuesta es no. No incluya líneas que no contengan el caracter delimitador (útil para eliminar comentarios y encabezados).

# If you run makeids. elimina las líneas de encabezado (que no contienen ningún TABULADOR). [student@rosemont hwdata]$ cut -s -f3. vendid. Other changes will # be lost at the next merge . Edit # it by hand to change a driver mapping. Podríamos utilizar un comando similar a cut junto con trucos aprendidos en la última lección para obtener un listado rápido de la frecuencia de aparición de cada módulo de kernel. subvendid.you have been warned. cardDescription) # or ("%d\t%d\t%d\t%d\t%s\t"%s"\n". suponga que quisiéramos obtener un listado de los módulos del kernel más referenciados en el archivo. # The format is ("%d\t%d\t%s\t"%s"\n". Observe el uso de la opción -s. moduleName. subdevid.4 pcitable | head "unknown" "Dynalink|IS64PH ISDN Adapter" "hisax" "Dynalink|IS64PH ISDN Adapter" "unknown" "Arris|CM 200E Cable Modem" "ignore" "Compaq|PCI to EISA Bridge" "ignore" "Compaq|PCI to ISA Bridge" "cciss" "Compaq|Smart Array 64xx" "unknown" "Compaq|NC7132 Gigabit Upgrade Module" "unknown" "Compaq|NC6136 Gigabit Server Adapter" "tmspci" "Compaq|Netelligent 4/16 Token Ring" "ignore" "Compaq|Triflex/Pentium Bridge. cardDescription) 0x0675 0x0675 0x09c1 0x0e11 0x0e11 0x0e11 0x1700 0x1702 0x0704 0x0001 0x0002 0x0046 "unknown" "Dynalink|IS64PH ISDN Adapter" "hisax" "Dynalink|IS64PH ISDN Adapter" "unknown" "Arris|CM 200E Cable Modem" "ignore" "Compaq|PCI to EISA Bridge" "ignore" "Compaq|PCI to ISA Bridge" "cciss" "Compaq|Smart Array 64xx" El siguiente ejemplo extrae la tercera y cuarta columna con el caracter por defecto TABULADOR para separar campos. vendid. Model 1000" Otro ejemplo. [student@rosemont hwdata]$ cut -s -f3 pcitable | sort | uniq -c | sort rn | head 1988 "unknown" 148 "ignore" 83 "aic7xxx" 70 "gdth" 37 "e100" 37 "Card:ATI Rage 128" 36 "3c59x" 24 "Card:ATI Mach64" 21 "tulip" 20 "agpgart" 286 . devid. moduleName.[student@rosemont hwdata]$ head -15 pcitable # This file is automatically generated from isys/pci. # Edit by hand to change a driver mapping.you have been warned. devid. Changes to descriptions # will be lost at the next merge . please make sure no entries are lost.

el comando wc devuelve el número de bytes contenidos en una cadena de texto. pero la segunda vez. “” se consideraría como un sólo caracter. “f” y “r”. Note Observe la nomenclatura inconsistente entrewc y cut.” Al utilizar cut -c. el comando wc no hace ninguna distinción equivalente entre caracteres y bytes.Muchas de las entradas obviamente se desconocen o se ignoran intencionalmente. pero sí vemos que el controlador SCSI aic7xxx y el controlador de tarjeta Ethernet e100 se utilizan con mucha frecuencia. Infortunadamente. Al extraer texto con la opción -b es muy parecido en espíritu al uso de -c. Extracción de texto por posición de byte con cut -b La opción -b sirve para especificar qué texto extraer por bytes. el caracter fue "cortado por la mitad" con el comando y la terminal no pudo mostrarlo correctamente. El comando paste 287 . A manera de ejemplo. Como resultado. los dos caracteres que componen el conjunto de caracteres ASCII. los dos son idénticos. son codificadas en un sólo byte. De hecho. Al utilizar la codificación UTF-8. un byte para la nueva ldos bytes para . [elvis@station elvis]$ echo f | cut -c 1-2 f [elvis@station elvis]$ echo f | cut -b 1-2 f? La primera vez. mientras que cut -c mide texto en caracteres. el comando cut contó los dos bytes utilizados para codificar “” como un caracter sencillo. se consideraron dos bytes. como en el siguiente ejemplo. considere los siguientes tres caracteres en texto alemán: fr. pero al utilizar cut -b. la opción -b difiere de -c. se codifica con dos bytes como se observa en el comando wc. “”. cuando se trabaja con un texto codificado utilizando ASCII o uno de los conjuntos de caracteres ISO 8859 (tales como Latín-1). cut -c es la forma correcta de utilizar el comando cut y cut -b solo se necesitará para situaciones técnicas. Usualmente. No obstante. Sin embargo. cuando se utilizan conjuntos de caracteres con codificación de variables de longitud tal como UTF-8 (un conjunto de caracteres estándar en el que mucha gente converge y el predeterminado en Red Hat Enterprise Linux). [elvis@station elvis]$ echo fr 5 | wc -c Tenemos un byte para cada una de las letras “f y r. “” se tendrían en cuenta dos bytes. Con wc -c.

Luego continuará con la segunda línea de cada archivo. --serial Ejemplos Manejo de registros de formato libre En el diseño de un registro de formato libre. ¿qué sucedería si pegaramos la primera a la tercera. cada línea del segundo archivo se pegue a la siguiente línea sencilla. Se espera que los campos de entrada sean separados exactamente por un caracter TABULADOR.El comando paste sirve para combinar archivos múltiples en una sola salida. Table 1. Por conveniencia. El comando paste leerá la primera línea de cada archivo. pero que ningún caracter que Descripción Reutiliza caracteres del listado de delimitadores (en lugar del caracter predeterminado TAB) Transpone el resultado para que cada línea en el primer archivo se pegue a una sola línea. La segunda línea de salida contendría las dos segundas líneas de cada archivo de entrada. el nombre de archivo . dejando un pedazo de papel listando sólo nombres y números telefónicos? Este es el concepto detrás del comando paste. el comando pastese leería desde la entrada estándar. Para este "archivo". Opciones para paste Opción -d lista -s. la primera línea de cada archivo se convertiría en la primera línea de la salida. etc. no por la posición de caracter. [student@station student]$ cat file-1 File-1 Line 1 File-1 Line 2 File-1 Line 3 [student@station student]$ cat file-2 File-2 Line 1 File-2 Line 2 File-2 Line 3 El comando paste imprimiría lo siguiente: [student@station student]$ File-1 Line 1 File-2 Line File-1 Line 2 File-2 Line File-1 Line 3 File-2 Line paste file-1 file-2 1 2 3 Si tuviéramos más de dos archivos. Después de rasgarlo en tres columnas. los elementos de registro de entrada son identificados por su posición en la línea. direcciones de correo -e y números telefónicos. El comando paste espera un conjunto de nombres de archivo como argumentos. 288 . Considere los dos archivos siguientes a manera de ejemplo. obtenido en el orden determinado en la línea de comandos. unirá el contenido de cada línea insertando un caracter TABULADOR en el medio y escribirá la línea sencilla resultante en la salida estándar. Recuerde cuando imaginamos el pedazo de papel que listaba filas de nombres.puede suministrarse en la línea de comandos.

Nuestro archivo favorito de ejemplo /etc/passwd tiene campos separados exactamente por el caracter de dos puntos (“:”)./bin/bash bin..7 /etc/passwd root:/bin/bash bin:/sbin/nologin daemon:/sbin/nologin adm:/sbin/nologin . Podemos cambiar eso con la opción --output-delimiter. [student@station student]$ cat fixed-data abc123 def456 hij789 lkm012 Podemos recortar sólo los caracteres 3 y 4 así: [student@station student]$ cut -c3-4 fixed-data c1 f4 j7 m0 Uso (y mal uso) de un espacio como delimitador 289 . El campo 1 es el nombre de cuenta y el campo 7 da el programa de shell utilizado. /etc/passwd root../sbin/nologin lp. Observe que las líneas de salida utilizan los mismos delimitadores de campo que los registros de entrada. Mediante el comando cut podemos imprimir un nuevo archivo con sólo el nombre de cuenta y el nombre de shell: [student@station student]$ cut -d: -f1. Utilice la opción -c para identificar posiciones del caracter de entrada copiados en cada línea de salida. [student@station student]$ cut -d: -f7.aparezca en los elementos de información mismos pueda utilizarse Cada ocurrencia del delimitador separa un campo./sbin/nologin daemon./sbin/nologin adm. la información se asigna a posiciones de caracteres específicos o columnas que son iguales en cada línea de entrada./sbin/nologin . Vivir con registros de formatos fijos En un registro de formato fijo...1 --output-delimiter=.

5 / ext3 /proc proc /proc/bus/usb usbdevfs /boot ext3 /dev/pts devpts /dev/shm tmpfs /misc autofs ¿Funcionaría la misma técnica para el comando df? [student@station student]$ df Filesystem 1K-blocks Used Available Use% Mounted on /dev/hda3 5131108 4502000 368456 93% / /dev/hda1 124427 26268 91735 23% /boot none 127616 0 127616 0% /dev/shm [student@station student]$ df | cut -d" " -f1. Por fortuna. Infortunadamente.pgrp=780. se presenta el quinto "campo"? En alguna parte a medio camino de las primeras dos columnas.maxproto=3) Observando que las palabras están separadas por espacios sencillos. El comando debe suplirse con la opción -d " ".mode=620) none on /dev/shm type tmpfs (rw) automount(pid780) on /misc type autofs (rw. encontraremos otras técnicas en una lección posterior para superar este inconveniente. que le pide tratar espacios como delimitadores de campo.5 Filesystem /dev/hda3 /dev/hda1 none ¿En qué parte de la salida del comando df. el comando cut puede fácilmente utilizarse para extraer fácilmente la tercera y cuarta palabra (que contiene el punto de montaje y archivos. respectivamente).gid=5.minproto=2. retorna una lista que muestra los dispositivos montados y los puntos de montaje junto con el tipo de sistema de archivos y las opciones relevantes de montaje [student@station student]$ mount /dev/hda3 on / type ext3 (rw) none on /proc type proc (rw) usbdevfs on /proc/bus/usb type usbdevfs (rw) /dev/hda1 on /boot type ext3 (rw) none on /dev/pts type devpts (rw.fd=5. [student@station student]$ mount | cut -d" " -f3. El comando cut obedientemente imprime el primer y quinto campo (vacío).El comando mount sin argumentos. esta es una limitación común del comando cut. Ejemplos de pegado 290 .

El archivo /proc/cpuinfo contiene información sobre su CPU del sistema detectado..Nuestro ejemplo inicial mostró el uso común de paste. 2. Esto puede utilizarse para proveer un delimitador diferente entre cada par de partes escritas en la salida. Utilice la combinación de los comandos grep y cut para generar un listado de un parámetro nombres hallado en este archivo uno por línea. Clasifique los nombres en orden alfabético ascendente y almacénelos en el archivo recién creado ~/initparams.txt. Almacene el resultado en el archivo recién creado ~/usershells. Especificaciones 1.txt.txt. el proceso luego se repite para las siguientes líneas. 3. Los caracteres list son reciclados si es necesario: [student@station student]$ paste -d+-/ file-1 file-2 file-1 file-2 file-1 File-1 Line 1+File-2 Line 1-File-1 Line 1/File-2 Line 1+File-1 Line 1 File-1 Line 2+File-2 Line 2-File-1 Line 2/File-2 Line 2+File-1 Line 2 File-1 Line 3+File-2 Line 3-File-1 Line 3/File-2 Line 3+File-1 Line 3 Ejercicios en línea Lab Exercise Objetivo: Utilizar cut y paste para administrar texto. Los parámetros se definen mediante la misma sintaxis utilizada por la shell bash. 4. mediante la shell de inicio como tecla primaria y el nombre de usuario como tecla secundaria. donde las primeras líneas de todos los archivos de entrada se concatenan y separan por un caracter delimitador. donde los nombres de usuario resultantes y las shells de inicio están separadas por un espacio. Tiempo Estimado: 25 minutos. Utilice el comando cut para extraer un listado de los nombres de usuario y las shells de inicio desde el archivo /etc/passwd. No incluya los valores de parámetros o “=”utilizados para separarlos ni ningún otro comentario o líneas vacías del archivo original. luego pega todas las líneas del segundo archivo de salida y así sucesivamente: [student@station student]$ paste -d: -s file-1 file-2 File-1 Line 1:File-1 Line 2:File-1 Line 3 File-2 Line 1:File-2 Line 2:File-2 Line 3 Recuerde que el argumento de la opción -d de la listade argumentos puede tomar más de un caracter. El archivo /etc/sysconfig/init sirve para definir parámetros que configuran su método de arranque de la máquina. NAME=value. no los nombres o el“:” utilizado para separar los nombres de los valores. El siguiente script puede utilizarse para imprimir una serie de 10 números aleatorios. Clasifique el listado resultante en orden alfabético ascendente. La opción -s pega todas las lineas del archivo de entrada a la primera línea de salida.e. Utilice el comando cut para extraer sólo los valores. i. Almacene el listado de valores resultante en un archivo recién creado ~/cpuvalues. 291 .

. usted debería ser capaz de generar una salida similar a la siguiente. que contenga las palabras run1. trial3trial4 y trial5. etc. No se preocupe si algunos de los valores difieren.. trial1. en ese orden. do echo $RANDOM done 5.. run2. 292 . dentro de un archivo llamado trials. trial2. ~/trial3. Cree un archivo llamado titles. Ejecute el script 5 veces por separado. una por línea en cada una de las diez líneas. ~/trial2. cada vez registrando el tiempo de salida en el archivo llamado ~/trial1. Utilice el caracter TABULADOR predeterminado para separar las columnas. Utilice el comando paste para combinar los archivos llamados titles. Si ha completado el ejercicio de laboratorio correctamente.#!/bin/bash for i in $(seq 10). Cree el script en un archivo de su escogencia y haga que el archivo sea ejecutable. run10.

[student@station student]$ head -4 usershells. separado por un espacio.txt initparams.txt.txt titles trial[15] trials ==> usershells.txt <== news alice /bin/bash apache /bin/bash arnold /bin/bash ==> cpuvalues. uno por línea.txt. Las líneas deberían clasificarse en orden alfabético ascendente.txt <== 0 GenuineIntel 6 8 ==> initparams. El archivo cpuvalues. Los valores deberían aparecer en el mismo orden de aparición en el 2. El archivo usershells.txt <== BOOTUP LOGLEVEL MOVE_TO_COL PROMPT ==> titles <== run1 run2 run3 run4 ==> trial1 <== 9739 9089 6712 25993 ==> trial5 <== 32029 1474 8347 31709 ==> trials <== run1 9739 run2 9089 run3 6712 run4 25993 27486 27496 7089 12188 12465 13136 7467 31152 14282 15835 7969 12746 32029 1474 8347 31709 Deliverables A title Question 1 content_view let_ 1. que contiene un listado de todos los usuarios y shells de inicio definido en el archivo /etc/passwd. que lista los valores para parámetros buscados en el archivo /proc/ cpuinfo. mediante las shells de inicio como la tecla primaria y los nombres de usuario como la tecla secundaria.txt cpuvalues. 293 .

~/trial5 que listan 10 números enteros 5. run2... que contiene las 10 palabras run1.txt que contiene un listado en orden alfabético ascendente del parámetro nombres hallado en el archivo /etc/sysconfig/init.. 4. trial1. trial5 pegados en un sólo archivo mediante el comando paste. Cinco archivos llamados ~/trial1. 294 . uno por línea. ~/trial2. run10. El archivo initparams. . El archivo trials.archivo /proc/cpuinfo. 3. que incluye el contenido de seis archivos titles. El archivo ~/titles. . .. aleatorios. una palabra por línea. 6...

la documentación por lo general sacrifica la corrección de la ortografía o gramática por tiempo como se demuestra en el siguiente archivo README. El comando más importante es el comando patch. 17. El comando diff -r resume de modo recursivo las diferencias entre los dos directorios.pam_ftp.Rastreo de diferencias: diff Conceptos clave • • • • • El comando diff resume las diferencias entre dos archivos. Al comando diff se le puede pedir que ignore ciertos tipos de diferencias tales como el uso de espacios en blanco o de mayúsculas. James Anderson <james@anderson. se le puede pedir al comando diff que ignore los archivos cuyos nombres de archivo coincidan con patrones especificados. También las utilidades con el comando diff. primero al corregir las palabres mal escritas y en segundo añadiendo una línea 295 . blondie se dispone a aplicar cambios. El más comun es el formato unificado. June 1999 Observe que las palabras addressy addresses están mal escritas. En la comunidad de código abierto. Al comparar directorios. scripts de shell o código fuente C .us>. el archivo puede actualizarse de modo automático. Recognized arguments: "debug" "users=" "ignore" print comma could allow debug messages separated list of users which login only with email adress invalid email adresses Options for: auth: for authentication it provides pam_authenticate() and pam_setcred() hooks. El comando diff es compatible con una gran variedad de formatos de salida que pueden escogerse mediante varias opciones. El comando diff es más utilizado para rastrear cambios a archivos de texto tales como informes. Primero presentamos el comando diff por medio de un ejemplo. pero no idénticos y que generen salida que describa exactamente la diferencia.pam_ftp This is the README for pam_ftp -----------------------------This module is an authentication module that does simple ftp authentication. páginas web. [blondie@station blondie]$ cat README. para que la versión dada de un archivo y la salida del comando diff comparándolo con otra versión. Discussion El comando diff El comando diff está diseñado para comparar dos archivos similares.

Con el tiempo. Al examinar la salida anterior uno puede imaginarse el editor ed siendo requerido para c ambiar las líneas 11 y 12 y añadir una línea después de la línea 18. La solución es un contexto sensible a diff.registrando sus revisiones.orig.pam_ftp 11. Formatos de salida para el comando diff El comando diff fue concebido en los primeros días de la comunidad Unix. como en "Aquí está la diferencia entre los dos archivos". A continuación se listan los formatos diff más utilizados. Para preservar la compatibilidad de segundo plano. ¿Qué sucedería si los cambios se aplicaran dos veces? El editor de comando ed haría los cambios corrompiendo el contenido del archivo. En lugar de transferir una nueva versión del archivo.orig README. diff"estándar" En un principio. el cual raras veces se utiliza hoy en día. Contexto diff (diff -c) El comando diff sensible al contexto se genera al especificar las opciones -c o -C N. pronto se tuvieron que hacer algunas mejoras. No obstante.) Analice el siguiente ejemplo.pam_ftp README.pam_ftp.pam_ftp.12 < could login only with email adress < "ignore" allow invalid email adresses --> could login only with email address > "ignore" allow invalid email addresses 18a19 > Spelling corrections applied by blondie. Hace una copia del archivo añadiendo la extensión . el comando diff se utilizaba para preservar el ancho de banda de las conexiones de red lentas. Luego hace sus modificaciones.12c11. se transfería un resumen de revisiones. se han hecho mejoras en la manera que diff anota los cambios. 22 Sep 2003 Sin ir aún dentro de mucho detalle sobre la sintaxis de diff. 296 . todavía están disponibles formatos más antiguos.orig [blondie@station blondie]$ nano README. [blondie@station blondie]$ diff README.pam_ftp Ahora utiliza el comando diff para comparar las dos revisiones del archivo. [blondie@station blondie]$ cp README. El resumen estaba en un formato de fácil reconocimiento por el editor de la línea de comando ed. vemos que el comando ha identificado las diferencias entre los dos archivos ejemplificando la esencia del comando diff. (la segunda forma se utiliza para especificar que exactamente N líneas del contexto deberían ser generadas. El comando diff es tan utilizado que su salida a menudo se refiere como un sustantivo.

pam_ftp.pam_ftp. Los cambios son anotados al utilizar un “!” para marcar líneas que se han cambiado.[blondie@station blondie]$ diff -c README.orig 2003-10-07 15:30:05. 17.us>. las utilidades detectan automáticamente cuando un administrador trata de actualizar un archivo dos veces. June 1999 --. creando una salida más compacta y podría decirse. 17.000000000 -0400 *************** *** 8. más legible. 22 Sep 2003 Es obvio que. Comando diff unificado (diff -u) El comando unificado diff se genera al especificar las opciones -u o -U N (la segunda forma se utiliza para especificar las N líneas exactas de contexto que deberían generarse).pam_ftp 2003-10-07 15:30:17. James Anderson <james@anderson. En lugar de duplicar las líneas de contexto.19 ---"debug" "users=" "ignore" print comma could allow debug messages separated list of users which login only with email address invalid email addresses ! ! Options for: auth: for authentication it provides pam_authenticate() and pam_setcred() hooks.18 **** "debug" "users=" "ignore" print comma could allow debug messages separated list of users which login only with email adress invalid email adresses ! ! Options for: auth: for authentication it provides pam_authenticate() and pam_setcred() hooks. “+” para marcar líneas que se han añadido y “-” para marcar líneas que se han suprimido. el contexto diff incluye varias líneas alrededor antes de identificar cambios. Al utilizar un contenidodiff.orig README.8.000000000 -0400 --.pam_ftp *** README.us>. 297 .README. el comando unificado diff intenta registrar todos los cambios en una estanza. June 1999 + Spelling corrections applied by blondie. James Anderson <james@anderson.

clasifica lo que la salida debería formatear en las 80 columnas con -W80. James Anderson <james@anderson.orig 2003-10-07 15:30:05.[blondie@station blondie]$ diff -u README. Recognized arguments: "debug" "users=" "ignore" print comma could allow debug m separat login o | invalid | This module is an authentication modu authentication. June 1999 +Spelling corrections applied by blondie. James Anderson <james@anderson.000000000 -0400 @@ -8.pam_ftp. 1 Options for: auth: for authentication it provide pam_setcred() hooks. El siguiente ejemplo pide un diff"lado a lado" mediante la opción -y y más adelante.pam_ftp This is the README for pam_ftp This is the README for pam_ftp ----------------------------------------------------------This module is an authentication modu authentication. James Anderson <james@anderson.11 +8. las dos versiones del archivo se muestran diff lado a lado.pam_ftp --. el formato "lado a lado" está diseñado para ser leído por humanos. En contraste. Como su nombre lo indica. Recognized arguments: "debug" "users=" "ignore" print comma could allow debug m separat login o invalid Options for: auth: for authentication it provide pam_setcred() hooks.us>.pam_ftp 2003-10-07 15:30:17.orig README. 1 > Spelling corrections applied by blond 298 . el comando unificadodiff anota que la versión original debería borrarse y que debería agregarse la nueva versión.12 @@ "debug" "users=" "ignore" "ignore" print comma could allow could allow debug messages separated list of users which login only with email adress invalid email adresses login only with email address invalid email addresses + + Options for: auth: for authentication it provides pam_authenticate() and pam_setcred() hooks.pam_ftp. diff lado a lado (diff -y) Se supone que los tres formatos anteriores eran fáciles de leer por alguna otra utilidad tal como el editor -W80 o la utilidad patch.pam_ftp.README. 22 Sep 2003 En lugar de identificar una línea como "cambiada".us>.us>.000000000 -0400 +++ README.orig README. con anotaciones en el medio que ayudan a identificar cambios. 17. [blondie@station blondie]$ diff -y -W80 README.

archivo y otro al-archivo (o en otras palabras. Cómo diff interpreta argumentos El comando diff espera ser llamado con dos argumentos.orig README. La salida del comando diff describe lo que se debe hacer al desde-archivo para crear el al-archivo.orig and README. Table 1. --side-byside -W. --width=N --left-column -q. --brief Efecto Generar el contexto de formato sensible Generar un formato de contexto sensible mediante N líneas de contexto. con el fin de corregir un error o agregar una característica. diff silecioso (diff -q) El comando diff silecioso apenas informa si dos archivos difieren. Sólo utilizadas con -c o -u. Solo reporta si los archivos difieren. Otro formato para especificar líneas de contexto N. Generar el formato unificado Generar el formato unificado mediante contexto de líneas. uno desde. --context[=N] -u -U. ¿Qué formato es el correcto? La respuesta depende de las preferencias del generador "diff" o de las expectativas de quien pueda estar recibiendo el "diff". si se especifican.pam_ftp. no la naturaleza de las diferencias. un archivoviejo y un archivonuevo). [blondie@station blondie]$ diff -q README. si se especifican. no los detalles de la diferencia. También existen otros formatos de salida menos utilizados. Aunque esto está más allá del alcance de este curso es incluído para beneficio de aquellos familiarizados con el preprocesadorcpp C. En este contexto. Éste permite ya sea a la versión original como al la nueva ser incluidas al definir la etiqueta especificada.Aunque la salida sería más efectiva utilizando una terminal ancha. Generar el formato lado a lado Usa las columnas Nal generar el formato lado a lado Imprime sólo la columna izquierda cuando usa el formato lado a lado.pam_ftp. casi siempre se prefiere el formato unificado diff.pam_ftp differ if-then-else Macro diff (diff -D etiqueta) Este formato genera diferencias mediante una sintaxis reconocida por el pre-procesador cpp. --unified[=N] -N -y. ofrece una idea intuitiva para las diferencias entre los dos archivos. Opciones para especificar el formato de salida diff Opción -c -C. El comando diff sirve para comunicar sugerencias a la comunidad de código abierto sobre cambios al código abierto de algún programa. 299 . El siguiente cuadro resume algunas de las opciones que pueden utilizarse para especificar el formato de salida para el comando diff.pam_ftp Files README.

se agregó una línea extra (vacía) a la parte inferior. Ignora cambios que insertan o borran líneas coincidentes con el argumento obligatorio regex. --ignore-all-space -B.txt ==================== ==== This Month ==== ==================== September 2003 Su Mo 1 7 8 14 15 21 22 28 29 Tu 2 9 16 23 30 We 3 10 17 24 Th 4 11 18 25 Fr 5 12 19 26 Sa 6 13 20 27 El archivo cal_edited. Como un ejemplo. El siguiente cuadro resume las opciones.e..txt difiere en dos respectos. Las opciones que especifican la problemática de diff Opción -b. Si ambos son directorios. el nombre de archivo especial“-” hará que el comando diff lea desde la entrada estándar en lugar de un archivo regular. --ignore-blank-lines -i. el comando diff rastreará de modo exhaustivo todas las diferencias entre los dos archivos. Para que la personalización de diff sea menos problemática Si no se le ha pedido lo contrario. Un comando diff "ordinario" reconoce todos estos cambios. Adicionalmente. Table 1. Varias líneas de comando pueden utilizarse para hacer que el comando diff tenga una conducta más relajada. Ignora el uso de mayúsculas (i. el comando diff buscará un archivo con el mismo nombre en el directorio especificado. pero no buscará de modo recursivo en los subdirectorios (a menos que la opción -r sea especificada. --ignore-case -I. Segundo. [blondie@station blondie]$ cat cal. Ignora el espacio en blanco al comparar líneas. Primero se agregó un encabezado de cuarta línea en la parte superior. -w. 300 . considere los siguientes dos archivos. considere caracteres equivalentes a las mayúsculas y minúsculas). --ignore-matchinglines=regex Efecto Ignora el espacio en blanco al comparar líneas. ver abajo).txt September 2003 Su Mo Tu We Th Fr Sa 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 [blondie@station blondie]$ cat cal_edited. el comando diff comparará archivos en ambos directorios.Si uno de los nombres de archivo se refiere a un archivo regular y el otro a un directorio.

[blondie@station blondie]$ diff cal.txt cal_edited.txt 0a1,4 > ==================== > ==== This Month ==== > ==================== > 9a14 >

Con la opción -B, sin embargo, el comando diff ignora la línea nueva, vacía en la parte inferior. .[blondie@station blondie]$ diff -B cal.txt cal_edited.txt 0a1,4 > ==================== > ==== This Month ==== > ==================== >

Con la opción -I se puede pedirle al comando diff ignorar las líneas que comienzan por “=”. [blondie@station blondie]$ diff -B -I "^=" cal.txt cal_edited.txt

Modo recursivo de diff El comando diff puede actuar de modo recursivo, bajando dos árboles de directorio siimilares y anotando las diferencias. El siguiente cuadro lista las opciones importantes para la conducta recursiva de diff. Table 1. Opciones para utilizar diff de modo recursivo Opción -r, --recursive -x, --exclude=patrón -X, --excludefrom=file Efecto Al comparar directorios, busque también de modo recursivo a través de subdirectorios. Al comparar directorios de modo recursivo, omita los nombres de archivo coincidentes patrón. Al comparar directorio de modo recursivo, omita los nombres de archivos coincidentes con patrones especificados en file.

A manera de ejemplo, blondie está examinando dos versiones de un proyecto llamado vreader. El proyecto involucra scripts Python que convierten la información de calendario del formato vcal a un formato XML. Ella ha descargado dos versiones de un proyecto, vreader-1.2.tar.gz y vreader-1.3.tar.gz y ha expandido cada uno de los archivos en su directorio de inicio local. [blondie@station blondie]$ ls vreader-1.2 vreader-1.2.tar.gz

vreader-1.3

vreader-1.3.tar.gz

Los directorios vreader-1.2 y vreader-1.3 tienen la siguiente estructura.

301

vreader-1.2/ |-- addressbook.vcard |-- calendar.ics |-- conv_db.py |-- conv_db.pyc |-- datebook.xml |-- templates/ | `-- datebook.xml `-- vreader.py vreader-1.3/ |-- addressbook.vcard |-- calendar.ics |-- conv_db.py |-- conv_db.pyc |-- datebook.out.xml |-- datebook.xml |-- templates/ | `-- datebook.xml `-- vreader.py

Para resumir las diferencias entre las dos versiones, ella ejecuta diff de modo recursivo en los dos directorios. [blondie@station blondie]$ diff -r vreader-1.[23] Binary files vreader-1.2/conv_db.pyc and vreader-1.3/conv_db.pyc differ Only in vreader-1.3: datebook.out.xml diff -r vreader-1.2/templates/datebook.xml vreader-1.3/templates/datebook.xml 15a16 > <event description="Linux users 331 dabney" categories="" uid="-1010079065" start="873246600" end="873248400" /> diff -r vreader-1.2/vreader.py vreader-1.3/vreader.py 6a7 > time_offset = 0 # in hours 348c349 < return utime --> return utime + time_offset*3600

El comando diff busca de modo recursivo a través de los dos directorios y observa las siguientes diferencias.

1. Los dos archivos binarios vreader-1.2/conv_db.pyc y vreader-1.3/conv_db.pyc difieren.
Puesto que no son archivos de texto, el comando no intenta anotar las diferencias.

2. El archivo complementario a vreader-1.3/datebook.out.xml no se halla en el directorio
vreader-1.2.

3. Los archivos vreader-1.2/templates/datebook.xml y vreader-1.3/templates/datebook.xml 4.
difieren y diff anota los cambios. Los archivos vreader-1.2/vreader.py y vreader-1.3/vreader.py difieren y diff anota los cambios.

302

A menudo, cuando comparamos los árboles de directorio más complicados se espera que haya archivos que cambien y otros que no. Por ejemplo, el archivo conv_db.pyc es código Python compilado, automáticamente generado desde el archivo del guión de texto Python conv_db.py. Dado que blondie no está interesada en las diferencias entre las versiones compiladas del archivo, utiliza la opción de línea de comando -x para excluir las comparaciones de la forma de archivo. Del mismo modo, no está interesada en los archivos terminados en -x, así que los especifica con una opción adicional-x. [blondie@station blondie]$ diff -r -x "*.pyc" -x "*.xml" vreader-1.[23] diff -r -x '*.pyc' -x '*.xml' vreader-1.2/vreader.py vreader-1.3/vreader.py 6a7 > time_offset = 0 # in hours 348c349 < return utime --> return utime + time_offset*3600

Ahora que la salida del comando diff está limitada sólo por el archivo vreader-1.2/vreader.py y su complemento en vreader-1.3. Como una alternativa para listar los patrones de archivos a excluir en la línea de comandos, los patrones pueden recopilarse en un simple archivo de texto que se especifica en su lugar, mediante la opción -X. En el siguiente ejemplo blondie ha creado y utiliza tal archivo. [blondie@station blondie]$ cat diff_excludes.txt *.pyc *.xml *.py [blondie@station blondie]$ diff -r -X diff_excludes.txt vreader-1.[23]

Dado que blondie incluyó *.py en su lista de patrones de archivo para excluir, el comando diff se abandona sin nada qué decir. Ejemplos Uso de diff para examinar archivos nuevos de configuración Después de actualizar su paquete RPM sendmail, blondie observa que tiene un nuevo archivo de configuración en su directorio/etc/mail, sendmail.cf.rpmnew. A ella le gustaría ver cómo se compara este archivo con su archivo de configuración ya existente, /etc/mail/sendmail.cf. Utiliza diff para resumir las diferencias.

303

[blondie@station blondie]$ diff /etc/mail/sendmail.cf /etc/mail/sendmail.cf.rpmnew 19,21c19,21 < ##### built by root@station.example.com on Tue Apr 1 15:09:38 EST 2003 < ##### in /etc/mail < ##### using /usr/share/sendmail-cf/ as configuration include directory --> ##### built by bhcompile@daffy.perf.redhat.com on Wed Sep 17 14:45:22 EDT 2003 > ##### in /usr/src/build/308253-i386/BUILD/sendmail-8.12.8/cf/cf > ##### using ../ as configuration include directory 40d39 < 101c100 < DSnimbus.example.com --> DS

Está satisfecha con la nueva versión del archivo de configuración que difiere únicamente en algunas de las líneas de comentarios y en la falta de una configuración local que ha agregado a su nueva versión.

Uso de diff para examinar cambios recientes a /etc/passwd El administrador de sistemas de una máquina ha notado que la utilidad useradd crea una copia de seguridad del archivo /etc/passwd cada vez que le hace un cambio, llamado /etc/passwd-. Como usuaria root, ella desearía ver el cambio más reciente al archivo /etc/passwd. [root@station root]# diff /etc/passwd- /etc/passwd 68a69 > desktop:x:80:80:desktop:/var/lib/menu/kde:/sbin/nologin

Aparentemente, un nuevo usuario de sistema se ha agregado reciéntemente, probablemente como resultado de agregar nuevo software mediante un archivo de paquete RPM. Creación de un parche Después de descargar el archivo vreader-1.3.tar.gz y de expandir su contenido, blondie decide que pudo mejorar en el proyecto y le gustaría hacer cambios al archivo vreader.py. Primero hace una copia "pristina" de la fuente (la versión que desempacó del archivo distribuído) y luego modifica su copia del archivo. [blondie@station blondie]$ tar xzf vreader-1.3.tar.gz [blondie@station blondie]$ cp -a vreader-1.3 vreader-1.3.local [blondie@station blondie]$ nano vreader-1.3.local/vreader.py

304

Una vez editada su copia del archivo, quisiera enviar los cambios al coordinador de cambios al proyecto vreader. En la comunidad de código abierto, esta persona se conoce como el encargado del proyecto. En lugar de enviar una copia entera de la versión. ella graba las diferencias entre su versión y el original en un archivo llamado vreader-1.3.blondie.patch. [blondie@station blondie]$ diff -ru vreader-1.3 vreader-1.3.local > vreader-1.3.blondie.patch

Ahora envía por correo-e el archivo de corrección al encargado del proyecto, quien puede fácilmente utilizar un comando llamado patch para aplicar los cambios a una versión original. [blondie@station blondie]$ mail -s "my changes" maintainer@patch.org < vreader-1.3.blondie.patch

Ejercicios en línea Lab Exercise Objetivo: Utilizar el comando diff para rastrear cambios en los archivos. Estimated Time: 10 mins. Especificaciones

1. Utilice

2.

el comando diff para anotar la diferencia entre los archivos /usr/share/doc/pinfo-0*/COPYING y /usr/share/doc/mtools-3*/COPYING, utilizando el formato de contexto sensible. Registre la salida en el archivo recién creado ~/COPYING.diff. Al especificar los nombres de archivo en la línea de comandos, liste primero el archivo pinfo y utilice una referencia absoluta para los dos. Cree una copia local del directorio /usr/share/gedit-2, utilizando el siguiente comando (en su directorio de inicio).

[student@station student]$ cp -a /usr/share/gedit-2 .

3. Para su copia local del directorio gedit-2, haga los siguientes cambios.
1. Suprima los dos archivos. con un contenido arbitrario. Usando el editor de texto, borre las tres líneas de cualquier archivo en el directorio gedit-2/taglist.

2. Cree un archivo llamado arbitrariamente en algún lugar bajo el directorio gedit-2 3.

Cuando haya terminado, genere de modo recursivo un "diff" entre /usr/share/gedit-2 y su copia, gedit-2. Registre la salida en un archivo recién creado ~/gedit.diff. Cuando especifique los directorios en la línea de comandos especifique primero una copia original y utilice una referencia absoluta para los dos. No modifique el contenido de su gedit-2 a menos que usted también reconstruya su archivo ~/gedit.diff. Deliverables A title Question 1
content_view let_

1. El archivo ~/COPYING.diff que contiene un contexto sensible "diff" de los archivos
/usr/share/doc/pinfo*/COPYING y /usr/share/doc/mtools*/COPYING, donde la versión del archivo pinfo se utiliza como el original y cada archivo se especifica mediante una

305

referencia absoluta.

2. El archivo ~/gedit.diff que contiene un "diff" recursivo de los directorios /usr/share/gedit-2
y~/gedit-2. Ambos directorios deberían especificarse mediante referencias absolutas y el directorio de sistema debería utilizarse como el original.

306

Traducción de texto: tr Conceptos clave • • • • El comando tr traduce lectura de datos desde la entrada estándar. En su forma más básica, el comando tr realiza sustituciones byte por byte. Al utilizar la opción -d, el comando tr borrará caracteres especificados desde un flujo. Al utilizar la opción -s se comprimirá una serie de caracteres repetidos en un flujo a una sola instancia del caracter.

Discussion El comando tr El comando tr es una utilidad muy versátil que realiza traducciones de caracter en flujos. Traducir puede suponer sustituir un caracter por otro, borrar caracteres o "comprimirlos" (contrayendo secuencias repetidas de un caracter en uno). Cada uno de estos usos será descrito en las siguientes secciones. A diferencia de los comandos anteriores en esta sección, el comando tr no espera nombres de archivo como argumentos. En su lugar, el comando tr opera exclusivamente en el flujo de entrada estándar, reservando los argumentos de línea de comandos para especificar conversiones. El siguiente cuadro especifica varias formas de invocar el comando tr. Table 1. Sintaxis de invocación para el comando tr Sintaxis tr SET1 SET2 tr -d CONJUNTO tr -s CONJUNTO tr -s SET1 SET2 tr -ds SET2 SET1 Efecto Substituye los caracteres especificados en SET2 complementarios especificados en SET1. Borra todos los caracteres especificados en CONJUNTO.

para

los

caracteres

Comprime todos los caracteres especificados en CONJUNTO. Primero, sustituya todos los caracteres hallados en SET2 por los caracteres complementarios en SET1 luego, comprima todos los caracteres encontrados en SET2. Primero borre todos los caracteres hallados en SET1, luego comprima todos los caracteres en SET2.

Especificación de caracter Como el cuadro anterior lo ilustra, el comando tr hace uso extensivo de caracteres definidos en conjuntos. La sintaxis para definir un intervalo de caracteres basados en el especificador de intervalo hallado en expresiones regulares. Las siguientes expresiones pueden utilizarse al especificar caracteres. Table 1. Especificación de caracteres para el comandotr Sintaxis Caracter(es)

307

literal \n \r \t \\ [A-Z] [:alnum:] [:alpha:] [:blank:] [:digit:] [:lower:] [:print:] [:punct:] [:space:] [:upper:]

La mayoría de los caracteres coinciden con una traducción literal de ellos mismos. El caracter de nueva línea. El caracter de entrada. El caracter de tabulación (horizontal). El caracter \ . El intervalo de caracteres delimitados por los caracteres especificados. Depreciado, porque el orden en que se determina el intervalo depende del conjunto de caracteres utilizados para codificar la información. Todas las letras y dígitos. Todas las letras. Todos los espacios horizontales en blanco. Todos los dígitos. Todos los caracteres en minúsculas. Todos los caracteres imprimibles. Todos los caracteres de puntuación. Todos los espacios horizontales o verticales en blanco. Todos los caracteres en mayúsculas.

El cuadro no presenta una lista completa. Para mayor información, consulte la página de manual tr(1) o tr --help. Uso de tr para traducir caracteres A menos que se haya solicitado lo contrario (mediante opciones), el comando espera ser llamado con dos argumentos, cada uno de los cuales especifica un intervalo de caracteres. Para cada uno de los caracteres especificados en el primer conjunto, lo sustituirá el caracter encontrado en la misma posición en el segundo conjunto. Considere el siguiente ejemplo trivial. [madonna@rosemont madonna]$ echo "abcdefghi" | tr fed xyz abczyxghi

Observe que en la salida, el caracter “d” es remplazado por el caracter “z”, “e” es remplazado por el caracter “y”, y “f” es remplazado por el caracter “x”. El orden de los conjuntos es importante. La tercera letra del primer conjunto es remplazada por la tercera letra del segundo conjunto. ¿Qué sucede si las longitudes de los dos conjuntos son desiguales? El segundo conjunto se extiende a la longitud del primer conjunto al copiar el último caracter. [madonna@rosemont madonna]$ echo "abcdefghi" | tr fed xy abcyyxghi

Un ejemplo clásico del comando es traducir todo el texto en letras mayúsculas o todo en minúsculas. La sintaxis de la "vieja escuela" para dicha traducción utilizaría intervalos de caracter.

308

[madonna@rosemont madonna]$ cat /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost rha-server 192.168.0.254 rosemont.example.com rosemont 192.168.0.51 hedwig.example.com hedwig h 192.168.129.201 z [madonna@rosemont madonna]$ tr a-z A-Z < /etc/hosts # DO NOT REMOVE THE FOLLOWING LINE, OR VARIOUS PROGRAMS # THAT REQUIRE NETWORK FUNCTIONALITY WILL FAIL. 127.0.0.1 LOCALHOST.LOCALDOMAIN LOCALHOST RHA-SERVER 192.168.0.254 ROSEMONT.EXAMPLE.COM ROSEMONT 192.168.0.51 HEDWIG.EXAMPLE.COM HEDWIG H 192.168.129.201 Z

No obstante, como se mencionó en la lección sobre expresiones regulares, las especificaciones de intervalo pueden producir resultados impares cuando se consideran varios conjuntos de caracteres. El método de la "nueva escuela" es utilizar clases de caracteres. [madonna@rosemont madonna]$ tr '[:lower:]' '[:upper:]' < /etc/hosts # DO NOT REMOVE THE FOLLOWING LINE, OR VARIOUS PROGRAMS # THAT REQUIRE NETWORK FUNCTIONALITY WILL FAIL. 127.0.0.1 LOCALHOST.LOCALDOMAIN LOCALHOST RHA-SERVER 192.168.0.254 ROSEMONT.EXAMPLE.COM ROSEMONT 192.168.0.51 HEDWIG.EXAMPLE.COM HEDWIG H 192.168.129.201 Z

Si recordamos que el orden de intervalos de caracteres es importante para el comando tr, las clases de caracteres necesitarían generar consistentemente intervalos ordenados. Únicamente las clases de caracter [:minúscula:] y [:mayúscula:] están garantizadas para hacerlo, lo que implica que son las únicas clases apropiadas cuando se utiliza tr para la traducción de caracteres. Uso de tr para borrar caracteres Cuando se invoca con la opción -d, el comando tr adopta una conducta radical diferente. El comando tr ahora espera un único argumento (opuesto a dos, arriba), el cual establece otra vez una serie de caracteres. El comando tr filtrará entonces el flujo de entrada estándar, borrando cada uno de los caracteres especificados, escribiéndolo en la salida estándar. Considere el siguiente par de ejemplos. [madonna@station madonna]$ echo abcdefghi | tr -d def abcghi [madonna@station madonna]$ echo 'hark, I hear an elephant!' | tr -d [:upper:][:punct:] hark hear an elephant

En el primer caso, se borraron los caracteres literales especificados “d”, “e” y “f”. En el segundo caso, fueron borrados todos los caracteres pertenecientes a las clases de caracteres [:punct:] o [:upper:].

309

Uso de tr para comprimir caracteres Al utilizar la opción -s, el comando tr puede utilizarse para comprimir un conjunto continuo de caracteres en un caracter sencillo. Si es llamado sin argumentos el comando tr simplemente comprimirá el conjunto específico de caracteres como en el siguiente ejemplo. [madonna@station madonna]$ echo "aaabbbcccdddeeefffggg" | tr -s bcf aaabcdddeeefggg

Si se llama con la opción de línea de comando -s y dos argumentos, el comando tr realizará sustituciones (como si -s no se hubiera especificado), pero comprime los caracteres del segundo conjunto. [madonna@station madonna]$ echo "aaabbbcccdddeeefffggg" | tr -s bcf xye aaaxydddeggg

Observe que esto es en esencia los mismo que realizar la operación dos por separado. [madonna@station madonna]$ echo "aaabbbcccdddeeefffggg" | tr bcf xye aaaxxxyyydddeeeeeeggg [madonna@station madonna]$ echo "aaabbbcccdddeeefffggg" | tr bcf xye | tr -s xye aaaxydddeggg

Por último, el comando tr se puede llamar con las opciones -s y -d. En este caso, el comando tr espera dos argumentos. El comando tr borrará el primer conjunto de caracteres y luego comprimirá el segundo conjunto. [madonna@station madonna]$ echo "aaabbbcccaaadddeeefffggg" | tr -ds bcf ae adddeggg

Observe el orden de operaciones cuidadosamente. Este comando es esencialmente el mismo que un suprimir (tr -d seguido por un comprimir (tr -s). [madonna@station madonna]$ echo "aaabbbcccaaadddeeefffggg" | tr -d bcf aaaaaadddeeeggg [madonna@station madonna]$ echo "aaabbbcccaaadddeeefffggg" | tr -d bcf ae adddeggg

| tr -s

Conjuntos complementarios Aparte de -s y -d, hay dos opciones que modifican la conducta de tr, presentadas a continuación. Table 1. Opciones para el comando tr Opción Efecto

310

-c, --complement -t, --truncateset1

Complemento SET1 antes de operar (i.e., uso del conjunto de caracteres excluídos por SET1) Trunca la longitud de SET1 a la de SET2 antes de operar.

Como un ejemplo rápido de la opción -c, el siguiente borra desde la entrada estándar cada caracter que no sea vocal o espacio en blanco. [madonna@station madonna]$ echo aaabbbcccdddeee | tr -cd 'aeiouAEIOU[:space:]' aaaeee

Nuestra advertencia final: ¡evite el archivo comodín! Una nota final antes de dejar nuestras “aes” y “es” y dirigirnos a ejemplos más prácticos. En algunos de los ejemplos anteriores, madonna tuvo el cuidado de proteger expresiones tales como [:punct:] con comillas sencillas, pero en algunas veces no lo fue. Cuando no las protegió, tuvo suerte. Considere la siguiente secuencia. [madonna@station madonna]$ echo 'hark, I hear an elephant!' | tr -d [:punct:] hark I hear an elephant [madonna@station madonna]$ touch n [madonna@station madonna]$ echo 'hark, I hear an elephant!' | tr -d [:punct:] hark, I hear a elephat!

¿Por qué razón madonna obtuvo dos resultados muy diferentes de la misma línea de comando? Si no sabe la respuesta, e incluso si la sabe, debería proteger argumentos al comando tr con comillas. Ejemplos Uso de tr para limpiar el comando df Recuerde unas pocas lecciones atrás, cuando describíamos el comando cut y su capacidad para extraer campos de texto de un flujo. Tratamos de utilizar el comando cut para extraer el primer y quinto campo de la salida del comando df, especificando un espacio como el campo delimitador. [madonna@station madonna]$ df Filesystem 1K-blocks Used Available Use% Mounted on /dev/hda3 5131108 4499548 370908 93% / /dev/hda1 124427 26268 91735 23% /boot none 127616 0 127616 0% /dev/shm [madonna@station madonna]$ df | cut -d" " -f1,5 Filesystem /dev/hda3 /dev/hda1 none

311

txt. Utiliza el comando tr para borrar todas las instancias del caracter. Tras examinar el archivo. un repositorio de textos que han entrado a dominio público[1]. [madonna@station madonna]$ head -5 2city12. se da cuenta que éste utiliza la convención DOS para separar las líneas (un retorno de carro/nueva línea) como es ilustrado por la combinación “^M$” cuando se utiliza el comando cat -A. keeping an^M$ electronic path open for the next readers.txt | cat -A The Project Gutenberg Etext of A Tale of Two Cities. Primero utiliza el comando tr para comprimir espacios múltiples en un espacio sencillo [madonna@station madonna]$ df | tr -s ' ' Filesystem 1K-blocks Used Available Use% Mounted on /dev/hda3 5131108 4499556 370900 93% / /dev/hda1 124427 26268 91735 23% /boot none 127616 0 127616 0% /dev/shm Ahora. almacenando el resultado en el archivo 2city12unix. realiza un par de revisiones.^M$ We encourage you to keep this file on your own disk.txt > 2city12unix.txt Para confirmar que la conversión sucedió correctamente. by Dickens^M$ ^M$ Please take a look at the important information in this header. Primero examina el archivo con cat -A y observa que los caracteres “^M” se han suprimido. Do not remove this.txt. Con su nuevo conocimiento del comando tr. El comando cut no reconoce un conjunto de espacios como campos separados. madonna sabe cómo resolver el problema.5 Filesystem Use% /dev/hda3 93% /dev/hda1 23% none 0% Uso de tr para convertir archivos de texto en DOS a Unix La usuaria madonna ha descubierto recientemente el Proyecto Gutenberg.^M$ Ella preferiría que el texto utilizara la convención Unix (un caracter de una sola palabra new line). madonna puede utilizar con facilidad el comando tr para extraer las columnas apropiadas. [madonna@station madonna]$ tr -d '\r' < 2city12.Previamente identificamos el problema con este enfoque. Ha descargado uno de sus textos favoritos A Tale of Two Cities y almacenado en el archivo2city12. 312 . [madonna@station madonna]$ df | tr -s ' ' | cut -d" " -f1. sino un conjunto de campos (uno por cada espacio).

1. we were all going direct to Heaven. Do not remove this. Por último. La usuaria madonna utiliza el editor de texto para extraer el párrafo del texto. the period was so far like the present period. in the superlative degree of comparison only.txt 2city12. Esto es apropiado si el comando tr borra un caracter por línea.$ En segundo lugar. renombra el archivo 2city12unix. keeping an$ electronic path open for the next readers. madonna desearía reordenar el texto para que las palabras aparezcan una por línea. [madonna@station madonna]$ cat para1 It was the best of times. it was the winter of despair.771239 = 16364). it was the spring of hope. it was the age of foolishness.txt 16364 137667 771239 2city12unix. Borrar todos los signos de puntuación. we were all going direct the other way--in short.txt.txt 32728 275334 1558842 total Ella observa que la diferencia en el número de caracteres en los dos archivos es igual al número de líneas en los archivos (787603 . puesto que ya no está interesada en mantener la versión DOS formateada del archivo. it was the age of wisdom. [madonna@station madonna]$ mv 2city12unix. we had everything before us. it was the worst of times. we had nothing before us. for good or for evil.txt Uso de tr las frecuencias de conteo de palabras Este ejemplo está basado en un ejemplo similar hallado en (info coreutils) de la página informativa (info coreutils). Ahora quisiera generar un conteo de la frecuencia con que se utilizan algunas palabras.Para utilizar el comando uniq -c. it was the season of Light.txt | cat -A The Project Gutenberg Etext of A Tale of Two Cities. realiza una conteo de palabras en ambos archivos mediante el comando wc [madonna@station madonna]$ wc 2city12* 16364 137667 787603 2city12. La buena escritura suele requerir que los autores eviten el uso en exceso de ciertas palabras claves.$ We encourage you to keep this file on your own disk. that some of its noisiest authorities insisted on its being received. Ella traza el siguiente plan. como se espera. it was the epoch of belief. 313 .txt como 2city12. it was the season of Darkness.[madonna@station madonna]$ head -5 2city12unix. by Dickens$ $ Please take a look at the important information in this header. it was the epoch of incredulity.

2. madonna está lo suficientemente cómoda con sort y uniq para finalizar el proceso. 314 . 3. Comienza por implementar su plan paso a paso con el fin de observar los resultados intermedios [madonna@station madonna]$ tr -d '[:punct:]' < para1 | head -5 It was the best of times it was the worst of times it was the age of wisdom it was the age of foolishness it was the epoch of belief it was the epoch of incredulity it was the season of Light it was the season of Darkness it was the spring of hope it was the winter of despair [madonna@station madonna]$ tr -d '[:punct:]' < para1 | tr '[:upper:]' '[:lower:]' | head -5 it was the best of times it was the worst of times it was the age of wisdom it was the age of foolishness it was the epoch of belief it was the epoch of incredulity it was the season of light it was the season of darkness it was the spring of hope it was the winter of despair [madonna@station madonna]$ tr -d '[:punct:]' < para1 | tr '[:upper:]' '[:lower:]' | tr -s ' ' '\n' | head -5 it was the best of En este punto. con el fin de que It y it sean consideradas como la misma palabra. repite la técnica en todo el texto (el proceso tomó cerca de 8 segundos en un procesador 700MHZ). [madonna@station madonna]$ tr -d '[:punct:]' < para1 | tr '[:upper:]' '[:lower:]' | tr -s ' ' '\n' | sort | uniq -c | sort -rn | head -5 14 the 12 of 11 was 10 it 4 we Motivada por su progreso. Convertir cada caracter espacio en un nuevo caracter nueva línea y comprimir múltiples caracteres nueva línea en uno. Convertir todos los caracteres en letras mayúsculas a letras minúsculas.

[madonna@station madonna]$ echo "Gb trg gb gur bgure fvqr. el cual es copia del archivo /usr/share/ssl/openssl. Dicha línea pudo ser convertida al rotar cada letra por 13 sitios para que “a” se convirtiera en “n”. 315 . Crear el archivo ~/file_roller.) Cree un archivo llamado ~/openssl. Todas las mayúsculas son dobladas en letras minúsculas. La línea de remate se convirtió en la más obvia. b. (no utilice acento grave (`). P: ¿Por qué el pollito cruzó la calle? R: Gb trg gb gur bgure fvqr. Todas las líneas de comentarios son suprimidas (líneas cuyo primer caracter de espacio en blanco es un #). ~/passwd. a. 3.txt | tr '[:upper:]' '[:lower:]' | tr -s ' ' '\n' | sort | uniq -c | sort -rn | head -5 8082 the 4967 and 4061 of 3517 to 2952 a Rot13 En los comienzos de grupos de Usenet.converted. Convertir todas las tabulaciones a espacios." | tr A-Za-z N-ZA-Mn-za-m Para pasar al otro lado.glade. y “z” se convirtiera en “m”. Convertir las comillas dobles (") a comillas sencillas (').. b.converted que es una copia del archivo /usr/share/fileroller/glade/file_roller. el cual es una copia del archivo /etc/passwd convertido para utilizar tabulaciones como delimitadores de campo (i. El archivo /etc/passwd usa los dos puntos para delimitar campos. “b” se convirtiera en “o”. la gente adoptó una convención para oscurecer el texto llamado rot13.e. Suponga que usted va a enviar un chiste y quisiera inmediatamente incluir la línea de remate del chiste.[madonna@station madonna]$ tr -d '[:punct:]' < 2city12. Estimated Time: 10 mins. Todas las líneas vacías son suprimidas. como se ilustra en el siguiente ejemplo. ¿Cómo encontraría la respuesta? Al mirar el texto a través de un traductor tr implementado rot13.cnf. con las siguientes conversiones. con las siguientes conversiones. Ejercicios en línea Lab Exercise Objetivo: Familiarizarse con el comando tr. pero no quisiera que dicha línea de remate fuera immediatamente obvia. cada “:” se convierte en una tabulación). c. a. Cree el archivo 2. Especificaciones 1.tsv.

El archivo ~/file_roller. con todas las líneas de comentario suprimidas(aquellas cuyo primer caracter que no sea espacio en blanco es un “#”). El archivo ~/openssl. 2.d. el cual es una copia del archivo /usr/share/file-roller/glade/ file_roller. 3.converted. todas las letras mayúsculas convertidas en minúsculas y todos los dígitos numéricos remplazados por el caracter de subrayado (_).converted. el cual es una copia del archivo /etc/passwd con tabulaciones sustituídas por dos puntos. con todas las tabulaciones convertidas en espacios y todas las comillas dobles (") convertidas en comillas sencillas (').cnf. el cual es una copia del archivo /usr/share/ssl/openssl. El archivo ~/passwd. 316 .glade.tsv. Deliverables A title Question 1 content_view let_ 1. Todos los dígitos se remplazan por el caracter de subrayado (“_”). todas las líneas suprimidas.

Ignora mayúsculas al realizar comparaciones de palabras. el primer argumento (diferente a la posible opción de comandos) es interpretado como un comando que le indica aaspell lo que tiene que hacer. Bota la configuración actual aspell a la salida estándar. Opciones para el comando aspell Opción -W --ignore=N --ignore-case -p. entradas de lectura desde la entrada estándar. Imprime una lista de las palabras mal escritas halladas en el flujo del entrada estándar. respectivamente. Comandos Aspell Comando -c file. lista personal de palabras o lista personal de remplazo. Los comandos aspell create personal y aspell merge personal pueden utilizarse para crear o añadirse al directorio personal del usuario de una lista de palabras. El comando aspell -l realiza una revisión ortográfica en el flujo de entrada estándar. aprendimos cómo utilizar aspell para revisar la ortografía del archivo de modo interactivo y personalizar el corrector de ortografía con un diccionario especial. chequear file -l. (por defecto. Table 2. respectivamente. Utiliza la lista de palabras filename para la lista personal de palabras. Table 1. --personal=filename Efecto Ignora palabras de menos de N caracteres. Uso de aspell Cuando ejecute aspell. El siguiente cuadro lista algunas de las opciones utilizadas con el comando aspell. El comando aspell dump puede utilizarse para ver el maestro del sistema o el directorio personal de un usuario. Los siguientes comandos son compatibles con aspell. lista personal de palabras y lista personal de remplazo. En esta lección.Revisión ortográfica: aspell Conceptos clave • • • • El comando aspell -c realiza revisiones ortográficas interactivas en los archivos. list config dump master|personal| repl create master| personal|repl merge personal|repl master| Acción Realiza una revisión de ortografía en el archivo file. la utilidad del comando aspell es la utilidad primaria para revisar la ortografía de los archivos de texto. respectivamente. 317 . solo se hace caso omiso a palabras sencillas). la lista personal de palabras o la lista de remplazo. Fusiona entradas leídas desde la entrada estándar dentro de la lista maestra de palabras. Crea la lista maestra de palabras. Bota una copia de la lista maestra de palabras. Discussion En la distribución de Red Hat Enterprise Linux.

Puede escoger de las siguientes opciones. LOL. el comando aspell abre una sesión interactiva. [prince@station prince]$ cat toelvis Hey Elvis! I heard that you were about to take the lab test for the string procesing workbook in Red Hat Academy. subrayando la primera palabra mal escrita. prince tiene un teclado "vivo". --dont-backup No crea archivo de seguridad al realizar la revisión ortográfica. Realización de una revisión ortográfica interactiva El usuario prince ha compuesto el siguiente mensaje. IIRC. its prety straightforward.-x. Prince ===================================================================== 1) processing 6) preceding 2) precessing 7) professing 3) precising 8) promising 4) proceeding 9) proposing 5) prosing i) Ignore I) Ignore all r) Replace R) Replace all a) Add x) Exit ===================================================================== ? En este momento. Prince Antes de enviar el mensaje. LOL. prince utiliza aspell -c para realizar una revisión ortográfica interactiva. Hey Elvis! I heard you were about to take the lab test for the string Procesing workbook in Red Hat Academy. IIRC. el cual piensa enviar por correo-e al usuario elvis. Uso de remplazo sugerido 318 . if you've been keeping up with the exercises. [prince@station prince] aspell -c toelvis Tras la ejecución. lo que significa que al pulsar una tecla tendrá efecto sin necesidad de utilizar la tecla enter. if you've been keeping up with the exercises. its prety straightforward.

el comando aspell marca las palabras procesing. Al finalizar.bak [prince@station prince]$ 4c4 < processing workbook in --> processing workbook in ls diff toelvis. Para estas dos. esa sugerencia puede remplazarse al pulsar la tecla numérica asociada con ésta. prince acepta sugerencias de aspellpara corregir la ortografía. prince inmediatamente puede salir de la sesión interactiva aspell. 319 . para que no fuera marcada cuando se revisen futuros archivos puede pulsar a para agregar la palabra a su directorio personal. prince tiene dos archivos. aspell simplemente se ignorará la palabra y continuará. aspell no reporta el uso incorrecto por parte de prince. prety. [prince@station prince]$ toelvis toelvis. Al utilizar R mayúscula. its prety IIRC. debido a que its es una palabra legítima. Utilizado de esta manera. Todas las correcciones de ortografía ya implementadas se almacenarán.bak. prince puede utilizar r para remplazar manualmente la palabra. Al presionar la I mayúscula aspell ignorará todas las instancias de la palabra en el archivo actual. Si ha encontrado una sugerencia correcta (como en este caso). Red Hat Academy. Ignorar la palabra Al presionar i. aspell recordará el remplazo y automáticamente remplazará otras instancias de la palabra mal escrita. aspell simplemente lee la entrada estándar y escribe en la salida estándar cada palabra que marcaría como mal escrita. por lo tanto. Las últimas dos "palabras"son las abreviaturas más utilizadas por prince en sus correos-e. las añade a su directorio. IIRC. el comando aspell puede utilizarse para realizar revisiones ortográficas en un modo interactivo de bash. Agregar la palabra al directorio personal Si prince deseara que aspell aprendiera una nueva palabra. its pretty Realizacion de una revisión ortográfica no interactiva Mediante la opción -l. IIRC y LOL como mal escritas. la versión corregida de toelvis y la copia de seguridad del original generada automáticamente.bak toelvis Red Hat Academy. Infortunadamente. Salida aspell Al pulsar x. Como prince sigue a través de la sesión interactiva. Al terminar. primero volviendo a revisar el remplazo especificado. toelvis. aspell volverá a empezar.El comando aspell hará lo mejor posible para sugerir remplazos de palabras mal escritas. desde su biblioteca. Remplazar una palabra Si aspell no pudo generar una sugerencia apropiada.

Prince utiliza la habilidad de aspell dump para ver su directorio personal. Primero extrae las palabras del mensaje original con aspell -l. podría también ver el diccionario maestro del sistema. prince realiza una revisión ortográfica no interactiva en su copia de seguridad del archivo original. [prince@station prince]$ aspell dump master | wc -l 153675 [prince@station prince]$ aspell dump master | grep "^add. Suponga que prince tiene un mensaje de correo-e anterior.bak procesing prety Puesto que las palabras IIRC y LOL fueron añadidas al diccionario personal de prince. Cuando prince decide agregar una palabra.A continuación.*ion$" addiction addition adduction El comando aspell puede tambien crear automáticamente un directorio personal (si aún no existe ) o fusionarlo (si existe). [prince@station prince]$ aspell -l < toelvis procesing IIRC prety LOL La utilidad aspell lista cuatro palabras que marcaría como mal deletreadas. 320 . [prince@station prince]$ aspell -l < toelvis. Desearía agregar todas las abreviaturas encontradas en ese correo-e a su directorio personal. la palabra se almacena en su diccionario personal. en el cual utilizó muchas de las abreviaturas más usadas. ya no se marcan como mal escritas. mediante palabras leídas desde la entrada estándar. Después de la revisión ortografía interactiva. [prince@station prince]$ aspell dump personal LOL IIRC Del mismo modo. suponga que prince realizó una revisión ortográfica no-interactiva antes de ejecutar la sesiónaspell de modo interactivo. Administración del diccionario personal Por defecto el comando aspell utiliza dos diccionarios al realizar revisiones ortográficas: el sistema amplio de diccionario maestro y el del diccionario personal del usuario.

aspell. Al igual que la mayoría de los comandos aspell generará un resumen de uso cuando se llama con la opción --help.pws" En la falta de voluntad de aspell por sobrescribir un diccionario personal ya existente.lenguaje.txt | aspell merge personal [prince@station prince]$ aspell dump personal TTFN AFK LOL RSN IIRC FWIW ¿Qué sucede si prince trata en cambio de crear el diccionario personal? [prince@station prince]$ echo "foo" | aspell create personal Sorry I won't overwrite "/home/prince/. [prince@station prince]$ mozilla /usr/share/doc/aspell-0. vuelve a ver el diccionario personal (expandido).7. decide agregar todas estas palabras a su diccionario personal con aspell merge personal.txt FWIW AFK RSN TTFN Después de observar los resultados. Cuando termina. descubrimos dónde se ha almacenado: ~/. iniciará prince apagado en la documentación html. [prince@station prince]$ aspell -l < good_email.pwd. pero en este caso está errado. El siguiente comando.33. Puede hallarse documentación adicional en el directorio /usr/share/doc/aspell-0*/man-text/ (como archivos de texto sencillo) o en formato html. ejecutado desde una terminal X.english.aspell.1/man-html/inde.[prince@station prince]$ aspell -l < good_email.html Ejemplos Adición de nombres de servicio al diccionario personal de aspell 321 . Getting Help ¿A dónde esperaría prince encontrar ayuda para el comando aspell? [prince@station prince]$ man aspell No manual entry for aspell Es un primer intento razonable por saber.

maybe.El usuario prince contesta las preguntas relacionadas con la red de servicios de Linux en sus correos-e y aspell marca de modo sistemático como palabras mal escritas los nombres de servicio convencionales. Especificaciones 1. Le gustaría agregar a su directorio personal los nombres del servicio hallados en el archivo /etc/services. encuentra muchas entradas duplicadas. [prince@station prince]$ aspell merge personal < services. Primeros hace la revisión ortográfica del archivo /etc/services de modo interactivo y almacena los resultados en ~/services. Almacene la lista (una palabra por línea) en el archivo ~/sysconfig. Hace la vida más fácil para él mismo (y finalmente aspell) regenerando la lista. [prince@station prince]$ aspell -l < /etc/services | sort | uniq > services.maybe Navegando el archivo una vez más. Al utilizar el visualizador de página less para navegar el archivo services. de modo no interactivo. prince está satisfecho que la lista contenga palabras que preferiría no haber marcado como mal escritas. Agrega la lista de palabras a su directorio personal. La lista debería estar en orden alfabético ascendente y las palabras duplicadas deberían suprimirse. ninguna palabra fue marcada como mal escrita. Con uso creativo de los comandos find. xargs. 322 . hace de nuevo la revisión ortográfica del archivo /etc/services. Estimated Time: 10 mins. Generar una lista de todas las palabras que aspell marque como mal escritas halladas en todos los archivos bajo el directorio /etc/sysconfig y sus subdirectorios.txt. suprimiendo duplicados. [prince@station prince]$ aspell -l < /etc/services Ejercicios en línea Lab Exercise Objetivo: Utilizar el comando aspell para realizar revisiones ortográficas de rutina. esto puede realizarse en una línea de comandos.maybe. sort y uniq. [prince@station prince]$ aspell -l < /etc/services > services. Configuración Con el fin de prepararse para este ejercicio. cat.maybe Como se esperaba.maybe Para confirmar.spell. suprima todos los diccionarios personales (o la lista de remplazo) acumulados con el siguiente comando.

spell. 2. El archivo ~/sysconfig. 3. El archivo ~/README. La palabra explicity debería ser remplazada porexplicitly y la palabra Litmaath por Smith. stdout.txt. stdin. csh b. El archivo no debería contener palabras duplicadas. texinfo. Un directorio personal aspell que contenga exactamente las palabras gcc. De modo manual remplace la palabra Litmaathcon Smith. y csh. usr. d. que ha sido revisado con el comando aspell . 323 . usr.Copie el archivo /usr/share/doc/which-*/README en su directorio de inicio. Realice una revisión ortográfica interactiva en el archivo con el corrector ortográfico aspell: Aplique las siguientes reglas a las palabras mal escritas. Deliverables A title Question 1 content_view let_ 1. Utilice las sugerencias de corrección de aspell: explicity (debería leerse explicitly) c. el cual es una copia del archivo/usr/share/doc/which-*/README. stdout. Agregue las siguientes palabras a su directorio personal: gcc. Si se realizó correctamente. usted debería poder reproducir salida similar a la siguiente. a. texinfo. Ignore todas las otras palabras marcadas. el cual contiene una lista en orden alfabético ascendente de todas las palabras marcadas por aspell como mal escritas halladas en todos los archivos bajo el directorio /etc/sysconfig y sus subdirectorios. stdin.

Un usuario comienza tecleando el texto sin utilizar jamENTER y la aplicacil. tales como nano. generalmente almacenan información mediante formateo de marcas o binario para definir fuente. colores y otros aspectos de la apariencia del texto.. Aunque esto no es un problema.el usuario elvis ensaya un experimento sencillo.Formatear texto (fmt) y dividir archivos (split) Conceptos clave • • • El comando fmt puede reformatear texto a diferentes anchuras. Como un ejemplo de inconsistencias de varios editores de texto. En lugar de incrustar definiciones del usuario en alguna base de datos que requiera una utilidad personalizada para acceder. vim y gedit y el procesador de palabra OpenOffice. Las aplicaciones de procesadores de palabras tales como OpenOffice o AbiWord. En cada caso. /etc/hosts. El uso común de un editor de texto sencillo sigue como resultado natural de la ocurrencia común del archivo de texto sencillo. el comando fmt sólo reformateará texto comenzado por el prefijo especificado. es la inconsistencia con la que se maneja la delimitación de palabras. Al usar la opción -p.. /etc/fstab. vim o gedit. almacenan solamente la información: lo que usted ve es lo que obtiene. teclea la oración sin pulsar siquiera la tecla ENTER y guarda el documento como extensión 324 ... y quizas sea deseable. se definen en un archivo de texto sencillo que cualquier persona con el conocimiento del comandogrep puede buscar. Un efecto secundario de la variedad de editores de texto en Linux y en editores de texto y procesadores de palabra.). los datos que la gente manipula quedan como simple texto. puede causar problemas significativos en la edici/etc/passwd. Puesto que Linux provee una caja de herramientas manipuladoras de comandos de texto tan útiles. El comando split puede utilizarse para dividir un archivo sencillo en múltiples archivos basados en un número de líneas o en un número de bytes. Discussion El comando fmt Motivación para el comando fmt Esperemos que las lecciones en este cuaderno hasta el momento hayan demostrado formas de gran alcance para la manipulación de texto con las utilidades básicas de línea de comandos de Linux (y Unix). Para un procesador de palabra y muchas entradas de texto en HTML los caracteres línea nuevano suelen considerarse de valor para los usuarios. preservando el prefijo. Teclea la primera oración de un párrafo anterior usando cuatro aplicaciones diferentes: los editores de texto nano. los usuarios utilizan editores de texto para modificar archivos de texto con mucho más control y previsibilidad. En contraste. etc. Como resultado. los editores sencillos de texto. para escribir una carta a un amigo. etc. El archivo /etc/passwd es un ejemplo clásico.. Hacemos énfasis en que los editores de texto no son procesadores de palabras.

Manejo de texto utilizando OpenOffice 325 . Manejo de texto mediante gvim Figure 3.Figure 1. Manejo de texto mediante gedit Figure 2.

txt 3 31 190 side_effect.ooffice. Las aplicaciones gedit ygvim fueron consistentes con la convención de Linux (y Unix): no insertaron caracteres de línea nueva en medio del texto. Aunque es consistente con el otro en términos de 326 .nano 21 233 5703 total El editor de texto nano fue la única aplicación que implementó delimitación de palabra por defecto. se insertaron tres líneas nuevas de caracteres ASCII. pero no permitirían que un archivo de texto terminara sin un caracter de línea nueva interrumpida.Figure 4.* 2>/dev/null 1 31 188 side_effect. si usted incluye el formato binario OpenOffice).gedit 1 31 188 side_effect. Manejo de texto utilizando nano ¿Qué resultado muestra wc? Las cuatro aplicaciones usaron cuatro convenciones diferentes para mostrar y almacenar la oración de texto sencilla (cinco.gvim 16 109 4950 side_effect. Aunque elvis nunca pulsó la tecla enter. [elvis@station elvis]$ wc side_effect.ooffice.sxw 0 31 187 side_effect.

la aplicación de OpenOffice delimitó el texto mientras lo visualizaba. A manera de ejemplo. el comando fmt delimitó el texto en limitadores de palabras para que ninguna línea tenga más de 75 caracteres de longitud. los aspectos de delimitación de palabras pueden causar problemas. Por otra parte. cuando se lee el texto con una utilidad que sea escrita por otra. insertando nuevas líneas en límites de palabras para crear líneas de una longitud especificada por defecto (75 caracteres). no realizó ningún formato en el archivo cuando lo visualizó. No podemos ni siquiera comenzar a discutir las razones por las cuales el formato estándar de OpenOffice necesitó cerca de 5. is the inconsistencies with which word wrapping is handled. mientras que gvim delimitó el texto únicamente cuando no pudo entrar ninguno más en una línea. El siguiente cuadro lista las opciones que puedan utilizarse para modificar la conducta de fmt. considere cómo el comando fmt reformatea el archivo side_effect.gvim | wc 3 31 188 El comando cat.000 bytes de datos binarios para almacenar cerca de 200 caracteres. is the inconsistencies with whic h word wrapping is handled. [elvis@station elvis]$ cat side_effect.cómo fue almacenado el archivo. pero no agrego la línea nueva convencional de Linux al final del archivo cuando lo guardaba en el disco. -N -p. Al igual que gedit. Table 1. [elvis@station elvis]$ fmt side_effect. dos espacios entre oraciones.gvim One side effect of the variety of text editors in Linux. Todo esto es para decir que la forma como una aplicación maneja los problemas de delimitación de palabra no es obvia para el usuario casual. --prefix=CADENA TEXTO -u. Opciones para el comando fmt Opción -w. [elvis@station elvis]$ fmt side_effect. El hecho que las líneas delimitadas a 80 caracteres es un efecto secundario de la terminal que lo estaba mostrando. Sintaxis del comando fmt Al igual que la mayoría de los comandos de procesador de texto encontrados en este cuaderno. and in particular the coexistence of text editors and word processors. DE 327 .gedit. --uniform spacing Efecto Texto de formato para N columnas. --width=N. Redelimitación de texto con el comando fmt El comando fmt se utiliza para delimitar texto. fiel a su naturaleza. u operar en entrada estándar si ninguno es provisto. y a menudo. el comando fmt interpreta argumentos como nombres de archivos en los cuales operar. difieren en la manera como el texto fue presentado al usuario: gedit delimitó el texto con delimitadores de palabras. and in particular the c oexistence of text editors and word processors. Su salida se escribe a la salida estándar. Únicamente las líneas que comienzan por CADENA DE TEXTO. Imponga el espaciado de un espacio entre palabras.gvim One side effect of the variety of text editors in Linux.

each DbFoo object has exactly one underlying DB_FOO struct (defined in db. Often. is the inconsistencies with which word wrapping is handled. In some cases. When you see a comment about whether data is permitted to be added. [elvis@station elvis]$ fmt -40 side_effect. [elvis@station elvis]$ fmt -w60 side_effect. formateándolo primero a la anchura de 60 caracteres y luego a una anchura de 40 caracteres. se encuentra texto con algún tipo de representación o prefijo. is the inconsistencies with which word wrapping is handled.Formatear a una anchura específica La anchura máxima del texto resultante puede especificarse con la opción -w No simplemente -N donde -N es la anchura máxima de la línea medida en caracteres. elvis reaplica el comando de formato al archivoside_effect.h) associated with it. todo el texto de los comentarios necesita marcarse con el caracter apropiado de comentario. Suponga que un programador editó el comentario. so there is no easy way to add any data to the DbFoo class. this is what is going on. En particular cuando se comentan códigos fuentes o scripts. if we need to add data to such C++ classes in the future. the underlying C layer allocates and deallocates these structures. we will arrange to have an indirect pointer to the DB_FOO struct (as some of the classes already have).h para el lenguaje de programación C++. 328 . Of course.gvim One side effect of the variety of text editors in Linux. El siguiente pedazo de texto se encuentra en el encabezado del archivo /usr/include/db_cxx. and in particular the coexistence of text editors and word processors. añadiendo las siguientes palabras a la segunda línea. Formatear texto con un prefijo A menudo. En el siguiente ejemplo. and in particular the coexistence of text editors and word processors.gvim. // // // // // // // // // // // As a rule.gvim One side effect of the variety of text editors in Linux. we inherit directly from the DB_FOO structure to make this relationship explicit.

if we need to add data to such C++ classes in the future.txt // // // // // // // // // // // As a rule. In some cases. if we need to add data to such C++ classes // in the future. Por eso. this is what is going on. this is what // is going on. o por alguna otra razón. 329 . but we really don't expect many of them.txt // // As a rule. the underlying C layer allocates and deallocates these structures. When you see a comment about whether data is permitted to be added. Often. El comando fmt hizo todo el trabajo difícil y preservó los caracteres prefijos. Of course. we inherit directly // from the DB_FOO structure to make this relationship explicit. cada uno con un número especificado de líneas o bytes. we will arrange to have an indirect pointer to the DB_FOO struct (as some of the classes already have). A manera de ejemplo. we inherit directly from the DB_FOO structure to make this relationship explicit. When you see // a comment about whether data is permitted to be added. el comando new line con la opción new line hace la vida más fácil. each DbFoo object has exactly one underlying DB_FOO struct // (defined in db. el comando split dividirá el archivo en archivos más pequeños. las cuales serían reformateadas más adelante y así sucesivamente. // the underlying C layer allocates and deallocates these structures. [elvis@station elvis]$ fmt -70 -p"// " cxx_comment. each DbFoo object has exactly one underlying DB_FOO struct (defined in db. El comando split División de archivos con el comando split Suponga que alguien tiene un archivo demasiado grande de manejar como una sóla unidad. // Puesto que cada línea del texto comienza por un “//” y termina en un caracter ASCII de new line. so there is no easy way to add any data to the DbFoo class.h) associated with it. Of course. Afortunadamente. al reajustar la línea para volver a encajar 80 caracteres. implicaría empujar algunas palabras a la próxima línea. In some cases. Often. elvis genera el siguiente archivo de línea sin puntos 1066. so // there is no easy way to add any data to the DbFoo class. we will arrange to have an indirect pointer to the // DB_FOO struct (as some of the classes already have).[elvis@station elvis]$ cat cxx_comment. but we really don't expect many of them.h) associated with it.

this is line number 800 of a pointless file. Of course. the underlying C layer allocates and deallocates these structures.txt sub_pointless_ [elvis@station elvis]$ wc sub_pointless_a* 200 1800 8892 sub_pointless_aa 200 1800 9000 sub_pointless_ab 200 1800 9000 sub_pointless_ac 200 1800 9000 sub_pointless_ad 200 1800 9001 sub_pointless_ae 66 594 3036 sub_pointless_af 1066 9594 47929 total [elvis@station elvis]$ tail -5 sub_pointless_ad this is line number 796 of a pointless file. In some cases. dividir [OPCIONES] [NOMBREDEARCHIVO [PREFIJO] ] Si se llama con uno o dos argumentos. Si se llama sin argumentos o si el primer argumento es el nombre de archivo especial “-”. so there is no easy way to add any data to the DbFoo class. Si se llama con dos argumentos.[elvis@station elvis]$ fmt -70 -p"// " cxx_comment.h) associated with it. el primer argumento es el nombre del archivo que se va a dividir. PREFIJOab. Opciones para el comando split 330 . Table 1. etc. Often. this is line number 797 of a pointless file. When you see a comment about whether data is permitted to be added. but we really don't expect many of them. el segundo argumento se utiliza como prefijo para los archivos recién creados. each DbFoo object has exactly one underlying DB_FOO struct (defined in db. el comando split operará en entrada estándar. we inherit directly from the DB_FOO structure to make this relationship explicit. we will arrange to have an indirect pointer to the DB_FOO struct (as some of the classes already have). if we need to add data to such C++ classes in the future. [elvis@station elvis]$ split -200 pointless. cada uno de 200 líneas.txt // // // // // // // // // // // As a rule. this is line number 798 of a pointless file. o uno o dos argumentos. this is what is going on. el comando split espera cero. Sintaxis del comando split Aparte de cualquier opción. La acción del comando split es la de dividir el NOMBREDEARCHIVO dentro de archivos más pequeños titulados PREFIJOaa. Ahora elvis utiliza el comando para dividir el archivo split en archivos más pequeños. this is line number 799 of a pointless file.

dict_ahb dict_aom dict_avx dict_bdi dict_bkt dict_bse dict_ahc dict_aon dict_avy dict_bdj dict_bku dict_bsf dict_ahd dict_aoo dict_avz dict_bdk dict_bkv dict_bsg dict_ahe dict_aop dict_awa dict_bdl dict_bkw dict_bsh dict_ahf dict_aoq dict_awb dict_bdm dict_bkx dict_bsi dict_ahg dict_aor dict_awc dict_bdn dict_bky dict_bsj dict_ahh dict_aos dict_awd dict_bdo dict_bkz dict_bsk dict_ahi dict_aot dict_awe dict_bdp dict_bla dict_bsl dict_ahj dict_aou dict_awf dict_bdq dict_blb dict_bsm dict_ahk dict_aov dict_awg dict_bdr dict_blc dict_bsn [elvis@station dict]$ wc dict_* 100 100 788 dict_aaa 100 100 790 dict_aab 100 100 1008 dict_aac . Al darse cuenta que al hacerlo crearía 1. -N --line-bytes=N Efecto Divide entrada en archivos de N líneas. Divide entrada en archivos de N líneas. [a] Divide dentro de archivos máximo de Nbytes. [elvis@station elvis]$ aspell dump master | wc 153675 153675 1502478 El usuario elvis desearía almacenar una copia de un diccionario. a sus nombres de archivo resultantes les faltarán letras si no se aumenta la longitud del sufijo a 3(26*26 = 676). k=1024. se puede incluir un sufijo de letra.Opción -l. -N -b.. --lines=N. --lines=N. [a] Al especificar N. 100 100 1215 dict_cha 100 100 1206 dict_chb 75 75 917 dict_chc 153675 153675 1502478 total dict_ dict_bso dict_bsp dict_bsq dict_bzp dict_bzq dict_bzr dict_bzs dict_bzt dict_bzu dict_bzv dict_bzw dict_bzx dict_bzy dict_bzz dict_caa dict_cab dict_cha dict_chb dict_chc Ejemplos 331 . --suffix=N Utiliza sufijos de caracteres N (defecto N=2). pero realiza la división al final de la línea... --bytes=N -l. and M=1024*1024. Puesto que él desea especificar la cadena de texto dict_ como un prefijo. debe proveer dos argumentos. División de entrada estándar En la lección anterior. [elvis@station dict]$ aspell dump master | split -100 -a3 [elvis@station dict]$ ls dict_aaa dict_ahl dict_aow dict_awh dict_bds dict_bld dict_aab dict_ahm dict_aox dict_awi dict_bdt dict_ble dict_aac dict_ahn dict_aoy dict_awj dict_bdu dict_blf . vimos que el diccionario maestro del comando aspell puede verse por medio del siguiente comando.. el cual actua como multiplicador: b=512. entonces utiliza el nombre de archivo especial “-” para hacer que split lea desde la entrada estándar. pero le gustaría dividirla en archivos de 100 líneas cada uno. -a. Divide entrada en archivos de N bytes.536 archivos.

332 . also: 888-555-1414. Once you turn off o f Market Street take your time and gawk at the lovely historic homes. Las primeras pocas líneas están bien. Antes de responder. So here's how to get to the house assuming you have traveled to the eastern most end of I-92. If you've got time to kill on the way out.Uso de fmt para limpiar correo-e Mientras utiliza la terminal de correo masivo del comando mutt. T he stretch down Market Street is narrow so drive with care. elvis borra el mensaje con el comando fmt. blondie wrote: > > What phone numbers will everyone have in case I get lost? > > > >> So it turns out that mapquest gives more sane die wreck shuns than would I were I to have to produce them from memory. [elvis@station elvis]$ cat email. El correo-e consiste en diferentes secciones incluídas. I'll have my cellphone with me. pero luego el último comentario incluído es una línea larga. This route will ta ke you through the heart of downtown Springfield. On September 24 (15:32 EDT).txt I believe the phone number of the rental property is 888-555-1212. the phone number of the rental office is 888-555-1313. cada una de las cuales fue escrita por un autor diferente con un editor de texto diferente. If not. elvis guarda y luego ve el siguiente mensaje electrónico. In my opinion it's the best w ay to get there because you spend the most time on the superslb that is I-92. Springfield's a nice riverfront to take a strol l.

This route will take you through the heart of downtown Springfield. y luego el color de 333 . If you've got time to kill on the way out. If not.[elvis@station elvis]$ fmt -p"> >> " -w60 email I believe the phone number of the rental property is 888-555-1212. On September 24 (15:32 EDT). So here's how to get to the house assuming you have traveled to the eastern most end of I-92. Observe que el comando fmt únicamente operó en las líneas empezadas por el prefijo “> >>” (En este caso. Once you turn off of Market Street take your time and gawk at the lovely historic homes cum B&Bs now operated by Wilmington's gay hospitality mafia. Imagen abstracta de nubes de elvis clouds.pnm En la primera lección. The stretch down Market Street is narrow so drive with care. the phone number of the rental office is 888-555-1313. había solamente una). sin intentar interpretar los bytes en caracteres de texto. El resto del texto fue dejado solo. Jane Doe wrote: > What phone numbers will everyone have in case I get lost? > > > > > > > > > > > > > > >> >> >> >> >> >> >> >> >> >> >> >> >> >> So it turns out that mapquest gives more sane die wreck shuns than would I were I to have to produce them from memory. el formato PNM fue mencionado como un simple ejemplo de imágenes de codificación.pnm con el formato PNM. Figure 1. also: 888-555-1414. Wilmington's a nice riverfront to take a stroll. Uso de herramientas "Procesamiento de cadena de texto" para manipular datos binarios La mayoría de este cuaderno se ha enfocado en el desarrollo de una caja de herramientas para el procesamiento de texto. El usuario elvis ha creado una imagen abstracta mediante el programa de manipulación de imagen gimp y ha almacenado el archivo como clouds. La mayoría de los comandos trabajan igual de bien en bytes. I'll have my cellphone with me. La imagen se reduce primero a una matriz de puntos ("píxeles"). In my opinion it's the best way to get there because you spend the most time on the superslb that is I-92.

Elvis asume que el último número define la profundidad de la imagen.cada píxel se codifica en tres bytes de datos crudos . seguidas por datos binarios. [elvis@station elvis]$ head -4 clouds.dat wc: clouds. el número de caracteres es realmente el número de bytes en el archivo. Una colección de identificadores "mágicos" está catalogada en el archivo /usr/share/magic. cualquier línea en el encabezado ASCII que comience por un “#” se interpreta como un comentario. la imagen tendría una profundidad de 225). Unas pocas líneas del texto ASCII son agregadas al archivo.dat Aunque el número de líneas y palabras reportadas por el comando no tienen sentido.hdr P6 # CREATOR: The GIMP's PNM Filter Version 1.dat:1: Invalid or incomplete multibyte or wide character 0 8 196608 clouds. [elvis@station elvis]$ head -4 clouds. trate grep P6 /usr/share/magic. Utilizando el esquema descrito en el párrafo anterior. el número de píxeles en cada fila.dat [elvis@station elvis]$ cat clouds. Al calcular rápidamente. debería ser 256*256*3=196608 bytes de longitud. El usuario elvis desearía dividir la imagen en cuatro partes horizontales.0 256 256 255 Tratando de imaginar el encabezado. El texto “P6” probablemente actúa como algomágico. separa la imagen en su encabezado y sus datos crudos. cada uno como un valor de 0 a 255. (La profundidad es el cantidad de números enteros utilizados para codificar cada componente de color. elvis asume lo siguiente.) Aparentemente. 334 .hdr [elvis@station elvis]$ tail +5 clouds. Su imagen es una matriz de 256x256 píxeles.pnm > clouds. el "rojo". Mágico es el término para cadenas de texto específico (o bytes) que identifican formatos de archivo (a menudo binarios). con cada píxel requiriendo 3 bytes de datos. En cambio. para identificar el formato. (Para el curioso. elvis decide que su archivo de imagen conste de cuatro líneas de texto ASCII. El comando wc del conteo de caracteres concuerda. "verde". Después de experimentar un poco con el comando head.pnm > clouds. Por supuesto. elvis va a utilizar herramientas de línea de comando. Estos dos números probablemente identifican el número de píxel en una fila y el número de filas en una imagen. Primero. tal como gimp.0 256 256 255 [elvis@station elvis]$ wc clouds. Lo restante del archivo es datos crudos. el número de filas y la "profundidad" de la imagen. elvis determina que una imagen de 256x256 píxeles. y "azul". la forma correcta de hacerlo sería utilizar un editor de imagen.pnm P6 # CREATOR: The GIMP's PNM Filter Version 1.

cada uno con un tamaño de 196608/4=49512 bytes. [elvis@station elvis]$ diff -u clouds.4 +1.png) Figure 3.000000000 -0400 +++ clouds. eog.0 -256 256 +256 64 255 Como el comando diff revela.clouds. [elvis@station [elvis@station [elvis@station [elvis@station [elvis@station elvis]$ elvis]$ elvis]$ elvis]$ elvis]$ cat cat cat cat eog clouds. elvis utiliza el comando split para dividir los datos crudos de la imagen en cuatro partes.newhdr clouds.newhdr.Luego.newhdr clouds_row* clouds_aa clouds_ab clouds_ac clouds_ad > > > > clouds_row1.newhdr 2003-10-10 04:40:43. Fila 2 de imagen dividida de Elvis (clouds_row2. Ahora elvis crea 4 nuevas imágenes de archivo PNM al agregar el encabezado modificado a los datos de imagen dividida. [elvis@station elvis]$ split -b49512 clouds.hdr 2003-10-10 04:40:28. ve sus imágenes con el visor "Eog de GNOME".pnm clouds_row2. Fila 1 de imagen dividida de Elvis (clouds_row1.hdr clouds.dat clouds_ [elvis@station elvis]$ wc clouds.dat clouds_* 2>/dev/null 0 8 196608 clouds.000000000 -0400 @@ -1. Cuando termina.4 @@ P6 # CREATOR: The GIMP's PNM Filter Version 1.newhdr clouds.newhdr --.png) 335 .dat 0 1 49152 clouds_aa 0 1 49152 clouds_ab 0 1 49152 clouds_ac 0 8 49152 clouds_ad 0 19 393216 total Ahora que elvis tiene cuatro pedazos de datos crudos de la imagen original.newhdr clouds.pnm clouds_row4.pnm clouds_row3. la única modificación de elvis fue cambiar el número que define el número de filas desde 256 hasta 256/4=64. Utilizó un editor de texto para actualizar la información del encabezado para reflejar su cambio y almacena el encabezado actualizado en el archivo clouds. cada uno de los cuales contiene una cuarta parte del número de filas del original.pnm Figure 2.

txt. Ejercicios en línea Lab Exercise Objetivo: Uso correcto de los comandos fmt y split.\n". El proceso utilizado arriba pudo ser fácilmente automatizado al grabar los comandos en un guión bash. claro está. el cual recogerá 336 .c contiene un par de secciones grandes de texto de comentario. Uso del comando fmt para reformatear la salida en líneas de 75 caracteres de anchura (por defecto). Almacene el resultado en el archivo ~/cut40. cuyas líneas comiencen por el texto “ *”. debería poder reproducir resultados parecidos a los siguientes. All rights reserved.c | head * NEGLIGENCE OR OTHERWISE) ARISING * IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE. Almacene el resultado en el archivo ee_lines. [student@station student]$ tail +62 cut40. Utilice el comando fmt para reformatear sólo el texto comentario a una anchura de 40 caracteres. Suponga que elvis tiene 283 imágenes necesarias para realizar alguna operación. contiene el texto “ee”. las cuales llevan a la frustración cuando se tratan de realizar modificaciones minuciosas. Utilice el comando split para dividir este archivo en archivos de 80 líneas cada uno (excepto. El archivo /usr/share/doc/bash*/loadables/cut. Uso del comando grep para imprimir cada palabra en el archivo /usr/share/dict/words que 2. 1993\n\ The Regents of the University of California. para el último archivo. */ #ifndef lint static const char copyright[] = "@(#) Copyright (c) 1989.png) Figure 5. 1.Figure 4. Fila 3 de imagen dividida de Elvis (clouds_row3.c. piense en alguien que podría estar manejando imágenes de rutina creadas por un dispositivo de imágenes médicas). Fila 4 de imagen dividida de Elvis (clouds_row4.png) ¿Por qué elvis querría utilizar herramientas de línea de comando? La primera respuesta es precisión. EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. (aunque la necesidad de precisión o automatización es difícil de imaginar al manejar imágenes abstractas. La mayoría de los editores gráficos de imagen utilizan selecciones de ratón para realizar este tipo de operaciones. Especificaciones 1. El archivo /usr/share/zoneinfo/zone. La segunda respuesta es la automatización. Estimated Time: 10 mins. Si se realiza de modo correcto.tab lista los lugares de las ciudades utilizadas para identificar las zonas horarias y locales.

que contiene cada palabra del archivo /usr/share/dict/words el cual contiene el texto “ee”. 337 . con cada archivo resultante llamado ~/zone_aa. el cual incluye el contenido del archivo /usr/share/doc/bash*/loadables/cut. 3.el restante).c. reformateado a la anchura de 75 caracteres por línea. Deliverables A title Question 1 content_view let_ 1.c. dividido en archivos de 80 líneas. Los nuevos archivos existen en su directorio de inicio y todos tienen la forma ~/zone_aa. El contenido del archivo /usr/share/zoneinfo/zone. El archivo ee_lines. donde las letras aase repiten con cada archivo. El archivo ~/cut40. donde todas las líneas comenzadas por los caracteres “ *” han sido reformateadas a una anchura de 40 caracteres. donde aa se repite para cada archivo.tab.txt. 2.

Si usted está viendo este texto en un navegador. El comando ps puede utilizarse para examinar todos los procesos actuales en ejecución. una umask. ese navegador se está ejecutando como un proceso. no menos de cuatro procesos (ps. Un proceso tiene una colección de variables de entorno. ¿Qué es un proceso? 338 . Un proceso tiene un uid y una colección de gid como credenciales. El comando top puede utilizarse para controlar todos los procesos en ejecución. [maxwell@station maxwell]$ ps aux | grep httpd > daemons. especializados en funciones y trabajan bien con otros programas.Managing Processes Introducción a Procesos Conceptos clave • • • • • • • • Un proceso es una instancia de un ejecutable en ejecución identificado por un id de proceso (pid). Un proceso tiene un contexto de sistema de archivos incluyendo un cwd. Estos programas están diseñados para iniciar rápidamente. Los procesos tienen que ver con el cómo se consigue hacer las cosas y la responsabilidad principal del kernel de Linux es proporcionar un lugar para que los procesos ejerzan su labor sin necesidad de tocar el campo del otro. En otros sistemas operativos los programas suelen ser grandes y elaboradas aplicaciones gráficas que se toman una gran cantidad de tiempo para iniciar. Por ejemplo. bash y date) se iniciaron. esa shell está ejecutando como un proceso. hicieron lo que tenían que hacer y salieron. En el mundo de Linux (y Unix). Discussion Los procesos tienen que ver con el cómo se hacen las cosas Casi cualquier cosa que suceda en un sistema Linux tiene lugar como un proceso. grep. los procesos que ejecutan estos programas están constantemente apareciendo y desapareciendo. considere que el usuario maxwell escribe la siguiente línea de comandos. Los procesos son una instancia de un programa en funcionamiento. Si está utilizando el comando chmod para cambiar un permiso de un archivo. En un sistema de Linux. estos tipos de programas también existen.$(date +%d%b%y) En una fracción de segundo que la línea de comandos utilizó para ejecutar. el comando chmod funciona como un proceso por separado. Si está tecleando en una línea de comandos de la shell bash. Debido a que Linux implementa memoria virtual cada proceso posee su propio contexto distintivo de memoria. Un proceso tiene un contexto de programación que incluye un valor de niceness. al igual que toda una clase de programas que usualmente no tienen una contraparte en los sistemas operativos. un directorio raíz y una colección de archivos abiertos.

Archivos de trazado de memoria Los archivos de trazado de memoria son los archivos cuyo contenido se ha trazado directamente en la memoria del proceso.En este momento ya estará cansado de escuchar la misma pregunta: un proceso en una instancia de un programa en ejecución. Los mapas de memoria suelen utilizarse para cargar el código ejecutable. En lugar de leer o escribir en un descriptor de archivo. Un proceso también lleva parámetros asociados con la frecuencia de acceso que se tiene a la CPU. aquí ofrecemos una lista detallada de componentes que constituyen un proceso. el proceso sólo accede a la dirección de memoria apropiada. tales como el directorio de trabajo actual del proceso (para traducir referencias de archivos) y la umask del proceso (para establecer permisos en archivos recién creados). Contexto de E/S Cada proceso interactúa hasta cierto punto con el sistema de archivos para leer y escribir información que existe o existirá después del ciclo de vida del proceso. [1] Variables de entorno Cada proceso mantiene su propia lista de pares nombre-valor. pero también sirven para otros tipos de acceso no secuencial a los datos. conexiones de red o incluso entre sí como tuberías (permitiendo la comunicación entre procesos). tales como su estado de ejecución y su valor de niceness (pronto hablaremos más en detalle sobre esto). 339 . Los procesos leen información de o escriben información a los descriptores de archivos abiertos que pueden estar conectados a archivos regulares. la memoria asignada a un proceso está protegida y ningún otro proceso puede acceder a ésta. Un proceso carga en su memoria una copia de las instrucciones ejecutables y almacena cualquier otra información dinámica que esté manejando. No obstante. Contexto del sistema de archivos Hemos encontrado varias partes de información relacionadas con el sistema de archivos que mantiene los procesos. En Linux. Puesto que Linux (y Unix) están diseñados para ser un entorno multiusuario. los descriptores de archivos abiertos actúan como fuentes o receptores de información. conocida como variables de entorno o en general como el entorno del proceso. Los elementos de entrada y salida (E/S) de un proceso incluyen lo siguiente: Descriptores de archivo abierto Casi todos los procesos suelen leer información de o escribir información a fuentes externas. Contexto de ejecución Cada proceso existe (al menos hasta cierto punto) dentro de una memoria física de la máquina. nodos de dispositivos. Los procesos por lo general heredan su entorno en el inicio y pueden referirse a éste para obtener datos tales como el lenguaje preferido o el editor favorito del usuario.

veremos que cada proceso tiene claramente definido un padre y posiblemente unos hijos también. -e. cuando los usuarios están conectados a cajas de UNIX con terminales seriales de línea. las cuales no utilizan las mismas convenciones para las opciones. Credenciales Cada proceso se ejecuta bajo el contexto de un determinado usuario (o más exactamente de un id de usuario determinado) y bajo el contexto de una colección de id de grupo (generalmente. La versión de Linux del comando ps trata de acomodarse a diferentes versiones anteriores de Unix y suele haber opciones múltiples para cualquier opción determinada. En una próxima lección. el comando ps lista todos los procesos iniciados desde una terminal de usuario. el número de archivos abiertos. Selección de procesos De forma predeterminada. la identidad de sus hijos y hasta cierto punto la identidad de sus hermanos son mantenidos por el proceso. --User user -t. Aunque esta conducta es razonable. Opciones comunes del comando ps para la selección de procesos Opción -A. las cosas se complican un poco porque diferentes versiones de Linux han desarrollado sus propias versiones del comando ps. trataremos de familiarizarnos con una selección más amplia de opciones asociadas a éste. --tty terminal -p.Información de herencia Cada proceso se identifica con un PID o id del proceso asignado en el momento de su creación. Estadísticas de recursos y límites Cada proceso también registra estadísticas para trazar la cantidad de recursos del sistema utilizados. la cantidad de tiempo de CPU. Estas credenciales limitan los recursos a los que el proceso puede acceder tales como qué archivos pueden abrir o con qué otros procesos se les permite comunicarse. Los siguientes modificadores de línea de comandos pueden utilizarse para expandir (o reducir) los procesos listados por el comando ps . p. --pid N Procesos listados Todos los procesos. La cantidad de recursos que se le permite utilizar a un proceso también puede limitarse con un concepto llamado límite de recursos. La identidad del propio proceso. Ver procesos con el comando ps Ya hemos visto varias veces el comando ps. Ahora. Todas las instancias de command Todos los procesos que pertenecen a user Todos los procesos iniciados desde terminal Procesos con pid N 340 . --user. Una ejecución rápida de ps --help mostrará un resumen de más de 50 opciones diferentes para personalizar la conducta del comando ps. ax -C command -U. algunas de las cuales comienzan con un guión inicial (“-”). Table 1. parece un poco simplista cuando cada ventana de una terminal dentro de un entorno gráfico X se trata como una terminal independiente. etc. todos los grupos a los que pertenezca el usuario).

341 .

mientras que otros preferirían el comando ps -ef. A continuación se muestra la pantalla de un usuario después de ejecutar el comando top. los usuarios tienden a experimentar hasta encontrar combinaciones que les funcionen y luego se habitúan a ellas. Éste remplazará la línea de comandos por una tabla de los actuales procesos en ejecución. Opciones comunes del comando ps para dar formato a la salida Opción -H f. Se espera que el comando top se ejecute desde dentro de una terminal.Selección de salida Como se deduce de los párrafos iniciales de esta lección hay muchos parámetros asociados con procesos. 342 . En contraste. el comando top sirve para controlar el estado general de los asuntos de procesos en la máquina. las siguientes opciones pueden utilizarse para modificar la forma de presentar la información. Además. Table 1. tiene sus rarezas asociadas con sus opciones. Control de procesos con el comando top El comando ps muestra estadísticas para procesos especificados en el momento que se ejecuta el comando. Table 2. pero diferente de ps a x -f. Por ejemplo. el autor prefiere el comando ps aux para propósitos generales de todos los procesos. l -j. --forest h -w Formato de la salida Muestra la jerarquía del proceso Muestra la jerarquía de proceso incluyendo las representaciones ASCII No imprime las líneas del encabezado salida "ancha" (incluye nombres de los comandos más largos) Rarezas del comando ps El comando ps. El cuadro anterior ofrece una "ayuda de trabajo" bastante buena para el principiante. Opciones comunes del comando ps para la selección de salida Opción -f -l. una funcionalidad determinada se representa por una de cada una de ellas. Por ejemplo. El siguiente cuadro lista las opciones de línea de comando comunes que se utilizan para seleccionar qué aspectos de un proceso se listan. En la práctica. proporcionando una instantánea de una instancia en tiempo. ps axf es lo mismo que ps a x f. posiblemente más que cualquier otro comando en Linux. sólo pueden agruparse opciones del mismo estilo. o. aquellas con el tradicional guión inicial (opciones de estilo "Unix98") y otras sin (opciones de estilo "BSD"). j -o. --formato str Formato de la salida listado "completo" formato largo formato de trabajos formato definido del usuario utilizando campos especificados por str (campos disponibles para str se pueden listar con ps L o consultando la página de manual ps(1)). A menudo. demasiados para mostrar en una anchura estándar de terminal de 80 columnas. el cual se actualiza a cada instante. Las opciones de línea de comandos tienden a clasificarse en dos categorías. Al agrupar opciones de una sola letra.

4716k in_c Swap: 522104k av.0 0. 0. 0k shrd. 232796k used. el comando top responderá a pulsaciones sin esperar a la tecla enter.0 95.0 0.0 0 0 0 0 SW 0. 343 .00 101 processes: 100 sleeping. 433736k free PID 1150 1186 3057 3622 1 2 3 4 9 5 6 7 8 10 11 15 USER PRI einstein 15 einstein 15 einstein 15 maxwell 22 root 15 root 15 root 15 root 34 root 25 root 15 root 15 root 15 root 15 root 15 root 25 root 15 NI SIZE RSS SHARE STAT %CPU %MEM 0 4468 4108 2252 S 2.6 0 3132 2112 1436 S 0.0 0.0 0 0 0 0 SW 0. Aunque por lo general top funciona sin la configuración de línea de comandos es compatible con las siguientes opciones: Table 2.0 0 0 0 0 SW 0. load average: 0.0 0 0 0 0 SW 0. 7 users.8 0 19596 18M 12356 S 0.0 0 0 0 0 SW 0.0 0.0 0. Table 1. 146208k actv.5 0 1088 1088 856 R 0. Opciones para el comando top Opción -d Efecto Demora segundos segundos entre actualizaciones (por defecto = 5 segundos).0 0.0 19 0 0 0 SWN 0. En otras palabras.0 0. 33884k in_d.0 0.0 0.07. 0.0 0.0 0 0 0 0 SW 0. 0 stopped CPU states: 3.0% nice 0.17:46:38 up 4:28.0 0 0 0 0 SW 0.9 0. los cuales pueden matar o renice un proceso utilizan conceptos que cubriremos con más detalle en una próxima lección.4% idle 32404k buff 104280k cached TIME CPU COMMAND 0:51 0 metacity 0:04 0 battstat-appl 0:06 0 galeon-bin 0:00 0 top 0:04 0 init 0:00 0 keventd 0:00 0 kapmd 0:00 0 ksoftirqd_CPU 0:00 0 bdflush 0:00 0 kswapd 0:00 0 kscand/DMA 0:06 0 kscand/Normal 0:00 0 kscand/HighMe 0:00 0 kupdated 0:00 0 mdrecoveryd 0:01 0 kjournald Mientras el comando está ejecutándose.9 7.0% system 0.0% iowait Mem: 255232k av.0 0 0 0 0 SW 0.4% user 1. El siguiente cuadro lista algunas de las teclas más utilizadas. Comandos top más utilizados Presionar tecla q ho? s space M P u k r Comando quit ayuda establecer el retraso entre las actualizaciones (en segundos) mostrar actualización Clasificar procesos por tamaño de memoria Clasificar procesos por actividad de la CPU (procesador) Reducir procesos visualizados pertenecientes a un usuario específico Matar un proceso (enviar una señal a un proceso) renice un proceso Los últimos dos comandos. el teclado está "vivo".0 0.02.0 0 0 0 0 SW 0.9 0. 1 running.4 0 108 76 52 S 0. 22436k free.0 0 0 0 0 SW 0. 0 zombie. 88368k used.9 1.0 0.

Dentro del diálogo de Preferencias. los usuarios tratan de localizar información acerca de procesos identificados por el comando que están ejecutando o el usuario que está ejecutándolos. maxwell primero busca todas las instancias del demonio sshd y luego busca los procesos pertenecientes al usuario maxwell. Figure 3. el entorno de escritorio de GNOME proporciona una aplicación similar en función a top con los beneficios (y problemas) de una aplicación gráfica. Se ejecuta para iteraciones N. Se ejecuta en "modo por lote" simplemente como si escribiera a una terminal tonta. el Monitor de Sistema provee un segundo panel. A menudo. ID de proceso. Campos de configuración en el monitor de sistema GNOME Por último. La aplicación se puede iniciar desde una línea de comandos como gnome-system-monitor o desde el menú de aplicaciones predeterminado. En su configuración por defecto. luego sale. Figure 2. Monitor del sistema GNOME Al igual que el comando top. A continuación. Los procesos pueden clasificarse por cualquiera de estos campos con un sólo clic en el título de la columna. actualizando la lista cada pocos segundos. 344 . Panel del monitor de sistema GNOME Localización de procesos con el comando pgrep. el cual muestra gráficas de todo el uso de la CPU y de la memoria versus tiempo y un cuadro de uso del disco (esencialmente la salida del comando df). Cuando se hace click derecho en un proceso. tales como reniciar o matar un proceso a través de una interfaz más sencilla (y no tan flexible). Figure 4. el usuario puede establecer el intervalo de actualización (en segundos) y configurar muchos más campos para ser visualizados. Haciendo click derecho en un proceso en el Monitor del sistema GNOME El Monitor del Sistema puede configurarse abriendo el menú de selecciónEditor:Preferencias. la aplicación Monitor del sistema provee una interfaz mucho más simple: lista sólo los procesos pertenecientes al usuario que inició la aplicación y reduce el número de columnas a la memoria del comando del proceso. un menú emergente permite al usuario escoger entre desplegar todos los procesos pertenecientes al usuario (por defecto) o sólo los procesos en el estado de "ejecución". la aplicación Monitor del sistema presenta una lista de procesos ejecutándose en la máquina local. En la esquina superior derecha de la ventana.segundos -q -n N -b Actualiza tan pronto como sea posible. seleccionando Herramientas: monitor del sistema. un menú emergente permite al usuario realizar muchas de las acciones que top le permitió. Figure 1. Una técnica es listar todos los procesos y utilizar el comando grep para reducir la información. el propietario. las medidas simples de la memoria del proceso y la utilización de la CPU. Procesos de control con la aplicación gnome-system-monitor Si se ejecuta un servidor X.

2 2676 724 pts/8 R maxwell 2202 0.0 0.0 0. apareció un proceso su 2. sino porque la palabra maxwell era uno se sus argumentos. A manera de ejemplo. se interpreta como un patrón de expresión regular extendido coincidente con nombres de comando. usuario. El comando pgrep fue creado para tratar estos problemas. 3. Opciones comunes para especificar el formato de salida pgrep Opción -d delimitador -l Efecto Usa delimitador para delimitar cada ID de proceso (por defecto se utiliza una nueva línea).3 89256 21232 pts/8 S maxwell 2201 0. Lista el nombre del proceso y el ID del proceso. pgrep [OPCIONES] [PATRÓN] Su argumento opcional. la siguiente opción puede utilizarse para modificar el formato de la salida del comando.4 4312 1268 pts/8 S maxwell 2146 1. Las siguientes opciones también pueden utilizarse para clasificar la búsqueda. si se suministra. Igualmente.0 3436 4 ? S maxwell 2200 0. Selecciona procesos pertenecientes al usuario USER.0 0. Opciones comunes para especificar el criterio de selección del proceso pgrep. Table 2.2 3572 640 pts/8 S [maxwell@station maxwell]$ ps aux | grep maxwell root 2109 0. El comando compuesto puede ser complicado de teclear. Para una lista completa de opciones consulte la página de manual pgrep(1).0 0. El método no es exacto.maxwell -bash /usr/lib/mozillaps aux grep maxwell Aunque maxwell puede encontrar la información que necesita hay algunos aspectos no muy agradables. Opción -n -u USER -t TERM Efecto Selecciona únicamente los procesos coincidentes iniciados más recientemente. terminal o grupo. 1. el comando grep suele aparecerse en la salida.4 8. pgrep permite a los usuarios listar rápidamente procesos por nombre de comando. Observe que. Además.3 4108 876 pts/8 S maxwell 2112 0. [1] 345 . Table 1. no porque le perteneciera a maxwell.0 0. en la segunda búsqueda. Selecciona procesos controlados por terminal TERM.[maxwell@station maxwell]$ ps aux | grep sshd root 829 0.2 3576 644 pts/8 S 09:13 10:10 10:05 10:05 10:05 10:10 10:10 0:00 /usr/sbin/sshd 0:00 grep sshd 0:00 0:00 0:04 0:00 0:00 su .0 0. maxwell repetirá dos listados del proceso anterior mediante el comando pgrep.

0 0.0 0.6 18424 1776 .0 1380 76 root 2 0.0 0.4 18356 3760 apache 5048 0.0 1416 136 maxwell 4220 0.1 2104 448 root 566 0. root 174 0.8 24464 2152 root 4213 0. [maxwell@station maxwell]$ ps -e u USER PID %CPU %MEM VSZ RSS root 1 0. el id de proceso y una estimación aproximada de la cantidad de CPU y memoria que el proceso está consumiendo como también el estado del proceso.0 0.0 1548 104 .[maxwell@station maxwell]$ pgrep -l sshd 829 sshd [maxwell@station maxwell]$ pgrep -lu maxwell 2112 bash 2146 mozilla-bin 2155 mozilla-bin 2156 mozilla-bin 2157 mozilla-bin Ejemplos Ver todos los procesos con el formato de "usuario orientado" En la siguiente transcripción.7 0..0 0.0 0 0 .0 0..0 0. (los estados de procesos se tratarán en una próxima lección).3 17024 1012 maxwell 4293 2.3 11596 988 maxwell 4212 0.1 16392 436 maxwell 4207 0.0 0.0 1448 160 root 570 0. maxwell 13166 0..2 2696 744 TTY ? ? ? ? tty2 ? ? ? ? ? ? ? ? ? ? ? ? ? pts/5 pts/5 STAT S SW SW SW S S S S S S S S S S S S S S S R START Oct12 Oct12 Oct12 Oct12 Oct12 Oct12 Oct12 Oct12 Oct12 Oct12 Oct12 Oct12 Oct12 Oct12 Oct12 Oct12 Oct12 Oct12 07:35 07:35 TIME 0:04 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:02 0:00 0:00 0:00 0:41 0:00 0:00 15:28 0:00 COMMAND init [ [keventd] [kapmd] [kjournald] /sbin/mingetty tt /sbin/dhclient -1 syslogd -m 0 klogd -x portmap nautilus --no-def magicdev --sm-cli eggcups --sm-clie pam-panel-icon -/usr/bin/python / /sbin/pam_timesta /usr/libexec/noti gnome-system-moni /usr/sbin/httpd 0:00 -bash 0:00 ps -e u El "usuario orientado"muestra el usuario que está ejecutando el proceso. Ver los procesos de un usuario con el formato "largo" 346 .5 16784 1500 maxwell 4210 0.3 57948 3400 maxwell 4204 0.0 0.0 0.0 0 0 root 3 0.0 1376 164 rpc 588 0.0 0..0 0.1 0.0 0.0 1.0 0..0 0.0 0 0 root 250 0.4 1.0 1356 4 root 496 0.. maxwell 4202 0.0 0. maxwell utiliza el comando ps -e u para listar todos los procesos (-e) con el formato de "usuario orientado" (u).5 4304 1392 maxwell 13200 0.

[maxwell@station maxwell]$ ps -C bash j PPID PID PGID SID TTY TPGID STAT 1184 2311 2311 2311 pts/4 2311 S 1184 2565 2565 2565 pts/0 2565 S 1184 2757 2757 2757 pts/2 2757 S 1184 3024 3024 3024 pts/3 3052 S 1184 3348 3348 3348 pts/6 3348 S 1184 6033 6033 6033 pts/5 13414 S 1184 6534 6534 6534 pts/8 6534 S 13163 13166 13166 6033 pts/5 13414 S UID 2291 2291 2291 2291 2291 2291 2291 515 TIME 0:01 0:04 0:00 0:00 0:00 0:00 0:00 0:00 COMMAND bash bash bash bash bash bash bash -bash El formato de trabajo orientado se enfoca en los procesos padre. Muchos de estos conceptos se discutirán más tarde en otros cuadernos. Ver un comando determinado con el formato "trabajo orientado" En la siguiente transcripción. maxwell utiliza el comando ps -U maxwell l para listar todos sus procesos (-U maxwell) con el formato "largo " (l). los cuales se tratarán más adelante.En la siguiente transcripción. maxwell utiliza el comando ps -C bash j para listar todas las instancias del comando bash (-C bash) con el formato de "trabajo orientado" (j). grupos de sesión y terminales de control. Intrigado porque el proceso padre de muchas de estas shells parece ser el proceso ID 1184. grupos de proceso. 347 . tales como la prioridad y el niceness del proceso. [maxwell@station maxwell]$ ps -U maxwell l F UID PID PPID PRI NI VSZ RSS WCHAN 4 515 4132 1062 15 0 18632 4 schedu 1 515 4175 4132 15 0 3068 72 schedu 0 515 4180 1 15 0 11384 776 schedu 0 515 4182 1 15 0 6364 4 schedu 0 515 4184 1 15 0 17336 4 schedu 0 515 4193 1 15 0 3728 620 schedu 0 515 4196 1 15 0 12816 1884 schedu 0 515 4200 1 15 0 21160 3340 schedu 0 515 4202 1 15 0 57948 3192 schedu 0 515 4204 1 15 0 16392 424 schedu 0 515 4207 1 15 0 16784 1348 schedu 0 515 4210 1 15 0 11596 908 schedu 0 515 4212 1 15 0 24464 2152 schedu 0 0 4213 4210 15 0 1416 136 schedu 0 515 4220 1 15 0 17024 756 schedu 0 515 4293 1 15 0 18356 3760 schedu 4 515 13166 13163 15 0 4304 1388 wait4 0 515 13201 4193 25 10 6676 2592 schedu 0 515 13265 13166 20 0 3140 1188 - STAT S S S S S S S S S S S S S S S S S SN R TTY ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? pts/5 ? pts/5 TIME 0:02 0:00 0:00 0:00 0:00 0:00 0:08 0:05 0:02 0:00 0:00 0:00 0:43 0:00 0:00 15:43 0:00 0:00 0:00 COMMAND /usr/bin/gnom /usr/bin/ssh/usr/libexec/ /usr/libexec/ gnome-setting xscreensaver /usr/bin/meta gnome-panel nautilus --no magicdev --sm eggcups --smpam-panel-ico /usr/bin/pyth /sbin/pam_tim /usr/libexec/ gnome-system-bash pulsar -root ps -U maxwell El formato largo se enfoca en parámetros de programación. maxwell continúa examinando ese proceso individual.

.[maxwell@station maxwell]$ ps u 1184 USER PID %CPU %MEM VSZ RSS TTY einstein 1184 0. [maxwell@station maxwell]$ ps -e -o alarm. Utiliza la opción -o para listar todas las alarmas pendientes y comandos. Ver procesos con el formato personalizado Intrigado por ver los aspectos que un proceso puede visualizar con el comando ps. maxwell utiliza ps L para listar los posibles encabezados. [maxwell@station maxwell]$ ps -e -o alarm.misc 3600 /usr/sbin/sshd 3600 sendmail: accepting connections 3600 sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue 300 /usr/bin/gdm-binary -nodaemon 10. Observando que todas las entradas "interesantes" comienzan con números..00 /usr/bin/ssh-agent /etc/X11/xinit/Xclients 10. [maxwell@station maxwell]$ ps L %cpu %CPU %mem %MEM alarm ALARM args COMMAND blocked BLOCKED bsdstart START bsdtime TIME c C .00 /usr/bin/ssh-agent /etc/X11/xinit/Xclients 348 .init [ ..[kapmd] . 30.cmd | grep "^ *[0-9]" 30.2 3.00 syslogd -m 0 . maxwell desea ver los procesos que tienen alarmas pendientes. vsize VSZ vsz VSZ wchan WCHAN Intrigado por el campo alarm.00 /usr/sbin/automount --timeout 60 /misc file /etc/auto..00 syslogd -m 0 15.[keventd] . maxwell utiliza el comando grep para reducir su salida a líneas que comienzan con cualquier número o espacio pero cuyo primer caracter de no espacio sea un dígito. todas las shells bash se iniciaron desde dentro de una gnome-terminal.cmd ALARM CMD ...3 26900 8660 ? gnome-te STAT START S Oct12 TIME COMMAND 2:51 /usr/bin/ Aparentemente.

1. lo que implica que está en estado de ejecución o dormido.2 7. 4. Inicie el comando top en una terminal y déjelo ejecutando mientras califica su ejercicio. cada hora. Especificaciones Con el fin de tener un conjunto fijo de procesos para examinar. Almacene la respuesta como un sólo número en el archivo ~/nroot.txt.0 27856 7792 ? S Oct12 0:11 /usr/bin/python Utilice su archivo de snapshot para contestar las siguientes preguntas.txt que contiene la columna extraída de los estados de proceso. [student@station student]$ ps aux | head -1 > snapshot [student@station student]$ ps aux | tail +2 | sort -rn -k4 >> snapshot [student@station student]$ head -5 snapshot USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND einstein 3057 0. El archivo ~/biggest.txt. Experimente con el comando cut. 3.txt que contiene el número de instancias del programa /sbin/mingetty ejecutándose en su máquina. para determinar la cantidad de procesos en ejecución como usuario root.pid almacene el ID de proceso del proceso con el mayor tamaño de 2. El archivo ~/pstates. eliminando el encabezado y clasificando el resto de la salida de acuerdo al tamaño de la memoria virtual de cada proceso.Estas son las utilidades que piden ser notificadas cada 15 minutos. Grabe esta columna extraída (a excepción del encabezado) dentro de un archivo llamado ~/pstates.4 97088 18932 ? S Oct12 2:01 /usr/bin/galeonroot 1063 14.2 36528 15936 ? S Oct12 163:48 /usr/X11R6/bin/X einstein 1184 0. Utilice el comando grep. hasta que pueda extraer la letra inicial de la columna del campo STAT..3 6. La lista clasificada de procesos se agregará luego al encabezado previamente capturado en el archivo snapshot. memoria virtual (la columna VSZ). 2. Es más fácil de lo que parece. 349 . Luego vuelva a ejecutar el comando ps aux. El archivo ~/nmingetty. Utilice el comando grep.pid que contiene el ID de proceso del proceso con la memoria virtual más grande. quizás con el comando wc. quizás con el comando wc para determinar el número de instancias en ejecución del programa /sbin/mingetty. 5. En el archivo ~/biggest. etc.txt. No modifique ni suprima su archivo snapshot hasta no haber terminado de calificar su ejercicio. Almacene la pregunta como un sólo número en el archivo ~/nmingetty. presumiblemente para sondear alguna actividad. a excepción de la línea de encabezado. Esta estará llena casi exclusivamente de letras “R” y “S”. 3. Ejercicios en línea Lab Exercise Objetivo: Ver la información sobre los procesos Tiempo estimado: 20 minutos. Utilice la siguiente secuencia de comandos para capturar primero los encabezados de las columnas del comando ps aux dentro de un archivo llamado snapshot. usted debe tomar una instantánea de todos los procesos actuales en su máquina.8 27160 9868 ? S Oct12 3:00 /usr/bin/gnome-t einstein 1164 0.2 3. Deliverables A title Question 1 1.0 3.

El archivo ~/nroot. 350 .4.txt que contiene el número de procesos ejecutándose como el usuario root de la máquina.

Inmediatamente después de una bifurcación. Discussion Ciclo de vida de un proceso Cómo se inician los procesos En Linux (y Unix). La ascendencia del proceso puede verse con el comando pstree. Cuando un proceso muere. Todos los demás procesos son el resultado de un proceso padre que se duplica o bifurca. los procesos pueden crearse sin ejecutar un nuevo comando y los nuevos comandos pueden ejecutarse sin crear un nuevo proceso. Los procesos siempre pueden encontrarse en uno de los cinco estados: ejecutable. Creación de un nuevo proceso (forking) Los nuevos procesos se crean mediante una técnica llamada forking. Los nuevos comandos suelen ejecutarse mediante un proceso (a menudo una shell) primero mediante una bifurcación y luego ejecutando un nuevo comando. dormido involuntario. un fork suele implementarse mediante una estructura similar a la siguiente: 351 . copias idénticas de los parámetros del padre. Cuando un proceso se bifurca. dormido voluntario. El hijo hereda una copia idéntica de la memoria del proceso original. el primer proceso. Este mecanismo se conoce como el mecanismo fork y exec.Estados del proceso Conceptos clave • • • • • • • En Linux. detenido o zombi. Un proceso comienza a ejecutar un nuevo comando a través de un proceso llamado execing. Cuando un padre muere antes que sus hijos. el primer proceso hereda los huérfanos (usualmente /sbin/init). tales como el directorio de trabajo actual o umask. /sbin/init. los archivos abiertos de padre. Como un aparte rápido para los programadores en la audiencia. para los principiantes). lo inicia el kernel en el arranque. y (para los programadores en la audiencia) el valor de retorno de la llamada al sistema fork(). la creación de proceso y la ejecución de comandos son conceptos separados. crea un duplicado de sí mismo. Aunque un nuevo proceso es creado para que pueda ejecutarse en un comando especificado (tal como la shell bash creando un proceso para ejecutar el comando chmod). a diferencia de muchos otros sistemas operativos. el proceso recién creado (el hijo) es un duplicado exacto del proceso original (el padre). La única diferencia entre el padre y el hijo es la información heredada del hijo (el hijo tiene un ID de proceso diferente y un proceso de padre diferente. el padre del proceso debe recolectar su información del código de retorno y del uso de recursos.

la llamada execl(. Si por la misma razón execl(.int rc. el hijo puede ahora salir a hacer cualquier cosa que hubiera empezado a hacer (que suele involucrar exec(). Para el proceso original (el padre). El proceso escribe la llamada execl(. En su lugar. rc = fork(). Ejemplos incluyen demonios de red. el nuevo comando todavía es el mismo proceso. Si todo sale bien. } Cuando un proceso desea crear un nuevo proceso. do_parent(child_pid). rc = execl("chmod". perror("bad exec"). el proceso actual borra y libera la mayoría de sus recursos y carga una nueva colección de instrucciones desde el comando especificado en el sistema de archivos. Apenas olvida su comando anterior y adopta uno nuevo. Cuando se ejecuta un nuevo comando. la ejecución se realiza en el punto de entrada (por ejemplo. el 352 . if (rc == -1) { perror("bad fork")... el valor de retorno es 0. } else if (rc == 0) { do_child(). De nuevo para algunos programadores. mientras el padre retorna para escuchar nuevos clientes. Ejecución de un nuevo comando (Execing) Los nuevos comandos se ejecutan a través de un técnica llamada execing (acortamiento en inglés para executing).. Ejemplos incluyen al comando login. Para el proceso recién creado (el hijo). la ejecución de un nuevo comando se realiza mediante una o varias variantes de la llamada al sistema execve() tal como la llamada de la biblioteca execl(). acude al sistema de llamado fork() (sin argumentos).) nunca retorna. especificando el nuevo comando que se va a ejecutar. Otros programas podrían utilizar exec sin bifurcación. La ejecución inicia con el punto de entrada del nuevo programa. Combinación de dos: Fork y Exec Algunos de los programas pueden utilizar fork sin ejecutar un nuevo comando. Después de utilizar ejecutar un nuevo comando. la umask y el directorio actual de trabajo). el valor de retorno es el ID del proceso de hijo. Al bifurcar este valor.) retorna.). main()) del nuevo programa. dos procesos retornan. Tiene el mismo ID de proceso y muchos de los mismos parámetros (tales como su utilización de recursos.. } else { child_pid = rc.. child_pid.. ver lo siguiente) y el padre puede continuar haciendo sus cosas. Aunque sólo un proceso entra en el llamado fork(). que bifurcan un nuevo hijo para manejar una conexión de un cliente específico. debe ser un error (tal como no poder localizar el ejecutable del comando en el sistema de archivos). "chmod 755 /etc/passwd").

353 . Todos los otros procesos son iniciados porque se bifurcó un proceso ya existente.cual se convierte en la shell de inicio de sesión del usuario después de confirmar la contraseña del usuario. [maxwell@station maxwell]$ pstree init-+-apmd |-atd |-automount |-battstat-applet . la shell bash primero bifurca una nueva shell bash. el cual puede examinarse con el comando pstree.[1] Debido a que cada proceso a excepción del primero se crea por bifurcación... Luego. fork y exec suelen ir de la mano. dentro de los procesos existe un linaje bien definido de relaciones padre e hijo. el hijo ejecuta el nuevo comando apropiado. una de las responsabilidades del sistema del Kernel de Linux es iniciar el proceso por primera vez (usualmente/sbin/init). mientras que el padre espera que el hijo muera para generar un nuevo intérprete de comandos. para las shells en particular.. Cuando se ejecuta un comando.. El linaje de los procesos (y el comando pstree) Tras el arranque del sistema. |-evolution-execu |-evolution-mail |-fetchmail |-galeon-bin |-gconfd-1 |-2*[gconfd-2] |-gdm-binary-+-gdm-binary-+-X | | `-gnome-session---ssh-agent | `-gdm-binary---gnome-session---ssh-agent |-2*[gnome-panel] |-2*[gnome-settings-] |-gnome-system-mo |-gnome-terminal-+-3*[bash] | |-bash---man---sh---sh---less | |-bash---mutt | |-bash---su---bash---pstree | `-gnome-pty-helpe |-gpm |-gvim |-httpd---11*[httpd] |-kapmd |-keventd |-khubd . El primer proceso iniciado por el kernel inicia fuera del árbol de familia. Sin embargo.

todos sus recursos se liberan. por ejemplo. ¿Sabe cómo deshacerse de zombis de larga vida utilizando las claves tratadas en esta sección? Los 5 estados del proceso La sección anterior trató la manera como se inician y mueren los procesos. Comienzan procesos hijos pero nunca regresan a limpiar lo que dejan. El siguiente listado muestra los cinco estados. Hemos mencionado anteriormente que los procesos dejan atrás un código de estatus cuando mueren (también llamado valor de retorno) en la forma de un número entero. el proceso hijo se encuentra en un estado especial conocido como Zombi. ¿qué sucede si el padre muere antes que el hijo? El hijo queda huérfano. es responsabilidad de la shell bash padre recoger el valor de retorno del comando cerrado chmod. a excepción del código de retorno (y alguna información de utilización de recursos contables). Es responsabilidad del padre del proceso coleccionar esta información y liberar los últimos recursos del hijo muerto. dejando para más adelante la discusión acerca sobre la señales. Aquí tratamos la salida normal del proceso. Padres negligentes y zombis de larga vida Ocasionalmente. (recuerde la shell bash que utiliza la variable $? para almacenar el valor de retorno del comando ejecutado previamente). Por ejemplo. los procesos padres pueden ser descuidados. Mientras los procesos están vivos. top y otros comandos para identificar el estado actual de un proceso. y el momento en que su padre recoge su valor de retorno. Cuando un proceso sale. siempre están en uno de los cinco estados del proceso. Mucha gente dirá que no hay forma de deshacerse de ellos. cuando la shell se bifurca y exec el comando chmod. junto con la letra convencional utilizada por ps. Zombis Entre el momento en que un proceso sale. excepto volviendo a arrancar la máquina.Cómo muere un proceso Cuando un proceso muere ya sea que muera normalmente seleccionando exit o anormalmente como el resultado de recibir una señal. Huérfanos Si es responsabilidad de los padres limpiar después de sus hijos. entrar en estado zombi y quedarse ahí. Esto suele suceder cuando los usuarios son testigos de procesos zombis mediante el comando ps. 354 . (observe que en la salida del comando pstree. pero no ocupan memoria. Una de las responsabilidades especiales del primer proceso iniciado por el kernel es "adoptar" huérfanos. por ejemplo) para ver un zombi. los cuales efectúan el cómo y cuándo tienen acceso a la CPU. el hijo puede salir. Cada proceso pasa a través de un estado transitorio zombi. liberando el resto de sus recursos. liberando la mayoría de sus recursos. Ellos son sólo la sombra de un proceso anterior esperando que su padre llegue y los termine. Cuando esto ocurre (usualmente debido a un error de programador). el primer proceso tiene un número desproporcionado de hijos. ni ningún otro sistema de recursos. Deshacerse de zombis es quizás el concepto básico más incomprendido de Linux (y Unix). Ellos se aparecen en la lista de procesos. ni tiempo de CPU. La mayoría de estos fueron adoptados como huérfanos de otros procesos). Los usuarios tienen que estar mirando justo en el momento preciso (con el comando ps.

los usuarios no suelen ver los procesos en dormido involuntario. Como resultado. dos procesos tratan de acceder el mismo recurso de sistema al mismo tiempo. Por lo general. parece como si todos los procesos se estuvieran ejecutando de manera simultánea. Mientras espera que pasen los cinco segundos. un proceso trata de leer de un bloque o un disco mientras que el bloque está siendo escrito debido a otro proceso. Un ejemplo clásico es el demonio de red httpd. En medio de solicitudes de un cliente (navegador de red). Dormido involuntario (no interrumpible) (D) En ocasiones. no suelen estarlo por mucho tiempo. un proceso que está dormido voluntario ha elegido estar así. y elige irse a dormir. excepto en sistemas ocupados. Los procesos zombis han terminado de ejecutar. Aunque los procesos están constantemente durmiendo involuntariamente. los usuarios deciden suspender procesos. En programación. se duerme voluntariamente. Dado que no están consumiendo recursos. Los procesos múltiples suelen estar en un estado de ejecución. 355 . son poco más que una molestia que puede aparecer en listados de procesos. los depuradores suelen suspender los programas que están depurándose cuando ciertos eventos suceden (como cuando se producen puntos de interrupción). el kernel fuerza al proceso a dormir. algunos se quedan en ese estado. En estas situaciones. Cuando el recurso es liberado.Ejecutable (R) Los procesos en un estado ejecutable son procesos que si tienen la oportunidad de acceder la CPU. pero como sólo puede ejecutarse un proceso en la CPU en determinado tiempo. la aprovecharían. el proceso dormido vuelve al estado ejecutable. en ocasiones. [1] Dormido voluntario (interrumpible) (S) Como el nombre lo implica. Puesto que los procesos de ejecución entran y salen de la CPU tan rápidamente en el sistema de Linux. Por ejemplo. el servidor no tiene nada que hacer. han liberado toda su memoria y casi todos sus recursos. el kernel pondrá el proceso de nuevo en su estado ejecutable. cada proceso muriendo pasa a través de un estado zombi transitorio. Procesos zombi (Z) Como lo mencionamos antes. este es un proceso que no tiene nada que hacer hasta que suceda algo interesante. Cuando el proceso esté interesado en que algo suceda (tal como cuando el cliente de red hace una solicitud o los cinco segundos expiran). el cual es un proceso que implementa un servidor de red. El proceso no eligió dormir. que lista procesos cada cinco segundos. éste hubiera preferido ser ejecutable para poder hacer las cosas. En la shell bash. Otro ejemplo sería el comando top. la secuencia de teclas CONTROL-Z puede utilizarse para suspender un proceso. sólo uno de estos procesos en realidad estará ejecutándose en un momento dado. Los procesos suspendidos no realizarán ninguna acción hasta no ser reiniciados por el usuario. No obstante. Procesos detenidos (suspendidos) (T) Ocasionalmente.

los estados de procesos suelen enumerase bajo el encabezado STAT. Ejercicios en línea Especificaciones 1.Ver estados de procesos Cuando se ve la salida de comandos tales como ps y top. Un proceso detenido. El proceso init está esperando que algo "interesante" suceda tal como un huérfano recién creado a heredar.D Zombi . Un proceso zombi probablemente abandonado por un navegador de red galeon negligente. El comando updatedb está compitiendo por algún recurso en el sistema probablemente con la otra instancia del proceso updatedb justo debajo de éste.T Dormido ininterrumpible .sh y hágalo ejecutable. Un proceso ejecutable en este caso el comando ejecutable ps.Z Ejemplos Identificación de estados de procesos [maxwell@station F UID PID 100 0 1 100 500 4248 100 500 4292 004 0 1829 004 0 1827 000 500 4333 000 500 4334 004 501 5486 000 501 5793 000 501 5798 040 501 5799 000 501 5800 000 501 5801 maxwell]$ ps -alx PPID PRI NI VSZ RSS WCHAN 0 15 0 1344 436 schedu 775 15 0 4136 1412 wait4 776 15 0 4144 1420 schedu 1774 17 0 1472 528 down 1774 16 0 1464 520 4292 15 0 7612 2616 do_sig 4248 15 0 3612 1052 schedu 1220 16 0 0 0 do_exi 2600 15 0 7708 2816 wait4 5793 16 0 3804 944 wait4 5798 17 0 3808 1000 wait4 5799 17 0 3148 1240 5799 17 0 3144 420 pipe_w STAT S S S D R T S Z S S S R S TTY ? tty3 tty4 pts/3 pts/3 tty4 tty3 ? pts/0 pts/0 pts/0 pts/0 pts/0 TIME COMMAND 0:06 init 0:00 -bash 0:00 -bash 0:00 updatedb 0:00 updatedb 0:00 vim proj1_s 2:57 top 0:00 [netstat 0:00 vim c 0:00 /bin/bash 0:00 /bin/bash 0:00 ps -alx 0:00 tail Un proceso dormido (voluntario). Este editor vim probablemente ha sido suspendido manualmente con la secuencia de teclas CONTROL-Z. 356 .S Detenido .R Dormido . El proceso es identificado por una de las siguientes letras: • • • • • Ejecutable . almacénelo como ~/clobber_it. Utilice un editor de texto sencillo para crear el siguiente guión. Un proceso dormido(involuntario) o "bloqueado". Con el fin de explorar los estados de procesos debemos crear procesos que estén compitiendo por los mismos recursos.

If things get unbearable. or a separate virtual console).sh #!/bin/bash for i in $(seq 1000). 9. run the command top -d1.sh & done 3. Deliverables A title 1. do . Aún no hemos dicho que empiece.txt que contiene la salida del comando ps aux con al menos 5 instancias del proceso en el estado “D” (ininterrumpible). This will start about 1000 processes on your machine. observe la terminal con el comando top.txt y de sentir que ha entendido. the script can be canceled with a CTRL-C. puede cancelar el script clobber_it_lots..[maxwell@station maxwell]$ cat clobber_it. but it should be able to handle it. ejecute el comando ps aux y redirija la salida al archivo ~/lotsa_processes. While top is running. do echo "hello world" > poor_overworked_file done 2. Aún no hemos dicho que empiece. en otro terminal. When we say go. Usted debería ver muchos procesos iniciándose y deteniéndose como también muchos procesos en el estado “D”. We haven't said go yet. 4. it should still be responsive. In one terminal. También mientras se esté ejecutando el script. Esto debería funcionar. El archivo ~/lotsa_processes. [1] The system may seem sluggish. which will obviously stress the system. Aunque este guión escribirá al pobre archivo sobrecargado 1000 veces. Mientras el guión esté ejecutándose. This should run the top command.sh. updating continuously.sh y hágalo ejecutable. 357 .sh con la secuencia CONTROL-C y abandone el comando top.sh #!/bin/bash for i in $(seq 1000). run the script clobber_it_lots./clobber_it. 6. in a separate terminal (either another terminal window in an X graphical environment. 7. use the U command to limit the display to your own processes (i. 8. but with patience.txt. lo hará de forma secuencial y así nunca estará compitiendo por acceder al archivo. 5. [maxwell@station maxwell]$ cat clobber_it_lots. Nómbrelo ~/clobber_it_lots. Dado que necesitamos procesos múltiples compitiendo por el mismo recurso.e. Observe el contenido del script y asegúrese que al menos cinco procesos en el estado “D” hayan sido registrados. cree también el mismo script. ¡Empiece! Después de crear su archivo ~/lotsa_processes. type in your own username). podría capturar incluso un zombi. Si tiene suerte.

(los procesos se pueden ejecutar en segundo plano agregando el signo “&”). El primero es un valor dinámico que el kernel cambia constantemente.Programación de procesos: nice y renice Conceptos clave • • • Una tarea primaria del kernel de Linux es la programación de procesos. [maxwell@station [1] 6698 [maxwell@station [2] 6699 [maxwell@station [3] 6700 [maxwell@station [4] 6701 maxwell]$ cat /dev/zero > /dev/null & maxwell]$ cat /dev/zero > /dev/null & maxwell]$ cat /dev/zero > /dev/null & maxwell]$ cat /dev/zero > /dev/null & ¿Por cuánto tiempo se ejecutarán estos comandos cat? Para siempre. El segundo. maxwell iniciará cuatro versiones del comando cat. Los comandos cat leen desde /dev/zero (un seudo dispositivo que actúa como una fuente infinita de ceros binarios) y escriben en /dev/null (un seudo dispositivo que bota todo lo que se escribe en él). En lo posible. como se discutirá en una lección más adelante. ejecutándose en el segundo plano. Discussion Nomenclatura de programación de procesos Una de las tareas fundamentales del kernel de Linux es asegurar que los procesos compartan recursos del sistema de manera efectiva. 358 . se ha prestado mucha atención a los métodos utilizados por el kernel de Linux para implementar programación y la técnica ha variado con cada lanzamiento del kernel. Uno de los recursos más importantes que tiene que compartirse es la CPU. Cada proceso tiene un valor de niceness que influye en su programación. En la comunidad de código abierto. este texto tratará de ser consistente con los comandos ps y top y se referirá al primer valor (dinámico) como la prioridad del proceso y al segundo valor (fijo) como el niceness del proceso. Los comandos nice y renice pueden cambiar la prioridad de programación de un proceso. Aunque la siguiente discusión no es correcta en detalle comunica en esencia la forma como el kernel de Linux programa procesos. El usuario maxwell controla los procesos en su máquina mediante el comando top. Programación de procesos en esencia Recientemente. Para ilustrar la programación de un modo más fácil. Cada proceso tiene dos valores que influyen en su programación. la nomenclatura utilizada para describir estos dos valores ha sido inconsistente lo que lleva a la confusión. es un valor fijo que sólo de vez en cuando el usuario lo cambia. La forma en que el kernel decide qué proceso tiene que ejecutarse en la CPU y la hora se conoce como programación.

restados de 40. muy probablemente tendría más contadores que procesos ejecutándose por un tiempo y le gustaría que fueran programados rápidamente en la CPU.2% system 4.7 16. Eventualmente. 145148k used. iniciando en 0 por defecto. 33644k in_d. 162724k actv. 0k shrd. En la salida de arriba. si un proceso dormido se despertara de repente (porque algo interesante ha sucedido) y fuera enviado al estado ejecutable.02. Proceso niceness Como se mencionó anteriormente. 5.00:25:43 up 11:07.01 128 processes: 121 sleeping. ¿Cómo influye un niceness de un proceso en su programación? Al comienzo de la programación puede pensar que el kernel resta un valor de niceness del proceso del número de contadores del proceso que se le ha asignado. Prioridades del proceso Cuando se programan los procesos..1 17. el proceso init que está durmiendo en el segundo plano. Como resultado de procesos más.1 19. La cuarta columna (con la etiqueta NI) es el valor fijo de "niceness" del proceso. están consumiendo sus contadores. 3952k in_c Swap: 522104k av.0 0.3 0. el kernel da a cada proceso un puñado de contadores.9 6.5% user 3.3 0.. USER PRI maxwell 25 maxwell 22 maxwell 24 einstein 21 maxwell 25 maxwell 35 maxwell 19 root 15 root 15 root 15 NI SIZE RSS SHARE STAT 0 404 400 352 R 0 400 400 352 R 0 400 372 352 R 0 25992 24M 3596 R 0 400 400 352 R 10 6608 4836 1108 R N 0 1120 1120 852 R 0 33304 16M 692 S 0 108 76 52 S 0 0 0 0 SW %CPU %MEM 19. ¿Cómo se relaciona esto con los valores demostrados en la columna PRI? Piense en esta columna como si fuera un número de procesos de contadores. Observe que los procesos que no están en estado ejecutable nunca entregan sus contadores.5 0. 0 zombie.0 83.0% iowait Mem: 255232k av. Estos son los valores de "prioridad" dinámicos del proceso mencionados anteriormente.4 0. 0 stopped CPU states: 8.4 1. los comandos cat. 10 users.9 0.0 0.8 2. no lo está. en constante ejecución. 376956k free PID 6698 6699 6700 6757 6701 6686 6758 1063 1 2 . Cuando decide qué proceso programar en la próxima CPU. el kernel escoge un proceso ejecutable con la mayoría de contadores. 3672k free.1 19. 7 running.8 1. los procesos con una prioridad inferior (como es listado por el comando top) tienen una ventaja en la programación. "amables" 359 . Este valor tiene un rango que va de -20 a 19 para cualquier proceso.6% nice 0. Por lo tanto. el kernel alcanzará un estado donde todos los procesos ejecutables han utilizado sus contadores. Sin embargo. cada proceso también tiene un valor estático conocido como su valor de niceness. entrega uno de sus contadores.5% idle 36592k buff 74780k cached TIME CPU COMMAND 0:24 0 cat 0:24 0 cat 0:24 0 cat 0:04 0 jade 0:24 0 cat 0:44 0 xlyap 0:00 0 top 33:56 0 X 0:04 0 init 0:00 0 keventd Mientras observa el comando top. Esto se conoce como el final de una programación epoch y en este punto el kernel inicia todos los procesos otra vez con un puñado de contadores.4 9. Cada vez que un proceso se programa en la CPU. load average: 6.08.0 0. maxwell observa que los valores en la tercera columna (con la etiqueta PRI) están en constante cambio.1 4.3 0. 251560k used. Sin embargo. 3.

con el valor de +19. Cuando maxwell inicia su simulación (la cual es un ejecutable en su directorio de inicio llamado ~/simulation) lo hace lo más nice posible. Dado que otros comandos cat están utilizando la máquina.1 0:02 4293 maxwell 15 0 5164 5016 2384 S 1. Uso del comando nice para iniciar un comando con prioridad baja El comando nice se utiliza para establecer un valor de niceness del proceso al iniciar el proceso.1 0:35 1184 einstein 15 0 11140 8708 3144 R 4. maxwell se deshace de los comandos cat (mediante las técnicas que veremos en la siguiente lección).9 6:07 COMMAND 0 cat 0 cat 0 cat 0 cat 0 gnome-termina 0 simulation 0 gnome-system- Como algo conveniente.1 0:35 7191 maxwell 25 0 400 400 352 R 21.1 % de la CPU.1 0. PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU 7192 maxwell 25 0 400 400 352 R 22. Cambio del valor niceness de un proceso Suponga que maxwell fuera a ejecutar una simulación física que le tomaría varios días completar. (también coloca el proceso en segundo plano. Hay varias técnicas por las cuales maxwell podría alterar su valor de niceness del proceso. la simulación física tendría acceso total a la CPU. la simulación de maxwell sólo está usando cerca del 2. mientras que procesos más "ambiciosos" (aquellos con un valor de niceness menor que 0) obtienen más contadores y más tiempo en la CPU./simulation & Observe que la sintaxis puede confundir.7 3.4 1:28 7198 maxwell 39 19 404 404 352 R N 2.(aquellos con un alto valor de niceness) obtienen menos contadores y por lo tanto menos tiempo en la CPU.9 0. 360 . El usuario maxwell de nuevo controla los procesos mediante el comando top.7 1. No se preocupe por esto en este momento puesto que lo abarcaremos en una próxima lección).9 0. El símbolo -19 no debería considerarse negativo 19 sino en cambio la opción numérica 19.1 0:36 7194 maxwell 25 0 404 404 352 R 21. el proceso pacientemente esperaría si alguien más estuviera ejecutando procesos en la máquina. Al incrementar el valor de niceness del proceso. Si nadie más estuviera en la máquina. el comando ps representa el estado de proceso con una “N” para indicar que el proceso ha aumentado su valor de niceness.1 0:35 7193 maxwell 25 0 400 400 352 R 22.7 0. [maxwell@station maxwell]$ nice -19 . Luego. Si un proceso "amable" es el único ejecutándose en la máquina entonces obtendría acceso total a la CPU. Los primeros pocos procesos listados se enumeran a continuación.7 0.

[maxwell@station maxwell]$ killall cat [maxwell@station maxwell]$ [3] Terminated cat /dev/zero >/dev/null [4] Terminated cat /dev/zero >/dev/null [5] Terminated cat /dev/zero >/dev/null [6] Terminated cat /dev/zero >/dev/null Cuando observa el comando top una vez más.0 47:01 4212 maxwell 15 0 5828 3012 1072 S 0. si una shell estuviera ejecutándose con un valor de niceness de 10. ahora el (casi) único proceso en la máquina. está recibiendo todo el tiempo de la CPU.9 0. interpreta los argumentos restantes como ID de grupo.8 0.0 0. Los procesos pueden ser especificados por el ID del proceso. la siguiente opción de línea de comando resultaría en la simulación que está ejecutándose con un valor de niceness de 15. Table 1. o nombre de grupo. [maxwell@station maxwell]$ nice -5 .0 0:04 COMMAND 0 0 top 0 X 0 rhn0 init Como una sutileza adicional.9 1. nombre de usuario. el número especificado es el número que va a agregarse al valor de niceness de la shell actual. su simulación.9 7.4 0:00 1063 root 15 0 33516 17M 832 S 1./simulation & Uso de renice para alterar un proceso en ejecución El comando renice puede utilizarse para cambiar el niceness de un proceso en ejecución. Esto rara vez se nota.1 0:21 applet-gu 1 root 15 0 108 76 52 S 0. PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU 7198 maxwell 39 19 404 404 352 R N 94.1 0:51 simulation 7210 maxwell 20 0 1120 1120 852 R 2. [maxwell@station maxwell]$ ps -C simulation u USER PID %CPU %MEM VSZ RSS TTY STAT START maxwell 7348 58.4 0. dependiendo de cuál de las siguientes opciones se utilicen.1 3408 400 pts/5 R 01:29 [maxwell@station maxwell]$ ps -C simulation l F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY 0 515 7348 6064 25 0 3408 400 R pts/5 TIME COMMAND 0:50 simulation TIME COMMAND 0:51 simulation 361 . No obstante. dado que la mayoría de las shells se ejecutan con un niceness de 0. Suponga que maxwell ya ha iniciado su simulación sin alterar su valor de niceness. Opciones para el comando renice Opción -p -u -g Efecto interpreta los argumentos restantes como ID del proceso (por defecto) interpreta los argumentos restantes como nombres de usuarios.

renice -19 7347 sería interpretado como un valor de niceness de -19. 362 . Son los campos 5 y 6 de izquierda a derecha. [maxwell@station maxwell]$ renice 19 7347 7348: old priority 0. Esto trae dos implicaciones. el comando renice espera un valor de niceness y un ID de proceso como sus dos argumentos. "chmod 755 /etc/passwd"). Mientras controla procesos con top. Decide ser más cortés con otras personas que podrían estar utilizando la máquina y utiliza el comando renice para elevar el valor de niceness del proceso. 2. PID to renice: 7347 Renice PID 7347 to value: 19 Hacer procesos mucho más ambiciosos ¿Qué sucedería si maxwell fuera malintencionado y quisiera hacer su simulación mucho más ambiciosa en lugar de más amable? Afortunadamente. El comando renice a diferencia del comando nice. En la ausencia de cualquier opción. para otros usuarios en la máquina. el comando top utiliza la tecla r para cambiar el valor nice de un proceso. la salida del comando renice se refiere al valor como una prioridad en lugar de un niceness. perror("bad exec"). sino como un argumento. Ella pudo utilizar el comando renice como root para elevar el niceness de maxwell y maxwell no pudo restaurarlo.El proceso está recibiendo una gran cantidad de tiempo de la CPU. 1. new priority 19 Observe la inconsistencia en la sintaxis. De hecho. (como también lo hace alguna de la documentación relacionada). no espera que el valor de niceness sea especificado como una opción. los usuarios normales no pueden volverlo "normal" otra vez . El proceso tiene por defecto un valor de niceness de 0. Suponga que el administrador observó que la simulación de maxwell estaba tomando mucho tiempo de la CPU. los usuarios normales no pueden bajar el niceness de un proceso. Enlodando más las aguas. Debido a que los procesos inician con un niceness de 0 por defecto. Uso del comando top para otorgar otro valor de nice a un proceso Como se mencionó antes. Observe los campos "PRI" y "nice" a lo largo del tiempo. rc = execl("chmod". al presionar r abrirá el siguiente diálogo que aparece encima de la lista de procesos. Ejemplos Ver prioridades Abajo hay varias tomas de pantalla ps -alx a medida que se ejecuta el proceso. los usuarios normales no pueden hacer procesos "ambiciosos" con valores de niceness negativos. Una vez un proceso ha sido hecho nice.

000 501 2676 000 501 2739 000 501 2740 040 501 2741 000 501 2742 000 501 2743 .[maxwell@station [1] 2739 [maxwell@station F UID PID . [maxwell@station F UID PID . por el contrario. [maxwell@station maxwell]$ renice 0 2739 renice: 2739: setpriority: Permission denied Dado que a los usuarios estándar no se les permiten valores de niceness más bajos.. Luego.. 363 . El niceness. [maxwell@station [maxwell@station 000 501 2982 000 501 2739 000 501 3010 040 501 3011 000 501 3012 000 501 3013 maxwell]$ renice 5 2739 maxwell]$ ps -alx 898 15 0 4228 1544 schedu 2676 20 5 3248 576 2611 16 0 3804 948 wait4 3010 17 0 3808 1004 wait4 3011 17 0 3140 1228 3011 17 0 3140 416 pipe_w S RN S S R S pts/0 pts/0 pts/1 pts/1 pts/1 pts/1 0:00 bash 0:00 find / 0:00 /bin/bash 0:00 /bin/bash 0:00 ps -alx 0:00 tail Debido a que el valor de niceness se ha incrementado.. maxwell utiliza el comando renice para alterar el valor de niceness del proceso. el proceso tiene valores más altos de prioridad (implicando menos acceso a la CPU por una época de programación). 000 501 2676 000 501 2718 040 501 2719 000 501 2720 000 501 2721 000 501 2739 .. el comando falla. maxwell]$ find / 2>/dev/null >/dev/null & maxwell]$ ps -alx PPID PRI NI VSZ 898 2676 2611 2740 2741 2741 15 18 16 16 17 17 0 0 0 0 0 0 RSS WCHAN STAT TTY S S S R S R pts/0 pts/0 pts/1 pts/1 pts/1 pts/1 TIME COMMAND 0:00 bash 0:00 find / 0:00 /bin/bash 0:00 /bin/bash 0:00 ps -alx 0:00 tail 4232 1544 wait4 3284 644 3804 948 wait4 3808 1004 wait4 3144 1232 3144 420 pipe_w maxwell]$ ps -alx PPID PRI NI VSZ 898 2611 2718 2719 2719 2676 16 15 16 17 17 17 0 0 0 0 0 0 RSS WCHAN STAT TTY S S S R R R pts/0 pts/1 pts/1 pts/1 pts/1 pts/0 TIME COMMAND 0:00 bash 0:00 /bin/bash 0:00 /bin/bash 0:00 ps -alx 0:00 tail 0:00 find / 4232 1544 wait4 3808 944 wait4 3812 1000 wait4 3148 1232 3136 384 3248 576 - La prioridad del proceso find fluctúa con el tiempo. Cambiando de parecer. permanece fijo en 0.... El nuevo valor de niceness. maxwell decide restaurar el niceness a su valor predeterminado de 0..

new priority 5 [maxwell@station maxwell]$ ps -lu maxwell F S UID PID PPID C PRI NI ADDR SZ WCHAN 4 S 515 3031 3028 0 85 5 . el usuario maxwell puede cambiar los valores de niceness para todos los procesos al mismo tiempo.3313 schedu 0 S 515 8958 3031 0 80 5 .1078 wait4 0 R 515 8986 8958 0 86 5 779 - TTY pts/4 ? pts/4 pts/4 TIME 00:00:00 00:00:00 00:00:00 00:00:00 CMD bash gvim bash ps TTY pts/4 ? pts/4 pts/4 TIME 00:00:00 00:00:00 00:00:00 00:00:00 CMD bash gvim bash ps 364 . [maxwell@station maxwell]$ ps -lu maxwell F S UID PID PPID C PRI NI ADDR SZ WCHAN 4 S 515 3031 3028 0 75 0 .1078 wait4 0 R 515 8984 8958 0 83 0 779 [maxwell@station maxwell]$ renice 5 -u maxwell 515: old priority 0.Cambio de prioridades con renice Al utilizar la opción -u.1078 wait4 1 S 515 8954 1 0 79 0 .1078 wait4 1 S 515 8954 1 0 85 5 .3313 schedu 0 S 515 8958 3031 1 80 0 .

Ejercicios en línea Lab Exercise Objetivo: Cambiar las prioridades de los procesos. Ejecutar el siguiente comando en una terminal. cambie el valor de niceness del proceso cat (iniciado en el paso 1) a 10. Después de completar el último paso. Califique su ejercicio con ambas instancias del comando cat aún ejecutándose.Estimated Time: 10 mins. procesos que le pertenezcan hasta 5 (podría considerar el utilizar el comando pgrep junto con el comando xargs para este paso). utilice el comando renice para cambiar el valor de niceness de todos los 2. Especificaciones 1. 365 . Utilice el comando nice para iniciar otro comando cat (de nuevo leyendo /dev/zero redirigido a /dev/null) con el valor de niceness de 15. 3. Un comando cat ejecutándose con el valor de niceness de 10. Limpieza Cuando haya terminado de calificar su ejercicio puede detener todos sus procesos cat con la secuencia de control CTRL-C. Todos los otros procesos ejecutados por usted tienen un valor de niceness de 5. En otra terminal. [student@station student]$ cat /dev/zero > /dev/null 1. 2. 3. Un comando cat ejecutándose con el valor de niceness de 15. Deliverables A title Question 1 1.

incluyendo el kernel. el número de señal 15 (SIGTERM) se utiliza para solicitar la terminación de un proceso. El proceso receptor sabe muy poco acerca de los orígenes de la señal. las señales se conocen como interrupciones de software. y como un mecanismo primitivo de comunicación entre procesos. también pueden utilizarse para enviar señales. Los nombres simbólicos para los nombres de señales pueden listarse con el comando kill -l. Los diferentes sabores tienen números simbólicos pero también se identifican con números enteros. Otras utilidades. El kernel utiliza señales para notificar procesos de conducta anormal. una shell bash podría enviar una señal a un proceso xclock. Tras recibir una señal. Los varios números enteros y el nombre simbólico que les son asignados pueden listarse por medio del comando kill -l o los puede encontrar en la página del manual signal(7). Los comandos pkill y killall pueden utilizarse para enviar señales a procesos especificados por nombre de comando o el usuario a quienes pertenecen. 366 . Las señales se distinguen por los números de señales que tienen nombres y usos simbólicos. tales como top y el Monitor de sistema GNOME. un proceso puede ya sea. La señal número 9 (SIGKILL) termina un proceso y no puede anularse. hay diferentes sabores de señales. Discussion Señales Linux (y Unix) utiliza señales para notificar procesos de eventos anormales. Por ejemplo. todo lo que sabe es que recibió una señal. El comando kill envía señales a otros procesos. Algunas veces. porque pueden interrumpir el flujo normal de ejecución de un proceso. como si el proceso tratase de dividir un número por cero o tratase de acceder memoria que no le perteneciera.Envío de señales Conceptos clave • • • • • • • • Las señales son una forma de bajo nivel de la comunicación entre procesos que surgen de una variedad de recursos. Xclock recibe un señal número 15 de Bash Sin embargo. la terminal y otros procesos. Los procesos también pueden enviar señales a otros procesos. reaccionar de un modo especificado por defecto de kernel o implementar un manejador de señal personalizado. Figure 1. Convencionalmente. No sabe si la señal se originó del kernel o de algún otro proceso. ignorarla.

para poder responder a la nueva geometría. Otros procesos Los procesos pueden elegir enviar señales a cualquier otro proceso perteneciente al mismo usuario. el kernel envía un SIGCHLD (número de señal 17) al padre del proceso. Otro ejemplo. cada vez que muere un proceso. el kernel enviará un proceso SIGFPE (señal número 8) si realiza una división por 0. El comando kill está diseñado para hacer justo esto. Envíar señales: el comando kill 367 . las señales se numeran a partir de 32 hasta 63 (que no son estándar entre las varias versiones de Unix) y son señales en "tiempo real" y van más alla del objetivo de este texto. Interrupciones de terminal Varias secuencias de control de teclas de la terminal envían señales al proceso de la shell bash.[einstein@station einstein]$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 5) SIGTRAP 6) SIGABRT 7) SIGBUS 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 13) SIGPIPE 14) SIGALRM 15) SIGTERM 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 22) SIGTTOU 23) SIGURG 24) SIGXCPU 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 30) SIGPWR 31) SIGSYS 33) SIGRTMIN 35) SIGRTMIN+2 36) SIGRTMIN+3 37) SIGRTMIN+4 39) SIGRTMIN+6 40) SIGRTMIN+7 41) SIGRTMIN+8 43) SIGRTMIN+10 44) SIGRTMIN+11 45) SIGRTMIN+12 47) SIGRTMIN+14 48) SIGRTMIN+15 49) SIGRTMAX-15 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 63) SIGRTMAX-1 4) 8) 12) 17) 21) 25) 29) 34) 38) 42) 46) 50) 54) 58) 62) SIGILL SIGFPE SIGUSR2 SIGCHLD SIGTTIN SIGXFSZ SIGIO SIGRTMIN+1 SIGRTMIN+5 SIGRTMIN+9 SIGRTMIN+13 SIGRTMAX-14 SIGRTMAX-10 SIGRTMAX-6 SIGRTMAX-2 Linux. Por ejemplo. Por ejemplo. Excepciones de hardware El proceso le pidió al hardware realizar alguna operación errónea. al igual que varias versiones de Unix. implementa 32 señales "normales". CONTROL-C envía un SIGINT (número de señal 2) mientras que CONTROL-Z envía un SIGTSTP (número de señal 20). las aplicaciones gráficas X reciben un SIGCHLD (número de señal 17) cada vez que su ventana cambia de tamaño. ¿Por qué se envían las señales? Hay una variedad de razones por las cuales las señales se pueden enviar a un proceso como se ilustra con los siguientes ejemplos. Por ejemplo. Condiciones del software Los procesos pueden necesitar ser notificados de alguna condición anormal del software. En Linux.

El archivo core puede ser utilizado por desarrolladores para ayudar a depurar el programa. Escoger implementar un manejador de señal personalizado Los programadores pueden elegir implementar su propia conducta cuando se recibe una señal específica. el ID del proceso número 8060. las siguientes líneas de comando envían un SIGCHLD (número de señal 17) al proceso xclock. Recepción de señales Cuando un proceso recibe una señal puede realizar una de las siguientes tres acciones.El comando kill se utiliza para enviar señales a otros procesos. Escoja ignorar la señal Los programadores pueden elegir que su aplicación simplemente ignore señales especificadas. [einstein@station einstein]$ ps PID TTY TIME CMD 7985 pts/5 00:00:00 bash 8060 pts/5 00:00:01 xclock 8061 pts/5 00:00:00 ps [einstein@station einstein]$ kill -17 8060 [einstein@station einstein]$ kill -CHLD 8060 [einstein@station einstein]$ kill -SIGCHLD 8060 Cuando se utiliza el nombre simbólico para especificar una señal. • • • • Terminar: El proceso de recepción se cierra. pero bota una imagen de su memoria en un archivo llamado core en el actual directorio de trabajo del proceso. A cada señal se le asigna una de las siguientes conductas. La respuesta del programa es completamente determinada por el programador. 368 . Éste espera ser llamado con una opción numérica o simbólica que especifica la señal a enviar y un ID de proceso que especifica el proceso que debería recibirlo. A no ser que la documentación del programa diga lo contrario. el prefijo “SIG” (compartido por todas las señales) puede ser incluído u omitido. Implementar un manejador de señal predeterminado del kernel Para cada tipo de señal hay una respuesta predeterminada implementada por el kernel. La página de manual signal(7) documenta la conducta asignada para cada señal. A manera de ejemplo. Cualquier otra respuesta debe estar documentada. usted puede asumir que un proceso responderá con la conducta implementada de kernel. Ignorar: El proceso de recepción ignora la señal Núcleo: El proceso de recepción termina. [1] Pare: detenga o (suspenda) el proceso.

esta vez enviando un SIGKILL. Detiene (suspende) el proceso. Por convención. Esta es una señal generada por la secuencia de control CTRL-Z. etc). Esta es la señal generada por la secuencia de control CTRL-C. Table 1. Los usuarios estándar suelen utilizar señales para terminar un proceso (razón del nombre del comando kill).Uso de señales para terminar procesos De las 32 señales utilizadas en Linux (y Unix) los usuarios normales en práctica (explícitamente) sólo hacen uso de unas pocas. 369 . einstein iniciará un comando cat que en un principio se ejecutaría para siempre. A manera de ejemplo. Luego traza el ID del proceso del comando y termina con un SIGTERM. ellos implementan un manejador de señal personalizado de 15 para realizar la acción. la técnica de nivel de kernel para matar un proceso. por lo tanto einstein pudo haber utilizado kill 8375 para el mismo efecto. [einstein@station einstein]$ cat /dev/zero > /dev/null & [1] 8375 [einstein@station einstein]$ ps PID TTY TIME CMD 7985 pts/5 00:00:00 bash 8375 pts/5 00:00:01 cat 8376 pts/5 00:00:00 ps [einstein@station einstein]$ kill -15 8375 [einstein@station einstein]$ [1]+ Terminated cat /dev/zero >/dev/null SIGTERM (número de señal 15) es la señal por defecto para el comando kill. Fuerza el terminar el proceso (esta señal puede no ser anulada por el proceso) Solicita la terminación del proceso. einstein repite la secuencia. Este se reserva como un último recurso. A continuación. El número de señal 9 se maneja especialmente por el kernel y no puede anularse por un manejador de señal personalizado o ser ignorado. si los programadores quieren implementar la conducta personalizada cuando se apaga (como por ejemplo botando memoria importante al disco. Señales importantes para usuarios normales Número 2 9 15 20 Symbol SIGINT SIGKILL SIGTERM SIGTSTP Acción Interrumpe (solicita terminar) el proceso.

[einstein@station einstein]$ cat /dev/zero > /dev/null & [1] 8387 [einstein@station einstein]$ ps PID TTY TIME CMD 7985 pts/5 00:00:00 bash 8387 pts/5 00:00:01 cat 8388 pts/5 00:00:00 ps [einstein@station einstein]$ kill -9 8387 [einstein@station einstein]$ [1]+ Killed cat /dev/zero >/dev/null

Alternativas para el comando kill El uso de señales para controlar procesos es una ocurrencia tan común que las alternativas para usar el comando kill abundan. Las siguientes secciones mencionan unas cuantas. El comando pkill En cada uno de los ejemplos anteriores, einstein necesita determinar el ID de un proceso antes de enviar una señal a éste con el comandokill. El comando pkill se puede utilizar para enviar señales a procesos seleccionados por medios más generales. El comando pkill espera la siguiente sintaxis. pkill [-signal] [OPCIONES] [PATRÓN] El primer símbolo especifica opcionalmente el número de señal para enviar (por defecto, el número de señal 15). PATTERN es una expresión regular extendida que coincidirá con nombres de comandos. El siguiente cuadro lista las opciones de comando más utilizadas. Los procesos que cumplen con todos los criterios especificados enviarán la señal especificada. Table 1. Opciones para el comando pkill Opción -n -u USER -t TERM Efecto Selecciona únicamente los procesos coincidentes iniciados más recientemente. Selecciona procesos pertenecientes al usuario USER. Selecciona procesos controlados por terminal TERM.

De manera conveniente, el comando pkill se omite a si mismo y la shell que lo inició cuando mataba todos los proceso pertenecientes a un usurario particular o a una terminal. Considere el siguiente ejemplo.

370

[maxwell@station maxwell]$ ps PID TTY TIME CMD 10353 pts/4 00:00:00 bash 10396 pts/4 00:00:00 xclock 10397 pts/4 00:00:03 mozilla-bin 10422 pts/4 00:00:00 ps [maxwell@station maxwell]$ pkill -u maxwell [1]- Terminated xclock [maxwell@station maxwell]$ ps PID TTY TIME CMD 10353 pts/4 00:00:00 bash 10424 pts/4 00:00:00 ps [2]+ Exit 15 mozilla

Observe que aunque la shell bash se clasifica como un proceso perteneciente al usuario maxwell, ésta sobrevivió.

El comando killall Igual que pkill, el comando killall envía señales a procesos especificados por el nombre de comando. El comando killall soporta las siguientes opciones. Table 1. Opciones para el comando killall Opción -i, --interactive -w, --wait Efecto De modo interactivo pregunta al usuario antes de enviar la señal a un proceso. Espera hasta que todos los procesos estén muertos antes de retornar.

El Monitor del sistema La aplicación del Monitor de sistema GNOME, presentada en una lección anterior, también puede utilizarse para enviar señales a los procesos. Al hacer click derecho en un proceso, un menú emergente le permite al usuario seleccionar End Process, el cual tiene el efecto de entregar un SIGTERM al proceso. ¿Qué hace la opción del menú Matar proceso? Figure 1. Terminación de procesos mediante el monitor del sistema. El comando top El comando top puede también utilizarse para entregar señales a procesos. Al utilizar la tecla K, aparece el siguiente diálogo encima de la lista de procesos, permitiéndole al usuario especificar qué procesos ID deberían recibir la señal y qué señal entregar. PID to kill: 4859 Kill PID 4859 with signal [15]: 9

Ejemplos

371

Uso de señales para terminar procesos Las señales suelen ser la única forma de terminar procesos que están siendo manejados por una línea de comando de shell. Por ejemplo, los clientes (aplicaciones) gráficos X pueden matarse al entregar un SIGTERM al proceso apropiado. En el siguiente ejemplo, el usuario maxwell está ejecutando el navegador de red Mozilla y el reloj gráfico xclock. Utiliza el comando pgrep para localizar sus ID de procesos, mata el primero mediante el comando kill y el segundo mediante el comando pkill. [maxwell@station 2112 bash 2146 mozilla-bin 2155 mozilla-bin 2156 mozilla-bin 2157 mozilla-bin 2329 mozilla-bin 2597 xclock [maxwell@station [maxwell@station [1]- Exit 15 [2]+ Terminated [maxwell@station 2112 bash maxwell]$ pgrep -lu maxwell

maxwell]$ kill 2146 maxwell]$ pkill xclock mozilla xclock maxwell]$ pgrep -lu maxwell

Pero, ¡espere! Hay una forma diferente para terminar aplicaciones gráficas aparte del envío de señales. Solamente haga click en la casilla "cerrar" en la esquina superior derecha o seleccione Cerrar en menú desplegable en la esquina superior izquierda. Entre bastidores, esta es precisamente la labor de estas acciones: entregar una señal SIGTERM a una aplicación adjunta. Uso de señales para matar procesos Cada vez que sea posible la señal SIGTERM debería utilizarse para terminar procesos. Sin embargo, algunas veces, los procesos están "encerrados" y completamente insensibles, incluso para las señales SIGTERM. En estos casos, la señal SIGKILL (número de señal 9) puede utilizarse como un último recurso. La señal SIGKILL mata un proceso en el kernel sin ninguna interacción con el proceso mismo. A continuación, maxwell intenta terminar una simulación física (el proceso sim) con la señal por defecto SIGTERM. Por alguna razón, el proceso es insensible por lo tanto maxwell lo mata con la señal SIGKILL. [maxwell@station 2112 bash 4489 sim [maxwell@station [maxwell@station 2112 bash 4489 sim [maxwell@station [1]+ Killed [maxwell@station 2112 bash maxwell]$ pgrep -lu maxwell maxwell]$ pkill sim maxwell]$ pgrep -lu maxwell maxwell]$ pkill -KILL sim sim maxwell]$ pgrep -lu maxwell

372

¡Hágalo que pare! La combinación de la habilidad de pkill para seleccionar todos los procesos pertenecientes a un usuario particular, y la señal SIGKILL de bajo nivel letal, conforman una técnica conveniente para que un usuario mate todos los procesos que puedan estar ejecutándose en la máquina local. A continuación, maxwell observa primero cuántos procesos está ejecutando en la máquina local. Luego mata todos los procesos. [maxwell@station maxwell]$ pgrep -u maxwell | wc -l 22 [maxwell@station maxwell]$ pkill -KILL -u maxwell

Como resultado, maxwell se saca de la máquina (matando su propia sesión X o inicio de sesión de consola virtual) y debe iniciar sesión otra vez. Ejercicios en línea Lab Exercise Objetivo: Terminar la ejecución de procesos de manera efectiva.Estimated Time: 10 mins. Especificaciones

1. Crear un script corto de shell llamado ~/bin/kill_all_cats y hacerlo ejecutable. Cuando se
ejecute, el guión debería matar todos los procesos cat en ejecución.

2. En una terminal, iniciar un proceso cat mediante la siguiente línea de comandos. Deje el
proceso en ejecución mientras califica su ejercicio (pero no se sorprenda si no está en ejecución cuando termine). [student@station student]$ cat /dev/zero > /dev/null

Deliverables A title Question 1

1. Un script de shell llamado ~/bin/kill_all_cats que al ejecutarse, entregue una señal
SIGTERM a todas las instancias actuales en ejecución del comando cat. Un proceso cat en ejecución.

373

Control de trabajo Conceptos clave • • • • • • La shell bash permite a los comandos ejecutarse en segundo plano como "trabajos". La shell bash permite a un trabajo ejecutarse en segundo plano y puede tener múltiples trabajos en segundo plano. El comando jobs listará todos los trabajos en segundo plano. La secuencia de teclas CONTROL-Z suspenderá y enviará a segundo plano el actual trabajo que se encuentra en primer plano. El comando bg reanuda un trabajo de segundo plano. El comando fg trae un trabajo de segundo plano a primer plano.

Discussion Los temas tratados en este cuaderno hasta el momento, es decir la información sobre listado de procesos, el cambio de un valor niceness de un proceso y el envío de señales a procesos son características compartidas por todos los procesos, ya sean iniciados desde una línea de comandos de shell o de otro modo. A diferencia de estos temas anteriores, el tema que nos resta, control de trabajo tiene que ver el manejo de procesos iniciados desde un intérprete de comandos de una shell interactiva y se enfocará en la shell bash. Ejecución de comandos en el primer plano Cuando se ejecuta un comando desde un intérprete de comandos shell bash, a no ser que usted especifique lo contrario, el comando se ejecuta en el primer plano. La shell bash espera que el comando de primer plano termine antes de expedir otro intérprete de comandos y cualquier cosa escrita con el teclado se lee generalmente como la stdin para este comando. Todo esto debería sonar familiar porque los comandos utilizados hasta el momento se han ejecutado en el primer plano. Ejecución de comandos en segundo plano como trabajos En contraste, cualquier comando que usted especifique puede también ejecutarse en el segundo plano, adjuntándole el signo (“&”) a la línea de comandos. Por lo general, sólo los comandos de larga ejecución que no requieren entradas desde el teclado y no generan grandes cantidades de salida son apropiados para un segundo plano. Cuando la shell bash envía a segundo plano un comando, el comando se conoce como un trabajo y se le asigna un número de trabajo. En el siguiente ejemplo, einstein está realizando una búsqueda de los archivos que mayores de 1 megabyte en tamaño en su sistema de archivos. Dado que espera este comando para ejecutar por un tiempo, dirige la stdout a un archivo, bota la stderr y la ejecuta como un trabajo de segundo plano. [einstein@station einstein]$ find / -size +1024k > bigfiles.txt 2> /dev/null & [1] 7022

Después de iniciar el trabajo en el segundo plano, la shell bash reporta dos partes de información a einstein. La primera es el número de trabajo reportado entre paréntesis cuadrados. La segunda

374

es el ID del proceso del trabajo de segundo plano. En este caso, el trabajo es el número de trabajo 1 y el ID del proceso del comando find es 7022. Mientras que este comando se ejecuta en el segundo plano, einstein decide buscar los archivos que le pertenecen y que no ha modificado en dos semanas. Escribe el comando apropiado find y de nuevo envía a segundo plano el trabajo. [einstein@station einstein]$ find / -user einstein -and -mtime +14 > oldfiles.txt 2> /dev/null & [2] 7023 [1] Exit 1 find / -size +1M >bigfiles.txt 2>/dev/null

De nuevo, bash reporta el número de trabajo (2) y el ID del proceso del segundo comando find (7023). El segundo mensaje de shell bash está notificando a einstein el número de trabajo que se ha terminado. La shell bash reporta que ésta ha salido con un código de retorno de 1 (opuesto a ser matado por una señal) y revisualiza la línea de comando para recordar a einstein lo que ha ejecutado. La shell bash no reporta inmediátamente la muerte de los trabajos, sino espera hasta la próxima vez que interprete una línea de comandos. Cuando einstein ha digerido todo esto sospecha que su segundo trabajo también ha terminado. Simplemente, pulsa la tecla ENTER (para que bash "interpretará" la línea de comandos vacía). Igualmente, la shell bash reporta su nuevo número de trabajo 2. [einstein@station einstein]$ [2]+ Exit 1 >oldfiles.tx t 2>/dev/null

find / -user einstein -and -mtime +14

Administración de múltiples trabajos El usuario einstein, al igual que maxwell, suele realizar cálculos físicos que toman mucho tiempo para ejecutar. Inicia varias versiones de la simulación enviándolas al segundo plano. [einstein@station bin sim_a sim_b [einstein@station [1] 7309 [einstein@station [2] 7311 [einstein@station [3] 7313 [einstein@station [4] 7315 einstein]$ ls sim_c sim_d einstein]$ ./sim_a & einstein]$ ./sim_b & einstein]$ ./sim_c & einstein]$ ./sim_d &

Listado de trabajos actuales con jobs

375

El usuario einstein puede utilizar el comando incorporado jobs para reportar todos sus trabajos en ejecución. [einstein@station einstein]$ jobs [1] Running ./sim_a [2] Running ./sim_b [3]- Running ./sim_c [4]+ Running ./sim_d

& & & &

Cada uno de sus trabajos de segundo plano son listados junto con el número de trabajo. El trabajo más reciente se conoce como el trabajo actual y es representado por el comando jobs con un “+”. Traer un trabajo al primer plano con fg Un trabajo de segundo plano puede traerse al primer plano con el comando incorporado fg. El comando fg espera un número de trabajo como un argumento o si ninguno es provisto pondrá el trabajo actual en primer plano. [einstein@station einstein]$ fg 3 ./sim_c

Ahora, el trabajo sim_c está ejecutándose en el primer plano. Como consecuencia, la shell no generará ningún intérprete de comandos cuando el proceso esté en ejecución. Suspensión del trabajo de primer plano con CONTROLZ Previamente, se introdujo la secuencia CONTROL-Z como un método para suspender procesos. Ahora, al observar de cerca la salida de la shell bash cuando einstein suspende el comando de primer plano, vemos que la shell bash trata como un trabajo a cualquier proceso de primer plano suspendido.

376

[einstein@station einstein]$ fg 3 ./sim_c CTRL-Z [3]+ Stopped ./sim_c [einstein@station einstein]$ jobs [1] Running ./sim_a & [2] Running ./sim_b & [3]+ Stopped ./sim_c [4]- Running ./sim_d & [einstein@station einstein]$ ps u USER PID %CPU %MEM VSZ RSS TTY einstein 6987 0.0 0.3 4316 976 pts/8 einstein 7309 0.0 0.3 4112 1004 pts/8 /bin/bash ./sim_a einstein 7311 0.0 0.3 4112 1004 pts/8 /bin/bash ./sim_b einstein 7313 0.0 0.3 4112 1004 pts/8 /bin/bash ./sim_c einstein 7315 0.0 0.3 4112 1000 pts/8 /bin/bash ./sim_d einstein 7446 0.0 0.2 2616 660 pts/8

STAT START S 15:56 S 16:20 S T S R 16:20 16:20 16:20 16:34

TIME COMMAND 0:00 -bash 0:00 0:00 0:00 0:00 0:00 ps u

Cuando está suspendido (o para utilizar la terminología de shell, detenido), el proceso recibe el número de trabajo (si es que aún no lo tiene) y se envía al segundo plano. El comando jobs reporta el trabajo como un trabajo "detenido" y el comando ps confirma que está detenido. Reiniciar un trabajo detenido en el segundo plano Un trabajo detenido puede reiniciarse en el segundo plano con el comando incorporado bg. Al igual que el comando fg, el comando bg espera un número de trabajo como un argumento o si no se provee ninguno entonces se utiliza el trabajo actual. A continuación, einstein reinicia su trabajo detenido en el segundo plano. [einstein@station einstein]$ bg 3 [3]+ ./sim_c & [einstein@station einstein]$ jobs [1] Running ./sim_a [2] Running ./sim_b [3]- Running ./sim_c [4]+ Running ./sim_d

& & & &

Ahora el número de trabajo 3 está otra vez en estado de ejecución. Matar trabajos El comando kill, utilizado para entregar señales para procesos se implementa como un comando incorporado de shell, (confusamente, también se encuentra otra versión en el sistema de archivos / bin/kill. Probablemente usted está utilizando la versión de shell incorporada). Como resultado, está consciente de los trabajos que la shell está administrando.

377

Cuando se especifica qué proceso debería recibir una señal, el número de trabajo del proceso (si lo hay) puede especificarse en vez de su ID de proceso. Para distinguir los dos, los números de trabajo están precedidos por un caracter de porcentaje (“%”) como se ilustra en el siguiente ejemplo. [einstein@station einstein]$ [1] Running [2] Running [3]- Running [4]+ Running [einstein@station einstein]$ -bash: kill: (2) - Operation [einstein@station einstein]$ [einstein@station einstein]$ [2] Terminated [einstein@station einstein]$ [1] Running [3]- Running [4]+ Running jobs ./sim_a & ./sim_b & ./sim_c & ./sim_d & kill 2 not permitted kill %2 ./sim_b jobs ./sim_a & ./sim_c & ./sim_d &

Aquí einstein erróneamente utilizó la sintaxis para especificar un ID de proceso, en vez del número de trabajo. Puesto que él no posee su propio proceso con el ID de proceso número 2, el comando falla. Aquí, einstein utilizó la sintaxis correcta para especificar un número de trabajo y la señal fue enviada al proceso sim_b. Resumen El siguiente cuadro resume los comandos y técnicas para administrar trabajos dentro de la shell bash. Table 1. Administración de trabajos en la shell bash Comando trabajos fg [N] CTRL-Z bg [N] kill %N Ejemplos Decidir enviar a segundo plano un comando ejecutándose en el primer plano La discusión mencionó que los comandos se pueden iniciar en el segundo plano, agregando un signo “&” a la línea de comandos. A continuación, einstein inicia un comando en el primer plano y luego, dándose cuenta que le tomaría mucho tiempo completar, deseá haberlo iniciado en el segundo plano. Acción Lista todos los trabajos Trae el trabajo N de segundo plano al primer plano (por defecto, el trabajo de segundo plano "actual"). Suspende y envía al segundo plano el actual comando de primer plano Inicia el trabajo de segundo plano detenido N (por defecto, el trabajo "actual"en segundo plano). Termina el trabajo de segundo plano N (enviando la señal SIGTERM).

378

[einstein@station einstein]$ ./sim_a

Con el fin de enviar al segundo plano el comando, primero lo suspende con la secuencia de control CONTROL-Z, la cual lo abandona como un trabajo de segundo plano detenido. Luego reinicia el trabajo en el segundo plano mediante bg. [einstein@station einstein]$ ./sim_a CTRL-Z [1]+ Stopped ./sim_a [einstein@station einstein]$ bg [1]+ ./sim_a & [einstein@station einstein]$

Uso de CONTROLC para matar un trabajo en segundo plano. Como una alternativa para el comando kill, la siguiente técnica se utiliza para cancelar trabajos enviados al segundo plano. Primero, se trae el trabajo al primer plano con el comando y luego se mata con la secuencia CONTROL-C. [einstein@station einstein]$ jobs [1] Running ./sim_a [2]- Running ./sim_b [3]+ Running ./sim_c [einstein@station einstein]$ fg 2 ./sim_b CTRL-C [einstein@station einstein]$ jobs [1]- Running ./sim_a [3]+ Running ./sim_c

& & &

& &

Ejercicios en línea Lab Exercise Objetivo: Uso del control de trabajo bash para administrar trabajos múltiples.Estimated Time: 10 mins. Especificaciones 1. Inicie los siguientes cuatro comandos, colocando a cada uno en el segundo plano.

ls -R / | grep "*.conf" > lsconf 2>/dev/null cat /dev/zero > /dev/null find / -name "[Aa]*[Cc]*[Ff]*" sleep 100000

1. Mediante los comandos de control de trabajos y las secuencias comunes de control, parar
(suspender) los trabajos ls y find. Deliverables A title Question 1

379

1. Cuatro trabajos enviados al segundo plano administrados por la shell bash. Los trabajos
cat y sleep deberían estar ejecutándose, mientras que los trabajos find y ls deberían suspenderse Después de haber calificado su ejercicio, utilice el comando kill (o la combinación fg/ CONTROLC) para matar todos los cuatro trabajos.

380

2 3572 grep crond 132 ? 640 pts/4 grep atd 532 ? 640 pts/4 S S S S 09:57 16:17 15:42 16:17 0:00 crond 0:00 grep crond 0:00 /usr/sbin/atd 0:00 grep atd Algunos demonios se ejecutan como el usuario root. Los comandos pueden escribirse directamente o someterse como un script. Con un nombre inspirado por Daemon del físico Maxwell. los demonios Unix son procesos que se ejecutan en el segundo plano. por lo tanto.Programación de tareas retrasadas: at Conceptos clave • • • • • El comando at puede someter comandos para que se ejecuten más tarde. usted habrá notado una convención para nombres: los programas diseñados para ejecutarse como demonios suelen terminar con la letra d. Discussion Demonios Antes de abordar el comando at directamente comenzamos con una corta discusión de un concepto común en Unix: los demonios. El demonio atd El demonio atd le permite a los usuarios someter trabajos para ser realizados más tarde. Para utilizar el demonio atd. el demonio crond se está ejecutando como root pero el demonio atd está ejecutándose como el demonio de usuario. Arriba. la stdout de los trabajos at se envía por correo al usuario.0 1572 elvis 5035 0.0 0.0 0. Suelen iniciar como parte de la secuencia de un sistema de arranque o por el usuario root. éste debe estar ejecutándose. Los demonios son procesos como cualquier otro proceso.2 3572 [elvis@station elvis]$ ps aux | daemon 4730 0. Los demonios suelen asociarse con servicios de red tales como el servidor de red (httpd) o el servidor FTP (vsftpd). o ejecutar comandos en intervalos fijos (crond). Hasta el momento. Otros demonios administran tareas del sistema tal como el demonio de inicio de sesión (syslogd) y el demonio administrador de potencia (apmd).0 0. Esta y la siguiente lección describirán dos demonios que permiten a los usuarios retrasar tareas (atd).2 1420 elvis 5037 0. mientras otros adquieren la identidad de otro usuario de sistema por asuntos de seguridad. Los comandos atq y atrm se utilizan para examinar y quitar trabajos actualmente programados. Los usuarios pueden confirmar que atd se está ejecutando simplemente al examinar la lista de procesos en ejecución: 381 . [elvis@station elvis]$ ps aux | root 890 0. usted nunca sabría que están ahí a menos que los busque. El comando batch puede emitir comandos para que se ejecuten cuando la carga de las máquinas sea baja. separados de una terminal. tal como a las "at 2:00am".0 0. realizan tareas que no suelen estar relacionadas con el teclado de un usuario.

El luchador hogan desearía imprimir un archivo con todo el correo que ha recibido de sus admiradores. la terminal es pts/2. Observe que el demonio atd no tiene terminal asociada. se escribe directamente desde una terminal indica un "fin de archivo".2 3572 640 pts/2 S 15:42 16:43 0:00 /usr/sbin/atd 0:00 grep atd Observe que la séptima columna especifica con qué terminal se asocia un proceso.txt. fanmail. con el sufijo "am" o "pm". y "teatime" también pueden utilizarse. (mes/día/año/).0 0. "noon".[madonna@station madonna]$ ps aux | grep atd daemon 4730 0. La hora del día se puede especificar utilizando HH:MM.0 0. Está un poco preocupado porque comparte la impresora con ventura.2 1420 532 ? S madonna 5570 0. Envío de trabajos con at El comando at se utiliza para someter trabajos al demonio atd para que se ejecuten en una hora específica. la cual probablemente se refiere a una shell de red o a una terminal gráfica dentro de una sesión X. el comando at le pidió teclear sus comandos mediante la stdin (el teclado). at [[-f filename] | [-m]] TIME Opción -f filename -m Efecto ejecuta el script especificado por el nombre de archivo Notifica al usuario por correo electrónico cuando se ejecuta. Para el comando grep de blondie. Como quiere evitar peleas. Para mayor información refiérase a la página del manual at(1). Como alternativa pudo haber entubado el comando dentro de la stadin directamente: 382 . mediante varios formatos incluyendo MM/DD/YY. [hogan@station hogan]$ at 2:00 am warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh at> lpr fanmail. Una de las características de un demonio es que quita su asociación con la terminal que la inició. Los términos en inglés "midnight". La salida estándar del comando se envía por correo al usuario. Los comandos que se van a ejecutar son sometidos ya sea como script (con la opción f) o escritos directamente via la stdin. hogan sabía que cuando la secuencia CONTROL-D. incluso si no hay salida. decide demorar su trabajo de impresión hasta las 2:00 de la mañana.txt at> CTRL-D job 7 at 2003-06-17 02:00 Dado que hogan no utilizó la opción -f. Afortunadamente. Igualmente. quien también utiliza mucho la impresora.

Lista trabajos en espera con el demonio atd. y ejecutará el trabajo cuando el sistema no esté de otra manera ocupado. hogan confirma que su trabajo se ha registrado con atq. Decide cancelar su trabajo at e imprimir el archivo directamente. Comandos relacionados con el servicio at command atd at batch atq atrm uso El demonio que ejecuta trabajos sometidos. batch no ejecuta el comando at en un tiempo específico. Si la máquina no está ocupada cuando se somete un trabajo. A diferencia del comando at. Si la hora se especifica. sino que espera hasta que el sistema se desocupe de otras tareas a cualquier hora. El demonio atd controla el loadavg (promedio de carga) del sistema y espera que baje por debajo de 0. Somete trabajos al demonio atd para que se ejecuten en un tiempo específico.[hogan@station hogan]$ at 2:00 am warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh at> lpr fanmail. Cancela un trabajo en espera con el demonio atd antes de ejecutarse. Somete trabajos al demonio atd para que se ejecuten cuando el sistema no esté ocupado. al igual que el comando at. el trabajo podría ejecutarse inmediatamente. donde los trabajos pueden ser especificados con la stadin o sometidos como un lote con la opción -f. [hogan@station hogan]$ atq 7 2003-06-17 02:00 a hogan Por último. se utiliza para retrasar tareas. 383 . Resumen de los comandos at El siguiente cuadro resume el comando utilizado al registrar trabajos con el demonio atd.txt at> CTRL-D job 7 at 2003-06-17 02:00 Luego. El comando batch tiene una sintaxis idéntica al comando at. el batch se demorará observando la máquina hasta el tiempo especificado. hogan recuerda que ventura está en vacaciones por lo tanto puede imprimir la correspondencia de sus admiradores sin ningún problema. Table 1. En ese momento batch comenzará a controlar el loadavg del sistema. [hogan@station hogan]$ atrm 7 [hogan@station hogan]$ atq [hogan@station hogan]$ lpr fanmail.txt Retraso de tareas con batch El comando batch.8 antes de ejecutar el trabajo. Los usuarios no utilizan el comando atd directamente.

txt.at 2:00 am warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh job 11 at 2003-06-18 02:00 [hogan@station hogan]$ atq 11 2003-06-18 02:00 a hogan Examen de la sintaxis Spool El usuario ventura ha notado que hogan tiene la costumbre de imprimir la correspondencia de sus admiradores a las 2:00 am y como un chiste práctico decide someter un trabajo de su propiedad. Después de una corta experiencia desarrolla la siguiente opción para formatear la página a su gusto: enscript -r2 G --header="Fan Mail" --borders fanmail. Dado que hogan no quiere teclear este comando y todas las opciones a cada rato. [root@station at]# atq 11 2003-06-18 02:00 a hogan 12 2003-06-18 01:59 a ventura 384 . cuando hogan quiere someter a impresión su correspondencia de la fanaticada puede simplemente especificar el script a at con la opción -f. Somete un trabajo que imprimirá el archivo a la 1:59 am confiando que hogan no notará la inserción cuando recoja los papeles de la impresora en la mañana.at: [hogan@station hogan]$ cat fanmail.Ejemplos Someter un trabajo at como un archivo El usuario hogan ha desarrollado ahora el hábito de imprimir su correspondencia de sus admiradores a las 2:00 de la mañana. Crea el archivo bogus_fanmail.txt Ahora.at enscript -r2 -G --header="Fan Mail" --borders fanmail. observa los dos trabajos at en espera.txt. crea un guión corto con el (o los) comando(s) que desearía ejecutar en un archivo llamado fanmail. el cual reformatea archivos de texto imprimiéndolos "2up" (dos páginas de texto impresas por páginas) y representa la página impresa con encabezados informativos y pies de página. También ha descubierto el comando enscript. [hogan@station hogan]$ at -f fanmail.txt" | at 1:59 am warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh job 12 at 2003-06-18 01:59 [ventura@station ventura]$ atq 12 2003-06-18 01:59 a ventura En cierto punto más adelante. que falsifica correspondencia no muy elogiosa de sus fanáticos. [ventura@station ventura]$ echo "lpr bogus_fanmail. el administrador del sistema de la máquina actuando como root.

el cual pertenece al usuario ventura..) root observa los siguientes aspectos de la conducta del script: El archivo es un script de shell y debido a sus permisos pudo ejecutarse directamente.. export HOSTNAME HISTSIZE=1000.redhat. [root@station at]# ls -l total 12 -rwx-----1 hogan hogan 1480 Jun 17 12:37 a0000b010c8888 -rwx-----1 ventura ventura 1459 Jun 17 13:08 a0000c010c8887 drwx-----2 daemon daemon 4096 Jun 16 17:24 spool [root@station at]# cat /var/spool/at/a0000c010c8887 #!/bin/sh # atrun uid=511 gid=511 # mail ventura 0 umask 2 HOSTNAME=bowe-lt. en este caso lpr bogus_fanmail. Examina el contenido de su nombre de archivo spool llamado de forma críptica a0000c010c8887. export USER LOGNAME=ventura.com. el guión está listo para ejecutar el trabajo sometido. La segunda acción es inicializar una colección de variables de entorno para imitar el entorno de shell que sometió el trabajo. porque el guión crearía la umask apropiada. root fisgonea dentro del directorio spool de at. los archivos tendrían los permisos esperados.txt.sh\ %s. se han borrado varias líneas y se han remplazado por ". export LOGNAME .. Al almacenar toda esta información con el trabajo sometido..".txt (En este listado largo.rdu. Por último. export G_BROKEN_FILENAMES XAUTHORITY=/home/ventura/. se han borrado varias líneas y se han remplazado por ". el demonio atd es capaz de reconstruir el entorno de ventura cuando se envía el trabajo.xauthqEj97Q. Si cualquiera de los comandos iniciados por el script dependiera de las variables de entorno. export HISTSIZE USER=ventura. LESSOPEN=\|/usr/bin/lesspipe. La primera acción del script es la de establecer la umask del proceso a la umask de shell que sometió el trabajo... Si el trabajo enviado crea nuevos archivos. el entorno se establecería como se espera y así sucesivamente. La tercera acción es cambiar el directorio actual del proceso al directorio actual de trabajo de la shell que sometió el trabajo. export XAUTHORITY cd /home/ventura || { echo 'Execution directory inaccessible' >&2 exit 1 } lpr bogus_fanmail. después de toda esta inicialización.Curioso por lo que ventura piensa hacer.) root observa los siguientes aspectos de la conducta del script: 385 . (En este listado largo.". export LESSOPEN G_BROKEN_FILENAMES=1.

La segunda acción es inicializar una colección de variables de entorno para imitar el entorno de shell que sometió el trabajo. Al almacenar toda esta información con el trabajo sometido. Especificaciones Usted ha tenido dificultades tratando de recordar qué día es y por lo tanto quisiera enviarse una copia del calendario actual para verlo como primera cosa en la mañana. el entorno se establecería como se espera y así sucesivamente. el guión está listo para ejecutar el trabajo sometido. Estimated Time: 10 mins.txt. La tercera acción es cambiar el directorio actual del proceso al directorio actual de trabajo de la shell que sometió el trabajo. 386 . Por último. Si cualquiera de los comandos iniciados por el script dependiera de las variables de entorno. porque el guión crearía la umask apropiada. el demonio atd es capaz de reconstruir el entorno de ventura cuando se envía el trabajo. La primera acción del script es la de establecer la umask del proceso a la umask de shell que sometió el trabajo. Deliverables A title Question 1 Un trabajo en espera que generará la salida del comando cal a las 3:45 de la mañana. Envía un trabajo que simplemente ejecuta el comando cal para las 3:45 de la mañana.El archivo es un script de shell y debido a sus permisos pudo ejecutarse directamente. Si el trabajo enviado crea nuevos archivos. después de toda esta inicialización. en este caso lpr bogus_fanmail. los archivos tendrían los permisos esperados. Ejercicios en línea Someter un trabajo para una ejecución posterior Ejercicio Objetivo: Utilizar el servicio atd para retrasar la ejecución de una tarea. Asegúrese que es el único trabajo programado con esa facultad.

la stdout de trabajos cron se envía por correo al usuario. una vez cada jueves.0 0. Sintaxis crontab Los usuarios especifican los trabajos que se van a ejecutar y cuándo se van a ejecutar.Programación de tareas periódicas: cron Conceptos clave • • • • La utilidad cron se utiliza para programar tareas recurrentes. al configurar un archivo conocido como el "cuadro cron" a menudo abreviado en inglés "crontab". la mayoría de usuarios lo pueden ignorar. El demonio suele iniciarse cuando el sistema arranca. El comando crontab provee un frontend para editar archivos crontab. Al listar todos los procesos y buscar crond puede confirmar si el demonio crond está en ejecución. Otros usuarios podrían hallar que son tareas propias el chequear archivos grandes que ya no se estén utilizando o chequear un sitio web para ver si hay algún anuncio. En la administración de sistemas dichas tareas podrían incluir quitar archivos viejos o no utilizados del directorio /tmp o comprobar si un archivo que está recolectando mensajes de registro no ha crecido demasiado. [hogan@station hogan]$ ps aux | grep crond root 891 0. las personas encuentran que están realizando tareas en forma sistemática.2 3576 644 pts/2 crond S S Jun17 10:15 0:00 crond 0:00 grep Si el demonio crond no está ejecutándose. Discussion Ejecución de tareas periódicas A menudo. Los usuarios especifican qué comandos deberían ejecutarse y a qué horas mediante el comando crontab para configurar su "cuadro cron". El servicio cron El demonio crond es el demonio que realiza tareas periódicamente en nombre del sistema o de usuarios individuales. 387 . o dos veces al mes. El archivo crontab utiliza 5 campos para especificar la información de temporización. por lo tanto. su administrador de sistema necesitaría iniciar el servicio crond como root.0 0. Las tareas se administran por el demonio tradicional de Linux (y Unix). el demonio crond. El servicio cron permite a los usuarios configurar comandos para que se ejecuten con regularidad tal como cada 10 minutos. Un ejemplo de archivo crontab aparece a continuación.0 1572 128 ? hogan 8118 0.

.) command to run "Pay your bills" Cada uno de los primeros cinco campos debe llenarse con un símbolo mediante la siguiente sintaxis: símbolo * n n. Los primeros 5 campos se utilizan para especificar cuándo ejecutar el comando y el sexto campo se utiliza para especificar el comando a ejecutar (compuesto de todo después del quinto campo).----------> | | | .-------> | | | | .. Los primeros cinco campos especifican la siguiente información: . n.. Variables de entorno Todas las líneas que tienen la forma nombre = valor se utilizan para definir variables de entorno. Las líneas del comando cron constan de seis campos separados de espacios en blanco.. 2=February.. .----> | | | | | . 15.. 30 y 45 minutos 388 .-> | | | | | | 25 04 1 * * echo minute hour day of month month (1=January. */n significado cada vez a la hora especificada a cualquiera de las horas especificadas cada n hora ejemplo * 10 22.-------------> | | .52 */15 interpretación (si se utiliza en el primer campo) cada minuto cada hora y 10 minutos a cada hora pasados los 22 y 52 minutos cada 15 minutos (a los 0..----------------> | . cada línea realiza una de tres funciones: Comentarios Todas las líneas cuyo primer caracter (no espacio) es # se consideran comentarios y se ignoran.# set the default language to be english LOCALE=en_US 05 15 25 35 45 * 04 04 04 04 * * 1 14 * * * * 3 * * * * * 1 procinfo find $HOME -size +100k echo "Pay your bills" echo "Beware the Ides of March" | mail -s "a warning" julius find $HOME -atime +30 | lpr Un archivo crontab es un archivo de configuración basado en línea.) day of week (0=Sunday. 1=Monday. Comandos cron Cualquier otra línea (no en blanco) se considera un comando cron. . el cual consta de seis campos descritos a continuación.

utilizan el comando crontab para editar la lista o quitarla. halla que su actual configuración fue leída desde el archivo mycopy. se le informa que no existe ninguna configuración actual.v 1.edit the master and reinstall. crontab {[-e] | [-l] | [-r]} crontab ARCHIVO Edita o quita el archivo crontab actual o remplaza el archivo actual crontab con FILE. LOCALE=en_US 05 * * * * 15 04 * * * 25 04 1 * * 35 04 14 3 * 45 04 * * 1 [hogan@station procinfo find $HOME -size +100k echo "Pay your bills" echo "Beware the Ides of March" | mail -s "a warning" julius find $HOME -atime +30 | lpr hogan]$ crontab -l > mycopy Luego. hogan quita su configuración de crontab actual. [hogan@station hogan]$ crontab -r [hogan@station hogan]$ crontab -l no crontab for hogan Con el fin de restaurar su configuración cron. 389 . Opción -e -l -r Efecto modifica el archivo actual lista el archivo actual quita el archivo actual En la siguiente secuencia de comandos.9212 installed on Wed Jun 18 11:46:36 2003) # (Cron version -. en cambio. Primero lista su configuración actual crontab en la pantalla.después de la hora) Uso del comando crontab Los usuarios rara vez administran su archivo crontab directamente (o incluso saben dónde se almacena).$Id: 040_crontab. esta vez especificando el archivo mycopy como un argumento. hogan utilizará el comando crontab para administrar su configuración crontab. Cuando trata de nuevo de listar la configuración. # (/tmp/crontab. Tras listar su configuración una vez más. luego lista el archivo actual otra vez almacenando la salida dentro del archivo mycopy. [hogan@station hogan]$ crontab -l # DO NOT EDIT THIS FILE .1 2005/03/21 05:24:29 brads Exp $) # set the default language to be english. hogan utiliza el comando crontab una vez más.dbk.

el banner se ha duplicado en el proceso. # (mycopy installed on Wed Jun 18 11:47:00 2003) # (Cron version -. # (/tmp/crontab. hogan pudo agregar la línea "export EDITOR=nano" a su archivo .$Id: 040_crontab.$Id: 040_crontab.bash_profile y la variable de entorno se establecería automáticamente cada vez que inicie sesión. examina la variable de entorno EDITOR. si hogan prefiere utilizar el editor nano.crontab.dbk. el contenido modificado del archivo se instala como la nueva configuración crontab. El editor por defecto es /bin/vi. ¿sabe por qué? [hogan@station hogan]$ crontab mycopy [hogan@station hogan]$ crontab -l # DO NOT EDIT THIS FILE . 390 .v 1.1 2005/03/21 05:24:29 brads Exp $) # set the default language to be english.9212 installed on Wed Jun 18 11:46:36 2003) # (Cron version -. hay dos formas de crear o modificar la configuración crontab. Cuando el usuario termina de modificar el archivo y sale del editor. se utilizará para especificar el editor que se va a abrir. primero puede configurar la variable de entorno EDITOR como /usr/bin/nano (o simplemente nano) y luego ejecutar crontab e. al igual que otros comandos.edit the master and reinstall. En resumen. sin embargo.v 1.Un poco molesto. El comando crontab abrirá la configuración crontab dentro del editor predeterminado del usuario. Si hogan quisiera utilizar nano como su editor podría utilizar uno de los siguientes métodos: [hogan@station hogan]$ export EDITOR=nano [hogan@station hogan]$ crontab -e O [hogan@station hogan]$ EDITOR=nano crontab -e o aún mejor.1 2005/03/21 05:24:29 brads Exp $) # DO NOT EDIT THIS FILE . Por ejemplo.edit the master and reinstall. Si la variable se ha establecido.dbk. LOCALE=en_US 05 * * * * procinfo 15 04 * * * find $HOME -size +100k 25 04 1 * * echo "Pay your bills" 35 04 14 3 * echo "Beware the Ides of March" | mail -s "a warning" julius 45 04 * * 1 find $HOME -atime +30 | lpr [hogan@station hogan]$ rm mycopy 7 2003-06-17 02:00 a hogan Modificar archivos crontab ya establecidos Los usuarios suelen modificar sus archivos crontab mediante crontab -e.

com Subject: Cron <ventura@station> cal X-Cron-Env: <SHELL=/bin/sh> X-Cron-Env: <HOME=/home/ventura> X-Cron-Env: <PATH=/usr/bin:/bin> X-Cron-Env: <LOGNAME=ventura> Su 1 8 15 22 29 Mo 2 9 16 23 30 June 2003 Tu We Th Fr 3 4 5 6 10 11 12 13 17 18 19 20 24 25 26 27 Sa 7 14 21 28 El mensaje del correo contiene la salida del comando en el cuerpo y todas las variables de entorno en los encabezados. los usuarios deberían tener en cuenta un detalle.com (Cron Daemon) To: ventura@station. Esto tiene una implicación importante: cualquier variable de entorno o alias configurados por la shell en el arranque tal como cualquiera que esté definida en /etc/profile o ~/.redhat. ventura podría haber definido la variable de entorno especial MAILTO a una dirección de correo electrónico y el correo sería enviado a esa dirección en su lugar: MAILTO=ventura@redhat. 2. ¿A dónde va la salida? ¿Cómo recibe el usuario la salida de los comandos que cron ejecuta? El demonio enviará por correo la stdout y el stderr de todos los comandos ejecutados al usuario local. éste no ejecuta el comando desde la shell sino que bifurca y exec el comando directamente. Cuando el demonio crond inicia el comando del usuario. no estarán disponibles cuando cron ejecute el comando. 18 Jun 2003 14:24:00 -0400 From: root@station. Editar su configuración establecida con crontab -e.com 05 * * * * cal Variables de entorno y cron Al configurar trabajos cron. Crear un archivo de texto que contenga su configuración deseada y luego instalarlo con crontab FILENAME.redhat. a la hora y cinco minutos espera recibir un nuevo correo como el siguiente: Date: Wed. Opcionalmente.1. 391 .bash_profile. Suponga que ventura configuró el siguiente trabajo cron: 05 * * * * cal Una vez por hora.

. conteniendo una versión formateada de texto de la página web de formación de Red Hat cada mañana a las 5:00. and quits the text editor. Con el fin de estar pendiente de estas oportunidades configura un trabajo cron que descargará la página web de formación de Red Hat y se la enviará como un correo electrónico una vez por la mañana. 392 .edit the master and reinstall. Ejemplos Control de un sitio web ventura quiere asegurarse que no se va a perder de ninguna nueva oportunidad de formación de su compañía favorita. # (/tmp/crontab.using an empty one (. [ventura@station ventura]$ crontab -e no crontab for ventura .Si un usuario quiere que una variable de entorno esté definida necesita explícitamente definir la variable en su configuración crontab.redhat.$Id: 010_text..dbk. Con el fin de ayudarse a recordar los archivos grandes que está dejando atrás. [ventura@station ventura]$ crontab -l # DO NOT EDIT THIS FILE . while in the text editor.com/training ventura ahora puede esperar recibir correo electŕonico.) 00 05 * * * links -dump http://www. Con el fin de modificar su configuración en el lugar utiliza el comando crontab -e.) crontab: installing new crontab Luego confirma que su trabajo cron esté en su lugar... configura un trabajo cron el cual le enviará cada domingo un correo con una lista de todos los archivos mayores de 100k. ventura se da cuenta que ha tenido la mala costumbre de crear archivos muy grandes y luego los olvida. Red Hat Inc..v 1.com/training (. ventura adds the following line. Control de archivos grandes Luego..1 2005/03/21 05:24:29 brads Exp $) 00 05 * * * links -dump http://www..10296 installed on Wed Jun 18 14:17:43 2003) # (Cron version -.redhat..

weekly.weekly Luego.weekly #!/bin/bash echo "===== files larger than 100k =====" find $HOME -size +100k echo echo "==== files not used in the past month =====" find $HOME -atime +30 [ventura@station ventura]$ mkdir bin [ventura@station ventura]$ mv cron. within the text editor.1 2005/03/21 05:24:29 brads Exp $) 00 05 * * * links -dump http://www..10678 installed on Wed Jun 18 14:50:39 2003) # (Cron version -. Ejecución de scripts desde cron Continuando con sus esfuerzos de no desperdiciar espacio duro.dbk.) crontab: installing new crontab [ventura@station ventura]$ crontab -l # DO NOT EDIT THIS FILE .redhat...com/training 10 05 * * 0 find $HOME -size +100k Ahora.. [ventura@station ventura]$ cat cron. and exits the text editor .v 1. los domingos a las 5:10 de la mañana. En lugar de complicar su archivo cron. ventura adds the following line. # (/tmp/crontab.) 05 05 * * 0 find $HOME -size +100k (. ventura puede esperar recibir un correo electrónico listando todos los archivos mayores de 100 K bajo su directorio de inicio.[ventura@station ventura]$ crontab -e no crontab for ventura . modifica su configuración crontab para que su guión se ejecute como un trabajo cron una vez por semana: 393 . crea un guión llamado cron.using an empty one (. ventura desearía crear regularmente una lista separada de archivos a los que no haya tenido acceso reciéntemente y recibir esta lista al mismo tiempo que recibe su lista de archivos grandes..$Id: 010_text..edit the master and reinstall.weekly bin/ [ventura@station ventura]$ chmod 755 bin/cron... lo coloca en el subdirectorio bin y lo hace ejecutable.

Mediante un editor de texto. automáticamente cuando inicia sesión.weekly.) crontab: installing new crontab [ventura@station ventura]$ crontab -l # DO NOT EDIT THIS FILE . 394 . ventura edits the following line . Entonces configura un archivo cron localmente. él no tiene que preocuparse por la posibilidad de remplazar trabajos ya existentes.hogan para definir explícitamente y vuelve a someter el archivo con crontab. Debido a que esta es la primera vez que utiliza cron..) 05 05 * * 0 bin/cron.1 2005/03/21 05:24:29 brads Exp $) 00 05 * * * links -dump http://www.bash_profile configura su variable de entorno PRINTER para cola de espera local. Edita crontab..txt [hogan@station hogan]$ crontab crontab. hp-color.redhat. la variable de entorno de inicio sesión no se está configurando.[ventura@station ventura]$ crontab -e (. so that it reads .3.hogan 45 13 * * 1.. fanmail.dbk.v 1...hogan en su directorio de inicio. miércoles y viernes. # (/tmp/crontab..hogan Ahora espera que su archivo de correspondencia de sus admiradores sea impreso los lunes.weekly Ahora en lugar de mantener su configuración crontab.$Id: 010_text. [hogan@station hogan]$ cat crontab.. miércoles y viernes en las tardes a la 1:45. hogan nota que su . Decide utilizar el servicio cron para automatizar el proceso. como cron no utiliza una shell para ejecutar trabajos cron.5 lpr fanmail. within the text editor.. ventura puede apenas modifica el script cron. and exits . cada lunes. Luego instala el archivo con el comando crontab. Cuando se imprimen las primeras copias se envían a la impresora que no es.. Impresión de fanmail El usuario hogan ha llegado al punto donde imprime el archivo que recoge la nueva correspondencia de los admiradores.11252 installed on Wed Jun 18 15:45:53 2003) # (Cron version -.com/training 05 05 * * 0 bin/cron.weekly (.txt. Sin embargo..edit the master and reinstall. crea el archivo crontab..) 05 05 * * 0 find $HOME -size +100k (..

5 lpr fanmail.hogan PRINTER=hp-color 45 13 * * 1.txt [hogan@station hogan]$ crontab crontab. 395 .3.hogan Ahora su trabajo imprime en la impresora correcta.[hogan@station hogan]$ cat crontab.

Configura un trabajo cron que le enviará por correo la salida del comando who diariamente a las 4:35 de la mañana.Ejercicios en línea Control de quién está en el sistema. 396 . Una configuración cron que envía por correo la salida del comando who diariamente a las 4:30 am. Ejercicio en línea Objetivo: Configurar un trabajo cron Estimated Time: 10 mins. Deliverables A title Question 1 1. Especificaciones Está un poco paranóico y quiere controlar quién está usando su computador en la noche.

Las aplicaciones de servidor de red generalmente están diseñadas para permanecer "siempre en ejecución" iniciándose automáticamente cuando el sistema arranca y apagándose solamente cuando el sistema lo hace. Las aplicaciones de cliente de red suelen ejecutarse únicamente cuando están en uso y las puede iniciar cualquier usuario. los puertos bien conocidos residen en el rango de puertos privilegiados por debajo del puerto número 1024. El servidor Los vendedores y los servicios de red efectivos comparten las siguientes características.Network Applications Introducción a las redes TCP/IP Conceptos clave • • La mayoría de los servicios de redes de Linux están diseñados en torno a una relación de cliente servidor. El comando hostname puede utilizarse para examinar la dirección IP actual de la máquina. La mayoría de los servidores de red Linux y clientes se comunican mediante el protocoloTCP/IP. La dirección TCP/IP tanto del proceso del cliente como del proceso del servidor consta de una dirección IP y de un puerto. Los clientes de red suelen utilizar puertos privilegiados de modo aleatorio. un cliente comprando una barra de caramelo a un vendedor. tales como entregar el contenido de las páginas web o dar la hora actual. A menudo. La mayoría de las aplicaciones de redes actuales están diseñadas en torno a la relación clienteservidor. El servidor de red suele ser una aplicación que ofrece servicios. Por lo general. El diseño de (aplicaciones que actúan como) clientes de red y (aplicaciones que actúan como) servidores de red difiere dramáticamente. Este no es el caso pero es el protocolo más utilizado y los conceptos necesarios para entender se amplían (o reducen) de forma natural a los otros protocolos. • • • • • Discussion Clientes. El cliente de red suele ser una aplicación que actúa en nombre de una persona que está tratando de realizar alguna tarea en particular tal como navegar en una URL o ejecutar el comando rdate para preguntar la hora actual a un servidor de tiempo. Con el fin de apreciar las diferencias. mientras que el comando netstat -tuna se puede utilizar para examinar todos los puertos abiertos. Hablaremos del protocolo TCP/IP como si fuera el único protocolo disponible en Internet. servidores y protocolo TCP/IP Iniciaremos nuestro cuaderno sobre las aplicaciones de redes con la introducción a los conceptos de clientes y servidores y los aspectos básicos del protocolo TCP/IP. los compararemos con los agentes en una relación cliente-servidor. 397 . Los servidores de red suelen utilizar puertos asignados denominados puertos "bien conocidos" como se catalogan en el archivo /etc/services. sólo el usuario root puede administrar procesos del servidor.

Del mismo modo. El cliente Por el contrario. Cuando alguien hace un receso para ir a almorzar. Por lo general. Un cliente no se estará en una tienda de caramelos todo el día por si decide comprar un caramelo. 398 . cierra su navegador de red. el cual es un entero entre 1 y 65535 (no es una coincidencia que la cantidad de información se codifique en 2 bytes de memoria). Los procesos que ejecutan clientes de red son iniciados por usuarios normales y por lo general se ejecutan todo el tiempo necesario para completar una tarea. Los procesos en computadores se identifican con unnúmero de puerto. La dirección IP viene en forma de cuatro números enteros. Los servidores tienen sitios bien conocidos Además de estar disponibles cuando un cliente necesita el servicio. cuya analogía más cercana podría ser una extensión telefónica asociada a un número de teléfono. La dirección IP sirve para localizar la máquina en la que el proceso se está ejecutando (esta es la "parte del protocolo IP") y el número de puerto se utiliza para localizar el proceso correcto en la máquina (esta es la parte "TCP"). Por lo general. incluso cuando no hay clientes. las aplicaciones de cliente no necesitan tener direcciones fijas. Así como los clientes pueden buscar la ubicación de vendedores de caramelos desconocidos. en los directorios telefónicos y encontrarlos por dirección postal. sólo el usuario root puede iniciar o cerrar procesos que funcionan como servidores de red. Además.Los servidores están altamente disponibles Así como un vendedor siempre debe utilizar la registradora. el cliente de la tienda de caramelos no necesita estar ni altamente disponible ni ser muy conocido. para localizarse entre sí. Más adelante veremos esto detalladamente. El protocolo TCP/IP permite dos procesos. listos para suplir los servicios cuando se soliciten. Direcciones TCP/IP Todo proceso que participa en una conversación TCP/IP debe tener una Dirección IP. Además. Esta representación suele conocerse de modo informal como un quad punteado. los procesos que ejecutan servicios de red necesitan estar ejecutándose. cada uno en un rango de 0 a 255 (no es una coincidencia que la cantidad de información pueda codificarse en un byte de memoria) y tradicionalmente separados por puntos así como 192. cada uno se identifica con una dirección IP y un número de puerto. Cada vez que un proceso quiere participar en una conversación TCP/IP con otro proceso.168. los procesos que ejecutan servicios de red se inician en el momento de arranque y continúan ejecutándose hasta que la máquina sea apagada. En Linux (y Unix) dichos procesos se conocen como demonios. el kernel debe asignarle primero un número de puerto.3. los clientes de red pueden ubicar servidores de redes desconocidas mediante un hostname. los clientes no necesitan permanecer en sitios bien conocidos.0. Los computadores en una red se identificans con una dirección IP. Nuestro cliente no se queda todo el día en casa por si alguien pasa a venderle una barra de caramelo. todo proceso en una conversación TCP/IP debe tener un número de puerto. los vendedores se están dónde saben que los clientes los pueden encontrar. pueden moverse de un lugar a otro. el cual se convierte en la dirección IP utilizada para tener acceso al servicio. así como cada participante en una conversación debe tener un número telefónico.

el proceso mozilla se inicia en la máquina station3.com arranca. Cuando la máquina academy.232.67. 1. Por ejemplo. El proceso suele parecerse a lo siguiente. En algún momento más tarde.51.redhat."todo es un archivo". accept (aceptar).com? ¿De qué forma mantendría en orden un servidor de red qué conversación estaba teniendo con cuál cliente? A cada proceso de cliente se le asignaría un número de puerto distinto y por lo tanto conversa con el demonio httpd mediante un socket diferente.example. También son los nombres de llamadas al sistema de programación que realizan cada paso. listen (escuchar). Como le solicita la conexión.redhat.45.187. También asigna un socket y solicita connect al puerto 80 de la máquina 66. ¿qué sucedería si nuestro estudiante estuviera ejecutando múltiples versiones de Mozilla. 3. El servidor selecciona la conexión accept.com? o ¿qué sucedería si múltiples usuarios estuvieran usando la máquina station3. los procesos mozilla y httpd pueden leer información con read y escribir a un archivo con write de un modo tan sencillo como leer y escribir desde un archivo. asigna un socket.232.com simultáneamente todas accediendo academy. ejecuta bind al puerto 80 y comienza a listen conexiones. Los verbos resaltados en esta sección bind (unir). incluyendo las conexiones de red! Para fines más prácticos. lo que se traduce en una dirección IP 123. 399 . lo que se traduce en una dirección IP de 66.com.example.Sockets Con el fin de ilustrar una transacción típica TCP/IP. un socket se define como la combinación de una dirección IP y el número de puerto del servidor y cliente. se inicia el proceso httpd.com. provee su propia dirección IP y el número de puerto (asignado de modo aleatorio) al servidor.redhat.187.redhat. El socket establecido se identifica ahora con dirección IP y número de puerto del cliente y del servidor.89 y el servidor de red httpd ejecutando en academy. Puesto que no pidió un número de puerto particular. cada uno haciendo solicitudes de academy. un socket es sólo otro descriptor de archivo)..51.. e inclusoread (leer) y write (escribir) son términos bien definidos en Linux (y Unix). quizás minutos o días. Una vez se establece el socket. Figure 1.example. el kernel provee uno aleatorio. Primero 2.com. examinaremos la conversación entre el navegador de red mozilla de un estudiante fictisio ejecutándo en la máquina station3. Un socket TCP/IP entre un navegador de red Mozilla y un servidor Apache En el protocoloTCP/IP. (recuerde . connect (conectar). digamos 12345.

el catálogo de servicios bien conocidos. El sólo hecho de que un servicio se liste en el archivo /etc/services no significa que usted está ejecutando (o incluso siendo capaz de ejecutar) ese servicio bien conocido. y los puertos asignados a ellos se mantienen en el archivo /etc/services. el proceso mozilla solicitó connect al puerto 80 del servidor. Puertos privilegiados A diferencia de los clientes. ¿Cómo se convino que el puerto 80 era el apropiado para el servidor de red? Los servicios de Internet tradicionales tales como el servidor de red o el servidor ftp o el servidor smtp (de correo electrónico). Solamente un proceso puede vincularse a un puerto en un tiempo determinado (¿A qué se debe esto?) Los puertos menores de 1024 se conocen como puertos privilegiados y son tratados de modo especial por el kernel. y en retorno. Únicamente los procesos ejecutándose como el usuario root pueden enlazarse a puertos privilegiados. En un principio. se conocen como servicios bien conocidos. (esto ayuda a asegurar que si elvis tuviera una cuenta en la máquina academy. Observe que tanto el cliente como el servidor necesitan concordar con el número apropiado de puerto para que el archivo /etc/services sea tan importante en la máquina del cliente como en la del servidor.com. En máquinas de Linux y (Unix). los procesos que ejecutan servidores de red suelen solicitar el puerto al que quieren vincularse. no podría iniciar una versión falsa de un servidor de red que podría distribuir información falsa).Figure 2. 400 . mencionamos que el proceso httpd solicitó bind al puerto 80.redhat. Múltiples sockets TCP/IP Más acerca de puertos Servicios bien conocidos y el archivo /etc/services En nuestro ejemplo. los puertos bien conocidos y los puertos con privilegios pretendian coincidir pero en la práctica hay más puertos bien conocidos que privilegiados.

Sin embargo. por ejemplo).62. la dirección IP de la máquina se visualiza en su lugar. no solo porque cuando se combinan producen una salida interesante. Las siguientes opciones se escogieron. Table 1. Infortunadamente. [elvis@station elvis]$ hostname station. Opciones para el comando netstat Opción -t -u -n -a Efecto Presenta los sockets TCP Presenta los sockets UDP Presenta la dirección IP en lugar del hostname Presenta todos los sockets incluso aquellos en estado LISTEN Muchas más opciones están disponibles. sockets locales "Unix" utilizados para comunicarse entre procesos en la misma máquina. cuando se llama con las siguientes opciones se ve información más interesante.example. el kernel mantiene el rastro de un parámetro conocido como su nombre del equipo y el comando hostname -i presenta la dirección IP asociada con éste. porque las máquinas pueden tener fácilmente más de una dirección IP (una para cada red múltiple de tarjetas de interfaz.16. El comando netstat sirve para ver una variedad de información de redes incluyendo los puertos abiertos. 401 . Con la opción -i.9 ¿Qué sucede si hay múltiples direcciones IP? El diseño del comando hostname es un poco equívoco. No obstante. sino porque también son fáciles de recordar: por ejemplo. Uso del comando netstat para ver los puertos abiertos Cuando un puerto es utilizado por un socket se le conoce como puerto abierto. sin argumentos. "tuna" (atún). para mayor información acuda a la página de manual netstat(8).Determinar los servicios actuales de red TCP/IP Uso de hostname para visualizar la dirección IP actual El comando hostname. muestra el nombre del equipo de la máquina actual. no hay razón para que cualquier dirección IP tenga prioridad sobre las otras. por razones históricas. En dichas situaciones. cuando un comando es llamado sin ninguna opción la salida del comando netstat se inunda de información poco interesante.com [elvis@station elvis]$ hostname -i 172.

0:* tcp 0 0 0. El comando netstat sirve para ver una variedad de información de redes incluyendo los puertos abiertos.16.0:443 0. por razones históricas.0.0.8:6001 tcp 0 0 172.0.0.9:32903 172.0.0:* tcp 0 0 0.1:32769 127.0.0.0. 402 .0.0. [elvis@station elvis]$ netstat -tuna Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address tcp 0 0 127.0:* tcp 0 0 0.16..0.8:6001 tcp 0 0 127. cuando un comando es llamado sin ninguna opción la salida del comando netstat se inunda de información poco interesante.62.16. tcp 0 0 172.0.0.1:32769 tcp 0 0 172. State LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN ESTABLISHED ESTABLISHED ESTABLISHED ESTABLISHED TIME_WAIT TIME_WAIT ESTABLISHED ESTABLISHED ¿Qué sucede si hay múltiples direcciones IP? El diseño del comando hostname es un poco equívoco.1:32768 0.0. Infortunadamente. sockets locales "Unix" utilizados para comunicarse entre procesos en la misma máquina.0.16.0. En dichas situaciones.0:* tcp 0 0 0.0.62. porque las máquinas pueden tener fácilmente más de una dirección IP (una para cada red múltiple de tarjetas de interfaz.0.0.0.0:22 0.0.0.0.8:6001 .0.9:32848 172.0:* tcp 0 0 127.9:34387 172.0.0.0:* tcp 0 0 127. no hay razón para que cualquier dirección IP tenga prioridad sobre las otras.0.0.0.16.0.0.8:22 udp 0 0 0.1:631 tcp 0 0 172.16..0.0:777 0.0.0:32768 0. el kernel mantiene el rastro de un parámetro conocido como su nombre del equipo y el comando hostname -i presenta la dirección IP asociada con éste.0:* tcp 0 0 0. Uso del comando netstat para ver los puertos abiertos Cuando un puerto es utilizado por un socket se le conoce como puerto abierto.0.0.0.0.0.0:* .1:25 0..0:6000 0.0:111 0.62.1:631 tcp 0 0 127.62.0.0.9:33325 172.0.0:* udp 0 0 0. No obstante. la salida de netstat es similar a la siguiente.62..1:33953 127.0.0. tcp 0 314 127.1:631 127.0.0.0.16.0.0.1:631 0.0..0:177 0.0. por ejemplo)..0.62.16.0.0.0.0:* tcp 0 0 127.62.Cuando se invoca con las siguientes opciones.0.1:33952 127.0.0.0:80 0.62.0:* tcp 0 0 0. Sin embargo.1:631 .0.0.0. cuando se llama con las siguientes opciones se ve información más interesante.

Nos referiremos a los estados más interesantes LISTEN y ESTABLECIDO.0.0:* LISTEN tcp 0 0 127.8:6001 ESTABLISHED tcp 0 0 172.0.0.62.16.0.0:* LISTEN tcp 0 0 0.0.0:* LISTEN tcp 0 0 127.62.0:* LISTEN tcp 0 0 0.0.16.0:* . la salida de netstat es similar a la siguiente.62. sino porque también son fáciles de recordar: por ejemplo.0.16.Table 1.0.0. tcp 0 0 172.0.0:* LISTEN tcp 0 0 0.0. Cuando se invoca con las siguientes opciones.0. para mayor información acuda a la página de manual netstat(8).0. [elvis@station elvis]$ netstat -tuna Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 127.1:32768 0.62.0.0.0. 403 .0.0.9:33325 172.0:22 0.1:631 TIME_WAIT tcp 0 0 127.1:631 127.0:111 0.16.0.0.1:25 0. podemos retirar aquellas asociadas con el protocolo udp y concentrarnos en las columnas 4.0.0. Las siguientes opciones se escogieron.0. Opciones para el comando netstat Opción -t -u -n -a Efecto Presenta los sockets TCP Presenta los sockets UDP Presenta la dirección IP en lugar del hostname Presenta todos los sockets incluso aquellos en estado LISTEN Muchas más opciones están disponibles.1:631 TIME_WAIT .9:34387 172.0:* LISTEN tcp 0 0 0.0..0.0. tcp 0 314 127. Columnas relevantes desde la salida de netstat Columna 1 4 5 6 Título Protocolo Dirección local Dirección extranjera Estado Función El protocolo del socket. De las muchas líneas.0.0.0.0:32768 0.0. La dirección IP y el número de puerto de la mitad local del socket.0.16.16.9:32848 172.1:32769 127.0.0:443 0.0.8:6001 ESTABLISHED .8:6001 ESTABLISHED tcp 0 0 127.0.0.1:631 ESTABLISHED tcp 0 0 172.0.0.0.0.0. Nos referiremos a los sockets tcp.0:* LISTEN tcp 0 0 0.0.1:33952 127. no solo porque cuando se combinan producen una salida interesante.16..0.1:32769 ESTABLISHED tcp 0 0 172. Table 2.0.0.62.0:177 0. 5 y 6 de las filas asociadas con tcp.0.0.9:32903 172.62.0:6000 0.62.16.0.0.0.0.0:* LISTEN tcp 0 0 0.0.0.0.0.0:80 0..62. "tuna" (atún).0.0:777 0.0.. El estado de la conexión TCP.8:22 ESTABLISHED udp 0 0 0..1:33953 127.0.0.0.0..0:* LISTEN tcp 0 0 127. La dirección IP y el número del puerto de la mitad remota del socket.1:631 0.0:* udp 0 0 0.

0. Deben pertenecer a servicios que esperan recibir conexiones desde otros procesos en la máquina local 404 .0:* LISTEN LISTEN Estos dos sockets están escuchando conexiones. Esta dirección especial IP sirve para referirse a "todas" las direcciones IP disponibles.1:631 0 127. Aparentemente esta máquina también tiene un servidor de red httpd escuchando activamente conexiones de clientes.0. no se expone a la red.0. el proceso httpd tendría una conexión abierta en el estado de escucha. pero sólo en la dirección de bucle local.0.1:25 0.0. Las conexiones a la máquina o desde la máquina desde esta dirección siempre se retroalimentan a la máquina local para que la comunicación pueda ocurrir entre dos procesos en la misma máquina.0. La conversación que se presenta sobre la dirección de bucle local ocurre internamente. sólo se define la mitad de la dirección. Cada máquina que utiliza las redes TCP/IP es compatible con la dirección de bucle local o loopback. Conexiones establecidas Como su nombre lo implica.1 Función La dirección IP externa de la máquina tal como la reportó el comando hostname -i.0.0 Sockets de escucha Los sockets de escucha son conexiones pertenecientes a un servidor antes de que los clientes se presenten. Uniendo esfuerzos Ahora podemos reunir algunas de las partes para analizar unas pocas líneas extraídas de la salida anterior.0. tcp tcp 0 0 0 127.Direcciones especiales IP Las siguientes direcciones IP pueden hallarse en la columna de dirección local de la salida anterior. Dirección IP 172.0. Observe en la salida anterior que para las conexiones de escucha.0.0.0.16.0. La dirección bucle local.0. Por ejemplo.0. al final del primer paso de nuestra conexión TCP/IP de muestra anterior. 0.0:* 0. los sockets establecidos tienen un proceso de cliente y un proceso de servidor con comunicación establecida. puede elegir entre utilizar únicamente una dirección particular externa.0:80 0.62.0:* LISTEN Este socket está conectado a todas las interfaces en el puerto 80 en el estado de ESCUCHA.9 127. sólo la dirección de bucle local o todas las direcciones IP disponibles. Cuando un proceso se enlaza a un determinado puerto.0. tcp 0 0 0.

0.0. El primero está conectado al puerto 32769 (probablemente un puerto cliente asignado de modo aleatorio) y el segundo al puerto 631.9:34387 172. # # # # SSH Remote Login Protocol SSH Remote Login Protocol Interactive Mail Access Protocol v3 Aparentemente.62. cualquier proceso que haya solicitado el puerto 25 está escuchando clientes de correo electrónico. esta línea representa una conexión activa entre un cliente ssh en la máquina local y un demonio sshd en una máquina con una dirección IP de172.16.pero no desde la red. Probablemente es el demonio sendmail. Ambos servicios se tratarán más adelante en este cuaderno.8:22 ESTABLISHED Nuestra línea extraída representa una conexión establecida entre lo que aparentemente es un cliente en nuestra máquina local.16.1:631 ESTABLISHED Esta línea refleja una conexión establecida entre dos procesos ambos en la máquina local (observe la dirección IP de bucle local para los dos). [elvis@station elvis]$ grep 25 /etc/services smtp 25/tcp mail smtp 25/udp mail timed 525/tcp timeserver timed 525/udp timeserver prospero-np 1525/tcp prospero-np 1525/udp [elvis@station elvis]$ grep 631 /etc/services ipp 631/tcp ipp 631/ucp # Prospero non-privileged # Internet Printing Protocol # Internet Printing Protocol Aparentemente.62.1:32769 127.0. tcp 0 314 127.1/ipaddr que contenga su dirección IP de máquina como lo reporta el comando hostname como su única palabra. Probablemente es el demonio de impresión cupsd. De nuevo.16. Para determinar a qué servicios pertenecen estos puertos ejecutamos un grep desde el archivo /etc/services.0. 405 .. Ejercicios en línea Lab Exercise Objetivo: Familiarizarse con la configuración y actividad TCP/IP.8.. tcp 0 0 172. El proceso de escucha en el puerto 631 está escuchando clientes de impresión. Especificaciones 1. Algunos procesos en la máquina local deben estar comunicándose con el demonio cupsd.62. trataremos de llamar a grep para buscar el servicio bien conocido asociado con el puerto 22. Estimated Time: 10 mins. [elvis@station elvis]$ grep 22 /etc/services ssh 22/tcp ssh 22/udp imap3 220/tcp imap3 220/udp . Crear el archivo ~/lab11. conectado al servicio enlazado al puerto 22 en nuestra máquina remota.

abiertos en el estado de escucha. Crear el archivo ~/lab11. un puerto por línea. El archivo ~/lab11.1/ipaddr que contiene su dirección IP actual de la máquina (como lo reportó el comando hostname) como su única palabra.1/listening_ports que incluye un listado de todos los puertos menores de 1024 en su máquina actual. El archivo ~/lab11. 406 .1/listening_ports que contenga una lista de todos los puertos menores que 1024 en su máquina actual. 2. un puerto por línea. Deliverables A title Question 1 1.2. abiertos en el estado de escucha.

Una vez se ha sometido el trabajo a la cola. El sistema de impresión CUPS está diseñado en torno al concepto de cola de impresión. lpq y lprm se utilizan para someter ("solicitar") trabajos de impresión.Impresión Linux Conceptos clave • • • • Linux de Red Hat Enterprise utiliza el sistema de impresión CUPS para administrar impresoras. • • Discussion Introducción a CUPS Linux de Red Hat Enterprise utiliza el Sistema de Impresión Común de Unix (CUPS) para administrar impresoras. los usuarios someten las solicitudes de impresión a las colas de impresión que son manejadas por el demonio cupsd. En lugar de interactuar con la impresora directamente. Como resultado. Todos examinarán la variable de entorno PRINTER para determinar la cola de impresión por defecto. el cual es una extensión directa del protocolo HTTP. averiguar por trabajos importantes y quitar trabajos de impresión pendientes. Si la impresora está ocupada con otro documento o no tiene papel. Los comandos gnome-print-manager y lpstat pueden utilizarse para navegar colas de impresión disponibles. diseñado para permitir administración de cola de impresión. Infraestructura de impresión Linux 407 . un filtro y un dispositivo de impresión. Las solicitudes de impresión pendientes en una cola de impresión se conocen como trabajos de impresión. Los comandos lp y cancel se comportan de un modo similar a los comandos lpr ylprm. los usuarios pueden retornar rápidamente a cualquiera de las tareas que estaban haciendo. La siguiente gráfica identifica los elementos que participan en la impresión Linux. a la manera de un sistema operativo independiente. el demonio cupsd controlará la situación y enviará (o reenviará) el trabajo de impresión a la impresora cuando quede disponible. Los comandos lpr. dichos elementos se tratan en detalle más adelante. respectivamente. Muchas aplicaciones imprimen por entubamiento a stdin de una línea de comando personalizable lpr. o no está disponible en la red. la administración de CUPS tiene mucho en común con la administración del servidor de red. Figure 1. el cual combina un directorio de almacenamiento temporal. El demonio cupsd utiliza el Protocolo de Impresión de Internet (IPP).

es definir y nombrar correctamente la cola de impresión para el recurso. Un dispositivo secundario. se listan algunos de los dispositivos secundarios admitidos por CUPS. o impresoras de puerto paralelo conectadas localmente o impresoras localmente conectadas através de un USB o impresoras de red utilizando la interfaz LPD o impresoras de red utilizando interfaz de JetDirect o Colas de impresión IPP en máquinas remotas o Colas de impresión LPD en máquinas remotas o Servicios de impresión de red (Microsoft) SMB La tarea fundamental que enfrenta el administrador al configurar Linux de Red Hat Enterprise para que utilice una impresora particular o un servicio de red de impresión. En este curso asumiremos que ya se ha hecho todo el trabajo difícil y que las colas de impresión disponibles para su sistema ya se han definido. • • • Un directorio de almacenamiento temporal donde se pueden almacenar los trabajos pendientes. Esto generalmente implica identificar cuáles de los dispositivos secundarios anteriores se utilizan para acceder al dispositivo. A continuación.Colas de impresión Una cola de impresión es una combinación de los siguientes elementos. llamar y activar la cola de impresión. Una serie de filtros que transforman archivos de entrada en formatos apropiados para cualquier dispositivo secundario conectado a la cola. elegir un filtro apropiado para el dispositivo. 408 . tal como una impresora conectada localmente o una cola de impresión definida en una máquina remota.

409 . Todos los tres comandos utilizan las siguientes técnicas para especificar qué cola de impresión utilizar en el orden especificado. lpqy lprm CUPS utiliza los comandos de UNIX tradicionales para interactuar con el sistema de impresión: lpr somete archivos e información que van a imprimirse.com:631/printers/exec . 1. El administrador de impresión GNOME Cuando el entorno gráfico no está disponible. entonces se utiliza la variable de entorno PRINTER. vea la página de manual lpstat(1). [elvis@station elvis]$ lpstat -s system default destination: printer device for acct2_ire: ipp://printsrv.example.example. el comando lpstat se puede utilizar para escanear las colas de impresión disponibles desde la línea de comando.com:631/printers/coms device for exec: ipp://printsrv. Lista todos los trabajos importantes Lista todas las colas de impresión y si están inactivas u ocupadas. El control de impresión puede iniciarse ya sea desde la línea de comandos o al elegir Herramientas del Sistema: Administrador de Impresión desde el menú de aplicaciones GNOME. si existe. elvis descubre que su cola de impresión de sistema por defecto. o incluso cuando lo está. gnome-print-manager puede utilizarse para identificar las colas de impresión y controlar los trabajos de impresión sometidos a ellas. lpq examina el estatus de trabajos de impresión importantes y lprm quita trabajos de impresión pendientes en la cola. A continuación.Navegar las colas de impresión disponibles: gnome-print-manager y lpstat Las colas de impresión están disponibles ya sea porque se han definido en la máquina local o descubierto mediante la habilidad de CUPS para navegar la red local para impresoras publicadas.example. Someter y administrar trabajos: lpr.example. 2.example. En el entorno gráfico. La siguiente línea de comandos sirve para clasificar el comando lpstat.example. Figure 1. se llama simplemente "printer" y que tiene varias colas de impresión disponibles..com:631/printers/acct_ire device for ba: ipp://printsrv. su argumento se utiliza para especificar la cola de impresión..com:631/printers/acct2_ire device for acct_ire: ipp://printsrv. que parecen referirse a la cola de impresión IPP en un servidor de impresora local. Table 1. Si no se utiliza -P para definir la cola de impresión por defecto. Lista el estatus de la impresora. Opciones para el comando lpstat Opción -a -o -p -s Efecto Lista estado de aceptación de todas las colas de impresión. Si se halla la opción -P. Para mayor información. incluída la cola por defecto y el dispositivo secundario asociado con cada cola.com:631/printers/checks device for coms: ipp://printsrv.com:631/printers/ba device for checks: ipp://printsrv.

[blondie@station blondie]$ df | lpr -P legal [blondie@station blondie]$ lpq -P legal legal is ready and printing Rank Owner Job File(s) active elvis 1 services 1st blondie 5 (stdin) Total Size 20480 bytes 1024 bytes Eliminación de trabajos con lprm Blondie sospecha que algo anda mal con la impresora legal y decide iniciar utilizando la impresora sales como su impresora por defecto. Si no se especifican argumentos en su lugar se lee la entrada estándar. Borra los archivos de impresión nombrados después de imprimir. [blondie@station blondie]$ lpr -P sales README Control de trabajos con lpq El comando lpq lista los trabajos pendientes en una cola. blondie utiliza el comando lpr para imprimir el archivo README mediante la cola de impresiónsales. Imprime # copias Representa archivos de texto con un encabezado que contiene el nombre del archivo. Las siguientes opciones sirven para clasificar el comando lpr. Todos los argumentos son interpretados como archivos para someter. a continuación. Table 1. Someter trabajos con lpr Los trabajos pueden someterse con el comando lpr.3. De otra manera. luego utiliza el comando lprm para quitar su trabajo de la cola legal. se utiliza el sistema de cola de impresión por defecto. A manera de ejemplo. 410 . Opciones del comando lpr Opción -P impresora -# -p -r Efecto Uso de la cola de impresión impresora. En el siguiente ejemplo. nombre del trabajo y el sello de fecha. blondie somete la salida del comando df para la impresora legal y luego examina el contenido de la cola. Primero configura la variable de entorno PRINTER para reflejar sus nuevas preferencias.

Impresión dentro de aplicaciones Linux Con frecuencia las aplicaciones Linux suelen imprimir entubando la información directamente a la entrada estándar del comando lpr. incluyendo el servidor de las páginas de administración de estilo CGI. Diálogo de impresión de Evolution La interfaz de red CUPS Por último. el demonio cupsd se comporta en muchas formas como el demonio de web. Por lo general. la variable de entorno PRINTER implícitamente especificó la cola de impresión sales. Debido a su parecido. seríamos negligentes si abandonáramos el tema de CUPS sin mencionar la interfaz de red nativa que el demonio cupsd brinda. por ejemplo. el cual es una extensión del protocolo HTTP. el campo Printer inicialmente sólo contenía un lpr. La primera utilizó los tres comandos presentados anteriormente es decir lpr. En la siguiente toma de pantalla del diálogo de impresión de la aplicación Evolution. 411 . Los comandos de Front End alternativos: lp y cancel En Unix. en los días precedentes a CUPS. consulte la página de manual lp(1). Figure 1. se pueda especificar una cola de impresión diferente a la cola de impresión por defecto. se implementaron dos ejecuciones paralelas de la infraestructura de impresión. para que. La segunda utilizó lp. lpstat y cancel para tareas análogas. lpq. Ya hemos visto que lpstat es compatible y es la herramienta preferida para descubrir colas de impresión. la mayoría de los clientes interactúan con el demonio cupsd mediante el protocolo IPP. Como se mencionó. las aplicaciones permiten a los usuarios personalizar la línea de comando lpr. y lprm. Para mayor información. pero blondie añadió la opción -P sales para que la salida de evolution vaya a la impresora sales. Los comandos lp y cancel también están disponibles como variaciones leves de los comandos lpr y lprm.[blondie@station blondie]$ export PRINTER=sales [blondie@station blondie]$ lpq sales is ready no entries [blondie@station blondie]$ lpq -P legal legal is ready and printing Rank Owner Job File(s) active elvis 1 services 1st blondie 5 (stdin) [blondie@station blondie]$ lprm 5 [blondie@station blondie]$ lpq -P legal legal is ready and printing Rank Owner Job File(s) active bowe 1 services [blondie@station blondie]$ df | lpr Total Size 20480 bytes 1024 bytes Total Size 20480 bytes Observe que en el primer comando lpq y el último comando lpr.

Imprima el archivo /usr/share/backgrounds/tiles/floral.Con el fin de ver las páginas de administración de CUPS. http://rha-server/cgi-bin/rha/printer. 631. Figure 1. apunte un navegador de red hacia la dirección de la máquina local. Desde su navegador de red. Si el comando lpstat -s no menciona una cola de impresión llamada rha_faux o si no puede acceder a la página web del servidor del aula de clase. http://rha-server/cgi-bin/rha/printer.png mediante la cola de impresión rha_faux y observe su salida. Imprima el archivo /etc/services mediante la cola de impresión rha_faux y observe su 2. pero sobreescriba el puerto 80 por defecto con el puerto de servicio bien conocido de los demonios de CUPS. Configuración Su estación debería configurarse con una cola de impresión llamada rha_faux. 412 . Usted puede ver la primera página de cualquier trabajo de impresión enviado a la impresora en el classroom server. Especificaciones 1. http://localhost:631 El demonio cupsd retornará con una"página de inicio" de CUPS desde donde pueden verse las impresoras y los trabajos de impresión y existe dsiponible una copiosa documentación en línea. Deliverables A title Question 1 1. Estimated Time: 10 mins. consúltele a su instructor. salida. La página de inicio de administración de CUPS Ejercicios en línea Lab Exercise Objetivo: Administrar trabajos de impresión efectivamente. 3. imprima la página actual directamente a la cola de impresión rha_faux. Tres trabajos de impresión sometidos a la cola de impresión rha_faux. Esta cola de impresión se anexa a la impresora virtual en ejecución en el servidor del aula de clase.

Administración de archivos de impresión Conceptos clave • • • • • El formato de impresión primario en Linux es PostScript. enscript convierte archivo de texto en PostScript decorado. ps2pdf y pdf2ps convierten de PostScript a PDF y viceversa. 413 . En Linux (y Unix) una aplicación llamada Ghostscript o simplemente gs ejecuta un intérprete PostScript. la mayoría de las impresoras esperan recibir texto ASCII o gráficas mediante el formato PostScript. Discussion PostScript En Linux. en el siguiente diálogo. el cual se ha adaptado a la tarea de traducir gráficas en la página impresa. Cada vez que una impresora PostScript recibe un archivo de texto que comienza con los caracteres %!PS. al navegador de red mozilla se le pide imprimir la página web actual no a una cola de impresión. La sofisticación del lenguaje PostScript le permite realizar trabajos complejos. sino a un archivo PostScript titulado output. gs y ggv ven con anticipación los documentos PostScript. mpage pueden reordenar las páginas individuales de un documento PostScript. pero debe utilizar un intérprete para entregar archivos PostScript como imágenes. A diferencia de la mayoría de los formatos gráficos. Entrega de gráficos PostScript con GhostScript Cuando se invoca como el comando gs.ps. el resto del archivo se interpreta como un guión PostScript. un archivo PostScript es un archivo de texto sencillo que comienza con el "mágico" PostSript%!PS. el intérprete Ghostscript puede utilizarse para traducir archivos PostScript directamente en la pantalla. Muchas impresoras ejecutan intérpretes PostScript originales y se conocen como impresoras PostScript. Figure 1. PostScript es un lenguaje de guiones de gran alcance. Por ejemplo. en lugar imprimirse como un texto ASCII directamente (observe la semejanza con el mecanismo de scripts de Unix#!/bin/bash). Impresión a un archivo PostScript Como lo ilustra el comando head. La ejecución de un PostScript es una tarea importante y aunque las aplicaciones en Linux pueden utilizarse para ver o manipular archivos PostScript casi todos utilizan Ghostscript como el dispositivo secundario para realizar la traducción real de PostScript en formatos gráficos más accesibles [1].

. el intérprete gs traduce los archivos PostScript a una ventana dentro del entorno X. 414 . el intérprete puede utilizarse para entregar gráficas de modo interactivo. Loading NimbusRomNo9L-Regu font from /usr/share/fonts/default/Type1/n021003l. un simple quit (o CONTROL-D) hará salir al intérprete gs.. press <return> to continue<< GS> El intérprete gs devuelve muchas líneas de tipos de fuente que carga.. pero al final traduce la imagen en una ventana X por separado... el usuario es abandonado en un intérprete de comandos interactivo Ghostscript GS> . Loading NimbusSanL-Regu font from /usr/share/fonts/default/Type1/n019003l. En la línea de comandos.. >>showpage.05 (2002-04-22) Copyright (C) 2002 artofcode LLC. Loading StandardSymL font from /usr/share/fonts/default/Type1/s050000l.ps %!PS-Adobe-3. Para aquellos que hablen PostScript. Si el archivo PostScript contiene páginas múltiples. [elvis@station elvis]$ gs output.. La siguiente línea de comandos puede utilizarse para ver el archivo con el intérprete Ghostscript. CA. 2785628 1380272 1662616 358654 0 done. 4371596 2780842 1722904 370909 0 done.. . Benicia. This software comes with NO WARRANTY: see the file PUBLIC for details.ps GNU Ghostscript 7.pfb. Sin embargo. un simple ENTER en el intérprete de comandos Ghostscript visualizará la próxima página.0 %%BoundingBox: 18 18 558 720 %%Creator: Mozilla PostScript module (Galeon/2003022516) %%DocumentData: Clean8Bit %%DocumentPaperSizes: Letter . 2410668 1054394 1642520 347466 0 done.pfb. GS>quit [elvis@station elvis]$ Traducción de PostScript a formatos alternos Por defecto.[elvis@station elvis]$ head output.pfb. el comando ejecutable gs puede representar un gran número de formatos gráficos. All rights reserved. Para aquellos que tengan menos conocimientos. como lo ilusta la salida de los dispositivos disponibles del comando gs --help...

. se refieren a los formatos estándar para archivos gráficos. Benicia. embed %d or %ld for page # Input formats: PostScript PostScriptLevel1 PostScriptLevel2 PDF Available devices: x11 x11alpha x11cmyk x11gray2 x11gray4 x11mono bmpmono bmpgray bmpsep1 bmpsep8 bmp16 bmp256 bmp16m bmp32b deskjet djet500 laserjet ljetplus ljet2p ljet3 ljet3d ljet4 ljet4d lj5mono lj5gray cdeskjet cdjcolor cdjmono cdj550 pj pjxl pjxl300 uniprint ijs omni bj10e bj200 bjc600 bjc800 faxg3 faxg32d faxg4 pcxmono pcxgray pcx16 pcx256 pcx24b pcxcmyk pbm pbmraw pgm pgmraw pgnm pgnmraw pnm pnmraw ppm ppmraw pkm pkmraw pksm pksmraw tiffcrle tiffg3 tiffg32d tiffg4 tifflzw tiffpack tiff12nc tiff24nc psmono psgray psrgb bit bitrgb bitcmyk pngmono pnggray png16 png256 png16m jpeg jpeggray pdfwrite pswrite epswrite pxlmono pxlcolor bbox dmprt cdj880 ap3250 appledmp atx23 atx24 atx38 bmpa16 bmpa16m bmpa256 bmpa32b bmpamono bmpasep1 bmpasep8 ccr cdj1600 cdj500 cdj670 cdj850 cdj890 cdj970 cfax cgm24 cgm8 cgmmono cljet5pr coslw2p coslwxl cp50 declj250 dfaxlow dfaxhigh djet500c dl2100 dnj650c eps9high eps9mid epson epsonc escp fs600 hl1250 hl7x0 ibmpro imagen inferno iwhi iwlo iwlq jetp3852 la50 la70 la75 la75plus lbp8 lj250 lj3100sw lj4dith ln03 lp2563 lp8000 lq850 lxm5700m m8510 mgr4 mgr8 mgrgray2 mgrgray4 mgrgray8 mgrmono miff24 necp6 oce9050 oki182 okiibm paintjet photoex pjetxl plan9bm sgirgb r4081 sj48 st800 stcolor sunhmono t4693d2 t4693d4 t4693d8 tek4696 xes x11cmyk2 x11cmyk4 x11cmyk8 x11rg16x x11rg32x ljet4pjl lj4dithp dj505j picty180 pr201 pr150 pr1000 pr1000_4 jj100 bj10v bj10vh mag16 mag256 mj700v2c mj500c mj6000c mj8000c fmpr fmlbp ml600 lbp310 lbp320 lips2p bjc880j lips4 lips4v escpage lp2000 npdl md50Mono md50Eco md1xMono DJ630 DJ6xx DJ6xxP DJ8xx DJ9xx DJ9xxVIP AP21xx pcl3 md2k md5k stp lxm3200 lx5000 lex7000 lex5700 lex3200 lex2050 gdi epl5800 epl2050 epl2050p alc8500 alc2000 cups cljet5 cljet5c nullpage .[elvis@station elvis]$ gs --help GNU Ghostscript 7. El siguiente cuadro resume algunos de las opciones de Ghostscripts más utilizadas..for stdout.] Most frequently used switches: (you can use # in place of =) -dNOPAUSE no pause after page | -q `quiet'. 415 . muchos de los dispositivos se refieren a formatos gráficos de impresoras sin PostScript o fax. Opciones comunes para Ghostscript Opción -dNOPAUSE -dBATCH -q Efecto No hace pausa y espera un RETURN después de traducir cada página. Sale automáticamente después de traducir la última página. La utilidad gs puede utilizarse en modo de lote para convertir un gran número de archivos PostScript en otro formato o filtrar un documento para impresión en una impresora sin PostScript. Mientras algunos de estos "dispositivos" de salida tales como jpeg y png256.05 (2002-04-22) Copyright (C) 2002 artofcode LLC.. |command for pipe.ps . fewer messages -g<width>x<height> page size in pixels | -r<res> pixels/inch resolution -sDEVICE=<devname> select device | -dBATCH exit after last file -sOutputFile=<file> select output file: . Table 1. CA. All rights reserved.. Opera "calmadamente" (no presenta un mensaje por cada página traducida). Usage: gs [switches] [file1.ps file2.

non-interlaced output. 8-bit colormap. [elvis@station elvis]$ ggv output. Escala dinámica: La imagen puede hacerse a escala para ajustar la anchura y altura de la 2. 612 x 792. se remplazará con el número de página del documento multipágina. 612 x 792. el traductor de PostScript gs puede utilizarse directamente. la cual ofrece un dispositivo frontal para Ghostscript más fácil de usar.ps [elvis@station elvis]$ file output. En casos en que ggv tiene problemas para traducir un documento PostScript.pagenum.ps: PostScript document text conforming at level 3. Ver documentos PDF con xpdf La aplicación xpdf es un simple visor de documentos PDF que sirve para ver. 1.1.png: PNG image data. ggv. Algunos documentos PostScript multi-páginas pueden también confundir a ggv. ggv ocasionalmente tiene problemas interpretando documentos PDF. A manera de ejemplo.0 Ver gráficas PostScript con Ghostview A pesar de su poder. la aplicación Ghostview también sirve para ver archivos PDF. non-interlaced output.ps Figure 1. Extracción de páginas mediante el visor PostScript Ghoscript de GNOME En teoría. Paginación: Al utilizar un panel lateral se puede navegar fácilmente un documento multipáginas y seleccionar páginas individuales para extraer dentro de un archivo PostScript independiente o imprimir mediante el menú File como se ilustra a continuación.png output.-sDEVICE=devname sOutputFile=filename -rresolución Utiliza el formato de salida devname Almacena la salida en el archivo filename. Figure 2. Visor PostScript del Ghostview de GNOME La aplicación Ghostview de GNOME ofrece principalmente las siguientes características. [elvis@station elvis]$ gs -dNOPAUSE -dBATCH -q -sDEVICE=png256 -sOutputFile=outp ut.2. Figure 1. imprimir o convertir documentos PDF en PostScript. 8-bit colormap. El visualizador de documentos PDF xpdf 416 . Utiliza una resolución de resolución DPI (puntos por pulgada). Pronto veremos una aplicación más estable para visualizar los PDF.PNG.* output. En la práctica.%d. la siguiente línea de comandos convertiría el documento PostScript output. el comando gs de la interfaz de usuario aún se puede mejorar.png: PNG image data.ps en imágenes múltiples PNG llamadas output. ventana o un porcentaje arbitrario. Si %d se incluye en el nombre de archivo. En lugar de utilizar directamente gs muchos usuarios prefieren utilizar la aplicación Ghostview de GNOME.

612 x 792. Algunos documentos PostScript multi-páginas pueden también confundir a ggv.pdf: PDF document.ps en formato PDF.0 [elvis@station elvis]$ ls -s output. Visor PostScript del Ghostview de GNOME La aplicación Ghostview de GNOME ofrece principalmente las siguientes características. Impresión desde xpdf Otras alternativas para ver documentos PDF incluyen los comandos gs y ggv. Extracción de páginas mediante el visor PostScript Ghoscript de GNOME En teoría.ps output. El botón del icono de impresora abre el siguiente diálogo. Figure 2. 612 x 792. el traductor de PostScript gs puede utilizarse directamente.ps Figure 1. 2. A manera de ejemplo rápido. elvis ahora utiliza el comando ps2pdf para convertir su archivo output. Figure 2. pero mucho más compacto. la aplicación Ghostview también sirve para ver archivos PDF. 8-bit colormap. Paginación: Al utilizar un panel lateral se puede navegar fácilmente un documento multipáginas y seleccionar páginas individuales para extraer dentro de un archivo PostScript independiente o imprimir mediante el menú File como se ilustra a continuación. algunas utilidades frontales de línea de comando más sencillas están disponibles para convertir PostScript en PDF: ps2pdf y amigos. el cual es de calidad comparable. 417 . La sintaxis del comando ps2pdf es trivial. 8-bit colormap. [elvis@station elvis]$ ps2pdf output.pdf 1400 output.Las flechas en la esquina inferior izquierda permiten al documento navegar una página o 10 páginas al mismo tiempo.pdf [elvis@station elvis]$ file output. ggv ocasionalmente tiene problemas interpretando documentos PDF.2 output.png: PNG image data.* output.ps: PostScript document text conforming at level 3. donde el primer argumento es la salida del nombre de archivo PostScript (o un “-” para implicar la entrada estándar) y el segundo argumento es la salida del nombre de archivo de salida PDF (o un “-” para implicar la salida estándar). non-interlaced output. En casos en que ggv tiene problemas para traducir un documento PostScript. Conversión de documentos PDF La utilidad gs puede utilizarse para convertir documentos PDF en cualquiera de los formatos de salida listados anteriormente. el cual permite al usuario especificar una línea de comando lpr o un destino de archivo PostScript. version 1.1.png: PNG image data. non-interlaced output.p* 80 output. En la práctica.2. Escala dinámica: La imagen puede hacerse a escala para ajustar la anchura y altura de la ventana o un porcentaje arbitrario. Pronto veremos una aplicación más estable para visualizar los PDF. 1. Puesto que la sintaxis del comando gs puede ser tan engorrosa.

A manera de ejemplo rápido. Opciones más comunes para enscript 418 . el cual es de calidad comparable. Representación del texto para impresión con enscript La utilidad enscript convierte archivos de texto en PostScript. un encabezado o impresión de múltiples páginas de texto por página impresa.ps [elvis@station elvis]$ ggv malloc. donde el primer argumento es la salida del nombre de archivo PostScript (o un “-” para implicar la entrada estándar) y el segundo argumento es la salida del nombre de archivo de salida PDF (o un “-” para implicar la salida estándar). Table 1. imprimir o convertir documentos PDF en PostScript. Figure 1.ps El comando pdf2ps también existe para realizar la operación inversa. Impresión desde xpdf Otras alternativas para ver documentos PDF incluyen los comandos gs y ggv. pero mucho más compacto. Figure 2. [elvis@station elvis]$ enscript -r2 -E -G -o malloc. dando como resultado que los archivos enscript se impriman inmediatamente. Puede utilizar la opción -o para especificar una salida del archivo PostScript en su lugar.Ver documentos PDF con xpdf La aplicación xpdf es un simple visor de documentos PDF que sirve para ver.ps en formato PDF.ps /usr/include/malloc. El botón del icono de impresora abre el siguiente diálogo.h [ 2 pages * 1 copy ] left in malloc. a menudo representando el texto con sintaxis resaltada (pretty printing). Conversión de documentos PDF La utilidad gs puede utilizarse para convertir documentos PDF en cualquiera de los formatos de salida listados anteriormente. el cual permite al usuario especificar una línea de comando lpr o un destino de archivo PostScript. De un modo un poco torpe. La sintaxis del comando ps2pdf es trivial. El visualizador de documentos PDF xpdf Las flechas en la esquina inferior izquierda permiten al documento navegar una página o 10 páginas al mismo tiempo. Algunas de las opciones más comunes se encuentran en el siguiente cuadro. Puesto que la sintaxis del comando gs puede ser tan engorrosa. elvis ahora utiliza el comando ps2pdf para convertir su archivo output. el comando enscript envía un archivo de texto directamente al comando predeterminado lpr. algunas utilidades frontales de línea de comando más sencillas están disponibles para convertir PostScript en PDF: ps2pdf y amigos.

html. consulte la página de manual enscript(1).Opción -o filename -2. si se especifican. rotado y representado con un encabezado elegante y una sintaxis resaltada. El texto se traduciría en PostScript antes de administrar. Table 1. Un formato elaborado es provisto para especificar nombre de archivo. Formatear texto en 2 (o num) columnas. la palabra impar o par. Rota la página 90 grados.h como PostScript con 2 columnas por página. Utiliza el encabezado de texto como un encabezado de página. El mpage acepta PostScript o texto como entrada. Representa el texto con sintaxis resaltada apropiada para el lenguaje de programación lang. --columns=num -a páginas -b encabezado -d impresora -E [lang] -G -r -W lang Efecto Generar salida del archivo filename. Archivo de texto representado en PostScript con enscript Reordenamiento de PostScript con mpage El comando mpage puede utilizarse para extraer páginas desde la mitad de un documento PostScript multi-páginas o reformatear el documento a imprimir con múltiples páginas por hoja.ps /usr/include/malloc. Representa páginas con un encabezado elegante. Sólo imprime un rango especificado de páginas incluyendo sólo los intervalo de páginas. etc.h [ 2 pages * 1 copy ] left in malloc. Genera salida en idioma lang. Representa páginas con un encabezado elegante. número de página. Envia salida a la cola de impresiónimpresora. Imprimir un número especificado de páginas por hoja impresa (4 por defecto). Cambia el modo de formato horizontal a vertical. -2. Para mayor información. -4. Los argumentos se consideran archivos de entrada con la salida dirigida a la salida estándar. Existen muchas más opciones.ps Figure 1. páginas pueden ser de la forma comienzo-fin. A manera de ejemplo. -8 -j primero[-último] [%intervalo] -l -o -P [impresora] -G Efecto Generar salida del archivo filename. Opciones de mpage Opción -o filename -1. superposición o rtf. Cambia a imprimir borde alrededor de cada página (por defecto está activo).ps [elvis@station elvis]$ ggv malloc. Utiliza --help-pretty-print para listar los idiomas soportados. que puede ser de PostScript. Solamente imprime páginas páginas. la siguiente línea de comandos traduciría el archivo de encabezado C malloc. Envía salida PostScript a la cola de impresión impresora. 419 . [elvis@station elvis]$ enscript -r2 -E -G -o malloc.

Tiempo estimado: 20 minutos.ps [elvis@station elvis]$ ggv rhel3. Utilice el comando enscript para generar un documento PostScript del archivo /usr/share/doc/bash-*/loadables/getconf. 420 .ps con dos páginas por hoja impresa. Un documento PDF convertido en PostScript (4 Up) Ejercicios en línea Lab Exercise Objetivo: Practicar la salida para impresión. superposición o rtf. [elvis@station elvis]$ pdf2ps RHEL3FamOverWPPdf. que puede ser de PostScript.c nombre getconf. Genera salida en idioma lang.pdf .pdf en un archivo PostScript e imprime cuatro páginas por hoja. html.| mpage > rhel3. Especificaciones 1. haga que el comando enscript "pretty print" el texto (agregando sintaxis resaltada).-r -G -W lang Rota la página 90 grados. La siguiente línea convierte el archivo PDF RHEL3FamOverWPPdf.ps Figure 1. Opcionalmente. Representa páginas con un encabezado elegante.

Deliverables A title Question 1 No hay elemento para calificar este ejercicio.ps que contiene el texto del archivo /usr/share/doc/bash-*/loadables/getconf.ps. Utilice el comando ps2pdf para convertir el archivo getconf89. (Por defecto el comando mpage imprimirá 4 hojas por páginas de salida. 1. Utilice el comando mpage para extraer las páginas 8 y 9 del archivo getconf. El documento PDFgetconf89. Un documento PostScript de dos páginas getconf89. el cual al ser llamado con un sólo argumento especificando un archivo PostScript. 3.ps creado anteriormente. Un documento de múltiples páginas PostScript getconf. impreso en 2 páginas por página de salida. Cree un script de shell corto llamado ~/bin/ps2jpeg. 4. 3.ps que contiene las páginas 8 y 9 extraídas del documento getconf.pdf.2.ps convertido en formato PDF. convertirá el documento en una imagen JPEG llamada output. Un script titulado ~/bin/ps2jpeg que cuando se invoca con un documento PostScript como su único argumento. utiliza el comando gs para convertir el archivo en un documento JPEG llamado output. Incluya la opción apropiada para que sólo una página de entrada sea impresa por página de salida). el cual es el contenido del documento PostScript getconf89.c. almacénelas en un nuevo documento llamado getconf89.jpg. 421 .ps. 2.jpg.pdf. Compare los tamaños de los dos documentos.ps en un documento PDF titulado getconf89. confundiendo el conteo de páginas.

el sistema de envío de correo electrónico debe ofrecer soluciones a algunos problemas bastante complicados. la tarea de entregar correo electrónico se puede delegar a un servidor remoto saliente SMTP. la aplicación de correo electrónico de Bob debe tener alta capacidad. el correo local entregado pero no leído se almacena temporalmente en el archivo /var/spool/mail/$USER. en donde USER es el nombre de usuario del destinatario. por lo tanto cada vez que alguien (Alicia u otra persona) quiera enviarle un mensaje de correo electrónico a Bob. El software que Alice y Bob utilizan debe resolver los siguientes problemas. Como destinatario. La solución fácil La solución más sencilla es la apropiada para los usuarios de computadores con conexiones deinternet bien conocidas y permanentes. en inglés Mail User Agent). 1.Sinopsis del correo electrónico Conceptos clave • La administración del correo electrónico implica dos agentes. El correo electrónico es un concepto sencillo: Alicia escribe un archivo de texto y especifica enviarlo a Bob. De nuevo dependiendo de los detalles de acceso a Internet de un computador. el archivo de texto estará esperando por él. Cuando Bob revisa su correo. Si la máquina de Bob no puede ser contactada. la aplicación de Alice debe conectarse a la máquina de Bob y transferir el mensaje. ésta fue la solución estándar. Una vez determinada. La aplicación de correo electrónico de Alice de alguna manera determina cuál es el computador de Bob. lo que permitiría luego que el usuario tuviera acceso a su correo electrónico enviado mediante los protocolos POP o IMAP. etiquetado como enviado por Alice. lo que luego complicará las cosas. En esta lección. el cual se utiliza para presentar correo recién enviado a un usuario y escribir nuevas respuestas al usuario y un agente de transporte de correo (MTA. Dicha solución implica dos aplicaciones separadas cuyos roles se identifican por TLA (acrónimos de tres letras). En el momento en que muchos protocolos definían cómo enviar correo electrónico. la aplicación de Alice debe almacenar temporalmente el mensaje pendiente y tener alguna estrategia para tratar de contactar la máquina de Bob más tarde. el trabajo de recepción de correo electrónico se puede delegar a un servidor de buzón. en inglés Mail Transport Agent). el recipiente de correo utiliza una máquina que no tiene una conexión permanente de Internet o está detrás de un cortafuegos. Uno de los MUA más sencillos es el comando mail. 2. Un agente de usuario de correo (MUA. La primera aplicación se 422 . • • • • Discussion Uso del correo electrónico Es discutible que el servicio más popular ofrecido por Internet es el correo electrónico. su aplicación estará disponible para recibirlo. En algunos casos. en la práctica. Sin embargo. 3. Por lo general. el cual administra la tarea de segundo plano de intercambiar correo electrónico con otras máquinas remotas. Dependiendo de los detalles de acceso a Internet de un computador. trataremos varios procedimientos que ofrecen soluciones a estos problemas.

recibe el correo y lo almacena en un directorio de almacenamiento temporal conocido como el buzón de entrada del usuario. El MUA permite a los usuarios escribir respuestas o nuevos mensajes y pasar estos mensajes al MTA local para envío. donde recibe conexiones de otros MTA. En Linux (y Unix). realizando el trabajo de una oficina postal. El MTA por defecto de Red Hat Enterprise Linux es un demonio llamado sendmail. o Agente de correo de usuario. 423 . varios de los cuales se describirán en ésta y en la siguiente lección. Red Hat Enterprise Linux se distribuye con una amplia selección de MUAs. El MTA también se enlaza al puerto local 25. El MTA recibe correo electrónico para ser envíado desde programas en la máquina local. El MUA (Agente de usuario de correo) El MUA es la aplicación en la que la mayoría de la gente piensa cuando se refiere a correo electrónico. Envío de correo electrónico en computadores con conexiones de intenet permanentes y bien conocidas El MTA (Agente de transporte de correo) El MTA suele operar en el segundo plano. Si el remitente de MTA no puede contactar el receptor de MTA.conoce como MTA Agente de Transporte de Correo y la segunda se conoce como MUA. El MUA recupera correo enviado desde un almacenamiento temporal (buzón de entrada) y lo presenta al usuario como "correo nuevo". el buzón predeterminado del usuario es /var/spool/mail/username para que el correo en espera del usuario elvis se instale en el archivo /var/spool/mail/elvis. quienes deben estar escuchando el puerto 25. Figure 1. Cuando éste recibe correo desde un MTA remoto destinado a un usuario en una máquina local. determina desde la dirección del destinatario la máquina apropiada que debe contactar e intenta conectarse a un MTA complementario ejecutando en la máquina de destinatarios. el correo se almacena temporalmente en la máquina del remitente y el MTA de remitente intenta de nuevo más tarde.

Servidores POP Los servidores POP realizan un servicio muy sencillo.net. pero elvis no puede predecir la dirección IP que recibirá./var/spool/mail/elvis) y el correo electrónico se considera como entregado. Permiten a los usuarios acceder al directorio de almacenamiento temporal de un sólo usuario y transfieren su contenido a su MUA local. no desearía publicar su nombre de equipo como su dirección de correo electrónico. elvis aprovecha una "cuenta de correo electrónico" que le ofrece su ISP. es probablemente poco atractivo por ejemplo. Cuando elvis está en casa.net.isp. Servidores de buzón En el diagrama anterior. por lo tanto si elvis garantizara la recepción de la misma dirección IP cada vez.net recibe correo para elvis.Servidores de buzón Aunque la solución anterior es simple.net. lo almacena en un directorio de almacenamiento temporal dedicado a elvis (muy probable en el archivo sendmail.net para ser enviado al MTA de esta máquina. todos los usuarios estén recibiendo correo electrónico en una máquina conectada constantemente a Internet y segundo. Los 424 . su máquina ISP le emite a su máquina una dirección IP. que la máquina tenga un nombre de equipo bien conocido y accesible a otros.isp.net tiene una conexión de Internet permanente y bien conocida. Cuando el MTA ejecutándose en pop. Figure 1. no están en esta situación. Dado que la máquina de ISP pop. Otra solución se ha desarrollado para servir a la gente en este caso: los servidores de buzón. utilizan una conexión de "marcado" o de "alta velocidad" desde un ISP (Proveedor de Servicios Internet) o que estén utilizando máquinas detrás de un cortafuegos de una institución. es mejor candidata para recibir correo electrónico que la máquina de elvis en casa. asumimos que elvis está utilizando una conexión de Internet de "alta velocidad" para la cual se ha suscrito a la compañía "ISP. aún necesita tener acceso a su correo electrónico que está en su buzón de entrada en pop.isp. al cual se le asignó el ISP a la dirección IP. El ISP ha clasificado todo el correo electrónico destinado a direcciones de forma user@isp. Este acceso suele estar provisto en forma de un servidor POP (Protocolo de servidor de correo) o servidor de IMAP (Protocolo de Servicio de Correo por Internet). Es muy probable que su cuenta exista en una máquina Linux o Unix del ISP conectada permanentemente a Internet y se le asigne un nombre de host como por ejemplo pop.isp. Cuando se conecta al Internet.isx. requiere que primero. dhcp-191-93.isp. En su lugar. Muchos usuarios que por ejemplo.Net". El nombre del equipo.

Los usuarios IMAP pueden mantener varias carpetas en el servidor de buzón no sólo su buzón de entrada individual. En general. Se asume que los usuarios tienen acceso a su correo electrónico desde un servidor POP o IMAP. elvis aún desea utilizar su MUA local para enviar correo. suele implicar que el servidor de buzón no intenta almacenar de modo permanente. sino temporalmente hasta que el usuario "lo baje "a su máquina local. El MTA local se inicia. un servidor IMAP implica que un correo electrónico del usuario sea almacenado de forma permanente en el servidor de buzón y los usuarios ocasionalmente se conecten con un MUA desde una máquina remota para "navegar" su correo. Muchos ISP e instituciones ofrecen servidores SMTP salientes. Red Hat Enterprise Linux está configurado de modo apropiado para esta situación.servidores POP suelen enlazarse al puerto 110 y requieren que cualquier cliente se autentique mediante un par de nombres de usuario-contraseña. Los servidores IMAP suelen encontrarse en entornos institucionales y corporativos. 127. Servidores de correo saliente Para máquinas que sólo tienen conexiones a Internet transitorias. pero la configuración necesaria va más allá del alcance de este curso. pero no aceptará conexiones a través del puerto 25 (excepto desde la dirección de bucle local. Sirve simplemente para entregar correo electrónico saliente. los usuarios de conexiones de "marcado" y similares suelen utilizar lo que se conoce como un SMTP (Protocolo sencillo de transferencia de correo) o servidor de correo saliente.0. Los demonios IMAP se enlazan al puerto 143.0. En su lugar.1).net. Servidor de correo saliente 425 . el MUA almacenará el correo temporalmente de modo local y tratará de enviarlo más tarde. a menudo con nombres como smtp. Figure 1.isp. Si un servidor de buzón ejecuta el servicio POP. Servidores IMAP Los servidores IMAP suelen ofrecer a los clientes administración de buzones de manera más sofisticada. La configuración predeterminada puede cambiarse. La mayoría de los MUAs modernos actúan como clientes POP y pueden configurarse para recuperar correo de un servidor especificado. Si el MUA local no puede conectarse temporalmente a la máquina del destinatario. Envío de correo Puesto que la máquina de elvis mantiene una conexión de Internet casi continua. el intentar entregar correo electrónico mediante el MTA local puede no ser apropiado. Configuración predeterminada de Red Hat Enterprise Linux Por defecto.

ni puede ser configurado para utilizar un servidor SMTP para correo saliente. el comando mail puede ser bastante eficaz. Para entrega local no se requiere ninguno de los servidores locales POP o SMTP porque el correo electrónico se entrega al instante por el MTA local. donde el correo electrónico se dirige únicamente al nombre de usuario tal como blondie. Linux (y Unix) también permite a los usuarios en una máquina local enviar correo electrónico entre sí. En su lugar. No obstante. a pesar de que no es el destinatario final para el correo electrónico. el servidor SMTP transmite el correo y lo reenvía a su destino. Si se presenta algún problema.El MTA en el servidor SMTP desea aceptar correo de máquinas "locales". Envío de correo electrónico con mail 426 . El MUA mail Quizás el MUA más sencillo es un comando llamado simplemente mail. puede esperar correo que sea enviado al directorio de almacenamiento temporal y pasa al MTA de correo local para envío. El comando mail no puede ser configurado para acceder al correo desde un servidor POP o IMAP. el almacenamiento temporal y el reenvío de correo pendiente es ahora responsabilidad del servidor SMTP. en situaciones tales como envío de correo a usuarios locales. [1] Entrega local Todos los casos anteriores asumen que el usuario está enviando correo electrónico desde su máquina a un destinatario en una máquina remota. El comando mail data de los primeros días de Unix y por lo tanto depende altamente del MTA local. En su lugar. Muchos MUAs permiten a los usuarios especificar un equipo remoto para que actúe como el servidor SMTP del usuario (contrario a reenviar correo al MTA local para envío).

El comando mail puede utilizarse para enviar correo a destinatarios especificados como argumentos en la opción de la línea de comandos. Imprime la comunicación entre el comando mail y el MTA local (o remoto). la interfaz es primitiva y por lo general se utilizan en su lugar otros MUAS. Envía copia a las direcciones especificadas. Sin embargo. Table 1.txt a blondie. a continuación. En el siguiente ejemplo. destinatario a. A manera de ejemplo. Type ? for help.com Thu Nov 13 00:08 16/653 "here they are" & RETURN Message 1: From elvis@station. Para mayor información vaya a la página de correo mail. un archivo redirigido o desde un teclado directamente.example.example. en donde CONTROL-D ("EOF") se utiliza para indicar el fin del mensaje).example. Pass it around. 13 Nov 2003 00:08:44 -0500 From: elvis@station. Las opciones de línea de comandos en el cuadro siguiente pueden utilizarse para especificar una línea de asunto. Especifica una línea de asunto.com Thu Nov 13 00:08:45 2003 Date: Thu. Envía copias ciegas a direcciones especificadas. "Cc:". 100 bottles of ink.com To: blondie@station. Actualmente. El cuerpo del mensaje se lee desde la entrada estándar (la cual puede leerse desde una tubería.1 6/6/93. el comando mail se considera como una forma rápida y eficaz de enviar correo. [blondie@station blondie]$ mail Mail version 8. Opciones de línea de comandos para el comando mail Opción -v -s asunto -c addrs -b addrs Efecto Modo verboso. "/var/spool/mail/blondie": 1 message 1 new >N 1 elvis@redhat.txt Uso de mail para leer correo El comando mail puede también utilizarse para leer la correspondencia de un almacenamiento temporal de correo de usuario local. Take one down. elvis envía por correo el contenido del archivo lyrics. & d & q 427 . [elvis@station elvis]$ mail -s "here they are" blondie < lyrics.com Subject: here they are 100 bottles of ink on the wall. blondie está utilizando el comando mail sin argumentos para ver el correo en su buzón y luego borrar el mensaje y salir. etc.

un usuario puede observar el proceso por el que pasa sendmail para entregar un mensaje.com.0 station..com 250-station.example.5 elvis@station.12.0.example.0.1..0.com closing connection Ejercicios en línea Lab Exercise Objetivo: Enviar correo electrónico a usuarios locales.example.1].. Estimated Time: 10 mins.old" | mail -s "find output" nero Protocolo sencillo de transporte de correo Mediante un simple comando de correo con la opción verbosa.0. Connecting to [127.example. Sat.. 220 station. [julius@station julius]$ mail -v -s hello elvis@localhost this is only a test ..example.0 h3CH8U3j002250 Message accepted for delivery elvis@localhost.localdomain [127. -name "*..example. pleased to meet you 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-8BITMIME 250-SIZE 250-DSN 250-ETRN 250-DELIVERBY 250 HELP >>> MAIL From:julius@station. [julius@station julius]$ find .8.0. Especificaciones 428 .12.0.0 julius@station. end with ".8/8. Sender ok >>> RCPT To:elvis@station. Sent (h3CH8U3j002250 Message accepted for delivery) Closing connection to [127. elvis@localhost.example." on a line by itself >>> .com. Recipient ok 354 Enter mail.0.1] >>> QUIT 221 2..1..com Hello localhost.com SIZE=60 250 2. 250 2.1] via relay. 12 Apr 2003 13:08:30 -0400 >>> EHLO station.example.com ESMTP Sendmail 8.Ejemplos: Envío de correo Una forma fácil y rápida de enviar archivo de texto a otro usuario es con mail [julius@station julius]$ mail -s "here's the file" nero < somefile También es fácil con mail enviar la salida de un comando a otro usuario..com >>> DATA 250 2..0.

429 . su directorio de almacenamiento temporal entregado pero no leído aún). Sus cuentas alternas primera y segunda tienen el contenido del archivo /proc/cpuinfo en su 2.e. depósito de correo entregado. Cree el archivo ~/you_have_mail que contiene una lista ordenada de todos los usuarios en su sistema local que actualmente tienen correo en sus "buzones de entrada" (i. El archivo ~/you_have_mail debería contener una lista ordenada de como los usuarios tienen correo en espera en su depósito de correo. Utilice el comando mail para enviar por correo el contenido del archivo /proc/cpuinfo a sus 2.e.1. los usuarios nombredeusuario_a y nombredeusuario_b. Deliverables A title Question 1 1. sus nombres de cuentas alternas primera y segunda deben incluirse en esta lista). cuentas primaria y alterna (i. (obviamente. Debe incluir usuarios de "sistema" en su lista y listar un usuario por línea. donde nombre de usuario es el nombre de su cuenta primaria.

Al elegir "Agregar remitente a agenda de direcciones" se pueden crear nuevos contactos fácilmente. responder a un mensaje o reenviar el mensaje. calendario de eventos y listas de tareas. pero la lección se enfocará en el uso de evolution para envío y recepción de correo. un menú emergente ofrece una variedad de acciones. En la toma de pantalla siguiente verá que también tiene herramientas para administrar contactos. 430 . Evolution es mucho más que un MUA. evolution permite enviar correo desde el depósito de correo local y servidores POP o IMAP. tales como almacenar el mensaje como archivo de texto. En la parte superior derecha del recuadro.El MUA Evolution Conceptos clave • • • • El MUA evolution ofrece un entorno sofisticado para la administración de correo electrónico. "marcando" el mensaje con una bandera particular. el correo se puede clasificar en una jerarquía de carpetas navegables mediante el recuadro en la parte superior izquierda. La ventana de composición permite la composición de mensajes ya sea en texto sin formato o en formato HTML e incluye un corrector ortográfico y soporte para anexos. se presenta un resumen de mensajes almacenados en la carpeta actual seleccionada. En el recuadro de la parte inferior derecha se visualiza el contenido del actual mensaje. Un mensaje se puede archivar en otra carpeta con sólo arrastrar el mensaje al sitio de la carpeta deseada en el panel a mano izquierda. Discussion Evolution Quizás el MUA más sofisticado que se distribuye con Red Hat Enterprise Linux es evolution. El agente de usuario de correo es apenas un componente del administrador de la información personal de evolution. "etiquetando" el mensaje en un color determinado o identificando el mensaje como correo basura. De hecho. Haciendo "click derecho" en un mensaje. presentamos algunas de las características clave de la aplicación evolution e identificamos cómo configurar evolution para recibir correo electrónico desde varias fuentes y cómo enviar correo mediante el servidor local MTA o el servidor remoto SMTP. Navegar correo electrónico Figure 1. En esta sección. El correo electrónico de entrada puede procesarse automáticamente mediante un filtrado sofisticado. El agente usuario de correo Evolution Desde la pantalla principal. Lo invitamos a experimentar con estos elementos cuando el tiempo se lo permita.

Como se ve a continuación. imágenes. El mensaje parece haber sido enviado desde una lista de correo especificada. El mensaje coincide con una expresión regular especificada. • • • El mensaje puede ser copiado o movido automáticamente a una carpeta especificada. para permitir a los usuarios incorporar enlaces. La ventana de composición de correo electrónico Evolution Como se puede ver en la toma de pantalla. Al seleccionar el menú Security. Figure 1. El mensaje se ha etiquetado o marcado para "seguimiento". Una de las herramientas primarias son los filtros de correo electrónico. Cuando coincide. Como es texto escrito. contiene un texto especificado. Si se desea. se sugieren remplazos que pueden buscarse en el diccionario o palabras que pueden agregarse al diccionario personal del usuario. La línea de asunto u otra línea de encabezado especificada. Figure 1. La fecha en la que se envió o se recibió el mensaje o después del tiempo especificado. Uso de Filtros Evolution La aplicación evolution soporta muchas características que permiten administrar grandes cantidades de correo electrónico. Filtros de correo electrónico Evolution Los mensajes se pueden seleccionar al combinar algunos de estos criterios. una puntuación o una etiqueta. los filtros se pueden crear al tratar correos electrónicos con características similares al actual mensaje. El mensaje cuando es entubado a un comando de shell arbitrario. la ventana de composición proporciona un editor sencillo para componer texto y anexar archivos.Por último. devuelve un valor de retorno especificado. Si un mensaje coincide con los criterios entonces se pueden poner en práctica una norma o un grupo de normas. los filtros se componen de una selección de criterios coincidentes que serán aplicados al correo electrónico recibido. • • • • • • • • El remitente o el destinatario del mensaje contiene un texto especificado. responder o reenviar un mensaje. Puede reproducirse una campana de terminal o algún sonido personalizado. los mensajes se pueden formatear como "HTML". los usuarios pueden elegir entre firmar o encriptar su mensaje mediante un protocolo de clave pública encriptada. 431 . las palabras no identificadas por el corrector ortográfico son subrayadas y con un click derecho. Escribir correo electrónico La ventana de composición se utiliza para crear un nuevo mensaje. Se puede asignar al mensaje una bandera particular. el mensaje puede estar sujeto a alguna combinación de los siguientes destinos. y elementos sencillos HTML en el mensaje. El cuerpo del mensaje contiene texto especificado.

habilitar. el cual se obtiene seleccionando Herramientas: Configuración. un destino particular para correo electrónico. una identidad particular de un remitente entre otras opciones. Además se pueden establecer soporte para conexiones encriptadas o autenticación de usuario si la máquina SMTP es compatible o lo requiere. el diálogo permite especificar el nombre de servidor. Especificación de fuentes de las cuentas de correo de Evolution Las primeras dos selecciones especifican que el correo se debería recuperar desde los servidores POP o IMAP. La otra alternativa es hacer que evolution entregue correo simplemente pasándolo al MTA local ("enviar correo"). donde una cuenta representa un origen particular de correo electrónico. el encapsulado SSL puede especificarse. permite recuperar correspondencia desde varias fuentes como se puede apreciar en el siguiente diálogo. Especificar una técnica de entrega de correo electrónico Para cada cuentase pueden especificar una de dos técnicas de entrega. Figure 1. debe especificarse el nombre del host. mutt. pine y elm. Figure 1. si el servidor los soporta. Configuración de cuentas en Evolution Evolution permite a los usuarios administrar múltiples cuentas. Administración de cuentas Evolution Especificación de la fuente del correo electrónico Evolution. Las cuentas se pueden crear. También se ofrecen otros esquemas de autenticación (diferentes a un par de nombre de usuario-contraseña). inhabilitar o modificar mediante el siguiente diálogo. El resto de las opciones permiten a evolution sacar correo directamente del depósito de correo MTA o compartir carpetas con otros MTA como por ejemplo. Especificar una técnica de entrega de cuenta de correo electrónico de Evolution Si se debe utilizar un host SMTP.. el nombre de cuenta y la contraseña.• El mensaje puede entubarse a una shell de comando arbitraria. Para cada uno. Si el servidor de POP o IMAP soporta codificación. Figure 1. en cuyo caso no hay ninguna otra configuración. borrar. y eligiendo el "Panel de cuentas de correo". 432 ..

. Un router tiene múltiples interfaces de red. los datos deben pasarse a un router. Con el fin de comunicarse con un equipo en otra subred. Las subredes IP están a su vez ligadas a otras subredes por máquinas que actúan como routers. Discussion Configuración requerida para el protocolo de internet El protocolo de Internet o más común el protocolo IP es el estándar adoptado para entregar información entre máquinas conectadas por una red. este cuaderno demuestra la forma de determinar la configuración de red de una máquina local e introduce utilidades que sirven para confirmar que la infraestructura de red de la máquina esté funcionando adecuadamente. ping confirma la conectividad de red de bajo nivel entre hosts. Dirección IP Linux (y Unix) representa los dispositivos de red conectados a una máquina (tales como una tarjeta Ethernet. un módem utilizado para conexiones de marcado. Para utilizar el protocolo IP. El comando netstat -tuna lista los servicios actuales activos de red y conexiones. su máquina debe conocer la identidad de un router cercano. host hace solicitudes directas de DNS.) como una interfaz de red. el cual (con la ayuda de otros routers) encamina la información a la subred apropiada y desde allí al host apropiado. etc. una tarjeta Token-Ring. por lo general cada uno participa en una subred distinta. Todas las máquinas en una subred pueden intercambiar información directamente. debe configurarse con una dirección IP que sirve como la identidad de la interfaz. una máquina debe configurarse de la siguiente manera. El router utilizado para encaminar paquetes fuera de su subred local se conoce como un portal predeterminado.. /sbin/traceroute puede diagnosticar problemas de enrutado. Nameserver Otras máquinas en internet a su vez se identifican por una dirección IP. El protocolo se llama Servicio de Nombres de Dominio o más conocido como DNS. Aunque la configuración de un sistema con la información IP de configuración apropiada requiere privilegios de root. por lo tanto el protocolo se ha desarrollado para asignar nombres a las direcciones IP. 433 . Para comunicarse con las máquinas fuera de la subred local. Portal predeterminado La mecánica de un protocolo IP organiza máquinas en subredes o subnets en inglés. La gente suele pensar en términos de nombres.Aplicaciones de diagnósticos de red Conceptos clave • • • • • /sbin/ifconfig presenta la configuración IP local. Antes de que una interfaz pueda utilizarse para enviar o recibir tráfico.

0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:206054 errors:0 dropped:0 overruns:0 frame:0 TX packets:206054 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:22911068 (21. el cual muestra la dirección IP en su equipo local. El siguiente cuadro lista algunos de los nombres más utilizados en Linux.0. En Linux (y Unix).0.0.0. el cual está fuera de la RUTA predeterminada para los usuarios estándar.8 Mb) TX bytes:22911068 (21.1 Mask:255.168. Table 1. los cuales pueden servir tanto de base de datos para asignar un nombre a direcciones locales IP como también de punto de partida para determinar direcciones IP para nombres de dominio de los cuales el servidor no tiene conocimento directo. n se remplaza por un número entero para cada instancia de un dispositivo determinado conectado a una máquina.255 Mask:255. Interfaces de red Linux Interfaz ethn trn fddin pppn lo Dispositivo Tarjeta Ethernet Tarjeta de Token-Ring Tarjeta de fibra óptica Conexión de marcado a través de módem Dispositivo de bucle local En cada caso. éste vive dentro del directorio /sbin. No obstante.168. [blondie@station blondie]$ /sbin/ifconfig eth0 Link encap:Ethernet HWaddr 00:00:86:4D:F0:0C inet addr:192.0. Linux nombra interfaces de acuerdo con el tipo de dispositivo que representa. Esta lección tratará el tema de direcciones IP de interfaces de red en mayor detalle.5 Mb) Interrupt:11 Base address:0xd400 lo Link encap:Local Loopback inet addr:127.255. ¡encontramos algo que no es un archivo!). Puesto que el comando suele ser utilizado por root para configurar interfaces.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1716503 errors:0 dropped:0 overruns:2 frame:0 TX packets:2146415 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:193489123 (184. (por una vez. cada dispositivo de red se representa como una interfaz de red. Determinar su(s) dirección(es) IP: /sbin/ifconfig En una lección anterior presentamos el comando hostname -i.51 Bcast:192. Confirmar la configuración de la interfaz de red El comando ifconfig muestra la configuración de interfaces de red activas. los usuarios estándar pueden usar el comando para ver información de configuración de interfaz.0. En realidad una "máquina" no tiene una dirección IP.El protocolo DNS requiere que cada máquina tenga disponible uno o más servidores DNS (comúnmente llamados servidores de nombre). las interfaces de red sí.5 Mb) TX bytes:1299754457 (1239. utilizando una referencia absoluta como en el ejemplo a continuación.8 Mb) 434 .

0 127.51) y la segunda línea define la subred asociada con la interfaz de bucle local (con una dirección IP de 127. la primera línea define la subnet asociada con la interfaz de Ethernet (con una dirección IP de 192. debería haber una línea que especifique una subred para cada interfaz activa.0.0 Flags Metric Ref U 0 0 U 0 0 UG 0 0 Use Iface 0 eth0 0 lo 0 eth0 435 .0.0 * 255. Si es un usuario root.0. para la comunicación con equipos en sus subredes locales se utilizan procedimientos diferentes a la comunicación con hosts en una subnet separada.0.0 192.0.0 default server1.0.0 0.254. En la salida anterior. Cada cuadro de ruta debe contener una entrada para la gateway "por defecto" y la segunda columna debe contener el nombre del host del gateway.0.168.168.0. [blondie@station blondie]$ /sbin/route Kernel IP routing table Destination Gateway Genmask 192. los usuarios esperarían ver dos estrofas. En la mayoría de los casos. Este cuadro se llama cuadro de enrutamiento.255.254 0. Dichas entradas de gateway se pueden distinguir porque el host está definido en la segunda columna ("Gateway") y la cuarta columna ("Banderas") contiene una "G". la cual visualiza la dirección IP asignada a la interfaz. [blondie@station blondie]$ /sbin/route -n Kernel IP routing table Destination Gateway Genmask 192. La línea importante es la segunda línea. El segundo tipo de entrada que sirve para definir gateways es el más importante para nuestra discusión.168. define las máquinas que deberían considerarse locales y la gateway que debería usarse para ayudar a comunicarse con aquellas que no lo son.0.0.0.0 255. el comando puede también utilizarse para manipular el cuadro. El primer tipo define qué subredes se deben considerar como locales. Si usted es un usuario estándar.0.255. El kernel de Linux.0.0. El comando ifconfig presenta una estrofa de información de la configuración IP y las estadísticas de uso para cada interfaz de red activa.1).0.example 0.0.0.0. La misma información se puede ver mediante la dirección IP en lugar de nombres del host utilizando /sbin/route -n.255.0 0.A la interfaz eth0 se le asigna una dirección IP de 192. por lo tanto los usuarios estándar deben invocarlo mediante una referencia absoluta.0. podrá tener problemas para acceder la red.168.0 Flags U U UG Metric 0 0 0 Ref 0 0 0 Use 0 0 0 Iface eth0 lo eth0 Un cuadro de ruta estándar visualiza dos tipos de entrada.0.0 255. Determinar su portal por defecto: /sbin/route Como se mencionó al comienzo de la lección. el comando route se puede utilizar para ver el cuadro de enrutamiento del sistema.0 * 255.0 0.168.0. En general.0. el comando route vive en el directorio /sbin. al igual que otras kernels. Si la línea que contiene la dirección IP falta o si la dirección no parece razonable para su configuración de red local. Una estrofa con la configuración para una tarjeta Ethernet y otra con la configuración para el dispositivo virtual de bucle local.0 127.0.0.0. Al igual que el comando ifconfig.255.

Con el fin de comunicarse con otras máquinas su equipo debe tener una dirección IP.conf Cuando el /etc/hosts local no puede dar respuesta.187.1 localhost. 436 . Sin embargo. Si el equipo sólo se está comunicando con pocas máquinas o si un administrador desea crear un atajo de nombres de host (tal como “s”) o si deseara anular el servidor de nombre local.example. or various programs # that require network functionality will fail. Para determinar qué máquina consultar que esté ejecutando un servidor de nombres.com 192.170. A diferencia de los otros dos aspectos de configuración de red.168. Configuración DNS dinámica: /etc/resolv. 127.0. la biblioteca resolv consulta un servidor de nombres.1 station1 station1. usted debe tener una gateway por defecto.254 server1.example. las entradas pueden agregarse al archivo /etc/hosts mediante un editor de texto sencillo. No obstante. Determinar su(s) nombre de usuario(s) El Servicio de Nombres de Dominio permite a los usuarios referirse a los computadores de la red mediante nombres de host en lugar de direcciones IP. examina el archivo de configuración de la biblioteca de resolv.51 station51 station51.0.254 como su gateway predeterminado. La bandera "G" indica que esta línea se utiliza para definir una gateway.0.24 rosemont.com 192.com dhcp-1116-114 r El formato del archivo es sencillo.example.168. si los usuarios quieren referirse a cada máquina por dirección IP en lugar de nombre de máquina.example.localdomain localhost rha-server 192.51?).232.201 z 160.0. Convertir un nombre de host en una dirección IP suele conocerse como resolver una dirección y la biblioteca que ejecuta el servicio de nombre se llama la biblioteca resolv. El caracter estándar de comentario de Unix (“#”) también es compatible.Aquí. un servidor de nombre es hasta cierto punto opcional.168. Aunque sólo root puede editar el archivo cualquier usuario puede observarlo.168. Cuando la biblioteca intenta resolver una dirección suele haber dos recursos disponibles.168.com www1 www1. no una subred local.0. Usted no puede esperar que el archivo /etc/hosts le responda a todo. en la práctica los servidores de nombres parecen ser más necesarios (se le facilita más memorizar academy.example.conf.com server s 192.com o 66. Claro está que esta técnica no escala bien. Si desea comunicarse con máquinas fuera de la subred. su equipo puede comunicarse mediante el protocolo IP sin consultar el servidor de nombres. /etc/resolv.0. blondie determina que su máquina está utilizando el host 192.129. Configuración DNS estática: /etc/hosts El primer recurso es un archivo de texto sencillo llamado archivo /etc/hosts. [blondie@station blondie]$ cat /etc/hosts # Do not remove the following line.redhat. El primer símbolo en la línea debería ser una dirección IP y los símbolos subsiguientes son nombres de hosts que deberían apuntar a la dirección IP.168.

168.168.0. se utilizará el primero por defecto.0.com nameserver 192. 3 received.0. presentaremos las utilidades de diagnóstico que sirven para asegurar que las configuraciones están funcionando correctamente con su entorno de red local.conf .168.180 ms 64 bytes from 192.254 está actuando como el servidor de nombre primario.153 está actuando como el servidor de nombres secundario.254: icmp_seq=1 ttl=64 time=0. El primer argumento para ping puede ser el nombre del equipo o la dirección IP de la máquina que usted desearía contactar.[blondie@station blondie]$ cat /etc/resolv. el segundo servidor listado servidor de nombres secundario y así sucesivamente.0.168.254 nameserver 207. time 1998ms rtt min/avg/max/mdev = 0. Utilidades de diagnóstico de red En las secciones anteriores. Si no está disponible se utilizará el segundo y así sucesivamente.254 (192. 437 .0.254: icmp_seq=2 ttl=64 time=0. Confirmación de conectividad IP: ping El comando ping sirve para confirmar la conectividad IP entre dos equipos. hemos esbozado las técnicas más directas para determinar su configuración de red IP local de la máquina.186 ms CTRL-C --.245 ms 64 bytes from 192. 64 bytes from 192. 0% packet loss.033 ms El comando ping debería presentar una línea por segundo. Cualquier equipo que esté ejecutando el servidor de nombres y le permita solicitarlo. El host 207.0.168.42.168.254) 56(84) bytes of data. la cual reporta el tiempo necesario para recibir una respuesta de la máquina remota.42. Observe que el servidor de nombres no necesita estar cerca de la máquina. El comando ping continuará ejecutándose hasta cancelarse con la secuencia de control CONTROL-C.conf utiliza líneas que comienzan por la palabra clave servidor de nombres para especificar las direcciones IP de máquinas ejecutando servidores de nombre. [blondie@station blondie]$ ping 192. En esta sección. el primer servidor de nombres listado suele llamarse servidor de nombres primario. En la práctica.245/0.254 ping statistics --3 packets transmitted. Por consiguiente.168. El archivo de configuración /etc/resolv.168. el uso de un servidor de nombres local genera un mayor rendimiento.254: icmp_seq=3 ttl=64 time=0.192.175. puede usarse como servidor de nombres. incluyendo el número de secuencia y la información de temporización sobre la demora de ida y vuelta.175. generated by /sbin/dhclient-script search example.0.254 PING 192.153 El host 192.180/0. Si se especifican varios servidores de nombres.0.0.203/0.168.

25.563 ms 10.231 ms 29.whitehouse.rlghncrdc-rtr2.72.080 ms 14 gar3-p370.99) 7.2.129.chrlncsa-rtr6.874 ms 4 srp4-0. su paquete pasa de router a router a medida que atraviesa varias subredes hasta que finalmente se envía a la subred que contiene la máquina destino.net (12.829 ms 20.9.255.nc.42) 11.net (66.628 ms 31.950 ms 29.144 traceroute to a1289.211) 26.net (66.net (12.attens.com (24.322 ms 26.69) 24. 30 hops max.129. el problema es un router local mal configurado y su administrador de red local probablemente ayude a resolver el problema.1 (10.64.net (12.129. es probable que el problema esté fuera de control de su administrador de red local.net (12.208 ms 11 ATT.atl1.123 ms13 gbr6p20.whitehouse.rlghnca-rtr2.nc. el nombre del equipo o la dirección IP de la máquina destino.com (24.akamai.45) 10.140. usted no podrá esperar que se presente ninguna comunicación de red de alto nivel.net (66.903 ms 16 mdf1-bi8k-2-eth-1-1.com (24.880 ms 19.079 ms 10.856 ms 39.185.185.ip.931 ms 5 srp13-0.rlghncg-rtr1.488 ms 7.25.wswdc.045 ms 8.259 ms 10.712 ms 9 bb2-ash-P13-0.att.146) 10.162 ms 0.atdn.1.atl1.087 ms 21.898 ms Usted hallará con frecuencia que los paquetes toman rutas sorpresivas para ir de un lugar a otro.129.50) 29.371 ms 9.net (66. El número de routers que su paquete pasa suele conocerse como el número de saltos que ha hecho el paquete.888 ms 22.attens.atdn.93.675 ms 9.162 ms 0.006 ms 28.26.139.gov traceroute: Warning: www.net (66.72.901 ms 10 pop2-ash-P1-0.122.506 ms 26. Examen de ruta: /usr/sbin/traceroute Cuando se conecte a una máquina fuera de su subred.wswdc.rr. Si el comando traceroute se agota a más de cuatro o cinco saltos.g.nc.atdn.com (66.132.rr.atdn.254) 0.665 ms 7 pop1-cha-P4-0.123.392 ms 20.rr. [blondie@station blondie]$ /usr/sbin/traceroute www.031 ms 6 son0-1-1.123.185.44.9.net (12.642 ms 3 srp2-0.168.485 ms 26.185.1) 8.rr.ip.160.152.845 ms 39.178) 4.246) 39.122.252 ms 2 10. cuando pasa de router a router puede trazarse con el comando /usr/sbin/traceroute.72.132. La ruta del paquete. using 12.004 ms 12 tbr1-p014001.798 ms 15.72.129.carolina.net (12.82) 38.0.att.atdn.144).11. El comando traceroute suele llamarse con un argumento. El paquete anterior hizo 17 saltos para alcanzar su destino.704 ms 27.Si no hay respuesta para el comando ping.815 ms 38.887 ms 17 12.202 ms 8 bb2-cha-P2-0.192 ms 25.184 ms 50. 38 byte packets 1 server1 (192.803 ms 39.81) 29.934 ms 39.ip.008 ms 8.44.wswdc.att.827 ms 15 mdf1-gsr12-2-pos-7-0. El culpable suele ser un cable Ethernet que se ha desconectado físicamente de la máquina o de la pared. Si su traceroute termina entre la primera pareja o salta (sin alcanzar el destino final).33.185.144 (12. Las inconsistencias en la tasa en la que las líneas se presentan o la discontinuidad en los números de secuencia son generalmente indicativos de una red congestionada o de una conexión ruidosa y se puede esperar un bajo rendimiento de red de protocolos de alto nivel.64.160.382 ms 10.127 ms 21.144) 39.154) 40.250) 26. es probable que su gateway por defecto de su máquina no haya sido determinada correctamente. Realización de solicitudes DNS de modo manual: host 438 .gov has multiple addresses.174) 29. Si su paquete no puede completar el primer salto.243 ms 0.

redhat. id: 53870 .. Con un argumento. Además.com. redhat. redhat.232.yahoo.redhat.com.redhat.254#53 in 30 ms En este ejemplo.com academy.redhat. status: NOERROR. Siguiendo el consejo de iniciar con lo básico. AUTHORITY SECTION: redhat. [elvis@station rha030]$ host -a academy.com has address 66. 439 .com. el comando host sólo reportará la resolución DNS solicitada.com. Received 106 bytes from 192.51 ns1.redhat. QUESTION SECTION: . examinando su configuración de interfaz de red local. ANSWER SECTION: academy.com. Ejemplos Diagnóstico de dificultades de red La usuaria madonna está teniendo problemas para que su navegador de red mozilla se conecte al sitio www.redhat.. ns2. ADDITIONAL: 0 .254.. el servidor de nombres que respondió tiene una dirección IP de 192. AUTHORITY: 3.232.187.168.51 Si la opción -a se incluye. [blondie@station rha030]$ host academy.com Trying "academy.academy.187.com. ->>HEADER<<. ns3.. flags: qr rd ra. el comando host presenta información detallada de la solicitud realizada y la respuesta recibida en el formato de "registro de recursos".com. ANSWER: 1.redhat. .El comando host se puede utilizar para realizar directamente solicitudes DNS. la línea final identificará el servidor de nombres que resolvió la solicitud y la cantidad de tiempo que se necesitó para ello. QUERY: 1.redhat. Procede a examinar sus configuraciones de red local y confirma que parecen funcionales.opcode: QUERY.com" . .redhat.0.com.0. 284 584 584 584 IN IN IN IN IN ANY A NS NS NS 66.. madonna primero se asegura que la máquina tenga una dirección IP.com y cree que la máquina local podría estar mal configurada.168.

1 Mask:255.90.0 * 255.90. examina su información de ruta para determinar su gateway por defecto.136 ms Satisfecha.90.1 0.0.255.90.0.90.125.90.8 Mb) TX bytes:6124991 (5.125. cancela el comando y luego examina su configuración DNS. [madonna@station madonna]# ping 109.0. 64 bytes from 109.125.90.90. time 1004ms rtt min/avg/max/mdev = 2.0. 2 received.0.125.255.125.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:63432 errors:0 dropped:0 overruns:0 frame:0 TX packets:63432 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:6124991 (5.0.125.218.1) from 109. [madonna@station madonna]# /sbin/route -n Kernel IP routing table Destination Gateway Genmask 109.125.86.1: icmp_seq=2 ttl=255 time=2.com nameserver 109.90.0 Flags U U UG Metric 0 0 0 Ref 0 0 0 Use 0 0 0 Iface eth0 lo eth0 Luego utiliza el comando ping para confirmar si puede contactar la gateway.125. [madonna@station madonna]# cat /etc/resolv.90.5 Mb) Interrupt:11 lo Link encap:Local Loopback inet addr:127.1 ping statistics --2 packets transmitted.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:513364 errors:0 dropped:0 overruns:0 frame:0 TX packets:319118 errors:0 dropped:0 overruns:0 carrier:0 collisions:5068 txqueuelen:100 RX bytes:78770024 (75.1 Mb) TX bytes:356094835 (339.0.0.255.63 440 .90.1 (109.0 109.255.0.1: icmp_seq=1 ttl=255 time=2.0 0.1 PING 109.90.2 nameserver 66.125.0.125.0.90.0 127.[madonna@staton madonna]# /sbin/ifconfig eth0 Link encap:Ethernet HWaddr 00:50:8B:0C:B1:D5 inet addr:109.125.125.125.652/2.125.0.71.788/2.86 Bcast:109.86 : 56(84) bytes of data.924/0.conf search example.8 Mb) Convencida que su interfaz está activa y utilizando la dirección IP 109.255 Mask:255.109. 0% loss.90.92 ms 64 bytes from 109.65 ms CTRL-C --.0 * 255.75 nameserver 109.

Puesto que ella todavía no ha llamado el host externo de su subred local.com has address 66.699 ms 5 63.71. 76% loss.2 ms 64 bytes from 66.3 ms 64 bytes from 66.218.71.7 ms CTRL-C --.281 ms 2 10.86.com is an alias for enterprise.293 ms 20.187.881 ms 6 64.63 (66. www.221 8.71.087 ms 6.63).63 9.86 : 56(84) bytes of data. [madonna@station madonna]# ping 66.com has address 66.redhat.192. 64 bytes from 66. [madonna@station madonna]$ host www.yahoo. 3 received.232.71.net has address 66.redhat.63 (66.789 ms 7.218.redhat.306 ms 7.redhat.net.48 .218.yahoo.215.akadns.123 ms 10.2.30 12.71.252.66.218. intenta llamar a un servidor de nombres terciario. trata de nuevo el navegador de red mozilla y tiene éxito.218.com www.159. 38 byte packets 1 209.877 ms 8 66.193 11.766/27.152.90.717 ms Los resultados del comando ping son un poco problemáticos.com.473 ms 2.679 ms 6.218.redhat. porque la mayoría de sus paquetes se han quitado.227 ms 15. 30 hops max.173 10. Sea cualquiera el problema que estaba teniendo debe haberse relacionado con la congestión de red transitoria observada con el comando ping. enterprise..71.218.com hardware.169 6.yahoo. En su lugar ella intenta determinar el camino recorrido por los paquetes a la máquina.63) from 109.yahoo.117 ms 7.70.71. 441 . Convencida de que todo parece estar bien.akadns.125.90.71.217.218.50 [madonna@station madonna]$ host hardware.net has address 66.71.276 ms 2.787 ms 9.963 ms Puesto que traceroute retornó dicha solicitud de salida. [madonna@station madonna]# /usr/sbin/traceroute -n 66.218.233.yahoo.3.423 ms 3 216.257 ms 4 216.3.akadns.217. madonna asume que cualquier problema observado con el comando ping anterior debió haber sido transitorio.redhat.218.218.71.com is an alias for www.193 [madonna@station madonna]$ host www.275/19.. time 12045ms rtt min/avg/max/mdev = 11.69.63 traceroute to 66. ella confirma que su servidor de nombres es operacional al realizar unas pocas solicitudes de DNS con el comando host.153 13.63: icmp_seq=11 ttl=54 time=27.187.63: icmp_seq=7 ttl=54 time=20.835 ms 6.218.63: icmp_seq=3 ttl=54 time=11.71.71.680 ms 11.520 ms 7 64.702/6.761 ms 16.63 ping statistics --13 packets transmitted.63 PING 66. Por último.218.125.95 www.1 3.com www.358 ms 7.836 ms 15.

Ejercicios en línea Lab Exercise Objetivo: Determinar la configuración de red local. Deliverables A title Question 1 Los tres archivos presentados arriba. La dirección IP preseterminada de su gateway. cada uno de los cuales contiene la dirección IP especificada como su única palabra. cada uno de los cuales debería contener su dirección IP como un "quad punteado". Especificaciones Crear los siguientes archivos. Tiempo estimado: 15 minutos. 442 . La dirección IP del servidor de nombres primario. Archivo ~/net_ipaddr ~/net_gw ~/net_ns Contenido La dirección IP asignada a la interfaz eth0.

La simplicidad tiende a motivar la estabilidad. los cuadros y formas se presentan en escala. Linux también ofrece una amplia colección de clientes basados en la línea de comandos. Si está tratando de descargar un archivo largo en otras máquinas ocupadas. los marcos y cuadros están traducidos correctamente.Terminal de red y clientes FTP Conceptos clave • • • El cliente HTTP de terminal Elinks. Inicio de Elinks Los Elinks se inician como el comando links especificando una URL para cargar como un argumento. estas son las únicas utilidades disponibles. Los clientes de línea de comandos como curl tienden a generar resultados más estables. ¿Por qué alguien estaría tentado a utilizar clientes basados en líneas de comandos en lugar de apuntar y hacer click en las aplicaciones? • • • La razón obvia: si no está ejecutando en un entorno gráfico X. La aplicación curl es una aplicación de protocolo múltiple no interactivo (incluyendo HTTP.redhat. debería considerar un script para que haga el trabajo repetitivo por usted. como por ejemplo. emulando la presentación de un navegador de red gráfico. Las utilidades de la línea de comandos requieren menos recursos. [elvis@station elvis]$ links http://www. Cuando se descargan archivos grandes. un proceso curl es mucho más atractivo que un proceso mozilla. En cuanto sea posible. muchas de las aplicaciones pueden volverse inestables. HTTPS y FTP) que sirve para transferir de modo recursivo páginas web. • Navegación de páginas web con Elinks El texto Elinks de cliente HTTP (navegador de red) está diseñado para traducir páginas web en una terminal. porque el primero consume 4 megabytes mientras que el segundo consume 40 megabytes de memoria.com 443 . imágenes ISO de 700 megabytes. Aparte de estas aplicaciones. invocado como el comando links se puede utilizar para navegar páginas web desde un entorno gráfico. buscando en todas las páginas las referencias de página web. Observe el siguiente ejemplo. Si tiene que extraer información de forma repetitiva del mismo sitio. HTTPS y FTP) que sirve para transferir archivos en modo de lote. Discussion ¿Por qué terminales basadas en clientes? Los usuarios probablemente están familizados con las aplicaciones gráficas tales como mozilla para navegar la red o nautilus para tener acceso a servidores FTP. Las utilidades se pueden escribir en scripts. La aplicación wget es una aplicación de protocolo múltiple no interactiva (incluyendo HTTP. (la lista de culpables incluye a Internet Explorer). Observe que en la siguiente visualización de la página de red asociada con Red Hat Network.

pero algo más efectivo y suscinto es referirse a la página del manual curl(1): 444 . Este texto tendría dificultades describiendo curl. la pantalla está activa y los enlaces pueden navegarse mediante teclas de flechas o el ratón. donde el servidor proxy (al igual que el navegador Elinks) puede especificarse mediante la siguiente sintaxis. Configuración de Elinks para utilizar un servidor Proxy Si se establece la variable del entorno HTTP_PROXY. El navegador de texto Elinks Cuando utilice links. Al utilizar la tecla ESC. se crea un menú que permite al usuario acceder a los diálogos de favoritos. Aunque la opción -dump sirve para entregar una página en una salida estándar y la opción -source hará lo mismo al contenido "Crudo" de la URL (a menudo botando HTML). el soporte para interacciones de guiones es muy poco sofisticado comparado con otras utilidades tales como curl. historial y personalización. el cliente de red de la línea de comando curl no se esfuerza por verter o navegar interactivamente las páginas web. http://servername:puerto Buscar los recursos de red con curl En contraste. En cambio.Figure 1. el comando links. los Elinks utilizarán el servidor proxy especificado. el desarrollo de curl se ha enfocado en una amplia colección de opciones que se adaptan para la entrega automática de archivos publicados mediante una red o un servidor ftp. La potencia del navegador links es su capacidad para proporcionar una grata experiencia de navegación de red en un entorno de texto.

Embedded Linux and Open Source Solutions</title> <meta name="MSSmartTagsPreventParsing" content="TRUE"> <meta http-equiv="Content-Type" content="text/html. --cookie-jar filename -C. Reanuda la transferencia de un archivo grande en una posición especificada. HTTPS. Sigue redirecciones a una nueva ubicación. --max-time segundos -O. LDAP o ARCHIVO). el comando curl recupera y descarga su contenido en la salida estándar. Incluye encabezados HTTP en la salida. Opciones para el comando curl Opción -b. --continue-at posición -d data -i -L. Mata la conexión después de que el número especificado de segundos ha transcurrido. Consulte la página de manual curl(1) para obtener la lista completa. la siguiente línea de comandos podría utilizarse para descargar las imágenes ISO para el lanzamiento de Fedora-Core 1: 445 . --remote-name -u. Además.css"> El siguiente cuadro lista algunas de las opciones que se pueden utilizar para modificar la conducta de curl. Inicio curl Cuando se llame con una URL como su argumento. alguna información de temporización se escribe en el error estándar. [elvis@station rha030]$ curl http://www. Proporciona datos como si los enviara a solicitud POST. Por ejemplo. GOPHER. Si se da como “-”.curl es un cliente que sirve para obtener documentos/archivos o enviar documentos a un servidor. TELNET. El comando está diseñado para funcionar sin interacción de usuario u otra clase de interacción.Linux. charset=iso-8859-1"> <style type="text/css" media="all">@import "/css/non_ns4. autenticación de usuario. --user nombredeusuario:contraseña Efecto Proporciona valores de cookie desde el archivo especificado. texto HTTP post. Escribe salida al archivo del mismo nombre como archivo citado en la URL. Table 1.01 Transitional//EN"> <html> <head> <title>Red Hat -.com 2>/dev/null | head <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4. cookies. reanudar transferencia de archivo y más. FTP.redhat. --location -m. DICT. SSL conexiones (https:). carga ftp. utilizando cualquiera de los protocolos compatibles (HTTP.css". Almacena las cookies recuperadas en el archivo especificado. curl ofrece una carga de trucos útiles como soporte proxy. --cookie filename -c. curl tratará de encontrar automáticamente la posición apropiada. el cual se desecha en el siguiente ejemplo.</style> <link rel="stylesheet" TYPE="text/css" HREF="/css/homepage. Autenticar con par de nombredeusuario/contraseña.

Dload Upload Total Current Left Speed 0 629M 0 536k 0 0 13375 0 13:42:49 0:00:41 13:42:08 75883 Los siguientes detalles de la línea de comando curl deberían observarse: • • • • Observe el uso de la "sintaxis de expansión de paréntesis" en la URL citada. --input-file filename -B.-O -L "http://download.redhat.3}. donde el servidor proxy puede especificarse con la siguiente sintaxis. el comando wget recupera el contenido de la URL y lo almacena en un archivo local en el directorio actual de trabajo del mismo nombre (o index. yarrow-i386-disc2.com/pub/fe dora/linux/core/1/i386/iso/yarrow-i386-disc{1. --base URL Efecto Lea la URL para buscar desde el archivo filename. el cual puede ser un archivo HTML o liste en modo secuencial el URL como texto.fedora. Observe el tiempo que le queda a la capacidad actual: 13 horas.pide a curl que examine las descargas parciales existentes y recoja la transferencia donde se abandona. Encontrará una lista completa en la página del manual wget (1).iso y yarrow-i386-disc3. El comando curl tratará de descargar tres archivos.iso --> yarrow-i386-disc1. La opción -L le pide a curl continuar con cualquier redirección expedida por el servidor de red (aunque no es evidente desde la salida. yarrow-i386-disc1.[elvis@station elvis]$ curl -C .iso. Anteponga URL a todos los enlaces relativos.iso" [1/3]: http://download.iso % Total % Received % Xferd Average Speed Time Curr. curl utilizará el servidor especificado proxy. Inicio de wget Cuando se llama con una URL como su argumento.2. los archivos se descargarán al directorio local con los mismos nombres.iso.redhat.fedora. HTTPS y FTP descarga recursos posiblemente de modo recursivo a las páginas citadas desde las páginas descargadas. la opción -C . 446 . Si el comando necesita abortarse y luego reiniciarse.html si el URL especificó un directorio). http://servername:puerto De modo recursivo descargar los recursos de la red con wget La línea de comando del cliente de red wget diseñada para uso no interactivo de los protocolos HTTP.com/pub/fedora/linux/core/1/i386/iso/yarrow -i386-disc1. Debido a la opción -O. curl fue redirigido al servidor FTP). Si se establece la variable de entorno http_proxy. Configuración de curl para utilizar un servidor Proxy. El siguiente cuadro lista algunas de las opciones que pueden utilizarse para modificar la conducta de wget. Opciones del comando wget Opción -i. Table 1.

. --recursive -l. Permite recuperar de modo recursivo.txt' Reusing connection to www. solamente confirme su presencia.redhat.redhat. awaiting response. Connecting to www. debería ser obvio que cuando se llamó de modo recursivo. HTTP request sent.redhat. Concatene el contenido de todos los archivos descargados al archivo filename.com/training/ [following] --02:53:01-.86K/s ETA 00:00 . la siguiente línea de comandos sirve para copiar el contenido del sitio http://www.http://www..575 [text/html] 100%[====================================>] 29.html' saved [29575/29575] Loading robots.http://www.redhat. 447 . Por ejemplo. HTTP request sent..`www.redhat.http://www.redhat.--spider --http-user=user passwd=passwd -o filename -r.com/training/ => `www. --level depth -np.com/training [elvis@station mirror]$ wget -r http://www. awaiting response.04K/s ETA 00:00 02:53:02 (175. please ignore errors.50]:80..com/training => `www.txt.187.redhat.redhat.redhat.redhat.redhat. 301 Moved Permanently Location: http://www..redhat.232. done. connected. No es recursivo más allá de depth niveles de recursividad.com:80.232..com[66.50]:80. los siguientes directorios demuestran que wget se desvió más allá de los límites del sitio web www.redhat. Después de observar un rato. HTTP request sent.com/robots.com/training --02:53:01-. Al recursar.187.575 175. El nombre de archivo . --02:53:02-. [elvis@station mirror]$ wget -r http://www. Autentique con el nombre de usuario especificado y la contraseña.. Después de cancelar el comando anterior con CONTROL-C.com/robots..com/training.com/training..redhat.redhat.1' Resolving www. el comando wget suele recursar más allá de las expectativas. --no-parent --http- No descargue páginas.com[66.com/training. awaiting response..com.txt => `www.html' Connecting to www..com/training/index.04 KB/s) .. sólo incluya enlaces bajo el URL padre... 200 OK Length: 29. 200 OK Length: 262 [text/plain] 100%[====================================>] 262 255.com/training/index.especial implica una salida estándar. connected.redhat.

index.press_bluepoint.html | `-.about/ | |-.2002/ | | |-.txt www.index.com/ |-.index.txt www.com/ `-. certcities.corporate/ | | `-.press_rhacademy.redhat.press_training.press_rhct.index.robots.oreillynet.com/ `-.html | |-. Configuración de wget para utilizar un servidor Proxy Igual al comando curl..safaribooksonline.html |-.index.html Utilicelo con cuidado.presscenter/ | |-.com/ `-.press_veterans.careers/ | | `-.html secure.html | |-.robots. http://servername:puerto Ejemplos Uso de utilidades de transferencia del archivo con base en la terminal El comando wget con opciones para intentar de nuevo puede ser útil para buscar archivos desde un sitio ftp ocupado.europe..wwoffices/ | | `-.asp?code=ORA14&portal=oreilly www. de nuevo utilizando la siguiente sintaxis.html | | `-.txt rhn.redhat.html | `-.commerce/ | | `-. |-| |-| |-| |-| |-| |-| `-- . 448 .apps/ | |-. wget utiliza la variable de entorno http_proxy para especificar un servidor proxy.index.google.robots.com/ `-..com/ `-.robots.com/ `-.html | |-.txt www.html | | |-.redhat.html | | |-.2003/ | `-.contact/ | | `-.promo.

para que la configuración tenga lugar automáticamente en el inicio de shell.8.2-5.com/8.rpm' Resolving updates. Configurar Si utiliza un servidor proxy para acceder a Internet. Abbreviation as País Australia 2.i386.`wget-1. pero utilice la opción -Q 256k para limitar su descarga a un máximo de 256 kilobytes.i386.83K/s ETA 00:00 16:20:40 (4.737 (unauthoritative) 100%[====================================>] 365..8. Estimated Time: 10 mins..rpm --16:19:24-. Cuando haya terminado.2-5.gov/cia/publications/factbook/index.52]:21. La CIA publica un libro mundial de datos de los países del mundo en el sitio http://www. Length: 365.redhat. Su instructor le guiará. Logged in! ==> SYST .. done. ==> TYPE I . Cree el directorio ~/wget y cd dentro de éste. ==> CWD /8.i386.com. usted puede limitar el número de niveles de recursión. done.8.bash_profile..com y posiblemente otros.redhat...rpm .i386.ftp://updates. ==> RETR wget-1. Más específicamente. URLs tales como http://www.. done. done.com/training/ Ejercicios en línea Lab Exercise Objetivo: Familiarizarse con la terminal basada en clientes de red. [einstein@station einstein]$ wget --recursive --level=1 --convert-links http://www.com/ 8.[einstein@station einstein]$ wget --tries=50 --wait=30 ftp://updates.redhat.2-5. Connecting to updates...odci.rpm => `wget-1...html.2-5...redhat. su directorio ~/wget debería contener el directorio www.8. connected.83 KB/s) .8.. Utilice el navegador de elinks para examinar una hoja de datos de todos los países especificando la URL para la página del país directamente desde la línea de comandos..gov/cia/publications/factbook/geos/ca.com. coloque su configuración en el archivo ~/.187.redhat. ==> PORT .redhat. done..redhat. done..i386. Especificaciones 1.737 4. Logging in as anonymous . Utilice el comando wget para descargar de modo recursivo el sitio www. ==> PWD .rpm' saved [365737] Al utilizar wget para copiar un sitio web. 449 . en donde los países se especifican mediante un abreviatura de dos letras en la porción del nombre de archivo de la URL.0/en/os/i386/wget-1. Si este es el caso.0/en/os/i386 . done.com[66. necesitará configurar sus clientes de red al establecerhttp_proxy y/o las variables de entorno HTTP_PROXY.232.2-5.html se refieren a páginas del país específico.0/en/os/i386/wget-1.odci..

html” debería remplazarse con la abreviatura apropiada).) [student@station student]$ get_birthrate ni 38.000 population (2003 est. 450 . debería descargar la página del país y reducir la salida a una línea que contenga la ¡nformación de la tasa de natalidad del país.ch ni China Nigeria Después de familiarizarse con el formato de cada paǵina. [student@station student]$ get_birthrate au 9.redhat. extrae la línea apropiada desde la URL http://www.html (donde “ca.) [student@station student]$ get_birthrate ch 12.odci. Además.75 births/1.96 births/1.) Deliverables A title Question 1 1.43 births/1. escriba un script corto llamado ~/ bin/get_birthrate que combine los comandos curlygrep.000 population (2003 est. el script debería generar una salida similar a la siguiente. el cual cuando se invoca con una abreviatura de país de dos letras.000 population (2003 est.gov/cia/publications/factbook/geos/ca.com El script ~/get_birthrate. Cuando haya terminado. El script debería esperar como su único argumento una abreviatura de dos letras del país. El directorio ~/wget que contiene los primeros 256 Kbytes (o más) de una descarga recursiva del sitio web http://www.

Para utilizar los esquemas de claves de autenticación pública. la utilidad rsh abre una shell interactiva en el server1 host. En Linux (y Unix). Si una máquina remota se configura adecuadamente los usuarios pueden utilizar la línea de comandos rsh parecida a la siguiente para invocar una shell remota. debe generarse un par de claves pública-privada con el comando ssh-keygen. La primera shell remota más utilizada fue la aplicación rsh. Como resultado. el intérprete de comandos de elvis implica que aún está en la estación host. El comando se ejecuta en la máquina remota (server1). se puede iniciar una shell interactiva. La aplicación Secure Shell ofrece una shell remota. los servidores pueden autenticarse para los clientes como también los clientes se pueden autenticarse para los servidores. Cuando el comando termina. [elvis@station elvis]$ rsh -l elvis server1 ls /tmp jd_sockV4 lost+found orbit-root ssh-WjMO1585 [elvis@station elvis]$ Al traducir este comando dice "como el usuario elvis en el servidor 1 host. Discussion La shell remota original: rsh y la autenticación de Rhosts Shells remotas con rsh Las shells de Linux (y Unix) estan diseñadas con interfaces sencillas. ejecuta el comando ls /tmp". pero la salida estándar es enviada a la máquina local (station). Al prestar atención al intérprete de comandos de bash en el siguiente extracto. 451 . donde todas las transacciones son encriptadas y los usuarios pueden autenticarse mediante contraseñas tradicionales o esquemas de autenticación de clave pública. una shell puede operar en una máquina remota de un modo tan fácil como la máquina local. Debido a que los servidores de Secure Shell tienen sus propios servidores de pares de claves pública-privada. Leen entrada desde el flujo de la salida estándar. Si elvis no especifica el comando a ejecutar. Simplemente al sustituir una conexión TCP para un dispositivo de terminal. De modo alterno. observe qué comandos se ejecutan y en qué máquina.Comandos remotos de shell Conceptos clave • • • • Las aplicaciones remotas de shell le permiten a los usuarios ejecutar comandos arbitrarios en máquinas remotas y tener salida estándar retornada de manera local. las interfaces se implementan fácilmente a través de conexiones de red. las aplicaciones que proporcionan esta funcionalidad se conocen como shells remotas.

e.rhosts de elvis. necesitó configurar la cuenta para que le permitiera acceder desde su máquina local.rhosts -rw------1 elvis elvis 16 Nov 8 18:23 . El intercambio de información a través de una red en texto sin formato es esencialmente el equivalente a enviar correo en postales: todo el mundo puede llevar la información de aquí a allá y no estar al tanto de su contenido. sino del diseño del protocolo de autenticación rhost.example.rhosts La autenticación depende de un archivo de configuración ~/.com [elvis@server1 elvis]$ who root tty1 Nov 8 16:56 root tty2 Nov 8 16:56 root pts/0 Nov 8 16:57 (:0.com [elvis@server1 elvis]$ hostname server1. Además. el demonio sshd). La falla no es de elvis. todos tendrían que separar la estación host real desde la red y traer otra máquina configurada con la dirección IP de la estación. La Shell segura se desarrolló para abordar estos dos defectos del comando rsh y agregar nuevas capacidades mientras que aún ofrece toda la conveniencia de rsh. antes de poder acceder a su cuenta remota mediante rsh.0) elvis pts/4 Nov 8 18:28 (station) [elvis@server1 elvis]$ exit rlogin: connection closed. Para rsh. elvis podría invocar una shell en la máquina remota como se muestra a continuación. elvis creó el archivo ~/. La Shell segura El método de autenticación rhost es lamentable. No obstante. Además. [elvis@station elvis]$ rsh -l elvis server1 cat .rhosts y agregó la línea con el host y el nombre del usuario para cada cuenta externa a la cual quisiera otorgarle acceso.rhosts configurado de modo adecuado conocido como la autenticación rhost. En una cuenta remota. [elvis@station elvis]$ Autentificación de Rhosts: ~/. elvis no necesitó expedir una contraseña. Así como se ilustra con el siguiente comando.rhosts En cada caso.rhosts en la máquina remota. 452 . Si se asume que una máquina remota está ejecutando el servicio ssh (i. elvis ya tiene configurado su archivo . el servidor rsh requiere que los permisos de archivo le prohiban leer el archivo a todos con excepción del usuario propietario. Con el fin de explotar la configuración ~/. rsh es un protocolo de texto sin formato.rhosts station elvis [elvis@station elvis]$ rsh -l elvis server1 ls -l . depende del DNS (Servidor de Nombres de Dominio) para autenticar un usuario. la configuración de control de acceso es tan trivial como agregar una línea a un archivo.example. En esencia.[elvis@station elvis]$ rsh -l elvis server1 Last login: Sat Nov 8 18:23:49 from station.

[elvis@station elvis]$ ssh elvis@server1 ls /tmp elvis@server1's password: jd_sockV4 lost+found orbit-root [elvis@station elvis]$

La nueva sintaxis del comando ssh para especificar el nombre de usuario de la cuenta remota es un poco más fácil que la de rsh, aunque la opción -l también se ejecuta (para ser completamente compatible con los anteriores). En el ejemplo anterior, elvis se autentica al proveer una contraseña en lugar de configurar un archivo ~/.rhosts. En la siguiente sección, encontramos que la Shell segura puede utilizar una técnica de clave pública más madura para otorgar una cuenta a los usuarios "libre de contraseña". Sin embargo, cuando la clave de autenticación pública no se ejecuta, ssh vuelve a la autenticación de contraseña tradicional. [1] Autenticación de clave pública shell segura Aparte de la autenticación tradicional, la aplicación Shell segura puede utilizar una clave criptográfica para autenticar usuarios. Los algoritmos de clave pública encriptada se relacionan con dos grandes números conocidos como "claves" a fin de que la información encriptada con una clave solo pueda ser descrifada con la otra. Cualquiera que quiera utilizar criptografía de clave pública debe generar primero un par de claves. La mayoría de los protocolos de clave pública llaman una clave como clave pública y la complementaria como una clave privada. A su clave pública usted la trata como su número telefónico, el cual comparte con quien desee comunicarse y que puede listar en directorios públicos. Su clave privada, por otra parte, no la comparte con nadie. Toda la seguridad provista por los protocolos de clave privada dependen del hecho que sólo usted conoce su clave privada. Generación de un par de clave pública-privada: ssh-keygen Al utilizar ssh se puede generar un par de clave pública-privada con el comando ssh-keygen. La shell segura puede utilizar diferentes algoritmos esenciales de encripción y el comando sshkeygen forzará a especificar uno con la opción -t. Para nuestros propósitos, utilizaremos el algoritmo RSA, el cual se especifica con-t rsa. En el siguiente ejemplo, elvis utiliza ssh-keygen para generar un par de clave pública-privada ssh-keygen. [elvis@station elvis]$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/elvis/.ssh/id_rsa): RETURN Enter passphrase (empty for no passphrase): RETURN Enter same passphrase again: RETURN Your identification has been saved in /home/elvis/.ssh/id_rsa. Your public key has been saved in /home/elvis/.ssh/id_rsa.pub. The key fingerprint is: e0:71:43:df:ed:40:01:0b:44:54:db:c2:80:f2:33:aa elvis@station

Al usuario elvis primero se le pidió el nuevo nombre de archivo de clave (privada) para lo cual elvis simplemente pulsó ENTER para aceptar el nombre de archivo predeterminado: ~/.ssh/id_rsa. Luego, elvis tuvo la oportunidad de agregar una passphrase a su clave privada. Al pulsarENTER

453

otra vez (dos veces), elvis eligió no agregarla (más adelante trataremos las frases de acceso en detalle). Cuando el comando retorna, elvis tiene dos nuevos archivos en su directorio ~/.ssh. El primero contiene su clave privada, la cual no la comparte con nadie (desde luego no la publica en un texto en línea). [elvis@station elvis]$ cat .ssh/id_rsa -----BEGIN RSA PRIVATE KEY----MIICWwIBAAKBgQClJnymgdK0myP41/DcIyR9aam0DZQJUT20RLfqQb8ptk90jXSL FrcIR2Ia59W/kJVLo4pqwJDsEJetWdhYiKUVJTANxbV2Pv21OACMlYcM316YLTOm IeoEZj128yjZcehs2aBBhNEVW/Y0E1MDn9mm34yXT4z367OWnGXTc9yMWQIBIwKB gQCW/p3aEEudz6vcMyVbjdg4JheADGoXJbTCEvFLNMwI4TKztIfPn71JZdYJ+Ijp qMMDU7HAsA94vraP3R2SxhNFEEauYF+BXTae21MMKhU9JfgB1mQiYRaWrlU2j7cW oF0vLnqYmTUV6CF9eJ8gMrgA28LymCpKhV/bng8l2uhnCwJBANNERHxLoKcTsANA cmPs7iu1FtxuDk6Z4SctrkTVx+HtOE4JjpE/FKsJVpJK8oi/d0WEnpk2G7+67TSG zsfHcqcCQQDIHnqQAWAZ9kd03UTjkuPSIj9OSBI5H25wYpUBItDQlUjwwJwL//C7 CDxFGgXfoO6pqr9f6JqqF9Ey/nNEpuj/AkAMEoeSEvM8v0vi7b1ky7XWnKI4e1FG Ue+b1rmARrr295zRQl/rCus8+TglneH5L4MoizxDROukjlayi1xF7iPPAkBsotTR 1Nxl3Xc/cM2gHIpNgE5AcERoJwFwNYQWjz4oFoaulHH34rXh3+Y0JBHRK3o+2QjN qigTMYAxoBKwPVnpAkEAvHl24SepSlAuSIwgtbluJApOfaDTizIAHh/G8PPFvH1e p0J+MM7d/qFjg9gpcqZN34LOW8lD7Ab/GTQGl/XsWw== -----END RSA PRIVATE KEY-----

Él es libre de compartir su segunda clave (la clave pública) con quien se la pida. [elvis@station elvis]$ cat .ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEApSZ8poHStJsj+Nfw3CMkfWmptA2UCVE9tES36kG/KbZP dI10ixa3CEdiGufVv5CVS6OKasCQ7BCXrVnYWIilFSUwDcW1dj79tTgAjJWHDN9emC0zpiHqBGY9dvMo 2XHobNmgQYTRFVv2NBNTA5/Zpt+Ml0+M9+uzlpxl03PcjFk= elvis@station

Permiso de acceso de cuenta: ~/.ssh/authorized_keys El acceso de SSH a una cuenta se otorga obteniendo una copia de clave pública de la persona a quien se le va a otorgar acceso y almacenándola en el archivo ~/.ssh/authorized_keys de la cuenta. Como el archivo ~/.rhosts, el archivo ~/.ssh/authorized_keys debe ser legible sólo por el usuario propietario del archivo. La forma de obtener una clave pública no interesa. Podría enviarse por correo electrónico scp o transferirse desde una terminal a otra utilizando las utilidades de cortar y pegar del ratón. Cuando se manejan claves públicas, se debe tener mucho cuidado de asegurarse que la clave se coloca en un archivo sin espacio incorporado, incluyendo líneas nuevas. Aunque es demasiado para visualizar como tal, las claves públicas SSH, siempre se almacenan como una línea de texto sencilla. A la mayoría de la gente puede otorgársele acceso a una cuenta simplemente agregando sus claves públicas a los archivos ~/.ssh/authorized_keys, una clave pública en cada línea. Figure 1. Autenticación de clave pública SSH

454

En el siguiente ejemplo, elvis utiliza ssh, redirección y algunas comillas colocadas cuidadosamente para agregar su clave pública (en la station host) al archivo authorized_keys en su cuenta en el server1 host. [elvis@station elvis]$ ssh elvis@server1 "cat >> .ssh/authorized_keys" < .ssh/id_rsa.pub elvis@server1's password:

¿Por qué son necesarias las comillas? Si las comillas se hubieran incluido, la salida del comando cat se hubiera agregado al archivo .ssh/authorized_keys en la máquina local. Las comillas sirven para pasar la sintaxis de redirección "en" la shell de red. Habiendo colocado su clave pública en el archivo ~/.ssh/authorized_keys en la máquina remota, elvis espera ahora poder examinar el contenido del archivo sin tener que expedir una contraseña. [elvis@station elvis]$ ssh elvis@server1 "cat .ssh/authorized_keys" elvis@server1's password: ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEApSZ8poHStJsj+Nfw3CMkfWmptA2UCVE9tES36kG/KbZP dI10ixa3CEdiGufVv5CVS6OKasCQ7BCXrVnYWIilFSUwDcW1dj79tTgAjJWHDN9emC0zpiHqBGY9dvMo 2XHobNmgQYTRFVv2NBNTA5/Zpt+Ml0+M9+uzlpxl03PcjFk= elvis@station

Algo no concuerda, porque a elvis se le solicitó otra vez su contraseña. Al recordar que los permisos en el archivo ~/.ssh/authorized_keys deben ser 600, elvis ejecuta el comando chmod apropiado en la máquina remota. Después, puede observar los nuevos permisos sin tener que emitir una contraseña. [elvis@station elvis]$ ssh elvis@server1 chmod 600 .ssh/authorized_keys elvis@server1's password: [elvis@station elvis]$ ssh elvis@server1 ls -l .ssh/authorized_keys -rw------1 elvis elvis 225 Nov 22 22:29 .ssh/authorized_keys [elvis@station elvis]$ Éxito. Detalles de autenticación de la clave pública Con el fin de desarrollar una apreciación de la robustes de la autenticación de la clave pública, utilizaremos algunos minutos para tratar el protocolo. Cuando la aplicación Secure Shell ejecuta la

455

autenticación de clave pública, utiliza un procedimiento similar al siguiente. En nuestra discusión, se utilizarán los siguientes símbolos. Symbol S P R P(R) S(P(R)) = R Interpretación El contenido de la clave privada ("secreta") de elvis El contenido de la clave pública de elvis Una cadena de texto aleatoria Una cadena de texto aleatoria encriptada por la clave pública de elvis La cadena de texto es primero encriptada por la clave pública de elvis y luego descifrada por la clave privada de elvis.

Primero, el cliente ssh en la station host solicita una conexión al demonio sshd en el server1 host. Tras recibir la solicitud de conexión, el demonio sshd busca una clave pública registrada en el archivo ~/.ssh/authorized_keys de la cuenta de destino. Si se descubre una clave pública relevante, el demonio sshd inicia la autenticación de clave pública generando una cadena de texto aleatoria R. Luego encripta el guión aleatorio con la clave pública de elvis P (obtenida desde el archivo ~/.ssh/authorized_keys) y envía el guión aleatorio encriptado P(R) a través de la red al cliente ssh. Figure 1. Algoritmo de autenticación de la clave pública (1 de 3)

Tras recibir la cadena de texto encriptada de modo aleatorio P(R), el cliente ssh utiliza la clave privada de elvis S para descifrala. Una vez se recupera la cadena de texto original aleatoria el cliente ssh retorna al demonio sshd. Figure 2. Algoritmo de autenticación de la clave pública (2 de 3)

456

Si el demonio sshd recibe del cliente ssh la misma cadena de texto aleatoria con la cual inició, el cliente se autentica y la conexión puede continuar. Figure 3. Algoritmo de autenticación de la clave pública (3 de 3)

Un par de aspectos sobre este algoritmo que vale la pena mencionar. • • El cliente ssh no se autentica con su nombre de host o con su dirección IP sino únicamente con una clave privada, (si el cliente no puede acceder a la clave privada apropiada, no podría decriptar la cadena de texto encriptada aleatoria que se le entrega). La única información que pasó por alto la red es una cadena aleatoria encriptada y una cadena aleatoria (los símbolos en rojo en las gráficas). Cualquiera que intercepte la conversación no aprendería nada útil.

En la práctica, el algoritmo real utilizado es más complicado. Sin embargo, el protocolo esbozado anteriormente ilustra la mayoría de las características de la autenticación de protocolo de clave pública.

457

Transferencia de archivos de modo seguro y fácil: scp Como se ilustra en la discusión anterior, los archivos se pueden transferir de una máquina a otra mediante ssh con el comando cat y una redirección cuidadosa. Afortunadamente, hay una forma más fácil y menos propensa al error: scp. El comando scp utiliza una sintaxis casi idéntica a la del comando cp, pero cualquier archivo o archivos de origen o destino pueden estar en una máquina remota, que ha tenido acceso a través de una cuenta especificada [1]. Cuando se refiera al archivo en una máquina remota, se utiliza la siguiente sintaxis. user@host:ruta

El usuario y host son simplemente el equipo en donde reside el archivo y el usuario cuya cuenta se utiliza para acceder el archivo. Si la ruta del archivo comienza con un “/”, se considera como una referencia absoluta. Si no, se considera como una referencia relativa del directorio de inicio del usuario. Si no se provee una ruta, se asume que es el directorio de inicio del usuario. A manera de ejemplo, la siguiente línea de comandos transferiría el archivo /etc/services desde el directorioserver1 al directorio ~/cfg/server1/etc/ en el directorio de inicio de elvis. [elvis@station elvis]$ scp elvis@server1:/etc/services cfg/server/etc/ services 100% |*****************************| 19936 00:00

Dado que elvis ha configurado correctamente la autenticación de clave pública con su cuenta en server1, puede transferir el archivo sin emitir una contraseña. ¿Qué sucede si trata de transferir el archivo /etc/shadow? [elvis@station elvis]$ scp elvis@server1:/etc/shadow cfg/server/etc/ scp: /etc/shadow: Permission denied

El usuario elvis en el server1 host no tiene permisos para leer el archivo /etc/shadow, por lo tanto no puede ser transferido naturalmente. Sin embargo, si el usuario elvis conoce la contraseña de la cuenta de root en la máquina remota, puede acceder el archivo a través de ella. [elvis@station elvis]$ scp root@server1:/etc/shadow cfg/server/etc/ root@server1's password: shadow 100% |*****************************| 2588

00:00

Puesto que elvis no tiene una clave de acceso pública autenticada para la cuenta de root server1, ssh utilizó la autenticación tradicional de contraseña. La opción -r (de "recursivo") se debe especificar al copiar un directorio completo (y sus subdirectorios). A continuación, elvis copia de modo recursivo el directorio /etc/sysconfig desde su máquina local (station) al directorio /tmp de la máquina server1.

458

[elvis@station elvis]$ scp -r /etc/sysconfig elvis@server1:/tmp ifup-aliases 100% |*****************************| 13137 ifcfg-lo 100% |*****************************| 254 ifdown 100% |*****************************| 3676 ifdown-ippp 100% |*****************************| 820 ifdown-ipv6 100% |*****************************| 4076 ...

00:00 00:00 00:00 00:00 00:00

Cuando el comando scp ejecuta la transferencia, este presenta la información de temporización de la transferencia para cada archivo. Autenticación de host de la Shell asegurada La primera vez que el cliente ssh (o scp) se utiliza para conectarse a un servidor Secure Shell sshd, se presenta un mensaje similar al siguiente: [elvis@station elvis]$ ssh elvis@server1 who The authenticity of host 'server1 (192.168.0.254)' can't be established. RSA key fingerprint is fc:c8:87:90:f0:39:af:4f:de:99:cc:30:ce:64:b2:8e. Are you sure you want to continue connecting (yes/no)?

Si la respuesta del usuario es sí (la única respuesta que permite continuar a la conexión), la conexión continúa con la siguiente advertencia. Warning: Permanently added 'server1,192.168.0.254' (RSA) to the list of known hosts. root tty6 Nov 8 22:03 root pts/1 Nov 8 22:17 (:0.0)

En conexiones subsiguientes, el mensaje ya no aparece. [elvis@station elvis]$ ssh elvis@server1 who root tty6 Nov 8 22:03 root pts/1 Nov 8 22:17 (:0.0) [elvis@station elvis]$

La Secure Shell no sólo autentica clientes a servidores, sino también servidores a clientes, mediante la autenticación de clave pública. Así como los usuarios pueden crear pares de clave pública-privada con el comando ssh-keygen, el demonio sshd mantiene su propio par de claves pública-privada conocido como su host key. La primera vez que un cliente ssh se conecta a un demonio sshd, añade una copia de la clave del host público del demonio remoto al archivo local ~/.ssh/known_hosts. [elvis@station elvis]$ cat .ssh/known_hosts server1,192.168.0.254 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAvaQ4ILVi9lceyBuGo9KUFY ksKtPT8BsLPkLZYLIRVxmXDtG1+W+qxiAgw6qCROX8fAvBkdGS4gegt06NVpKItW87K5Wq6OMIlUfwfX OmPNOWrdA+1Wym0LXYnkUDEOV8xvTUtGzy4MRIl0Phi92uJYEJkKsHMOCWGazN/DclBZk=

459

Como el cliente se utiliza para conectarse a varias máquinas, el archivo ~/.ssh/known_hosts crece, registrando una clave pública para cada máquina contactada. La próxima vez que el cliente se conecta a un host, silenciosamente emplea el mismo protocolo de clave pública utilizado para autenticar usuarios, invertido, para autenticar el host al cual se está conectando. ¿Qué sucedería si el host remoto no tiene la misma identidad complementaria de la clave pública almacenada en el archivo de cliente ~/.ssh/known_hosts? El cliente rehusa conectarse y en su lugar emite la siguiente advertencia. [elvis@station elvis]$ ssh elvis@server1 ls /tmp @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that the RSA host key has just been changed. The fingerprint for the RSA key sent by the remote host is c8:96:41:69:84:38:57:4c:18:55:7a:16:04:33:4d:f1. Please contact your system administrator. Add correct host key in /home/elvis/.ssh/known_hosts to get rid of this message. Offending key in /home/elvis/.ssh/known_hosts:1 RSA host key for server1 has changed and you have requested strict checking. Host key verification failed. [elvis@station elvis]$

Aquí, el cliente ssh está identificando la línea desde el archivo ~/.ssh/known_hosts con la clave que ya no complementa el servidor. Suele haber una explicación razonable para el cambio de identidad del servidor. Por ejemplo, el servidor pudo haber sido actualizado con una versión más reciente de su sistema operativo y como resultado, generó un nuevo par de clave pública-privada. Si hay una explicación razonable para que un servidor cambie de identidad, el cliente ssh puede ser forzado a quitar la línea incorrecta del archivo ~/.ssh/known_hosts y recoger una nueva clave para el host. [elvis@station elvis]$ rm ~/.ssh/known_hosts [elvis@station elvis]$ ssh elvis@server1 ls /tmp The authenticity of host 'server1 (192.168.0.254)' can't be established. RSA key fingerprint is c8:96:41:69:84:38:57:4c:18:55:7a:16:04:33:4d:f1. Are you sure you want to continue connecting (yes/no)? si Warning: Permanently added 'server1,192.168.0.254' (RSA) to the list of known hosts. jd_sockV4 lost+found orbit-root ssh-ayfI2751 sysconfig Ejemplos Acceso a una cuenta remota El emperador julius recientemente se ha suscrito a la línea DSL en la casa y quisiera tener acceso a la información en su máquina principal desde el trabajo. En su máquina principal, agregó una cuenta para él mismo utilizando su apodo,jules. No sabe el nombre de host del computador en su

460

casa, pero antes de salir a trabajar anotó su dirección IP 69.57.97.126. En la oficina, utiliza una máquina con un nombre de host emporer.rome.gov y su nombre de cuenta es julius. Primero confirma si puede conectarse a su máquina principal con el cliente ssh. [julius@emperor julius]$ ssh jules@69.57.97.126 The authenticity of host '69.57.97.126 (69.57.97.126)' can't be established. RSA key fingerprint is 89:01:b1:55:7e:6f:da:0c:bc:fc:19:62:af:84:d6:7f. Are you sure you want to continue connecting (yes/no)?

Como esta es la primera vez que ha tenido acceso a su máquina principal utilizando ssh, acepta la clave del host al contestar si. En la siguiente solicitud de contraseña, entra la contraseña para su cuenta de inicio de sesión. Warning: Permanently added '69.57.97.126' (RSA) to the list of known hosts. jules@69.57.97.126's password: /usr/X11R6/bin/xauth: creating new authority file /home/jules/.Xauthority [jules@localhost jules]$

Ahora Julius está contento porque puede tener acceso a su cuenta de inicio. Configuración de la autenticación de la clave pública Ahora que Julius sabe que puede acceder a su cuenta de inicio de sesión, desearía configurar la autenticación de la clave pública, para poder ordenar directamente a su máquina principal desde la oficina, sin tener que emitir una contraseña. Inicia generando un par de clave pública-privada en su máquina de trabajo, mediante el algoritmo RSA. Puesto que la configuración por defecto es apropiada para él, escasamente pulsa la tecla ENTER para todas las preguntas asociadas. [julius@emperor julius]$ ssh-keygen -t rsa ...

Después de confirmar que sus archivos de clave pública-privada existen, utiliza el comando scp para copiar su clave pública desde su equipo de trabajo al archivo .ssh/authorized_keys en su máquina principal, autenticándose otra vez con su contraseña. [julius@emperor julius]$ ls .ssh/ id_rsa id_rsa.pub known_hosts [julius@emperor julius]$ scp .ssh/id_rsa.pub jules@69.57.97.126:.ssh/authorized_keys jules@69.57.97.126's password: scp: .ssh/authorized_keys: No such file or directory

Aparentemente, ~/.ssh no existe aún. Julius remedia el problema y luego transfiere el archivo con éxito. Por último, establece los permisos en el directorio remoto ~/.ssh y su contenido para que sólo puedan estar disponibles para el usuario propietario.

461

[julius@emperor julius]$ ssh jules@69.57.97.126 mkdir .ssh jules@69.57.97.126's password: [julius@emperor julius]$ scp .ssh/id_rsa.pub jules@69.57.97.126:.ssh/authorized_keys jules@69.57.97.126's password: id_rsa.pub 100% |*****************************| 226 [julius@emperor julius]$ ssh jules@69.57.97.126 chmod -R go-rwx .ssh jules@69.57.97.126's password:

00:00

Con su autenticación de clave pública ahora configurada, Julius puede acceder fácilmente a su máquina principal. [julius@emperor julius]$ ssh jules@69.57.97.126 uptime 11:01:12 up 7:55, 1 user, load average: 0.08, 0.12, 0.09

Realizar copias de seguridad remotas con SSH En su máquina principal. Julius tiene un directorio llamado archivos, el cual contiene documentos importantes. El desearía hacer una copia de seguridad del archivo en su máquina de trabajo. Desde su máquina de trabajo, emite la siguiente línea de comandos. [julius@emporer julius]$ ssh jules@69.57.97.126 "tar czf - archive" > jules.archive.tgz

Julius coloca un “-” donde sería especificado el nombre de archivo del archivo que se va a crear. Este le pide al comando tar botar el archivo a la salida estándar en lugar de ponerlo en un archivo. Localmente, la salida estándar fue redirigida al archivo jules.archive.tgz, Julius ha creado ahora un archivo local del archivo remoto ~/archive como se confirma con el siguiente comando. [julius@emporer julius]$ tar tvzf jules.archive.tgz -rw-r--r-- jules/jules 112 2003-10-24 15:19:04 archive/named -rw-r--r-- jules/jules 18 2003-10-26 08:00:11 archive/java -rw-r--r-- jules/jules 204 2003-10-30 21:24:33 archive/quagga ...

Ejercicios en línea Lab Exercise Objetivo: Utilizar correctamente la aplicación Secure Shell. Estimated Time: 30 mins. Especificaciones

1. Configurar

sus cuentas alternas primera y tercera (nombredeusuario_a y nombredeusuario_c, respectivamente) para que usted pueda tener acceso a las cuentas desde su cuenta primaria mediante ssh sin tener que proporcionar una contraseña. Recuerde que todos los clientes de la red pueden contactar los servicios de red locales mediante el nombre del host localhost.

462

2. Mediante su cuenta primaria, cree un script llamado ~/bin/send_to_a que copiará un 3.
archivo regular como su único argumento en su directorio de inicio de su primera cuenta alterna. Mediante su cuenta primaria, cree un script llamado ~/bin/backup_c, el cual crea un archivo tar gzipped del contenido de su directorio de inicio de la tercera cuenta alterna dentro del archivo /tmp/backup_c.tgz.

Deliverables A title Question 1

1. La configuración correcta para que su cuenta primaria puede tener acceso a su primera y 2. 3.
tercera cuenta mediante ssh sin especificar una contraseña. En su cuenta primaria, un script llamado ~/bin/send_to_a, el cual copiará un archivo regular especificado como su único argumento dentro de sus primeras cuentas primarias de directorio de inicio. En su cuenta primaria, un script llamado ~/bin/backup_c, el cual crea un archivo tar gzipped del contenido de su tercera cuenta alterna del directorio de inicio dentro del archivo /tmp/backup_c.tgz.

463

Una manera de visualizar esto es por medio de una estructura ramificada de árbol. Estas canciones se podrían agrupar en un directorio llamado songs. podría haberlos agrupado en un directorio llamado photos. A un archivo individual se le asigna un nombre (un nombre de archivo). este orden se puede bosquejar como aparece en la gráfica 1-1. Este proceso puede continuar.png y picture2. los directorios son en sí mismos un tipo de archivo para que también puedan ser recopilados en otros directorios. Este nuevo directorio puede ser uno de tantos en el directorio website. nivel tras nivel. Ejemplo de un árbol de directorios 464 . El comando pwd muestra el cwd de la shell bash. Los dos directorios songs y photos se pueden organizar en un directorio llamado media. parent home Discussion El árbol invertido del sistema de archivos El concepto de un sistema de archivos organizado en directorios es común en muchos sistemas informáticos. y los nombres de archivo se organizan en un directorio (denominado como directorio en algunos sistemas operativos). Por ejemplo.midi. Sin embargo. El directorio website puede contener los subdirectorios html. formsy media.png y a su vez. Todo proceso tiene un directorio actual de trabajo con frecuencia llamado "cwd".midi y song2. Figure 1. la usuaria alice podría tener varias canciones almacenadas en archivos con nombres como song1. Junto con los directorios y los archivos nombrados anteriormente. La usuaria alice también podría tener algunas fotos almacenadas en los archivos picture1. Los archivos se pueden reseñar tanto por referencias absolutas como por referencias relativas. El comando cd cambia el cwd de la shell bash.Network Applications Navegación del sistema de archivos Conceptos clave • • • • • • El sistema de archivos de Linux es un "árbol invertido"de directorios y archivos con un directorio raíz llamado "/". hasta crear un entorno altamente estructurado.

..png picture2..midi picture1.alice -| | | | | -| | -.elvis -| | | -.png De la apariencia de ramificaciones de este diagrama es de donde surge la idea de árbol de directorios.home -| | -| | | | -.songs -| | | | | -| | -. puede ver que el directorio website trazado anteriormente puede adjuntarse para extender el diagrama.-.html website -... graphics. como se muestra en la gráfica 1-2. se le llama estructura de directorio de árbol invertido.photos-| -| song1. Este árbol de directorios se puede ver..-. docs. Por ejemplo.. website. en parte. La característica más importante del diagrama en este punto es la estructura arbórea que se desprende de / y no el contenido específico.etc.-. todas las ramas de una sola raíz "/" (léase como "barra oblicua") llamada directorio raíz..media -| -| | -. Las elipses en el diagrama sugieren que hay muchos archivos y directorios que no se muestran aquí. Linux utiliza un sólo árbol de directorios para toda su colección de archivos y directorios.bin. Figure 2..midi song2. Árbol de directorios iniciando en / -. / -. 465 .forms | | -| | | -. Por lo general se dibuja con las ramas hacia abajo y con la raíz del árbol en la parte superior (website en este caso) y por lo tanto..... | mystuff. | | -| | | -..

En el escritorio de Red Hat Enterprise Linux. Este tipo de nominación. Por ejemplo.midide la usuaria alice se identificaría como /home/alice/website/songs/song1. Activación del panel lateral de Nautilus La aplicación de panel lateral deNautilus se utiliza para diferentes propósitos. los atajos y las suposiciones por defecto se utilizan para simplificar el tecleado de los nombres de los archivos. Cuando haga click 466 . se puede abrir una ventana de Nautilus al hacer doble clic (izquierdo) en el icono de inicio que se encuentra en la esquina superior izquierda. La cadena de nombres de directorios que le llevan al nombre de archivo es la ruta del archivo. así que seleccione "árbol" en el panel lateral superior del menú. el FQN del directorio website. usted puede utilizar el navegador Nautilus (puede ser más sencillo para aquellos que han tenido contacto con lanzamientos previos de Red Hat Enterprise Linux) al seleccionar el "navegador de archivos" desde el menú principal de Aplicaciones.midi. Esto puede hacerse seleccionando el "panel lateral" desde el menú "ver". ayuda a garantizar que cada archivo y directorio tenga un nombre único completamente calificado. Figure 1. primero tenemos que activar el panel lateral de Nautilus. los usuarios pueden utilizar Nautilus como una herramienta sofisticada para navegar en el sistema de archivos. Un directorio se puede expandir al hacer clic (en el botón izquierdo del ratón) en el triángulo al lado del icono de la carpeta. En este momento. estamos interesados en explorar el árbol de directorios. Ventana Nautilus Como una alternativa. separando cada parte con una barra oblicua (/). Figure 4. El navegador Nautilus Para poder explorar el árbol de directorios utilizando Nautilus. comience desde la raíz del árbol del sistema de archivos Linux y liste todas las ramas del directorio hasta el archivo o directorio deseado. Selección del panel lateral del árbol en Nautilus El panel lateral de Nautilus le debe mostrar ahora la lista de directorios (carpetas) en forma de árbol con el directorio superior llamado simplemente /. Exploración del árbol de directorios utilizando Nautilus En el entorno gráfico X de Red Hat Enterprise Linux. Figure 5. El archivo song1. [1] Figure 3.Al nombrar un archivo o directorio. En la práctica real. Esto se conoce como el nombre completamente calificado o FQN. sería /home/alice/website. mencionado anteriormente.

Obviamente. Si usted inicia la sesión en el sistema a través de una terminal virtual. y puede considerarse como el lugar en donde usted se encuentra dentro del sistema. Por defecto. A este directorio por defecto se le conoce como el directorio actual de trabajo ó cwd. Este intérprete de comandos es producido por la shell de comandos. un proceso no está sujeto todo el tiempo a un determinado cwd cuando ejecuta. la entrada de "Buscar" que se encuentra justo arriba del panel principal. Exploración del árbol de directorios con Nautilus Tenga en cuenta que cuando se selecciona un directorio particular para ver. Esta manera de ver un directorio como un "lugar" es tan común en el mundo de Linux que la palabra lugar es bastante dominante en el lenguaje. se le asigna un directorio por defecto. 467 . le permite al proceso operar con mayor flexibilidad ya que sus acciones dependen en parte del directorio por defecto. Cuando sea necesario. Afortunadamente.en el icono de la carpeta o en el nombre de carpeta. o inicia un programa de terminal en X. el padre del proceso que lo inicia le asigna un cwd al proceso. Esto tiene dos efectos. ¿En dónde estoy? El comando pwd Uno de los procesos que se encuentra en ejecución en un sistema de Linux es la shell de comandos. Ahora que ha dedicado un poco de tiempo explorando el concepto de árbol de directorios y la forma como se construyen las referencias absolutas a los directorios y los archivos. verá el intérprete de comandos en donde puede introducir comandos para que el sistema actúe. la shell de comandos para los sistemas de Red Hat Enterprise Linux es la shell de comandos bash (del inglés Bourne-again shell). El directorio de trabajo actual afecta los comandos que usted escribe en el intérprete de comandos y se convierte en su cwd mientras ejecutan. haciendo doble clic (en el botón izquierdo del ratón) en el icono ifcfg-lo en el panel principal. El directorio de trabajo actual (cwd) A cada proceso Linux (por ejemplo. el cwd de la shell bash es su cwd. es importante estar al tanto del cwd. hay ayuda disponible. Intente ver el contenido del archivo /etc/sysconfig/network-scripts/ifcfg-lo. le permite al proceso referirse a los archivos de una manera más sencilla sin tener que utilizar nombres demasiado largos. Figure 6. Desde este punto de vista entonces el cwd para un proceso se puede considerar como la ubicación actual de un proceso. Primero. un proceso puede cambiar su cwd a otro directorio antes de continuar su trabajo. los usuarios hablan de navegar el sistema de archivos cuando se mueven de un directorio a otro. Segundo.un programa o un comando) cuando se ejecuta. Si cambia el directorio por defecto. Dedique un poco de tiempo para explorar el sistema de archivos con Nautilus y para ver el contenido de varios directorios. En primer lugar. Un método común que puede utilizarse con los directorios es el considerar un directorio como un lugar más que una cosa. la acción del proceso también cambiará. Por ejemplo. podrá ver el contenido de la carpeta en el panel principal de Nautilus. Como cualquier otro proceso. primero seleccionando el directorio /etc/sysconfig/networkscripts en el panel lateral y después. la shell bash se mantiene al tanto de su cwd mientras está ejecutando. Sin embargo. el cual es el proceso responsable de la lectura e interpretación de comandos. Este directorio por defecto se utiliza para completar el FQN para cualquier archivo cuyo nombre no se especifique como un FQN. muestra una referencia absoluta (FQN) para el directorio que se está viendo. Básicamente entonces. para el proceso. Si un proceso cambia de cwd entonces se ha movidode un directorio a otro. hablaremos un poco sobre algunos de los conceptos relacionados con el sistema de archivos de Linux.

" del computador y se encuentra en el directorio website. al trabajar en su directorio website. Podría utilizar pwd. Considere la siguiente secuencia de comandos: [alice@station website]$ pwd /home/alice/website [alice@station website]$ cd /home [alice@station home]$ pwd /home [alice@station home]$ cd /home/alice/website/songs [alice@station songs]$ pwd /home/alice/website/songs Observe cómo cambia el resultado del comando pwd y la última parte del intérprete de comandos para reflejar el nuevo cwd después de cada comando cd. Puesto que navegar por los directorios es tan importante. Pero pueden haber otros directorios website en alguna otra parte del sistema. la usuaria alice. DIRECTORIO utiliza por defecto el directorio de inicio del usuario. puede ver un intérprete de comandos como éste: [alice$station website]$ El intérprete de comandos le recuerda que ha iniciado la sesión con el nombre de usuario "alice" en la "estación.Primero. el mismo intérprete de comandos muestra el último directorio de la ruta al cwd. Uso: cd [DIRECTORIO] Si no se especifica. Por ejemplo. [alice@station student]$ pwd /home/alice/website Cambio de sitio. Esto incluye la shell de comando bash. La ruta completa (o absoluta) del directorio de trabajo actual se puede visualizar con el comando pwd (del inglés print working directory). los procesos pueden cambiar sus cwd cuando sea necesario.El comando cd Como se anotó anteriormente. Uso: pwd La usuaria alice quiere verificar si se encuentra en el directorio correcto. la cual proporciona el comando cd (del ingleś change directory) para cambiar el directorio actual desde el intérprete de comandos. hay abreviaturas especiales para hacer referencia a ciertos directorios: 468 .

Es decir. el árbol de directorios se describe generalmente utilizando la analogía padre/hijo. Referencias absolutas y relativas Esta sección describe dos maneras de identificar la ubicación de un archivo. facilitando el cambio entre directorios hacia adelante y hacia atrás... la referencia absoluta nombra cada rama del árbol de directorio del sistema de archivos. también aplica a directorios y a archivos comunes de datos. no sólo en el comando cd. De nuevo. considere la siguiente secuencia de comandos: [alice@station songs]$ pwd /home/alice/website/songs [alice@station songs]$ cd ~ [alice@station alice]$ pwd /home/alice [alice@station alice]$ cd [alice@station songs]$ pwd /home/alice/website/songs [alice@station songs]$ cd .. el directorio . Para identificar un archivo. Segundo. a partir 469 . se debe proporcionar suficiente información para localizar el archivo dentro del sistema de archivos. como casi en cualquier otra parte de estas lecciones. [alice@station website]$ pwd /home/alice/website [alice@station website]$ cd [alice@station alice]$ pwd /home/alice La última serie de comandos en el ejemplo anterior muestra que por defecto el comando cd usa el directorio ~ si no se le asigna un directorio. . Primero. es importante recordar que en Linux un directorio es un tipo de archivo. Esta ubicación se puede proporcionar de dos maneras: como referencia absoluta(o ruta absoluta) o como referenciarelativa. Las referencias absolutas inician con una barra oblicua (/) y asignan el FQN del archivo. Si dir1 contiene a dir2. bash reconoce todos menos el último nombre simbólico en la mayoría de los contextos. está a un nivel más cerca de la raíz del árbol de lo que se encuentra el cwd. El directorio ~ representa ese directorio. usualmente un subdirectorio de /home que coincide con su nombre de usuario (este tema se explicará más detalladamente en el siguiente capítulo). la raya (-) es una opción especial del comando cd que se refiere al directorio de trabajo anterior. Por lo tanto.Table 1. Finalmente. así que todo lo que se diga sobre nominación de archivos. Después se le asigna un directorio de inicio a cada cuenta de usuario. Nombres de directorios especiales Symbol . En esta sección. ~ Significado The current working directory El directorio padre The user's home directory El directorio de trabajo anterior Las entradas en esta tabla requieren poca explicación. entonces se dice que dir2 es el directorio hijo de dir1 y que el dir1 es eldirectorio padre del dir2.

una referencia absoluta identifica claramente el recurso específico.." Table 1...txt cwd /home/alice /home/alice/website/songs /home/elvis/docs /home /home Referencia relativa sample. Esta referencia sólo nombra los directorios que se deben recorrer iniciando desde /home/alice. Una referencia relativa no describe la ruta al archivo desde /. por defecto. El comando cd . Por ejemplo. Hogan utiliza cd /home/hogan es el directorio de inicio.txt . Por lo tanto. Ahora Hogan sabe que su sistema le da inicio con su directorio de inicio establecido como directorio de trabajo inicial. y .midi puede ser website/songs/song1. Hogan utiliza de nuevo el comando cd esta vez para regresar al directorio de trabajo anterior..txt Sí. Sabe que /home/hogan Después.. Hogan sabe hogan]$ cd ~ [hogan@stationque el cwd termina en hogan (desde el intérprete de comandos). no desde /. Ya hemos discutido varios ejemplos de referencias absolutas en esta lección. tampoco se ha dado cuenta de que su directorio de inicio es /home/hogan.. [hogan@station hogan]$ pwd Utiliza el comando cd con el directorio ~ para cambiar a su directorio /home/hogan de inicio.txt o . pero es perfectamente válido./alice/sample. (en otras palabras.. los cuales representan el directorio actual y el directorio padre. Sin importar en dónde se encuentre usted en el sistema de archivos. el último ejemplo es bastante tonto. pero ¿es de ese directorio de donde empezó? Para ver desde dónde empezó. pero no sabe si éste es su directorio de inicio. Para que una referencia relativa sea válida debe iniciar nombrando un directorio (o archivo) en el cwd. la cual se debe recorrer hasta llegar al archivo./sample. sino que describe la ruta a partir del directorio actual. Se dispone a descubrir cuál es su directorio de inicio y también quiere ver si de hecho su cwd por defecto es su directorio de inicio./sample.txt ./.midi. Cada uno de estos es una referencia al archivo /home/alice/sample. La tabla 1-2 muestra algunos ejemplos adicionales sobre referencias relativas. los directorios . sin importar el valor del cwd).txt ./home/alice/website/. su directorio de inicio se encuentra asignado como su cwd. Además.. el ejemplo cd . si el cwd es /home/alice./sample.. respectivamente.muestra el comando cwd después de hacer el cambio (¿por qué es este comportamiento razonable?).txt con FQN. 470 . Ejemplos de referencias relativas a /home/alice/sample. Todos los directorios en Linux contienen dos entradas especiales. entonces la referencia relativa a song1. Ejemplos Descubrir el directorio de inicio Hogan acaba de inciar sesión y no se ha dado cuenta de que. Esta es una referencia relativa ya que no comienza con /. Algunos de estos ejemplos son intencionalmente "ineficaces.txt alice/sample. [hogan@station hogan]$pwd para ver el FQN de su directorio de inicio. en la discusión previa acerca del comando cd. era en realidad sólo un uso de una referencia relativa./.de /.

Ejercicios en línea Explorar el sistema de archivos Lab Exercise Objetivo: Demostrar el uso de cd. alice regresa a su directorio de inicio utilizando la conducta predetermianda del comando cd.../. tendrá que devolverse a su directorio de inicio para empezar a trabajar en otra tarea.. Si está utilizando el entorno gráfico X puede simplemente abrir cuatro terminales. Especificaciones En este ejercicio tendrá que configurar el directorio actual de trabajo de cuatro shells bash ejecutando de manera simultánea. El bash por defecto sólo muestra el componente final del cwd.. [alice@station html]$ cd /etc [alice@station etc]$ .. Si está utilizando consolas virtuales. ~/. [alice@station alice]$ cd website/html [alice@station html]$ ..Estimated Time: 10 mins. 2. puede utilizar cuatro de las seis consolas virtuales provistas./etc.Subir y bajar del árbol Alice necesita editar algunos de los archivos html en su sitio web. (edits the html files) .. (examines the configuration file) . Alice utiliza una referencia absoluta para cambiar los directorios a /etc.. [alice@station etc]$ cd [alice@station alice]$ .. Cuatro shells bash ejecutando de manera simultánea con cada directorio de trabajo actual de shell establecido en uno de los cuatro directorios listados anteriormente. • Al haber terminado su trabajo en /etc.. • Observe que el intérprete de comandos no contiene una / antes del nombre de directorio etc.. Abra cuatro terminales con shells bash (como se describió anteriormente) utilizando su cuenta primaria. pero cualquiera de los dos habría funcionado. . la ruta absoluta es mucho más corta y más fácil de entender que la referencia relativa equivalente. 4.. Después de iniciar la sesión necesitará cambiarse al subdirectorio apropiado bajo su directorio de inicio.. • Después de terminar su trabajo en los archivos html. Finalmente../. 471 .. Cuando lo haya hecho. Utilice el comando cdpara establecer los directorios de trabajo actuales de las shells en los siguientes cuatro directorios: 1. • Alice utiliza una ruta relativa para cambiar al directorio /home/alice/website/html ya que es más corta que el FQN.. deberá ir a /etc para examinar el archivo de configuración. En este caso.. /tmp /etc/sysconfig /usr/share/gnome Deliverables A title Question 1 1. (continues with other tasks) . 3./.

472 .Possible Solution El siguiente comando configura el directorio de trabajo actual de la shell al primer directorio de trabajo listado anteriormente.

... El directorio /etc contiene archivos de configuración del sistema. Comúnmente éste es un subdirectorio bajo el directorio /home. El directorio de inicio del usuario A cada usuario del sistema Linux se le asigna un directorio especial llamado su directorio de inicio y representa su espacio "privado" en el sistema.. cuyo nombre coincide con el nombre de inicio de sesión del usuario (se vieron varios ejemplos anteriormente /home/alice o /home/hogan).sbin Este capítulo presenta una breve descripción (a veces muy breve) del papel de cada uno de estos directorios. Árbol parcial de directorios iniciando en / -. Para cualquier 473 ..usr --| -. El directorio /tmp se utiliza como espacio global para borradores. -.home.. Discussion Esquema estándar de directorios de Linux Linux se puede utilizar para soportar muchos tipos diferentes de sistemas informáticos: servidores. | | | / --| | | | -..bin -..root. no se debe confundir con el directorio raíz del sistema de archivos. La única excepción importante a esto es el superusuario (o el usuario root) cuyo directorio de inicio usualmente es /root.bin. Para poder estandarizar la estructura del directorio del sistema de archivos a través de este variado rango de sistemas. sistemas de escritorio personales. Los directorios /bin y /usr/bin comúnmente contienen archivos ejecutables. El directorio de inicio de /root. -..... -. -. estaciones de desarrollo. la mayoría de los sistemas Linux emplean un esquema de nominación y utilización común que facilitan el uso y el mantenimiento de los sistemas... Al utilizar el mismo tipo de diagrama arbóreo empleado en el último capítulo. -.tmp. /.sbin. -.etc. etc.Directorios importantes Conceptos clave • • • • • A toda cuenta de usuario se le asigna un directorio de inicio.var. parte de la primera capa del árbol de directorios se vería así: Figure 1.

El directorio temporal /tmp Además de su espacio personal en sus directorios de inicio. modificar o borrar ninguno de los archivos en los directorios de los usuarios del sistema. es decir. sólo poniendo los resultados finales en el directorio de inicio del usuario cuando haya terminado de hacerlo. los usuarios son libres de crear subdirectorios bajo su directorio de inicio y de organizar sus datos como les parezca (sujetos a las restricciones de cuotas que deben haber). Un programa que necesite almacenar datos comprimidos puede almacenar resultados parciales en /tmp. /home/alice/public_html y /home/hogan/public_html respectivamente. El directorio /tmp le da a todos los usuarios acceso a espacio adicional para cumplir con necesidades a corto plazo sin cargar el espacio en su cuota. Normalmente. tanto Alice como Hogan pueden tener cada uno su subdirectorio public_html. El mantener el espacio de cada uno separado de los otros. Por ejemplo. Con frecuencia los sistemas Linux implementan cuotas en cuentas de usuarios para prevenir que cualquier usuario consuma una proporción injusta del espacio disponible. Cuando un usuario inicia sesión en el sistema por primera vez se le ubica "en" su directorio de inicio. diferentes atajos de comandos e inclusive un entorno de escritorio de trabajo completamente diferente al de Prince. ya que los usuarios no siempre son conscientes de cuánto espacio extra necesita un servicio y algunos servicios (tal como X) no pueden ejecutar si no hay espacio temporal disponible de almacenamiento. Los archivos de configuración locales específicos para cada usuario hacen que esto sea posible. Además. El directorio de configuración /etc Una de las características únicas de un sistema Linux es su flexibilidad.d. mientras que los archivos de configuración de la red se encuentran en /etc/ 474 .usuario. un lugar en donde se pueden guardar archivos separados de los archivos de otros usuarios. Este espacio de borrador "global" se encuentra disponible para todos los procesos en el sistema así como para todos los usuarios. el caracter (~) representa el FQN del directorio de inicio del usuario cuando se utiliza como el primer caracter de una referencia de archivo o directorio. Por ejemplo. el programa sendmail. Por ejemplo. ofrece también más seguridad a los usuarios. Por ejemplo. El propósito más obvio para el directorio de inicio de un usuario es brindar un espacio privado para datos. Puede que Blondie prefiera diferentes colores en su pantalla. Esto es especialmente importante. hay una gran probabilidad de que alice no pueda modificar o borrar ningún archivo de configuración en el directorio /etc aunque es posible que sí pueda leerlos. Normalmente se le da a los usuarios un control relativamente completo sobre sus directorios de inicio mientras que se les restringe el acceso al resto del sistema. Estos archivos de configuración normalmente se colocan en /etc o en un subdirectorio de /etc. El sistema borra automáticamente los archivos puestos en este directorio después de unos días. el sistema configura su directorio de inicio como su directorio de trabajo inicial. Los scripts de arranque del sistema se encuentran en /etc/rc. se le da acceso a los usuarios para compartir espacio de "borrador". a menudo utilizado para ejecutar un servidor de correo. Muchos de estos archivos de configuración se crean automáticamente por defecto cuando se crea la cuenta de un usuario o al utilizar por primera vez un recurso en particular del sistema. utiliza los archivos de configuración que se colocan en /etc/mail. cuando Blondie inicia la sesión puede que necesite un entorno diferente al de Prince. en el directorio /tmp. Prácticamente todo aspecto del sistema puede configurarse de alguna forma editando un archivo de configuración. Dos usuarios diferentes pueden incluso asignar el mismo nombre a archivos y directorios sin causar ningún conflicto ya que cada uno almacena en su propio espacio. Otro aspecto importante del directorio de inicio de un usuario es que proporciona un lugar para almacenar archivos de configuración específicos para cada usuario. es muy probable que no pueda leer.

Estos archivos tienden a ser muy estables. su navegador de web y la suite de oficina van en /usr/bin. El directorio "variable" /var Las colecciones de comandos y de archivos de configuración que se encuentran en lugares como / bin o /etc cambian muy poco día a día.sysconfig. Considere /bin y /usr/bin como directorios de comandos no privilegiados ya que no se necesitan privilegios especiales para utilizar los comandos que se encuentran en ellos. Los comandos apropiados para el uso de usuarios comunes se suelen ubicar en los directorios binarios /bin o /usr/bin./ (la raíz del sistema de archivos) Es un desafortunado accidente de la historia que el término raíz tenga un papel tan importante y a la vez confuso en Linux. Trate de anticipar y de evitar tal confusión en su propia comunicación y busque aclaración si el significado de la palabra no se puede deducir fácilmente del contexto. Sin embargo. Normalmente. pero una oración tal como el "directorio raíz" puede llegar a ser ambigua. es decir. Las utilidades adicionales como los compiladores. si es que cambian del todo. mv y el editor de texto vi. Estos archivos y directorios con contenido variable suelen recopilarse en el directorio /var. los cuales se pueden poner a disposición de otros sistemas a través de la red. el usuario con autoridad suprema sobre el sistema. en algunos casos). sin los cuales no se podría usar el sistema van en /bin. algunos archivos cambian con frecuencia. cd. Obviamente. Estos incluyen comandos para adjuntar y quitar hardware. El colocar dichos archivos aquí hace más fácil asignarles espacio y proteger los archivos más estables que se encuentran en alguna otra parte del sistema. archivos ftp y similares. el directorio /. sitios web. Los directorios de comandos /bin y /usr/bin La mayoría de los comandos del sistema se encuentran almacenados como archivos binarios en un formato legíble para la máquina. /root. el significado del término se puede deducir del contexto. Estos comandos privilegiados también se encuentran almacenados en dos directorios separados por las mismas razones que para /bin y /usr/bin. Considere /bin y /usr/bin como directorios de archivos no privilegiados puesto que no se requieren privilegios especiales para utilizar los comandos que se encuentran en ellos. es el término que se utiliza para la base (¿la parte superior?) del árbol de directorios del sistema de archivos. Los directorios de comandos /sbin y /usr/sbin Así como /bin y /usr/bin almacenan archivos de comando para usuarios comunes. Ejemplos El directorio /tmp 475 . registros del sistema. Estos incluyen correo electrónico entrante y saliente. también /sbin y / usr/sbin almacenan archivos de comandos para que el superusuario root los utilice. los usuarios comunes no pueden modificar los archivos en /etc (o incluso leerlos./rootvs. Las utilidades más importantes como ls. es el nombre de usuario del superusuario. La raíz o el "root" en inglés. Igualmente. También es el nombre del directorio de inicio de ese usuario. cp. pero los administradores de sistemas invierten bastante de su tiempo trabajando con los archivos almacenados aquí. root vs. para iniciar y detener el sistema y para realizar mantenimiento del sistema.

Alice utiliza el comando touch para crear un nuevo archivo vacío llamado newfile en /tmp. [alice@station alice]$ cd /tmp [alice@station tmp]$ ls orbit-alice ssh-XXDg4ke3 [alice@station tmp]$ ls -l total 8 drwx-----2 alice alice drwx-----2 alice alice [alice@station tmp]$ touch newfile [alice@station tmp]$ ls -l total 8 -rw-rw-r-1 alice alice drwx-----2 alice alice drwx-----2 alice alice 4096 Mar 16 08:04 orbit-alice 4096 Mar 16 07:07 ssh-XXDg4ke3 0 Mar 16 14:14 newfile 4096 Mar 16 08:04 orbit-alice 4096 Mar 16 07:07 ssh-XXDg4ke3 Después de cambiar a /tmp. which. Decide probar cp. Alice usa ls y ls -l para ver el contenido del directorio /tmp. 476 . También quiere probar si realmente puede crear archivos allí. Aunque ls -l produce un listado largo. lo hace de manera silenciosa (sin ningun aviso en la pantalla). Uso sencillo: which PROGRAM Muestra el FQN del archivo del comando PROGRAM que se utilizará si el usuario ejecuta el comando. Alice verifica que touch sí funcionó con otro ls -l. Para crear un archivo. cd y fdisk.Alice acaba de aprender que algunos de los procesos utilizan automáticamente /tmp como espacio de borrador y quiere ver si algo de lo que ha hecho ha utilizado ese espacio. Búsqueda de comandos en /bin y /usr/bin Hogan quiere ver si algunos de los comandos comunes que utiliza se encuentran en alguno de los directorios de los comandos binarios /bin o /usr/bin. Como muchos de los comandos Linux cuando touch lo logra. Alice utilizará el comando touch. De hecho. tanto orbit-alice como ssh-XXDg4ke3 fueron colocados allí cuando ella inició su entorno de escritorio. como le habían dicho antes. mozilla. ella no está segura y ve su nombre de usuario tantas veces que se convence de que algunos programas que ejecutó dejaron archivos en /tmp. Hogan puede utilizar ls para buscar estos comandos. pero en su lugar quiere probar un nuevo comando.

utilizado para particionar discos y sólo debe estar disponible para el superusuario así que estaba esperando una respuesta de /sbin.[hogan@station hogan]$ which cp /bin/cp [hogan@station hogan]$ which mozilla /usr/bin/mozilla [hogan@station hogan]$ which cd /usr/bin/which: no cd in (/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/hoga n/bin:) [hogan@station hogan]$ which fdisk /usr/bin/which: no fdisk in (/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/ home/h ogan/bin:) [hogan@station hogan]$ ls /sbin . Después Hogan aprenderá sobre la ruta de comandos y descubrirá el porqué esto tiene perfecto sentido. Esto también parece estar bien ya que los archivos en /usr/bin son archivos que un usuario normal podría querer que no siempre estuviesen disponibles. pero peligroso. Abra una nueva terminal o una nueva consola virtual (esto se necesita para la evaluación de su trabajo en línea). encontraría bash en /bin. Este comando se demostró en los ejemplos de este capítulo. ether-wake ldconfig portmap usbmodules extendfs lilo poweroff vboxd fdisk logdump pppoe vgcfgbackup . 477 . Al mirarlo más detenidamente. Necesitará utilizar which para ubicar los archivos de comando.. (¿Por qué?) Lo que Hogan no sabe es que cd es un ejemplo de un comando interno. Configuración En este ejercicio necesitará utilizar touch para crear archivos. provisto por el comando de la shell bash. Por otro lado. lo cual le parece posible ya que los archivos en /bin son los archivos que los usuarios normales desearían que siempre estuvieran presentes en el sistema. Sabe que es un comando importante. Ejercicios en línea Exploración de directorios importantes Lab Exercise Objetivo: Explore algunas de las características de los directorios importantes discutidas en este capítulo. Hogan está sorprendido de los resultados de cd. Hogan también está sorprendido de los resultados de fdisk. Este comando también se demostró en los ejemplos.. Hogan encuentra mozilla (el navegador que escogió) en /usr/bin. lo cual parece decir que el comando cd no está en el sistema. Tiempo estimado: 15 minutos. Especificaciones 1.. Incluso puede ver fdisk en /sbin cuando lo examina utilizando ls. descubre que which ni siquiera buscó fdisk en /sbin.. Estaba esperando ver una respuesta como /bin/cd. si revisara. Hogan ve que cp se encuentra en el directorio /bin.

[student@station student]$ touch /tmp/newfile. Possible Solution La siguiente secuencia de comandos demuestra el uso de which y touch. Dos archivos llamados ~/newfile. Deliverables A title Question 1 1.Quiere probar si en realidad puede utilizar touch para crear archivos en varios directorios. pero no en otros directorios. Finalmente. determine el FQN del archivo del comando binario para cada uno de los siguientes: pwd. Use el comando touch newfile. Utilizando which. a. salga de su shell para que se guarde la historia de sus comandos en el archivo ~/. c.username.username (en donde el username se remplaza con su nombre de usuario) en cada uno de los siguientes directorios. ~ /tmp /bin /root Claramente. 2. d. ejecute exit. en donde username es su nombre de cuenta primaria. Regrese a su directorio de inicio cuando haya terminado. salga de la terminal o de la consola virtual. cabe esperar que algunos de sus esfuerzos no den resultado.student [student@station student]$ which pwd /bin/pwd [student@station student]$ /bin/pwd /home/student 478 . Cuando haya terminado. Ejecute cada uno de estos comandos de manera "cruda" utilizando el FQN en el intérprete de comandos.bash_history.username y /tmp/newfile. ls y whoami. y la ejecución de un comando utilizando su referencia absoluta. b. Espera que esto funcione en su directorio de inicio y en /tmp.

la salida se mostrará en la pantalla. Normalmente. mover o copiar. Esto se hace utilizando el símbolo especial de redireccionamiento. pwd envió la salida al archivo de salida estándar.Administración de archivos Conceptos clave • • • • • Se pueden crear archivos (o agregar) de una manera fácil utilizando el redireccionamiento de la shell. también puede ser redireccionada a algún otro archivo. los resultados usuales del comando fueron dirigidos al archivo results..txt [julius@station julius]$ ls results. El comando rm borra archivos. Uso: cat [OPCIONES] [ARCHIVO. o STDOUT. el cual es por defecto la pantalla para los usuarios que han iniciado sesión en el sistema.] ConcatenarARCHIVO(s) a la salida estándar. Los archivos pueden ser "sobrescritos" como resultado de redireccionar. .txt. El comando cp copia archivos. Una de las características de la shell de comandos bash es que la salida que normalmente es dirigida a la pantalla a través de STDOUT.txt En este ejemplo. creando el archivo durante el proceso. En el ejemplo anterior. Por ejemplo. El comando mv mueve archivos. Un comando útil que nos puede servir para verificar lo que ha pasado es el comando cat (concatenar). Discussion Redirección Muchos de los comandos producen salidas “visibles”. 479 . como se muestra en este ejemplo: [julius@station julius]$ ls [julius@station julius]$ pwd > results.. observe la salida de pwd para Julius: [julius@station julius]$ pwd /home/julius [julius@station julius]$ A Linux le gusta pensar que todo es un archivo.

txt /home/julius Esta vez. Lo utilizaremos para mostrar un archivo nombrando un sólo archivo y no redireccionando los resultados.] Repite la cadena de caracteres en la salida estándar.txt 480 .txt julius]$ cat results.txt [julius@station julius]$ echo How are you >> greetings. El símbolo > es un ejemplo de un meta-caracter de shell. un símbolo con significado especial que la shell bash ve e interpreta antes de actuar sobre el resto del comando.txt [julius@station julius]$ ls results.. es decir. Sin embargo. éste se crea como si se hubiese utilizado >. [julius@station julius]$ pwd > results. El comando echo toma cualquier texto que se teclee como parte del comando y lo repite a la salida estándar (usualmente la pantalla). Julius capturó la salida de pwd redireccionando los resultados a results. si se utiliza un doble símbolo (>>) la nueva salida se añadirá al archivo.txt y después mostró results. Example 1: [julius@station julius]$ echo Hello > greetings.txt julius]$ ls >> results.txt [julius@station julius]$ cat greetings. El comando más sencillo de todos que produce una salida visible es echo. Como para cualquier otro comando. Uso: echo [OPCIONES] [STRING.txt Hello How are you Ejemplo 2: [julius@station [julius@station [julius@station /home/julius [julius@station [julius@station /home/julius results. esta salida se mostrará en la pantalla por defecto. pero también se puede redireccionar a un archivo.txt [julius@station julius]$ cat results.. el redireccionamiento borrará y re-creará el archivo vacío y luego capturará la nueva salida. Si el archivo ya existe. Si se utiliza >> y el archivo destino no existe.El comando cat copia cada uno de los archivos listados a la salida estándar.txt con cat.txt julius]$ cat results. Si se lista más de un archivo. Hay muchos de éstos como veremos en las próximas lecciones y todos requieren atención. se puede utilizar para crear archivos de texto.txt julius]$ ls julius]$ pwd > results. Este comando sencillo junto con el redireccionamiento. esto concatena efectivamente los archivos.

.} {DIRECTORIO} De la primera manera...tar y /tmp/novels.intente man cp).. Se hace una copia del archivo FUENTE.tgz.Copie archivos con cp Se pueden crear duplicados de archivos con el comando cp (del inglés copy). Haga una copia de mynovel./webpage. Ejemplos: 1.tar novels.txt en /tmp: cp mynovel.. Uso: cp [OPCIONES] {FUENTE} {DESTINO} cp [OPCIONES] {FUENTE. Copie los archivos songs. puede copiar árboles de subdirectorios completos de una sola vez.tgz /tmp Nombre los archivos resultantes /tmp/songs.midi backup. 4. se hace una copia del archivo FUENTE como DESTINO. De la segunda manera.. Haga una copia de mysong. Haga una copia de webpage. .html . Mueva/renombre archivos con mv Puede mover archivos de un directorio a otro o de un nombre a otro (renombrarlos) con el comando mv (mover).tar y novels. 3.midi 2. se pueden copiar uno o más archivos al mismo tiempo a un directorio. Con las opciones apropiadas (no se discutirán aquí .html desde su directorio de inicio a su directorio actual: cp ~/webpage..midi y nombre la copia backup.. en el DIRECTORIO y se nombra DIRECTORIO/FUENTE. El archivo resultante se llamará .midi: cp mysong.tgz en el directorio /tmp: cp songs.html.] {FUENTE} {DESTINO} 481 .txt /tmp El archivo resultante se llamará /tmp/mynovel... Uso: mv [OPCION.txt..

html.. . 3. Tiene dos subdirectorios ~/images y ~/html.tgz. Mueva el directorio images al directorio html: 482 .midi backup. FUENTE puede ser un directorio.html de su directorio de inicio al directorio de trabajo actual: mv ~/webpage. ... En la primera forma. 6. Aunque el comando mv proviene de la palabra "mover.. se mueven al DIRECTORIO y se nombran DIRECTORIO/FUENTE." de hecho mv raras veces mueve datos. El comando mv es particularmente interesante .. vemos esto como un cambio doble.} {DIRECTORIO} . Mueva songs. Renombre el subdirectorio html del directorio actual de trabajo a public_html: mv html public_html Renombra . el archivo FUENTE es renombrado como DESTINO.tgz a /tmp: mv songs. Mueva webpage. 4. Su cwd es su directorio de inicio./public_html.midi como backup./webpage.txt a /tmp: mv mynovel. el sistema de archivos simplemente graba un cambio de nombre.... Si el nombre cambia de /somedir/somefile a / newdir/somename. vemos esto como una "renombramiento" del archivo.tar y novels.tar novels. Si el nombre cambia de /somedir/somefile a /somedir/newname. Si el nombre cambia de /somedir/somefile a /newdir/newname.html .txt /tmp El archivo resultante se llamará /tmp/mynovel. mover y renombrar. Los archivos FUENTE. 5. Ejemplos: 1./public_html no existe de antemano vea el siguiente ejemplo.midi: mv mysong.mv [OPCION..tar y /tmp/novels. un cambio en el FQN del archivo. vemos esto como "mover" el archivo./html como . Renombre mysong. Mueva mynovel. De la segunda forma.] {FUENTE.txt. En su lugar.midi 2. en tal caso el directorio se mueove o se renombra. El archivo resultante se llamará .. asumiendo que . pues la manera en que funciona encierra un hecho crítico sobre los sistemas de archivos Linux: Linux trata el nombre de archivo como algo completamente diferente del contenido del archivo.tgz /tmp Nombre los archivos resultantes /tmp/songs. Pero para Linux todos estos son la misma cosa. uno o más archivos pueden ser movidos a un directorio al mismo tiempo.

. así que mv renombró el directorio fuente con el nuevo nombre. el comando rm puede suprimir árboles enteros de directorios de una sola vez. así que para todos los propósitos prácticos.tar novels. Uso: rm [OPCIONES] {ARCHIVO. Ejemplos: 1.html de su directorio de inicio: rm ~/photos.no siempre es lo que se pretende hacer.midi: rm mysong. Warning La documentación para rm incluye la siguiente frase: "Observe que si utiliza rm para suprimir un archivo.. usualmente es posible recuperar el contenido de ese archivo.html 483 .midi 2.tgz: rm songs. Warning Sí. Suprima (borre) archivos con rm Se pueden suprimir (eliminar. debe tratar este comando como si no fuese reversible. borrar) archivos con el comando rm (remover)." Aunque esto pueda ser verdad requiere un nivel de habilidad más allá del proposito de este curso. Observe la similitud entre este ejemplo y el anterior.mv images html El directorio resultante se llamará ~/html/images. La diferencia crítica es que en este caso el directorio destino ~/html ya existía. En las manos del susperusuario puede borrar el contenido completo de un sistema de archivos -. desenlaza el (los) ARCHIVO(s). Hay un comando especial para este propósito: rmdir. Técnicamente.intente ejecutar man rm) se pueden borrar árboles de subdirectorios de una sola vez.} Suprime el (los) ARCHIVO(s) del sistema de archivos. una diferencia que se aclarará más adelante.tgz 3. Note rm no puede borrar un directorio a menos de que se utilicen opciones especiales del comando. Borre songs. Borrar mysong.tar y novels. En el ejemplo anterior. Borre photos. el directorio destino no existía aún. Con las opciones apropiadas (no discutidas aquí . asi que mv movió el directorio fuente dentro (bajo) el directorio destino.

En esta sección resaltamos uno de esos peligros: sobrescribir archivos. cp habría remplazado file1 de la misma manera. Normalmente. Ejemplo 3: [julius@station julius]$ pwd > file1 [julius@station julius]$ cat file1 /home/julius [julius@station julius]$ ls > file1 [julius@station julius]$ cat file1 mycwd Aquí no hay muchas sorpresas si ha puesto atención -. necesitamos aprender cuándo se sucede la redirección. En particular. el archivo existente será destruido sin advertencia. mientras vemos pasar las corrientes del rio. cp o mv. Esto se conoce como sobrescribir un archivo.observe como mv remplazó el contenido previo de file1 sin ninguna advertencia. aunque por lo general. mv y rm. Este es el precio que hay que pagar por el poder de un sistema operativo como Linux. Ejemplo 4: [julius@station [julius@station file1 [julius@station [julius@station file1 file2 [julius@station /home/julius [julius@station [julius@station file1 [julius@station /home/julius julius]$ touch file1 julius]$ ls julius]$ pwd > file2 julius]$ ls julius]$ cat file2 julius]$ mv file2 file1 julius]$ ls julius]$ cat file1 Aquí tampoco hay sorpresas -. La redirección de comandos con > y los comandos cp y mv. estos son nombres de archivos nuevos y los comandos crean los archivos. Para poder entender completamente nuestro último ejemplo. necesitamos aprender un poco más acerca de redireccionamiento.simplemente observe la manera en que la segunda redirección remplazó el contenido anterior de file1 sin ningún mensaje de advertencia. Pero si se nombra un archivo existente como destino de la redirección. pueden nombrar los archivos destino. con frecuencia olvidamos las rocas que se encuentran bajo el agua y Linux también es el mismo caso. De nuevo. 484 . Puesto que este problema puede llegar a ser tan sorprendentemente sutil para un nuevo usuario. Infortunadamente. El archivo file1 se ha sobrescrito.Sobrescribir archivos (¡uy!) Algunas de las advertencias incluídas en la sección anterior insinúan algunos de los comandos potencialmente peligrosos como cp. le vamos a mostrar varios ejemplos. file1 ha sido sobrescrito.

Evento 1: bash ve la redirección a un archivo que ya existe. Esta es una característica no un error que necesario entender y utilizar de manera correcta. Evento 1: bash vio la redirección al archivo file2 y lo creó como un archivo vacio (vea la discusión anterior sobre redireccionamiento).Ejemplo 5: [julius@station [julius@station file1 [julius@station [julius@station file1 file2 [julius@station file1 file2 julius]$ touch file1 julius]$ ls julius]$ ls > file2 julius]$ ls julius]$ cat file2 ¿Por qué file2 lista file1 y file2. pero el objetivo de este capítulo simplemente es aprender cómo funcionan estos comandos y en esta sección específicamente. Es demasiado tarde para evitar el error. Existen algunas pocas opciones de comandos y características especiales de la shell de comando que se pueden utilizar para mitigar este comportamiento de alguna manera. borra el archivo y lo re-crea vacío (vea la discusión anterior sobre redirección) -.mycwd es sobrescrito. Evento 3: la salida de ls se envió a file2. Después utiliza cp para tratar de copiar el archivo a sí mismo pero cp detecta el "error. Evento 2: ls generó un listado de archivos mostrando el archivo creado anteriormente file1 y el que se acaba de crear file2. la siguiente secuencia produce una gran sorpresa. cat también se queja de los archivos fuente (entrada) y del destino (salida) al ser el mismo y pareciese que no hace nada. Julius usa cat con redireccionamiento para tratar de copiar un archivo a sí mismo." muestra un mensaje y no hace nada (mv hubiese hecho lo mismo).¡el contenido del archivo se perdio! ¿Por qué? Debido a la secuencia en la que tuvieron lugar los eventos. Está bien hasta ahora. la manera como funcionan en archivos existentes. Julius crea mycwd usando pwd y presenta su contenido con cat. 485 . cuando el primer ls sólo muestra file1? Respuesta: debido a la secuencia en que tuvieron lugar los pasos críticos. Ejemplo 6: [julius@station julius]$ pwd > mycwd [julius@station julius]$ cat mycwd /home/julius [julius@station julius]$ cp mycwd mycwd cp: `mycwd' and `mycwd' are the same file [julius@station julius]$ cat mycwd /home/julius [julius@station julius]$ cat mycwd > mycwd cat: mycwd: input file is output file [julius@station julius]$ cat mycwd [julius@station julius]$ Esto necesita una explicación. Primero. Sin embargo. Evento 2: ya no importa lo que cat haga puesto que el archivo fuente mycwd ya ha sido destruído y re-creado. El cat en la línea siguiente verifica que mycwd no ha tenido cambios. Pero el cat final de mycwd no produce ninguna respuesta -.

también necesita hacer una copia de seguridad de los archivos que se encuentran en el directorio archive. Para hacer copias de seguridad utilizó la habilidad del comando cp para copiar más de un archivo a la vez.jpeg photo2.jpeg photo2. Suprimir robots.parent home Ejemplos Mover/Archivar un sitio web simple Madonna intentó configurar un sitio web personal simple.html photo.txt. por si acaso daña o borra accidentalmente uno de los archivos en ~/public_html. [madonna@station madonna]$ ls html archive [madonna@station madonna]$ mv html public_html [madonna@station madonna]$ cd public_html [madonna@station public_html]$ ls index. pero después de terminar su proveedor de servicios de internet (ISP por sus siglas en inglés) le dijo que habia puesto todos los archivos del sitio web en el directorio equivocado.jpeg .jpeg public_html [nero@station nero]$ mv index. Necesita mover los archivos al directorio correcto. 486 . Puso los archivos en su directorio de inicio y deben estar en ~/public_html. pero después de terminar su ISP le dijo que había puesto todos los archivos del sitio web en un directorio equivocado. El directorio public_html fue creado por su ISP. Puso los archivos en ~/html y debieron haber sido puestos en ~/public_html./archive Para mover los archivos todo lo que Madonna tuvo que hacer fue renombrar el directorio.jpeg photo2.html photo1.txt Elvis nota un archivo en su directorio ~/public_html que no reconoce. El directorio archive ya existe. Mientras lo hace.html photo1.html photo1. [nero@station nero]$ ls index. Su problema es más complicado que el de Madonna.jpeg [madonna@station madonna]$ cp index. Necesita mover los archivos al directorio correcto..html photo. un archivo llamado robots.jpeg public_html [nero@station nero]$ ls public_html [nero@station nero]$ cd public_html [nero@station public_html]$ ls index. Mover un sitio web simple Nero intentó configurar un sitio web personal simple. puesto que no puede renombrar un subdirectorio simplemente. Decide borrarlo.jpeg Para mover los archivos Nero utilizó la habilidad del comando mv para mover más de un archivo a la vez.

Inicie sesión con su cuenta y utilice los siguientes comandos para crear estos dos directorios: [student@station student]$ mkdir ~/html [student@station student]$ mkdir ~/archive Especificaciones Quiere crear un sitio web personal simple utilizando las técnicas que se demostraron en la sección de ejemplos de este capítulo. Tiempo estimado: 15 minutos. 1. dependiendo de las características adicionales de la configuración de su sistema. Configuracion En este ejercicio necesitará trabajar con los directorios ~/html y ~/archive.html.txt [elvis@station elvis]$ [elvis@station elvis]$ index. 3. 2. Su instructor le dirá si puede ver los resultados de su trabajo de este modo.html en ~/archive. Note La página web resultante puede ser o no visible con un navegador.html robots.txt ls public_html Ejercicios en línea Crear un sitio web Lab Exercise Objetivo: Utilizar la redirección. Mueva este archivo a ~/html.html y ~/archive/index.html. 4.html ls ls public_html rm public_html/robots.[elvis@station elvis]$ public_html [elvis@station elvis]$ index. Renombre el directorio html como public_html. Possible Solution The following sequence of commands provides one possible solution to this exercise. Cree una página web "en construcción" en ~/index. Deliverables A title Question 1 Dos archivos ~/public_html/index. cp y mv para crear un sitio web simple y archivar el sitio web. Haga una copia de su archivo index. 487 . cada uno de los cuales tiene un contenido idéntico (el texto "en construcción" posiblemente con una etiqueta HTML).

Especificaciones Desea investigar las consecuencias del sobrescribir archivos y de la opción bash "noclobber". Verifique los resultados." Use cp para sobrescribir target con source.html echo 'Under construction' >> index.bash_history que tiene el récord de sus opciones de activación y desactivación de la opción noclobber. Estimated Time: 10 mins. Desactive la opción bash "noclobber" con el siguiente comando mágico: [student@station student]$ set +o noclobber 9. [student@station student]$ set -o noclobber 7.html student]$ student]$ student]$ student]$ student]$ student]$ student]$ student]$ mkdir html archive echo '<h1>' > index.html [student@station index. Un archivo ~/. 5. Sobrescriba target de nuevo haciendo cat en source y redireccionando la salida. Verifique el efecto con cat.html archive ls public_html student]$ ls archive Investigar la opción "noclobber" Lab Exercise Objetivo: Investigar las consecuencias de la opción bash "noclobber". Termine la sesión en la terminal o en la consola virtual. 4. 8. Active la opción bash "noclobber" con el siguiente comando mágico: 2. Re-cree target. Abra una nueva terminal o una nueva consola virtual (esto se necesita para la evaluación de su trabajo en línea).html mv index. 1.html echo '</h1>' >> index. Ensaye de nuevo ambos tipos de sobrescritura y observe los resultados. Cree un archivo llamado source que incluya la palabra "fuente" y un archivo llamado target que incluya la palabra "destino. 3. Possible Solution The following sequence of commands provides one possible solution to this exercise. 488 .html html mv html public_html cp public_html/index. 6. Deliverables A title Question 1