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

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

Por ahora. Por defecto. cuando los usuarios inician una sesión en Linux. generalmente. dondeusername se reempla con el nombre del nombre del usuario.txt. De hecho. [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. el directorio inicial de un usuario se llama /home/username. en Red Hat Enterprise Linux. Afortunadamente. Por defecto en Red Hat Enterprise Linux. Otros cuaderno abordarán el sistema de archivos y los permisos en mucho más detalle. en donde puede crear nuevos archivos (y nuevos subdirectorios).txt [prince@station prince]$ ls calendar.[elvis@station elvis]$ ls /etc/sysconfig/rhn > /etc/lsout. sólo se les permite crear archivos en su directorio de inicio. los usuarios no pueden crear archivos en cualquier lugar.txt -bash: /etc/lsout. sólo tenga en cuenta que a los usuarios. pero elvis no tiene el permiso para crear archivos en el directorio /etc. Todo usuario tiene un directorio de inicio. El usuario elvis trató de crear el nuevo archivo /etc/lsout.txt [prince@station prince]$ cat calendar.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. 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. su shell utiliza su directorio inicial como su directorio actual de trabajo.txt. sólo hay unos pocos lugares en donde se pueden crear archivos.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 .

[1] Por ejemplo. Afortunadamente. adverbios y objetos directos. 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).o --). Los comandos usualmente soportan las opciones --help. las cuales presentan un resumen de cómo utilizar el comando.prince primero ve la salida del comando cal directamente. El verbo es el comando a ejecutar. prince examina el contenido del nuevo archivo para confirmar que contiene la salida del comando cal. El comportamiento de los comandos se puede modificar con las opciones de la línea de comandos (usualmente opcional). hay irregularidades y para casi toda regla mencionada habrá excepciones. Aprender nuevos programas será mucho más fácil si toma un poco de tiempo para aprender estas convenciones. la simplicidad no es una de ellas. las cuales siempre empiezan con uno o dos guiones (. la lección anterior utilizó los comandos ps y who. Si queremos saber qué archivo contiene estos programas. [elvis@station elvis]$ which ps /bin/ps [elvis@station elvis]$ which who 14 . existen convenciones que (casi) todos los programas siguen. incluyendo la eficiencia y la flexibilidad.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). 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. La primera palabra en cualquier línea de comandos es el nombre del programa que se va a ejecutar. El comando which seguido del nombre de otro comando le dirá "qué" archivo se está ejecutando. Además. prince ejecuta otra vez el comando cal redireccionando la salida al archivo calendar. Discussion Gramática de la línea de comandos Aunque la interfaz de la línea de comandos tiene muchas ventajas. 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. Ejecución de comandos Conceptos clave • • • • • • Como cualquier otro idioma la shell bash utiliza una gramática específica. hay un programa llamado which que nos puede ayudar. así como en los idiomas. 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 -?.

presenta también el tamaño del contenido también. Entonces la shell realiza una pausa hasta que el proceso del comando termina. el cual incluye la opción -s. la salida estándar) del proceso se escriba en la terminal.. 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. Estas se conocen como opciones "cortas" de la línea de comandos. Por ahora. 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 -> ./usr/bin/who Cuando se ejecuta un comando. Una vez el comando termina. A veces estas opciones 15 . El segundo comando ls -s. Un ejemplo fácil es el comando ls utilizado para listar el contenido de un directorio. no se preocupe de los detalles en la salida. propiedad y la fecha de modificación. la shell presenta otro intérprete de comandos y espera a que se le diga que hacer./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 -> .. 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. ésto se abarcará en un cuaderno posterior sobre la utilización del sistema de archivos. 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. El tercer comando ls -l presenta una lista "larga". Sólo observe cómo se utilizan las opciones de la línea de comandos para modificar el comportamiento básico del comando ls. incluyendo todo tipo de detalles sobre los archivos tales como los permisos./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.

se puede especificar el argumento justo al lado de la línea de comandos. las opciones largas 16 .cortas también pueden tener un argumento. la cual especifica la "extensión". se pueden poner juntas compartiendo un solo -. En vez de empezar con un guión inicial. Por ejemplo. sólo puede compartir un guión si está de última. Si una opción sí tiene argumento tal como -w 40. Opciones largas de la línea de comandos En los primeros días de Unix. El siguiente ejemplo presenta una nueva opción -r para el comando ls. 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. A diferencia de las opciones con sólo una letra. las opciones largas están compuestas de palabras. cuando se utilizan múltiples opciones. todas las opciones de la línea de comandos compartían la sintaxis mencionada anteriormente. de la salida en caracteres. 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. Observe cómo se utiliza junto con las opciones -s y -w. De esta manera. los usuarios tomarán ventaja del atajo que les permite poner todas las opciones juntas con un sólo guión (-). el comando ls tiene la opción -w. ¿Cómo se sabe cuales opciones tienen argumentos y cuales no? La respuesta corta es por experiencia. pero pronto mencionaremos formas de encontrar ayuda también. Las múltiples opciones simplemente se ponen juntas entre el comando y el argumento. en este caso -s y -r. Con la evolución de Unix. [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. la gente empezó a necesitar lo que se conoce como opciones "largas". Los argumentos de las opciones simplemente siguen la opción de la línea de comandos. 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. 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). el cual invierte el orden de búsqueda.

En vez de que el argumento siga la opción como una palabra separada. Observe que las opciones tanto largas como cortas. un mes y un año posibles para poder generar el calendario. El aprender qué argumentos espera un programa y lo que hace con estos es parte del aprender a utilizar ese comando. Muchos comandos. 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. El comando ps no espera ningún argumento.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.. 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 -?. [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. también se pueden mezclar. [FILE]. [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. [elvis@station elvis]$ ls --help Usage: ls [OPTION]. Lo que el comando espera o no como argumento depende del comando.. El comando cal toma de cero a dos. los argumentos son fáciles. Sort entries alphabetically if none of -cftuSUX nor --sort. Este mensaje de uso contiene un resumen de los argumentos que se esperan. Por ejemplo. manejan ambos. Ayuda: uso ¿Cómo recordar todas estas opciones de la línea de comandos? No es necesario. incluyendo ls... No obstante. como en --width=40. List information about the FILEs (the current directory by default). las opciones que se soportan y lo que hacen. Algunos comandos utilizan sólo opciones cortas y algunos comandos utilizan opciones largas. Observe que el mensaje de uso generado por el comando ls es bastante largo y ha sido abreviado en la siguiente salida. el argumento se pone junto con la opción larga separada por un =. Cualquier palabra que quede en la línea de comandos. Estas opciones usualmente hacen que el comando emita un mensaje de "uso" en vez de realizar su operación normal. la sintaxis también difiere un poco. 17 .

Más adelante en este cuaderno se discutirán otras formas de encontrar ayuda. las cuales requieren un argumento.. --almost-all do not list implied .. Aquí. sino que simplemente proporcionan información para refrescar la memoria.. -r. --recursive -s. --width=COLS -x . --escape print octal escapes for non-graphic characters . 18 . -a. --reverse -R..Mandatory arguments to long options are mandatory for short options too... Los mensajes de uso no proporcionan una referencia completa para el comando. and . Aquí está la opción -w o --width.. --size . --all do not hide entries starting with . el mensaje de uso se refiere a las opciones cortas utilizando la forma abreviada. -k -l . 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.. 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 ]). --author print the author of each file -b. -A. Observe que ls soporta tanto las formas cortas (-s) como largas (--size) de esta opción.. -v -w.

weekly run-parts /etc/cron. except for LFD and TAB --help display this help and exit --version output version information and exit With no FILE. [madonna@station madonna]$ cat --help Usage: cat [OPTION] [FILE]. -A. or when FILE is -. to standard output..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 . read standard input.weekly cron. -t -T. Ella nunca ha utilizado este comando antes y está interesada en aprender a utilizarlo. Entonces.daily cron. -e -E. -u -v. 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. Concatenate FILE(s). Intenta mostrar el contenido del archivo /etc/anacrontab. --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. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 1 7 30 65 70 75 cron. -s.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.daily run-parts /etc/cron.. -n. [madonna@station madonna]$ cat /etc/anacrontab # /etc/anacrontab: configuration file for anacron # See anacron(8) and anacrontab(5) for details. or standard input. Report bugs to <bug-coreutils@gnu. -b. como por ejemplo.notation. Todavía no entiende todo el mensaje de uso. las referencias a la entrada y a la salida estándar.org>. empieza por examinar el mensaje de uso del comando.

Prueba ambos para ver si está en lo correcto. Al observar del mensaje de uso que la opción -t reemplazará cualquier espacio del tabulador con ^I.weekly$ 30^I75^Icron.daily run-parts /etc/cron.$ $ SHELL=/bin/sh$ PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin$ $ 1^I65^Icron.monthly Ahora observa que el uso de la opción -A es "equivalente a -vET".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. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 1^I65^Icron.daily 7^I70^Icron.[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^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. [madonna@station madonna]$ cat -t /etc/anacrontab # /etc/anacrontab: configuration file for anacron # See anacron(8) and anacrontab(5) for details.monthly^I^Irun-parts /etc/cron. 4 5 SHELL=/bin/sh 6 PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 7 8 1 65 cron.weekly run-parts /etc/cron.daily$ 7^I70^Icron.daily 9 7 70 cron.monthly run-parts /etc/cron. -E y -T.weekly 10 30 75 cron.monthly$ [madonna@station madonna]$ cat -vET /etc/anacrontab # /etc/anacrontab: configuration file for anacron$ $ 20 .weekly 30^I75^Icron.daily^I^Irun-parts /etc/cron.weekly^I^Irun-parts /etc/cron. intenta confirmar su sospecha. el cual ella asume que es el atajo de la opción corta -v.monthly^I^Irun-parts /etc/cron. 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.daily^I^Irun-parts /etc/cron.

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

el siguiente comando ejecutaría por siempre leyendo y botando ceros. escribiendo CTRL-Cterminará el proceso que se está ejecutando en ese momento y lo devolverá al intérprete de comandos 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. Alguien atascado en esta situación podría utilizar CTRL-C para cancelar el comando. El nodo de dispositivo /dev/zero es un pseudo dispositivo que cuando se lee devuelve un número infinito de ceros (binarios).. Después de la tabla se discuten estas secuencias de acuerdo con su utilidad en general. Al utilizar la shell bash.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. user types CTRL-C . utilizan la tecla CTRL para enviar esas señales "fuera de banda".) [elvis@station elvis]$ CTRL-D 22 .. al escribir reset seguido de la tecla INTRO usualmente la terminal se restaurará a una conducta cuerda. Ésta llega al rescate cada vez que un usuario siente que "SOLO QUIERO QUE SE DETENGA". Las terminales de Linux.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..tiene un intérprete de comandos bash con caracteres incomprensibles. una campanilla audible o un final de transmisión. El nodo del dispositivo /dev/null es un pseudo dispositivo que bota cualquier información escrita en él.borra el caracter anterior Introducir una línea . [elvis@station elvis]$ cat /dev/zero > /dev/null (. Por lo tanto. 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. 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. 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 . Table 1. los teletipos y las consolas "tontas" o las similares a vt100. como sus predecesores..

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

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

El servidor X no es realmente una terminal. incluyendo las consolas virtuales. módems. los programas interactúan con los terminales en un nivel bajo por medio de nodos de dispositivos. Identificación de terminales Así como con la mayoría de los otros dispositivos. 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. impresionando a sus amigos con su basta reserva de conocimiento inútil sobre Unix. la terminal se conoce por medio de su nodo de dispositivo. etc. La siguiente tabla lista algunos de los nombres comunes para terminales utilizados convencionalmente para algunos de los dispositivos de terminal comúnes.El único uso real es que hace pitar la terminal. la comunicación con la primera consola virtual utiliza el nodo de dispositivo /dev/tty1.0) (:0. ttyS1 en COM2. La terminal ttyS0 en Unix se relaciona con COM1 en DOS. etc.0) (:0. Cuando un usuario inicia la sesión utilizando el Administrador de Inicio de sesión en el entorno gráfico X.0) Linux trata muchos dispositivos diferentes como una terminal. 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. o por shells originadas en la red tal como con telnet o ssh. 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. Las pseudo-terminales no pueden estar relacionadas directamente a un dispositivo físico. Al identificar las terminales en estas situaciones. con frecuencia su terminal es listada como el servidor X mismo. por ejemplo. Un módem o un terminal similar a VT100 adjunto a un puerto en serie. con frecuencia utilizado por terminales en el entorno gráfico X. una línea en serie conectada a terminales VT100. tty1. En el siguiente extracto. que se encuentran dentro del directorio /dev. Table 1.0) (:0. Por ejemplo. [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. :0 25 . Una emulación de terminal. En ambos casos el terminal es especificado en la columna "TTY".

le pita. elvis escribe una a y presiona el tabulador. En el primer caso. Para poder ver la lista de opciones disponibles para completar. Al ver que el comando que elvis quiere ejecutar es el único que empieza con unicode_sta. El usuario elvis quiere habilitar el modo Unicode para su terminal. pero en algún momento antes de que termine la palabra. 26 . bash completó el comando tanto como pudo pero paró y le pitó para dejarle saber que usted aún tiene que escoger. 2. 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. En el segundo y tercer caso. [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. Empieza a escribir el comando y presiona el tabulador. Al escribir el nombre de un comando como la primera palabra de una línea de comandos bash.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. comience a escribir el comando que quiera ejecutar. Se puede ahorrar bastante tiempo y esfuerzo aprendiendo a hacer buen uso del tabulador al escribir los nombres de los comandos y archivos. Parte del comando que estaba escribiendo aparece mágicamente pero luego bash para y 3. Ha terminado. bash solo le pita. oprima el tabulador dos veces y bash hará una lista de todos los comandos que inician con las letras que usted escribió inicialmente. La shell bash hace lo mejor que puede seleccionando el comando que usted empezó a escribir de la lista de todos los comandos posibles. Para poder ver las opciones de los comandos que bash ha delimitado. elvis teclea el tabulador dos veces. Puede pasar una de tres cosas: 1. más de un comando inicia con las letras que usted escribió. Por ahora no se preocupe de lo que es el modo Unicode o el por qué quiere tenerlo. bash terminará de escribir el comando por usted. El resto del comando que empezó a escribir aparecerá mágicamente. [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. Proporcione lo suficiente del comando para que sea único y oprima el tabulador de nuevo. Un ejemplo es en orden. pare y pulse la tecla del TABULADOR.

Al final de un día muy ocupado. bash puede completar todo el archivo. # If a directory name is prefixed with `-l '. symbolic links in a # directory hierarchy are followed. -l /bin -l /usr/bin .conf. Ejemplos Reiniciar el terminal después de ver un archivo binario El usuario blondie accidentalmente utiliza el comando cat para ver un archivo ejecutable. [madonna@station madonna]$ cat /etc/prelink.conf # This config file contains a list of directories both with binaries # and libraries prelink should consider by default. /bin/arch. the directory hierarchy # will be walked as long as filesystem boundaries are not crossed. ella puede escribir la primera parte y después presionar el tabulador.2GNU???y??6. le llegará a doler el dedo meñique izquierdo de tanto presionar el tabulador. 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.so.conf es el único archivo que inica con /etc/prel. suponga que madonna quiere examinar el archivo /etc/prelink.. # If a directory name is prefixed with `-h '.. [blondie@station blondie]$ cat /bin/arch ELF??414 (44???4????/lib/ld-linux. Como el archivo es un ejecutable compilado. Después de un tiempo. el utilizar el tabulador se convertirá en parte de su naturaleza. En vez de tener que escribir el nombre completo del archivo. contiene bytes que no se pueden mostrar en una terminal y esto la descontrola.[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. [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. [madonna@station madonna]$ cat /etc/prel<TAB> Debido a que /etc/prelink.?????aaa????aac????-?????[??? 27 . Por ejemplo.

considera que ha visto lo suficiente. Especificaciones 1. Confirme que ha suspendido el proceso. 2. Mientras que esté apareciendo la salida. iniciando con el directorio raíz /.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. congele su terminal utilizando la secuencia CTRL3. Debería poder alternar el congelamiento y descongelamiento de la salida utilizando estas secuencias. 5. Descongele la terminal utilizando la secuencia CTRL-Q. suspenda el proceso con la secuencia CTRL-Z.Para restablecer la terminal. S. 4.Tiempo estimado: 5 minutos. [prince@station prince]$ ls -R / /: bin data etc initrd lost+found boot dev home lib misc /bin: arch ash ash. Mientras que la salida aún se encuentre fluyendo. [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. Como en el ejemplo de prince. blondie escribe el comando reset a ciegas y su terminal se restablece. 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. Cancela el comando presionando CTRL-C. Deliverables A title Question 28 . 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 .

Obtención de usos con -h. en la forma de "usages" o breves resúmenes de sintaxis que se producen cuando se invoca el comando con las opciones -h. 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.Getting Help Conceptos clave • • • • • • • La mayoría de los comandos proporcionan resúmenes cuando se invocan las opciones -h. Esto hace de Unix una opción muy efectiva para el usuario conocedor. -? o --help. Los usos se abordaron en la lección anterior pero se mencionan otra vez aquí para que todo esté completo. 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. pero los usuarios experimentados de Unix saben cómo encontrar la información en línea de manera rápida. las cuales se pueden ver con el comando man. Los manuales de Red Hat proporcionan documentación específica a la distribución de Red Hat Enterprise Linux. sino que se deben encontrar en el sistema de manera que sea de fácil acceso para los usuarios. La primera capa de ayuda con frecuencia la proporcionan los comandos mismos. En Red Hat Enterprise Linux. Nadie recuerda todas las funcionalidades de cada uno de los comandos. Por último. En Red Hat Enterprise Linux. el directorio /usr/share/doc contiene menos documentación estructurada específica para un paquete en particular. Esto es en particular cierto para los comandos más utilizados tales como mv. El Proyecto de documentación de Linux brinda una gran cantidad de documentación relacionada con Linux. en particular . cualquier documentación menos convencional asociada con un paquete específico se puede encontrar en /usr/share/doc. 30 . pero con frecuencia a expensas del aprendiz. Discussion Getting Help Unix y Linux. -? 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. Puede encontrar información de referencia mucho más amplia en las "páginas del manual". tienen la tradición de que los manuales y la documentación no se deben mantener en un estante. 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". Los comandos más complicados se describen de manera más completa en las páginas info. ps y vi. 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. -? o --help.

Puede ver las páginas de documentación para la mayoría de los comandos. Table 1. Para poder ver la página man del capítulo cinco. existen páginas tanto para el comando passwd. Table 1. b se utiliza para ver la página anterior. Por ejemplo. sin embargo. se puede navegar utilizando solo letras: space se utiliza para ver la siguiente página. man ls genera la documentación para el comando ls. El paginador less Red Hat Enterprise Linux usa less para ver las páginas del manual. 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. con frecuencia abreviado como "páginas man". los formatos de archivos. Por ejemplo. Algunas de las páginas comparten nombres idénticos en diferentes capítulos. en este caso la entrada del capítulo uno. less se abordará en más detalle en una lección posterior.Las páginas man Las páginas del manual. que se encuentra en el capítulo cinco que cubre los formatos de archivos. 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 . Infortunadamente. utilizando el comando man. que se encuentra en el capítulo uno sobre los comandos del usuario. la siguiente tabla resume algunos de los comandos de navegación más útiles al ver las páginas man con less. Al ver archivos (incluyendo las páginas man) en less. man passwd sólo presenta la primera página que encuentra. q es para salir. las llamadas de programación y temas en general. son la fuente tradicional de referencia e información de los sistemas Unix. para el usuario que está tratando de encontrar documentación sobre el formato del archivo /etc/passwd. como para el archivo /etc/passwd. se debe especificar explícitamente el capítulo como en man 5 passwd.

add. Las páginas info se utilizan principalmente para software desarrollador por the GNU project..Hesiod functions for retrieving passwd information hesiod_getpwnam (3) . Ya descubrió que man passwd sólo presenta la página man para el comando passwd.change the password of an LDAP entry lppasswd (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. Otra opción podriá haber sido utilizar la opción -a. or delete digest passwords pam_localuser (8) . Las páginas info preceden los días de los navegadores y los enlaces. así que utiliza man -k para realizar la búsqueda de la palabra clave en passwd.update a user's authentication tokens(s) passwd passwd [sslpasswd] saslpasswd smbpasswd smbpasswd .update password file in batch gpasswd (1) ...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.administer the /etc/group file hesiod_free_passwd [hesiod_getpwnam] (3) .y el hecho de que la información se encuentra en el capítulo 5 de las páginas man. 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.En Unix. tal como passwd(1) o passwd(5). [madonna@station madonna]$ man -k passwd . change. chpasswd (8) . 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) . 32 . Ahora madonna sabe cuál es el capítulo que necesita así que saca la página con man 5 passwd. para realizar búsquedas de palabras y -a. Los comandos mucho más complicados se encuentran documentados en las páginas "info" con hipervínculos. 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. la cual hace que manvea todas las páginas relevantes en orden.Hesiod functions for retrieving passwd information hesiod_getpwuid [hesiod_getpwnam] (3) . pero incluida en la salida se encuentra la referencia al archivo de la contraseña. (5) (1ssl) (8) (5) (8) password file .. Búsquedas de palabras clave y la opción -a Dos de las opciones más utilizadas con el comando man son -k. 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. para ver todas las "páginas relevantes" para un argumento.require users to be listed in /etc/passwd passwd (1) .Hesiod functions for retrieving passwd information htpasswd (1) .

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

incluyendo Nautilus File Manager y los applets de GNOME. presentamos yelp. yelp: El navegador de ayuda de Gnome Por último. en el CD de documentación en formato RPM o en los libros que vienen como parte del paquete. Inc presta. incluyendo información básica e instrucciones paso a paso para varias tareas.Red Hat Enterprise Linux incluye manuales de documentación desarrollados como parte de un servicio que Red Hat. yelp: El navegador de ayuda de GNOME 34 . gran parte de la información es útil y relevante. el navegador de ayuda de Gnome. 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). Aunque la documentación no es específica para la distribución Red Hat Enterprise Linux. 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. Figure 1. el cual se puede reiniciar seleccionando "Ayuda" del menú de aplicaciones. La documentación en este sitio sigue los formatos desarrollados en los primeros días de desarrollo de Linux. • • • • • • 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. Los siguientes manuales de documentación se encuentran disponibles en online. 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. 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. yelp proporciona la documentación básica para muchas de las aplicaciones gráficas especificas de GNOME.

puede que haya otros archivos que se quieran mantener en privado. Considere el siguiente listado largo del directorio /var/gigs. respectivamente. escritura (w). mejor. el grupo primario del usuario. escritura (w) y ejecución (x) Tres clases de acceso: (u)suario. éste se convierte en el propietario del archivo del usuario y por lo general. Por ejemplo. Los bits de permisos definen la forma como las tres clases diferentes de usuarios pueden usar el archivo: el propietario 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. Sin embargo. Entre más gente pueda leer este archivo. Grupos propietarios y Permisos Linux es un entorno multiusuario y como tal. otros querrán tener un archivo de lectura para todos en el sistema. y ejecución(x) 35 . alguien puede estar haciendo la lista de regalos para un cumpleaños próximo.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. y (o)tro Ver la propiedad y los permisos de archivo: ls -l Modificar la propiedad y permisos:chmod. Listado largo de directorio /var/gigs. En las siguientes secciones veremos cómo utilizar la primera columna para determinar los permisos del archivo. muy poca gente querrá que alguien le lea su diario.Propiedades de Archivos regulares y Permisos Conceptos clave • • • • • Los archivos tienen usuario propietario. Figure 1. indican los propietarios del archivo de usuario y grupo. Cuando un usuario crea un archivo. Por ejemplo. Se espera que algunos de estos archivos sean compartidos. y chown Discusión Usuarios propietarios. se convierte en el propietario del archivo de grupo. 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. Un usuario no puede cambiar el archivo del usuario propietario. de tal manera que muchas personas puedan verlos y modificarlos. mientras que la tercera y cuarta columnas. personas muy diferentes pueden estar trabajando al mismo tiempo con una serie de archivos sencillos. chgrp. (g)rupo propietario. y una serie de permisos. pero el usuario tiene algunas habilidades para cambiar el grupo propietario. Tres tipos de permisos: lectura (r). un grupo propietario y una serie de permisos otorgados. un grupo propietario. y permitirle a unos pocos modificarlo. Los tres tipos de permisos: lectura (r). los miembros del grupo que poseen el archivo y cualquier otro usuario.

Cada archivo tiene una serie de permisos de lectura(r). las siguientes tres. Una letra indica que el permiso correspondiente se ha activado. Para iniciar una aplicación o ejecutar un script. y (o)tro. se utilizan los otros permisos. mientras que si aparece un guión esto significa que no se tiene permiso. por lo general. Los permisos de un archivo se presentan. Los permisos de ejecución. el usuario elvis es también el 36 . el archivo que contenga la aplicación o el script deberá ser ejecutable. El propietario del archivo utiliza el primer grupo. De lo contrario. ¿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". Los otros usuarios sólo pueden leer el archivo (debido a que Red Hat Enterprise Linux utiliza el esquema del grupo privado de usuario. Alguien puede ver un archivo si tiene permisos de lectura. elvis posee el archivo y como propietario de archivo tiene permisos de escritura y de lectura. permiten que alguien utilice el archivo como un comando. un usuario puede distinguir entre tres tipos de permisos. Linux hace las siguientes preguntas en este orden: 1. con una serie de nueve caracteres. 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 del "grupo". 2. y las últimas tres el permiso del "otro". Table 1. (g)rupo propietario. y ejecución(X) para las tres clases diferentes de acceso de archivo. 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. tales como rwxr-xr-x. Figure 1. ¿El usuario es propietario del archivo? Si lo es entoces utiliza los permisos de usuario. 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. pero deberá tener permisos de escritura para modificarlo. Permisos para las tres clases de acceso de archivo Cuando alguien trata de acceder a un archivo. 3. escritura(w). Los archivos normales de datos no usan el tipo de permiso ejecutable.Al decidir quién puede tener acceso al archivo.

emperors hogan. Para no tomar a otros luchadores (wrestlers en inglés) por sorpresa. Hulk Hogan ha estado trabajando en routines para una función de lucha libre. es de propiedad del grupo de blondie.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@station blondie]$ cat /tmp/limerick Había una vez un peruano.old routines El arhivo diary de bob sólo lo puede leer y escribir Bob. Los permisos en lyrics tienen el mismo efecto de aquellos en lyrics. y sus respectivas membresías de grupo: user blondie elvis hogan bob grupos blondie. Elvis es el propietario del archivo gigs. pero cualquiera que pertenezca al grupo music puede leer o escribir en este archivo. ha dejado un archivo de sólo lectura para todos los miembros del grupo wrestle. 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. Cualquier músico. Como elvis tiene permisos para escribir. Observe que otros luchadores pueden leer el 37 . sin embargo. Como Red Hat implementa el esquema de grupo privado de l usuario. En contraste. 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. solo pueden leer el archivo. se da cuenta que no tiene los permisos apropiados.music elvis. que todo le importaba un pepino. blondie ha estado trabajando en el archivolyrics.old.wrestle. [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. Aunque el archivo tiene permiso de escritura. el cual no está aún listo para compartir.único miembro del grupo elvis). la usuaria blondie debería ser la única miembro del grupo blondie.physics.music. Cuando blondie trata de sobrescribir el archivo con su propio verso.

. cree el directorio /tmp/elvis. pero no pueden cambiar ninguna de las rutinas. los permisos son siempre rwxrwxrwx.txt . tendría los mismos permisos que: rwxr-xr-x. 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. 1. (compose and save your text) .txt.archivo. el cual es en realidad un enlace simbólico. Las decisiones de acceso "fracasan" de a cuerdo al archivo al que se refiere el enlace simbólico. [student@station student]$ cat /tmp/student/resolutions. 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. Por ejemplo.txt keep room clean don't eat all of the pop tarts use less proprietary software [student@station student]$ ls -l /tmp/student/resolutions. El que no sea miembro del grupo de wrestlers no tiene acceso al archivo. Enlaces simbólicos A pesar de que los enlaces simbólicos tienen permisos.. por ejemplo. [student@station student]$ nano /tmp/student/resolutions. Los permisos de lectura para mozilla. [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. [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.. Archivos ejecutables Los archivos que se deben interpretar como comandos necesitan tener permisos de ejecución. pero permite a los usuarios ver el contenido del archivo (a menudo binario)..txt 38 . Almacene el archivo en su directorio recién creado como /tmp/nombredeusuario/resolutions.txt -rw-rw-r-1 student student 77 Jan 15 07:12 /tmp/student/resolutions. Observe que el permiso de lectura no se necesita para ejecutar el comando. si su nombre de usuario es elvis. permiten a los usuarios observadores darse cuenta de que el comando es realmente un script de texto navegable. A este directorio se le llamará /tmp/nombre de usuario.

confirme si puede ver el archivo. con permisos predeterminados. Trate de añadir un nuevo punto a la lista. Como el usuario alterno.student_a Password: [student_a@station student_a]$ 3.txt: Permission denied Deliverables A title Question 1 content_view let_ 1. [student@station student]$ su . Puede reiniciar desde otra consola virtual. 39 . ¿Por qué no puede modificar el archivo como el usuario alterno? [student_a@station student_a]$ cat /tmp/student/resolutions. Conviértase en uno de sus usuarios de cuenta alterna.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.2. Un archivo recién creado titulado /tmp/nombredeusuario/resolutions.txt -bash: /tmp/student/resolutions.al usuario alterno. desde una conexión de red o sencillamente con ejecutar su .txt.

" > blue_suede echo "Two for the snow. go. menos. it's one for the money. al permiso de archivo se le conoce como el "modo" del archivo. en Linux. Usualmente. por defecto el archivo puede ser modificado por sólo una persona. y tres clases de acceso ((u)suario. Primero crearía el archivo y para no permitir a otros la lectura de éste." >> blue_suede echo "Now go. utilizando una vez más chmod. seguidas por los signos: más. El primer argumento está compuesto por una secuencia de letras que especifican las clases de acceso." > blue_suede echo "Two for the show." >> blue_suede echo "Three to get ready. y (o)tro. el comando ls -l muestra que otros ya no lo pueden leer. escritura(w) y ejecución(x). Discussion En la lección anterior. después del comando chmod. necesitaría utilizar el comando chmod. aprendimos que los archivos tienen permisos de lectura (r). [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. El nombre chmod es un atajo para cambiarmodo. Sin embargo. cuando alguien crea un archivo." >> 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. [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 ejemplo. Supongamos que elvis estuviera trabajando en la letra de una nueva canción y no quisiera que nadie la leyera antes de haberla terminado. Los permisos son administrados por el comando chmod. o igual y por otra secuencia de letras que 40 ." >> 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. it's one for the honey. cat. los cuales definen la manera en que se puede utilizar el archivo. pero puede ser leíble por todos en el sistema.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. Cuando elvis haya decidido la letra de la canción entonces puede restaurar la lectura del archivo para otros. (g)rupo. el archivo tenía permiso de lectura para todos.

con los permisos predeterminados de rw-rw-r--.especifican el tipo de permiso a cambiar. Cualquier argumento subsecuente especifica una lista de archivos para aplicar los cambios. 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 . 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. 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. [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. La sintaxis se resume en la siguiente tabla: Figure 1.

Observe que los permisos en un archivo creado recientemente. Cree el directorio /tmp/nombredeusuario. Asuma que quiere mantener sus propósitos en secreto. Puede utilizar un editor de texto.txt -rw-rw---1 student student 77 Jan 16 17:52 /tmp/student/resolutions.txt: Permiso negado 5.txt -rw-rw-r-1 student student 77 Jan 16 17:52 /tmp/student/resolutions.txt [student@station student]$ ls -l /tmp/student/resolutions. [student@station student]$ su . su archivo del ejercicio anterior si todavía está disponible.txt 4. [student@station student]$ cat > /tmp/student/resolutions. o simplemente cree uno nuevo como en el siguiente ejemplo.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. confirme que otros usuarios en el sistema no pueden leer sus propósitos.txt. ¿En qué difiere esto del ejercicio de la lección anterior? Deliverables 42 .student_a Password: [student_a@station student_a]$ cat /tmp/student/resolutions. 2.txt 3. cree el directorio /tmp/elvis. [student@station student]$ chmod o-r /tmp/student/resolutions. le permiten a todos los usuarios en el sistema leer el archivo. Por ejemplo. si su nombre de usuario es elvis. Tiempo esperado: 10 minutos 1. Al utilizar una de las cuentas alternas.txt cat: /tmp/student/resolutions. Modifique los permisos de archivos de tal forma que los otros no tengan acceso de lectura.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. si no existe todavía. Cree una lista sencilla de propósitos en el archivo /tmp/nombredeusuario/resolutions. ¿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.

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

el propietario del archivo del grupo es establecido como el grupo primario del creador. chgrp GROUP ARCHIVO. ¿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. En el cuaderno anterior.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. Primero. 3.302(wrestle). ventura). Para repasar. su grupo privado no es útil para trabajar en colaboración. Cambiar el propietario del archivo de grupo al grupo governor utilizando el comando chgrp. En Red Hat Enterprise Linux. 2. y el usuario debe ser un miembro del nuevo grupo de propietarios del archivo. cada usuario pertenece a un grupo primario y también a un número de grupos secundarios. el usuario ventura es un miembro del grupo wrestler y del grupo governor (aparte de su grupo privado. El propietario del grupo sólo lo puede cambiar el usuario dueño del archivo. En el siguiente ejemplo.. debe cambiar el propietario del archivo de grupo. vimos cómo los usuarios de Linux pertenecen a una colección de grupos. [ventura@station ventura]$ id uid=2306(ventura) gid=2308(ventura) groups=2308(ventura). mientras que los argumentos subsecuentes listan los archivos cuyo propietario de grupo se va a cambiar. pero nadie más lo puede hacer. usted hace uso del grupo propietario de archivo y de los permisos de grupo. 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. debe realizar los siguientes pasos: 1. éste sería usualmente el grupo privado del creador. Cuando se crea un archivo nuevo. Para compartir el archivo.txt [ventura@station ventura]$ ls -l taxplan. Esto se realiza con el comando llamadochgrp. Debido a que usted es el único miembro. Cambio de propietario de ARCHIVO(s) a GRUPO El primer argumento especifica el nuevo grupo propietario de archivo. Cambiar permisos en el archivo desde los permisos predeterminados rw-rw-r-.a rw-r----utilizando el comando chmod.txt 44 .305(governor) [ventura@station ventura]$ echo "Raise tax on oatmeal" > taxplan.. Para este fin. 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. Crear el archivo.

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

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

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

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

Table 1.dat'? y rm: cannot remove `/tmp/census/iberia. él no puede agregar ni suprimir nuevos archivos. él puede ver.dat -rw-rw-r-1 nero nero 42 Jan 16 15:48 gaul. [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. Observe que julius puede navegar los directorios y los archivos dentro de los directorios. julius decide que le gustaría hojear la información que tiene nero sobre el censo.dat [julius@station julius]$ rm /tmp/census/iberia. 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. pero no modificar el contenido de los archivos. -rw-rw-r-1 nero nero 42 Jan 16 15:48 egypt. Cualquiera puede buscar archivos dentro del directorio. ¿Cómo se manejan los directorios recién creados? Estudie el caso de nero. Por ejemplo. Todos pueden listar los archivos dentro del directorio.dat -rw-rw-r-1 nero nero 42 Jan 16 15:47 iberia. El decide crear un directorio llamado /tmp/censuspara guardar todos los datos. [julius@station julius]$ ls -al /tmp/census/ total 20 drwxrwxr-x 2 nero nero 4096 Jan 16 15:48 . quien está recolectando información del censo de varias provincias. 3. Solo el propietario de directorio (o miembros de un grupo propietario) puede añadir o borrar archivos dentro del directorio.dat rm: remove write-protected regular file `/tmp/census/iberia.. pero debido a los permisos por defecto de un directorio. A causa de los permisos predeterminados de archivo. Estos permisos tienen las siguientes implicaciones: 1.dat': Permission denied 49 . pero sólo el usuario y el grupo propietario del archivo pueden modificarlos. drwxrwxrwt 23 root root 4096 Jan 16 15:45 . 2.

nero crea el directorio ~/puby copia en él la información del censo desde /tmp/census. Usualmente. hay sólo dos lugares en donde los usuarios pueden crear archivos. nero escoge crear un directorio censusdentro de /tmp. sólo el usuario propietario de un directorio de inicio tiene permisos de buscar.[julius@station julius]$ echo "110 CE 42" > /tmp/census/thrace.dat -bash: /tmp/census/gaul. Convencionalmente. [nero@station nero]$ mkdir pub [nero@station nero]$ cp /tmp/census/* pub 50 . Por defecto. se llama pub. Primero. Con el fin de crear un sitio accesible al público permanente para sus datos del censo.. éste se borra del sistema. los directorios de inicio están "protegidos". el directorio /tmp y ~ (el directorio de inicio del usuario). Sin embargo. Nero necesita buscar un sitio mejor. en Red Hat Enterprise Linux. el directorio /tmp es "barrido. En el primer ejemplo. en Red HatEnterprise Linux. Si en 10 días no se ha tenido acceso a un archivo dentro de /tmp. un directorio de inicio no sigue los permisos predeterminados. un subdirectorio como tal en Linux. no es tan fácil como crear un directorio leible (r) o ejecutable (x) por todo el mundo.dat 110 CE 45430 120 CE 53200 130 CE 55820 [julius@station julius]$ echo "140 CE 583420" >> /tmp/census/gaul..dat -bash: /tmp/census/thrace.dat: No such file or directory [julius@station julius]$ cat /tmp/census/gaul.dat: Permission denied Directorios de inicio En Red Hat Enterprise Linux. 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. [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. nero escoge crear un subdirectorio público dentro de su directorio de inicio. compartir archivos desde el directorio de inicio del usuario. [nero@station drwx-----[nero@station total 120 drwx-----drwx-----drwx-----drwx-----. Como las siguientes secuencias lo mostrarán.".

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

pero no lee(r) en su directorio de inicio. tiene ahora permisos de rwx-----x. Por lo tanto. Por ejemplo. ésta no es infalible. no obstante.dat gaul. Suponga que nero le ha dado a otros permiso de ejecución (x) a su directorio de inicio (como en el ejemplo anterior). los usuarios usualmente crean un directorio llamado ~/mail. 4096 Jan 20 16:41 . Al permitir a otros ejecutar (x). nero le dijo que éste estaba allí). 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. julius no puede navegar el contenido de un directorio con el comando ls. y más tarde crea un directorio ~/mail. [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. Aunque el no añadir permisos de lectura (r) al directorio de inicio brinda alguna protección contra otros usuarios que estén navegando. Debido a que otros usuarios no pueden usar el comando ls para descubrir el contenido de su directorio de inicio. Si elvis fuera a adivinar si dicho directorio existe. los permisos por defecto en ~nero/maille permitirían navegar sus contenidos.110 CE 45430 120 CE 53200 130 CE 55820 [julius@station julius]$ ls /home/nero/pub egypt. por ejemplo. otros usuarios deben saber que un directorio existe dentro del directorio de inicio para tener acceso a éste. Otros usuarios pueden aún "adivinar" el contenido de un directorio del cuál tienen permisos para ejecutar (x) pero no de lectura (r). permitiéndole a julius sólo permisos de ejecución(x). julius puede obtenerlo.. 2027 Jan 20 16:41 sent 52 . /home/nero. el directorio de inicio de nero. si julius ya sabe que un archivo está en el directorio (porque. para almacenar mensajes. el ejemplo anterior). 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 .dat En contraste.dat iberia.

que se puedan buscar y listar sólo para los miembros de los grupos music ywrestle. 2. ~/pub. respectivamente: ~/pub/music y ~/pub/wrestle. [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. Por defecto. pero no le gustaría que los músicos vieran la información de los luchadores y vice versa. aparte de su grupo privado. en su directorio de inicio.. 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. debe considerar los permisos que hay en los subdirectorios recién creados. Además. ¿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. 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. Cree dos subdirectorios de ~/pub. Usted preferiría que un grupo ni siquiera se diera cuenta de la existencia de otro directorio de grupo. music y wrestle.. también será capaz de navegar un subdirectorio. si alguien puede adivinar el nombre del directorio. mientras que su tercera cuenta alterna debería ser un miembro del grupo music. Permita que otros tengan acceso a archivos en su directorio de inicio otorgándoles permisos de "búsqueda". usted quisiera compartir información con otros músicos y luchadores.[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 . Cree un sudirectorio públicamente fácil de buscar. 3. pero que no se pueda listar. Adopte el siguiente plan: 1. 53 .

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

[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. que sólo el propietario del directorio puede navegar. Un directorio llamado~/memos. de una navegación no intencionada. 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). 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. Cree un archivo dentro del directorio y use una de las cuentas alternas para confirmar que otros usuarios no puedan acceder al archivo. Discussion ¿Por qué una sintaxis diferente? 55 . [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. 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. Estos ejercicios asumen que otros ya tienen permisos de ejecución (x) en su directorio de inicio.

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

En Unix. los administradores experimentados de Linux a menudo se referirán a un permiso de archivo de "644" o de un directorio de "755". un administrador de sistema podría decir que los "Directorios se crean con un modo predeterminado de 755". Al utilizar el comando chmod. Los comandos chmod y chown tienen esta opción. elvis utilizará la notación octal. este término se utiliza para referirse a los permisos de archivo de notación octal.Una vez aprendida. Por ejemplo.. la notación octal brinda una forma rápida de referirse a los permisos de archivo. Por ejemplo.. 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. 57 ." siempre se refiere al directorio actual en este caso /home/elvis/drafts. ¿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). ". 4096 Feb 14 10:15 . Quisiera que los miembros del grupo music tuvieran libre acceso al directorio y que otros usuarios no. 18 Feb 14 10:16 lyrics En este uso del comandochmod." siempre se refiere al directorio padre actual en este caso/home/elvis. Recuerde que ". [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 . al estado de los permisos de archivo se les conoce como el modo de un archivo. En particular.

otros no. Ejercicios en línea 58 . Estableció el modo de cada archivo como 660 (incluyendo el directorio unlikely). einstein podría utlilizar el comando find para buscar de modo recursivo. por lo general.published/ | `-. [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/*.time_travel El usuario einstein ahora decide cambiar los permisos en todos sus archivos dentro de su directorio sin publicar. mientras que. algunos ya han sido publicados. (Con el fin de obtener el resultado deseado.photoelectric_effect `-. Infortunadamente. Luego trató de ir en forma recursiva al directorio unlikely. Dicho comando find se presentará en la siguiente sección).eismcsquared |-. el comando chmod R no distingue entre archivos y directorios. los archivos regulares no.unpublished/ |-. Con el fin de ahorrar tiempo. el comando chmod hizo lo que debe hacer.Mal uso de la notación octal El usuario einstein tiene la siguiente serie de artículos. papers/ |-.relativity `-. einstein decide utilizar la forma recursiva del comando chmod. los directorios deben tener establecido el permiso de ejecutar (x). pero como el directorio ahora tiene el modo 660. Todos los archivos y direcciones tienen permisos predeterminados. para que otros usuarios no puedan leerlos.unlikely/ `-. Por ejemplo. 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".

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

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

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

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

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

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

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

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

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

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

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

el comando stat etiqueta la longitud de un "tamaño" de un archivo. lista el contenido de un directorio.Opción -c. --filesystem -t. el grupo propietario y los permisos. mtime. --format=FORMAT -f. --directorio Efecto Incluye archivos que empiezan con . Volveremos a ver el comando ls. un archivo regular. y ctime para el archivo.000000000 -0400 Change: 2002-09-11 11:38:09.... Los atime. en este caso. El número de bloques del sistema de archivos que el archivo consume. Muestra la información sobre el sistema de archivos al que el archivo pertenece. 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 El nombre del archivo.. Lista los archivos FILE . [1] El tipo de archivo. Muestra salida en formato terso (una línea) madonna examina la información del inodo en el En el siguiente ejemplo.. 70 .. Si ARCHIVO es un directorio. 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). El usuario propietario del archivo. Para mayor información. como se explicó anteriormente. [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. vea la página del manual stat (1). Aparentemente. De modo poco práctico para la terminología presentada anteriormente. archivo/usr/games/fortune.] ARCHIVO. Opción -a.. lista información acerca del directorio mismo y no sobre el contenido del directorio. --all -d. el comando ls suele hacer un mejor trabajo resumiendo la información para varios archivos. ls [OPCIÓN. --terse Efecto Sólo muestra la información solicitada usando el formato especificado. sino en la dentry. Esta es la información que no está realmente almacenada en el inodo. esta vez para discutir algunas de las opciones importantes para mostrar la información del inodo. el comando stat está usando un tamaño de bloque de 2 kilobytes.000000000 -0400 Modify: 2002-08-22 04:14:02. o si es un directorio. en lugar del archivo.

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

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

log boot. Le interesa saber acerca de la actividad reciente en el sistema. Interesado en saber cuáles archivos de registro no se están utilizando. ordenados de acuerdo con la última modificación El usuario prince está explorando los archivos de registro del sistema en el directorio /var/log.0.log..1 boot. 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 Con 74 archivos para examinar. maillog y messages como los archivos modificados más recientemente.4 ccm-core-cms cron cron.log.. [prince@station total 16296 -rw------1 -rw------1 -rw------1 -rw------1 -rw------1 drwxr-xr-x 2 -rw------1 -rw------1 -rw------1 . 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. prince rápidamente se cansa de revisar los archivos recientes. por eso quiere saber cuáles archivos han sido accedidos recientemente.3 boot.log..log.1 cron. especificando que la salida se debería ordenar por mtime con la opción -t..2 boot. 73 . agregándole la opción -r. Hace un listado largo del directorio y comienza a examinar las últimas modificaciones reportadas de los archivos.log Ahora elvis puede leer fácilmente los archivos cron. Decide dejarle este trabajo dispendioso al comando ls. [prince@station total 16296 -rw------1 -rw------1 -rw------1 -rw-rw-r-1 -rw-r--r-1 -rw-r--r-1 . prince repite el comando.[madonna@station madonna]$ ls -iF /usr/games/ 540838 chromium/ 540564 fortune* 312180 Maelstrom/ Listar archivos..

[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 .log xorg. [blondie@station blondie]$ ls -F /etc/X11/ applnk/ rstart/ xorg.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.conf xinit xsm Dado que ella no tiene una terminal en color.conf.conf.setup. [blondie@station blondie]$ ls /etc/X11/ applnk prefdm sysconfig xorg. Especificaciones 74 . y los archivos regulares con permisos ejecutables (lo que implica que son comandos que se deben ejecutar) terminan en un *.conf.README-OBSOLETE xserver lbxproxy starthere xorg.1.log vsftpd.log.old ccm-core-cms vbox pgsql samba xorg..conf.conf.works Xresources gdm serverconfig xdm XftConfig. Agrega la opción -F para representar la salida. los diversos archivos se representan por tipo. 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.backup xkb desktop-menus proxymngr twm xorg.wbx Xmodmap fs rstart X xorg..wbx gdm/ sysconfig/ xorg.conf.conf desktop-menus/ serverconfig/ xorg. tiene dificultad para distinguir entre un archivo regular y un directorio.works lbxproxy/ twm/ XftConfig.README-OBSOLETE prefdm* X@ xinit/ proxymngr/ xdm/ xkb@ Xmodmap Xresources xserver/ xsm/ Ahora. los enlaces simbólicos en un @.4 Representar listados con ls -F La usuaria blondie está explorando el directorio /etc/X11.log.backup fs/ starthere/ xorg. Los directorios terminan en un /.

conf yp. Un archivo llamado etc.reversed que contiene un listado largo de todos los archivos en el directorio /etc. (observe que está pidiendo el inodo del directorio mismo). con el primer archivo modificado más recientemente en primer lugar. aunque los detalles (tal como la última modificación) pueden diferir. El archivo modificado más reciéntemente debería estar en la última línea de la lista del archivo. 3.bytime que contiene un listado largo de todos los archivos en el 2. El archivo debe contener un 2. ordenado de acuerdo con la última modificación. Cree un archivo en su directorio de inicio llamado etc.bytime.bytime.db resolv. ordenado de acuerdo con la última modificación. El archivo debe contener un listado largo del directorio /etc. Final del formulario Sugerencias Las primeras líneas del archivo etc. Cree un archivo llamado etc.inum que contiene el número de inodo del archivo del directorio de archivo /etc como su único símbolo.conf ioctl. con el último archivo más reciéntemente modificado.inum que contenga el número de inodo del directorio /etc como su único símbolo. en primer lugar.reversed.bytime deberían verse de la siguiente manera. ordenado a la inversa de acuerdo con la última modificación. Un archivo llamado etc. Cree un archivo en su directorio de inicio llamado etc. 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. directorio /etc. Deliverables A title Question 1 1. El archivo modificado más reciéntemente debería estar en la primera línea del archivo. 3. Un archivo llamado etc. ordenado de acuerdo con la última modificación. listado largo del directorio /etc.d adjtime 75 .1.bytime.save lvmtab lvmtab.

76 . Cuando elvis edita /home/elvis/music/duet. cada vez que hacen un cambio y mantener sus copias individuales sincronizadas. [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.txt. Un método es crear un enlace duro. es el mismo archivo bajo dos nombres.txt. Los enlaces duros asignan múltiples dentries (nombres de archivos) a un inodo único. Ella hace que elvis haga lo mismo. consta de dentry. los usuarios de Linux quieren que el mismo archivo exista en dos lugares diferentes o que tengan dos nombres diferentes. el cual es grupo propietario con permiso de escritura de los miembros del grupo music. 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. En lugar de copiar un archivo actualizado de cada uno.txt [blondie@station blondie]$ chgrp music music/duet. Discussion El caso de enlaces duros En ocasiones. deciden crear un enlace duro. ejecuta chgrp al grupo music y usa el comando lnpara enlazar el archivo en el directorio de elvis. Suponga que elvis y blondie están colaborando en un dueto. Los enlaces blandos son inodos distintos que hacen referencia a otros nombres de archivos. Luego crea el archivo ~/music/duet.Enlaces duros y blandos Conceptos clave • • • El comando ln crea dos tipos distintos de enlaces.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.txt. como se ilustra a continuación.txt /home/elvis/music/duet. Blondie ha establecido un directorio de colaboración llamado ~/music.txt [blondie@station blondie]$ ln music/duet. [elvis@station elvis]$ echo "who's there?" >> music/duet.txt [blondie@station blondie]$ cat music/duet. inodo y datos.txt está editando también el archivo /home/blondie/music/duet.txt Debido a que el archivo fue enlazado y no copiado.

[blondie@station blondie]$ ls -l music/duet.txt -rw-rw-r-2 blondie music 25 Jul 13 06:08 music/duet. dos dentries hacen referencia al inodo y el archivo tiene un conteo de enlace 2. la cual reporta el conteo de enlace para el archivo. Sin embargo. el archivo es todavía un sólo inodo. Archivo regular Después de usar el comando ln para crear el enlace. Figure 2. ¿qué sucede al archivo /home/elvis/music/ duet.txt 77 . pero ahora hay dos dentries refiriéndose a éste.txt. 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). Enlace duro Cuando blondie ejecuta el comando ls -l. Si blondie cambia los permisos en el archivo /home/blondie/music/duet. examina detenidamente en la segunda columna.Figure 1.txt Hasta ahora.txt? [blondie@station blondie]$ chmod o-r music/duet.

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

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

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

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

link_a. los enlaces recursivos no son tan comunes como los enlaces colgantes. los enlaces simbólicos son susceptibles a los enlaces recursivos. En el uso diario.Enlaces recursivos En segundo lugar. Enlaces recursivos Cuando madonna trata de leer el archivo link_a. que hagan referencia a un archivo llamado link_b. Afortunadamente. 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 apunta al enlace _a para enlazar_b. y alguien casi que tiene que buscarlos para poder crearlos. ylink_b. ¿Qué sucede si alguien tiene que estar buscándolos para crearlos? ¿Qué ocurre si madonna crea dos enlaces simbólicos. el kernel solo 82 . el cual hace referencia al archivo link_a. el cual luego vuelve a apuntar al enlace _a y así sucesivamente.

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

Dock. blondie tiene un archivo llamado rhyme y un directorio llamado stuff. aunque hay dos nombres para el archivo (dos dentries) hay un sólo inodo. [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. 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. Jul 18 15:29 hard_link Jul 18 15:29 rhyme Jul 18 15:34 stuff Dock. el kernel suele referirse al archivo más por el número de inodo que por nombre de archivo. el número de inodos que se puede utilizar para identificar un archivo. Dickory. Three mice ran up a clock. Si cambiamos los permisos en rhyme. ¿Por qué? los dos nombres de archivo se refieren al mismo inodo. [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. Puesto que el inodo hace referencia al contenido de un archivo. Ella hace un listado largo con el comando ls -li. [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.Ejemplos Trabajar con enlaces duros En su directorio de inicio. [blondie@station blondie]$ echo "Three mice ran up [blondie@station blondie]$ cat rhyme Hickory. observe que el número de inodos tanto para rhyme como para hard_link es 246085. los permisos en hard_link también cambiarán." > rhyme a clock. Dickory. lo que implica que. también comparten los mismos datos. Además. 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." >> hard_link 84 .

: total 8 246085 -rw-rw---2 blondie blondie 542526 drwxrwxr-x 2 blondie blondie ./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]$ echo "Hickory. Lo que implica que ahora hay dos dentries y dos inodos. [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.Mover o incluso suprimir el archivo original no tiene efecto en el archivo de enlace. los archivos se comportan de una manera idéntica al caso de los enlaces duros. pero utiliza un enlace blando en lugar de uno duro. Dickory. [blondie@station blondie]$ mv rhyme stuff [blondie@station blondie]$ ls -Rli . En cambio. Dickory. Dock. Comienza con una configuración idéntica a la del ejemplo anterior. blondie queda con el enlace colgante. Cuando se hace referencia. 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. Three mice ran up a clock. el enlace blando no puede sobrevivir si se mueve o suprime el archivo original. A diferencia del enlace duro. Dock." >> soft_link [blondie@station blondie]$ cat rhyme Hickory. sin embargo." > rhyme [blondie@station blondie]$ echo "Three mice ran up a clock. [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. 85 .

orig de tal manera que el enlace blando que acaba de crear sea ahora un enlace colgante. [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.harda Cree un enlace duro para el archivo cal.hardb Cree un enlace blando para el archivo cal. dependiendo de la ubicación de su directorio de inicio. 6. 7./. 5. 86 .. Cree un enlace duro para el archivo cal. Cree un enlace blando para el directorio .orig llamadocal.orig llamado cal.: total 4 250186 lrwxrwxrwx 1 blondie blondie 542526 drwxrwxr-x 2 blondie blondie .[blondie@station blondie]$ ls -liR .softa Suprima el archivo cal.. texto del mes actual (como el comando cal lo produce). usted podría necesitar agregar o suprimir algunas referencias .orig llamadocal.orig en su directorio de inicio que contenga un calendario de 2. 1. (observe que. 4. Los enlaces duros sólo se pueden utilizar con archivos ordinarios. 3. usando una referencia relativa. Incluya suficientes para que el enlace blando sea una verdadera referencia relativa para el directorio /usr/share/doc). Crear un archivo llamado cal. Cree un enlace blando para el directorio /usr/share/doc llamado docabs mediante una referencia absoluta. desde el archivo siguiente. Especificaciones Todos los archivos se deben crear en su directorio de inicio../usr/share/doc llamado docrel. Ejercicios en línea Crear y administrar listas Lab Exercise Objetivo: Crear y administrar enlaces duros y blandosEstimated Time: 10 mins./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.

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

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

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

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

como se muestra en la segunda columna del comando ls -l. 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. y otra como su padre (con un nombre de directorio real. tal como report).. su subdirectorio html. 2. que se encuentra en el directorio mismo. Cuadros dentry para los directorios report. La entrada . El siguiente diagrama sirve de ilustración de las dentries que se encuentran en el directorio report . fue siempre 2 o más. la cual hace referencia al mismo inodo. 91 . html text Cada archivo en el listado es un directorio y el conteo de enlaces (aquí la tercera columna. ve los cuatro archivos en el primer cuadro."). ¿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 ". . 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 . Cuando prince hace un listado largo del directorioreport. 1. una por sí mismos (como el "."). report/html y report/html/figures. Figure 1.Anteriormente vimos que el conteo de enlaces de directorios. Esto se deduce naturalmente del hecho que cada directorio se referencia al menos dos veces. y su subdirectorio figures).

Respondiendo por si mismo (al cual llama ". . su padre (al cual llama"report"). Nodos de dispositivo Hemos analizado tres tipos de "criaturas" que pueden existir en el sistema de archivos de Linux.. Cuando el usuario escribe en el nodo del dispositivo.". el nodo del dispositivo transfiere la información al controlador de dispositivo apropiado en el kernel.3.. hemos hallado todos nuestros enlaces en el inodo 592253 reportados por el comando ls -l... En su lugar. Se hace referencia a los directorios por un enlace adicional para cada subdirectorio. Del mismo modo. discutiremos los dos últimos tipos de entradas del sistema de archivos (que se tratarán en este curso).. es decir los archivos regulares. Cada directorio contiene al menos dos enlaces. se lee desde ese nodo de dispositivo asociado con el dispositivo justo como si leyera desde un archivo. chap1. los directorios y los enlaces simbólicos. En esta sección. En el siguiente listado. y sus dos subdirectorios (a los cuales llama ". los nodos de dispositivo viven dentro de un directorio llamado /dev. 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. los cuales hacen referencia al directorio como ".". nodos de dispositivo de bloque y de caracter.. el directorio report/html tiene un conteo de enlaces de 3. uno desde su propia entrada de directorio ". los cuales asignan los nombres de archivo a los inodos.html chap2. 92 .html figures En resumen. la cual hace referencia al inodo 592253 como su directorio padre. y otro desde su entrada padre con el nombre convencional del directorio. Por convención. A continuación el usuario elvis hace un listado largo de archivos en el directorio /dev. pero no contienen datos de la misma forma que los archivos regulares o incluso los directorios y enlaces simbólicos."). ¿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 . Nodos de dispositivos de bloque y de caracter Los nodos de dispositivos existen en el sistema de archivos. El subdirectorio html contiene una entrada llamada. 4. el subdirectorio text (no descrito) contiene una entrada llamada ."). Cuando un usuario desea recopilar información desde un dispositivo particular. los directorios son simplemente colecciones de dentries para los archivos que se dice que están en el directorio.

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

escriba su salida en mi terminal. La salida del comando fue redirigida al nodo del dispositivo de la primera consola virtual. ¿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. [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. Red Hat Enterprise Linux release 3 (Taroon) Kernel 2. segundo." Al cambiar a la segunda consola virtual. es decir. pareció no haber redirigido nada en absoluto. [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. 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. mostrar toda la información escrita en la pantalla. Aquí es donde la salida del comando cal estaba escrita en la terminal. no se pudo redirigir. a un archivo llamado /tmp/cal.20-4ES on an i686 station login: elvis Password: Last login: Mon May 14 16:55:22 on tty1 You have new mail. y redirigirá tres veces la salida del comando cal. /dev/tty1. Observe la falta de 94 . al nodo de dispositivo /dev/tty2. el cual hizo lo que se "suponía que tenía que hacer". elvis halla los siguientes caracteres en la pantalla.En el siguiente ejemplo. mostrarla en la segunda consola virtual. elvis. Redirigir la salida de comando a / dev/tty1 es como decir "en lugar de escribir su salida en mi terminal.4. La segunda forma de redirigir amerita un poco más de atención. Aparentemente. es decir. pero sí lo hizo. la salida simplemente se redirige al archivo recién creado cal. lo cual hizo lo que se "suponía que debía hacer". primero. ¿Por qué? Cuando elvis ejecuta comandos interactivos sin redirigir. está trabajando desde la consola virtual número 1. utilizando la secuencia de teclas CTRL-ALT-F2. a un nodo de dispositivo /dev/tty1 y por último.

pero observe que bash shell no ofrece un intérprete de comandos fresco. 1 crw--w---1 elvis tty 4. 3 crw------1 root root 4. Los procesos que ellos ejecutan pueden luego leer o escribir salida en la terminal. 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. 2 crw--w---1 prince tty 4. 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. 4 crw------1 root root 4. los permisos en los nodos de dispositivos no permiten a los usuarios estándares acceder a los dispositivos directamente.espacios separando la salida. Hay dos excepciones. 1 crw--w---1 elvis tty 4. la salida del comando cal disminuyó. sino algo extraño que elvis le pidió hacer al controlador del dispositivo. 5 crw------1 root root 4. 4 crw------1 root root 4. Al leer o escribir desde el nodo de dispositivo aplica solo como si leyera o escribiera a un archivo regular. el usuario elvis (quien ha iniciado sesión en las primeras dos consolas virtuales. Aún está esperando que elvis entre el comando. 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. ¿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. grupo propietarios y una colección de permisos. 2 crw------1 root root 4. la shell bash ni siquiera se dio cuenta que los caracteres fueron escritos en la terminal. seguridad y usuario de consola Continuando con lo anterior. Por último. 5 crw------1 root root 4. 95 . es decir. Esta no es una ocurrencia natural con buen formato. En general. 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. 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. no posee el dispositivo. Permisos de dispositivo. De hecho. administrando los propietarios de archivo y los permisos de archivo. 3 crw------1 root root 4. se obtiene propiedad del nodo de dispositivo que controla su terminal. también tienen usuarios propietarios.

¿sería razonable usar disquetes? En resumen. [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 . Pueden tratar toda las salidas y las entradas como si estuvieran simplemente leyendo o escribiendo un archivo. -Si el usuario no está en la máquina. • • Al escribir programas. Linux (y UNIX) utilizan los nodos de dispositivo para permitir a los usuarios el acceso a dispositivos en el sistema. 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. 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. las propiedades para estos dispositivos son restauradas a las predeterminadas del sistema. Nada de esto sucede si un usuario inicia sesión en una red.Terminales Puesto que los usuarios necesitan comunicarse con el sistema. sino por desde dónde se ha iniciado la sesion. Está interesado en interpretar el conteo de enlaces del subdirectorio como aparece en la segunda columna. 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. ellos (o más exactamente. "Usuarios de Consola" En Red Hat Enterprise Linux. La administración de dispositivos en un sistema de Linux puede ser un tema extenso y complejo. Es decir. A manera de introducción. tales como disquetes y tarjetas de sonido. por ejemplo. se considera un "usuario de consola". 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. cuando un usuario inicia sesión en una consola virtual o en un servidor gráfico X. Ejemplos Interpretación de conteos de enlaces de directorio El usuario elvis hace un listado largo del directorio /var/spool.

concluye que estaba en lo cierto (hay 15 subdirectorios). elvis concluye que el directoriopostfix contiene 15 subdirectorios. 1 enlace para la entrada . dentro de 15 subdirectorios. [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 . que se encuentra dentro de postfix (no se muestra) y 15 para las entradas . 1 enlace como se muestra arriba para la entrada postfix .Al notar que tiene un conteo de enlaces de 17.. Al examinar un listado largo del directorio/var/spool/postfix.

Los sistemas de archivos se crean con algunas variantes del comando mkfs. A continuación elvis ha realizado un listado largo de varios nodos de dispositivo que aparecen en el cuadro anterior. El sistema de archivos predetermiando de Red Hat Enterprise Linux es el sistema de archivos ext3. Por lo general. 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. 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. El siguiente cuadro lista los nombres de archivos de los nodos de dispositivos comunes y los discos con los cuales están asociados. El comando df se utiliza para reportar el uso del sistema de archivos y mapea los dispositivos actualmente montados. los usuarios estándar no suelen tener permisos de acceso directo. 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 . Ese directorio se denomina punto de montaje. 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. El comando umount se utiliza para desmontar un sistema de archivos de un punto de montaje. los discos se formatean con un sistema de archivos y se montan en un directorio.Discos. Table 1.

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

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

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

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

/prince y otros más. dicho directorio se denomina punto de montaje. La partición /dev/hda4 también se ha formateado con el sistema de archivos y su directorio raíz contiene los directorios /blondie. como se muestra a continuación. /home y otros directorios esperados. Este montaje suele presentarse como parte del proceso de arranque del sistema. el cual ya existía en el sistema de archivos de la partición raíz.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.mode=620) none on /dev/shm type tmpfs (rw) 103 . dando la apariencia que el directorio /home contiene los subdirectorios blondie. 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. En el siguiente diagrama. todas las particiones se combinan correctamente dentro de una aparente única estructura de directorio. todas las referencias al directorio /home se asignan de un modo transparente al directorio raíz del sistema de archivos en /dev/hda4. /tmp. Montaje de un sistema de archivos Ahora. Con el fin de hacer uso del sistema de archivos. elvis. etc. [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. Figure 1.gid=5. Cuando el sistema de archivos se monta sobre un directorio de esta manera. éste se monta en el directorio /home. [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. el sistema de archivos en la partición /dev/hda2 está siendo utilizado como la partición raíz y contiene los directorios /etc.

.. no a todo el árbol de directorios. 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. df [OPCIÓN. ¿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. Opción -a. el cual significa "disk free". --leíble humanos -i. Estos son sistemas de archivos virtuales. el comando mount devuelve una lista de puntos de montaje. es decir la partición /dev/hdb2. Sin embargo.. ¿para que molestarse incluso por hablar de esto? Por ahora. relacionados con el sistema de archivos subyacente. 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. --print-type por Efecto Muestra todos los sistemas de archivos. Una partición en un segundo disco. esto no afecta al directorio /tmp porque éste pertenece a otro sistema de archivos. está montada en un directorio no estándar denominado /data. el sistema de archivos en /dev/hda2 se está utilizando como partición raíz. En Unix. que pueden empeorar. sólo afecta a la parte de la estructura del directorio bajo su punto de montaje. 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. los cuales son implementados por el kernel directamente y no existen en ningún dispositivo físico. el sistema de archivos en / dev/hda1 está montado en el directorio /boot y /dev/hda4 está montado en /home. daremos dos razones. A las particiones se les puede acabar el espacio.] [ARCHIVO. incluyendo aquellos de tamaño 0.] Muestra información sobre todas las particiones o una partición en la cuales reside un ARCHIVO. En el ejemplo anterior. --inodes -T. Observe que varios sistemas de archivos listados arriba no tienen "ningún" dispositivo. no se pueden crear más archivos bajo el directorio/home. --all -h. [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 . Los usuarios pueden determinar cuánto espacio está disponible en una partición con el comando df. A continuación. La primera razón es que pueden haber problemas sutiles. el dispositivo que está montado a ésta. Si a un archivo montado en /home se le acaba el espacio.. cuando una partición se llena. sino que presenta en un cuadro leíble de dispositivos montados en cada directorio.Sin argumentos.

¿Qué directorio debería utilizarse? El directorio /media contiene subdirectorios tales como /media/floppy y /media/cdrom. Con el fin de acceder a estos sistemas de archivos deben montarse en la estructura del directorio. Se usa ocasionalmente para reparar daños en los sistemas de archivos. 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. o incluso /media/camera que están pensados con este único propósito: servir como puntos de montaje para los medios temporales. los disquetes y los discos CD/ROM se formatean con sistemas de archivos. el comandodf reporta ahora el controlador de disquete recién montado y elvis puede copiar archivos en el disquete. Figure 1. tal como un disquete. debe primero montar el sistema de archivos en una estructura de directorios usando el comando mount. (así el nombre del directorio /media). 105 . 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. mediante un directorio (ya existente) como un punto de montaje. involucra los medios temporales tales como los disquetes y los CD/ROM.Medios de montaje temporal: el directorio /media. Como cualquier dispositivo de bloque. Si quisiera hacer uso de un disco temporal.

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. solo el usuario root puede montar y desmontar dispositivos. y de modo automático monta el sistema de archivos de un disco recién insertado. Aspectos del montaje Los dispositivos de montaje son uno de los temas mas raros y problemáticos para los nuevos usuarios de Linux ( Unix). el kernel es forzado a confirmar todas las transaccciones pendientes en el disco.Cuando elvis ha terminado de usar el disco. Por ejemplo. [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. "ocupa" el sistema de archivos. cuando copia un archivo en un disquete. el programa de montaje automático sólo funciona para el controlador de CD/ROM. ¿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. los medios temporales se manejan de un modo diferente. Sin embargo. el archivo puede parecer haber sido copiado casi inmediatamente. Además. Si los usuarios inician en el sistema de alguna otra manera como por ejemplo. el directorio es sólo un directorio vacio. el comando se tomará un tiempo para volver mientras se confirman la escritura en el disquete. Programas de montaje automático El entorno gráfico GNOME ejecuta un programa de montaje automático. Los siguientes problemas se pueden presentar y agravar el asunto: Permisos Por defecto. lo desmonta del sistema de archivo mediante el comando umount. el kernel memoriza todas las interacciones del dispositivo de bloque (disco duro). Sistemas de archivo ocupados Un sistema de archivo puede solo ser desmontado si se considera "no ocupado". 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. no serán considerados "usuarios de consola" y no tendrán permiso para montar estos dispositivos. Al desmontar el dispositivo. 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. al desmontar el disquete con el comando umount. Kernel Buffering Con el fin de mejorar el rendimiento. el cual vigila el controlador del CD/ROM. 106 .'Más tarde. por red o vía el comando su. El disquete y los otros dispositivos deben montarse "manualmente".

[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. decide formatear un disquete con un sistema de archivos ext2. [madonna@station madonna]$ umount /media/floppy/ umount: /media/floppy: device is busy 107 . Como sabe que sus amigos usan Red Hat Enterprise Linux. debe también desmontar los medios al terminar.ogg song07. 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.ext2 /dev/fd0 mke2fs 1. whichever comes first. monta el disquete y copia sus archivos en él.ogg song04. El resultado: no sólo debe montar medios temporales (como disquetes) antes de poder utilizarlos.ogg song05. 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 Luego desmonta su disquete. Luego. Lo peor. 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. [madonna@station madonna]$ /sbin/mkfs.00%) reserved for the super user First data block=1 1 block group 8192 blocks per group. 1440 blocks 72 blocks (5.ogg song01.ogg song03.¿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í.ogg song06. 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.

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

copiar las mismas 8 canciones y desmontarlos.ogg song05. los datos de disco binarios.ext2 /dev/fd0 > /dev/null mke2fs 1.ogg song07. dentro de un archivo llamado songs.img. ejecuta el comandocd a su directorio de inicio y desmonta el disquete.img 109 . Decide agilizar el proceso creando un archivo de imagen para su disquete. copia. dentro de un archivo llamado songs. [madonna@station madonna]$ cat /dev/fd0 > songs.img 1444 songs.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. 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.ogg song01.img El comando cat que hemos estado usando para ver los archivos de texto sencillos. ¿Qué tan grande es? [madonna@station madonna]$ ls -s songs.ogg chmod: changing permissions of `song05.Ahora que ha terminado. Después de un tiempo. copia. el contenido del disquete desmontado.ogg' (requested: 0664. Primero prepara un disquete con los archivos que quiere distribuir.ogg [madonna@station madonna]$ umount /media/floppy/ Luego. Después de unos pocos segundos de dar vueltas el disquete. [madonna@station floppy]$ cd [madonna@station madonna]$ umount /media/floppy/ Luego. byte por byte. byte por byte. ella tiene un nuevo archivo. sirve tanto como los archivos binarios o en este caso.ogg song06.img. el contenido del disquete desmontado. se cansa de formatear los disquetes. montarlos.ogg song04. [madonna@station floppy]$ chmod 664 song05.ogg song03. [madonna@station madonna]$ /sbin/mkfs.

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

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

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

usamos el comando umount para desenlazar un sistema de archivo desde un árbol de directorios.4. 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. El comando find puede buscar archivos basados en información de inodo.gz /usr/share/man/man8/umount. Discussion Ubicación de archivos Es común encontrar archivos de configuración en /etc o ejecutables en un directorio bin. El comando locate escribe los nombres de los archivos y directorios que coinciden con un modelo proporcionado.8.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.gz /usr/share/man/man8/smbumount.0/fs/jfs/jfs_umount. algunas veces es necesario buscar un archivo específico en el sistema.8. fecha de modificación y otros criterios. Veamos qué archivos en el sistema de archivos incluyen la cadena "umount" en sus nombres.gz /usr/share/icons/slick/16x16/devices/hdd_umount. Con su búsqueda en tiempo real a través del árbol de directorio es más lento que con locate.2.8.c /bin/umount 113 . pero también es más flexible. Anteriormente. El comando find puede ejecutar comandos arbitrarios en archivos.gz /usr/share/man/man2/umount2.cualquier nombre de comando puede utilizarse.png /usr/src/linux-2. 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. [blondie@station blondie]$ locate umount /usr/bin/smbumount /usr/share/man/man2/umount. grupo. tipo.2. pero también puede buscar archivos por propietario.18-24. 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. Dos de las herramientas comunes para esto son los comandos locate y find. El comando find realiza en tiempo real. sin embargo. El comando find puede hallar archivos por nombre. Uso de Locate El comando /usr/bin/locate es un enlace simbólico para /usr/bin/slocate . una busqueda de modo recursivo del sistema de archivos.

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

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

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

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

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

kde/Autostart /home/elvis/. 119 .kde/Autostart/.kde/Autostart/Autorun.desktop /home/elvis/.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.directory /home/elvis/.bash_profile /home/elvis/. El ejemplo anterior no debería mostrar ninguna salida de dicho comando. Sin embargo.emacs /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.*bash*" /home/elvis/.bashrc /home/elvis/. es importante especificar si se van a buscar archivos ocultos.kde /home/elvis/. [elvis@station elvis]$ find /home/elvis /home/elvis/ /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.bash_profile /home/elvis/. cuando se está buscando el nombre de archivo.bash_logout /home/elvis/.bash_logout /home/elvis/. [elvis@station elvis]$ find /home/elvis -name "*bash*" [elvis@station elvis]$ find /home/elvis -name ".bashrc El directorio de inicio para find pueden ser múltiples directorios de inicio.

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.db 28204 12 -rw-r----1 smmsp smmsp 12288 Mar 16 /etc/aliases.. también redirige los errores a /dev/null para que no aparezcan en la pantalla.db 42300 12 -rw-r----1 smmsp root 12288 Mar 4 /etc/mail/acc ess. [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.db 42302 8 -rw-r----1 smmsp root 12288 Mar 4 /etc/mail/mai lertable.. Pueden haber directorios donde el acceso de búsqueda sea negado por lo tanto. [elvis@station elvis]$ find / -not -user root -not -user bin -ls 2> /dev/null .[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. 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 .

121 . para los cuales usted no tiene permiso. Al listar los archivos asegúrese de que cada nombre de archivo sea una referencia absoluta. pertenecientes al usuario "root" y al grupo "mail".find.games contiene un listado de todos los archivos bajo el directorio /var/lib. Deliverables A title Question 1 content_view let_ 1.big contiene un listado de estilos ls -dils de todos los archivos bajo el directorio /usr/bin mayores de 1000000 caracteres de tamaño. [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.Tiempo estimado: 20 minutos. pertenecientes al usuario "games". Puede que necesite consultar la página del manual find(1) para hallar respuesta a algunos de los problemas. No se preocupe por estos mensajes de error. Usted los puede suprimir añadiendo el comando 2> /dev/null a su comando find. [blondie@station blondie]$ -rw-rw-r-2 blondie /tmp/linkfile -rw-rw-r-2 blondie [blondie@station blondie]$ [blondie@station blondie]$ links \. Encontrará un número de mensajes de "Permiso denegados" cuando find trata de acceder de modo recursivo a los directorios. El archivo var.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. El archivo varlib. 3. El archivo bin. Ejecute el comando file en cada archivo bajo /etc/sysconfig y registre la salida en el archivo sysconfig. 2. 4.

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

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

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

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

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

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

Sólo sirve de ejemplo del porqué alguien podría querer crear un archivador tar.txt report/html/ report/html/figures/ report/html/figures/image1.tar [prince@station tmp]$ ls -R report/ report/: html text report/html: 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/text: chap1.html report/html/figures: image1.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 chap2. Con frecuencia.com No se preocupe si no está familiarizado con el comando mutt.png report/html/chap1. usted no necesita incluir el guión inicial.txt report/text/chap2.tar report [prince@station prince]$ tar tf report. • ¿Cuando se crean archivos.html chap2.tar report/ report/text/ report/text/chap1. limpia la copia de prueba y utiliza el comando mutt para enviar por correo-e el archivador a manera de anexo. el comando tar permite un atajo. Puesto que la primera es siempre una de las pocas opciones.txt figures Convencido de que el archivador de ficheros contiene el informe y que su amigo podrá extraerlo.[prince@station prince]$ cd /tmp [prince@station tmp]$ tar -x -f /home/prince/report.html report/html/chap2. los usuarios con experiencia en ejecutar tar utilizan el modo abreviado de la línea de comando de la siguiente manera. [prince@station tmp]$ rm -fr report/ [prince@station tmp]$ cd [prince@station prince]$ mutt -a report.tar -s "My Report" elvis@example. [prince@station prince]$ tar cf report.

--gzip -j.• • Cuando extraemos los archivos como root. --absolute-reference -v. [prince@station prince]$ tar cvf net.. 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).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 .. --directory=DIR -P. Como lo implica el mensaje inicial. ¿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á. 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. El siguiente cuadro lista algunos de las opciones que se utilizan con más frecuencia a continuación explicaremos su uso. ¿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 . Opción -C. --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. --verbose -z.

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

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

05b/COMPAT bash-2.. ¿Qué sucede si trata un archivo comprimido como si fuera un archivo descomprimido? [prince@station prince]$ tar tf /tmp/prince.desktop .kde/Autostart/ .05b/article.bash_logout . que la extensión de.kde/ ./.tgz 264 bashdoc./.tgz .05b.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./ . [prince@station prince]$ tar tzf /tmp/prince.tgz -C /usr/share/doc/ bash-2.kde/Autostart/.05b/FAQ . Pronto ejecuta tar en el directorio/usr/share/doc/bash-2.gzsuele abreviarse como .tgz -C /home/prince .05b/CHANGES bash-2./. Es importante etiquetar los archivos con las extensiones de nombre de archivo apropiadas para que cualquiera sepa cómo desempacarlo. [prince@station prince]$ tar czf /tmp/prince.tar./.kde/Autostart/Autorun.directory ./.05b bash-2. 132 .tgz Una vez pone el fichero en su nueva ubicación./. [einstein@station einstein]$ tar cvzf bashdoc. 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. extrae el archivo.ms bash-2..tgz.05b/ bash-2.La combinación de los comandos tar y gzip se encuentra tan a menudo. Ejemplos Creación de un archivo tar El usuario einstein desea hacer una copia de la documentación de bash para poder llevarla consigo.. [einstein@station einstein]$ ls -s bashdoc.bash_profile ..

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

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

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

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

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

[madonna@station madonna]$ cat . 138 .[madonna@station madonna]$ nano . Ahora. /etc/bashrc fi cal La usuaria madonna agregó esta única línea. se presenta un calendario. cada vez que madonna inicia una shell bash (por ejemplo. [madonna@station madonna]$ echo "hello world" hello world Historial de comandos Como conveniencia para los usuarios de shells interactivas.. (madonna appends a single line containing the command "cal") .bashrc .bashrc # . realizan todas las acciones solicitadas y muestran los resultados. 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. Las líneas restantes se encuentran en un archivo por defecto ~/..bashrc de un usuario.bashrc # User specific aliases and functions # Source global definitions if [ -f /etc/bashrc ]. evalúan el comando solicitado... [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. La forma más fácil de ver el historial actual es mediante el comandohistory. iniciando en una consola virtual o abriendo otra ventana de terminal). then . 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.

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

Si está establecido así. sino que también conserva los historiales de comandos entre sesiones. 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. El archivo HISTFILE se truncará a este tamaño en el arranque. El número máximo de comandos que se escribrirán al salir en el archivoHISTFILE. la última shell al salir sobrescribirá las historias de las shells que salieron anteriormente. la shell inicializa el historial de comandos desde el contenido de este archivo. las siguientes variables configuran los detalles de cómo se guarda el historial de comandos. Tras el arranque. Table 1. Cuando la shell bash sale. 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. 140 ... ¿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.bash_history en un directorio de inicio del usuario. Variables del historial de comandos de shell bash Variable HISTFILE HISTFILESIZE HISTSIZE Valor predeterminado ~/. los comandos ejecutados en un proceso bash no están disponibles en el historial de comandos de un procesobash ejecutado simultáneamente.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. entrega el historial actual del comando dentro de un archivo llamado . Además.[blondie@station blondie]$ history .

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. 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. el comando es muy útil. 141 . A continuación. compilarlo y luego ejecutar el programa. Después de ejecutar el programa. madonna edita un archivo que contiene un programa pequeño C y luego lo compila con el compilador C gcc. este truquito suele ser muy útil. Hace entonces uso del historial de comandos para agilizar el proceso. 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. El último simbolo de un comando suele representar el objeto que alguien está manipulando. Para aquellos expertos en salir del editor rápidamente. decide hacer algunos cambios. 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.Trucos del historial de comandos La shell bash ofrece muy pocas técnicas para acceder previamente los comandos tecleados (o elementos del mismo). Una vez aprendido. el nuevo texto se ejecutará de inmediato. ESC-. Si la secuencia clave se repite. Por ejemplo. y ALT-. CTRL-R Esta secuencia clave imita a !cmd en espíritu. 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. los programadores de lenguajes compilados tales como C suelen hallarse en un ciclo repetitivo: editar un archivo. la shell bash continuará el ciclo a través de los últimos símbolos de las primeras líneas de comando. Tras salir del edtor (presumiblemente después de editar de alguna forma el comando).

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

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

[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. Considere el siguiente ejemplo: 144 . Ejecución de comandos en una subshell La shell bash permite a los usuarios la fácil ejecución de comandos en una subshell.conf.works XftConfig.conf. Tras la salida. 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.wbx xorg. ls prefdm sysconfig proxymngr twm rstart X serverconfig xdm starthere xorg. && y || separan condicionalmentecomandos múltiples.backup xorg.works XftConfig. pero suele ser conveniente combinar los comandos.conf.wbx xorg. Veamos un ejemplo: [elvis@station applnk desktop-menus fs gdm lbxproxy [elvis@station elvis]$ cd /etc/X11. delimitando el comando entre paréntesis. (en inglés es igual.backup xorg.conf. Muy pocas veces existe la necesidad real de ejecutar comandos múltiples desde una solo línea de comandos.conf X11]$ xorg.conf.conf X11]$ xorg.Listas de comandos y scripts Conceptos clave • • • • Comandos múltiples se pueden separar con un .. La variable de shell $? se expande al valor de retorno de un comando ejecutado previamente.conf. 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 . las frases independientes se separan con un punto y coma).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..

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

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

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

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

cat /home/elvis/reminders Luego prueba su configuración de modo manual iniciando una nueva shell bash. ¿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.txt || echo "chmod failed.txt || echo "chmod failed" chmod: failed to get attributes of `/tmp/mostly/boring/primes. 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 ~/. Ejemplos Echoing $? twice El usuario elvis acaba de aprender sobre los valores de retorno." [elvis@station elvis]$ chmod 600 /tmp/mostly/boring/primes. éste contenía el valor de retorno (sin éxito) del comando ls. En el segundo caso. Después de ejecutar (sin éxito) el comando ls. la variable de bash ? contiene 1. 149 . y no se imprimió ningún mensaje.txt': No such file or directory chmod failed En el primer caso. 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). como era de esperar. éste contenía el valor de retorno del comando echo (con éxito). se da cuenta que ahora contiene un 0.[elvis@station elvis]$ chmod 600 /tmp/boring/numbers. En el segundo caso.bashrc. 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. y está examinando los valores de retorno de varios comandos. encuentra que. Al examinar la variable otra vez. En el primer caso. el comando chmod tuvo éxito.

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

bashrc al estado original.[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. Un archivo ~/.bashrc cuya última línea ejecute los comandos cd /usr y ls en una sola subshell. restaure su archivo ~/. Limpieza Una vez obtenga la calificación. 151 .

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

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

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

Estas variables son una parte del proceso almacenado en el kernel. Ahora presentaremos un concepto un poco más sutil y mucho más útil: variables de entorno. el kernel de Linux permite a cualquier proceso definir las parejas nombre-valor llamadas variables de entorno. las variables de entorno son heredadas por el proceso hijo.Variables de Bash El siguiente cuadro lista algunas variables que se establecen automáticamente con la shell bash. 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. Estas no se pueden reasignar por el usuario. el id del usuario y el directorio actual de trabajo son parte del proceso. pero pueden ser reasignadas. Estas variables son de sólo lectura y no pueden ser configuradas por el usuario. Table 1. así como prince lo descubre a continuación. El userid del usuario actual Estas variables son establecidas por la shell para proveer información. Esto le permite a los usuarios 155 . (siempre y cuando se acuerde de los espacios). Así como la shell bash permite asignar parejas de valores-nombre llamados variables de shell. simplemente como el id del proceso. Lo más importante es que cada vez que se inicie un proceso (tal como la shell bash iniciando el comando ls). Table 2. [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. 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. Lista separada por comas de las opciones de shell actual como lo informó el comando set -o.

A manera de ejemplo. la shell hija no sabe nada de la variable de shell padreB. (la variable será luego exportada a cualquier proceso hijo futuro). Cuando prince sale de la shell hija. prince desenlaza tanto la variable de entornoA como la shell de entorno B con el mismo comando unset. una variable de shell se crea y luego la variable de shell es "promovida" a una variable de entorno mediante el comando export. Dado que la variable A pasa a ser una variable de entorno. 156 . ¿Cómo creamos variables de entorno dentro de la shell bash? Primero.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. A y B. Por último. Por el contrario. la información acerca del entorno local. vuelve a la shell padre. Las variables de entorno suelen utilizarse para configurar comandos con información acerca de configuraciones locales o en otras palabras. 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. muchos comandos buscarán una variable de entorno llamada LANG para determinar el lenguaje del usuario y modificar su salida como corresponde. ésta fue heredada por la shell hija del padre. El usuario prince inicia una subshell bash. prince confirma que hay otras shells ejecutándose: el padre y el hijo (su shell actual). Al ejecutar el comando ps. donde la variable B está aún definida.

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. se puede modificar ( y suprimir) mediante la misma sintaxis de las variables de shell. la abreviatura habitual para el día "viernes" en alemán entonces se convierte en la abreviación alemana por regla. 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. lista sólo variables que han sido exportadas al entorno. lista las variables de shell y las variables de entorno asociadas con la shell. puesto que las abreviaturas de los días y meses han cambiado al español (como también las convenciones de las mayúsculas). Todos los procesos tienen variables de entorno. Un punto importante que merece reformularse. A menudo. El comando set. los efectos son incluso más obvios. mientras que el comando env. no sólo shells. prince ha creado. El comando date no cambió la conducta porque el comando bash tenía una variable de entorno denominada LANG (directamente). Listado de variables Examinar variables con set y env La shell bash provee dos comandos para listar variables definidas. 157 . asignado y exportado la variable EDITOR. ¿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. Al establecer LANG como es_ES. Esto simplemente sucedió para heredar esta variable de la shell bash. El proceso al ejecutar el comando date modificó su salida porque tenía su propia variable de entorno llamada LANG.[prince@station prince]$ echo $LANG en_US. otra vez sin argumentos. sin argumentos. Una vez que una variable es una variable de entorno.

[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. el editor especificado se utilizará en su lugar. Especifica los directorios para buscar archivos ejecutables en ellos. el editor por defecto es vi. Especifica qué clientes del servidor X deberían usar el entorno gráfico. Ahora prince puede referirse a la página web de un modo más fácil. [prince@station prince]$ env HOSTNAME=localhost SHELL=/bin/bash TERM=xterm HISTSIZE=1000 USER=prince MAIL=/var/spool/mail/prince .. La variable es más relevante al utilizar una consola de línea serial ("terminal tonta") para acceder al sistema.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. Muchos programas dependen de un editor externo para la entrada de parte del usuario. En lugar de teclear de modo repetitivo la URL.. 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. 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. para que la URL sea almacenada en la variable OSNISSUES. prince modifica su archivo ~/.com/opensourcenow/key_issues. Especifica el lenguaje preferido para los programas internacionalizados.redhat.html. Si la variable de entorno EDITOR está establecida. A menudo. Table 1.. 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. 158 .bashrc.0(1)-release' COLORS=/etc/DIR_COLORS..xterm COLUMNS=80 .

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

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

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

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. 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.. Por ejemplo. ${.`... Las comillas dobles ("." ). la shell bash ejecuta varias expansiones en la línea de comandos. postfijos o componentes de ruta comunes. se describió de modo extensivo en una lección anterior. la expresión {c. La expansión de llaves se utiliza para referirse (o crear) archivos que tienen prefijos.r}at se expandiría en tres palabrascat bat rat. $(. La expansión de llaves amplía los símbolos con corchetes ({}) en palabras múltiples. Aquí se incluye debido al contexto. [^. 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 con la tilde amplía los símbolos que comienzan por una tilde (~) a los directorios de inicio de usuarios. Expansión de llaves La expansión de llaves expande una sola palabra en palabras múltiples. sustituyendo uno de los elementos en "llave" para cada palabra. Discussion Expansiones de línea de comandos Generalidades Antes de ejecutar un comando.') y el caracter de barra invertida pueden usarse para evitar que la shell expanda los caracteres..]... ?..b...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.. Varios tipos de expansiones de bash.. (recuerde que varios ejercicios de laboratorio 162 .) *.} $((.] [.)) `. cada una contiene una sola palabra a partir de la lista especificada. El siguiente cuadro lista los tipos de expansiones bash con una descripción de cada una a continuación. 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 $. las comillas sencillas ('... Table 1.

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

la shell bash expandirá (desreferenciará) expresiones de la forma $VARNAME o ${VARNAME} al valor de la shell o variable de entornoVARNAME. [prince@station prince]$ WIDTH=16 [prince@station prince]$ HEIGHT=82 [prince@station prince]$ echo $(( $WIDTH * $HEIGHT)) 1312 Sin embargo. la shell bash trata de manera especial texto delimitado con una sintaxis $ ((.8 [prince@station prince]$ echo $(( $WIDTH * $HEIGHT)) -bash: 16. la tilde se utiliza para implicar que un archivo debería existir en el directorio de inicio del usuario. tal como el archivo ~/. y / en la línea de comando no tienen el significado matemático habitual. Primero. [prince@station prince]$ WIDTH=16. prince utilizará una expansión aritmética para calcular el área de un rectángulo.))..bash_history. -.8 * 82: syntax error in expression (error token is ". 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 . 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. Sustitución de comandos Quizás de las expansiones más complejas y útiles. Ahora podemos ver la razón de esta convención. los operadores matemáticos estándar como por ejemplo +. Expansión de variables La expansión de variables se trató de modo extenso en la lección anterior. y / se tratan como tal. -.8 * 82") La shell bash sólo soporta enteros aritméticos. En el siguiente ejemplo.[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. y segundo. Reformulando. *. 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". Sin embargo. Expansión aritmética La shell bash suele considerarse un entorno deficiente para cálculos numéricos y los operadores aritméticos tales como +. La shell bash "expandirá" toda la expresión y la remplazará por el resultado numérico.. las variables se tratan como enteros numéricos cuando resulte apropiado. *.

Para repasar. pero con solo un par de paréntesis: $(subcomando) Como ejemplo de una sustitución de comandos.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. Expansión del nombre de ruta bash Caracter * ? [. y el comando de sustitución suele denominarse "sustitución de acentos graves".04May2003 La shell bash implementa la sustitución de comandos al generar una nueva subshell. Table 1. ejecutar el comando.. registrar la salida y salir de la subshell. Después de examinar la página de manual date(1). [prince@station prince]$ mkdir reports.] [^. Ahora podemos ver que el nombre de ruta es uno de los tipos de expansiones implementados por la shell bash. pero no se introdujo como una expansión de shell. Expansión de nombre de ruta La expansión de nombre de ruta o "comodín de archivo". La sintaxis más moderna soportada por la shell bash es similar a la expansión aritmética.. crea una cadena de formato para generar la fecha en un formato compacto. cerca de 1 en la mayoría de los teclados). El texto se utiliza para invocar la sustitución de comandos luego es remplazado por la salida registrada desde el comando.$(date +%d%b%Y) [prince@station prince]$ ls reports.$(!da) mkdir reports. [prince@station prince]$ date +%d%b%Y 04May2003 Ahora. se describió en el cuaderno anterior.] 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. 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 ~.. [prince@station prince]$ mkdir reports. Aunque es eficaz.de comandos.$(date +%d%b%Y) [prince@station prince]$ ls reports. prince desearía crear un directorio que contenga la fecha en su nombre. la sintaxis de la expansión del nombre de ruta vea la siguiente tabla. ejecuta el comando mkdir mediante la sustitución de comandos. 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 ..

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

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

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

. De la misma manera.playlist |-. 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. $PA<TAB> podría completarse $PATH. prince usa una expansión de llave para agilizar su trabajo.playlist |-.playlist 4 directories. ogg/ |-.folk.dentro de un comando. folk..rap `-. 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. pero ninguno de los archivos playlist existia.playlist `-.folk. En la siguiente transcripción. [prince@station prince]$ mkdir ogg [prince@station prince]$ mkdir ogg/{blues.pop} [prince@station prince]$ touch ogg/{blues. folk. De forma similar a la expansión del comando y 169 .rap..rap. si un usuario escribe ~el<TAB>. la expansión de llaves tiende a funcionar mejor que el comodín. le gustaría crear directorios basados en estilos diferentes de música y en cada uno de los subdirectorios crear un archivo llamado playlist. el comodín de archivo habría sido inútil porque los directorios blues. Para situaciones en que el archivo podría o no existir. 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. Por ejemplo. La shell bash completará nombres de usuario y variables. etc. usted debería proteger el caracter con comillas (o un escape de barra invertida).folk | `-. no existían.pop | `-. cuando las palabras comienzan por los caracteres ~ o $. existeron. etc.pop}/playlist En este punto. prince ha creado la siguiente estructura de directorio.blues | `-. Con el fin de organizar las cosas. ¿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. respectivamente. por lo tanto el comodiín se perdió. bash podría completar el símbolo ~elvis.

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

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

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

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

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

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

(de otra manera. 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. como la primera palabra en la línea de comando).En este caso. Si madonna quisiera repasar los alias que estableció podría sencillamente ejecutar el comando alias (sin argumentos). puesto que ella quiso que el alias apuntara a una frase de dos palabras (ps y aux). [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. El comando alias también se utiliza para examinar los alias actualmente definidos. necesitó encerrar la frase entre comillas (para que tras "la división de palabras". 176 . el comando alias mostrará el alias actual para el argumento. [madonna@station madonna]$ alias alias h='head' alias l. A continuación madonna suprime el alias que creó anteriormente para ps. no hay signos de puntuación asociados con ninguna clase de "expansión de alias". la shell de bash busca alias en donde se espera un comando (es decir. En su lugar. 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 alias se expande.* --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). la shell trate la frase como una sola palabra). 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. Para suprimir un alias. los usuarios podrían fácilmente crear alias que pondrían la shell en un bucle infinito). Si la primera palabra es reconocida como un alias .='ls -d . Si se dan argumentos (sin el signo de igual). pase el nombre de alias como un argumento al comando unalias.

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

.Los usuarios pueden personalizar los intérpretes de comandos de bash mediante las variables de shell PS1 y PS2.. bash comenzó a utilizar el nuevo valor como su intérprete de comandos primario.. echo "Hickory Dickory Dock I'm still waiting . [madonna@station madonna]$ PS1="I'm waiting . un valor predeterminado PS1 para todo el sistema puede utilizarse. La shell de bash utiliza esta secuencia para reproducir una característica de la shell Bourne originial (/bin/sh)... un #. Inmediatamente tras cambiar el valor de la variable PS1. three mice ran up the clock" Hickory Dickory Dock three mice ran up the clock Estoy esperando . que remplaza con información dinámica cuando se genera el intérprete de comandos. Al personalizar el intérprete de comandos de bash. el intérprete de comandos suele verse más limpio si la variable PS1 está definida con un espacio al final. El cuadro a continuación resume algunas de las secuencias más comunes. Table 1.. La secuencia de escape \$ puede requerir más explicación. " I'm waiting . Para obtener una lista más completa. Con la secuencia de escape \$. y la sustitución de comandos se aplican al valor de PS1 cuando el intérprete de comandos es generado también. 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 ". Para plantear el punto de una forma obvia.. de lo contrario un $ el caracter correspondiente al número octal nnn La expansión de parámetros (variables).. la expansión aritmética. Opciones y banderas de la shell de bash 178 .. vea la página de manual bash(1)." 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. " I'm waiting . madonna personalizará sus intérpretes de comandos para decir justo eso. A menudo los usuarios desearían que el intérprete de comandos también visualizara información útil. 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. las cuales bash usa para componer los dos prompts. PS2="I'm still waiting . El ejemplo anterior implicó que el intérprete de comandos primario es la forma de decir de bash "Estoy esperando".. imitándo esta conducta original. y el intérprete de comandos secundario es la forma de decir de bash "Todavía estoy esperando".. La shell de bash permite a los usuarios insertar secuencias de escape dentro de la definición de PS1..

Por ejemplo. Cuando se utiliza con la línea de comandos. Para inhabilitar la bandera. o anular las banderas de shell. Banderas de la shell que el comando interno set utiliza. Establece la opción especificada. 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 set visualiza todas las variables de shell y sus valores (como se describió en una lección anterior). Table 1. 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). 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. como suele ser el caso. -v -x -C El comando set con la sintaxis normal de las opciones (tal como set -x) habilita la bandera especificada. el comando se utiliza para establecer. Banderas de la shell: el comando interno set El comando set realiza una labor triple. a continuación. Uno es el comando set. el cual se utiliza para modificar la conducta de shell mediante (por lo general) banderas de una letra. y el otro esshopt. 179 . Observe el cuadro siguiente con las banderas más utilizadas y sus opciones. Cuando se llamado sin argumentos. 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). La lista de opciones establecidas puede almacenarse en la variable de shell $-. Algunas de las opciones más comunes incluyen lo siguiente. usado para configurar las opciones de la shell.Se utilizan dos comandos internos para configurar la conducta de la shell mediante las opciones de shell. remplace el guión (-) por un signo más (+) (tal como set +x).

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

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

mv. 182 . Uso de alias para crear comandos rm. Uno de los editores más comunes de Linux (y Unix) es el editor vi. Red Hat Enterprise Linux se distribuye con una versión mejorada de vi. mv y cp revela que todos comparten la opción -i que se utiliza para invocar un modo interactivo. El cuarto alias.íneas [madonna@station madonna]$ set -x ++ echo -ne '\033]0.madonna@station:~\007' [madonna@station madonna]$ set +x + set +x [madonna@station madonna]$ Infortunadamente. Con el fin de hacer uso transparente del editor mejorado.c drwxr-xr-x 4 madonna madonna 4096 Jul 21 17:05 networking ++ echo -ne '\033]0. 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). El uso de la opción -i se ilustra a continuación. para que los alias también sean reportados como sitios de archivos ejecutables hallados en la ruta de un usuario. Cuando se utiliza. al habilitar la bandera "x" de la shell genera líneas complejas reflejando la generación de cada intérprete de comandos. para que cada invocación de estos comandos sea una invocación interactiva. vi. El último alias crea un delimitador para el comando which. se utilliza para reasignar un comando empleado para una implementación alterna. conocida como vim (para "Vi IMproved").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. pero expandido totalmente el ls --color=tty -l --color=tty se ve con claridad que es en realidad ejecutado como resultado del comando ll. y cp más seguros El examen de los usos de las opciones de los comandos rm. el comando más utilizado vi ha sido reasignado. [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.

%H:%M:%S timestamp. agrega las dos líneas siguientes a su directorio ~/. Primero utiliza ts para crear un archivo marcador de tiempo. el cual listará todos los archivos que han sido modificados antes que un archivo especificado.bashrc.19:39:18 183 . 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. la cuenta de root tiene dichos alias establecidos por defecto. Desearía crear dos alias.[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. -newer" Abre una nueva shell (para que el . y ensaya sus nuevos alias. Sin embargo. Quisiera saber una forma fácil de controlar cuáles archivos se crean o cambian antes o después de ciertas operaciones. los usuarios estándar. El primero llamado Para crear el primer alias. 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. Cada uno de estos comandos también viene con la opción -f para "forzar" la conducta requerida.19:30:23 Para crear los alias. Ella sabe que el comando find implementa un criterio -newer.%H:%M:%S)" alias tsc="find . [madonna@station madonna]$ ts [madonna@station madonna]$ ls bin hello.bashrc modificado tenga efecto). alias ts="touch $(date +timestamp. [madonna@station madonna]$ date +timestamp. pueden configurar estas protecciones por su cuenta si así lo desean. 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. Observe el uso de la sustitución de comandos para determinar el tiempo actual en el primer alias.c networking timestamp.

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

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

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

Por último. Todos los scripts de shell se ejecutan en la misma shell que lee el script. Las shells bash pueden ser tanto shells de inicio como de no inicio.bashrc es el único que puede utilizarse para personalizar la shell bash. hemos estado utilizando el archivo ~/. 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.script. comenta todo menos la primera línea. Si esta es la impresión que se ha dado.script.bashrc como si fuera el único archivo que pudiera ser usado para personalizar la shell bash.. blondie desearía explorar diferentes estilos de intérpretes de shell. /etc/bashrc y ~/. [blondie@station blondie]$ cat prompts.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 . Esto se conoce como leer el archivo. 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. lee el archivoprompts. el propósito de esta lección es cambiar esa idea. sin complicarnos con detalles de scripts e inicialización de shell. Para ayudar a comparar.bash_logout es leída por cada salida de shell de inicio de sesión.bashrc se leen en el arranque de cada shell de inicio. Como ejemplo. le permite a los usuarios aplicar automáticamente muchas de las personalizaciones aprendidas en lecciones anteriores.d y ~/. En esta lección. el comando usado para leer un archivo es el comando interno de shell source. tales como los alias y expansiones de shell. a riesgo de dejar al estudiante con la impresión de que el archivo ~/. Discussion Hasta el momento en este cuaderno. [blondie@station blondie]$ source prompts. Esto nos ha permitido enfocarnos en temas.script whadda you want? 187 . ~/. utiliza un editor para crear un archivo de texto llamado prompts.bash_profile leídos en el arranque de cada shell de inicio de sesión. archivos dentro del directorio /etc/profile.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. cada una proporcionando una definición diferente para la variable PS1. Las shells bash pueden ser tanto shells interactivas como no-interactivas. De modo apropiado. El saber qué scripts son leídos en el arranque. /etc/profile. Agrega varias líneas.

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

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

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

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

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. si blondie sospecha que un cambio ha ocurrido en el sistema de archivos de arranque bash.bash_profile sourcing En el primer caso. ejecutando source en /etc/profile y ~/. [blondie@station blondie]$ . De modo explícito.bashrc sourcing" Ahora haremos que el usuario elvis haga su en blondie usando ambas formas. si una membresía de grupo de usuarios ha cambiado.blondie Password: ~/. si blondie sospecha que sus archivos de arranque locales bash han cambiado.bash_profile A menudo en este cuaderno y en las direcciones de Linux (y Unix). En el segundo caso. Por ejemplo. Agregue la siguiente línea a su archivo de arranque ~/.bashrc sourcing [blondie@station elvis]$ exit exit [elvis@station elvis]$ su . en general. ~/. los usuarios pueden evitarlo releyendo los archivos clave de configuración en su lugar. Por ejemplo.echo "~/.bash_profile como ~/. podría leer de modo manual el archivo /etc/profile. 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. [elvis@station elvis]$ su blondie Password: ~/. sólo el archivo ~/. 192 . /etc/profile De otro modo. Especificaciones 1. se les pide a los usuarios "salir e ingresar otra vez" para que los cambios de configuración surtan efecto. [blondie@station blondie]$ . A menudo. entonces puede leer su archivo de configuración local bash manualmente. tanto ~/.bashrc fue leído.bashrc.bash_profile (Observe que esto no funcionaría para todos los cambios de configuración. sino sólo para aquellos relacionados con la shell bash.bashrc son leídos.bashrc sourcing ~/.

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

Discussion Muchos comandos de Linux leen la entrada desde el teclado y muestran la salida en la terminal. El destino al que los programas escriben se conoce como una salida estándar (stdout. Programas de terminal Los programas de terminal reunen entradas y salidas de pantalla en un flujo. Ejemplos de este tipo de programas son ls. La fuente desde donde se leen los programas se conoce como una entrada estándar (stdin. nano y el navegador de red links son ejemplos de este tipo de programas. grep y useradd. Tres tipos de programas En Linux (y Unix). 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. 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. del inglés standard in) y suele estar conectada al teclado de la terminal. Los editores de texto vi. los programas se pueden agrupar en los siguientes tres diseños. Programas de pantalla Los programas de pantalla esperan utilizar una consola de texto. 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. aprenderá cómo se puede redirigir desde dónde se lee la entrada y a dónde va la salida. la stdout puede redirigirse mediante > o >> y la stdin puede redirigirse mediante <. los programas basados en la terminal suelen llamarse simplemente comandos.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. raras veces rediseña la pantalla como si escribiese directamente a la impresora lo cual no permite al cursor devolver la página. Programas gráficos Los programas gráficos están diseñados para ejecutarse en el entorno gráfico X. Cuando se utiliza la shell bash. En este cuaderno. Debido a su sencillez. permitiendo que los comandos sencillos se utilicen conjuntamente para realizar tareas más complejas. El navegador de red mozilla es un ejemplo de un programa gráfico. 194 .

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. Algunas veces para automatizar los comandos más repetidos.0 0. Por lo general.0 0. La shell bash usa > para redirigir un flujo de stdout de proceso a un archivo. dado que la máquina es tan lenta. El usuario elvis puede examinar el archivo más tarde en un momento más apropiado. recoge información ahora pero la analiza más tarde.0 0.0 0 0 ? root 7 0.0 0 0 ? root 6 0.0 0 0 ? root 5 0. [elvis@station elvis]$ head sluggish. El comando ps escribe en stdout. stdin y stdout están conectadas a la terminal que ejecuta el comando. En Linux (y Unix).0 0. Redirección de stdout Escritura de una salida a un archivo Cuando un programa de terminal genera salida.txt [elvis@station elvis]$ Observe que no se ve ninguna salida en la terminal.0 0 0 ? root 9 0.0 0.0 0 0 ? root 3 0. [elvis@station elvis]$ ps aux > sluggish.txt.txt y regresar para examinar el archivo cuando la máquina esté respondiendo mejor. pero stdout es redirigida por la shell bash al archivo sluggish. Con el fin de diagnosticar el problema. como siempre lo hace.0 0. Igualmente. 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 puede redirigir la salida del comando ps aux al archivo sluggish.txt USER PID %CPU %MEM VSZ RSS TTY root 1 0.0 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 . elvis desearía examinar los procesos que están ejecutándose.0 0. usualmente suele escribir esa salida a su flujo de stdout. escriben información como un flujo a un solo destino como por ejemplo una pantalla. 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).0 0 0 ? root 4 0. Por ejemplo. por lo general. sin saber qué está conectado al final receptor de ese flujo.0 1380 76 ? root 2 0. 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. Sin embargo.Este capítulo se enfoca en este último tipo de programa. suponga que la máquina que elvis está utilizando se vuelve muy lenta y no responde.0 0. 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. No permita que la simplicidad de estos comandos que reciben entradas y salidas lo engañen.0 0 0 ? root 8 0.

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. El comando mail espera un destinatario como argumento y la línea de asunto se puede especificar con la opción -s. Thanks! .txt Tue Jun 3 16:57:23 EDT 2003 USER PID %CPU %MEM VSZ RSS TTY STAT root 1 0.txt [elvis@station elvis]$ ps aux >> sluggish. su contenido original se perdería.com 196 .0 0. El cuerpo del texto del correo electronico se introduce luego desde el teclado.0 0 0 ? SWN root 9 0. en lugar de sobrescribirlo.0 0 0 ? SW root 6 0..0 0.0 0. 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 >>.0 0.0 0 0 ? SW root 4 0. [elvis@station elvis]$ date > sluggish. Cc: --elvis -s "Computer is sluggish" sysadmin@example.0 0 0 ? SW root 7 0.0 0 0 ? SW root 5 0.0 0.txt ya existió. I'm sending a list of processes that were running when the computer was running in a separate email.0 0. Para agregar una salida de un comando a un archivo.0 0 0 ? SW root 3 0. Suponga que elvis quiso registrar un marcador de tiempo de cuando se estaba presentando la conducta lenta. como también una lista de los procesos actuales en ejecución. bash usa < para hacer que lean entradas desde alguna parte diferente al teclado. [elvis@station elvis]$ mail Hey sysadmin. Esto suele conocerse como sobrescribir un archivo. El usuario elvis todavía está tratando de entender el porqué su máquina está lenta. El final del texto se señala con un punto aparte en una línea.0 0. elvis escribe "manualmente" desde el teclado un correo electrónico al administrador.. bash usa >>. Por medio del comando mail basado en la terminal.txt [elvis@station elvis]$ head sluggish. Habla con su administrador local de sistemas . 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.0 1380 76 ? S root 2 0.Agregando una salida a un archivo Si el archivo sluggish.

Con el fin de leer o escribir información en un archivo un proceso debe abrir el archivo. elvis ejecuta con cat el archivo /etc/termcap y luego casi de inmediato suspende el programa con CONTROL-Z. El número entero se conoce como un descriptor de archivos. luego elvis examina el directorio del proceso /proc/pid/fd. Sólo redirige el flujo de stdin del comando mail para leerlo desde el archivo. El comando mail no cambia su conducta básica. existe un enlace simbólico para cada archivo abierto por el proceso. la stdin del proceso mail estaba conectada a la terminal y el cuerpo del mensaje lo proporcionó el teclado. El subdirectorio del proceso a su vez tiene un subdirectorio llamado fd (del inglésfile descriptor). A continuación. 197 . 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. [elvis@station elvis]$ mail -s "ps output" sysadmin@example. Cada proceso tiene un subdirectorio asociado bajo /proc llamado como su PID (ID del proceso). En el segundo caso.txt como el cuerpo del texto. elvis puede fácilmente enviar la salida del comando ps grabada en el archivo sluggish. 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. bash arregló para que la stdin del proceso mail se conectara al archivo sluggish.com < sluggish. En el primer caso. [elvis@station elvis]$ cat /etc/termcap [1]+ Stopped cat /etc/termcap Usando el comando ps busca el PID del proceso.txt y el cuerpo del mensaje fuera provisto por su contenido. Este lee el cuerpo del mensaje desde stdin.Para su mensaje de seguimiento.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. 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. Dentro del subdirectorio /proc/pid/fd. [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.txt.

[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. Redirección En el siguiente ejemplo. [elvis@station elvis]$ cat /etc/termcap > /tmp/foo [1]+ Stopped cat /etc/termcap >/tmp/foo 198 . 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. El primero. el archivo descriptor 2. es la salida estándar. y el tercero. ¿Qué archivos abiertos heredó el comando cat de la shell bash que lo inició? El nodo del dispositivo /dev/tty1 para todos los tres. elvis ahora mira en el subdirectorio. ¿Qué sucede si el proceso cat lee desde stdin? Éste lee la entrada desde el teclado de elvis. ¿Qué sucede si éste escribe a stdout? Cualquier cosa que se escriba se verá en la terminal de elvis. el cual corresponde al PID observado. Entrada estándar. El segundo. No es de sorprender que el proceso cat tenga abierto el archivo /etc/termcap (debe poder leer el archivo para mostrar su contenido). Una vez más. 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 el error estándar (será tratado en la siguiente lección). el archivo descriptor 1. elvis ejecuta con cat el archivo /etc/termcap pero esta vez redirige stdout al archivo /tmp/foo. Table 1. es la entrada estándar. 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. el mismo archivo abierto tres veces: /dev/tty1. El comando cat tiene tres archivos abiertos antes que éste o más exactamente. cada proceso hereda tres archivos abiertos tras el inicio. el descriptor de archivo 0. elvis suspende el comando en la mitad del camino con las teclas CONTROL-Z. Como protocolo de Linux (y Unix).

la salida estándar) no está conectado a la terminal sino al archivo /tmp/foo. 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. 199 . Cuando el comando cat se llama sin argumentos (por ejemplo. sin ningún nombre de archivo o archivos para mostrar). el comando cat lee desde stdin. ¿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. como el anterior). [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. En lugar de abrir un archivo específico (mediante el descriptor de archivo 3. elvis examina los archivos que el comando cat ha abierto y los descriptores de archivo asociados con ellos.Utilizando la misma técnica anterior. éste muestra la entrada estándar en su lugar. ¿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.

a menudo confunde a los nuevos usuarios quienes inocentemente teclean un nombre de comando. puede automatizarse con un script sencillo de texto y redirección. [blondie@station blondie]$ sort < zoo ape elephant fish giraffe seal Aunque esta conducta parece (y es) perfectamente razonable. invoca el comando sort. por ejemplo. 200 . 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. cuando el comando sort se ejecuta sin argumentos (por ejemplo. A continuación. 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. Al igual que el comando cat. Por último. Al explorar. esperará entradas desde stdin. su teclado. el comando sort (en su forma más simple) lee un archivo y escribe línea por línea en orden alfabético. Salida del comando sort A continuación. "sólo para ver qué hace". trata de alguna manera de salir del comando que ha iniciado.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. nombres de archivo para ordenar). [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. un amigo le dice en voz baja "CONTROL-D".

El servidor kernel. pero por protocolo dan su dirección de correo electrónico en su lugar.kernel. Transferencias automáticas FTP La usuaria blondie usualmente toma un archivo README desde el servidor ftp para el proyecto del kernel de Linux. la secuencia de control convencional "Fin del archivo" (recuerde el cuaderno 1).org ftp permite usuarios anónimos. los usuarios anónimos de ftp no necesitan entregar ninguna.[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. ftp.org. 201 . Cuándo se les pide una contraseña. usuarios que entran con el nombre de usuario "anónimo". es decir. el comando sort imprime una lista ordenada de todo lo que se lee en la entrada estándar.

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 .116).ftp.152.. 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.org:blondie): anonymous 331 Anonymous login ok. Primero.152. blondie utiliza un editor de texto sencillo para crear el archivo getreadme.189.ftp. Remote system type is UNIX.[blondie@station student]$ ftp ftp.237).org] Name (ftp. blondie teclea comandos para navegar los directorios del servidor ftp. Cuando el comando ftp lee la entrada desde su flujo de stdin.4e+03 Kbytes/sec) ftp> quit 221 Goodbye. Si blondie descargara este archivo a menudo. blondie@example. 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.kernel. 202 . ftp> get README local: README remote: README 227 Entering Passive Mode (204. send your complete email address as your password. restrictions apply.224).. 220 ProFTPD [ftp. ftp> ls 227 Entering Passive Mode (204. ftp> cd pub 250 CWD command successful. ftp> ls 227 Entering Passive Mode (204. 150 Opening BINARY mode data connection for README (1963 bytes). Contraseña: (blondie teclea su dirección de correo-electrónico) 230 Anonymous access granted.ftp. podría sentirse tentada a escribir un archivo de texto sencillo.237.org.189.237. Sin embargo.116.116.152.com).org (204. el cual reproduciría los comandos tecleados por ella.kernel.229). 226 Transfer complete.kernel. esta vez usaría < para hacer que bash redirija stdin desde el archivo getreadme. Cuando el comando ftp hace una pausa con el intérprete de comandosftp>. getreadme. 1963 bytes received in 0. Podría entonces ejecutar el mismo comando ftp ftp.org Connected to ftp.116.152. Using binary mode to transfer files.189.kernel.237.189. la información es provista por el archivo en lugar del teclado.000564 secs (3. 226 Transfer complete.

org pero redirige stdin desde el archivo recién creado. Cuando el comando ftp ejecutó los comandos ls desde getreadme.[blondie@station blondie]$ cat getreadme.netrc. vuelve a ejecutar ftp ftp. • • Para resolver estos problemas. muchos comandos.com.kernel. Por último. cuando leen contraseñas. Cuando el comando ftp fue a leer la siguiente línea de la entrada decía blondie@example. • Primero. éste 203 .ftp Password:Name (ftp.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. escribió la salida en stdout. blondie tuvo un par de contratiempos. Por razones de seguridad. no se infirió desde el archivo getreadme. Cuando ftp intentó leer la contraseña desde la terminal. el cual fue descargado por el comando ftp. Dado que la contraseña fue leída directamente desde la terminal. [blondie@station blondie]$ ftp ftp. el comando se detuvo y ella tuvo pulsar una vez ENTER para que continuara.org < getreadme.kernel. blondie tiene un nuevo archivo README en su directorio. no las leen desde stdin. primero hace uso de un archivo~/. Luego. (los comandos no tienen que depender de stdin como su único medio de entrada. El comando ftp está diseñado para buscar un archivo como ese en el directorio de inicio del usuario y si existe. el programa se suspendió hasta que blondie pulsó la tecla ENTER. hay una línea rara que dice ?Invalid Input.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.txt.kernel.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.ftp. sino desde la terminal directamente. lo que no reconoció como un comando. Segundo.ftp anonymous blondie@example. Debido a que blondie sabe dónde esta localizado el archivo y ha incluido esa información dentro de un script. aunque la mayoría lo hacen). la cual está aún conectada a la terminal. no necesita ver esos listados cada vez que ejecuta el comando. los listados de directorio fueron descargados en la terminal al ejecutar el comando. Sin embargo.

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

[madonna@station madonna]$ eog cpu.7 patchlevel 3 .txt' using 0:13 title "user" with lines. 'stats. un sofisticado paquete de diagramación. Gráfico de madonna de la actividad de la CPU 205 .txt head stats. madonna abre el archivo stats.png' gnuplot> plot 'stats. el cual usa comandos leídos desde una interfaz de terminal para generar diagramas de funciones matemáticas y datos numéricos. Para diagramar los datos.png.txt' using 0:14 title "system" with lines.png Figure 1. donde utiliza el visor de pantalla eog para ver su diagrama.[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. 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. [madonna@station madonna]$ gnuplot G N U P L O T Version 3.txt' using 0:15 title "idle" with lines gnuplot> quit Después de salir de gnuplot vuelve a la shell bash. Terminal type set to 'x11' gnuplot> set term png Terminal type set to 'png' Options are ' small color' gnuplot> set output 'cpu.. 'stats.txt en un editor de texto y los borra con facilidad.. utiliza gnuplot.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.

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

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

stderr está conectado a una pantalla de terminal y los mensajes de error se encuentran entremezclados con las salidas estándar. llamado error estándar (a menudo abreviado 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. stdin y stdout y cómo usar > y < en la línea de comandosbash para redirigirlos. el flujo de stderr puede redirigirse a un archivo mediante 2>. muy usado para reportar condiciones de error. 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. Al utilizar bash. En la siguiente secuencia. 208 . Usualmente.Error estándar Conceptos clave • • • • Los programas Unix reportan condiciones de error a un destino llamado error estándar (stderr). Ahora estamos listos para complicar un poco las cosas introduciendo un segundo flujo de salida.d. Cuando se utiliza la shell bash.

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

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

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

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

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

[elvis@station elvis]$ ls -l /dev/null crw-rw-rw1 root root 1. 2. 214 . Repita la línea de comandos pero redirija stdout a un archivo llamado ~/stderrlab.err que contenga el flujo de stderr desde el comando cat /etc/X11/*.. Especificaciones 1.. Un archivo llamado ~/stderrlab.Como lo muestra el siguiente listado largo. /dev/null es un nodo de dispositivo de caracter como aquellos de los controladores de dispositivo convencionales. 3 Jan 30 05:24 /dev/null Cuando un usuario escribe en /dev/null. 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.out que contenga el flujo de stdout desde el comando cat /etc/X11/*. Cuando un usuario lee desde /dev/null encuentra inmediatamente un fin de archivo. la información es apenas descartada por el kernel. 3. Un archivo llamado ~/stderrlab.out y stderr a un archivo llamado ~/stderrlab. Ejercicios en línea Lab Exercise Objetivo: Administrar de modo efectivo los flujos de la entrada estándar.both que contenga los flujos stdout y stderr combinados desde el comando cat /etc/X11/*.both. 2. Repita el comando pero esta vez combine stdout y stderr en un sólo flujo y redirija el flujo al archivo ~/stderrlab. Un archivo llamado ~/stderrlab. 1. [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 . Utilice la siguiente línea de comandos para mostrar el contenido de todos los archivos dentro del directorio /etc/X11. Deliverables A title Question 1 1. la salida estándar y el error estándar Estimated Time: 10 mins.err.

Comienza por escribir el comando find para obtener un listado de archivos con un tamaño mayor a 100kbytes. Una de las formas más comunes y eficaces para redirigir es una combinación de las dos. A todos los procesos unidos en una tubería se les llama un grupo de proceso.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. 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. leer la entrada desde stdin y enviar la salida a stdout. Cuando dos comandos se unen por medio de una tubería. los dos comandos se unen con una barra vertical |. Varios de los comandos en Unix están diseñados para operar como un filtro. 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. A manera de ejemplo.xml. En lugar de redirigir la salida a un archivo y luego sort el archivo. piense que prince está tratando de hallar los archivos más grandes bajo el directorio /etc.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". É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).defaults/schemas/desktop/gnome/interface/%gconf..xml /etc/gconf/gconf. prince decide que sus archivos sean listados en orden alfabético.xml .defaults/schemas/apps/mailcheck_applet/prefs/%gconf. bash usa "|" para crear una tubería entre dos comandos.xml /etc/gconf/gconf. Al observar que el comando find no parece listar los archivos en ningún orden en particular. 215 ..xml. Discussion Tuberías En las lecciones anteriores.defaults/schemas/apps/tasklist_applet/prefs/%gconf. [prince@station prince]$ find /etc -size +100k 2>/dev/null /etc/termcap /etc/gconf/gconf. Con el fin de crear unq tubería por medio de bash. aprovecha que el comando sortse invoca sin argumentos y espera los datos desde la entrada estándar para ordenarlos.

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

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

[prince@station prince]$ grep prince /etc/* | grep passwd grep: /etc/aliases. tail. stderr no se afectó y aún se muestra en la pantalla.0 0. de alguna manera modifica o filtra la información y pasa el resultado a stdout. Ejemplos Listado de procesos por nombre A menudo.. Aunque stdout desde el primer comando con grep fue filtrado correctamente. Él lista todos los procesos pero luego reduce la salida a solo aquellas líneas que contengan el texto httpd. y awk por nombrar unos cuantos. En un próximo cuaderno. usted verá que hay muchos comandos estándar de Linux (y Unix) diseñados para este propósito. prince quiere listar información sobre los procesos que están implementando su servidor de red. ¿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. cut.7 0. cada información de lectura desde stdin.8 0... incluyendo algunos de los cuales usted ya conoce: grep.0 0.5 0.5 0. Aunque ps aux presenta un montón de información sobre procesos actuales en ejecución. sed.lock: Permission denied .5 0.0 0. quisiéramos listar información acerca de procesos que están ejecutando un comando específico.lock: Permission denied .. el número de procesos ejecutándose en la máquina puede resultar en una la salida abrumadora.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.0 0. grep: /etc/lvmtab: Permission denied /etc/passwd:prince:x:502:502::/home/prince:/bin/bash grep: /etc/passwd-: Permission denied grep: /etc/passwd.deny: Permission denied grep: /etc/default: Permission denied grep: /etc/group-: Permission denied grep: /etc/group.0 0. El comando grep puede ayudar a simplificar la salida.0 0.0 0. el comando httpd.db: Permission denied grep: /etc/at.0 0. A continuación. sort.0 0. head.5 0.

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

0.0...0.1 192.2 to 00:08:74:d9:41:32 via eth0 192. [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 .1 to 00:08:74:d9:41:9e via eth0 192.168. Dándose cuenta que el archivo /var/log/message es un archivo muy grande. 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 . suponga que el administrador deseara extraer una lista de direcciones IP y las direcciones de hardware que se ofrecen en el archivo de registro. Un administrador experimentado podría emplear el siguiente método.168. es decirla dirección IP y la dirección de hardware.168.0.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. Con el fin de extraer sólo la información pertinente.168.11 to 00:08:74:37:c5:c3 via eth0 May 27 12:20:27 server1 dhcpd: DHCPREQUEST for 192.*on //" 192.1 to 00:08:74:d9:41:9e via eth0 192..1 192.0.168..0.0.0.168.1 192.2 to 00:08:74:d9:41:32 via eth0 192. en este caso más de 1000 líneas de longitud.0.168.0. 192.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).168.0. May 27 12:18:21 server1 dhcpd: DHCPACK on 192. [root@station log]# grep DHCPOFFER messages | sed "s/^.0. 192.168..168.2 to 00:08:74:d9:41:32 via eth0 192. Sin preocuparse por detalles del protocolo de DHCP..11 (192.1 192.168.168.22.0. el administrador toma la salida del comando grep y la entuba a un comando llamado sed.2 to 00:08:74:d9:41:32 via eth0 192.0..168.0.0.168.168.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.168.0.1 to 00:08:74:d9:41:9e via eth0 192.168.1 to 00:08:74:d9:41:9e via eth0 192. el cual quita las primeras palabras de cada línea.254) from 00:08:74:37:c5:c3 via eth0 .0.. 220 .

El administrador modifica el comando sort con un par de opciones para especificar el orden de modo numérico.168.168.168.12 00:08:74:d9:41:dd 192. Con el fin de ordenar la información.2 00:08:74:d9:41:32 192.0.$3}' | sort | uniq 192.15 00:08:74:37:c8:eb 192.0.0.168. donde los campos están separados por un punto.16 00:08:74:d9:41:ac 192. 192. De nuevo.0. La información está ordenada.17 00:08:74:35:00:e3 192.5 00:08:74:34:fd:36 192.168.*on // " | awk '{print $1.168. el administrador toma la salida desde la cadena y la entuba a través de los comandos sort y uniq.0.168.1 00:08:74:d9:41:9e 192.0.0.16 00:08:74:d9:41:ac 192.168.3 00:08:74:d9:40:a4 192.4 00:08:74:d9:3f:7f 192..$3}' .0.5 00:08:74:34:fd:36 192.168.0.0.6 00:08:74:d9:41:a3 192.14 00:08:74:34:fe:bc 192.168.*on // " | awk '{print $1. el administrador toma la salida de esta combinación grep-sed y la entuba al comando llamado awk.168.13 00:08:74:35:00:d0 192.168. no se preocupe por los detalles. pulsando en el cuarto campo.Si no está familiarizado con el comando sed (muy probablemente no lo está).0.0.0.168.168. sólo observe que el argumento de sed quitó el texto inicial de cada línea hasta la palabra "on".168.0.11 00:08:74:37:c5:c3 192...168.0.168.8 00:08:74:d9:41:7b 192.9 00:08:74:35:00:1f Esta es casi la lista que el administrador quería pero el comando sort no funcionó bien.0. observe que el resultado era extraer la primera y tercera columna de la salida anterior. no por dirección IP. y quitar las líneas que se duplican.110 00:09:6b:d0:ce:8f 192.168.168.14 00:08:74:34:fe:bc 192..0.0.6 00:08:74:d9:41:a3 192.7 00:08:74:d9:41:53 192.168.0. 221 . [root@station log]$ grep DHCPOFFER messages | sed "s/^.0.168.16 00:08:74:d9:41:ac 192. pero en orden alfabético.168.0.168.168.168.0.168.10 00:08:74:d9:40:95 192. Como no queda mucho texto. no se preocupe por los detalles del comando awk.0.0.15 00:08:74:37:c8:eb 192.7 00:08:74:d9:41:53 192.0.0.17 00:08:74:35:00:e3 .15 00:08:74:37:c8:eb 192.0.168. [root@station log]$ grep DHCPOFFER messages | sed "s/^.

viendo sólo archivos que contengan la letra s.10 00:08:74:d9:40:95 192. sort. yuniq.0.168.168. awk.0.168. como pudo utilizar la flexibilidad de la línea de comando.0. sed.0. pudo también manejar la información por sí mismo. $3}' | sort -n -k4 -t.5 00:08:74:34:fd:36 192.168.4 00:08:74:d9:3f:7f 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.0.0. 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". Redirija la salida de esta tubería dentro del archivo ~/pipelab. [root@station log]$ grep DHCPOFFER messages | sed "s/^. En cambio.14 00:08:74:34:fe:bc 192. | uniq 192.168. Redirige todo esta salida a un archivo en su directorio de inicio.8 00:08:74:d9:41:7b 192.168. Escriba un línea de comando con dos 2.168.168.0.0.11 00:08:74:37:c5:c3 192.168.15 00:08:74:37:c8:eb 192. Especificaciones 1.0.3 00:08:74:d9:40:a4 192.0.12 00:08:74:d9:41:dd 192.0. Usted desearía crear una lista ordenada de todos los servicios de TCP services que se encuentran en el archivo /etc/services.168. Entube la salida del comandogrep tcp /etc/services dentro del comando sort.0.0.168.Estimated Time: 10 mins. 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.168.[root@station log]$ grep DHCPOFFER messages | sed "s/^.txt En este ejemplo.168.txt.168. Mediante el visualizador de página less desearía navegar la salida del comando ls -R /.0.168.*on //" | awk '{print $1.110 00:09:6b:d0:ce:8f Esta es la lista que el administrador quería.16 00:08:74:d9:41:ac 192.$3}' | sort -n -k4 -t.0.168.1 00:08:74:d9:41:9e 192.9 00:08:74:35:00:1f 192.0.6 00:08:74:d9:41:a3 192.17 00:08:74:35:00:e3 192.0. Ejercicios en línea Lab Exercise Objetivo: Usar tuberías para filtrar información de modo efectivo.2 00:08:74:d9:41:32 192.7 00:08:74:d9:41:53 192. 222 .*on //" | awk '{print $1 .168.0. | uniq > ~/ip_dhcp. en el orden deseado. 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.168.13 00:08:74:35:00:d0 192.

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

El comando cat tiene opciones que permiten la representación de caracteres de no impresión tal como el caracter NEWLINE. palabras y líneas en un archivo. computers transform characters into a numeric representation. This process is referred to as encoding the text. Puesto que Linux (antes Unix). el comando wc puede convertirse en una herramienta versátil de conteo. • • 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. These techniques are represented by a variety of character sets. like most operating systems.txt. ordered array of bytes. Cuando se aplica a datos estructurados. estas herramientas deberían considerarse no sólo como ayuda de redacción sino de manipulación de datos en general. starting from at first and ending at the last. El comando wc cuenta el número de caracteres. el cual sirve aún como el denominador menos común entre otras técnicas. tiene una tradición muy fuerte de almacenamiento de datos en formatos legibles por humanos. 224 . several different encoding techniques have been developed.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. The number of bytes in the array is the length of the file. (un byte suele correlacionarse con un caracter).jpg. stores information that needs to be preserved outside of the context of any individual process in files. and for most of this Workbook. La técnica de codificación más prevalente y antigua se conoce como el conjunto de caracteres ASCII. 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. [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. clasificación y manipulación de texto. (In this context. In order to accommodate the demands of a variety of languages. the term file is meant in the sense of regular file). Archivos ¿Qué son archivos? Linux. comenzamos examinando varias herramientas de búsqueda. Discussion En este cuaderno.

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

32? These integers are mapped to special keys on early teletypes. 10 digits. as outlined in the following table. if necessary./ Los dígitos de 0 a 9 Puntuación: :. Table 3. Table 2. 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. ASCII Encoding of Printable Characters Integer Range 33-47 48-57 58-64 65-90 91-96 97-122 123-126 Caracter Puntuación: !"#$%&. and still most commonly used techniques for encoding text is called ASCII encoding. and common English punctuation characters (those found on a keyboard). and maps them to an integer between 0 and 255.*(*+.One of the oldest. what CTRL key combination generates a tab? What does CTRL-J generate? As you explore various control sequences. but instead sent "out of band" control signals between two teletypes. ASCII encoding simply takes the 26 lowercase and 26 uppercase letters which compose the Latin alphabet. Table 1. Many of these control signals have special interpretations within Linux (and Unix). and we have already mentioned that CTRL-D is used to generate an "End of File" (or "End of Transmission"). many of which have to do with manipulating the spacing on the page being typed on. The following characters are commonly called "whitespace" characters.-. while a backspace can be sent using CTRL-H. 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. an audible bell can be generated using CTRL-G.<=?>@ 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 . For example. 226 . Can you determine how the whitespace and control characters are mapped to the various CTRL key combinations? For example.

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

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

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

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. Table 1. and code set specifications. Table 2. The extent of the support for any given language will vary. country codes. 230 . 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). 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. while locale -a will list all settings currently supported by your system. The following tables list some selected language codes. or pinfo gettext) for a complete listing.The variable context consists of the following three components. 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.

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

localdomain^Ilocalhost station. a menudo representado \n).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.com 192.example.example.com 127.201 z Al utilizar la opción -A.0. or various programs # that require network functionality will fail. respectivamente.168.0.example.localdomain localhost station.168.example.1^Istation1 station1.example.129.1 rha-server 192. 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. al remplazar las tabulaciones por ^I y los avances de línea son representados por$.example.0.168.0.0. los archivos se verían de la siguiente manera.0.1 localhost.example.com$ 192.com www1 www1.com $ 127.example. 127. Linux (y Unix) utilizan el caracter de avance de línea (ASCII 10.51^Istation51 station51. Por ejemplo. la estructura de espacio en blanco del archivo se hace evidente. [student@station student]$ cat -A /etc/hosts # Do not remove the following line. el siguiente archivo contiene una lista de cuatro músicos.129.51 station51 station51. mientras que los sistemas operativos de Macintosh utilizan el caracter de retorno de carro (ASCII 13.168.$ 127.0.com$ 192. ASCII 10).0.[student@station student]$ cat /etc/hosts # Do not remove the following line.168. 232 .1 station1 station1.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. ¿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. or various programs$ # that require network functionality will fail. Pero.1^Irha-server$ 192.0.com www1 www1.0.com 192.168.0.1^Ilocalhost. 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.

Muestra los primeros N bytes del archivo. -nN -cN Efecto Muestra las dos últimas líneas N del archivo.mac. 233 . Conteo de palabras de cómputo.dos elvis^M$ blondie^M$ prince^M$ madonna^M$ [student@station student]$ cat -A musicians. A continuación verá una forma de línea de comandos para el programa wc: Figure 1.[student@station student]$ cat -A musicians. Table 1. Tomará su entrada ya sea de archivos llamados en su línea de comandos o desde su entrada estándar. -nN -cN Efecto Muestra las primeras líneas N del archivo. Si N se antepone a un + muestra el archivo restante que comienza en la cuarta línea. Opciones para el comando head Opción -N. Para mayor claridad. el intérprete de comandos bash no se visualiza en el sitio acostumbrado. entonces el texto se leerá desde la entrada estándar. El comando wc cuenta el número de caracteres. El nombredearchivo que se va a contar. que no contiene ninguno de los caracteres convencionales de avance de línea de Linux. incluso si sólo se utiliza sólo un nombredearchivo. palabras y líneas. Muestra los primeros N bytes del archivo. Table 2. el nombredearchivo será escrito como la última línea de cada informe de conteo.500 palabras? Con wc puede verificar fácilmente que su aporte cumpla con los criterios. Conteo de línea de cómputo. Opciones para el comando tail Opción -N. Siguiendo el cat del archivo musicians. Uso del comando wc Opción -c -l -w filename Resultados Conteo de caracteres de cómputo.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. 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.

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

que no contenía ningun avance de línea convencional de caracteres Linux.mac. En la salida anterior. 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. 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. el número de líneas se reporta como 0. uno en una máquina Microsoft y otro en una Macintosh)? [student@station student]$ wc musicians* 4 4 29 musicians 4 4 33 musicians.dos tiene 33 caracteres mientras que musicians y musicians. ¿por qué el archivo musicians.mac 8 12 91 total Para el archivo musicians. ¿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.dos 0 4 29 musicians.[student@station student]$ echo Hello. ¿Recuerda la analogía con la máquina de escribir? Tanto el espaciador como el TABULADOR se deben pulsar. World! > greetings [student@station student]$ wc -c greetings 14 Tenga en mente también que los espacios y TABs se cuentan como caracteres.mac tienen sólo 29? Conteo de usuarios 235 . a cada caracter en un archivo de texto le corresponde el golpe de una tecla de una máquina de escribir.

. el script queda disponible desde la línea de comandos.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). el comando users genera una lista de usuarios que están actualmente en la máquina. [student@station student]$ ps aux | root 1 0.0 0 0 root 3 0.0 0. tail +2 y wc para crear un nuevo comando llamado nprocs.0 1384 76 root 2 0.0 0 0 root 3 0. puede suprimirse de la línea de encabezado..0 1384 76 root 2 0.0 0 0 ..0 0. no sólo líneas. 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.0 0 0 root 4 0. el cual imprime en pantalla información sobre un proceso por línea. Por ejemplo. palabras y caracteres..0 0 0 [ksoftirqd_CPU0] .0 0. al examinar la salida de ps aux.0 0. la línea inicial que contiene los títulos en columna debe suprimirse de la cuenta. el cual reportaría el número de usuarios actualmente en la máquina. con su habilidad para imprimir el remanente de un archivo iniciando a partir de una línea especificada. [student@station student]$ ps aux USER PID %CPU %MEM VSZ RSS root 1 0.0 0.0 0.0 0. 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. Sin embargo.0 0 0 [ksoftirqd_CPU0] root 9 0. La siguiente línea crearía un alias denominado nusers. el comando wc -l puede utilizarse para contar el número de procesos ejecutándose en una máquina.0 0.0 0 0 root 4 0.El comando wc suele utilizarse para contar el número de cosas. [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. 236 .

237 .txt. 3. Crear un script ejecutable llamado~/bin/nrecent. Un archivo llamado ~/gplwords.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). Especificaciones 1. por el comando wc) en el archivo /usr/share/doc/redhat-release-4ES/GPL como su única palabra. el cual contiene el número de usuarios localmente definidos como su única palabra. 4. Tras la ejecuación. el cual es un nombre de un directorio. archivo /usr/share/doc/redhat-release-4ES/GPL. debería poder reproducir una salida semejante a la siguiente (no se preocupe si sus números reales difieren de los listados abajo).txt ==> gplwords. Cree el archivo ~/usrlibs. El script no debería generar mensajes de error de los directorios en el flujo de error estándar.txt que contiene el número de los usuarios localmente definidos en el sistema de Linux. 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 . [student@station student]$ head *. Si usted ha implementado los ejercicios de modo correcto.txt <== 2009 ==> localusers.txt que contiene el número de palabras halladas en el 2. el cual es el número de archivos en el directorio modificados en las últimas 24 horas. El script debería esperar un solo argumento.txt que contenga el número de palabras (como fue reportado 2. Un archivo llamado ~/localusers. el script debería retornar un solo número.[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.txt <== 216 [student@station student]$ nrecent /var/log Deliverables A title Question 1 1.txt <== 89 ==> usrlibs. Estimated Time: 10 mins. Cree el archivo ~/gplwords. Cree el archivo ~/localusers.a.

txt recuerde que los usuario locales están definidos en el archivo /etc/passwd. Un script ejecutable llamado ~/bin/nrecent.a que se encuentran en el directorio /usr/lib. Un archivo llamado ~/usrlibs. 4. 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. Para el script ~/bin/nrecent recuerde que $1 desreferencia un argumento del script bash. Tras la ejecución. El script no debe retornar mensajes de error sobre directorios en el flujo de error estándar. 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. Usted podría desear utilizar los directorios /etc o /var/log para probar su script. 238 . que espera el nombre de un directorio como su único argumento. un usuario por línea.3. Ayudas Para el archivo ~/localusers.txt que contiene el número de archivos que comienzan por lib y terminados en .

Usted puede preguntarse. vimos cómo el programa wc puede utilizarse para contar los caracteres. Una expresión regular sencilla sería “Hello”. grep Búsqueda de patrones con expresiones regulares comunes. La figura de abajo da una idea general de la línea de comandos grep: Figure 1. una herrramienta útil para la búsqueda de palabras específicas o secuencias de caracteres en el contenido de archivo de texto.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. dos caracteres consecutivos “l” y un caracter “o” final. En esta lección presentamos el programa grep. útil para buscar una palabra común. palabras y líneas en archivos de texto. 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. Discussion Búsqueda de contenido de archivo de texto con el comando grep En una lección anterior. grep -v imprime líneas NO coincidentes con una cadena o patrón 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 -r buscará de modo recursivo bajo un directorio determinado. El nombre grep representa en inglés general regular expression parser. Patrones de búsqueda de mayor alcance son posibles y los examinaremos en la siguiente sección. “e”. ¿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. la cual coincide exactamente con cinco caracteres: “H”. Utilice este comando para localizar rápidamente patrones sin caracteres comodines. para hacer coincidir con alguna secuencia de caracteres. Muchas de las opciones permiten a los usuarios especificar el formato de salida de grep. egrep 239 .

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

> fallacy [student@station student]$ grep cat general specific fallacy general:Every cat has one more tail than no cat. El nombre Linux para el primer dispositivo de red de Ethernet en un sistema es “eth0”. 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. En el directorio /etc/sysconfig hay tres archivos de texto que contienen mucha de la información de configuración del sistema de Linux. etc. such as ifcfg-eth0-range0 and /etc/sysconfig/network-scripts/ifup-aliases:# ifcfg-eth0-range1. specific:No cat has nine tails. Esto puede ser útil si trabajamos con un gran número de archivos. La forma más fácil de entender esto es verlo en acción. 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. every cat has ten tails. every cat has ten tails. 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. Podemos más adelante limitar los archivos listados a sólo aquellos que se refieran al dispositivo real. filtrando la salida de grep -r a través de un grep DEVICE: 241 .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. In these \ files. > general [student@station student]$ echo No cat has nine tails. > specific [student@station student]$ echo Therefore. Quizás estemos más interesados en descubrir el archivo que menciona la palabra “nine” que en ver la línea misma. fallacy:Therefore.

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. Si solamente los nombres fueran de interés. pero algunas veces se puede tener interés en las líneas no coincidentes con el patrón. 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.[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. El archivo /usr/share/dict/words contiene una lista de palabras comunes de diccionario. Grep listará cada línea que contiene una o más coincidencias. ¿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. [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. la opción -v invierte el funcionamiento de grep. En estas instancias.

¿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.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. Sin embargo. rodeados por cualquier otra cosa. Ignorar mayúsculas o minúsculas La cadena “Bob” tiene un significado bastante diferente a la cadena “bob”. Suponga que queremos recuperar todas las líneas que contienen la palabra “at”. Si ensayamos el comando: [student@station student]$ fgrep at rhyme The cat sat on the mat at home. La opción -w considera como una palabra a una secuencia de letras. 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. El comando grep -i resuelve justo este problema. algunas veces queremos encontrar cualquiera sin importarnos si la palabra está en mayúsculas o no. [student@station student]$ grep -w at file at home.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. Examinemos otra vez nuestra rima infantil: 243 .

[student@station student]$ cat rhyme The cat sat on the mat at home. Ayuda: el archivo /etc/passwd contiene una línea por cada cuenta de usuario en el sistema. [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. utilizada por la línea de herramientas de impresión. 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 . está todo en minúsculas: [student@station student]$ grep the rhyme the mat Ahora observe qué líneas contienen las letras “t”. “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. Ejemplos Búsqueda de cadenas sencillas de caracteres Verifique que su computador tenga la cuenta del sistema “lp”. Vea si el archivo que contiene la palabra “the”.

Mientras navega a través de los archivos existentes. Combinar grep y xargs Suponga que se le ha encargado de mantener la documentación del archivo de ayuda para el editor vim.Palabras completas coincidentes Hemos visto que grep coincidirá con el patrón siempre que el patrón esté situado. 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. Usted desearía ahora buscar cada ocurrencia del textocommandline y cambiarla por command line. Usted quisiera que sus archivos de ayuda sean consistentes y decide que la anterior es la correcta. 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. El comienzo y fin de una línea también clasifica como “cualquier otra cosa”. 245 . Comienza por identificar los archivos que contienen el texto commandline. Podemos limitarnos a hacer coincidir un montón de palabras utilizando el comando grep -w. De nuevo. El comando grep considera que una palabra es un grupo de letras. 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. incluso en medio de palabras. 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.

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

Crear el archivo ~/ansiterms.txt que contenga cada línea del archivo /etc/termcap que contenga el texto ansi.txt que contenga el número de línea de la palabra mayhem del archivo /usr/share/dict/words como su única palabra. Los archivos deben listarse uno por línea mediante referencias absolutas. Ansi y AnSi todas coincidirían). El archivo ~/bashusers. contenga el texto ansi. utilizando una búsqueda insensible a las mayúsculas y minúsculas. (en otras palabras. 2. 5.txt que contenga cada línea del archivo /etc/termcap que 4. Crear el archivo ~/firstredhat. El archivo ~/nostdhome.txt que contenga líneas del archivo /etc/passwd que no contengan el textohome.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. 247 .txt que contenga líneas del archivo /etc/passwd que contengan el texto /bin/bash.3. 4. utilizando una búsqueda que no tenga en cuenta las mayúsculas y minúsculas. 3. El archivo ~/mayhemnum. mediante una búsqueda sin tener en cuenta las mayúsculas y minúsculas. Deliverables A title Question 1 1. Crear el archivo ~/mayhemnum. El archivo ~/ansiterms. ANSI.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.

sed.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. pero no es apropiado para todos los escenarios de búsqueda. La página del manual regex (7) proporciona detalles completos. Dentro de las expresiones regulares. Esto de por sí es poderoso especialmente junto con otros argumentos como -i y -v.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 . suponga que usted tuviera un archivo como éste: [biafra@station]$ cat people_and_pets. Dentro de las expresiones regulares. vi y varios lenguajes de escritura. (. +. Las expresiones regulares son entendidas por muchos comandos incluyendo grep. . Dentro de las expresiones regulares. Dentro de las expresiones regulares ^ y $ especifican el comienzo y el final de una línea. * y? especifican un número de ocurrencias consecutivas. Discussion Introducción de expresiones regulares En el capítulo anterior se describió grep para coincidir una parte o toda una palabra. ) y| especifican grupos alternativos. A continuación se presentan algunos ejemplos de búsquedas que la herramienta grep que hemos estudiado hasta el momento no puede realizar: Primero.

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

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

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

Si el primer caracter de una expresión entre paréntesis es “^”. las primeras cinco palabras que contienen tres vocales consecutivas (en minúsculas) son impresas en pantalla. Observe que no importa qué tan grande es el conjunto de caracteres dentro de un intervalo. Por ejemplo. En el primer caso. 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. 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. En el siguiente ejemplo.[student@station student]$ grep "x.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. [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 . Suponga que queremos buscar una cadena de texto “hello” sin importar las mayúsculas: queremos hacer coincidir “Hello” y “HeLLo” también. las expresiones entre paréntesis se utilizan para buscar palabras desde el archivo /usr/share/dict/words.. Una expresión de paréntesis es un intervalo de literales encerrados entre paréntesis cuadrados (“[” y “]”). se imprimen las primeras 5 palabras que contengan minúsculas en el patrón de vocal-consonante-vocalconsonante-vocal-consonante. la expresión “[^aeiou]” coincidiría con cualquier caracter que no sea una vocal. la interpretación se invierte y la expresión entre paréntesis coincidirá con cualquier ocurrencia de un caracter no incluido en el intervalo. el conjunto coincide exactamente con un caracter. 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. si éste coincide con alguno. ¿Cómo podríamos hacer esto? Una característica de regex llamada una expresión entre paréntesis resuelve el problema claramente. Por ejemplo.

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. 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. Mientras el conjunto de caracteres que define la codificación sea ordenado correctamente. están ordenados alfabéticamente sin importar las mayúsculas o minúsculas para que [A-Z] sea equivalente a [AaBbCc. Esto se debe a que en unicode (utf-8). ¿Cómo se ordenan los caracteres? Por ejemplo. 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. 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. El siguiente cuadro lista algunas de las clases de caracteres y la expresión equivalente en el intervalo ASCII donde es apropiado. Pero.. Usted puede ejecutar: [elvis@station]$ grep '[[:upper:]]' /usr/share/dict/words 253 . Table 1. En dichos sistemas [A-Z] sería equivalente a [ABC. 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.etc]. el esquema de codificación de caracteres que RHEL utiliza. Por ejemplo. 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.. va antes o después de “b” minúscula? Recuerde la discusión acerca del caracter de codificación en la primera lección. todo está bien. 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. cada palabra coincidiría en el archivo. c o d. como en el caso de ASCII. ¿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... Las clases de caracteres evitan este error. b. El valor codificado de la letra se utiliza para determinar si un caracter es "menor" o "mayor" que otro.etc]. la expresión regular moderna hace uso de las clases de caracter. Sin embargo. pero no sólo aquellas que contengan mayúsculas como puede asumirse. ¿la“C” mayúscula. Las clases de caracter coinciden con cualquier caracter sencillo.

b+ El modificador más (“+”) significa “uno o más”. b* El modificador asterisco (“*”) significa “cualquier número (incluyendo cero)” del caracter literal 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. por lo tanto el patrón regex “b+” coincide con una secuencia de no-espacio vacío de b. pero no con “abbc”. luego podría o no tener una “b”(minúscula). comience por la página del manual locale.4}” coincidiría con “abbc” y “abbbc” y “abbbbc”. El patrón regex “b{2.n} El modificador de paréntesis se utiliza para especificar un intervalo entre las ocurrencias m y n del caracter precedente. pero no con “abc” o “abbbbbc”. 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. Por ejemplo. Para mayor información en esquemas de codificación de caracteres bajo Linux. pero luego sin duda. Para mayor información acerca de los intervalos de expresiones predefinidas consulte la página grep del manual. el modificador de paréntesis se utiliza para especificar exactamente n occurrencias para el caracter precedente. el patrón regex “ab?c” coincide con las cadenas de texto “ac” y “abc”. “abbc” y así sucesivamente. egrep imprime líneas desde /usr/share/dict/words que contienen patrones que comienzan con una (letra mayúscula o minúscula) “a”.3. refiérase al capítulo 8. 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.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. b{n} Con sólo un número entero. El patrón regex “ab+c” coincide con las cadenas de texto “abc” y “abbc” pero no coincide con “ac”. seguida por una “a” (minúscula). El patrón regex “ab*c” coincide con las cadenas de texto “ac”. b{m. 254 . En el siguiente ejemplo. El caracter “*” cambió la interpretación del caracter literal b de coincidir exactamente con una letra a coincidir con cualquier número de b. “abc”.

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

los signos menor que (“<”) y mayor que (“>”) son literales. 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. pero no con la palabra “catalog”. Esto le permite a los caracteres modificadores “?”. la primera búsqueda lista todas las líneas que contienen las letras “ion” en cualquier parte de la línea. \< y \> también suelen utilizarse como pares. \<foo\> Solos. Usted verá con frecuencia tanto^ como$ utilizados juntos. En el siguiente ejemplo. Al usar el caracter de barra invertida para escaparlos significan “primero de una palabra ”y “fin de una palabra”. Nuestro ejemplo “foo$” coincide con la cadena de texto “foo” sólo al final de la línea inmediatamente antes del caracter newline. respectivamente. “^foo” coincide con la cadena de texto“foo” sólo cuando está al comienzo de la línea. también utiliza paréntesis para recopilar especificadores de patrones de expresiones regulares dentro de grupos.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. “*” y “+” 256 . De esta manera el patrón “\>cat\<” coincide con la palabra “cat”. [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. La segunda. foo$ Un signo de dólar (“$”) coincide con el final de una línea. lista sólo líneas que terminen en “ion”.

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

¡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). Función comodín intervalo inclusión intervalo exclusión modificador modificador Sintaxis Regex básico básico 258 .) 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. Table 1. El siguiente cuadro compara y contrasta expresiones regulares y comodines de archivos.. Utiliza la expresión “*” para goma elaśtica. Comparación y contraste de expresiones regulares y comodines de archivo Expresiones regulares Implementado dentro de la búsqueda. vi.). etc. 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. [a-z] Interpretación coincide con cualquier caracter de coincide con cualquier caracter incluido en un intervalo [^abc]. 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. “?”. etc.. sed y muchos lenguajes de escritura tales como perl.])”..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 (. la barra inversa suele quitar la interpretación especial del caracter siguiente. Ambas comparten metacaracteres similares (“*”. pero utiliza la barra inversa para permitir interpretaciones ampliadas del caracter siguiente. [^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. busca y remplaza utilidades tales comogrep. Red Hat Enterprise Linux utiliza extensiones GNU cuando analiza sintácticamente las expresiones básicas regulares. Sin embargo.. Table 1..*” para goma elaśtica. python... [abc].. “[.) agrupación básico permite a los modificadores actuar en un grupo de caracteres (. Ambos se utilizan para hacer coincidir patrones en texto. [a] Cuando se utilizan las expresiones regulares extendidas. son bien diferentes. | . Por ejemplo. Utiliza la expresión “. Resumen de la sintaxis de expresiones regulares de Linux Caracter .

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

[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”. [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. incluyendo cero. La expresión regular “\<at\>” sólo coincide con la palabra individual “at”. si éste existe. de ocurrencias del especificador precedente: 260 . 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.• • • 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.

261 . 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. Podríamos escribir una expresión regular para coincidir con la línea de saludo como esta: ^Dear (Dr|Mr|Ms)\. 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. [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.

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." else echo "$1 is not in the house. Recordando la estructura del archivo /etc/passwd. ¿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. Crea el siguiente script. 262 . El guión toma un argumento. then echo "$1 is in the house. Ella podría utilizar el comando id para confirmar si existe un usuario llamado username. Smith Dear Ms. Este patrón regex coincidiría de la siguiente manera: ^Dear (Dr|Mr|Ms)\. en lugar de la máquina local. Ella en su lugar. el script asegura que se haya pasado exactamente un argumento. then echo "usage: inhouse USERNAME" exit 1 fi if grep -q "^$1:" /etc/passwd. Esta línea contiene la expresión regular de interés.Esto coincidiría con las líneas: Dear Dr." fi En esta estanza. Smith Dear Mr. El comando grep buscará la línea que comienza con el argumento rastreado por “:”. 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. los nombres de usuario cumplen estas condiciones. decide examinar directamente la base de datos local del usuario (el archivo/etc/passwd).? Ya sea que el punto esté presente o no. el cual se espera sea un nombre de usuario. [blondie@station blondie]$ cat inhouse #!/bin/bash if [ ! $# == '1' ].

. Boston. Suite 330.05b/article.000 archivos). Refina su patrón de búsqueda especificando que cualquier caracter precedente o de rastro no debe ser un número. Está buscando todos los códigos postales como también los números telefonónicos.28/esound. Después de observar las primeras pocas líneas. [blondie@station blondie]$ inhouse barney barney is not in the house. Boston. ./esound-0. Inc. fax (408) 944-6314 . blondie ensaya el guión en el usuario elvis (existente) y en el usuario barney (no existente)./libart_lgpl-2.)20 b(Miscellaneous)d(Information)p . 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. elvis recuerda haber visto un número telefónico en alguna parte del directorio /usr/share/doc./esound-0.edu\fP or call \f(CR+1-617-876-3296\fP ./bash-2. A continuación.Al grabar el archivo y hacerlo ejecutable./libjpeg-6b/README:642-4900.11/COPYING: 59 Temple Place.. elvis nota que su patrón regex es demasiado general. [elvis@station doc]$ egrep -r '[^[:digit:]][[:digit:]]{3}(-| )[[:digit:]]{4} [^[:digit:]]' .2. MA 02111-1307 USA .3./hwdata-0.ps:7 w(9)p Black 0 TeXcolorgray 795 1665 a Fm(New)k(Featu r)o(es)p . [blondie@station blondie]$ mv inhouse bin/ [blondie@station blondie]$ chmod a+x bin/inhouse [blondie@station blondie]$ inhouse elvis elvis is in the house. tal como 555-1212 o 555 1212. MA 02111-1307 USA . Boston..28/esound. .75/COPYING: Foundation..2. 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.2.ps:7 w(5)p Black 0 TeXcolorgray 795 1168 a(esdctl)p Black . 263 . [elvis@station doc]$ egrep -r '[[:digit:]]{3}(-| )[[:digit:]]{4}' .mit. Comienza por observar el hecho que los número de los Estados Unidos tienen al menos 7 dígitos. pero no recuerda dónde.75/COPYING: 59 Temple Place.ps:0 TeXcolorgray 596 1554 a Fk(4. Suite 330. 59 Temple Place. (ANSI ./esound-0. Suite 330.28/esound. Comienza por buscar dicho patrón de modo recursivo a través de todos los archivos en el directorio /usr/share/doc. or from Global Engineering Documents at (800) 8547179./esound-0.ps:7 w(5)p Black 0 TeXcolorgray 795 1077 a Fm(esd)p Black ./libjpeg-6b/README: phone (408) 944-6300.ms:\f(CRgnu@prep.28/esound.2..ai. MA 02111-1307 USA . 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.

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

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

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

4. 2. ~/newsitems23. Los archivos ~/newsitems.comandos head ygrep). El número debería ser la respuesta a la pregunta respectiva acerca del archivo /usr/share/doc/bash-*/NEWS en el cuadro anterior.txt. ~/newsitems2. cada uno de los cuales contiene un solo número como su única palabra.txt.txt. 3. donde cada # se remplaza por un número digital. El archivo ~/etcphone. una por línea en orden alfabético. que contiene una lista de todos los archivos en el directorio /etc (no en subdirectorios) que contienen el patrón 1-###-###-####.txt y ~/newsitems3. 267 . El archivo ~/vowel2.txt. 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).txt. Los archivos deberían listarse como referencias absolutas.

2 Button Mouse (PS/2)" MOUSETYPE="ps/2" XEMU3="yes" XMOUSETYPE="PS/2" Si se llama con argumentos. 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. y luego. 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" DEVICE=/dev/psaux [madonna@station madonna]$ sort /etc/sysconfig/mouse DEVICE=/dev/psaux FULLNAME="Generic . [madonna@station madonna]$ cat /etc/sysconfig/mouse FULLNAME="Generic . 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. sort -k y -t clasifica en un campo específico en datos en patrones. madonna muestra primero el contenido del archivo /etc/sysconfig/mouse tal como está. Esta lección presentará el comando sort en más detalle. sort -u clasifica y suprime duplicados. Si se llama sin argumento. El comando sort Clasificación básica La clasificación es el proceso de arreglar los registros en una secuencia específica. 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). los argumentos se interpretan (en lo posible) como nombres de archivos para ser clasificados. En su forma más simple. sort -n ordena numéricamente. En el siguiente ejemplo. Modificación del orden de clasificación 268 . clasifica el contenido del archivo en orden alfabético. el comando sort clasificará en orden alfabético líneas (incluyendo cualquier espacio en blanco o caracteres de control hallados).Ordenando todo: sort y uniq Conceptos clave • • • • El comando sort clasifica datos en orden alfabético.

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

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

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

[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. Sin embargo. [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 . Ella agrega una opción adicional -k al comandosort especificando la tercera columna como su tecla secundaria.[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. con los formatos que especifican 40 pistas agrupadas en la parte superior y 80 pistas agrupadas en la parte inferior.

el ejemplo del archivo /etc/passwd. 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). está en la parte inferior. Con la opción -t se puede dar instrucciones al comando sort para utilizar algún caracter especificado (tal como “:”) para separar campos. Resumen En resumen. [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. Para filas con columnas quintas idénticas. 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.Ahora que los datos han sido clasificados por la quinta columna. con un directorio de inicio de /bin. 273 . 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. los campos se separaron por un espacio en blanco (i. está ahora en la parte superior y la usuaria mail con un directorio de inicio de /var/spool/mail. la tercera columna se ha utilizado para determinar el orden final. Un número arbitrario de teclas puede especificarse al agregar más opciones -k. pero los campos están separados con un “:” en lugar de espacios en blanco. Examine. hemos visto que el comando sort puede utilizarse para clasificar datos estructurados. En todos los ejemplos.. una serie de espacios o tabulaciones). A continuación. [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.e.

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

esta vez anteponiendo el número de ocurrencias de cada entrada en el archivo. Conteo de instancias de datos Una opción particularmente conveniente para el comando uniq es -c o --count.Reducción de datos a enteros únicos Ahora. a excepción de 3. 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 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. Puesto que sólo una combinación de dados podría producir una suma de 3 (todos unos). Esto hace que el comando uniq cuente el número de ocurrencias de un registro particulars anteponiendo el resultado al registro en la salida. madonna espera que sea una ocurrencia relativamente poco frecuente. Fácilmente. Comienza por clasificar la información y entubar la salida a través del comando uniq. trial1 quisiera analizar la información. madonna utiliza el comando uniq para reproducir su salida anterior. [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 . En el siguiente ejemplo.

0 0. los números más grandes y los más pequeños tienen relativamente pocas ocurrencias.0 0 0 root 3 0. [madonna@station madonna]$ ps aux | USER PID %CPU %MEM VSZ RSS root 1 0. Table 1. Identificación única o datos repetidos con uniq Algunas veces. Las opciones d y -u permiten al comando hacer justo eso.Como es de esperarse (al menos por un experto en estadísticas). [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.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. mientras que los números intermedios se presentan en mayor cantidad. Está familiarizada con el comando ps aux que presenta la información sobre cada proceso en ejecución.0 0. La primera columna puede sumarse hasta 100 para confirmar que el comando uniq identifique cada ocurrencia. En el primer caso. identifica las combinaciones repetidas al menos una vez. madonna identifica las combinaciones de dados que se presentan sólo una vez. En el segundo caso.0 1380 76 root 2 0. Columnas seleccionadas desde el comando ps aux Número columna de Título Función 276 . la gente está solo interesada en identificar datos únicos o repetidos.0 0.

6 6716 1724 ? S 03:31 0:00 /usr/sbin/sshd madonna 1752 0.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.5 18320 1464 ? S 02:06 0:00 /usr/sbin/httpd apache 904 0.0 0. [madonna@station madonna]$ ps aux | tail +2 | sort -rn -k6 | head gdm 1074 0.0 0.2 37828 13396 ? S 02:06 0:01 /usr/bin/gdmgreet root 1066 0. [madonna@station madonna]$ ps aux | tail +2 | sort -rn -k5 | head gdm 1074 0.6 6716 1736 ? S 03:31 0:00 /usr/sbin/sshd root 1746 0. La usuaria madonna desearía ordenar los procesos en términos de algunos de estos parámetros.0 0. clasificándolos en orden numérico y listándolos en orden descendente.2 19436 632 pts/0 S 03:42 0:00 sort -rn -k5 apache 909 0.0 0.0 5.7 6768 2020 ? S 03:31 0:00 /usr/sbin/sshd madonna 1748 0.0 0.0 1.0 0. Observe el uso del comando tail +2 para suprimir el encabezado de la lista de procesos.0 0.0 0.5 18320 1464 ? S 02:06 0:00 /usr/sbin/httpd apache 908 0.0 0. en términos de cantidad de memoria que están solicitando. (observe también que el comando sort aparece).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 5. 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.5 18320 1464 ? S 02:06 0:00 /usr/sbin/httpd apache 903 0. Se presume que estos son los procesos activos en el momento.0 0.2 9916 3140 ? S 02:06 0:00 cupsd xfs 978 0.0 0.5 18320 1464 ? S 02:06 0:00 /usr/sbin/httpd apache 907 0.5 4388 1472 pts/2 S 03:31 0:00 -bash root 885 0.0 0.0 0. Luego.5 17836 6444 ? R 02:06 0:00 /usr/X11R6/bin/X root 914 0. Primero.0 2.0 0.0 0.7 6768 2008 ? S 03:31 0:00 /usr/sbin/sshd root 1662 0.1 2 3 4 5 6 USER PID %CPU %MEM VSZ RSS El usuario propietario del proceso.5 18320 1464 ? S 02:06 0:00 /usr/sbin/httpd apache 902 0. que presenta los tamaños de los procesos residentes en la memoria.2 37828 13396 ? S 02:06 0:01 /usr/bin/gdmgreeter madonna 1844 0.5 18320 1464 ? S 02:06 0:00 /usr/sbin/httpd apache 905 0. ordena los procesos por tamaño de memoria virtual. madonna clasifica la salida por la sexta columna.5 18320 1464 ? S 02:06 0:00 /usr/sbin/httpd apache 906 0. 277 .9 4816 2512 ? S 02:06 0:00 xfs -droppriv elvis 1664 0.

0 0.9 4816 2512 -droppriv smmsp 864 0.0 5732 4 Queue rpc 586 0. [madonna@station madonna]$ ps aux | elvis 1744 33. [madonna@station madonna]$ ps -e -o pid.1 3408 400 zero elvis 1745 33.0 0.0 0. Table 1.0 1.7 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.0 0 0 root 894 0. madonna clasifica por la tercera columna. a excepción de tres procesos diferentes cat que parecen dividir de modo uniforme su CPU.0 0.cmd | head -5 PID USER CMD 1 root init [ 2 root [keventd] 3 root [kapmd] 4 root [ksoftirqd_CPU0] 278 . 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.1 3412 400 zero blondie 1826 33.0 0. madonna utiliza el comando ps con la opción -e. La opción -o le permite a madonna listar solo la información que le interesa.user.3 0. el usuario propietario del proceso y el comando ejecutándose. la actividad relativa de laCPU.1 3412 400 zero xfs 978 0.0 1548 4 root 914 0. madonna presenta los procesos con su propio ID de proceso.2 9916 3140 root 9 0. S=dormido) El usuario propietario del proceso Como algunos ejemplos al utilizar la opción -o.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. la cual especifica listar cada proceso y la opción -o que toma un listado de nombres en la columna como un argumento.8 0.Luego.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).0 0.

[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. está lista para comenzar a hacer algunas preguntas.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. elvis. [madonna@station madonna]$ ps -e -o pid. ¿Cuántos de estos proceso están ejecutándose y cuántos 279 . Primero desea saber quién está ejecutando procesos en la máquina y cuántos procesos están ejecutándose. listando únicamente el nombre de usuario propietario del proceso. hace un cuadro del id del proceso y el estado. Observe de nuevo el uso del comando tail +2 para eliminar el encabezado desde la salida del comando ps.Luego. Luego pasa la salida a través de sort y uniq -c. [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. y blondie (presumiblemente usuarios interactivos).

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

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

282 .

Table 1. Quédese con la parte del medio que contiene las direcciones de correo-e y bote las otras dos. Para especificar cuáles bytes. Table 2. Discussion En esta lección. Especificaciones de intervalo N NNM -M Solo el número del elemento N. basados en columnas especificadas por bytes. 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). El comando paste fusiona dos archivos de texto por línea. 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. direcciones de correo-e y números telefónicos. exploramos dos comandos utilizados para extraer columnas de un flujo de texto. Todos los elementos desde el comienzo de la línea hasta el final de la línea. Rasgue la página verticalmente dos veces para que cada columna sea un pedazo separado. o reunir columnas en un flujo más ancho: cut y paste. el comando cut debe llamarse con una de las siguientes opciones. o campos se cortan. Cada intervalo puede tomar una de las siguientes formas. Elementos N a través del final de la línea. "Obligatorio" Opciones para el comando cut. caracteres. 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. 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.Extraer y reunir texto: cut y paste Conceptos clave • • El comando cut extrae textos de archivos de texto. Esta es la mentalidad detrás del cut. Imagine que toma una hoja de papel que lista filas de nombres. caracteres o campos.

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.Con la opción -c. la solicitud de interrupción (IRQ) a la cual se añaden y el número de interrupciones ocurridas en la línea IRQ. donde el primer caracter es el primer caracter número 1. eth0. (no se preocupe si no está familiarizado con los conceptos de un controlador de dispositivo o línea IRQ. 284 . [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.) [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. podrían especificarse intervalos múltiples de caracteres. el resto del archivo podría ser cut. si únicamente los controladores de dispositivos se unen a líneas IRC de interés particulares. eth1 11: 6575295 XT-PIC usb-uhci. 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. Si sólo la línea IRQ y los números de interrupciones fueran de interés. la list especifica una posición de caracter en una línea de texto. A manera de ejemplo. ohci1394 8: 1 XT-PIC rtc 10: 166 XT-PIC usb-uhci. Enfóquese en la manera como cut se utiliza para manipular la información). el archivo /proc/interrupts lista controladores de dispositivo. el comando cut puede extraer regiones particulares de interés.

El texto aparecerá sólo una vez.[student@rosemont student]$ grep '[[:digit:]]:' /proc/interrupts -c1-5. incluso si las especificaciones de intervalos están superponiéndose o reordenanándose. 285 . en el mismo orden de aparición en la fuente. ¿podría utilizarse el comando cut para reorganizar el orden de la información? [student@rosemont student]$ grep '[[:digit:]]:' /proc/interrupts -c34-.340: timer 1: keyboard 2: cascade 3: ehci-hcd 5: usb-uhci. Las siguientes opciones pueden utilizarse para clasificar lo que se conoce como un campo o para líneas de fuente más selectivas. En salida. 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. separados por tabulaciones. Table 1. Por ejemplo. ohci1394 8: rtc 10: usb-uhci. | cut La respuesta es no. 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. No incluya líneas que no contengan el caracter delimitador (útil para eliminar comentarios y encabezados). utilice el texto especificado por CADENA DE TEXTO en lugar del delimitador de campo. 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.. eth1 11: usb-uhci.. sino por un caracter delimitador tal como un TABULADOR o “:”. eth0.1-5 0: timer 1: keyboard 2: cascade . Audigy 12: PS/2 Mouse 14: ide0 15: ide1 | cut Si las especificaciones de caracteres se invirtieran.

subvendid. please make sure no entries are lost. [student@rosemont hwdata]$ cut -s -f3. Model 1000" Otro ejemplo. Changes to descriptions # will be lost at the next merge . 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. Observe el uso de la opción -s.you have been warned. subdevid. # The format is ("%d\t%d\t%s\t"%s"\n". moduleName.you have been warned. Edit # it by hand to change a driver mapping. cardDescription) # or ("%d\t%d\t%d\t%d\t%s\t"%s"\n".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. Other changes will # be lost at the next merge . devid. vendid. # Edit by hand to change a driver mapping.[student@rosemont hwdata]$ head -15 pcitable # This file is automatically generated from isys/pci. devid. elimina las líneas de encabezado (que no contienen ningún TABULADOR). [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 . moduleName. vendid. suponga que quisiéramos obtener un listado de los módulos del kernel más referenciados en el archivo. # If you run makeids.

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

¿qué sucedería si pegaramos la primera a la tercera. no por la posición de caracter. etc. los elementos de registro de entrada son identificados por su posición en la línea. dejando un pedazo de papel listando sólo nombres y números telefónicos? Este es el concepto detrás del comando paste. el nombre de archivo .puede suministrarse en la línea de comandos.El comando paste sirve para combinar archivos múltiples en una sola salida. Después de rasgarlo en tres columnas. el comando pastese leería desde la entrada estándar. 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. 288 . --serial Ejemplos Manejo de registros de formato libre En el diseño de un registro de formato libre. obtenido en el orden determinado en la línea de comandos. Luego continuará con la segunda línea de cada archivo. [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. Se espera que los campos de entrada sean separados exactamente por un caracter TABULADOR. Table 1. La segunda línea de salida contendría las dos segundas líneas de cada archivo de entrada. Por conveniencia. cada línea del segundo archivo se pegue a la siguiente línea sencilla. la primera línea de cada archivo se convertiría en la primera línea de la salida. 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. Opciones para paste Opción -d lista -s. Para este "archivo". direcciones de correo -e y números telefónicos. Considere los dos archivos siguientes a manera de ejemplo. Recuerde cuando imaginamos el pedazo de papel que listaba filas de nombres. El comando paste leerá la primera línea de cada archivo. El comando paste espera un conjunto de nombres de archivo como argumentos.

Utilice la opción -c para identificar posiciones del caracter de entrada copiados en cada línea de salida. El campo 1 es el nombre de cuenta y el campo 7 da el programa de shell utilizado. /etc/passwd root. [student@station student]$ cut -d: -f7./bin/bash bin. la información se asigna a posiciones de caracteres específicos o columnas que son iguales en cada línea de entrada./sbin/nologin . [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 .7 /etc/passwd root:/bin/bash bin:/sbin/nologin daemon:/sbin/nologin adm:/sbin/nologin ./sbin/nologin lp. Vivir con registros de formatos fijos En un registro de formato fijo.1 --output-delimiter=./sbin/nologin daemon. 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. Podemos cambiar eso con la opción --output-delimiter.. Observe que las líneas de salida utilizan los mismos delimitadores de campo que los registros de entrada... Nuestro archivo favorito de ejemplo /etc/passwd tiene campos separados exactamente por el caracter de dos puntos (“:”)../sbin/nologin adm.aparezca en los elementos de información mismos pueda utilizarse Cada ocurrencia del delimitador separa un campo.

encontraremos otras técnicas en una lección posterior para superar este inconveniente. Infortunadamente. se presenta el quinto "campo"? En alguna parte a medio camino de las primeras dos columnas. el comando cut puede fácilmente utilizarse para extraer fácilmente la tercera y cuarta palabra (que contiene el punto de montaje y archivos.El comando mount sin argumentos. que le pide tratar espacios como delimitadores de campo.fd=5.mode=620) none on /dev/shm type tmpfs (rw) automount(pid780) on /misc type autofs (rw.5 Filesystem /dev/hda3 /dev/hda1 none ¿En qué parte de la salida del comando df. esta es una limitación común del comando cut. 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. respectivamente). Por fortuna.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.minproto=2. [student@station student]$ mount | cut -d" " -f3. El comando debe suplirse con la opción -d " ".pgrp=780. El comando cut obedientemente imprime el primer y quinto campo (vacío).maxproto=3) Observando que las palabras están separadas por espacios sencillos. Ejemplos de pegado 290 .gid=5.

no los nombres o el“:” utilizado para separar los nombres de los valores. 3. Tiempo Estimado: 25 minutos.txt. 2. Esto puede utilizarse para proveer un delimitador diferente entre cada par de partes escritas en la salida. La opción -s pega todas las lineas del archivo de entrada a la primera línea de salida. El archivo /proc/cpuinfo contiene información sobre su CPU del sistema detectado.Nuestro ejemplo inicial mostró el uso común de paste. Almacene el listado de valores resultante en un archivo recién creado ~/cpuvalues. No incluya los valores de parámetros o “=”utilizados para separarlos ni ningún otro comentario o líneas vacías del archivo original. Utilice el comando cut para extraer sólo los valores. i.. Clasifique el listado resultante en orden alfabético ascendente. Clasifique los nombres en orden alfabético ascendente y almacénelos en el archivo recién creado ~/initparams. 291 .txt. Almacene el resultado en el archivo recién creado ~/usershells. donde las primeras líneas de todos los archivos de entrada se concatenan y separan por un caracter delimitador. mediante la shell de inicio como tecla primaria y el nombre de usuario como tecla secundaria. NAME=value. Especificaciones 1. el proceso luego se repite para las siguientes líneas. 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. Los parámetros se definen mediante la misma sintaxis utilizada por la shell bash. El siguiente script puede utilizarse para imprimir una serie de 10 números aleatorios. donde los nombres de usuario resultantes y las shells de inicio están separadas por un espacio. Utilice el comando cut para extraer un listado de los nombres de usuario y las shells de inicio desde el archivo /etc/passwd. El archivo /etc/sysconfig/init sirve para definir parámetros que configuran su método de arranque de la máquina.e. 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. 4.txt. 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.

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

El archivo cpuvalues.txt.txt titles trial[15] trials ==> 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. uno por línea.txt <== news alice /bin/bash apache /bin/bash arnold /bin/bash ==> cpuvalues.txt cpuvalues. mediante las shells de inicio como la tecla primaria y los nombres de usuario como la tecla secundaria.[student@station student]$ head -4 usershells. separado por un espacio.txt. El archivo usershells. que lista los valores para parámetros buscados en el archivo /proc/ cpuinfo. Los valores deberían aparecer en el mismo orden de aparición en el 2. que contiene un listado de todos los usuarios y shells de inicio definido en el archivo /etc/passwd.txt initparams.txt <== 0 GenuineIntel 6 8 ==> initparams. 293 . Las líneas deberían clasificarse en orden alfabético ascendente.

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

También las utilidades con el comando diff. se le puede pedir al comando diff que ignore los archivos cuyos nombres de archivo coincidan con patrones especificados. Primero presentamos el comando diff por medio de un ejemplo. James Anderson <james@anderson. El comando diff es compatible con una gran variedad de formatos de salida que pueden escogerse mediante varias opciones. scripts de shell o código fuente C .us>. 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. el archivo puede actualizarse de modo automático. páginas web.pam_ftp. pero no idénticos y que generen salida que describa exactamente la diferencia. El comando diff -r resume de modo recursivo las diferencias entre los dos directorios. El comando diff es más utilizado para rastrear cambios a archivos de texto tales como informes. En la comunidad de código abierto. primero al corregir las palabres mal escritas y en segundo añadiendo una línea 295 . blondie se dispone a aplicar cambios. June 1999 Observe que las palabras addressy addresses están mal escritas. Discussion El comando diff El comando diff está diseñado para comparar dos archivos similares.pam_ftp This is the README for pam_ftp -----------------------------This module is an authentication module that does simple ftp authentication. [blondie@station blondie]$ cat README. Al comparar directorios. 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. 17. El más comun es el formato unificado. para que la versión dada de un archivo y la salida del comando diff comparándolo con otra versión. 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.Rastreo de diferencias: diff Conceptos clave • • • • • El comando diff resume las diferencias entre dos archivos.

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

creando una salida más compacta y podría decirse. las utilidades detectan automáticamente cuando un administrador trata de actualizar un archivo dos veces.README. James Anderson <james@anderson. el contexto diff incluye varias líneas alrededor antes de identificar cambios.orig 2003-10-07 15:30:05. James Anderson <james@anderson. el comando unificado diff intenta registrar todos los cambios en una estanza.[blondie@station blondie]$ diff -c README.pam_ftp. 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). 22 Sep 2003 Es obvio que.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.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.us>.8. June 1999 + Spelling corrections applied by blondie. “+” para marcar líneas que se han añadido y “-” para marcar líneas que se han suprimido.pam_ftp 2003-10-07 15:30:17. más legible.000000000 -0400 --.orig README.pam_ftp. 17. 297 . Al utilizar un contenidodiff. 17. Los cambios son anotados al utilizar un “!” para marcar líneas que se han cambiado. June 1999 --.us>.pam_ftp *** README.000000000 -0400 *************** *** 8. En lugar de duplicar las líneas de contexto.

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

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

Ignora cambios que insertan o borran líneas coincidentes con el argumento obligatorio regex. considere caracteres equivalentes a las mayúsculas y minúsculas). Como un ejemplo. --ignore-case -I. 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.txt difiere en dos respectos. --ignore-blank-lines -i. el comando diff buscará un archivo con el mismo nombre en el directorio especificado.Si uno de los nombres de archivo se refiere a un archivo regular y el otro a un directorio. --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. Varias líneas de comando pueden utilizarse para hacer que el comando diff tenga una conducta más relajada. --ignore-matchinglines=regex Efecto Ignora el espacio en blanco al comparar líneas. Para que la personalización de diff sea menos problemática Si no se le ha pedido lo contrario. Ignora el uso de mayúsculas (i. el comando diff rastreará de modo exhaustivo todas las diferencias entre los dos archivos. el nombre de archivo especial“-” hará que el comando diff lea desde la entrada estándar en lugar de un archivo regular. Segundo. -w.e.. El siguiente cuadro resume las opciones. 300 . Un comando diff "ordinario" reconoce todos estos cambios. se agregó una línea extra (vacía) a la parte inferior. Si ambos son directorios. Ignora el espacio en blanco al comparar líneas. pero no buscará de modo recursivo en los subdirectorios (a menos que la opción -r sea especificada. [blondie@station blondie]$ cat cal. considere los siguientes dos archivos. Las opciones que especifican la problemática de diff Opción -b. Primero se agregó un encabezado de cuarta línea en la parte superior. Table 1. Adicionalmente.

[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

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. [madonna@station madonna]$ head -5 2city12. keeping an^M$ electronic path open for the next readers. [madonna@station madonna]$ tr -d '\r' < 2city12.txt Para confirmar que la conversión sucedió correctamente. Utiliza el comando tr para borrar todas las instancias del caracter. madonna puede utilizar con facilidad el comando tr para extraer las columnas apropiadas. Do not remove this.txt | cat -A The Project Gutenberg Etext of A Tale of Two Cities. 312 . Con su nuevo conocimiento del comando tr. Ha descargado uno de sus textos favoritos A Tale of Two Cities y almacenado en el archivo2city12. un repositorio de textos que han entrado a dominio público[1].^M$ We encourage you to keep this file on your own disk. 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. Primero examina el archivo con cat -A y observa que los caracteres “^M” se han suprimido. [madonna@station madonna]$ df | tr -s ' ' | cut -d" " -f1.txt. Tras examinar el archivo. 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. realiza un par de revisiones. almacenando el resultado en el archivo 2city12unix.^M$ Ella preferiría que el texto utilizara la convención Unix (un caracter de una sola palabra new line).txt.Previamente identificamos el problema con este enfoque.txt > 2city12unix. by Dickens^M$ ^M$ Please take a look at the important information in this header. sino un conjunto de campos (uno por cada espacio).

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

3. 314 . [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. repite la técnica en todo el texto (el proceso tomó cerca de 8 segundos en un procesador 700MHZ).2. con el fin de que It y it sean consideradas como la misma palabra. Convertir cada caracter espacio en un nuevo caracter nueva línea y comprimir múltiples caracteres nueva línea en uno. 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. Convertir todos los caracteres en letras mayúsculas a letras minúsculas. madonna está lo suficientemente cómoda con sort y uniq para finalizar el proceso.

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

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

Opciones para el comando aspell Opción -W --ignore=N --ignore-case -p. respectivamente. Fusiona entradas leídas desde la entrada estándar dentro de la lista maestra de palabras. Comandos Aspell Comando -c file. chequear file -l. Discussion En la distribución de Red Hat Enterprise Linux. Los siguientes comandos son compatibles con aspell. En esta lección. lista personal de palabras y lista personal de remplazo. respectivamente. Table 1. Table 2. El comando aspell -l realiza una revisión ortográfica en el flujo de entrada estándar. la lista personal de palabras o la lista de remplazo. El comando aspell dump puede utilizarse para ver el maestro del sistema o el directorio personal de un usuario. solo se hace caso omiso a palabras sencillas).Revisión ortográfica: aspell Conceptos clave • • • • El comando aspell -c realiza revisiones ortográficas interactivas en los archivos. Bota la configuración actual aspell a la salida estándar. la utilidad del comando aspell es la utilidad primaria para revisar la ortografía de los archivos de texto. 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. entradas de lectura desde la entrada estándar. Ignora mayúsculas al realizar comparaciones de palabras. Crea la lista maestra de palabras. El siguiente cuadro lista algunas de las opciones utilizadas con el comando aspell. Bota una copia de la lista maestra de palabras. (por defecto. Utiliza la lista de palabras filename para la lista personal de palabras. respectivamente. 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. Imprime una lista de las palabras mal escritas halladas en el flujo del entrada estándar. Uso de aspell Cuando ejecute aspell. --personal=filename Efecto Ignora palabras de menos de N caracteres. 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. 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. lista personal de palabras o lista personal de remplazo. 317 .

Prince Antes de enviar el mensaje. 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. IIRC. --dont-backup No crea archivo de seguridad al realizar la revisión ortográfica.-x. LOL. el cual piensa enviar por correo-e al usuario elvis. if you've been keeping up with the exercises. subrayando la primera palabra mal escrita. Realización de una revisión ortográfica interactiva El usuario prince ha compuesto el siguiente mensaje. its prety straightforward. LOL. IIRC. Puede escoger de las siguientes opciones. 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. el comando aspell abre una sesión interactiva. prince utiliza aspell -c para realizar una revisión ortográfica interactiva. [prince@station prince] aspell -c toelvis Tras la ejecución. its prety straightforward. [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. Uso de remplazo sugerido 318 . prince tiene un teclado "vivo". Hey Elvis! I heard you were about to take the lab test for the string Procesing workbook in Red Hat Academy.

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

la palabra se almacena en su diccionario personal. Cuando prince decide agregar una palabra. suponga que prince realizó una revisión ortográfica no-interactiva antes de ejecutar la sesiónaspell de modo interactivo. Primero extrae las palabras del mensaje original con aspell -l. 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. [prince@station prince]$ aspell dump personal LOL IIRC Del mismo modo. en el cual utilizó muchas de las abreviaturas más usadas. Después de la revisión ortografía interactiva.A continuación. [prince@station prince]$ aspell -l < toelvis procesing IIRC prety LOL La utilidad aspell lista cuatro palabras que marcaría como mal deletreadas. Desearía agregar todas las abreviaturas encontradas en ese correo-e a su directorio personal. mediante palabras leídas desde la entrada estándar. Suponga que prince tiene un mensaje de correo-e anterior. 320 . Prince utiliza la habilidad de aspell dump para ver su directorio personal. prince realiza una revisión ortográfica no interactiva en su copia de seguridad del archivo original. [prince@station prince]$ aspell -l < toelvis. podría también ver el diccionario maestro del sistema. ya no se marcan como mal escritas.*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 dump master | wc -l 153675 [prince@station prince]$ aspell dump master | grep "^add.bak procesing prety Puesto que las palabras IIRC y LOL fueron añadidas al diccionario personal de prince.

1/man-html/inde.english. pero en este caso está errado. [prince@station prince]$ mozilla /usr/share/doc/aspell-0. 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. Puede hallarse documentación adicional en el directorio /usr/share/doc/aspell-0*/man-text/ (como archivos de texto sencillo) o en formato html.7.html Ejemplos Adición de nombres de servicio al diccionario personal de aspell 321 . Al igual que la mayoría de los comandos aspell generará un resumen de uso cuando se llama con la opción --help. ejecutado desde una terminal X.lenguaje. [prince@station prince]$ aspell -l < good_email.aspell.aspell. vuelve a ver el diccionario personal (expandido). Cuando termina.txt FWIW AFK RSN TTFN Después de observar los resultados.pwd.pws" En la falta de voluntad de aspell por sobrescribir un diccionario personal ya existente. decide agregar todas estas palabras a su diccionario personal con aspell merge personal.33. iniciará prince apagado en la documentación html. descubrimos dónde se ha almacenado: ~/. El siguiente comando.[prince@station prince]$ aspell -l < good_email.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/.

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

Un directorio personal aspell que contenga exactamente las palabras gcc.txt. a. stdin. d. 2. La palabra explicity debería ser remplazada porexplicitly y la palabra Litmaath por Smith. el cual es una copia del archivo/usr/share/doc/which-*/README.spell. usr. csh b. Ignore todas las otras palabras marcadas. El archivo no debería contener palabras duplicadas. stdout. usted debería poder reproducir salida similar a la siguiente. y csh. El archivo ~/sysconfig. De modo manual remplace la palabra Litmaathcon Smith. stdout. 3. stdin. texinfo. Utilice las sugerencias de corrección de aspell: explicity (debería leerse explicitly) c. El archivo ~/README. usr.Copie el archivo /usr/share/doc/which-*/README en su directorio de inicio. Si se realizó correctamente. Deliverables A title Question 1 content_view let_ 1. 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. texinfo. 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. Agregue las siguientes palabras a su directorio personal: gcc. 323 . que ha sido revisado con el comando aspell .

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

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

sxw 0 31 187 side_effect.ooffice.gedit 1 31 188 side_effect. se insertaron tres líneas nuevas de caracteres ASCII.Figure 4. [elvis@station elvis]$ wc side_effect.ooffice. Aunque elvis nunca pulsó la tecla enter. pero no permitirían que un archivo de texto terminara sin un caracter de línea nueva interrumpida. 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.gvim 16 109 4950 side_effect.txt 3 31 190 side_effect. Aunque es consistente con el otro en términos de 326 . 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. si usted incluye el formato binario OpenOffice).nano 21 233 5703 total El editor de texto nano fue la única aplicación que implementó delimitación de palabra por defecto.* 2>/dev/null 1 31 188 side_effect.

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

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

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

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

. 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). se puede incluir un sufijo de letra. [a] Al especificar N. Divide entrada en archivos de N bytes. k=1024. Divide entrada en archivos de N líneas. el cual actua como multiplicador: b=512. and M=1024*1024. División de entrada estándar En la lección anterior. -N --line-bytes=N Efecto Divide entrada en archivos de N líneas. pero le gustaría dividirla en archivos de 100 líneas cada uno. [elvis@station elvis]$ aspell dump master | wc 153675 153675 1502478 El usuario elvis desearía almacenar una copia de un diccionario. [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 . pero realiza la división al final de la línea. [a] Divide dentro de archivos máximo de Nbytes. debe proveer dos argumentos. 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 .. entonces utiliza el nombre de archivo especial “-” para hacer que split lea desde la entrada estándar. --lines=N. --lines=N. -N -b. Puesto que él desea especificar la cadena de texto dict_ como un prefijo. vimos que el diccionario maestro del comando aspell puede verse por medio del siguiente comando..Opción -l..536 archivos. a sus nombres de archivo resultantes les faltarán letras si no se aumenta la longitud del sufijo a 3(26*26 = 676). -a. --bytes=N -l. Al darse cuenta que al hacerlo crearía 1.

Las primeras pocas líneas están bien. I'll have my cellphone with me. Antes de responder. elvis guarda y luego ve el siguiente mensaje electrónico. 332 . T he stretch down Market Street is narrow so drive with care. If you've got time to kill on the way out. El correo-e consiste en diferentes secciones incluídas. 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. Springfield's a nice riverfront to take a strol l. Once you turn off o f Market Street take your time and gawk at the lovely historic homes.txt I believe the phone number of the rental property is 888-555-1212. If not. 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. 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. [elvis@station elvis]$ cat email.Uso de fmt para limpiar correo-e Mientras utiliza la terminal de correo masivo del comando mutt. the phone number of the rental office is 888-555-1313. elvis borra el mensaje con el comando fmt. pero luego el último comentario incluído es una línea larga. cada una de las cuales fue escrita por un autor diferente con un editor de texto diferente. This route will ta ke you through the heart of downtown Springfield. also: 888-555-1414.

pnm En la primera lección. sin intentar interpretar los bytes en caracteres de texto. y luego el color de 333 . I'll have my cellphone with me. 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 resto del texto fue dejado solo. el formato PNM fue mencionado como un simple ejemplo de imágenes de codificación. If not. Observe que el comando fmt únicamente operó en las líneas empezadas por el prefijo “> >>” (En este caso. 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@station elvis]$ fmt -p"> >> " -w60 email I believe the phone number of the rental property is 888-555-1212. the phone number of the rental office is 888-555-1313. So here's how to get to the house assuming you have traveled to the eastern most end of I-92. La imagen se reduce primero a una matriz de puntos ("píxeles"). The stretch down Market Street is narrow so drive with care. also: 888-555-1414.pnm con el formato PNM. Wilmington's a nice riverfront to take a stroll. Figure 1. El usuario elvis ha creado una imagen abstracta mediante el programa de manipulación de imagen gimp y ha almacenado el archivo como clouds. Imagen abstracta de nubes de elvis clouds. había solamente una). La mayoría de los comandos trabajan igual de bien en bytes. 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. This route will take you through the heart of downtown Springfield. 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. On September 24 (15:32 EDT). If you've got time to kill on the way out.

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

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

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

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

hicieron lo que tenían que hacer y salieron. En un sistema de Linux. En el mundo de Linux (y Unix). Un proceso tiene un contexto de sistema de archivos incluyendo un cwd. Si está tecleando en una línea de comandos de la shell bash. Un proceso tiene una colección de variables de entorno. ¿Qué es un proceso? 338 . grep. Si usted está viendo este texto en un navegador. ese navegador se está ejecutando como un proceso. no menos de cuatro procesos (ps. al igual que toda una clase de programas que usualmente no tienen una contraparte en los sistemas operativos. Un proceso tiene un contexto de programación que incluye un valor de niceness. los procesos que ejecutan estos programas están constantemente apareciendo y desapareciendo. Si está utilizando el comando chmod para cambiar un permiso de un archivo. [maxwell@station maxwell]$ ps aux | grep httpd > daemons.$(date +%d%b%y) En una fracción de segundo que la línea de comandos utilizó para ejecutar. un directorio raíz y una colección de archivos abiertos.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). bash y date) se iniciaron. Por ejemplo. considere que el usuario maxwell escribe la siguiente línea de comandos. Debido a que Linux implementa memoria virtual cada proceso posee su propio contexto distintivo de memoria. una umask. el comando chmod funciona como un proceso por separado. estos tipos de programas también existen. 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. esa shell está ejecutando como un proceso. 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. 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. El comando ps puede utilizarse para examinar todos los procesos actuales en ejecución. Los procesos son una instancia de un programa en funcionamiento. especializados en funciones y trabajan bien con otros programas.

nodos de dispositivos. 339 . [1] Variables de entorno Cada proceso mantiene su propia lista de pares nombre-valor. conexiones de red o incluso entre sí como tuberías (permitiendo la comunicación entre procesos). 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). el proceso sólo accede a la dirección de memoria apropiada. los descriptores de archivos abiertos actúan como fuentes o receptores de información. Los mapas de memoria suelen utilizarse para cargar el código ejecutable. En Linux. aquí ofrecemos una lista detallada de componentes que constituyen un proceso. 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. tales como su estado de ejecución y su valor de niceness (pronto hablaremos más en detalle sobre esto). Un proceso carga en su memoria una copia de las instrucciones ejecutables y almacena cualquier otra información dinámica que esté manejando. En lugar de leer o escribir en un descriptor de archivo. conocida como variables de entorno o en general como el entorno del proceso. No obstante.En este momento ya estará cansado de escuchar la misma pregunta: un proceso en una instancia de un programa en ejecución. 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. Contexto del sistema de archivos Hemos encontrado varias partes de información relacionadas con el sistema de archivos que mantiene los procesos. 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. 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. la memoria asignada a un proceso está protegida y ningún otro proceso puede acceder a ésta. pero también sirven para otros tipos de acceso no secuencial a los datos. Puesto que Linux (y Unix) están diseñados para ser un entorno multiusuario. Los procesos leen información de o escriben información a los descriptores de archivos abiertos que pueden estar conectados a archivos regulares. Contexto de ejecución Cada proceso existe (al menos hasta cierto punto) dentro de una memoria física de la máquina. Un proceso también lleva parámetros asociados con la frecuencia de acceso que se tiene a la CPU.

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

341 .

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

0 0 0 0 0 SW 0. Table 1.0% iowait Mem: 255232k av.0 0.0 0 0 0 0 SW 0. 343 .0 0 0 0 0 SW 0.07. 232796k used. 88368k used.0 95.0 0.0 0 0 0 0 SW 0. 0k shrd.00 101 processes: 100 sleeping.0 0 0 0 0 SW 0.0% system 0.17:46:38 up 4:28. 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. 0 zombie. 0 stopped CPU states: 3.0 0 0 0 0 SW 0.0 0. 4716k in_c Swap: 522104k av.0 0.9 0.9 7. 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.0 0.4 0 108 76 52 S 0.02. En otras palabras. 0. 1 running.0 0. el comando top responderá a pulsaciones sin esperar a la tecla enter.0 0 0 0 0 SW 0. El siguiente cuadro lista algunas de las teclas más utilizadas.0 0.0 0.8 0 19596 18M 12356 S 0.0 0. 7 users. Opciones para el comando top Opción -d Efecto Demora segundos segundos entre actualizaciones (por defecto = 5 segundos). 0.5 0 1088 1088 856 R 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.0 19 0 0 0 SWN 0.0 0 0 0 0 SW 0.6 0 3132 2112 1436 S 0. 33884k in_d. los cuales pueden matar o renice un proceso utilizan conceptos que cubriremos con más detalle en una próxima lección. 146208k actv. el teclado está "vivo".0 0.0 0.0 0 0 0 0 SW 0. 22436k free.0 0.9 0.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.4% user 1.0% nice 0.9 1. load average: 0.

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. A menudo. el propietario. Los procesos pueden clasificarse por cualquiera de estos campos con un sólo clic en el título de la columna. 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". maxwell primero busca todas las instancias del demonio sshd y luego busca los procesos pertenecientes al usuario maxwell. En su configuración por defecto. En la esquina superior derecha de la ventana. Figure 1. las medidas simples de la memoria del proceso y la utilización de la CPU. Se ejecuta para iteraciones N. la aplicación Monitor del sistema presenta una lista de procesos ejecutándose en la máquina local. ID de proceso. A continuación. Figure 4. tales como reniciar o matar un proceso a través de una interfaz más sencilla (y no tan flexible). Procesos de control con la aplicación gnome-system-monitor Si se ejecuta un servidor X. Campos de configuración en el monitor de sistema GNOME Por último. seleccionando Herramientas: monitor del sistema.segundos -q -n N -b Actualiza tan pronto como sea posible. Monitor del sistema GNOME Al igual que el comando top. Figure 2. el usuario puede establecer el intervalo de actualización (en segundos) y configurar muchos más campos para ser visualizados. un menú emergente permite al usuario realizar muchas de las acciones que top le permitió. luego sale. La aplicación se puede iniciar desde una línea de comandos como gnome-system-monitor o desde el menú de aplicaciones predeterminado. actualizando la lista cada pocos segundos. Se ejecuta en "modo por lote" simplemente como si escribiera a una terminal tonta. Figure 3. Una técnica es listar todos los procesos y utilizar el comando grep para reducir la información. Dentro del diálogo de Preferencias. 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). 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. Cuando se hace click derecho en un proceso. 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. el Monitor de Sistema provee un segundo panel. 344 . 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.

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

0 1380 76 root 2 0.4 1..0 0.0 0. maxwell 13166 0.0 0.0 0..0 1548 104 . [maxwell@station maxwell]$ ps -e u USER PID %CPU %MEM VSZ RSS root 1 0.[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.0 1356 4 root 496 0. Ver los procesos de un usuario con el formato "largo" 346 .5 16784 1500 maxwell 4210 0.0 0.0 0.1 2104 448 root 566 0.6 18424 1776 . maxwell utiliza el comando ps -e u para listar todos los procesos (-e) con el formato de "usuario orientado" (u).7 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.0 0.0 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 root 3 0.0 0.3 17024 1012 maxwell 4293 2.3 11596 988 maxwell 4212 0.0 0 0 .0 1416 136 maxwell 4220 0.0 0. root 174 0.0 1.0 0.0 1376 164 rpc 588 0.0 1448 160 root 570 0. maxwell 4202 0.0 0.0 0..0 0.4 18356 3760 apache 5048 0. (los estados de procesos se tratarán en una próxima lección).0 0.1 16392 436 maxwell 4207 0..0 0 0 root 250 0.8 24464 2152 root 4213 0.1 0.3 57948 3400 maxwell 4204 0.0 0..5 4304 1392 maxwell 13200 0.

En la siguiente transcripción. [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 utiliza el comando ps -U maxwell l para listar todos sus procesos (-U maxwell) con el formato "largo " (l). [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. Intrigado porque el proceso padre de muchas de estas shells parece ser el proceso ID 1184. maxwell continúa examinando ese proceso individual. grupos de sesión y terminales de control. tales como la prioridad y el niceness del proceso. 347 . grupos de proceso. 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). 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. los cuales se tratarán más adelante.

[maxwell@station maxwell]$ ps u 1184 USER PID %CPU %MEM VSZ RSS TTY einstein 1184 0.00 /usr/bin/ssh-agent /etc/X11/xinit/Xclients 348 .cmd | grep "^ *[0-9]" 30..init [ .. maxwell desea ver los procesos que tienen alarmas pendientes. vsize VSZ vsz VSZ wchan WCHAN Intrigado por el campo alarm.[keventd] . todas las shells bash se iniciaron desde dentro de una gnome-terminal.00 syslogd -m 0 ..00 syslogd -m 0 15.00 /usr/bin/ssh-agent /etc/X11/xinit/Xclients 10. Utiliza la opción -o para listar todas las alarmas pendientes y comandos.3 26900 8660 ? gnome-te STAT START S Oct12 TIME COMMAND 2:51 /usr/bin/ Aparentemente.cmd ALARM CMD ..2 3. 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. 30. maxwell utiliza ps L para listar los posibles encabezados.. Observando que todas las entradas "interesantes" comienzan con números. [maxwell@station maxwell]$ ps L %cpu %CPU %mem %MEM alarm ALARM args COMMAND blocked BLOCKED bsdstart START bsdtime TIME c C .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.. [maxwell@station maxwell]$ ps -e -o alarm.00 /usr/sbin/automount --timeout 60 /misc file /etc/auto. [maxwell@station maxwell]$ ps -e -o alarm. Ver procesos con el formato personalizado Intrigado por ver los aspectos que un proceso puede visualizar con el comando ps.[kapmd] .

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

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

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

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

El primer proceso iniciado por el kernel inicia fuera del árbol de familia.[1] Debido a que cada proceso a excepción del primero se crea por bifurcación.. mientras que el padre espera que el hijo muera para generar un nuevo intérprete de comandos. Cuando se ejecuta un comando.. el cual puede examinarse con el comando pstree. [maxwell@station maxwell]$ pstree init-+-apmd |-atd |-automount |-battstat-applet . Luego. El linaje de los procesos (y el comando pstree) Tras el arranque del sistema.. 353 . Sin embargo. una de las responsabilidades del sistema del Kernel de Linux es iniciar el proceso por primera vez (usualmente/sbin/init). para las shells en particular. |-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 .. dentro de los procesos existe un linaje bien definido de relaciones padre e hijo. fork y exec suelen ir de la mano. Todos los otros procesos son iniciados porque se bifurcó un proceso ya existente. la shell bash primero bifurca una nueva shell bash. el hijo ejecuta el nuevo comando apropiado.cual se convierte en la shell de inicio de sesión del usuario después de confirmar la contraseña del usuario.

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

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

almacénelo como ~/clobber_it. El proceso es identificado por una de las siguientes letras: • • • • • Ejecutable . Este editor vim probablemente ha sido suspendido manualmente con la secuencia de teclas CONTROL-Z.T Dormido ininterrumpible . Un proceso dormido(involuntario) o "bloqueado".sh y hágalo ejecutable.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). El proceso init está esperando que algo "interesante" suceda tal como un huérfano recién creado a heredar. 356 . Con el fin de explorar los estados de procesos debemos crear procesos que estén compitiendo por los mismos recursos. El comando updatedb está compitiendo por algún recurso en el sistema probablemente con la otra instancia del proceso updatedb justo debajo de éste. Un proceso detenido.D Zombi . Un proceso ejecutable en este caso el comando ejecutable ps. Ejercicios en línea Especificaciones 1.R Dormido .Ver estados de procesos Cuando se ve la salida de comandos tales como ps y top. los estados de procesos suelen enumerase bajo el encabezado STAT.S Detenido . Utilice un editor de texto sencillo para crear el siguiente guión. Un proceso zombi probablemente abandonado por un navegador de red galeon negligente.

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

358 . El usuario maxwell controla los procesos en su máquina mediante el comando top. es un valor fijo que sólo de vez en cuando el usuario lo cambia. la nomenclatura utilizada para describir estos dos valores ha sido inconsistente lo que lleva a la confusión. El primero es un valor dinámico que el kernel cambia constantemente. 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.Programación de procesos: nice y renice Conceptos clave • • • Una tarea primaria del kernel de Linux es la programación de procesos. En la comunidad de código abierto. [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. Aunque la siguiente discusión no es correcta en detalle comunica en esencia la forma como el kernel de Linux programa procesos. (los procesos se pueden ejecutar en segundo plano agregando el signo “&”). 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). Los comandos nice y renice pueden cambiar la prioridad de programación de un proceso. ejecutándose en el segundo plano. El segundo. Para ilustrar la programación de un modo más fácil. La forma en que el kernel decide qué proceso tiene que ejecutarse en la CPU y la hora se conoce como programación. 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. maxwell iniciará cuatro versiones del comando cat. Programación de procesos en esencia Recientemente. Cada proceso tiene dos valores que influyen en su programación. En lo posible. como se discutirá en una lección más adelante. 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. 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.

los comandos cat. cada proceso también tiene un valor estático conocido como su valor de niceness. 10 users.4 9.. si un proceso dormido se despertara de repente (porque algo interesante ha sucedido) y fuera enviado al estado ejecutable.1 17. Cuando decide qué proceso programar en la próxima CPU.08.9 0. 0 stopped CPU states: 8.2% system 4. entrega uno de sus contadores.00:25:43 up 11:07. Eventualmente.01 128 processes: 121 sleeping.3 0. el kernel escoge un proceso ejecutable con la mayoría de contadores. 145148k used.. Sin embargo. 3. 5. Cada vez que un proceso se programa en la CPU. ¿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. Estos son los valores de "prioridad" dinámicos del proceso mencionados anteriormente.8 1. 7 running. restados de 40.0% iowait Mem: 255232k av. En la salida de arriba. 33644k in_d. 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. el kernel alcanzará un estado donde todos los procesos ejecutables han utilizado sus contadores. iniciando en 0 por defecto.1 19.3 0.6% nice 0. maxwell observa que los valores en la tercera columna (con la etiqueta PRI) están en constante cambio.4 0. Sin embargo. 0 zombie.8 2. Proceso niceness Como se mencionó anteriormente.1 4. 376956k free PID 6698 6699 6700 6757 6701 6686 6758 1063 1 2 .3 0.0 0. 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. 3672k free. Prioridades del proceso Cuando se programan los procesos. están consumiendo sus contadores. ¿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. La cuarta columna (con la etiqueta NI) es el valor fijo de "niceness" del proceso.4 1. no lo está. 3952k in_c Swap: 522104k av.0 0. 0k shrd. el kernel da a cada proceso un puñado de contadores. 162724k actv. Observe que los procesos que no están en estado ejecutable nunca entregan sus contadores.5% user 3. 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.0 0. Como resultado de procesos más. 251560k used.02. Por lo tanto. en constante ejecución.7 16.0 83. "amables" 359 . Este valor tiene un rango que va de -20 a 19 para cualquier proceso. los procesos con una prioridad inferior (como es listado por el comando top) tienen una ventaja en la programación. el proceso init que está durmiendo en el segundo plano.5 0.1 19. load average: 6.9 6.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.

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

9 0. dependiendo de cuál de las siguientes opciones se utilicen. 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. el número especificado es el número que va a agregarse al valor de niceness de la shell actual.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 . Esto rara vez se nota.0 0.4 0:00 1063 root 15 0 33516 17M 832 S 1. Suponga que maxwell ya ha iniciado su simulación sin alterar su valor de niceness. nombre de usuario. [maxwell@station maxwell]$ ps -C simulation u USER PID %CPU %MEM VSZ RSS TTY STAT START maxwell 7348 58. No obstante. Los procesos pueden ser especificados por el ID del proceso. dado que la mayoría de las shells se ejecutan con un niceness de 0.1 0:21 applet-gu 1 root 15 0 108 76 52 S 0.1 0:51 simulation 7210 maxwell 20 0 1120 1120 852 R 2.9 7.0 47:01 4212 maxwell 15 0 5828 3012 1072 S 0. PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU 7198 maxwell 39 19 404 404 352 R N 94.8 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. interpreta los argumentos restantes como ID de grupo./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.4 0. [maxwell@station maxwell]$ nice -5 . ahora el (casi) único proceso en la máquina. Table 1. si una shell estuviera ejecutándose con un valor de niceness de 10. 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. o nombre de grupo. su simulación. está recibiendo todo el tiempo de la CPU.9 1.0 0:04 COMMAND 0 0 top 0 X 0 rhn0 init Como una sutileza adicional.

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

[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.. El nuevo valor de niceness.. maxwell utiliza el comando renice para alterar el valor de niceness del proceso.[maxwell@station [1] 2739 [maxwell@station F UID PID ... el proceso tiene valores más altos de prioridad (implicando menos acceso a la CPU por una época de programación). 363 . Cambiando de parecer. maxwell decide restaurar el niceness a su valor predeterminado de 0. 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.. [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. [maxwell@station F UID PID .. 000 501 2676 000 501 2739 000 501 2740 040 501 2741 000 501 2742 000 501 2743 . 000 501 2676 000 501 2718 040 501 2719 000 501 2720 000 501 2721 000 501 2739 . permanece fijo en 0.. El niceness. por el contrario.

1078 wait4 1 S 515 8954 1 0 79 0 . 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 . 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 .1078 wait4 1 S 515 8954 1 0 85 5 . [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.3313 schedu 0 S 515 8958 3031 1 80 0 .

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

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

Envíar señales: el comando kill 367 . el kernel envía un SIGCHLD (número de señal 17) al padre del proceso. 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). El comando kill está diseñado para hacer justo esto. ¿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. implementa 32 señales "normales". al igual que varias versiones de Unix. Otro ejemplo. cada vez que muere un proceso.[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. para poder responder a la nueva geometría. Condiciones del software Los procesos pueden necesitar ser notificados de alguna condición anormal del software. 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. En Linux. Por ejemplo. las aplicaciones gráficas X reciben un SIGCHLD (número de señal 17) cada vez que su ventana cambia de tamaño. Interrupciones de terminal Varias secuencias de control de teclas de la terminal envían señales al proceso de la shell bash. Por ejemplo. el kernel enviará un proceso SIGFPE (señal número 8) si realiza una división por 0. Por ejemplo. Otros procesos Los procesos pueden elegir enviar señales a cualquier otro proceso perteneciente al mismo usuario. Excepciones de hardware El proceso le pidió al hardware realizar alguna operación errónea.

A manera de ejemplo. 368 . Escoger implementar un manejador de señal personalizado Los programadores pueden elegir implementar su propia conducta cuando se recibe una señal específica. La página de manual signal(7) documenta la conducta asignada para cada señal. el prefijo “SIG” (compartido por todas las señales) puede ser incluído u omitido. A no ser que la documentación del programa diga lo contrario. usted puede asumir que un proceso responderá con la conducta implementada de kernel. Escoja ignorar la señal Los programadores pueden elegir que su aplicación simplemente ignore señales especificadas. Cualquier otra respuesta debe estar documentada.El comando kill se utiliza para enviar señales a otros procesos. [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. Ignorar: El proceso de recepción ignora la señal Núcleo: El proceso de recepción termina. A cada señal se le asigna una de las siguientes conductas. Implementar un manejador de señal predeterminado del kernel Para cada tipo de señal hay una respuesta predeterminada implementada por el kernel. el ID del proceso número 8060. [1] Pare: detenga o (suspenda) el proceso. Recepción de señales Cuando un proceso recibe una señal puede realizar una de las siguientes tres acciones. • • • • 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. El archivo core puede ser utilizado por desarrolladores para ayudar a depurar el programa. las siguientes líneas de comando envían un SIGCHLD (número de señal 17) al proceso xclock. La respuesta del programa es completamente determinada por el programador. É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.

por lo tanto einstein pudo haber utilizado kill 8375 para el mismo efecto. esta vez enviando un SIGKILL. [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. Esta es la señal generada por la secuencia de control CTRL-C. 369 . Señales importantes para usuarios normales Número 2 9 15 20 Symbol SIGINT SIGKILL SIGTERM SIGTSTP Acción Interrumpe (solicita terminar) el proceso. Detiene (suspende) el proceso. etc). la técnica de nivel de kernel para matar un proceso. ellos implementan un manejador de señal personalizado de 15 para realizar la acción. Table 1. Fuerza el terminar el proceso (esta señal puede no ser anulada por el proceso) Solicita la terminación del proceso.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. Esta es una señal generada por la secuencia de control CTRL-Z. einstein iniciará un comando cat que en un principio se ejecutaría para siempre. Los usuarios estándar suelen utilizar señales para terminar un proceso (razón del nombre del comando kill). si los programadores quieren implementar la conducta personalizada cuando se apaga (como por ejemplo botando memoria importante al disco. A continuación. Por convención. einstein repite la secuencia. 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. A manera de ejemplo. Luego traza el ID del proceso del comando y termina con un SIGTERM. Este se reserva como un último recurso.

[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

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

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

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

observa los dos trabajos at en espera. el administrador del sistema de la máquina actuando como root. 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.txt. También ha descubierto el comando enscript.at: [hogan@station hogan]$ cat fanmail. Crea el archivo bogus_fanmail.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. [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. cuando hogan quiere someter a impresión su correspondencia de la fanaticada puede simplemente especificar el script a at con la opción -f. 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. que falsifica correspondencia no muy elogiosa de sus fanáticos. [ventura@station ventura]$ echo "lpr bogus_fanmail.at enscript -r2 -G --header="Fan Mail" --borders fanmail.txt Ahora.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. [root@station at]# atq 11 2003-06-18 02:00 a hogan 12 2003-06-18 01:59 a ventura 384 .txt. Dado que hogan no quiere teclear este comando y todas las opciones a cada rato. 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. crea un guión corto con el (o los) comando(s) que desearía ejecutar en un archivo llamado fanmail.

La tercera acción es cambiar el directorio actual del proceso al directorio actual de trabajo de la shell que sometió el trabajo..com. el cual pertenece al usuario ventura.) root observa los siguientes aspectos de la conducta del script: 385 . (En este listado largo. el guión está listo para ejecutar el trabajo sometido. export HISTSIZE USER=ventura. export G_BROKEN_FILENAMES XAUTHORITY=/home/ventura/. export XAUTHORITY cd /home/ventura || { echo 'Execution directory inaccessible' >&2 exit 1 } lpr bogus_fanmail.Curioso por lo que ventura piensa hacer. después de toda esta inicialización..sh\ %s. export HOSTNAME HISTSIZE=1000. export LOGNAME .. root fisgonea dentro del directorio spool de at. Si el trabajo enviado crea nuevos archivos.. se han borrado varias líneas y se han remplazado por ". los archivos tendrían los permisos esperados. Al almacenar toda esta información con el trabajo sometido. en este caso lpr bogus_fanmail. porque el guión crearía la umask apropiada. [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.rdu.txt (En este listado largo.redhat. Por último. export USER LOGNAME=ventura. el entorno se establecería como se espera y así sucesivamente.".) 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.". LESSOPEN=\|/usr/bin/lesspipe. Examina el contenido de su nombre de archivo spool llamado de forma críptica a0000c010c8887.txt. export LESSOPEN G_BROKEN_FILENAMES=1. el demonio atd es capaz de reconstruir el entorno de ventura cuando se envía el trabajo. Si cualquiera de los comandos iniciados por el script dependiera de las variables de entorno. La segunda acción es inicializar una colección de variables de entorno para imitar el entorno de shell que sometió el trabajo.xauthqEj97Q... La primera acción del script es la de establecer la umask del proceso a la umask de shell que sometió el trabajo. se han borrado varias líneas y se han remplazado por ".

txt. Envía un trabajo que simplemente ejecuta el comando cal para las 3:45 de la mañana. La primera acción del script es la de establecer la umask del proceso a la umask de shell que sometió el trabajo. 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. en este caso lpr bogus_fanmail. Asegúrese que es el único trabajo programado con esa facultad. el demonio atd es capaz de reconstruir el entorno de ventura cuando se envía el trabajo. La tercera acción es cambiar el directorio actual del proceso al directorio actual de trabajo de la shell que sometió el trabajo. Estimated Time: 10 mins. Por último. 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. porque el guión crearía la umask apropiada. 386 . Si el trabajo enviado crea nuevos archivos. La segunda acción es inicializar una colección de variables de entorno para imitar el entorno de shell que sometió el trabajo.El archivo es un script de shell y debido a sus permisos pudo ejecutarse directamente. después de toda esta inicialización. Deliverables A title Question 1 Un trabajo en espera que generará la salida del comando cal a las 3:45 de la mañana. el guión está listo para ejecutar el trabajo sometido. Si cualquiera de los comandos iniciados por el script dependiera de las variables de entorno. Al almacenar toda esta información con el trabajo sometido. los archivos tendrían los permisos esperados. el entorno se establecería como se espera y así sucesivamente.

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. El archivo crontab utiliza 5 campos para especificar la información de temporización. la stdout de trabajos cron se envía por correo al usuario.0 1572 128 ? hogan 8118 0. las personas encuentran que están realizando tareas en forma sistemática. El demonio suele iniciarse cuando el sistema arranca. Las tareas se administran por el demonio tradicional de Linux (y Unix). Un ejemplo de archivo crontab aparece a continuación. 387 .Programación de tareas periódicas: cron Conceptos clave • • • • La utilidad cron se utiliza para programar tareas recurrentes.0 0. 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. por lo tanto. Los usuarios especifican qué comandos deberían ejecutarse y a qué horas mediante el comando crontab para configurar su "cuadro cron". El servicio cron permite a los usuarios configurar comandos para que se ejecuten con regularidad tal como cada 10 minutos. o dos veces al mes. Al listar todos los procesos y buscar crond puede confirmar si el demonio crond está en ejecución. el demonio crond. El servicio cron El demonio crond es el demonio que realiza tareas periódicamente en nombre del sistema o de usuarios individuales. su administrador de sistema necesitaría iniciar el servicio crond como root. al configurar un archivo conocido como el "cuadro cron" a menudo abreviado en inglés "crontab". la mayoría de usuarios lo pueden ignorar.0 0. una vez cada jueves. Sintaxis crontab Los usuarios especifican los trabajos que se van a ejecutar y cuándo se van a ejecutar. 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. El comando crontab provee un frontend para editar archivos crontab. [hogan@station hogan]$ ps aux | grep crond root 891 0. Discussion Ejecución de tareas periódicas A menudo.

. 1=Monday. Los primeros cinco campos especifican la siguiente información: .----------> | | | . .. 30 y 45 minutos 388 .) 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..# 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. Comandos cron Cualquier otra línea (no en blanco) se considera un comando cron. Variables de entorno Todas las líneas que tienen la forma nombre = valor se utilizan para definir variables de entorno. 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.-------> | | | | .----------------> | . 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)..-> | | | | | | 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. 2=February. Las líneas del comando cron constan de seis campos separados de espacios en blanco.. el cual consta de seis campos descritos a continuación.-------------> | | ..----> | | | | | . n. .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.) day of week (0=Sunday. 15.

9212 installed on Wed Jun 18 11:46:36 2003) # (Cron version -. esta vez especificando el archivo mycopy como un argumento.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). halla que su actual configuración fue leída desde el archivo mycopy. # (/tmp/crontab. [hogan@station hogan]$ crontab -l # DO NOT EDIT THIS FILE . Primero lista su configuración actual crontab en la pantalla.v 1.edit the master and reinstall. 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. Tras listar su configuración una vez más. [hogan@station hogan]$ crontab -r [hogan@station hogan]$ crontab -l no crontab for hogan Con el fin de restaurar su configuración cron.1 2005/03/21 05:24:29 brads Exp $) # set the default language to be english. Opción -e -l -r Efecto modifica el archivo actual lista el archivo actual quita el archivo actual En la siguiente secuencia de comandos.dbk. crontab {[-e] | [-l] | [-r]} crontab ARCHIVO Edita o quita el archivo crontab actual o remplaza el archivo actual crontab con FILE.$Id: 040_crontab. Cuando trata de nuevo de listar la configuración. hogan utiliza el comando crontab una vez más. utilizan el comando crontab para editar la lista o quitarla. se le informa que no existe ninguna configuración actual. luego lista el archivo actual otra vez almacenando la salida dentro del archivo mycopy. hogan quita su configuración de crontab actual. 389 . en cambio. hogan utilizará el comando crontab para administrar su configuración crontab.

9212 installed on Wed Jun 18 11:46:36 2003) # (Cron version -.1 2005/03/21 05:24:29 brads Exp $) # set the default language to be english. el contenido modificado del archivo se instala como la nueva configuración crontab.v 1.Un poco molesto.edit the master and reinstall.edit the master and reinstall. al igual que otros comandos. # (/tmp/crontab. primero puede configurar la variable de entorno EDITOR como /usr/bin/nano (o simplemente nano) y luego ejecutar crontab e. ¿sabe por qué? [hogan@station hogan]$ crontab mycopy [hogan@station hogan]$ crontab -l # DO NOT EDIT THIS FILE .bash_profile y la variable de entorno se establecería automáticamente cada vez que inicie sesión. se utilizará para especificar el editor que se va a abrir. # (mycopy installed on Wed Jun 18 11:47:00 2003) # (Cron version -. Si la variable se ha establecido.dbk. 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. hay dos formas de crear o modificar la configuración crontab.dbk.1 2005/03/21 05:24:29 brads Exp $) # DO NOT EDIT THIS FILE .crontab. examina la variable de entorno EDITOR. Por ejemplo. hogan pudo agregar la línea "export EDITOR=nano" a su archivo . 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. si hogan prefiere utilizar el editor nano.$Id: 040_crontab. En resumen. el banner se ha duplicado en el proceso.$Id: 040_crontab. 390 .v 1. El comando crontab abrirá la configuración crontab dentro del editor predeterminado del usuario. El editor por defecto es /bin/vi. sin embargo. Cuando el usuario termina de modificar el archivo y sale del editor.

Editar su configuración establecida con crontab -e. Cuando el demonio crond inicia el comando del usuario. Suponga que ventura configuró el siguiente trabajo cron: 05 * * * * cal Una vez por hora. 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 ~/.com 05 * * * * cal Variables de entorno y cron Al configurar trabajos cron.redhat. Crear un archivo de texto que contenga su configuración deseada y luego instalarlo con crontab FILENAME. 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.com (Cron Daemon) To: ventura@station. los usuarios deberían tener en cuenta un detalle. 391 . éste no ejecuta el comando desde la shell sino que bifurca y exec el comando directamente.1. no estarán disponibles cuando cron ejecute el comando.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. a la hora y cinco minutos espera recibir un nuevo correo como el siguiente: Date: Wed.bash_profile. Opcionalmente.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. 18 Jun 2003 14:24:00 -0400 From: root@station.

10296 installed on Wed Jun 18 14:17:43 2003) # (Cron version -. while in the text editor.edit the master and reinstall.$Id: 010_text. ventura se da cuenta que ha tenido la mala costumbre de crear archivos muy grandes y luego los olvida. Red Hat Inc.. [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...v 1. 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..dbk...com/training (. [ventura@station ventura]$ crontab -l # DO NOT EDIT THIS FILE . 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.. Con el fin de modificar su configuración en el lugar utiliza el comando crontab -e..) 00 05 * * * links -dump http://www. # (/tmp/crontab.redhat.com/training ventura ahora puede esperar recibir correo electŕonico. Control de archivos grandes Luego. 392 . configura un trabajo cron el cual le enviará cada domingo un correo con una lista de todos los archivos mayores de 100k.redhat. 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. and quits the text editor.using an empty one (. Con el fin de ayudarse a recordar los archivos grandes que está dejando atrás.1 2005/03/21 05:24:29 brads Exp $) 00 05 * * * links -dump http://www.) crontab: installing new crontab Luego confirma que su trabajo cron esté en su lugar. ventura adds the following line.

$Id: 010_text. crea un guión llamado cron.using an empty one (.10678 installed on Wed Jun 18 14:50:39 2003) # (Cron version -..weekly bin/ [ventura@station ventura]$ chmod 755 bin/cron.[ventura@station ventura]$ crontab -e no crontab for ventura .weekly Luego. [ventura@station ventura]$ cat cron..com/training 10 05 * * 0 find $HOME -size +100k Ahora.weekly..v 1.) 05 05 * * 0 find $HOME -size +100k (.) crontab: installing new crontab [ventura@station ventura]$ crontab -l # DO NOT EDIT THIS FILE .dbk. En lugar de complicar su archivo cron. and exits the text editor . modifica su configuración crontab para que su guión se ejecute como un trabajo cron una vez por semana: 393 . los domingos a las 5:10 de la mañana.. # (/tmp/crontab.redhat. ventura adds the following line. lo coloca en el subdirectorio bin y lo hace ejecutable.. 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. ventura puede esperar recibir un correo electrónico listando todos los archivos mayores de 100 K bajo su directorio de inicio.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. Ejecución de scripts desde cron Continuando con sus esfuerzos de no desperdiciar espacio duro.edit the master and reinstall.1 2005/03/21 05:24:29 brads Exp $) 00 05 * * * links -dump http://www...

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

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

Ejercicios en línea Control de quién está en el sistema. Deliverables A title Question 1 1. Configura un trabajo cron que le enviará por correo la salida del comando who diariamente a las 4:35 de la mañana. Especificaciones Está un poco paranóico y quiere controlar quién está usando su computador en la noche. 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.

La mayoría de los servidores de red Linux y clientes se comunican mediante el protocoloTCP/IP. El servidor Los vendedores y los servicios de red efectivos comparten las siguientes características. mientras que el comando netstat -tuna se puede utilizar para examinar todos los puertos abiertos. 397 . sólo el usuario root puede administrar procesos del servidor. Con el fin de apreciar las diferencias. • • • • • Discussion Clientes. 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. Las aplicaciones de cliente de red suelen ejecutarse únicamente cuando están en uso y las puede iniciar cualquier usuario. 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. 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. un cliente comprando una barra de caramelo a un vendedor. Hablaremos del protocolo TCP/IP como si fuera el único protocolo disponible en Internet. El comando hostname puede utilizarse para examinar la dirección IP actual de la máquina. 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.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 diseño de (aplicaciones que actúan como) clientes de red y (aplicaciones que actúan como) servidores de red difiere dramáticamente. los compararemos con los agentes en una relación cliente-servidor. Por lo general. tales como entregar el contenido de las páginas web o dar la hora actual. A menudo. los puertos bien conocidos residen en el rango de puertos privilegiados por debajo del puerto número 1024. 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 servidores de red suelen utilizar puertos asignados denominados puertos "bien conocidos" como se catalogan en el archivo /etc/services. Los clientes de red suelen utilizar puertos privilegiados de modo aleatorio. 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.

Por lo general. sólo el usuario root puede iniciar o cerrar procesos que funcionan como servidores de red. cada uno se identifica con una dirección IP y un número de puerto. Más adelante veremos esto detalladamente. cuya analogía más cercana podría ser una extensión telefónica asociada a un número de teléfono. para localizarse entre sí. En Linux (y Unix) dichos procesos se conocen como demonios. el kernel debe asignarle primero un número de puerto. Los computadores en una red se identificans con una dirección IP. Los servidores tienen sitios bien conocidos Además de estar disponibles cuando un cliente necesita el servicio. incluso cuando no hay clientes. Cuando alguien hace un receso para ir a almorzar. 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.168. Además.Los servidores están altamente disponibles Así como un vendedor siempre debe utilizar la registradora. Cada vez que un proceso quiere participar en una conversación TCP/IP con otro proceso. El protocolo TCP/IP permite dos procesos. 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"). en los directorios telefónicos y encontrarlos por dirección postal. Además. Por lo general. Un cliente no se estará en una tienda de caramelos todo el día por si decide comprar un caramelo. el cual se convierte en la dirección IP utilizada para tener acceso al servicio. los vendedores se están dónde saben que los clientes los pueden encontrar. los procesos que ejecutan servicios de red necesitan estar ejecutándose. 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. todo proceso en una conversación TCP/IP debe tener un número de puerto. El cliente Por el contrario. 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. 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). Así como los clientes pueden buscar la ubicación de vendedores de caramelos desconocidos.0. Esta representación suele conocerse de modo informal como un quad punteado. cierra su navegador de red. 398 . Direcciones TCP/IP Todo proceso que participa en una conversación TCP/IP debe tener una Dirección IP. los clientes de red pueden ubicar servidores de redes desconocidas mediante un hostname. listos para suplir los servicios cuando se soliciten. Nuestro cliente no se queda todo el día en casa por si alguien pasa a venderle una barra de caramelo. pueden moverse de un lugar a otro. La dirección IP viene en forma de cuatro números enteros. así como cada participante en una conversación debe tener un número telefónico. los clientes no necesitan permanecer en sitios bien conocidos. el cliente de la tienda de caramelos no necesita estar ni altamente disponible ni ser muy conocido. Del mismo modo. las aplicaciones de cliente no necesitan tener direcciones fijas. Los procesos en computadores se identifican con unnúmero de puerto.3.

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

Únicamente los procesos ejecutándose como el usuario root pueden enlazarse a puertos privilegiados. mencionamos que el proceso httpd solicitó bind al puerto 80. 400 . ¿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). el proceso mozilla solicitó connect al puerto 80 del servidor. y en retorno.Figure 2. se conocen como servicios bien conocidos. y los puertos asignados a ellos se mantienen en el archivo /etc/services. no podría iniciar una versión falsa de un servidor de red que podría distribuir información falsa). 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. En un principio. En máquinas de Linux y (Unix). 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. Puertos privilegiados A diferencia de los clientes. los procesos que ejecutan servidores de red suelen solicitar el puerto al que quieren vincularse. 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.com. Múltiples sockets TCP/IP Más acerca de puertos Servicios bien conocidos y el archivo /etc/services En nuestro ejemplo. el catálogo de servicios bien conocidos. (esto ayuda a asegurar que si elvis tuviera una cuenta en la máquina academy. los puertos bien conocidos y los puertos con privilegios pretendian coincidir pero en la práctica hay más puertos bien conocidos que privilegiados.redhat.

9 ¿Qué sucede si hay múltiples direcciones IP? El diseño del comando hostname es un poco equívoco. No obstante. Uso del comando netstat para ver los puertos abiertos Cuando un puerto es utilizado por un socket se le conoce como puerto abierto. Infortunadamente. sockets locales "Unix" utilizados para comunicarse entre procesos en la misma máquina. 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. El comando netstat sirve para ver una variedad de información de redes incluyendo los puertos abiertos. En dichas situaciones. no hay razón para que cualquier dirección IP tenga prioridad sobre las otras. 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. Table 1.example. sin argumentos. por ejemplo). no solo porque cuando se combinan producen una salida interesante.62. la dirección IP de la máquina se visualiza en su lugar. sino porque también son fáciles de recordar: por ejemplo. cuando se llama con las siguientes opciones se ve información más interesante. 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. [elvis@station elvis]$ hostname station.Determinar los servicios actuales de red TCP/IP Uso de hostname para visualizar la dirección IP actual El comando hostname. cuando un comando es llamado sin ninguna opción la salida del comando netstat se inunda de información poco interesante. para mayor información acuda a la página de manual netstat(8). Sin embargo. 401 . por razones históricas.com [elvis@station elvis]$ hostname -i 172. "tuna" (atún). Las siguientes opciones se escogieron. muestra el nombre del equipo de la máquina actual. Con la opción -i.16.

0.0.. sockets locales "Unix" utilizados para comunicarse entre procesos en la misma máquina.1:631 tcp 0 0 172. 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.1:32769 127.0:* tcp 0 0 127.0.0.0.0:* tcp 0 0 127.0. En dichas situaciones. 402 .16.0.0:111 0.0.0:* .0.0.0.0.1:631 0.0.62.0. 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...62.0.0.0.0.1:25 0.16.0:32768 0.62.1:631 tcp 0 0 127.0:* tcp 0 0 0.0.0.0.8:22 udp 0 0 0.1:631 127.0.0.0.Cuando se invoca con las siguientes opciones.0.0.0:* tcp 0 0 0.16.0.16.0.9:32848 172.0.0:* udp 0 0 0.1:33953 127.0.0:* tcp 0 0 127.16.0. No obstante. cuando un comando es llamado sin ninguna opción la salida del comando netstat se inunda de información poco interesante.1:33952 127.0:443 0.0.9:33325 172.0.0:* tcp 0 0 0.0. no hay razón para que cualquier dirección IP tenga prioridad sobre las otras.0.9:32903 172.0..62.0.8:6001 .0.0.8:6001 tcp 0 0 172. cuando se llama con las siguientes opciones se ve información más interesante.0:22 0.0.0.0.62.0. tcp 0 0 172.8:6001 tcp 0 0 127.0.0:80 0. Sin embargo. El comando netstat sirve para ver una variedad de información de redes incluyendo los puertos abiertos.1:32768 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:* tcp 0 0 0.9:34387 172. tcp 0 314 127.0.16.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.0.0.0:* tcp 0 0 0.0..0. Infortunadamente.0:* tcp 0 0 0.62..0.62.0.0.0.0. la salida de netstat es similar a la siguiente.0:777 0. por ejemplo).0.1:32769 tcp 0 0 172.16.0:177 0. por razones históricas.1:631 . 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.0.0.0.0:6000 0.62.

0:* .62.1:631 0.62.16.0.0.0.0.0:* udp 0 0 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.0. Cuando se invoca con las siguientes opciones.0. De las muchas líneas.0.16.0.0.0.0.8:6001 ESTABLISHED tcp 0 0 127.8:6001 ESTABLISHED .16.1:631 ESTABLISHED tcp 0 0 172.0.0:177 0.0. "tuna" (atún).0:111 0.0:* LISTEN tcp 0 0 0.0.0:443 0.0. La dirección IP y el número de puerto de la mitad local del socket.1:32768 0.0:80 0.62.0:* LISTEN tcp 0 0 0.0.9:34387 172.9:33325 172.0.16..0.0:* LISTEN tcp 0 0 127.1:25 0. 403 .0.0:32768 0. El estado de la conexión TCP.0.0.0..1:32769 ESTABLISHED tcp 0 0 172. podemos retirar aquellas asociadas con el protocolo udp y concentrarnos en las columnas 4. 5 y 6 de las filas asociadas con tcp..0.0. 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.1:631 TIME_WAIT tcp 0 0 127.0.0.62.1:32769 127. sino porque también son fáciles de recordar: por ejemplo.0.0.9:32903 172. Table 2.0.0.0. La dirección IP y el número del puerto de la mitad remota del socket.0:* LISTEN tcp 0 0 0.0.9:32848 172. la salida de netstat es similar a la siguiente.0..0.0:* LISTEN tcp 0 0 0.0.0:6000 0.0.0.0.0. Nos referiremos a los sockets tcp.62.0.16.62.0.62.1:33953 127.0.8:22 ESTABLISHED udp 0 0 0.0:* LISTEN tcp 0 0 127.0..0.0.0:22 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:33952 127.1:631 127.0.Table 1. Nos referiremos a los estados más interesantes LISTEN y ESTABLECIDO.0.0.0.16. tcp 0 314 127. para mayor información acuda a la página de manual netstat(8). tcp 0 0 172.0:777 0.0.0. Las siguientes opciones se escogieron.62.8:6001 ESTABLISHED tcp 0 0 172.16.0:* LISTEN tcp 0 0 0.0.0.0.0.16..0.0.0:* LISTEN tcp 0 0 127.0.0.1:631 TIME_WAIT .0. no solo porque cuando se combinan producen una salida interesante.0:* LISTEN tcp 0 0 0.

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

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. Probablemente es el demonio de impresión cupsd. Especificaciones 1..16.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). conectado al servicio enlazado al puerto 22 en nuestra máquina remota.1/ipaddr que contenga su dirección IP de máquina como lo reporta el comando hostname como su única palabra. El primero está conectado al puerto 32769 (probablemente un puerto cliente asignado de modo aleatorio) y el segundo al puerto 631. Crear el archivo ~/lab11. Ambos servicios se tratarán más adelante en este cuaderno. 405 .0.8.0. Algunos procesos en la máquina local deben estar comunicándose con el demonio cupsd. [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.0. El proceso de escucha en el puerto 631 está escuchando clientes de impresión.9:34387 172.0. tcp 0 0 172. trataremos de llamar a grep para buscar el servicio bien conocido asociado con el puerto 22. cualquier proceso que haya solicitado el puerto 25 está escuchando clientes de correo electrónico.62. Ejercicios en línea Lab Exercise Objetivo: Familiarizarse con la configuración y actividad TCP/IP.62. [elvis@station elvis]$ grep 22 /etc/services ssh 22/tcp ssh 22/udp imap3 220/tcp imap3 220/udp . De nuevo.1:32769 127..pero no desde la red.62.16.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. Estimated Time: 10 mins. Probablemente es el demonio sendmail. Para determinar a qué servicios pertenecen estos puertos ejecutamos un grep desde el archivo /etc/services. # # # # SSH Remote Login Protocol SSH Remote Login Protocol Interactive Mail Access Protocol v3 Aparentemente. tcp 0 314 127.

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

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

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. es definir y nombrar correctamente la cola de impresión para el recurso. • • • Un directorio de almacenamiento temporal donde se pueden almacenar los trabajos pendientes. elegir un filtro apropiado para el dispositivo. 408 .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. 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. se listan algunos de los dispositivos secundarios admitidos por CUPS. Esto generalmente implica identificar cuáles de los dispositivos secundarios anteriores se utilizan para acceder al dispositivo. Un dispositivo secundario. tal como una impresora conectada localmente o una cola de impresión definida en una máquina remota. A continuación. Una serie de filtros que transforman archivos de entrada en formatos apropiados para cualquier dispositivo secundario conectado a la cola.

gnome-print-manager puede utilizarse para identificar las colas de impresión y controlar los trabajos de impresión sometidos a ellas.. 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. Lista el estatus de la impresora. Figure 1. su argumento se utiliza para especificar la cola de impresión. vea la página de manual lpstat(1). 1. Someter y administrar trabajos: lpr.com:631/printers/exec .com:631/printers/checks device for coms: ipp://printsrv. incluída la cola por defecto y el dispositivo secundario asociado con cada cola.com:631/printers/acct_ire device for ba: ipp://printsrv. el comando lpstat se puede utilizar para escanear las colas de impresión disponibles desde la línea de comando. si existe. El administrador de impresión GNOME Cuando el entorno gráfico no está disponible.com:631/printers/coms device for exec: ipp://printsrv. [elvis@station elvis]$ lpstat -s system default destination: printer device for acct2_ire: ipp://printsrv. Todos los tres comandos utilizan las siguientes técnicas para especificar qué cola de impresión utilizar en el orden especificado.com:631/printers/ba device for checks: ipp://printsrv.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. Table 1. La siguiente línea de comandos sirve para clasificar el comando lpstat. 2.example.example. que parecen referirse a la cola de impresión IPP en un servidor de impresora local. o incluso cuando lo está. 409 . Si se halla la opción -P.com:631/printers/acct2_ire device for acct_ire: ipp://printsrv.example. se llama simplemente "printer" y que tiene varias colas de impresión disponibles.. Para mayor información. En el entorno gráfico. Lista todos los trabajos importantes Lista todas las colas de impresión y si están inactivas u ocupadas. A continuación. Opciones para el comando lpstat Opción -a -o -p -s Efecto Lista estado de aceptación de todas las colas de impresión.example.example. 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. lpq examina el estatus de trabajos de impresión importantes y lprm quita trabajos de impresión pendientes en la cola. entonces se utiliza la variable de entorno PRINTER. elvis descubre que su cola de impresión de sistema por defecto.example. Si no se utiliza -P para definir la cola de impresión por defecto.

nombre del trabajo y el sello de fecha. Table 1. a continuación. Las siguientes opciones sirven para clasificar el comando lpr. luego utiliza el comando lprm para quitar su trabajo de la cola legal. blondie somete la salida del comando df para la impresora legal y luego examina el contenido de la cola. blondie utiliza el comando lpr para imprimir el archivo README mediante la cola de impresiónsales. De otra manera. [blondie@station blondie]$ lpr -P sales README Control de trabajos con lpq El comando lpq lista los trabajos pendientes en una cola. se utiliza el sistema de cola de impresión por defecto. Imprime # copias Representa archivos de texto con un encabezado que contiene el nombre del archivo. Someter trabajos con lpr Los trabajos pueden someterse con el comando lpr. Primero configura la variable de entorno PRINTER para reflejar sus nuevas preferencias.3. Borra los archivos de impresión nombrados después de imprimir. Opciones del comando lpr Opción -P impresora -# -p -r Efecto Uso de la cola de impresión impresora. Todos los argumentos son interpretados como archivos para someter. En el siguiente ejemplo. Si no se especifican argumentos en su lugar se lee la entrada estándar. 410 . [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. A manera de ejemplo.

para que. 411 . En la siguiente toma de pantalla del diálogo de impresión de la aplicación Evolution. en los días precedentes a CUPS. La segunda utilizó lp. consulte la página de manual lp(1). la mayoría de los clientes interactúan con el demonio cupsd mediante el protocolo IPP. se implementaron dos ejecuciones paralelas de la infraestructura de impresión. incluyendo el servidor de las páginas de administración de estilo CGI. Para mayor información. el campo Printer inicialmente sólo contenía un lpr. Como se mencionó. pero blondie añadió la opción -P sales para que la salida de evolution vaya a la impresora sales. y lprm. seríamos negligentes si abandonáramos el tema de CUPS sin mencionar la interfaz de red nativa que el demonio cupsd brinda.[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. lpq. Diálogo de impresión de Evolution La interfaz de red CUPS Por último. Debido a su parecido. lpstat y cancel para tareas análogas. Ya hemos visto que lpstat es compatible y es la herramienta preferida para descubrir colas de impresión. las aplicaciones permiten a los usuarios personalizar la línea de comando lpr. la variable de entorno PRINTER implícitamente especificó la cola de impresión sales. Figure 1. Por lo general. por ejemplo. el cual es una extensión del protocolo HTTP. Los comandos lp y cancel también están disponibles como variaciones leves de los comandos lpr y lprm. Los comandos de Front End alternativos: lp y cancel En Unix. el demonio cupsd se comporta en muchas formas como el demonio de web. se pueda especificar una cola de impresión diferente a la cola de impresión por defecto. 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. La primera utilizó los tres comandos presentados anteriormente es decir lpr.

Configuración Su estación debería configurarse con una cola de impresión llamada rha_faux. Desde su navegador de red. Imprima el archivo /etc/services mediante la cola de impresión rha_faux y observe su 2. Usted puede ver la primera página de cualquier trabajo de impresión enviado a la impresora en el classroom server. pero sobreescriba el puerto 80 por defecto con el puerto de servicio bien conocido de los demonios de CUPS. http://rha-server/cgi-bin/rha/printer. 3. 412 . 631. 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. Imprima el archivo /usr/share/backgrounds/tiles/floral. consúltele a su instructor. Tres trabajos de impresión sometidos a la cola de impresión rha_faux. 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. http://rha-server/cgi-bin/rha/printer.png mediante la cola de impresión rha_faux y observe su salida. Figure 1. Deliverables A title Question 1 1. imprima la página actual directamente a la cola de impresión rha_faux.Con el fin de ver las páginas de administración de CUPS. Estimated Time: 10 mins. salida. Especificaciones 1. La página de inicio de administración de CUPS Ejercicios en línea Lab Exercise Objetivo: Administrar trabajos de impresión efectivamente. apunte un navegador de red hacia la dirección de la máquina local. Esta cola de impresión se anexa a la impresora virtual en ejecución en el servidor del aula de clase.

el resto del archivo se interpreta como un guión PostScript. A diferencia de la mayoría de los formatos gráficos. mpage pueden reordenar las páginas individuales de un documento PostScript. En Linux (y Unix) una aplicación llamada Ghostscript o simplemente gs ejecuta un intérprete PostScript. pero debe utilizar un intérprete para entregar archivos PostScript como imágenes. Entrega de gráficos PostScript con GhostScript Cuando se invoca como el comando gs. 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. el intérprete Ghostscript puede utilizarse para traducir archivos PostScript directamente en la pantalla. PostScript es un lenguaje de guiones de gran alcance. enscript convierte archivo de texto en PostScript decorado. 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. sino a un archivo PostScript titulado output. ps2pdf y pdf2ps convierten de PostScript a PDF y viceversa. Por ejemplo. Muchas impresoras ejecutan intérpretes PostScript originales y se conocen como impresoras PostScript. 413 . 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]. gs y ggv ven con anticipación los documentos PostScript. La sofisticación del lenguaje PostScript le permite realizar trabajos complejos. Figure 1. un archivo PostScript es un archivo de texto sencillo que comienza con el "mágico" PostSript%!PS.ps. 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.Administración de archivos de impresión Conceptos clave • • • • • El formato de impresión primario en Linux es PostScript. la mayoría de las impresoras esperan recibir texto ASCII o gráficas mediante el formato PostScript.

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

Opciones comunes para Ghostscript Opción -dNOPAUSE -dBATCH -q Efecto No hace pausa y espera un RETURN después de traducir cada página. Opera "calmadamente" (no presenta un mensaje por cada página traducida). Table 1.[elvis@station elvis]$ gs --help GNU Ghostscript 7. CA. El siguiente cuadro resume algunos de las opciones de Ghostscripts más utilizadas. Sale automáticamente después de traducir la última página. 415 .. 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 . |command for pipe. 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: . Usage: gs [switches] [file1. muchos de los dispositivos se refieren a formatos gráficos de impresoras sin PostScript o fax. Mientras algunos de estos "dispositivos" de salida tales como jpeg y png256. se refieren a los formatos estándar para archivos gráficos.ps .for stdout.05 (2002-04-22) Copyright (C) 2002 artofcode LLC. Benicia.ps file2..] Most frequently used switches: (you can use # in place of =) -dNOPAUSE no pause after page | -q `quiet'.. 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.. All rights reserved.

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

elvis ahora utiliza el comando ps2pdf para convertir su archivo output. 8-bit colormap.p* 80 output. Figure 2. el cual permite al usuario especificar una línea de comando lpr o un destino de archivo PostScript. 8-bit colormap. La sintaxis del comando ps2pdf es trivial. En la práctica. version 1.ps: PostScript document text conforming at level 3. ggv ocasionalmente tiene problemas interpretando documentos PDF. 612 x 792. El botón del icono de impresora abre el siguiente diálogo.ps output. Pronto veremos una aplicación más estable para visualizar los PDF. Escala dinámica: La imagen puede hacerse a escala para ajustar la anchura y altura de la ventana o un porcentaje arbitrario.1. Algunos documentos PostScript multi-páginas pueden también confundir a ggv.2. 417 .0 [elvis@station elvis]$ ls -s output. el traductor de PostScript gs puede utilizarse directamente.* output.pdf: PDF document. [elvis@station elvis]$ ps2pdf output. pero mucho más compacto. Puesto que la sintaxis del comando gs puede ser tan engorrosa. 2.2 output. 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). 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. 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. A manera de ejemplo rápido.ps Figure 1. non-interlaced output.png: PNG image data. Extracción de páginas mediante el visor PostScript Ghoscript de GNOME En teoría. la aplicación Ghostview también sirve para ver archivos PDF. 612 x 792.pdf 1400 output. Conversión de documentos PDF La utilidad gs puede utilizarse para convertir documentos PDF en cualquiera de los formatos de salida listados anteriormente.pdf [elvis@station elvis]$ file output.png: PNG image data. Impresión desde xpdf Otras alternativas para ver documentos PDF incluyen los comandos gs y ggv.ps en formato PDF.Las flechas en la esquina inferior izquierda permiten al documento navegar una página o 10 páginas al mismo tiempo. Figure 2. En casos en que ggv tiene problemas para traducir un documento PostScript. non-interlaced output. 1. Visor PostScript del Ghostview de GNOME La aplicación Ghostview de GNOME ofrece principalmente las siguientes características.

imprimir o convertir documentos PDF en PostScript. un encabezado o impresión de múltiples páginas de texto por página impresa. pero mucho más compacto. La sintaxis del comando ps2pdf es trivial.ps [elvis@station elvis]$ ggv malloc. 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.ps en formato PDF. El botón del icono de impresora abre el siguiente diálogo. De un modo un poco torpe. Table 1. dando como resultado que los archivos enscript se impriman inmediatamente. A manera de ejemplo rápido. 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. Figure 2. Algunas de las opciones más comunes se encuentran en el siguiente cuadro. Opciones más comunes para enscript 418 . a menudo representando el texto con sintaxis resaltada (pretty printing). Impresión desde xpdf Otras alternativas para ver documentos PDF incluyen los comandos gs y ggv. Puesto que la sintaxis del comando gs puede ser tan engorrosa. [elvis@station elvis]$ enscript -r2 -E -G -o malloc. algunas utilidades frontales de línea de comando más sencillas están disponibles para convertir PostScript en PDF: ps2pdf y amigos. elvis ahora utiliza el comando ps2pdf para convertir su archivo output.h [ 2 pages * 1 copy ] left in malloc. Representación del texto para impresión con enscript La utilidad enscript convierte archivos de texto en PostScript.ps El comando pdf2ps también existe para realizar la operación inversa. Figure 1. el cual es de calidad comparable.ps /usr/include/malloc. 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. el comando enscript envía un archivo de texto directamente al comando predeterminado lpr. 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).

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

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

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

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

conoce como MTA Agente de Transporte de Correo y la segunda se conoce como MUA. Cuando éste recibe correo desde un MTA remoto destinado a un usuario en una máquina local. En Linux (y Unix). donde recibe conexiones de otros MTA. 423 . realizando el trabajo de una oficina postal. 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. o Agente de correo de usuario. El MTA también se enlaza al puerto local 25. Si el remitente de MTA no puede contactar el receptor de MTA. Figure 1. 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. varios de los cuales se describirán en ésta y en la siguiente lección. 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. Red Hat Enterprise Linux se distribuye con una amplia selección de MUAs. recibe el correo y lo almacena en un directorio de almacenamiento temporal conocido como el buzón de entrada del usuario. El MTA recibe correo electrónico para ser envíado desde programas en la máquina local. el correo se almacena temporalmente en la máquina del remitente y el MTA de remitente intenta de nuevo más tarde. El MUA recupera correo enviado desde un almacenamiento temporal (buzón de entrada) y lo presenta al usuario como "correo nuevo". El MTA por defecto de Red Hat Enterprise Linux es un demonio llamado sendmail. quienes deben estar escuchando el puerto 25. 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. El MUA permite a los usuarios escribir respuestas o nuevos mensajes y pasar estos mensajes al MTA local para envío.

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

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

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 MTA en el servidor SMTP desea aceptar correo de máquinas "locales". puede esperar correo que sea enviado al directorio de almacenamiento temporal y pasa al MTA de correo local para envío. a pesar de que no es el destinatario final para el correo electrónico. en situaciones tales como envío de correo a usuarios locales. ni puede ser configurado para utilizar un servidor SMTP para correo saliente. el almacenamiento temporal y el reenvío de correo pendiente es ahora responsabilidad del servidor SMTP. donde el correo electrónico se dirige únicamente al nombre de usuario tal como blondie. el comando mail puede ser bastante eficaz. [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 MUA mail Quizás el MUA más sencillo es un comando llamado simplemente mail. El comando mail data de los primeros días de Unix y por lo tanto depende altamente del MTA local. En su lugar. Envío de correo electrónico con mail 426 . El comando mail no puede ser configurado para acceder al correo desde un servidor POP o IMAP. No obstante. En su lugar. el servidor SMTP transmite el correo y lo reenvía a su destino. 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. Linux (y Unix) también permite a los usuarios en una máquina local enviar correo electrónico entre sí. Si se presenta algún problema.

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

12 Apr 2003 13:08:30 -0400 >>> EHLO station.0.1.0.old" | mail -s "find output" nero Protocolo sencillo de transporte de correo Mediante un simple comando de correo con la opción verbosa.. -name "*.. elvis@localhost.1] via relay.12.1] >>> QUIT 221 2. Sender ok >>> RCPT To:elvis@station.example.0.8/8.com SIZE=60 250 2.1.8.0 station..0.0 h3CH8U3j002250 Message accepted for delivery elvis@localhost.com 250-station.5 elvis@station. 220 station.com Hello localhost.12...1].. Sent (h3CH8U3j002250 Message accepted for delivery) Closing connection to [127.com. un usuario puede observar el proceso por el que pasa sendmail para entregar un mensaje. Estimated Time: 10 mins.. [julius@station julius]$ find . Sat.0. 250 2.example.0.com >>> DATA 250 2..0.com.example. Recipient ok 354 Enter mail.0. end with "..example.example.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.0 julius@station.com ESMTP Sendmail 8.example. Connecting to [127. Especificaciones 428 ." on a line by itself >>> .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.localdomain [127.example.. [julius@station julius]$ mail -v -s hello elvis@localhost this is only a test .com closing connection Ejercicios en línea Lab Exercise Objetivo: Enviar correo electrónico a usuarios locales.

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. cuentas primaria y alterna (i. depósito de correo entregado. Sus cuentas alternas primera y segunda tienen el contenido del archivo /proc/cpuinfo en su 2.e.1. Utilice el comando mail para enviar por correo el contenido del archivo /proc/cpuinfo a sus 2. los usuarios nombredeusuario_a y nombredeusuario_b. 429 . (obviamente. 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. sus nombres de cuentas alternas primera y segunda deben incluirse en esta lista). Deliverables A title Question 1 1. donde nombre de usuario es el nombre de su cuenta primaria.e. su directorio de almacenamiento temporal entregado pero no leído aún). Debe incluir usuarios de "sistema" en su lista y listar un usuario por línea.

Lo invitamos a experimentar con estos elementos cuando el tiempo se lo permita. el correo se puede clasificar en una jerarquía de carpetas navegables mediante el recuadro en la parte superior izquierda. un menú emergente ofrece una variedad de acciones. 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. Al elegir "Agregar remitente a agenda de direcciones" se pueden crear nuevos contactos fácilmente. tales como almacenar el mensaje como archivo de texto. En la toma de pantalla siguiente verá que también tiene herramientas para administrar contactos. pero la lección se enfocará en el uso de evolution para envío y recepción de correo. se presenta un resumen de mensajes almacenados en la carpeta actual seleccionada. "marcando" el mensaje con una bandera particular.El MUA Evolution Conceptos clave • • • • El MUA evolution ofrece un entorno sofisticado para la administración de correo electrónico. En el recuadro de la parte inferior derecha se visualiza el contenido del actual mensaje. evolution permite enviar correo desde el depósito de correo local y servidores POP o IMAP. "etiquetando" el mensaje en un color determinado o identificando el mensaje como correo basura. El correo electrónico de entrada puede procesarse automáticamente mediante un filtrado sofisticado. Discussion Evolution Quizás el MUA más sofisticado que se distribuye con Red Hat Enterprise Linux es evolution. En la parte superior derecha del recuadro. 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. En esta sección. calendario de eventos y listas de tareas. De hecho. 430 . Evolution es mucho más que un MUA. Haciendo "click derecho" en un mensaje. El agente de usuario de correo es apenas un componente del administrador de la información personal de evolution. El agente usuario de correo Evolution Desde la pantalla principal. responder a un mensaje o reenviar el mensaje. Navegar correo electrónico Figure 1. 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.

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

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

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

No obstante. utilizando una referencia absoluta como en el ejemplo a continuación. 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. En Linux (y Unix).255 Mask:255. n se remplaza por un número entero para cada instancia de un dispositivo determinado conectado a una máquina. las interfaces de red sí.8 Mb) TX bytes:22911068 (21.0.0.0. el cual muestra la dirección IP en su equipo local.168.51 Bcast:192.255. éste vive dentro del directorio /sbin. cada dispositivo de red se representa como una interfaz de red.El protocolo DNS requiere que cada máquina tenga disponible uno o más servidores DNS (comúnmente llamados servidores de nombre).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.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.0. los usuarios estándar pueden usar el comando para ver información de configuración de interfaz.0. Esta lección tratará el tema de direcciones IP de interfaces de red en mayor detalle. Table 1.5 Mb) TX bytes:1299754457 (1239. [blondie@station blondie]$ /sbin/ifconfig eth0 Link encap:Ethernet HWaddr 00:00:86:4D:F0:0C inet addr:192. (por una vez. Puesto que el comando suele ser utilizado por root para configurar interfaces. ¡encontramos algo que no es un archivo!). Confirmar la configuración de la interfaz de red El comando ifconfig muestra la configuración de interfaces de red activas. El siguiente cuadro lista algunos de los nombres más utilizados en Linux.0. 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. Linux nombra interfaces de acuerdo con el tipo de dispositivo que representa. Determinar su(s) dirección(es) IP: /sbin/ifconfig En una lección anterior presentamos el comando hostname -i.168.1 Mask:255.8 Mb) 434 . el cual está fuera de la RUTA predeterminada para los usuarios estándar.5 Mb) Interrupt:11 Base address:0xd400 lo Link encap:Local Loopback inet addr:127. En realidad una "máquina" no tiene una dirección IP.

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.255.0.0. En la salida anterior.0.0.168. la cual visualiza la dirección IP asignada a la interfaz. El primer tipo define qué subredes se deben considerar como locales.0 127.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.0. En general.0 Flags Metric Ref U 0 0 U 0 0 UG 0 0 Use Iface 0 eth0 0 lo 0 eth0 435 . [blondie@station blondie]$ /sbin/route Kernel IP routing table Destination Gateway Genmask 192.168.0 127. Al igual que el comando ifconfig.0. El kernel de Linux.0. En la mayoría de los casos.0. Determinar su portal por defecto: /sbin/route Como se mencionó al comienzo de la lección.0 * 255.0.0 192. 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. la primera línea define la subnet asociada con la interfaz de Ethernet (con una dirección IP de 192. Si usted es un usuario estándar.A la interfaz eth0 se le asigna una dirección IP de 192.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".0.example 0.51) y la segunda línea define la subred asociada con la interfaz de bucle local (con una dirección IP de 127.0.168. El segundo tipo de entrada que sirve para definir gateways es el más importante para nuestra discusión.255.0.0.0.168. [blondie@station blondie]$ /sbin/route -n Kernel IP routing table Destination Gateway Genmask 192. La línea importante es la segunda línea.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. el comando puede también utilizarse para manipular el cuadro.0.0 default server1.0 0.0 255.254. Si es un usuario root.0. el comando route vive en el directorio /sbin. para la comunicación con equipos en sus subredes locales se utilizan procedimientos diferentes a la comunicación con hosts en una subnet separada.168. La misma información se puede ver mediante la dirección IP en lugar de nombres del host utilizando /sbin/route -n. los usuarios esperarían ver dos estrofas. al igual que otras kernels.255. 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.255. debería haber una línea que especifique una subred para cada interfaz activa.1).0 0.0 * 255. Este cuadro se llama cuadro de enrutamiento.0.0. por lo tanto los usuarios estándar deben invocarlo mediante una referencia absoluta. Una estrofa con la configuración para una tarjeta Ethernet y otra con la configuración para el dispositivo virtual de bucle local.0.0.0.0 255. el comando route se puede utilizar para ver el cuadro de enrutamiento del sistema.0.254 0. podrá tener problemas para acceder la red.0.

127.254 server1. 436 . su equipo puede comunicarse mediante el protocolo IP sin consultar el servidor de nombres. no una subred local.0.1 localhost. El caracter estándar de comentario de Unix (“#”) también es compatible.com www1 www1. 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.24 rosemont. en la práctica los servidores de nombres parecen ser más necesarios (se le facilita más memorizar academy.168.232.conf Cuando el /etc/hosts local no puede dar respuesta. 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. Configuración DNS dinámica: /etc/resolv.201 z 160. si los usuarios quieren referirse a cada máquina por dirección IP en lugar de nombre de máquina.localdomain localhost rha-server 192.com 192. or various programs # that require network functionality will fail. Si desea comunicarse con máquinas fuera de la subred.254 como su gateway predeterminado. Aunque sólo root puede editar el archivo cualquier usuario puede observarlo.com o 66.0. Usted no puede esperar que el archivo /etc/hosts le responda a todo.0.0.129.0.168.51?).168. La bandera "G" indica que esta línea se utiliza para definir una gateway. Cuando la biblioteca intenta resolver una dirección suele haber dos recursos disponibles. blondie determina que su máquina está utilizando el host 192. Sin embargo.170.com 192.redhat.example. Configuración DNS estática: /etc/hosts El primer recurso es un archivo de texto sencillo llamado archivo /etc/hosts. la biblioteca resolv consulta un servidor de nombres. Con el fin de comunicarse con otras máquinas su equipo debe tener una dirección IP.0.1 station1 station1.example. las entradas pueden agregarse al archivo /etc/hosts mediante un editor de texto sencillo. No obstante. Claro está que esta técnica no escala bien.168. examina el archivo de configuración de la biblioteca de resolv. [blondie@station blondie]$ cat /etc/hosts # Do not remove the following line. /etc/resolv.example. A diferencia de los otros dos aspectos de configuración de red. 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.com dhcp-1116-114 r El formato del archivo es sencillo.187.168.Aquí. usted debe tener una gateway por defecto.example. 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.conf.com server s 192.168. Para determinar qué máquina consultar que esté ejecutando un servidor de nombres.51 station51 station51. un servidor de nombre es hasta cierto punto opcional.

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

Examen de ruta: /usr/sbin/traceroute Cuando se conecte a una máquina fuera de su subred.whitehouse.atl1.com (24.563 ms 10.202 ms 8 bb2-cha-P2-0. el problema es un router local mal configurado y su administrador de red local probablemente ayude a resolver el problema.rr.901 ms 10 pop2-ash-P1-0.45) 10.845 ms 39.185.atdn.g.506 ms 26.82) 38.950 ms 29.154) 40.129. El número de routers que su paquete pasa suele conocerse como el número de saltos que ha hecho el paquete.rlghnca-rtr2.392 ms 20.185.net (66. Si su traceroute termina entre la primera pareja o salta (sin alcanzar el destino final).nc.250) 26.887 ms 17 12.829 ms 20.122.252 ms 2 10.880 ms 19.ip.874 ms 4 srp4-0. Si su paquete no puede completar el primer salto.129.com (24.243 ms 0.132.carolina.9.net (66.64.712 ms 9 bb2-ash-P13-0.382 ms 10.031 ms 6 son0-1-1.72.attens. El comando traceroute suele llamarse con un argumento.254) 0.1) 8.798 ms 15.488 ms 7.045 ms 8.att.127 ms 21.9.0.net (12.net (12.atdn.69) 24.006 ms 28.184 ms 50.com (66.665 ms 7 pop1-cha-P4-0.132.net (12.129.211) 26.net (66.140.wswdc.rr.322 ms 26.93.net (66.net (12.174) 29.44.144 traceroute to a1289.rlghncg-rtr1.675 ms 9.25.144) 39. es probable que su gateway por defecto de su máquina no haya sido determinada correctamente.231 ms 29.gov traceroute: Warning: www.ip.att.144 (12.net (12.net (12.atdn.rr.185.nc.934 ms 39.152.99) 7.004 ms 12 tbr1-p014001.nc.185.144).atl1.898 ms Usted hallará con frecuencia que los paquetes toman rutas sorpresivas para ir de un lugar a otro. El culpable suele ser un cable Ethernet que se ha desconectado físicamente de la máquina o de la pared.11.33.26. es probable que el problema esté fuera de control de su administrador de red local.129.rlghncrdc-rtr2.931 ms 5 srp13-0.attens.akamai.079 ms 10.827 ms 15 mdf1-gsr12-2-pos-7-0.72.50) 29.162 ms 0.008 ms 8.wswdc.atdn.185.259 ms 10.rr. Realización de solicitudes DNS de modo manual: host 438 .72.123. Si el comando traceroute se agota a más de cuatro o cinco saltos.123.whitehouse.25. La ruta del paquete.44. el nombre del equipo o la dirección IP de la máquina destino.192 ms 25. 38 byte packets 1 server1 (192.42) 11.att.81) 29. [blondie@station blondie]$ /usr/sbin/traceroute www. cuando pasa de router a router puede trazarse con el comando /usr/sbin/traceroute.178) 4.ip.162 ms 0.122. using 12.371 ms 9.208 ms 11 ATT.815 ms 38.803 ms 39.chrlncsa-rtr6.485 ms 26. El paquete anterior hizo 17 saltos para alcanzar su destino.gov has multiple addresses.146) 10.64.1.628 ms 31.903 ms 16 mdf1-bi8k-2-eth-1-1.atdn.087 ms 21.139.2. 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.72.160.net (66.642 ms 3 srp2-0.856 ms 39. 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.246) 39.080 ms 14 gar3-p370.wswdc.160.com (24.Si no hay respuesta para el comando ping.255.123 ms13 gbr6p20.1 (10. usted no podrá esperar que se presente ninguna comunicación de red de alto nivel.888 ms 22.168. 30 hops max.704 ms 27.129.

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

90.1 (109.136 ms Satisfecha.125.conf search example.[madonna@staton madonna]# /sbin/ifconfig eth0 Link encap:Ethernet HWaddr 00:50:8B:0C:B1:D5 inet addr:109.255.1 PING 109.90.90.86 Bcast:109.125.109.0.0.0.255.90. [madonna@station madonna]# ping 109.0 0.1: icmp_seq=1 ttl=255 time=2. 64 bytes from 109.0. [madonna@station madonna]# /sbin/route -n Kernel IP routing table Destination Gateway Genmask 109.90.com nameserver 109.125.92 ms 64 bytes from 109.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.125. 2 received. time 1004ms rtt min/avg/max/mdev = 2.125.90.1) from 109.0 * 255.255. 0% loss.90.924/0.0.125.125.0.0 * 255.0. cancela el comando y luego examina su configuración DNS.71.0.125.90.125.1 Mb) TX bytes:356094835 (339.125.86 : 56(84) bytes of data.125.0.0 109. examina su información de ruta para determinar su gateway por defecto. [madonna@station madonna]# cat /etc/resolv.90.1: icmp_seq=2 ttl=255 time=2.125.63 440 .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.65 ms CTRL-C --.8 Mb) TX bytes:6124991 (5.90.90.90.0.125.788/2.90.652/2.2 nameserver 66.1 Mask:255.8 Mb) Convencida que su interfaz está activa y utilizando la dirección IP 109.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.90.1 0.1 ping statistics --2 packets transmitted.0.125.0.255 Mask:255.0 127.86.255.5 Mb) Interrupt:11 lo Link encap:Local Loopback inet addr:127.218.75 nameserver 109.

63 ping statistics --13 packets transmitted.yahoo.3.233. 441 .473 ms 2.com www.789 ms 7.48 .71.yahoo.71.787 ms 9.192. trata de nuevo el navegador de red mozilla y tiene éxito.702/6.218.680 ms 11. ella confirma que su servidor de nombres es operacional al realizar unas pocas solicitudes de DNS con el comando host.153 13.2. Sea cualquiera el problema que estaba teniendo debe haberse relacionado con la congestión de red transitoria observada con el comando ping.152. [madonna@station madonna]$ host www.877 ms 8 66.1 3.71.3.63: icmp_seq=11 ttl=54 time=27.com is an alias for enterprise.218.218.71.Puesto que ella todavía no ha llamado el host externo de su subred local. intenta llamar a un servidor de nombres terciario.90..63 (66.redhat.306 ms 7.215.232.187. [madonna@station madonna]# /usr/sbin/traceroute -n 66.257 ms 4 216.com has address 66.252.63 traceroute to 66. 3 received.71.835 ms 6.3 ms 64 bytes from 66. www.125.86 : 56(84) bytes of data.193 11.63: icmp_seq=3 ttl=54 time=11.836 ms 15.com has address 66.com hardware.218.275/19.71.117 ms 7.63 PING 66. [madonna@station madonna]# ping 66.71.123 ms 10.218.yahoo.963 ms Puesto que traceroute retornó dicha solicitud de salida.159.2 ms 64 bytes from 66.71.218. 64 bytes from 66.86.187. 30 hops max. enterprise.7 ms CTRL-C --.276 ms 2.423 ms 3 216.699 ms 5 63.63 9.217.217.218. madonna asume que cualquier problema observado con el comando ping anterior debió haber sido transitorio.yahoo.717 ms Los resultados del comando ping son un poco problemáticos.218.71.173 10.125.redhat.63) from 109.71.com www.redhat.193 [madonna@station madonna]$ host www.169 6.net has address 66..akadns.63). 38 byte packets 1 209. porque la mayoría de sus paquetes se han quitado.218.95 www.70.761 ms 16.63: icmp_seq=7 ttl=54 time=20.akadns.akadns. Convencida de que todo parece estar bien.30 12. 76% loss.766/27.net has address 66.281 ms 2 10.227 ms 15.881 ms 6 64.679 ms 6.66.218.redhat.358 ms 7. En su lugar ella intenta determinar el camino recorrido por los paquetes a la máquina.90.087 ms 6.520 ms 7 64.com.yahoo.293 ms 20.redhat.69. time 12045ms rtt min/avg/max/mdev = 11.net.com is an alias for www.71.50 [madonna@station madonna]$ host hardware.218.63 (66. Por último.218.221 8.218.71.redhat.

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

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

el comando links. la pantalla está activa y los enlaces pueden navegarse mediante teclas de flechas o el ratón. Al utilizar la tecla ESC. La potencia del navegador links es su capacidad para proporcionar una grata experiencia de navegación de red en un entorno de texto. 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). En cambio.Figure 1. los Elinks utilizarán el servidor proxy especificado. 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. 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. Configuración de Elinks para utilizar un servidor Proxy Si se establece la variable del entorno HTTP_PROXY. donde el servidor proxy (al igual que el navegador Elinks) puede especificarse mediante la siguiente sintaxis. se crea un menú que permite al usuario acceder a los diálogos de favoritos. El navegador de texto Elinks Cuando utilice links. http://servername:puerto Buscar los recursos de red con curl En contraste. Este texto tendría dificultades describiendo curl. pero algo más efectivo y suscinto es referirse a la página del manual curl(1): 444 .

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

iso" [1/3]: http://download.2. HTTPS y FTP descarga recursos posiblemente de modo recursivo a las páginas citadas desde las páginas descargadas. curl utilizará el servidor especificado proxy.iso.html si el URL especificó un directorio). Si se establece la variable de entorno http_proxy.redhat.-O -L "http://download. 446 . Si el comando necesita abortarse y luego reiniciarse. Table 1. El comando curl tratará de descargar tres archivos.iso y yarrow-i386-disc3. 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. 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. donde el servidor proxy puede especificarse con la siguiente sintaxis. Inicio de wget Cuando se llama con una URL como su argumento.redhat.com/pub/fe dora/linux/core/1/i386/iso/yarrow-i386-disc{1. Configuración de curl para utilizar un servidor Proxy.pide a curl que examine las descargas parciales existentes y recoja la transferencia donde se abandona. yarrow-i386-disc1. la opción -C . El siguiente cuadro lista algunas de las opciones que pueden utilizarse para modificar la conducta de wget. Opciones del comando wget Opción -i. curl fue redirigido al servidor FTP). Encontrará una lista completa en la página del manual wget (1).3}.com/pub/fedora/linux/core/1/i386/iso/yarrow -i386-disc1. --base URL Efecto Lea la URL para buscar desde el archivo filename. 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.iso.[elvis@station elvis]$ curl -C .fedora.iso --> yarrow-i386-disc1. Debido a la opción -O. Observe el tiempo que le queda a la capacidad actual: 13 horas. el cual puede ser un archivo HTML o liste en modo secuencial el URL como texto. Anteponga URL a todos los enlaces relativos. 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.iso % Total % Received % Xferd Average Speed Time Curr. los archivos se descargarán al directorio local con los mismos nombres. --input-file filename -B. yarrow-i386-disc2.fedora.

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

com/ `-.html |-.com/ `-.robots.index.html | |-.2002/ | | |-.html | | |-.2003/ | `-.com/ |-.robots..oreillynet. Configuración de wget para utilizar un servidor Proxy Igual al comando curl.press_veterans.index.redhat.press_training.html Utilicelo con cuidado. de nuevo utilizando la siguiente sintaxis.html | | |-.commerce/ | | `-.html | `-.robots.robots.html | |-.asp?code=ORA14&portal=oreilly www.html | `-.press_rhacademy.apps/ | |-.index. |-| |-| |-| |-| |-| |-| `-- .txt www.index.com/ `-. 448 .press_bluepoint.safaribooksonline.index.html | | `-. wget utiliza la variable de entorno http_proxy para especificar un servidor proxy.google.html | |-.redhat.txt www.corporate/ | | `-.com/ `-.careers/ | | `-.redhat.txt www.index.com/ `-..contact/ | | `-.html secure..promo.txt rhn.europe. certcities. 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.presscenter/ | |-.about/ | |-.com/ `-.press_rhct.wwoffices/ | | `-.

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

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

[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. una shell puede operar en una máquina remota de un modo tan fácil como la máquina local. el intérprete de comandos de elvis implica que aún está en la estación host. los servidores pueden autenticarse para los clientes como también los clientes se pueden autenticarse para los servidores. El comando se ejecuta en la máquina remota (server1).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. Como resultado. 451 . Al prestar atención al intérprete de comandos de bash en el siguiente extracto. Simplemente al sustituir una conexión TCP para un dispositivo de terminal. Si elvis no especifica el comando a ejecutar. pero la salida estándar es enviada a la máquina local (station). las interfaces se implementan fácilmente a través de conexiones de red. Cuando el comando termina. ejecuta el comando ls /tmp". las aplicaciones que proporcionan esta funcionalidad se conocen como shells remotas. la utilidad rsh abre una shell interactiva en el server1 host. Leen entrada desde el flujo de la salida estándar. Debido a que los servidores de Secure Shell tienen sus propios servidores de pares de claves pública-privada. se puede iniciar una shell interactiva. 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. observe qué comandos se ejecutan y en qué máquina. La aplicación Secure Shell ofrece una shell remota. donde todas las transacciones son encriptadas y los usuarios pueden autenticarse mediante contraseñas tradicionales o esquemas de autenticación de clave pública. 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. En Linux (y Unix). Para utilizar los esquemas de claves de autenticación pública. De modo alterno. La primera shell remota más utilizada fue la aplicación rsh. debe generarse un par de claves pública-privada con el comando ssh-keygen.

[elvis@station elvis]$ Autentificación de Rhosts: ~/.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. 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 falla no es de elvis.com [elvis@server1 elvis]$ hostname server1.rhosts En cada caso. [elvis@station elvis]$ rsh -l elvis server1 cat .[elvis@station elvis]$ rsh -l elvis server1 Last login: Sat Nov 8 18:23:49 from station. la configuración de control de acceso es tan trivial como agregar una línea a un archivo.0) elvis pts/4 Nov 8 18:28 (station) [elvis@server1 elvis]$ exit rlogin: connection closed.rhosts station elvis [elvis@station elvis]$ rsh -l elvis server1 ls -l . el demonio sshd).rhosts y agregó la línea con el host y el nombre del usuario para cada cuenta externa a la cual quisiera otorgarle acceso. antes de poder acceder a su cuenta remota mediante rsh. elvis no necesitó expedir una contraseña. elvis creó el archivo ~/. Con el fin de explotar la configuración ~/. depende del DNS (Servidor de Nombres de Dominio) para autenticar un usuario.rhosts La autenticación depende de un archivo de configuración ~/.rhosts configurado de modo adecuado conocido como la autenticación rhost.e. rsh es un protocolo de texto sin formato. Para rsh. elvis podría invocar una shell en la máquina remota como se muestra a continuación.example. 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. 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. necesitó configurar la cuenta para que le permitiera acceder desde su máquina local.rhosts -rw------1 elvis elvis 16 Nov 8 18:23 . Así como se ilustra con el siguiente comando. La Shell segura El método de autenticación rhost es lamentable. En esencia. Además.rhosts de elvis. En una cuenta remota. sino del diseño del protocolo de autenticación rhost. 452 .rhosts en la máquina remota.example. 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. No obstante. Si se asume que una máquina remota está ejecutando el servicio ssh (i. Además.

[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

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

.midi song2....-.. 465 .media -| -| | -.photos-| -| song1. se le llama estructura de directorio de árbol invertido. 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.alice -| | | | | -| | -..forms | | -| | | -.png picture2. website.. todas las ramas de una sola raíz "/" (léase como "barra oblicua") llamada directorio raíz. docs.home -| | -| | | | -. Por ejemplo.-. puede ver que el directorio website trazado anteriormente puede adjuntarse para extender el diagrama.songs -| | | | | -| | -.. Linux utiliza un sólo árbol de directorios para toda su colección de archivos y directorios.. graphics. | mystuff. 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.elvis -| | | -. como se muestra en la gráfica 1-2. en parte. Las elipses en el diagrama sugieren que hay muchos archivos y directorios que no se muestran aquí. Figure 2.-.bin.... Árbol de directorios iniciando en / -.html website -..midi picture1.etc.. Este árbol de directorios se puede ver. / -.png De la apariencia de ramificaciones de este diagrama es de donde surge la idea de árbol de directorios. | | -| | | -.

midi. sería /home/alice/website. Exploración del árbol de directorios utilizando Nautilus En el entorno gráfico X de Red Hat Enterprise Linux. 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. Cuando haga click 466 . Esto puede hacerse seleccionando el "panel lateral" desde el menú "ver". Ventana Nautilus Como una alternativa. estamos interesados en explorar el árbol de directorios. Esto se conoce como el nombre completamente calificado o FQN. 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. Este tipo de nominación.Al nombrar un archivo o directorio. La cadena de nombres de directorios que le llevan al nombre de archivo es la ruta del archivo. 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. [1] Figure 3. separando cada parte con una barra oblicua (/). En este momento.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. En el escritorio de Red Hat Enterprise Linux. 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 /. así que seleccione "árbol" en el panel lateral superior del menú. primero tenemos que activar el panel lateral de Nautilus. Figure 1. Figure 5. mencionado anteriormente. 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. El archivo song1. El navegador Nautilus Para poder explorar el árbol de directorios utilizando Nautilus. ayuda a garantizar que cada archivo y directorio tenga un nombre único completamente calificado. los usuarios pueden utilizar Nautilus como una herramienta sofisticada para navegar en el sistema de archivos. el FQN del directorio website. En la práctica real. los atajos y las suposiciones por defecto se utilizan para simplificar el tecleado de los nombres de los archivos. Figure 4. Por ejemplo.

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

la usuaria alice. Pero pueden haber otros directorios website en alguna otra parte del sistema. La ruta completa (o absoluta) del directorio de trabajo actual se puede visualizar con el comando pwd (del inglés print working directory). el mismo intérprete de comandos muestra el último directorio de la ruta al cwd. [alice@station student]$ pwd /home/alice/website Cambio de sitio. hay abreviaturas especiales para hacer referencia a ciertos directorios: 468 .El comando cd Como se anotó anteriormente.Primero. Puesto que navegar por los directorios es tan importante. 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. los procesos pueden cambiar sus cwd cuando sea necesario. al trabajar en su directorio website. Esto incluye la shell de comando bash. Uso: cd [DIRECTORIO] Si no se especifica. Uso: pwd La usuaria alice quiere verificar si se encuentra en el directorio correcto. Por ejemplo. 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. Podría utilizar pwd. la cual proporciona el comando cd (del ingleś change directory) para cambiar el directorio actual desde el intérprete de comandos. DIRECTORIO utiliza por defecto el directorio de inicio del usuario." del computador y se encuentra en el directorio website.

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

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

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

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

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

usuario. Un programa que necesite almacenar datos comprimidos puede almacenar resultados parciales en /tmp. Además. cuando Blondie inicia la sesión puede que necesite un entorno diferente al de Prince. Este espacio de borrador "global" se encuentra disponible para todos los procesos en el sistema así como para todos los usuarios. Los scripts de arranque del sistema se encuentran en /etc/rc. modificar o borrar ninguno de los archivos en los directorios de los usuarios del sistema. Por ejemplo. 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. 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. Normalmente. tanto Alice como Hogan pueden tener cada uno su subdirectorio public_html. Puede que Blondie prefiera diferentes colores en su pantalla. Esto es especialmente importante. /home/alice/public_html y /home/hogan/public_html respectivamente. El propósito más obvio para el directorio de inicio de un usuario es brindar un espacio privado para datos. El directorio de configuración /etc Una de las características únicas de un sistema Linux es su flexibilidad. 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). Por ejemplo. el sistema configura su directorio de inicio como su directorio de trabajo inicial. ofrece también más seguridad a los usuarios. El directorio temporal /tmp Además de su espacio personal en sus directorios de inicio. mientras que los archivos de configuración de la red se encuentran en /etc/ 474 . 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.d. diferentes atajos de comandos e inclusive un entorno de escritorio de trabajo completamente diferente al de Prince. a menudo utilizado para ejecutar un servidor de correo. Estos archivos de configuración normalmente se colocan en /etc o en un subdirectorio de /etc. es muy probable que no pueda leer. Cuando un usuario inicia sesión en el sistema por primera vez se le ubica "en" su directorio de inicio. se le da acceso a los usuarios para compartir espacio de "borrador". Por ejemplo. sólo poniendo los resultados finales en el directorio de inicio del usuario cuando haya terminado de hacerlo. un lugar en donde se pueden guardar archivos separados de los archivos de otros usuarios. Prácticamente todo aspecto del sistema puede configurarse de alguna forma editando un archivo de configuración. en el directorio /tmp. 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. 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. 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. utiliza los archivos de configuración que se colocan en /etc/mail. El sistema borra automáticamente los archivos puestos en este directorio después de unos días. Los archivos de configuración locales específicos para cada usuario hacen que esto sea posible. el programa sendmail. Con frecuencia los sistemas Linux implementan cuotas en cuentas de usuarios para prevenir que cualquier usuario consuma una proporción injusta del espacio disponible. El mantener el espacio de cada uno separado de los otros. es decir. Por ejemplo. 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.

el significado del término se puede deducir del contexto. cp. para iniciar y detener el sistema y para realizar mantenimiento del sistema. mv y el editor de texto vi. el directorio /. 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. también /sbin y / usr/sbin almacenan archivos de comandos para que el superusuario root los utilice. pero una oración tal como el "directorio raíz" puede llegar a ser ambigua. Estos archivos y directorios con contenido variable suelen recopilarse en el directorio /var. 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. Normalmente./ (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. es el término que se utiliza para la base (¿la parte superior?) del árbol de directorios del sistema de archivos. Igualmente. los usuarios comunes no pueden modificar los archivos en /etc (o incluso leerlos. algunos archivos cambian con frecuencia./rootvs. cd. archivos ftp y similares. 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. pero los administradores de sistemas invierten bastante de su tiempo trabajando con los archivos almacenados aquí. /root. si es que cambian del todo. registros del sistema. sin los cuales no se podría usar el sistema van en /bin. Los directorios de comandos /sbin y /usr/sbin Así como /bin y /usr/bin almacenan archivos de comando para usuarios comunes. es decir.sysconfig. 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. También es el nombre del directorio de inicio de ese usuario. Los comandos apropiados para el uso de usuarios comunes se suelen ubicar en los directorios binarios /bin o /usr/bin. Estos incluyen correo electrónico entrante y saliente. Las utilidades adicionales como los compiladores. Estos incluyen comandos para adjuntar y quitar hardware. en algunos casos). sitios web. Las utilidades más importantes como ls. La raíz o el "root" en inglés. 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. Obviamente. el usuario con autoridad suprema sobre el sistema. 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. Estos comandos privilegiados también se encuentran almacenados en dos directorios separados por las mismas razones que para /bin y /usr/bin. Estos archivos tienden a ser muy estables. Ejemplos El directorio /tmp 475 . es el nombre de usuario del superusuario. su navegador de web y la suite de oficina van en /usr/bin. los cuales se pueden poner a disposición de otros sistemas a través de la red. root vs. Sin embargo.

pero en su lugar quiere probar un nuevo comando. [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. Para crear un archivo. cd y fdisk. tanto orbit-alice como ssh-XXDg4ke3 fueron colocados allí cuando ella inició su entorno de escritorio. También quiere probar si realmente puede crear archivos allí. 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. Alice utilizará el comando touch. Aunque ls -l produce un listado largo. lo hace de manera silenciosa (sin ningun aviso en la pantalla).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. como le habían dicho antes. 476 . Alice verifica que touch sí funcionó con otro ls -l. Decide probar cp. mozilla. which. Como muchos de los comandos Linux cuando touch lo logra. De hecho. Hogan puede utilizar ls para buscar estos comandos. Alice usa ls y ls -l para ver el contenido del directorio /tmp. Alice utiliza el comando touch para crear un nuevo archivo vacío llamado newfile en /tmp. Uso sencillo: which PROGRAM Muestra el FQN del archivo del comando PROGRAM que se utilizará si el usuario ejecuta el comando. 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.

Necesitará utilizar which para ubicar los archivos de comando. encontraría bash en /bin. si revisara. Especificaciones 1.. 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. Después Hogan aprenderá sobre la ruta de comandos y descubrirá el porqué esto tiene perfecto sentido. Este comando se demostró en los ejemplos de este capítulo. Abra una nueva terminal o una nueva consola virtual (esto se necesita para la evaluación de su trabajo en línea). Este comando también se demostró en los ejemplos. Hogan está sorprendido de los resultados de cd. Tiempo estimado: 15 minutos.[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 . 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. Hogan también está sorprendido de los resultados de fdisk. utilizado para particionar discos y sólo debe estar disponible para el superusuario así que estaba esperando una respuesta de /sbin. Hogan ve que cp se encuentra en el directorio /bin. Al mirarlo más detenidamente. pero peligroso.. descubre que which ni siquiera buscó fdisk en /sbin. Incluso puede ver fdisk en /sbin cuando lo examina utilizando ls. provisto por el comando de la shell bash.. Hogan encuentra mozilla (el navegador que escogió) en /usr/bin. 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. ether-wake ldconfig portmap usbmodules extendfs lilo poweroff vboxd fdisk logdump pppoe vgcfgbackup . Estaba esperando ver una respuesta como /bin/cd. Sabe que es un comando importante. 477 . (¿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. Por otro lado. lo cual parece decir que el comando cd no está en el sistema..

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

El comando cp copia archivos. mover o copiar. En el ejemplo anterior.txt En este ejemplo. Por ejemplo. 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. creando el archivo durante el proceso. Esto se hace utilizando el símbolo especial de redireccionamiento. pwd envió la salida al archivo de salida estándar. o STDOUT.. El comando mv mueve archivos. los resultados usuales del comando fueron dirigidos al archivo results. Normalmente. 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. 479 . la salida se mostrará en la pantalla.txt [julius@station julius]$ ls results.txt. . Un comando útil que nos puede servir para verificar lo que ha pasado es el comando cat (concatenar). El comando rm borra archivos. también puede ser redireccionada a algún otro archivo.. Discussion Redirección Muchos de los comandos producen salidas “visibles”. el cual es por defecto la pantalla para los usuarios que han iniciado sesión en el sistema.Administración de archivos Conceptos clave • • • • • Se pueden crear archivos (o agregar) de una manera fácil utilizando el redireccionamiento de la shell.] ConcatenarARCHIVO(s) a la salida estándar. Los archivos pueden ser "sobrescritos" como resultado de redireccionar. Uso: cat [OPCIONES] [ARCHIVO. como se muestra en este ejemplo: [julius@station julius]$ ls [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). un símbolo con significado especial que la shell bash ve e interpreta antes de actuar sobre el resto del comando.txt julius]$ cat results. [julius@station julius]$ pwd > results.txt [julius@station julius]$ cat greetings. Si se lista más de un archivo.. esta salida se mostrará en la pantalla por defecto.txt Hello How are you Ejemplo 2: [julius@station [julius@station [julius@station /home/julius [julius@station [julius@station /home/julius results.txt julius]$ ls julius]$ pwd > results. Uso: echo [OPCIONES] [STRING.txt [julius@station julius]$ ls results. esto concatena efectivamente los archivos. se puede utilizar para crear archivos de texto. Hay muchos de éstos como veremos en las próximas lecciones y todos requieren atención.txt /home/julius Esta vez.txt 480 .txt [julius@station julius]$ cat results.txt y después mostró results. Si el archivo ya existe. El comando más sencillo de todos que produce una salida visible es echo.txt [julius@station julius]$ echo How are you >> greetings. es decir. Julius capturó la salida de pwd redireccionando los resultados a results..El comando cat copia cada uno de los archivos listados a la salida estándar. éste se crea como si se hubiese utilizado >. pero también se puede redireccionar a un archivo. El símbolo > es un ejemplo de un meta-caracter de shell. Como para cualquier otro comando.txt con cat. Este comando sencillo junto con el redireccionamiento. Example 1: [julius@station julius]$ echo Hello > greetings.txt julius]$ cat results. Sin embargo.txt julius]$ ls >> results. Si se utiliza >> y el archivo destino no existe. el redireccionamiento borrará y re-creará el archivo vacío y luego capturará la nueva salida.] Repite la cadena de caracteres en la salida estándar. Lo utilizaremos para mostrar un archivo nombrando un sólo archivo y no redireccionando los resultados. si se utiliza un doble símbolo (>>) la nueva salida se añadirá al archivo.

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

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

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

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

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

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

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

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

[student@station [student@station [student@station [student@station source [student@station [student@station [student@station source [student@station student]$ student]$ student]$ student]$ echo source > source echo target > target cp source target cat target student]$ echo target > target student]$ cat source > target student]$ cat target student]$ echo target > target [student@station student]$ set -o noclobber [student@station student]$ cp source target [student@station student]$ cat target source [student@station student]$ echo target > target [student@station student]$ cat source > target -bash: target: cannot overwrite existing file [student@station student]$ set +o noclobber [student@station student]$ exit 489 .

El comando mkdir crea directorios. En Linux. el comando para hacer un directorio nuevo es el comando mkdir (del inglés make directory). Discussion Creación de directorios (nuevos. mkdir no creará un subdirectorio si el directorio padre no existe de antemano: [elvis@station elvis] ls work ls: work: No such file or directory [elvis@station elvis] mkdir work/spreadsheets mkdir: cannot create directory `work/spreadsheets': No such file or directory 490 . Falla y emite un mensaje de error si uno o más de los DIRECTORIO(s) existen.. rm -r suprime directorios recursivamente..Administración de directorios Conceptos clave • • • • • Se puede examinar el contenido de árboles de directorios completos con el comando ls -R. cp -r copia directorios recursivamente.} Crea el(los) DIRECTORIO(s) si no existe(n). El comando rmdir borra directorios (vacíos). pero los nuevos directorios restantes son aún creados. vacíos): mkdir La organización de archivos dentro de directorios requiere la habilidad para crear los directorios que necesita. Uso: mkdir [OPCIONES] {DIRECTORIO. Para crear un subdirectorio ~/public_html Elvis puede proceder así: [elvis@station elvis]$ ls [elvis@station elvis]$ mkdir public_html [elvis@station elvis]$ ls public_html Después Elvis puede crear un subdirectorio de public_html: [elvis@station elvis] ls public_html [elvis@station elvis] mkdir public_html/images [elvis@station elvis] ls public_html images Sin embargo. observe que por defecto.

tenga en cuenta que cuando se da un directorio como argumento al comando ls. o ls -lR para incluir los atributos de archivos. Si también quiere que el comando ls liste los subdirectorios.conf /etc/sysconfig/networking/profiles/netup: hosts ifcfg-eth0 network resolv. Para poder descubrir los archivos y los subdirectorios que contiene. operando en cada elemento de la estructura de la misma manera que en el elemento superior. Por ejemplo. La opción -R especifica que el comando ls debería listar con recursion. puede añadir la opción -R. Cuando un comando se repite a través de una estructura. tales como ls -sR para incluir los tamaños de archivos. se dice que el comando actúa de modo recursivo.conf ls -R también se puede combinar con cualquiera de las opciones de línea de comando vistas anteriormente. el comando ls sólo mostrará el contenido del directorio del nivel más alto. hogan lista el contenido del directorio de modo recursivo. 491 . hogan está explorando la configuración de red de la máquina y sospecha que el directorio /etc/sysconfig/networking es un directorio importante. [hogan@station hogan]$ ls -R /etc/sysconfig/networking/ /etc/sysconfig/networking/: devices ifcfg-lo profiles /etc/sysconfig/networking/devices: ifcfg-eth0 /et