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

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

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

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

Sólo observe cómo se utilizan las opciones de la línea de comandos para modificar el comportamiento básico del comando ls. ésto se abarcará en un cuaderno posterior sobre la utilización del sistema de archivos. la shell presenta otro intérprete de comandos y espera a que se le diga que hacer. propiedad y la fecha de modificación. Estas se conocen como opciones "cortas" de la línea de comandos. Entonces la shell realiza una pausa hasta que el proceso del comando termina. 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 -> . A veces estas opciones 15 .. El tercer comando ls -l presenta una lista "larga".. El segundo comando ls -s. el proceso de la shell le pide al kernel que ejecute el programa especificado como un proceso separado y hace que la salida (o mejor./home/local/ drwxr-xr-x 2 root root 8192 Apr 25 06:36 sbin drwxr-xr-x 212 root root 8192 Apr 23 16:30 share drwxrwxr-x 5 root pst 4096 Apr 25 08:12 src lrwxrwxrwx 1 root root 10 Apr 1 11:07 tmp -> . Por ahora. no se preocupe de los detalles en la salida. el cual incluye la opción -s. 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. Una vez el comando termina. la salida estándar) del proceso se escriba en la terminal. incluyendo todo tipo de detalles sobre los archivos tales como los permisos. Un ejemplo fácil es el comando ls utilizado para listar el contenido de un directorio./usr/bin/who Cuando se ejecuta un comando. presenta también el tamaño del contenido también. 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./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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

con los permisos predeterminados de rw-rw-r--. La sintaxis se resume en la siguiente tabla: Figure 1. Uso del comando chmod abreviación u g o a + = r w x interpretación user grupo otro todos agregar borrar set leer escribir ejecutar Ejemplos Uso del comando chmod en archivos La siguiente tabla presenta varios ejemplos de cómo el comando chmod se puede utilizar para modificar permisos de un archivo llamadofoo. [elvis@station elvis]$ ls -l foo -rw-rw-r-1 elvis elvis 42 Jan 16 08:09 foo command chmod o-r foo chmod g-w foo chmod ug+x foo chmod o+w foo chmod go-rwx foo chmod a-w foo chmod uo-r foo efecto suprime el permiso de lectura a otros suprime el permiso de escritura para el grupo agrega permiso de ejecución al usuario y grupo agrega permiso de escritura a otro suprime el permiso de lectura. 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 . 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.especifican el tipo de permiso a cambiar.

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

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

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

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

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

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

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

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

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

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

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

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

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

Un directorio llamado~/memos. Estos ejercicios asumen que otros ya tienen permisos de ejecución (x) en su directorio de inicio. 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. que sólo el propietario del directorio puede navegar. 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).[student@station [student@station [student@station [student@station total 16 student]$ student]$ student]$ student]$ mkdir ~/pub/music chmod o-rx ~/pub/music/ chgrp music ~/pub/music ls -al ~/p Protección de subdirectorios dentro del directorio de inicio Lab Exercise Objetivo: Proteger un subdirectorio recién creado dentro de su directorio de inicio. [student@station student]$ ls -ld ~ drwx-----x 4 student student 4096 Jan 20 16:50 /home/student [student@station student]$ mkdir memos [student@station student]$ chmod o-rx memos/ [student@station student]$ ls -l total 8 drwxrwx--2 student student 4096 Jan 20 16:50 memos drwxrwx--x 4 student student 4096 Jan 20 15:18 pub [student@station student]$ echo "feed cat" > memos/todo [student_a@station student_a]$ ls ~student/memos ls: /home/student/memos: Permission denied [student_a@station student_a]$ cat ~student/memos/todo cat: /home/student/memos/todo: Permission denied Deliverables A title Question 1. Discussion ¿Por qué una sintaxis diferente? 55 . 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. Cree un archivo dentro del directorio y use una de las cuentas alternas para confirmar que otros usuarios no puedan acceder al archivo.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

aún es un archivo válido. ¿Qué sucede si blondie suprime /home/blondie/music/duet.txt -rw-rw---1 blondie music 25 Jul 13 06:08 music/duet.txt Un poco incómodo. no obstante.txt Figure 3.txt aún existe. [blondie@station blondie]$ rm music/duet.txt? [elvis@station elvis]$ ls -l music/duet.[elvis@station elvis]$ ls -l 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. 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). Aunque de modo superficial son similares. elvis también ve los permisos cambiados. 78 . elvis se ha quedado con un archivo de blondie.txt -rw-rw---2 blondie music 25 Jul 13 06:08 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? El inodo /home/elvis/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. sino que lo "desenlaza". En un nivel bajo. pero con una dentry menos que hace referencia a éste. una para cada día de la semana.txt Puesto que ambas partes del enlace comparten el mismo inodo. La usuaria madonna es muy organizada y ha agrupado sus tareas en siete listas. Un archivo (es decir.

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

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

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

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

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

De hecho. Si cambiamos los permisos en rhyme. Dickory. Puesto que cada inodo en un sistema de archivos tiene un número único de inodos. lo que implica que. aunque hay dos nombres para el archivo (dos dentries) hay un sólo inodo. Dickory. Three mice ran up a clock." >> hard_link 84 . Además. [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. Dock. el número de inodos que se puede utilizar para identificar un archivo. [blondie@station blondie]$ echo "Three mice ran up [blondie@station blondie]$ cat rhyme Hickory. [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. observe que el número de inodos tanto para rhyme como para hard_link es 246085. también comparten los mismos datos. cuando se lleve el rastro de archivos internamente. los permisos en hard_link también cambiarán. 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.Ejemplos Trabajar con enlaces duros En su directorio de inicio. [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." > rhyme a clock. Ella hace un listado largo con el comando ls -li. Puesto que el inodo hace referencia al contenido de un archivo. ¿Por qué? los dos nombres de archivo se refieren al mismo inodo. donde la opción -i hace que el comandols imprima el número de inodos de cada archivo como la primera columna de la salida. blondie tiene un archivo llamado rhyme y un directorio llamado stuff.

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

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

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

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

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

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

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

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

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

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

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

Linux (y UNIX) utilizan los nodos de dispositivo para permitir a los usuarios el acceso a dispositivos en el sistema. por ejemplo. tales como disquetes y tarjetas de sonido. las propiedades para estos dispositivos son restauradas a las predeterminadas del sistema. los procesos que ellos ejecutan) deben ser capaces de leer y escribir en la terminal que están usando. "Usuarios de Consola" En Red Hat Enterprise Linux. • • Al escribir programas. La administración de dispositivos en un sistema de Linux puede ser un tema extenso y complejo. 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. sino por desde dónde se ha iniciado la sesion. 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. Ejemplos Interpretación de conteos de enlaces de directorio El usuario elvis hace un listado largo del directorio /var/spool. 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. Es decir. [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 . a los usuarios se les otorgan permisos no por quiénes son.Terminales Puesto que los usuarios necesitan comunicarse con el sistema. A manera de introducción. 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. 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. ¿sería razonable usar disquetes? En resumen. 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. ellos (o más exactamente. Nada de esto sucede si un usuario inicia sesión en una red. se considera un "usuario de consola".

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

los discos se formatean con un sistema de archivos y se montan en un directorio.Discos. de bajo nivel a los controladores de disco a través de los nodos de dispositivos en el directorio /dev. 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. Los sistemas de archivos se crean con algunas variantes del comando mkfs. Table 1. El comando umount se utiliza para desmontar un sistema de archivos de un punto de montaje. El comando df se utiliza para reportar el uso del sistema de archivos y mapea los dispositivos actualmente montados. Por lo general. A continuación elvis ha realizado un listado largo de varios nodos de dispositivo que aparecen en el cuadro anterior. Ese directorio se denomina punto de montaje. El sistema de archivos predetermiando de Red Hat Enterprise Linux es el sistema de archivos ext3. 98 . 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. El siguiente cuadro lista los nombres de archivos de los nodos de dispositivos comunes y los discos con los cuales están asociados. Discussion Dispositivos de disco Linux (y Unix) permite a los usuarios acceso directo. 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.

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

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

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

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

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

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

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

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

debe también desmontar los medios al terminar. monta el disquete y copia sus archivos en él.00%) reserved for the super user First data block=1 1 block group 8192 blocks per group.ogg Luego desmonta su disquete. 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.ogg song06. El resultado: no sólo debe montar medios temporales (como disquetes) antes de poder utilizarlos. Lo peor.ext2 /dev/fd0 mke2fs 1. Luego. decide formatear un disquete con un sistema de archivos ext2. [madonna@station madonna]$ /sbin/mkfs. [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.ogg song07.ogg song05.32 (09-Nov-2002) Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) 184 inodes.ogg song01.ogg song03. Como sabe que sus amigos usan Red Hat Enterprise Linux.ogg song04. 1440 blocks 72 blocks (5. 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]$ umount /media/floppy/ umount: /media/floppy: device is busy 107 . Use tune2fs -c or -i to override. 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. whichever comes first.¿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 song07.msdos /dev/fd0 mkfs.ogg song02. Ningún sistema de archivos soporta los archivos propietarios y permisos de archivo. madonna debe cd a otra parte.ogg': Operation not permitted Otra vez.ogg song05. ¿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. Uno de estos es que el sistema de archivos MS-DOS no soporta enlaces blandos (ni enlaces duros). esta vez con el sistema de archivo MSDOS.ogg my_favorite_song. la operación no es permitida.ogg [madonna@station floppy]$ ln -s song06. monta el disquete y copia sus archivos en él. Para desmontar el disquete. [elvis@station elvis]$ umount /media/floppy/ [elvis@station elvis]$ ls /media/floppy/ Después de copiar los archivos en el disquete. decide que le gustaría crear un enlace blando para identificar la canción favorita para su amigo. o un directorio de trabajo actual en el disco del sistema de archivos.msdos 2.¿Por qué no se podría desmontar el disquete? Algún proceso tiene un archivo abierto.ogg' to `song06.ogg song04. el sistema de archivos MS-DOS es mucho más sencillo que los sistemas de archivos tradicionales de Linux. 108 . ¿Cómo maneja Linux esto? Linux trata todos los archivos como propiedad del mismo usuario y todos los permisos como 755.ogg song06.8 (28 Feb 2001) [madonna@station madonna]$ mount /media/floppy/ [madonna@station madonna]$ cp song0* /media/floppy/ ¿Por qué madonna no pudo crear el enlace? Aunque Linux soporta el sistema de archivos MSDOS. [madonna@station floppy]$ cd [madonna@station madonna]$ umount /media/floppy/ Ahora ella puede quitar el disquete del controlador.ogg song03. Uso de un disquete con formato DOS Finalmente. madonna se encuentra con un amigo quien insiste que puede solo usar los disquetes con formato DOS. cuyo directorio de trabajo actual es /media/floppy . 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. El proceso infractor es la shell bash de madonna. [madonna@station madonna]$ /sbin/mkfs. Linux necesita hacer algunos acuerdos.ogg ln: creating symbolic link `my_favorite_song. Madonna da formato a otro disquete. como su directorio de inicio.

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

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

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

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

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

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

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

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

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

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

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

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 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. 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 . Pueden haber directorios donde el acceso de búsqueda sea negado por lo tanto.. bin o student.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. [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.

El archivo varlib. El archivo bin.rootmail contiene un listado de todos los archivos bajo el directorio /var. Al listar los archivos asegúrese de que cada nombre de archivo sea una referencia absoluta. No se preocupe por estos mensajes de error. 3. 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. pertenecientes al usuario "root" y al grupo "mail". Usted los puede suprimir añadiendo el comando 2> /dev/null a su comando find. para los cuales usted no tiene permiso. [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.find. 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. 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]$ -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. 4. Ejecute el comando file en cada archivo bajo /etc/sysconfig y registre la salida en el archivo sysconfig.Tiempo estimado: 20 minutos. 121 .games contiene un listado de todos los archivos bajo el directorio /var/lib. 2. Puede que necesite consultar la página del manual find(1) para hallar respuesta a algunos de los problemas. pertenecientes al usuario "games".

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

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

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

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

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

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

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

--directory=DIR -P.tar /etc/sysconfig/networking tar: Removing leading `/' from member names etc/sysconfig/networking/ etc/sysconfig/networking/devices/ etc/sysconfig/networking/devices/ifcfg-eth0 etc/sysconfig/networking/profiles/ etc/sysconfig/networking/profiles/default/ etc/sysconfig/networking/profiles/default/network . ¿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 . --absolute-reference -v. 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)..• • Cuando extraemos los archivos como root. 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á. [prince@station prince]$ tar cvf net. Opción -C. --verbose -z.. El siguiente cuadro lista algunos de las opciones que se utilizan con más frecuencia a continuación explicaremos su uso. --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. 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. --gzip -j.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 .conf.conf X11]$ xorg. [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. delimitando el comando entre paréntesis. las frases independientes se separan con un punto y coma). pero suele ser conveniente combinar los comandos.wbx xorg..backup xorg.backup xorg.. La variable de shell $? se expande al valor de retorno de un comando ejecutado previamente.Listas de comandos y scripts Conceptos clave • • • • Comandos múltiples se pueden separar con un . Veamos un ejemplo: [elvis@station applnk desktop-menus fs gdm lbxproxy [elvis@station elvis]$ cd /etc/X11. Muy pocas veces existe la necesidad real de ejecutar comandos múltiples desde una solo línea de comandos.works XftConfig.conf X11]$ xorg. 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.wbx xorg. && y || separan condicionalmentecomandos múltiples.works XftConfig.conf. (en inglés es igual. Tras la salida.conf.conf. ls prefdm sysconfig proxymngr twm rstart X serverconfig xdm starthere xorg.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.README-OBSOLETE xinit xkb Xmodmap Xresources xserver xsm El efecto es idéntico al escribir comandos en líneas separadas.conf. Considere el siguiente ejemplo: 144 . cada comando devuelve un entero a su padre denominado valor de retorno.

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

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

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

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

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

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

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

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

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

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

Lista separada por comas de las opciones de shell actual como lo informó el comando set -o. 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. Variables Bash de sólo lectura Variable ? $ ! _ PPID SHELLOPTS UID Se expande hasta El estatus de salida del comando ejecutado más recientemente Opciones de banderas de la shell actualmente activadas Id (pid) del proceso de la shell actual Id (pid) del proceso del comando secundario más reciente Último símbolo del comando anterior Id (pid) del proceso padre de la shell. el id del usuario y el directorio actual de trabajo son parte 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. Así como la shell bash permite asignar parejas de valores-nombre llamados variables de shell. pero pueden ser reasignadas. Estas variables son una parte del proceso almacenado en el kernel. simplemente como el id del proceso. Ahora presentaremos un concepto un poco más sutil y mucho más útil: variables de entorno. así como prince lo descubre a continuación. Esto le permite a los usuarios 155 .Variables de Bash El siguiente cuadro lista algunas variables que se establecen automáticamente con la shell bash. Table 1. [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. El userid del usuario actual Estas variables son establecidas por la shell para proveer información. 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. (siempre y cuando se acuerde de los espacios). Estas no se pueden reasignar por el usuario. Estas variables son de sólo lectura y no pueden ser configuradas por el usuario.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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. echo "sourcing ~/. Agregue la siguiente línea a su archivo de arranque ~/.echo "sourcing ~/. Agregue la siguiente línea a su archivo ~/.bashrc.bash_profile" 3.bash_profile. Una shell bash que tras el arranque de una shell de no-inicio de sesión emita el mensaje sourcing ~/. rm -fr ~/.bash_logout.bashrc" 2.Trash/* Deliverables A title Question 1 content_view let_ 1. sourcing ~/.bashrc y sourcing ~/. 193 .bashrc 2.

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

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

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

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

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

En lugar de abrir un archivo específico (mediante el descriptor de archivo 3. é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.Utilizando la misma técnica anterior. 199 . como el anterior). el comando cat lee desde stdin. Cuando el comando cat se llama sin argumentos (por ejemplo. [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. 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. elvis examina los archivos que el comando cat ha abierto y los descriptores de archivo asociados con ellos. sin ningún nombre de archivo o archivos para mostrar). ¿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.

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. Sin entender que el comando sort está esperando para leer la entrada estándar. cuando el comando sort se ejecuta sin argumentos (por ejemplo. su teclado. Los programas ftp y gnuplot son complicados y estos ejemplos apenas introducen algunas de sus funciones que sirven para hacer énfasis en uno de los temas más importantes en este cuaderno: si el programa es conducido desde una interfaz de línea de comandos. esperará entradas desde stdin. invoca el comando sort. nombres de archivo para ordenar). 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. [blondie@station blondie]$ cat zoo elephant seal ape giraffe fish [blondie@station blondie]$ sort zoo ape elephant fish giraffe seal Como el nombre en inglés lo indica. blondie emplea el comando sort para ordenar los animales que se encuentran en el archivo de texto zoo.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. trata de alguna manera de salir del comando que ha iniciado. por ejemplo. asuma que blondie no sabe aún sobre la entrada estándar. Al explorar. "sólo para ver qué hace". A continuación. a menudo confunde a los nuevos usuarios quienes inocentemente teclean un nombre de comando. un amigo le dice en voz baja "CONTROL-D". Al igual que el comando cat. Por último. 200 .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2 to 00:08:74:d9:41:32 via eth0 192.0..1 192.0.168.168.168.0..168. Un administrador experimentado podría emplear el siguiente método. [root@station log]# grep DHCPOFFER messages | sed "s/^.2 to 00:08:74:d9:41:32 via eth0 192. May 27 12:18:21 server1 dhcpd: DHCPACK on 192. en este caso más de 1000 líneas de longitud.. el cual quita las primeras palabras de cada línea..1 192.168.0.254) from 00:08:74:37:c5:c3 via eth0 . Dándose cuenta que el archivo /var/log/message es un archivo muy grande. [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 .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.2 to to to to to 00:08:74:d9:41:9e 00:08:74:d9:41:9e 00:08:74:d9:41:9e 00:08:74:d9:41:9e 00:08:74:d9:41:32 via via via via via eth0 eth0 eth0 eth0 eth0 Este es un comienzo pero el administrador aún está manejando demasiada información (la toma de pantalla de arriba sólo lista las primeras 5 de 90 líneas producidas por este comando).0.1 to 00:08:74:d9:41:9e via eth0 192. 192..0. el administrador toma la salida del comando grep y la entuba a un comando llamado sed.168.1 192.168.1 192.3 to 00:08:74:d9:40:a4 via eth0 .168.11 (192.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.168.168.168.22..0.168.0.168.168.168.2 to 00:08:74:d9:41:32 via eth0 192.168. el administrador primero utiliza el comando grep para reducir la información a las líneas pertinentes.168.2 to 00:08:74:d9:41:32 via eth0 192.0.0.1 to 00:08:74:d9:41:9e via eth0 192...0.11 to 00:08:74:37:c5:c3 via eth0 May 27 12:20:27 server1 dhcpd: DHCPREQUEST for 192.0. 192.0.1 to 00:08:74:d9:41:9e via eth0 192. Con el fin de extraer sólo la información pertinente.0.0.168.0. es decirla dirección IP y la dirección de hardware. Sin preocuparse por detalles del protocolo de DHCP.168..*on //" 192.0. suponga que el administrador deseara extraer una lista de direcciones IP y las direcciones de hardware que se ofrecen en el archivo de registro.0. 220 .1 to 00:08:74:d9:41:9e via eth0 192.

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

222 . Redirige todo esta salida a un archivo en su directorio de inicio.168.9 00:08:74:35:00:1f 192.110 00:09:6b:d0:ce:8f Esta es la lista que el administrador quería.0.168. Entube la salida del comandogrep tcp /etc/services dentro del comando sort.8 00:08:74:d9:41:7b 192.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".0. como pudo utilizar la flexibilidad de la línea de comando.5 00:08:74:34:fd:36 192.2 00:08:74:d9:41:32 192.168.10 00:08:74:d9:40:95 192.[root@station log]$ grep DHCPOFFER messages | sed "s/^. en el orden deseado. Especificaciones 1.168.168. sed.3 00:08:74:d9:40:a4 192. En cambio.txt.0.168.168.6 00:08:74:d9:41:a3 192.168. awk.0.12 00:08:74:d9:41:dd 192.0.*on //" | awk '{print $1.*on //" | awk '{print $1 .$3}' | sort -n -k4 -t. Hizo esto mediante un puñado de herramientas que son para la mayoría de los administradores de Unix una caja de herramientas mentales: grep. | uniq 192.1 00:08:74:d9:41:9e 192.0.0.Estimated Time: 10 mins.168. sort.168.168.168. yuniq. Ejercicios en línea Lab Exercise Objetivo: Usar tuberías para filtrar información de modo efectivo.0.168.14 00:08:74:34:fe:bc 192.15 00:08:74:37:c8:eb 192. [root@station log]$ grep DHCPOFFER messages | sed "s/^. pudo también manejar la información por sí mismo.0.0. 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. Escriba un línea de comando con dos 2.0.168.0.0.4 00:08:74:d9:3f:7f 192.11 00:08:74:37:c5:c3 192.13 00:08:74:35:00:d0 192. $3}' | sort -n -k4 -t.17 00:08:74:35:00:e3 192.168. 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.txt En este ejemplo.0.7 00:08:74:d9:41:53 192.0. | uniq > ~/ip_dhcp. Redirija la salida de esta tubería dentro del archivo ~/pipelab. Usted desearía crear una lista ordenada de todos los servicios de TCP services que se encuentran en el archivo /etc/services. Mediante el visualizador de página less desearía navegar la salida del comando ls -R /.0.168. viendo sólo archivos que contengan la letra s.168.0.16 00:08:74:d9:41:ac 192.

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

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

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

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

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

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

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

Selected Character Encoding Code Sets Código utf8 iso88591 iso885915 iso88596 iso88592 País UTF-8 ISO 8859-1 (Latín 1) ISO 8859-15 (Latín 10) ISO 8859-6 (Árabe) ISO 8859-2 (Latín 2) See the gettext info pages (info gettext. country codes. while locale -a will list all settings currently supported by your system. Table 1. 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. 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). The following tables list some selected language codes. and code set specifications.The variable context consists of the following three components. or pinfo gettext) for a complete listing. 230 . The extent of the support for any given language will vary. 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. Table 2.

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

example. los archivos se verían de la siguiente manera.example. 127. al remplazar las tabulaciones por ^I y los avances de línea son representados por$.0.example.201 z Al utilizar la opción -A.example.com $ 127.example.168.0.example.0.com 192.0. 232 . Por ejemplo.129. el siguiente archivo contiene una lista de cuatro músicos.0.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. mientras que los sistemas operativos de Macintosh utilizan el caracter de retorno de carro (ASCII 13.0. [student@station student]$ cat -A /etc/hosts # Do not remove the following line.1^Istation1 station1.[student@station student]$ cat /etc/hosts # Do not remove the following line.com 192. ¿de qué consta una línea? Imagínese trabajando en una máquina de escribir: ¡clic! ¡clac! ¡clic! ¡clac! ¡clac! ¡sssiin! En lugar del ¡sssiin! del carro de la máquina al final de cada línea se selecciona el caracter de avance de línea (ASCII 10) para marcar el final de líneas.0.1 station1 station1.com$ 192.1 localhost.51 station51 station51. Linux (y Unix) utilizan el caracter de avance de línea (ASCII 10.localdomain^Ilocalhost station.168.168.168. or various programs$ # that require network functionality will fail.0.0.example. a menudo representado \n). [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. ASCII 10).com www1 www1. 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.com www1 www1.129.localdomain localhost station. or various programs # that require network functionality will fail.51^Istation51 station51. 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.$ 127.168.com 127.0.1 rha-server 192.1^Irha-server$ 192. la estructura de espacio en blanco del archivo se hace evidente.0.1^Ilocalhost.168. Pero.com$ 192.example. respectivamente.0.

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

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

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

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

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

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

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

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

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

[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. [student@station student]$ grep -rl eth0 /etc/sysconfig 2>/dev/null /etc/sysconfig/network-scripts/ifup-aliases /etc/sysconfig/network-scripts/ifup-ipv6 /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/networking/devices/ifcfg-eth0 /etc/sysconfig/networking/profiles/default/ifcfg-eth0 Inversión de grep La herramienta grep muestra por defecto sólo las líneas coincidentes con el patrón de búsqueda. ¿pero cómo se hace para localizar aquellas líneas en el archivo original? Utilizando el comando grep -n también listará el número de cada línea coincidente. En estas instancias. pero algunas veces se puede tener interés en las líneas no coincidentes con el patrón. Grep listará cada línea que contiene una o más coincidencias. la salida podría simplificarse con la opción -l. la opción -v invierte el funcionamiento de grep. [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. Si solamente los nombres fueran de interés. Identifique qué línea contiene la palabra “dictionary”: [student@station student]$ fgrep -n dictionary /usr/share/dict/words 12526:dictionary 242 . El archivo /usr/share/dict/words contiene una lista de palabras comunes de diccionario. Esto suele ser lo deseado.

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

está todo en minúsculas: [student@station student]$ grep the rhyme the mat Ahora observe qué líneas contienen las letras “t”.[student@station student]$ cat rhyme The cat sat on the mat at home. utilizada por la línea de herramientas de impresión. [student@station student]$ grep lp /etc/passwd lp:x:4:7:lp:/var/spool/lpd: En esa clase de letra Búsqueda de una copia exacta del patrón: [student@station student]$ grep LP /etc/passwd [student@station student]$ Nada coincidió debido a que el patrón no coincidió con el tipo de letra para el nombre de cuenta. Ayuda: el archivo /etc/passwd contiene una línea por cada cuenta de usuario en el sistema. Ejemplos Búsqueda de cadenas sencillas de caracteres Verifique que su computador tenga la cuenta del sistema “lp”. “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. 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 . Vea si el archivo que contiene la palabra “the”.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[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. 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)\.[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. 261 . Suponga que estamos escribiendo una carta en inglés. Utilice el símbolo de tubería (“|”) para indicar alternativas.

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

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

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

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

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

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

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

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

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

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

Sin embargo. Ella agrega una opción adicional -k al comandosort especificando la tercera columna como su tecla secundaria. dentro de estos grupos madonna desearía clasificar la información por la tercera columna. [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.[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. [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 .

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

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

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

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

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

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

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

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

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

282 .

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

la solicitud de interrupción (IRQ) a la cual se añaden y el número de interrupciones ocurridas en la línea IRQ. 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 únicamente los controladores de dispositivos se unen a líneas IRC de interés particulares. eth0. el resto del archivo podría ser cut. (no se preocupe si no está familiarizado con los conceptos de un controlador de dispositivo o línea IRQ. ohci1394 8: 1 XT-PIC rtc 10: 166 XT-PIC usb-uhci. A manera de ejemplo.Con la opción -c. la list especifica una posición de caracter en una línea de texto. [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. el archivo /proc/interrupts lista controladores de dispositivo. 284 . el comando cut puede extraer regiones particulares de interés. podrían especificarse intervalos múltiples de caracteres. donde el primer caracter es el primer caracter número 1. Enfóquese en la manera como cut se utiliza para manipular la información). Si sólo la línea IRQ y los números de interrupciones fueran de interés. 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. eth1 11: 6575295 XT-PIC 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. El texto aparecerá sólo una vez.340: timer 1: keyboard 2: cascade 3: ehci-hcd 5: usb-uhci. sino por un caracter delimitador tal como un TABULADOR o “:”. ¿podría utilizarse el comando cut para reorganizar el orden de la información? [student@rosemont student]$ grep '[[:digit:]]:' /proc/interrupts -c34-. 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..1-5 0: timer 1: keyboard 2: cascade .. | cut La respuesta es no. separados por tabulaciones. eth0. 285 . eth1 11: usb-uhci. Table 1. utilice el texto especificado por CADENA DE TEXTO en lugar del delimitador de campo. En salida.[student@rosemont student]$ grep '[[:digit:]]:' /proc/interrupts -c1-5. Por ejemplo. el archivo /usr/share/hwdata/pcitable lista más de 3000 IDS de vendedores IDS de dispositivos (que pueden ensayarse desde dispositivos PCI) y los módulos de kernel y cadenas de texto que deberían asociarse con ellos. No incluya líneas que no contengan el caracter delimitador (útil para eliminar comentarios y encabezados). ohci1394 8: rtc 10: usb-uhci. Audigy 12: PS/2 Mouse 14: ide0 15: ide1 | cut Si las especificaciones de caracteres se invirtieran. en el mismo orden de aparición en la fuente. incluso si las especificaciones de intervalos están superponiéndose o reordenanándose. 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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

the phone number of the rental office is 888-555-1313. Las primeras pocas líneas están bien. pero luego el último comentario incluído es una línea larga. 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. So here's how to get to the house assuming you have traveled to the eastern most end of I-92. Antes de responder. 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.Uso de fmt para limpiar correo-e Mientras utiliza la terminal de correo masivo del comando mutt. Springfield's a nice riverfront to take a strol l. [elvis@station elvis]$ cat email. On September 24 (15:32 EDT). I'll have my cellphone with me. 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. T he stretch down Market Street is narrow so drive with care. If not. El correo-e consiste en diferentes secciones incluídas. Once you turn off o f Market Street take your time and gawk at the lovely historic homes. elvis borra el mensaje con el comando fmt. 332 . If you've got time to kill on the way out. elvis guarda y luego ve el siguiente mensaje electrónico.txt I believe the phone number of the rental property is 888-555-1212. also: 888-555-1414.

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

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

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

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

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

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

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

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

341 .

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

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

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

El comando compuesto puede ser complicado de teclear. Table 2.maxwell -bash /usr/lib/mozillaps aux grep maxwell Aunque maxwell puede encontrar la información que necesita hay algunos aspectos no muy agradables. se interpreta como un patrón de expresión regular extendido coincidente con nombres de comando.2 2676 724 pts/8 R maxwell 2202 0. no porque le perteneciera a maxwell.4 4312 1268 pts/8 S maxwell 2146 1. Igualmente. apareció un proceso su 2.3 4108 876 pts/8 S maxwell 2112 0. Opción -n -u USER -t TERM Efecto Selecciona únicamente los procesos coincidentes iniciados más recientemente. pgrep permite a los usuarios listar rápidamente procesos por nombre de comando.0 0. Además. Table 1.0 0. Observe que. 3. pgrep [OPCIONES] [PATRÓN] Su argumento opcional.3 89256 21232 pts/8 S maxwell 2201 0.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. usuario.0 3436 4 ? S maxwell 2200 0. Para una lista completa de opciones consulte la página de manual pgrep(1). Selecciona procesos controlados por terminal TERM. en la segunda búsqueda.0 0. la siguiente opción puede utilizarse para modificar el formato de la salida del comando. Selecciona procesos pertenecientes al usuario USER. [1] 345 .4 8. si se suministra. El comando pgrep fue creado para tratar estos problemas. El método no es exacto.[maxwell@station maxwell]$ ps aux | grep sshd root 829 0. A manera de ejemplo.0 0. Las siguientes opciones también pueden utilizarse para clasificar la búsqueda. el comando grep suele aparecerse en la salida. maxwell repetirá dos listados del proceso anterior mediante el comando pgrep.0 0. 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).0 0. Lista el nombre del proceso y el ID del proceso. terminal o grupo. sino porque la palabra maxwell era uno se sus argumentos. 1.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.0 0.3 11596 988 maxwell 4212 0.0 0 0 root 3 0.0 1356 4 root 496 0..0 0 0 .1 0.0 0.0 0.0 0.1 2104 448 root 566 0. Ver los procesos de un usuario con el formato "largo" 346 .0 0..4 1.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 1376 164 rpc 588 0.5 16784 1500 maxwell 4210 0. root 174 0.0 1. [maxwell@station maxwell]$ ps -e u USER PID %CPU %MEM VSZ RSS root 1 0.0 0.0 1380 76 root 2 0. maxwell utiliza el comando ps -e u para listar todos los procesos (-e) con el formato de "usuario orientado" (u).0 1416 136 maxwell 4220 0.0 0.6 18424 1776 ..1 16392 436 maxwell 4207 0.0 0. maxwell 13166 0.5 4304 1392 maxwell 13200 0..0 0.0 0 0 root 250 0. (los estados de procesos se tratarán en una próxima lección).8 24464 2152 root 4213 0.0 0. maxwell 4202 0.0 0.3 17024 1012 maxwell 4293 2.0 1548 104 .7 0.0 0.0 1448 160 root 570 0...0 0.3 57948 3400 maxwell 4204 0.0 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.4 18356 3760 apache 5048 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.

347 . grupos de proceso. maxwell continúa examinando ese proceso individual. [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. Muchos de estos conceptos se discutirán más tarde en otros cuadernos. grupos de sesión y terminales de control. maxwell utiliza el comando ps -U maxwell l para listar todos sus procesos (-U maxwell) con el formato "largo " (l).En la siguiente transcripción. los cuales se tratarán más adelante. [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. Ver un comando determinado con el formato "trabajo orientado" En la siguiente transcripción. maxwell utiliza el comando ps -C bash j para listar todas las instancias del comando bash (-C bash) con el formato de "trabajo orientado" (j). tales como la prioridad y el niceness del proceso.

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

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

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

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

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

dentro de los procesos existe un linaje bien definido de relaciones padre e hijo. Cuando se ejecuta un comando.[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. fork y exec suelen ir de la mano. El linaje de los procesos (y el comando pstree) Tras el arranque del sistema. [maxwell@station maxwell]$ pstree init-+-apmd |-atd |-automount |-battstat-applet . 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. El primer proceso iniciado por el kernel inicia fuera del árbol de familia. |-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 . la shell bash primero bifurca una nueva shell bash.. 353 . Sin embargo. una de las responsabilidades del sistema del Kernel de Linux es iniciar el proceso por primera vez (usualmente/sbin/init).. el cual puede examinarse con el comando pstree.. Luego. Todos los otros procesos son iniciados porque se bifurcó un proceso ya existente.. para las shells en particular.

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

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

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

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

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

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

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

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

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

el comando falla...... Luego. El nuevo valor de niceness.. Cambiando de parecer.. 363 . por el contrario. [maxwell@station maxwell]$ renice 0 2739 renice: 2739: setpriority: Permission denied Dado que a los usuarios estándar no se les permiten valores de niceness más bajos. el proceso tiene valores más altos de prioridad (implicando menos acceso a la CPU por una época de programación). 000 501 2676 000 501 2718 040 501 2719 000 501 2720 000 501 2721 000 501 2739 . maxwell decide restaurar el niceness a su valor predeterminado de 0. El niceness. [maxwell@station [maxwell@station 000 501 2982 000 501 2739 000 501 3010 040 501 3011 000 501 3012 000 501 3013 maxwell]$ renice 5 2739 maxwell]$ ps -alx 898 15 0 4228 1544 schedu 2676 20 5 3248 576 2611 16 0 3804 948 wait4 3010 17 0 3808 1004 wait4 3011 17 0 3140 1228 3011 17 0 3140 416 pipe_w S RN S S R S pts/0 pts/0 pts/1 pts/1 pts/1 pts/1 0:00 bash 0:00 find / 0:00 /bin/bash 0:00 /bin/bash 0:00 ps -alx 0:00 tail Debido a que el valor de niceness se ha incrementado. maxwell utiliza el comando renice para alterar el valor de niceness del proceso. 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 F UID PID . 000 501 2676 000 501 2739 000 501 2740 040 501 2741 000 501 2742 000 501 2743 .[maxwell@station [1] 2739 [maxwell@station F UID PID .. permanece fijo en 0.

new priority 5 [maxwell@station maxwell]$ ps -lu maxwell F S UID PID PPID C PRI NI ADDR SZ WCHAN 4 S 515 3031 3028 0 85 5 .1078 wait4 1 S 515 8954 1 0 85 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 .1078 wait4 1 S 515 8954 1 0 79 0 .Cambio de prioridades con renice Al utilizar la opción -u.3313 schedu 0 S 515 8958 3031 1 80 0 .1078 wait4 0 R 515 8984 8958 0 83 0 779 [maxwell@station maxwell]$ renice 5 -u maxwell 515: old priority 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 . [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 .

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

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

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

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

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

[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

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

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

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

at enscript -r2 -G --header="Fan Mail" --borders fanmail. observa los dos trabajos at en espera.txt. 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. [hogan@station hogan]$ at -f fanmail. 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.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. Crea el archivo bogus_fanmail. Después de una corta experiencia desarrolla la siguiente opción para formatear la página a su gusto: enscript -r2 G --header="Fan Mail" --borders fanmail. Dado que hogan no quiere teclear este comando y todas las opciones a cada rato.txt Ahora. que falsifica correspondencia no muy elogiosa de sus fanáticos. [ventura@station ventura]$ echo "lpr bogus_fanmail.txt.at 2:00 am warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh job 11 at 2003-06-18 02:00 [hogan@station hogan]$ atq 11 2003-06-18 02:00 a hogan Examen de la sintaxis Spool El usuario ventura ha notado que hogan tiene la costumbre de imprimir la correspondencia de sus admiradores a las 2:00 am y como un chiste práctico decide someter un trabajo de su propiedad.at: [hogan@station hogan]$ cat fanmail. el administrador del sistema de la máquina actuando como root. cuando hogan quiere someter a impresión su correspondencia de la fanaticada puede simplemente especificar el script a at con la opción -f. crea un guión corto con el (o los) comando(s) que desearía ejecutar en un archivo llamado fanmail. [root@station at]# atq 11 2003-06-18 02:00 a hogan 12 2003-06-18 01:59 a ventura 384 . También ha descubierto el comando enscript.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.

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

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

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

.. Comandos cron Cualquier otra línea (no en blanco) se considera un comando cron.) 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. Variables de entorno Todas las líneas que tienen la forma nombre = valor se utilizan para definir variables de entorno.----> | | | | | ..-> | | | | | | 25 04 1 * * echo minute hour day of month month (1=January. 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).. n. 30 y 45 minutos 388 . */n significado cada vez a la hora especificada a cualquiera de las horas especificadas cada n hora ejemplo * 10 22.----------> | | | . 15. 1=Monday.-------------> | | ..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. Los primeros cinco campos especifican la siguiente información: . 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. .) day of week (0=Sunday.-------> | | | | .----------------> | . el cual consta de seis campos descritos a continuació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.. . 2=February. Las líneas del comando cron constan de seis campos separados de espacios en blanco.

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

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

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

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

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

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

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

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

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

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

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

¿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). Puertos privilegiados A diferencia de los clientes. el catálogo de servicios bien conocidos.com.Figure 2. se conocen como servicios bien conocidos.redhat. Únicamente los procesos ejecutándose como el usuario root pueden enlazarse a puertos privilegiados. 400 . los procesos que ejecutan servidores de red suelen solicitar el puerto al que quieren vincularse. y en retorno. Solamente un proceso puede vincularse a un puerto en un tiempo determinado (¿A qué se debe esto?) Los puertos menores de 1024 se conocen como puertos privilegiados y son tratados de modo especial por el kernel. y los puertos asignados a ellos se mantienen en el archivo /etc/services. 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. En un principio. el proceso mozilla solicitó connect al puerto 80 del servidor. En máquinas de Linux y (Unix). no podría iniciar una versión falsa de un servidor de red que podría distribuir información falsa). mencionamos que el proceso httpd solicitó bind al puerto 80. (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. 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. Múltiples sockets TCP/IP Más acerca de puertos Servicios bien conocidos y el archivo /etc/services En nuestro ejemplo.

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

0.8:6001 .62..0.16. la salida de netstat es similar a la siguiente.0.16. por ejemplo). Sin embargo.0. No obstante.0:443 0.0.0.Cuando se invoca con las siguientes opciones.0:* tcp 0 0 0.0.1:631 tcp 0 0 127.0.0:* tcp 0 0 0.0.0.0.1:32768 0.0.0. el kernel mantiene el rastro de un parámetro conocido como su nombre del equipo y el comando hostname -i presenta la dirección IP asociada con éste. por razones históricas.0.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.16.0.16.1:33952 127.1:32769 127.1:25 0.0.0.0.0:* tcp 0 0 127. no hay razón para que cualquier dirección IP tenga prioridad sobre las otras.0.0.0. cuando se llama con las siguientes opciones se ve información más interesante.0.0. sockets locales "Unix" utilizados para comunicarse entre procesos en la misma máquina.16.0. tcp 0 0 172.0:22 0.0:32768 0.0.0..0.0.0:177 0.9:34387 172.1:631 tcp 0 0 172.0. Infortunadamente. Uso del comando netstat para ver los puertos abiertos Cuando un puerto es utilizado por un socket se le conoce como puerto abierto.0.0. tcp 0 314 127.0:* tcp 0 0 127.0:* tcp 0 0 0.9:33325 172.0. porque las máquinas pueden tener fácilmente más de una dirección IP (una para cada red múltiple de tarjetas de interfaz.0.0.0.16.0:111 0.0.62.16.0.0.0.8:6001 tcp 0 0 172.0.62. El comando netstat sirve para ver una variedad de información de redes incluyendo los puertos abiertos. 402 .0:* udp 0 0 0.0.1:33953 127.62..62.0.62.8:22 udp 0 0 0.8:6001 tcp 0 0 127.0:777 0..0..0.62.0:* .1:32769 tcp 0 0 172. [elvis@station elvis]$ netstat -tuna Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address tcp 0 0 127.9:32903 172.0:* tcp 0 0 127.0:* tcp 0 0 0.0:* tcp 0 0 0.9:32848 172.0.0.0.16.0.1:631 127.0. cuando un comando es llamado sin ninguna opción la salida del comando netstat se inunda de información poco interesante.0.0.0:6000 0.1:631 . En dichas situaciones.0.0.62.0.0.0.0..0.1:631 0.0:* tcp 0 0 0.0.0:80 0.

0. Nos referiremos a los estados más interesantes LISTEN y ESTABLECIDO.0:22 0.0:177 0.0.0.0.0:6000 0. no solo porque cuando se combinan producen una salida interesante.0.0.0.1:32769 ESTABLISHED tcp 0 0 172.1:32769 127.0:* LISTEN tcp 0 0 127.0.0:80 0.62.0:777 0.0..0.0.62. Table 2.0.0.0. 403 .0.0.0.0.16.62.1:25 0.16.0. La dirección IP y el número de puerto de la mitad local del socket.0.0. Cuando se invoca con las siguientes opciones.0.1:33952 127.62.0:* LISTEN tcp 0 0 0.0.0. para mayor información acuda a la página de manual netstat(8).0:* .0:* udp 0 0 0.9:34387 172.0.62..8:6001 ESTABLISHED tcp 0 0 127.0. La dirección IP y el número del puerto de la mitad remota del socket.0.16..9:32903 172.1:631 127.0.0. 5 y 6 de las filas asociadas con tcp.1:631 TIME_WAIT tcp 0 0 127.0.0.8:22 ESTABLISHED udp 0 0 0.16.8:6001 ESTABLISHED .0. tcp 0 0 172..0.16.0.0..62.9:32848 172.1:631 TIME_WAIT .0.0.0. El estado de la conexión TCP. De las muchas líneas.0.1:631 ESTABLISHED tcp 0 0 172.0.0:* LISTEN tcp 0 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.0.0.16.8:6001 ESTABLISHED tcp 0 0 172. Nos referiremos a los sockets tcp.0.0:* LISTEN tcp 0 0 0.0.0:32768 0.0:443 0. tcp 0 314 127.0:* LISTEN tcp 0 0 127.0.0:* LISTEN tcp 0 0 127.1:631 0.16.1:33953 127. [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.0. sino porque también son fáciles de recordar: por ejemplo.0.0.0:* LISTEN tcp 0 0 0.0.62.0.0.0.0.16.0:* LISTEN tcp 0 0 0..0. Las siguientes opciones se escogieron.0.62.1:32768 0.0:* LISTEN tcp 0 0 0. podemos retirar aquellas asociadas con el protocolo udp y concentrarnos en las columnas 4.0.0. la salida de netstat es similar a la siguiente. 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. "tuna" (atún).9:33325 172.0.0.Table 1.0:111 0.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

72.net (66.322 ms 26.net (12.144) 39.whitehouse.Si no hay respuesta para el comando ping. 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. Examen de ruta: /usr/sbin/traceroute Cuando se conecte a una máquina fuera de su subred.152.99) 7.nc.net (66.129.net (12.008 ms 8.045 ms 8.371 ms 9.129. cuando pasa de router a router puede trazarse con el comando /usr/sbin/traceroute.50) 29.123 ms13 gbr6p20.931 ms 5 srp13-0.485 ms 26.829 ms 20.250) 26. Si el comando traceroute se agota a más de cuatro o cinco saltos.atdn.com (24.net (12. El número de routers que su paquete pasa suele conocerse como el número de saltos que ha hecho el paquete.252 ms 2 10.chrlncsa-rtr6.42) 11.184 ms 50.154) 40.087 ms 21.0. 38 byte packets 1 server1 (192.72.11.488 ms 7.798 ms 15.attens.132.934 ms 39.net (66.ip.44. 30 hops max.g.123.rlghncg-rtr1.com (66.185.129.231 ms 29.192 ms 25.675 ms 9.246) 39.139.898 ms Usted hallará con frecuencia que los paquetes toman rutas sorpresivas para ir de un lugar a otro.rr.net (12.382 ms 10.atdn.64.72.122. usted no podrá esperar que se presente ninguna comunicación de red de alto nivel.atl1.net (12.006 ms 28.211) 26.255.162 ms 0. el problema es un router local mal configurado y su administrador de red local probablemente ayude a resolver el problema.64.ip.26. es probable que su gateway por defecto de su máquina no haya sido determinada correctamente.2.82) 38. el nombre del equipo o la dirección IP de la máquina destino.160.nc.140.attens.25.att.901 ms 10 pop2-ash-P1-0.com (24.rr.9.874 ms 4 srp4-0.506 ms 26.carolina.628 ms 31.665 ms 7 pop1-cha-P4-0.903 ms 16 mdf1-bi8k-2-eth-1-1.1) 8.146) 10.123.160.031 ms 6 son0-1-1.gov has multiple addresses. El paquete anterior hizo 17 saltos para alcanzar su destino.wswdc.44.net (12.144 traceroute to a1289.net (66.208 ms 11 ATT.642 ms 3 srp2-0.rlghnca-rtr2.563 ms 10.185.704 ms 27.gov traceroute: Warning: www.129.akamai. 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.wswdc.atdn.wswdc.72.185.122.392 ms 20.803 ms 39.712 ms 9 bb2-ash-P13-0.174) 29.atl1. El culpable suele ser un cable Ethernet que se ha desconectado físicamente de la máquina o de la pared.45) 10.rr.atdn.rlghncrdc-rtr2.178) 4.132.69) 24.81) 29. using 12.127 ms 21.185.079 ms 10. [blondie@station blondie]$ /usr/sbin/traceroute www.168.815 ms 38.rr.129.1 (10.atdn.202 ms 8 bb2-cha-P2-0.827 ms 15 mdf1-gsr12-2-pos-7-0.93.888 ms 22. El comando traceroute suele llamarse con un argumento.162 ms 0.net (66. Si su traceroute termina entre la primera pareja o salta (sin alcanzar el destino final).144).1. La ruta del paquete.whitehouse.com (24.887 ms 17 12.004 ms 12 tbr1-p014001.nc.080 ms 14 gar3-p370.9.254) 0.144 (12.ip.259 ms 10.845 ms 39. Si su paquete no puede completar el primer salto. es probable que el problema esté fuera de control de su administrador de red local.856 ms 39.att.25.att.185.880 ms 19.243 ms 0. Realización de solicitudes DNS de modo manual: host 438 .950 ms 29.33.

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

1: icmp_seq=2 ttl=255 time=2.125.90.2 nameserver 66. 0% loss.125. 2 received.com nameserver 109.255.90.90.86 Bcast:109.125.0.90.136 ms Satisfecha.0.1 Mb) TX bytes:356094835 (339.125.90.1 ping statistics --2 packets transmitted.1) from 109.[madonna@staton madonna]# /sbin/ifconfig eth0 Link encap:Ethernet HWaddr 00:50:8B:0C:B1:D5 inet addr:109.255.0 * 255.90. examina su información de ruta para determinar su gateway por defecto.90.109.1 Mask:255.8 Mb) TX bytes:6124991 (5.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.8 Mb) Convencida que su interfaz está activa y utilizando la dirección IP 109.1 PING 109. [madonna@station madonna]# ping 109.0. 64 bytes from 109.71.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.924/0.90.1: icmp_seq=1 ttl=255 time=2.0.125.1 0.0.125.125.86 : 56(84) bytes of data.125.0.125.0 109.90.75 nameserver 109.0 0.0.90.65 ms CTRL-C --.788/2.125.0.0.90.92 ms 64 bytes from 109.5 Mb) Interrupt:11 lo Link encap:Local Loopback inet addr:127.0 127.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. time 1004ms rtt min/avg/max/mdev = 2.0.125.652/2.0 * 255.90.86.125.1 (109.90. [madonna@station madonna]# /sbin/route -n Kernel IP routing table Destination Gateway Genmask 109.125.90. cancela el comando y luego examina su configuración DNS.218.0.conf search example. [madonna@station madonna]# cat /etc/resolv.255 Mask:255.63 440 .255.125.0.255.

3.717 ms Los resultados del comando ping son un poco problemáticos.71. 3 received.redhat.2.com www.63: icmp_seq=3 ttl=54 time=11.71.86.yahoo..com has address 66.71.473 ms 2. [madonna@station madonna]# ping 66. 38 byte packets 1 209.com is an alias for enterprise.232.836 ms 15.95 www.217.net has address 66.125.218.218. enterprise.63 PING 66.275/19.423 ms 3 216.187.Puesto que ella todavía no ha llamado el host externo de su subred local.71.187.680 ms 11.520 ms 7 64.702/6.71.125.akadns.63 9.redhat.com is an alias for www.699 ms 5 63.787 ms 9.yahoo.173 10.123 ms 10.yahoo.218.net has address 66.redhat. Convencida de que todo parece estar bien.63 (66.218.71.86 : 56(84) bytes of data.com www.192.30 12.net.227 ms 15.193 [madonna@station madonna]$ host www.257 ms 4 216.71.70.63 ping statistics --13 packets transmitted. Por último.218.71. 30 hops max.69.2 ms 64 bytes from 66.281 ms 2 10. 76% loss.48 .881 ms 6 64.835 ms 6.90. [madonna@station madonna]# /usr/sbin/traceroute -n 66.159.com has address 66.789 ms 7.66.50 [madonna@station madonna]$ host hardware.yahoo. 441 .217.7 ms CTRL-C --.71. ella confirma que su servidor de nombres es operacional al realizar unas pocas solicitudes de DNS con el comando host.63: icmp_seq=7 ttl=54 time=20.153 13.963 ms Puesto que traceroute retornó dicha solicitud de salida. 64 bytes from 66.com hardware.218.com.63).71..193 11. time 12045ms rtt min/avg/max/mdev = 11.akadns.306 ms 7.63 traceroute to 66.63) from 109.358 ms 7.679 ms 6.1 3.71.redhat.087 ms 6.215.221 8.252. porque la mayoría de sus paquetes se han quitado. [madonna@station madonna]$ host www.63 (66.63: icmp_seq=11 ttl=54 time=27. www.218.3 ms 64 bytes from 66.218.3.293 ms 20.233.117 ms 7.276 ms 2. Sea cualquiera el problema que estaba teniendo debe haberse relacionado con la congestión de red transitoria observada con el comando ping.redhat. trata de nuevo el navegador de red mozilla y tiene éxito.redhat.152. intenta llamar a un servidor de nombres terciario.218. En su lugar ella intenta determinar el camino recorrido por los paquetes a la máquina.71. madonna asume que cualquier problema observado con el comando ping anterior debió haber sido transitorio.218.169 6.90.218.761 ms 16.yahoo.766/27.akadns.218.877 ms 8 66.218.

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

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

se crea un menú que permite al usuario acceder a los diálogos de favoritos. http://servername:puerto Buscar los recursos de red con curl En contraste. el cliente de red de la línea de comando curl no se esfuerza por verter o navegar interactivamente las páginas web. los Elinks utilizarán el servidor proxy especificado. En cambio. el comando links. 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. donde el servidor proxy (al igual que el navegador Elinks) puede especificarse mediante la siguiente sintaxis. El navegador de texto Elinks Cuando utilice links. Al utilizar la tecla ESC. 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). 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 . el soporte para interacciones de guiones es muy poco sofisticado comparado con otras utilidades tales como curl. La potencia del navegador links es su capacidad para proporcionar una grata experiencia de navegación de red en un entorno de texto. la pantalla está activa y los enlaces pueden navegarse mediante teclas de flechas o el ratón.Figure 1. Configuración de Elinks para utilizar un servidor Proxy Si se establece la variable del entorno HTTP_PROXY. historial y personalización.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[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 .

. En Linux. rm -r suprime directorios recursivamente. El comando rmdir borra directorios (vacíos). 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. vacíos): mkdir La organización de archivos dentro de directorios requiere la habilidad para crear los directorios que necesita. el comando para hacer un directorio nuevo es el comando mkdir (del inglés make directory). El comando mkdir crea directorios. Falla y emite un mensaje de error si uno o más de los DIRECTORIO(s) existen. Uso: mkdir [OPCIONES] {DIRECTORIO.. pero los nuevos directorios restantes son aún creados. 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 . Discussion Creación de directorios (nuevos.} Crea el(los) DIRECTORIO(s) si no existe(n). cp -r copia directorios recursivamente.Administración de directorios Conceptos clave • • • • • Se puede examinar el contenido de árboles de directorios completos con el comando ls -R.

hogan lista el contenido del directorio de modo recursivo. el comando ls sólo mostrará el contenido del directorio del nivel más alto. puede añadir la opción -R.Sólo si Elvis utiliza mkdir -p (como 'padre') puede crear un árbol de directorios completo de una sola vez: [elvis@station elvis] ls work ls: work: No such file or directory [elvis@station elvis] mkdir -p work/spreadsheets [elvis@station elvis] mkdir -p work/images/logos [elvis@station elvis] mkdir -p work/images/advertising [elvis@station elvis] ls work images spreadsheets [elvis@station elvis] ls work/images advertising logos A title Listado de árboles de directorios Por ahora. Por ejemplo. hogan está explorando la configuración de red de la máquina y sospecha que el directorio /etc/sysconfig/networking es un directorio importante.conf /etc/sysconfig/networking/profiles/netup: hosts ifcfg-eth0 network resolv. Cuando un comando se repite a través de una estructura. tenga en cuenta que cuando se da un directorio como argumento al comando ls.conf ls -R también se puede combinar con cualquiera de las opciones de línea de comando vistas anteriormente. éste lista el contenido del directorio. o ls -lR para incluir los atributos de archivos. La opción -R especifica que el