2 filesystem basics

289 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
289
On SlideShare
0
From Embeds
0
Number of Embeds
26
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

2 filesystem basics

  1. 1. 1 Filesystem basics Capítulo 1 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 "/". Todo proceso tiene un directorio actual de trabajo con frecuencia llamado "cwd". El comando pwd muestra el cwd de la shell bash. El comando cd cambia el cwd de la shell bash. Los archivos se pueden reseñar tanto por referencias absolutas como por referencias relativas. 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. A un archivo individual se le asigna un nombre (un nombre de archivo), y los nombres de archivo se organizan en un directorio (denominado como directorio en algunos sistemas operativos). Sin embargo, los directorios son en sí mismos un tipo de archivo para que también puedan ser recopilados en otros directorios. Este proceso puede continuar, nivel tras nivel, hasta crear un entorno altamente estructurado. Por ejemplo, la usuaria alice podría tener varias canciones almacenadas en archivos con nombres como song1.midi y song2.midi. Estas canciones se podrían agrupar en un directorio llamado songs. La usuaria alice también podría tener algunas fotos almacenadas en los archivos picture1.png y picture2.png y a su vez, podría haberlos agrupado en un directorio llamado photos. Los dos directorios songs y photos se pueden organizar en un directorio llamado media. Este nuevo directorio puede ser uno de tantos en el directorio website. Una manera de visualizar esto es por medio de una estructura ramificada de árbol. El directorio website puede contener los subdirectorios html, formsy media. Junto con los directorios y los archivos nombrados anteriormente, este orden se puede bosquejar como aparece en la gráfica 1-1. Figure 1. Ejemplo de un árbol de directorios -- html | website -- -- forms | | | | | | | -- song1.midi | -- songs -| | | -- song2.midi |
  2. 2. 2 Filesystem basics -- media -| -- picture1.png | | -- photos-| -- picture2.png De la apariencia de ramificaciones de este diagrama es de donde surge la idea de árbol de directorios. 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, se le llama estructura de directorio de árbol invertido. Linux utiliza un sólo árbol de directorios para toda su colección de archivos y directorios, todas las ramas de una sola raíz "/" (léase como "barra oblicua") llamada directorio raíz. Este árbol de directorios se puede ver, en parte, como se muestra en la gráfica 1-2. Figure 2. Árbol de directorios iniciando en / -- bin... | / -- -- etc... | | -| | | -- alice -| | | | | -| | -- home -| | -| | | | -- elvis -| | | -... mystuff... website... docs... graphics... Las elipses en el diagrama sugieren que hay muchos archivos y directorios que no se muestran aquí. Por ejemplo, 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. Al nombrar un archivo o directorio, 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, separando cada parte con una barra oblicua (/). Esto se conoce como el nombre completamente calificado o FQN. Por ejemplo, el FQN del directorio website, mencionado anteriormente, sería /home/alice/website. El archivo song1.midide la usuaria alice se identificaría como /home/alice/website/songs/song1.midi. La cadena de nombres de directorios que le llevan al nombre de archivo es la ruta del archivo. Este tipo de nominación, ayuda a garantizar que cada archivo y directorio tenga un nombre
  3. 3. 3 Filesystem basics único completamente calificado. En la práctica real, los atajos y las suposiciones por defecto se utilizan para simplificar el tecleado de los nombres de los archivos. Exploración del árbol de directorios utilizando Nautilus En el entorno gráfico X de Red Hat Enterprise Linux, los usuarios pueden utilizar Nautilus como una herramienta sofisticada para navegar en el sistema de archivos. En el escritorio de Red Hat Enterprise Linux, 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. Figure 1. Ventana Nautilus Como una alternativa, usted puede utilizar el navegador Nautilus (puede ser más sencillo para aquellos que han tenido contacto con lanzamientos previos de Red Hat Enterprise Linux) al seleccionar el "navegador de archivos" desde el menú principal de Aplicaciones. [1] Figure 3. El navegador Nautilus Para poder explorar el árbol de directorios utilizando Nautilus, primero tenemos que activar el panel lateral de Nautilus. Esto puede hacerse seleccionando el "panel lateral" desde el menú "ver". Figure 4. Activación del panel lateral de Nautilus
  4. 4. 4 Filesystem basics La aplicación de panel lateral deNautilus se utiliza para diferentes propósitos. En este momento, estamos interesados en explorar el árbol de directorios, así que seleccione "árbol" en el panel lateral superior del menú. Figure 5. 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 /. 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. Cuando haga click en el icono de la carpeta o en el nombre de carpeta, podrá ver el contenido de la carpeta en el panel principal de Nautilus. Figure 6. Exploración del árbol de directorios con Nautilus Tenga en cuenta que cuando se selecciona un directorio particular para ver, la entrada de "Buscar" que se encuentra justo arriba del panel principal, muestra una referencia absoluta (FQN) para el directorio que se está viendo. Dedique un poco de tiempo para explorar el sistema de archivos con Nautilus y para ver el contenido de varios directorios. Intente ver el contenido del archivo /etc/sysconfig/network-scripts/ifcfg-lo, primero seleccionando el directorio /etc/sysconfig/network-scripts en el panel lateral y después, haciendo doble clic (en el botón izquierdo del ratón) en el icono ifcfg-lo en el panel principal. 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, hablaremos un poco sobre algunos de los conceptos relacionados con el sistema de archivos de Linux. El directorio de trabajo actual (cwd) A cada proceso Linux (por ejemplo,un programa o un comando) cuando se ejecuta, se le asigna un directorio por defecto. Este directorio por defecto se utiliza para completar el FQN para cualquier archivo cuyo nombre no se especifique como un FQN. Esto tiene dos efectos. Primero, le permite al proceso referirse a los archivos de una manera más sencilla sin tener que utilizar nombres demasiado largos. Segundo, le permite al proceso operar con mayor flexibilidad ya que sus acciones dependen en parte del directorio por defecto. Si cambia el directorio por defecto, la acción del proceso también cambiará. A este directorio por defecto se le conoce como el directorio actual de trabajo ó cwd, para el proceso.
  5. 5. 5 Filesystem basics Un método común que puede utilizarse con los directorios es el considerar un directorio como un lugar más que una cosa. Desde este punto de vista entonces el cwd para un proceso se puede considerar como la ubicación actual de un proceso. Si un proceso cambia de cwd entonces se ha movidode un directorio a otro. 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. Por ejemplo, los usuarios hablan de navegar el sistema de archivos cuando se mueven de un directorio a otro. En primer lugar, el padre del proceso que lo inicia le asigna un cwd al proceso. Sin embargo, un proceso no está sujeto todo el tiempo a un determinado cwd cuando ejecuta. Cuando sea necesario, un proceso puede cambiar su cwd a otro directorio antes de continuar su trabajo. ¿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. Si usted inicia la sesión en el sistema a través de una terminal virtual, o inicia un programa de terminal en X, verá el intérprete de comandos en donde puede introducir comandos para que el sistema actúe. Este intérprete de comandos es producido por la shell de comandos, el cual es el proceso responsable de la lectura e interpretación de comandos. Por defecto, la shell de comandos para los sistemas de Red Hat Enterprise Linux es la shell de comandos bash (del inglés Bourne-again shell). Como cualquier otro proceso, la shell bash se mantiene al tanto de su cwd mientras está ejecutando. El directorio de trabajo actual afecta los comandos que usted escribe en el intérprete de comandos y se convierte en su cwd mientras ejecutan. Básicamente entonces, el cwd de la shell bash es su cwd, y puede considerarse como el lugar en donde usted se encuentra dentro del sistema. Obviamente, es importante estar al tanto del cwd. Afortunadamente, hay ayuda disponible. Primero, el mismo intérprete de comandos muestra el último directorio de la ruta al cwd. Por ejemplo, la usuaria alice, 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. Pero pueden haber otros directorios website en alguna otra parte del sistema. La ruta completa (o absoluta) del directorio de trabajo actual se puede visualizar con el comando pwd (del inglés print working directory). Uso: pwd
  6. 6. 6 Filesystem basics La usuaria alice quiere verificar si se encuentra en el directorio correcto. Podría utilizar pwd. [alice@station student]$ pwd /home/alice/website Cambio de sitio- El comando cd Como se anotó anteriormente, los procesos pueden cambiar sus cwd cuando sea necesario. Esto incluye la shell de comando bash, la cual proporciona el comando cd (del ingleś change directory) para cambiar el directorio actual desde el intérprete de comandos. Uso: cd [DIRECTORIO] Si no se especifica, DIRECTORIO utiliza por defecto el directorio de inicio del usuario. Considere la siguiente secuencia de comandos: [alice@station website]$ pwd /home/alice/website [alice@station website]$ cd /home [alice@station home]$ pwd /home [alice@station home]$ cd /home/alice/website/songs [alice@station songs]$ pwd /home/alice/website/songs Observe cómo cambia el resultado del comando pwd y la última parte del intérprete de comandos para reflejar el nuevo cwd después de cada comando cd. Puesto que navegar por los directorios es tan importante, hay abreviaturas especiales para hacer referencia a ciertos directorios: Table 1. Nombres de directorios especiales Symbol 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. Primero, bash reconoce todos menos el último nombre simbólico en la mayoría de los contextos, no sólo en el comando cd.
  7. 7. 7 Filesystem basics Segundo, el árbol de directorios se describe generalmente utilizando la analogía padre/hijo. Si dir1 contiene a dir2, entonces se dice que dir2 es el directorio hijo de dir1 y que el dir1 es eldirectorio padre del dir2. Por lo tanto, el directorio .. está a un nivel más cerca de la raíz del árbol de lo que se encuentra el cwd. Después se le asigna un directorio de inicio a cada cuenta de usuario, usualmente un subdirectorio de /home que coincide con su nombre de usuario (este tema se explicará más detalladamente en el siguiente capítulo). El directorio ~ representa ese directorio. Finalmente, la raya (-) es una opción especial del comando cd que se refiere al directorio de trabajo anterior, facilitando el cambio entre directorios hacia adelante y hacia atrás. De nuevo, considere la siguiente secuencia de comandos: [alice@station songs]$ pwd /home/alice/website/songs [alice@station songs]$ cd ~ [alice@station alice]$ pwd /home/alice [alice@station alice]$ cd [alice@station songs]$ pwd /home/alice/website/songs [alice@station songs]$ cd .. [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. Referencias absolutas y relativas Esta sección describe dos maneras de identificar la ubicación de un archivo. En esta sección, como casi en cualquier otra parte de estas lecciones, es importante recordar que en Linux un directorio es un tipo de archivo, así que todo lo que se diga sobre nominación de archivos, también aplica a directorios y a archivos comunes de datos. Para identificar un archivo, se debe proporcionar suficiente información para localizar el archivo dentro del sistema de archivos. Esta ubicación se puede proporcionar de dos maneras: como referencia absoluta(o ruta absoluta) o como referenciarelativa. Las referencias absolutas inician con una barra oblicua (/) y asignan el FQN del archivo. Es decir, la referencia absoluta nombra cada rama del árbol de directorio del sistema de archivos, a partir de /, la cual se debe recorrer hasta llegar al archivo. Sin importar en dónde se encuentre usted en el sistema de archivos, (en otras palabras, sin importar el valor del cwd), una referencia absoluta identifica claramente el recurso específico. Ya hemos discutido varios ejemplos de referencias absolutas en esta lección.
  8. 8. 8 Filesystem basics Una referencia relativa no describe la ruta al archivo desde /, sino que describe la ruta a partir del directorio actual. Por ejemplo, si el cwd es /home/alice, entonces la referencia relativa a song1.midi puede ser website/songs/song1.midi. Esta es una referencia relativa ya que no comienza con /. Esta referencia sólo nombra los directorios que se deben recorrer iniciando desde /home/alice, no desde /. Para que una referencia relativa sea válida debe iniciar nombrando un directorio (o archivo) en el cwd. Todos los directorios en Linux contienen dos entradas especiales, los directorios . y .., los cuales representan el directorio actual y el directorio padre, respectivamente. Por lo tanto, en la discusión previa acerca del comando cd, el ejemplo cd .. era en realidad sólo un uso de una referencia relativa. La tabla 1-2 muestra algunos ejemplos adicionales sobre referencias relativas. Cada uno de estos es una referencia al archivo /home/alice/sample.txt con FQN. Algunos de estos ejemplos son intencionalmente "ineficaces." Table 1. Ejemplos de referencias relativas a /home/alice/sample.txt cwd /home/alice Referencia relativa sample.txt o ./sample.txt /home/alice/website/songs ../../sample.txt /home/elvis/docs ../../alice/sample.txt /home alice/sample.txt /home ../home/alice/website/../sample.txt Sí, el último ejemplo es bastante tonto, pero es perfectamente válido. Capítulo 2 Directorios importantes Conceptos clave • • • • • A toda cuenta de usuario se le asigna un directorio de inicio. El directorio /tmp se utiliza como espacio global para borradores. Los directorios /bin y /usr/bin comúnmente contienen archivos ejecutables. El directorio /etc contiene archivos de configuración del sistema. El directorio de inicio de /root, no se debe confundir con el directorio raíz del sistema de archivos, /. Esquema estándar de directorios de Linux
  9. 9. 9 Filesystem basics Linux se puede utilizar para soportar muchos tipos diferentes de sistemas informáticos: servidores, estaciones de desarrollo, sistemas de escritorio personales, etc. Para poder estandarizar la estructura del directorio del sistema de archivos a través de este variado rango de sistemas, la mayoría de los sistemas Linux emplean un esquema de nominación y utilización común que facilitan el uso y el mantenimiento de los sistemas. Al utilizar el mismo tipo de diagrama arbóreo empleado en el último capítulo, parte de la primera capa del árbol de directorios se vería así: Figure 1. Árbol parcial de directorios iniciando en / -| -| -| -/ --| -| -| -| -- bin... etc... home... root... sbin... tmp... -- bin usr --| -- sbin var... Este capítulo presenta una breve descripción (a veces muy breve) del papel de cada uno de estos directorios. 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. Comúnmente éste es un subdirectorio bajo el directorio /home, cuyo nombre coincide con el nombre de inicio de sesión del usuario (se vieron varios ejemplos anteriormente /home/alice o /home/hogan). La única excepción importante a esto es el superusuario (o el usuario root) cuyo directorio de inicio usualmente es /root. Para cualquier usuario, el caracter (~) representa el FQN del directorio de inicio del usuario cuando se utiliza como el primer caracter de una referencia de archivo o directorio. El propósito más obvio para el directorio de inicio de un usuario es brindar un espacio privado para datos, un lugar en donde se pueden guardar archivos separados de los archivos de otros usuarios. Normalmente, 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). 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. Por ejemplo, tanto Alice como Hogan pueden tener cada uno su subdirectorio
  10. 10. 10 Filesystem basics public_html, /home/alice/public_html y /home/hogan/public_html respectivamente. El mantener el espacio de cada uno separado de los otros, ofrece también más seguridad a los usuarios. 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. Por ejemplo, cuando Blondie inicia la sesión puede que necesite un entorno diferente al de Prince. Puede que Blondie prefiera diferentes colores en su pantalla, diferentes atajos de comandos e inclusive un entorno de escritorio de trabajo completamente diferente al de Prince. Los archivos de configuración locales específicos para cada usuario hacen que esto sea posible. 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. 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. Por ejemplo, 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. Además, es muy probable que no pueda leer, modificar o borrar ninguno de los archivos en los directorios de los usuarios del sistema. Cuando un usuario inicia sesión en el sistema por primera vez se le ubica "en" su directorio de inicio, es decir, el sistema configura su directorio de inicio como su directorio de trabajo inicial. El directorio temporal /tmp Además de su espacio personal en sus directorios de inicio, se le da acceso a los usuarios para compartir espacio de "borrador", en el directorio /tmp. Un programa que necesite almacenar datos comprimidos puede almacenar resultados parciales en /tmp, sólo poniendo los resultados finales en el directorio de inicio del usuario cuando haya terminado de hacerlo. Con frecuencia los sistemas Linux implementan cuotas en cuentas de usuarios para prevenir que cualquier usuario consuma una proporción injusta del espacio disponible. El 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. Esto es especialmente importante, 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. Este espacio de borrador "global" se encuentra disponible para todos los procesos en el sistema así como para todos los usuarios. El sistema borra automáticamente los archivos puestos en este directorio después de unos días. El directorio de configuración /etc Una de las características únicas de un sistema Linux es su flexibilidad. Prácticamente todo aspecto del sistema puede configurarse de alguna forma editando un archivo de
  11. 11. 11 Filesystem basics configuración. Estos archivos de configuración normalmente se colocan en /etc o en un subdirectorio de /etc. Por ejemplo, el programa sendmail, a menudo utilizado para ejecutar un servidor de correo, utiliza los archivos de configuración que se colocan en /etc/mail. Los scripts de arranque del sistema se encuentran en /etc/rc.d, mientras que los archivos de configuración de la red se encuentran en /etc/sysconfig. Obviamente, los usuarios comunes no pueden modificar los archivos en /etc (o incluso leerlos, en algunos casos), pero los administradores de sistemas invierten bastante de su tiempo trabajando con los archivos almacenados aquí. 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. Los comandos apropiados para el uso de usuarios comunes se suelen ubicar en los directorios binarios /bin o /usr/bin. Las utilidades más importantes como ls, cd, cp, mv y el editor de texto vi, sin los cuales no se podría usar el sistema van en /bin. Las utilidades adicionales como los compiladores, su navegador de web y la suite de oficina van en /usr/bin, los cuales se pueden poner a disposición de otros sistemas a través de la red. 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. 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. Los directorios de comandos /sbin y /usr/sbin Así como /bin y /usr/bin almacenan archivos de comando para usuarios comunes, también /sbin y /usr/sbin almacenan archivos de comandos para que el superusuario root los utilice. Estos incluyen comandos para adjuntar y quitar hardware, para iniciar y detener el sistema y para realizar mantenimiento del sistema. Estos comandos privilegiados también se encuentran almacenados en dos directorios separados por las mismas razones que para /bin y /usr/bin. El directorio "variable" /var Las colecciones de comandos y de archivos de configuración que se encuentran en lugares como /bin o /etc cambian muy poco día a día, si es que cambian del todo. Estos archivos tienden a ser muy estables. Sin embargo, algunos archivos cambian con frecuencia. Estos incluyen correo electrónico entrante y saliente, registros del sistema, sitios web, archivos ftp y similares. Estos archivos y directorios con contenido variable suelen recopilarse en el directorio /var. 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. root vs./rootvs./ (la raíz del sistema de archivos)
  12. 12. 12 Filesystem basics 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. La raíz o el "root" en inglés, es el nombre de usuario del superusuario, es decir, el usuario con autoridad suprema sobre el sistema. También es el nombre del directorio de inicio de ese usuario, /root. Igualmente, es el término que se utiliza para la base (¿la parte superior?) del árbol de directorios del sistema de archivos, el directorio /. Normalmente, el significado del término se puede deducir del contexto, pero una oración tal como el "directorio raíz" puede llegar a ser ambigua. 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. Ejemplos El directorio /tmp 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. También quiere probar si realmente puede crear archivos allí. Para crear un archivo, Alice utilizará el comando touch. [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 usa ls y ls -l para ver el contenido del directorio /tmp. Aunque ls -l produce un listado largo, 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, como le habían dicho antes. De hecho, tanto orbit-alice como ssh-XXDg4ke3 fueron colocados allí cuando ella inició su entorno de escritorio. Alice utiliza el comando touch para crear un nuevo archivo vacío llamado newfile en /tmp. Como muchos de los comandos Linux cuando touch lo logra, lo hace de manera silenciosa (sin ningun aviso en la pantalla). Alice verifica que touch sí funcionó con otro ls -l. Búsqueda de comandos en /bin y /usr/bin
  13. 13. 13 Filesystem basics 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. Decide probar cp, mozilla, cd y fdisk. Hogan puede utilizar ls para buscar estos comandos, pero en su lugar quiere probar un nuevo comando, which. Uso sencillo: which PROGRAM Muestra el FQN del archivo del comando PROGRAM que se utilizará si el usuario ejecuta el comando. [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 ... ether-wake ldconfig portmap extendfs lilo poweroff fdisk logdump pppoe vgcfgbackup ... usbmodules vboxd Hogan ve que cp se encuentra en el directorio /bin, 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. Hogan encuentra mozilla (el navegador que escogió) en /usr/bin. Esto también parece estar bien ya que los archivos en /usr/bin son archivos que un usuario normal podría querer que no siempre estuviesen disponibles. Hogan está sorprendido de los resultados de cd, lo cual parece decir que el comando cd no está en el sistema. Estaba esperando ver una respuesta como /bin/cd. (¿Por qué?) Lo que Hogan no sabe es que cd es un ejemplo de un comando interno, provisto por el comando de la shell bash. Por otro lado, si revisara, encontraría bash
  14. 14. 14 Filesystem basics en /bin. Hogan también está sorprendido de los resultados de fdisk. Sabe que es un comando importante, pero peligroso, utilizado para particionar discos y sólo debe estar disponible para el superusuario así que estaba esperando una respuesta de /sbin. Incluso puede ver fdisk en /sbin cuando lo examina utilizando ls. Al mirarlo más detenidamente, descubre que which ni siquiera buscó fdisk en /sbin. Después Hogan aprenderá sobre la ruta de comandos y descubrirá el porqué esto tiene perfecto sentido. 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. Tiempo estimado: 15 minutos. Configuración En este ejercicio necesitará utilizar touch para crear archivos. Este comando se demostró en los ejemplos de este capítulo. Necesitará utilizar which para ubicar los archivos de comando. Este comando también se demostró en los ejemplos. Especificaciones 1. Abra una nueva terminal o una nueva consola virtual (esto se necesita para la evaluación de su trabajo en línea). Quiere probar si en realidad puede utilizar touch para crear archivos en varios directorios. Espera que esto funcione en su directorio de inicio y en /tmp, pero no en otros directorios. Use el comando touch newfile.username (en donde el username se remplaza con su nombre de usuario) en cada uno de los siguientes directorios. a. b. c. d. ~ /tmp /bin /root Claramente, cabe esperar que algunos de sus esfuerzos no den resultado. Regrese a su directorio de inicio cuando haya terminado.
  15. 15. 15 Filesystem basics 2. Utilizando which, determine el FQN del archivo del comando binario para cada uno de los siguientes: pwd, ls y whoami. Ejecute cada uno de estos comandos de manera "cruda" utilizando el FQN en el intérprete de comandos. Finalmente, ejecute exit, salga de la terminal o de la consola virtual. Cuando haya terminado, salga de su shell para que se guarde la historia de sus comandos en el archivo ~/.bash_history. Deliverables Question 1 1. Dos archivos llamados ~/newfile.username y /tmp/newfile.username, en donde username es su nombre de cuenta primaria. 2. Un archivo ~/.bash_history que contiene un registro de sus comandos. Possible Solution La siguiente secuencia de comandos demuestra el uso de which y touch, y la ejecución de un comando utilizando su referencia absoluta. [student@station student]$ touch /tmp/newfile.student [student@station student]$ which pwd /bin/pwd [student@station student]$ /bin/pwd /home/student Capítulo 3 Administración de archivos Conceptos clave • • • • • Se pueden crear archivos (o agregar) de una manera fácil utilizando el redireccionamiento de la shell. El comando cp copia archivos. El comando mv mueve archivos. El comando rm borra archivos. Los archivos pueden ser "sobrescritos" como resultado de redireccionar, mover o copiar.
  16. 16. 16 Filesystem basics Redirección Muchos de los comandos producen salidas “visibles”. Normalmente, la salida se mostrará en la pantalla. Por ejemplo, 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. En el ejemplo anterior, pwd envió la salida al archivo de salida estándar, o STDOUT, el cual es por defecto la pantalla para los usuarios que han iniciado sesión en el sistema. 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, también puede ser redireccionada a algún otro archivo. Esto se hace utilizando el símbolo especial de redireccionamiento, , como se muestra en este ejemplo: [julius@station julius]$ ls [julius@station julius]$ pwd > results.txt [julius@station julius]$ ls results.txt En este ejemplo, los resultados usuales del comando fueron dirigidos al archivo results.txt, creando el archivo durante el proceso. Un comando útil que nos puede servir para verificar lo que ha pasado es el comando cat (concatenar). Uso: cat [OPCIONES] [ARCHIVO...] ConcatenarARCHIVO(s) a la salida estándar. El comando cat copia cada uno de los archivos listados a la salida estándar. Si se lista más de un archivo, esto concatena efectivamente los archivos. Como para cualquier otro comando, esta salida se mostrará en la pantalla por defecto, pero también se puede redireccionar a un archivo. Lo utilizaremos para mostrar un archivo nombrando un sólo archivo y no redireccionando los resultados. [julius@station julius]$ pwd > results.txt [julius@station julius]$ ls results.txt [julius@station julius]$ cat results.txt /home/julius Esta vez, Julius capturó la salida de pwd redireccionando los resultados a results.txt y después mostró results.txt con cat.
  17. 17. 17 Filesystem basics Si el archivo ya existe, el redireccionamiento borrará y re-creará el archivo vacío y luego capturará la nueva salida. Sin embargo, si se utiliza un doble símbolo (>>) la nueva salida se añadirá al archivo. Si se utiliza >> y el archivo destino no existe, éste se crea como si se hubiese utilizado >. El símbolo > es un ejemplo de un meta-caracter de shell, es decir, un símbolo con significado especial que la shell bash ve e interpreta antes de actuar sobre el resto del comando. Hay muchos de éstos como veremos en las próximas lecciones y todos requieren atención. El comando más sencillo de todos que produce una salida visible es echo. El comando echo toma cualquier texto que se teclee como parte del comando y lo repite a la salida estándar (usualmente la pantalla). Este comando sencillo junto con el redireccionamiento, se puede utilizar para crear archivos de texto. Uso: echo [OPCIONES] [STRING...] Repite la cadena de caracteres en la salida estándar. Example 1: [julius@station julius]$ echo Hello > greetings.txt [julius@station julius]$ echo How are you >> greetings.txt [julius@station julius]$ cat greetings.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.txt julius]$ cat results.txt julius]$ ls >> results.txt julius]$ cat results.txt Copie archivos con cp Se pueden crear duplicados de archivos con el comando cp (del inglés copy). Uso: cp [OPCIONES] {FUENTE} {DESTINO} cp [OPCIONES] {FUENTE...} {DIRECTORIO}
  18. 18. 18 Filesystem basics De la primera manera, se hace una copia del archivo FUENTE como DESTINO. De la segunda manera, se pueden copiar uno o más archivos al mismo tiempo a un directorio. Se hace una copia del archivo FUENTE, ..., en el DIRECTORIO y se nombra DIRECTORIO/FUENTE, .... Con las opciones apropiadas (no se discutirán aquí - intente man cp), puede copiar árboles de subdirectorios completos de una sola vez. Ejemplos: 1. Haga una copia de mysong.midi y nombre la copia backup.midi: cp mysong.midi backup.midi 2. Haga una copia de mynovel.txt en /tmp: cp mynovel.txt /tmp El archivo resultante se llamará /tmp/mynovel.txt. 3. Copie los archivos songs.tar y novels.tgz en el directorio /tmp: cp songs.tar novels.tgz /tmp Nombre los archivos resultantes /tmp/songs.tar y /tmp/novels.tgz. 4. Haga una copia de webpage.html desde su directorio de inicio a su directorio actual: cp ~/webpage.html . El archivo resultante se llamará ./webpage.html. Mueva/renombre archivos con mv Puede mover archivos de un directorio a otro o de un nombre a otro (renombrarlos) con el comando mv (mover). Uso: mv [OPCION...] {FUENTE} {DESTINO} mv [OPCION...] {FUENTE...} {DIRECTORIO} . En la primera forma, el archivo FUENTE es renombrado como DESTINO. De la segunda forma, uno o más archivos pueden ser movidos a un directorio al mismo tiempo. Los
  19. 19. 19 Filesystem basics archivos FUENTE, ..., se mueven al DIRECTORIO y se nombran DIRECTORIO/FUENTE, .... FUENTE puede ser un directorio, en tal caso el directorio se mueove o se renombra. El comando mv es particularmente interesante , 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. Aunque el comando mv proviene de la palabra "mover," de hecho mv raras veces mueve datos. En su lugar, el sistema de archivos simplemente graba un cambio de nombre. Si el nombre cambia de /somedir/somefile a /somedir/newname, vemos esto como una "renombramiento" del archivo. Si el nombre cambia de /somedir/somefile a /newdir/somename, vemos esto como "mover" el archivo. Si el nombre cambia de /somedir/somefile a /newdir/newname, vemos esto como un cambio doble, mover y renombrar. Pero para Linux todos estos son la misma cosa, un cambio en el FQN del archivo. Ejemplos: 1. Renombre mysong.midi como backup.midi: mv mysong.midi backup.midi 2. Mueva mynovel.txt a /tmp: mv mynovel.txt /tmp El archivo resultante se llamará /tmp/mynovel.txt. 3. Mueva songs.tar y novels.tgz a /tmp: mv songs.tar novels.tgz /tmp Nombre los archivos resultantes /tmp/songs.tar y /tmp/novels.tgz. 4. Mueva webpage.html de su directorio de inicio al directorio de trabajo actual: mv ~/webpage.html . El archivo resultante se llamará ./webpage.html. 5. Renombre el subdirectorio html del directorio actual de trabajo a public_html: mv html public_html Renombra ./html como ./public_html, asumiendo que ./public_html no existe de antemano - vea el siguiente ejemplo.
  20. 20. 20 Filesystem basics 6. Su cwd es su directorio de inicio. Tiene dos subdirectorios ~/images y ~/html. Mueva el directorio images al directorio html: mv images html El directorio resultante se llamará ~/html/images. Observe la similitud entre este ejemplo y el anterior. La diferencia crítica es que en este caso el directorio destino ~/html ya existía, asi que mv movió el directorio fuente dentro (bajo) el directorio destino. En el ejemplo anterior, el directorio destino no existía aún, así que mv renombró el directorio fuente con el nuevo nombre. Suprima (borre) archivos con rm Se pueden suprimir (eliminar, borrar) archivos con el comando rm (remover). Uso: rm [OPCIONES] {ARCHIVO...} Suprime el (los) ARCHIVO(s) del sistema de archivos. Técnicamente, desenlaza el (los) ARCHIVO(s), una diferencia que se aclarará más adelante. Con las opciones apropiadas (no discutidas aquí - intente ejecutar man rm) se pueden borrar árboles de subdirectorios de una sola vez. Note rm no puede borrar un directorio a menos de que se utilicen opciones especiales del comando. Hay un comando especial para este propósito: rmdir. Warning Sí, el comando rm puede suprimir árboles enteros de directorios de una sola vez. En las manos del susperusuario puede borrar el contenido completo de un sistema de archivos -- no siempre es lo que se pretende hacer. Warning La documentación para rm incluye la siguiente frase: "Observe que si utiliza rm para suprimir un archivo, usualmente es posible recuperar el contenido de ese archivo." Aunque esto pueda ser verdad requiere un nivel de habilidad más allá del proposito de este curso, así que para todos los propósitos prácticos, debe tratar este comando como si no fuese reversible. Ejemplos: 1. Borrar mysong.midi: rm mysong.midi
  21. 21. 21 Filesystem basics 2. Borre songs.tar y novels.tgz: rm songs.tar novels.tgz 3. Borre photos.html de su directorio de inicio: rm ~/photos.html Sobrescribir archivos (¡uy!) Algunas de las advertencias incluídas en la sección anterior insinúan algunos de los comandos potencialmente peligrosos como cp, mv y rm. Infortunadamente, aunque por lo general, mientras vemos pasar las corrientes del rio, con frecuencia olvidamos las rocas que se encuentran bajo el agua y Linux también es el mismo caso. Este es el precio que hay que pagar por el poder de un sistema operativo como Linux. En esta sección resaltamos uno de esos peligros: sobrescribir archivos. La redirección de comandos con > y los comandos cp y mv, pueden nombrar los archivos destino. Normalmente, estos son nombres de archivos nuevos y los comandos crean los archivos. Pero si se nombra un archivo existente como destino de la redirección, cp o mv, el archivo existente será destruido sin advertencia. Esto se conoce como sobrescribir un archivo. Puesto que este problema puede llegar a ser tan sorprendentemente sutil para un nuevo usuario, le vamos a mostrar varios ejemplos. Ejemplo 3: [julius@station [julius@station /home/julius [julius@station [julius@station mycwd julius]$ pwd > file1 julius]$ cat file1 julius]$ ls > file1 julius]$ cat file1 Aquí no hay muchas sorpresas si ha puesto atención -- simplemente observe la manera en que la segunda redirección remplazó el contenido anterior de file1 sin ningún mensaje de advertencia. El archivo file1 se ha sobrescrito. Ejemplo 4: [julius@station [julius@station file1 [julius@station [julius@station file1 file2 [julius@station /home/julius julius]$ touch file1 julius]$ ls julius]$ pwd > file2 julius]$ ls julius]$ cat file2
  22. 22. 22 Filesystem basics [julius@station julius]$ mv file2 file1 [julius@station julius]$ ls file1 [julius@station julius]$ cat file1 /home/julius Aquí tampoco hay sorpresas -- observe como mv remplazó el contenido previo de file1 sin ninguna advertencia. De nuevo, file1 ha sido sobrescrito. cp habría remplazado file1 de la misma manera. Para poder entender completamente nuestro último ejemplo, necesitamos aprender un poco más acerca de redireccionamiento. En particular, necesitamos aprender cuándo se sucede la redirecció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, cuando el primer ls sólo muestra file1? Respuesta: debido a la secuencia en que tuvieron lugar los pasos críticos. Evento 1: bash vio la redirección al archivo file2 y lo creó como un archivo vacio (vea la discusión anterior sobre redireccionamiento). Evento 2: ls generó un listado de archivos mostrando el archivo creado anteriormente file1 y el que se acaba de crear file2. Evento 3: la salida de ls se envió a file2. Ejemplo 6: [julius@station julius]$ pwd > mycwd [julius@station julius]$ cat mycwd /home/julius [julius@station julius]$ cp mycwd mycwd cp: `mycwd' and `mycwd' are the same file [julius@station julius]$ cat mycwd /home/julius [julius@station julius]$ cat mycwd > mycwd cat: mycwd: input file is output file [julius@station julius]$ cat mycwd [julius@station julius]$ Esto necesita una explicación. Primero, Julius crea mycwd usando pwd y presenta su contenido con cat. Después utiliza cp para tratar de copiar el archivo a sí mismo pero cp detecta el "error," muestra un mensaje y no hace nada (mv hubiese hecho lo mismo). El cat
  23. 23. 23 Filesystem basics en la línea siguiente verifica que mycwd no ha tenido cambios. Está bien hasta ahora. Sin embargo, la siguiente secuencia produce una gran sorpresa. Julius usa cat con redireccionamiento para tratar de copiar un archivo a sí mismo. cat también se queja de los archivos fuente (entrada) y del destino (salida) al ser el mismo y pareciese que no hace nada. Pero el cat final de mycwd no produce ninguna respuesta -- ¡el contenido del archivo se perdio! ¿Por qué? Debido a la secuencia en la que tuvieron lugar los eventos. Evento 1: bash ve la redirección a un archivo que ya existe, borra el archivo y lo re-crea vacío (vea la discusión anterior sobre redirección) -- mycwd es sobrescrito. Evento 2: ya no importa lo que cat haga puesto que el archivo fuente mycwd ya ha sido destruído y re-creado. Es demasiado tarde para evitar el error. Existen algunas pocas opciones de comandos y características especiales de la shell de comando que se pueden utilizar para mitigar este comportamiento de alguna manera, pero el objetivo de este capítulo simplemente es aprender cómo funcionan estos comandos y en esta sección específicamente, la manera como funcionan en archivos existentes. Esta es una característica no un error que necesario entender y utilizar de manera correcta. Ejemplos Mover/Archivar un sitio web simple Madonna intentó configurar un sitio web personal simple, pero después de terminar su ISP le dijo que había puesto todos los archivos del sitio web en un directorio equivocado. Puso los archivos en ~/html y debieron haber sido puestos en ~/public_html. Necesita mover los archivos al directorio correcto. Mientras lo hace, también necesita hacer una copia de seguridad de los archivos que se encuentran en el directorio archive, por si acaso daña o borra accidentalmente uno de los archivos en ~/public_html. El directorio archive ya existe. [madonna@station madonna]$ ls html archive [madonna@station madonna]$ mv html public_html [madonna@station madonna]$ cd public_html [madonna@station public_html]$ ls index.html photo.jpeg [madonna@station madonna]$ cp index.html photo.jpeg ../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. Mover un sitio web simple Nero intentó configurar un sitio web personal simple, 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. Puso los archivos en su
  24. 24. 24 Filesystem basics directorio de inicio y deben estar en ~/public_html. Necesita mover los archivos al directorio correcto. Su problema es más complicado que el de Madonna, puesto que no puede renombrar un subdirectorio simplemente. El directorio public_html fue creado por su ISP. [nero@station nero]$ ls index.html photo1.jpeg photo2.jpeg public_html [nero@station nero]$ mv index.html photo1.jpeg photo2.jpeg public_html [nero@station nero]$ ls public_html [nero@station nero]$ cd public_html [nero@station public_html]$ ls index.html photo1.jpeg photo2.jpeg Para mover los archivos Nero utilizó la habilidad del comando mv para mover más de un archivo a la vez. Suprimir robots.txt Elvis nota un archivo en su directorio ~/public_html que no reconoce, un archivo llamado robots.txt. Decide borrarlo. [elvis@station elvis]$ public_html [elvis@station elvis]$ index.html robots.txt [elvis@station elvis]$ [elvis@station elvis]$ index.html ls ls public_html rm public_html/robots.txt ls public_html Ejercicios en línea Crear un sitio web Lab Exercise Objetivo: Utilizar la redirección, cp y mv para crear un sitio web simple y archivar el sitio web. Tiempo estimado: 15 minutos. Configuración En este ejercicio necesitará trabajar con los directorios ~/html y ~/archive. Inicie sesión con su cuenta y utilice los siguientes comandos para crear estos dos directorios:
  25. 25. 25 Filesystem basics [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. 1. 2. 3. 4. Cree una página web "en construcción" en ~/index.html. Mueva este archivo a ~/html. Renombre el directorio html como public_html. Haga una copia de su archivo index.html en ~/archive. Note La página web resultante puede ser o no visible con un navegador, dependiendo de las características adicionales de la configuración de su sistema. Su instructor le dirá si puede ver los resultados de su trabajo de este modo. Deliverables Question 1 1. Dos archivos ~/public_html/index.html y ~/archive/index.html, cada uno de los cuales tiene un contenido idéntico (el texto "en construcción" posiblemente con una etiqueta HTML). Possible Solution The following sequence of commands provides one possible solution to this exercise. [student@station [student@station [student@station [student@station [student@station [student@station [student@station [student@station index.html [student@station index.html student]$ student]$ student]$ student]$ student]$ student]$ student]$ student]$ mkdir html archive echo '<h1>' > index.html echo 'Under construction' >> index.html echo '</h1>' >> index.html mv index.html html mv html public_html cp public_html/index.html archive ls public_html student]$ ls archive Investigar la opción "noclobber"
  26. 26. 26 Filesystem basics Lab Exercise Objetivo: Investigar las consecuencias de la opción bash "noclobber". Estimated Time: 10 mins. Especificaciones Desea investigar las consecuencias del sobrescribir archivos y de la opción bash "noclobber". 1. Abra una nueva terminal o una nueva consola virtual (esto se necesita para la evaluación de su trabajo en línea). 2. Cree un archivo llamado source que incluya la palabra "fuente" y un archivo llamado target que incluya la palabra "destino." 3. Use cp para sobrescribir target con source. Verifique el efecto con cat. 4. Re-cree target. 5. Sobrescriba target de nuevo haciendo cat en source y redireccionando la salida. Verifique los resultados. 6. Active la opción bash "noclobber" con el siguiente comando mágico: 7. [student@station student]$ set -o noclobber 8. Ensaye de nuevo ambos tipos de sobrescritura y observe los resultados. 9. Desactive la opción bash "noclobber" con el siguiente comando mágico: 10. [student@station student]$ set +o noclobber 11. Termine la sesión en la terminal o en la consola virtual. Deliverables Question 1 1. Un archivo ~/.bash_history que tiene el récord de sus opciones de activación y desactivación de la opción noclobber. Possible Solution The following sequence of commands provides one possible solution to this exercise. [student@station student]$ echo source > source [student@station student]$ echo target > target [student@station student]$ cp source target [student@station student]$ cat target source
  27. 27. 27 Filesystem basics [student@station [student@station [student@station source [student@station 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 Capítulo 4 Administración de directorios Conceptos clave • • • • • Se puede examinar el contenido de árboles de directorios completos con el comando ls -R. El comando mkdir crea directorios. El comando rmdir borra directorios (vacíos). cp -r copia directorios recursivamente. rm -r suprime directorios recursivamente. Creación de directorios (nuevos, vacíos): mkdir La organización de archivos dentro de directorios requiere la habilidad para crear los directorios que necesita. En Linux, el comando para hacer un directorio nuevo es el comando mkdir (del inglés make directory). Uso: mkdir [OPCIONES] {DIRECTORIO...} Crea el(los) DIRECTORIO(s) si no existe(n). Falla y emite un mensaje de error si uno o más de los DIRECTORIO(s) existen, pero los nuevos directorios restantes son aún creados. Para crear un subdirectorio ~/public_html Elvis puede proceder así: [elvis@station elvis]$ ls [elvis@station elvis]$ mkdir public_html
  28. 28. 28 Filesystem basics [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, 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 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 Listado de árboles de directorios Por ahora, tenga en cuenta que cuando se da un directorio como argumento al comando ls, éste lista el contenido del directorio. ¿Pero qué pasa si el directorio contiene otros directorios? Por defecto, el comando ls sólo mostrará el contenido del directorio del nivel más alto. Si también quiere que el comando ls liste los subdirectorios, puede añadir la opción -R. Cuando un comando se repite a través de una estructura, operando en cada elemento de la estructura de la misma manera que en el elemento superior, se dice que el comando actúa de modo recursivo. La opción -R especifica que el comando ls debería listar con recursion. 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. Para poder descubrir los archivos y los subdirectorios que contiene, hogan lista el contenido del directorio de modo recursivo.
  29. 29. 29 Filesystem basics [hogan@station hogan]$ ls -R /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.conf /etc/sysconfig/networking/profiles/netup: hosts ifcfg-eth0 network resolv.conf ls -R también se puede combinar con cualquiera de las opciones de línea de comando vistas anteriormente, tales como ls -sR para incluir los tamaños de archivos, o ls -lR para incluir los atributos de archivos. Borrar directorios (vacíos): rmdir El comando para borrar un directorio es rmdir. (remover directorio). Uso: rmdir [OPCIONES] {DIRECTORIO...} Suprime el (los) DIRECTORIO(s) si están vacíos. Emite un mensaje de error si uno o más del (los) DIRECTORIO(s) no está(n) vacío(s), pero los directorios que quedan (vacíos) se borran. Tenga en cuenta que un directorio que contiene sólo un subdirectorio no se considera como vacío. Para borrar su subdirectorio ~/public_html/images Elvis puede proceder así: [elvis@station public_html [elvis@station [elvis@station [elvis@station elvis]$ ls elvis]$ rmdir public_html/images elvis]$ ls elvis]$ Como lo señalamos antes, observe de nuevo que los comandos tales como mkdir y rmdir funcionan de manera silenciosa. Como dice el dicho el silencio es oro. Listado de árboles de directorios Por ahora, tenga en cuenta que cuando se da un directorio como argumento al comando ls, éste lista el contenido del directorio. ¿Pero qué pasa si el directorio contiene otros
  30. 30. 30 Filesystem basics directorios? Por defecto, el comando ls sólo mostrará el contenido del directorio del nivel más alto. Si también quiere que el comando ls liste los subdirectorios, puede añadir la opción -R. Cuando un comando se repite a través de una estructura, operando en cada elemento de la estructura de la misma manera que en el elemento superior, se dice que el comando actúa de modo recursivo. La opción -R especifica que el comando ls debería listar con recursion. Por ejemplo, a elvis le gustaría tener una lista de archivos y directorios más detallada en su directorio ~/work. Recuerde que elvis antes tenía que emitir un comando ls por separado para cada subdirectorio de ~/work con el fin de ver el contenido de subdirectorio. Ahora en su lugar, puede utilizar la opción ls -R. [elvis@station elvis]$ ls -R work work/: images spreadsheets work/images: advertising logos work/images/advertising: work/images/logos: work/spreadsheets: Observe que el comando anterior mostrará archivos así como directorios. En este ejemplo, casualmente no hay ningún archivo para mostrar. ls -R también se puede combinar con cualquiera de las opciones de línea de comando vistas anteriormente, tales como ls -sR para incluir los tamaños de archivos, o ls -lR para incluir los atributos de archivos. Copiar árboles de directorios: cp -r En el capítulo anterior cuando se introdujo cp, señalamos que con las opciones correctas el comando cp serviría para copiar árboles de directorios completos. Aquí analizamos dicha opción: -r (de recursive) (Muchos de los comandos tienen la opción de actuar de modo recursivo es decir, recorriendo todas las ramas de un sub-árbol de directorio, actuando en cada subdirectorio a su vez). Considere la siguiente estructura en el directorio de inicio de Hogan: Figure 1. Estructura del directorio antes de copiar -- html |
  31. 31. 31 Filesystem basics hogan -- website -- -- forms | | -| | | -- songs -| | | | | -| | -- media -| -| | -- photos-| -- song1.midi song2.midi picture1.png picture2.png Aunque este árbol de directorios contiene muchas ramas y archivos, se puede copiar con una sóla orden: [hogan@station hogan]$ cp -r website archive Figure 2. Estructura del directorio después de copiar -- html | -- website -- -- forms | | | | -| | | | | -- songs -| | | | | | | -| | | | -- media -| | -| | | hogan --- photos-| | | -| | -- html | | -- archive -- -- forms | | -| | | -- songs -| | | | | -| | -- media -| -| | -- photos-- song1.midi song2.midi picture1.png picture2.png song1.midi song2.midi picture1.png
  32. 32. 32 Filesystem basics | -- picture2.png Recuerde la diferencia en el comportamiento de cp cuando el último argumento es un directorio existente: se hace una copia del (los) archivo(s) fuente(s) dentro del directorio destino. En la demostración anterior el directorio archive no existía previamente así que fue creado. Pero si el directorio archive ya hubiese existido el efecto hubiera sido diferente. Figure 3. Estructura del directorio antes de copiar -- html | -- website -- -- forms | | | | -| | | | | -- songs -| | | | | | | -hogan -| | | -- media -| | -| | | | -- photos-| | | --- archive song1.midi song2.midi picture1.png picture2.png Hogan usa exactamente el mismo comando que antes para copiar: [hogan@station hogan]$ cp -r website archive Figure 4. Estructura del directorio después de copiar con cp -r websitearchive -- html | -- website -- -- forms | | | | -| | | | | -- songs -| | | | | | | -| | | | -- media -| | -| | | hogan --- photos-| | | -- song1.midi song2.midi picture1.png picture2.png
  33. 33. 33 Filesystem basics | | | -- html | -- archive -- website -- -- forms | | -| | | -- songs -| | | | | -| | -- media -| -| | -- photos-| -- song1.midi song2.midi picture1.png picture2.png En esta segunda demonstración, el directorio website es recreado dentro del directorio archive. Borrar árboles de directorios: rm -r En el capítulo anterior cuando se introdujo rm, señalamos que con las opciones correctas, el comando rm puede borrar por completo árboles de directorios. De nuevo, para cp la opción es -r (derecursivo). Considere la siguiente estructura en el directorio de inicio de Hogan: Figure 1. Estructura del directorio antes de borrarlo -- html | hogan -- website -- -- forms | | -| | | -- songs -| | | | | -| | -- media -| -| | -- photos-| -- song1.midi song2.midi picture1.png picture2.png Si Hogan quisiera borrar el sub-árbol media, podría utilizar un sólo comando: [hogan@station hogan]$ rm -r website/media
  34. 34. 34 Filesystem basics Figure 2. Estructura del directorio después de borrar -- html | hogan -- website -| -- forms Vale la pena anotar una vez más que, en general, el borrar archivos no tiene reversa. Si se utiliza de manera negligente el comando rm -r es muy peligroso. Ejemplos Hacer una copia de seguridad de un árbol de directorios El usuario hogan ha estado trabajando bastante en un reporte, el cual tiene varios archivos que ha organizado en subdirectorios bajo un directorio llamado report. report/ |-- chapter01/ | |-- figures/ | | |-- image01.png | | `-- image02.png | |-- section01.html | `-- section02.html `-- chapter02/ |-- figures/ | |-- image01.png | `-- image02.png |-- section01.html `-- section02.html 4 directories, 8 files Está a punto de utilizar un corrector ortográfico para chequear y remplazar las palabras mal escritas. Ya que esta es la primera vez que utiliza este corrector ortográfico, quiere hacer una copia de seguridad de su trabajo antes de continuar. Primero trata de hacer una copia de seguridad con el comando cp. [hogan@station hogan]$ cp report report.bak cp: omitting directory `report' Al darse cuenta de su error añade la opción -r para decirle al comando cp que copie de modo recursivo. [hogan@station hogan]$ cp -r report report.bak Ahora el contenido del directorio report es copiado de modo recursivo al directorio report.bak.
  35. 35. 35 Filesystem basics . |-| | | | | | | | | | | | `-- report/ |-- chapter01/ | |-- figures/ | | |-- image01.png | | `-- image02.png | |-- section01.html | `-- section02.html `-- chapter02/ |-- figures/ | |-- image01.png | `-- image02.png |-- section01.html `-- section02.html report.bak/ |-- chapter01/ | |-- figures/ | | |-- image01.png | | `-- image02.png | |-- section01.html | `-- section02.html `-- chapter02/ |-- figures/ | |-- image01.png | `-- image02.png |-- section01.html `-- section02.html 10 directories, 16 files Una vez que hogan haya usado el corrector ortográfico y que esté contento con los resultados, quiere suprimir el directorio de copia de seguridad report.bak. Primero utiliza el comando rmdir. [hogan@station hogan]$ rmdir report.bak/ rmdir: `report.bak/': Directory not empty Recuerde que rmdir sólo funciona en directorios vacíos así que en su lugar utiliza rm -r. [hogan@station hogan]$ rm -r report.bak/ [hogan@station hogan]$ ls report Creación de una copia local de los archivos de ejemplo El usuario ventura está interesado en programar con el lenguage python. Descubrió scripts de muestra en el directorio /usr/share/doc/pygtk2-1.99.14/examples/. Le gustaría jugar con los scripts para poder probar nuevas ideas, pero no tiene permiso de escritura en los archivos. Decide hacer una copia local de los scripts.
  36. 36. 36 Filesystem basics [ventura@station ventura]$ cp -r /usr/share/doc/pygtk2-1.99.16/examples/ . [ventura@station ventura]$ ls -R examples/ examples/: atk gl glade gobject ide neil pango pygtk-demo simple examples/atk: atk-demo.py examples/gl: cone.py dots.py gears.py examples/glade: glade-demo.py README README test.glade examples/gobject: properties.py signal.py examples/ide: break.xpm edit.py browse.py edit.xpm ... gtkdb.py gtkprof.py next.xpm pyide.py README return.xpm step.xpm Observe el uso del nombre de directorio . para referirse a "el directorio local". Cuando cp recibe un directorio como destino (el último argumento) copia a ese directorio, preservando los nombres de los archivos originales. En este caso, el directorio examples fue copiado al directorio .. El comando ls -R genera una lista recursiva de todo archivo en el directorio recién creado example. Ahora ventura tiene una copia a nivel local de los scripts python, lo que significa que los puede modificar cuando quiera. Ejercicios en línea Administración de directorios Lab Exercise Objetivo: Listar, copiar, mover y suprimir directorios de manera eficiente. Tiempo estimado: 20 minutos. Especificaciones Se le ha despertado el interés en gdm, una aplicación que proporciona la pantalla de inicio de sesión gráfica de su sistema y desea explorar su diseño.
  37. 37. 37 Filesystem basics 1. Utilice el comando ls (con las opciones apropiadas) para obtener un listado recursivo, incluyendo tamaños (-s) del contenido del directorio /usr/share/gdm. Redireccione la salida del comando a un archivo en su directorio de inicio llamado lsgdm.txt (debido a propósitos evaluativos es importante que especifique el directorio como una referencia absoluta, por ejemplo, no share/gdm). 2. Haga un copia (recursiva) del directorio /usr/share/gdm en su directorio de inicio. El directorio copiado también se debe llamar gdm. 3. Haga una segunda copia del directorio recién creado en su directorio de inicio. gdm, llamado gdm.bak. 4. Desde su copia de seguridad, suprima (de modo recursivo) el subdirectorio gdm.bak/themes/circles. 5. De nuevo desde su copia de seguridad, mueva el subdirectorio gdm.bak/themes/Bluecurve a su directorio de inicio (el directorio todavía se debe llamar Bluecurve). Deliverables Question 1 1. Un archivo en su directorio de inicio llamado lsgdm.txt, el cual contiene la salida redireccionada de un listado recursivo, inclyendo el tamaño del directorio /usr/share/gdm. 2. Un directorio en su directorio de inicio llamado gdm, el cual es una copia exacta del directorio /usr/share/gdm. 3. Un directorio en su directorio de inicio llamado gdm.bak, el cual es una copia exacta del directorio gdm, con el subdirectorio gdm.bak/themes/circles borrado y con el subdirectorio gdm.bak/themes/Bluecurve/ movido a su directorio de inicio. 4. Un directorio en su directorio de inicio llamado Bluecurve, el cual es el resultado del resultado anterior. Limpieza Los directorios creados son bastante grandes, así que si quiere conservar espacio de disco puede borrarlos cuando haya terminado. Capítulo 5 Nombres y comodines de archivos Conceptos clave
  38. 38. 38 Filesystem basics • • • • Los nombres de archivos pueden contener casi cualquier caracter a excepción de /. Aunque los nombres de archivos pueden contener casi cualquier caracter eso no significa que deban contenerlos. Los archivos que comienzan con . son archivos "ocultos". Los caracteres *, ?, [...], y [^...] se pueden utilizar para encontrar los archivos con nombres de archivos similares por medio de un proceso llamado "comodines de archivo". Nombres de archivo Muchos sistemas operativos restringen el número y tipo de caracteres que se pueden utilizar al nombrar archivos. En Linux, virtualmente cualquier caracter imprimible se puede utilizar en el nombre de archivo y los nombres pueden ser casi de cualquier longitud. Los nombres de archivos de Linux pueden tener hasta 255 caracteres, excluyendo cualquier componente de directorio. Cuando se utiliza en un comando, un nombre de archivo absoluto o relativo, incluyendo los componentes del directorio, pueden tener hasta de ¡4095 caracteres! Esto permite que los nombres de archivo y directorios puedan ser bastante descriptivos. Los nombres de archivos de Linux pueden contener cualquier caracter imprimible (y algunos que no lo son) a excepción de la barra oblicua /. Esta barra no puede ser parte del nombre de archivo, puesto que es el caracter utilizado para separar los componentes del nombre de un directorio en un nombre relativo o completamente calificado. Como la mayoría de los caracteres "inusuales" son meta-caracteres de shell, deben estar protegidos entre comillas para poderlos utilizar en un nombre de archivo: [julius@station julius]$ touch [julius@station julius]$ touch [julius@station julius]$ touch [julius@station julius]$ touch [julius@station julius]$ ls !@#$%^&*()_+=-|}]{[:;?>.<,~` [julius@station julius]$ 'a and b' '"' "'" '!@#$%^&*()_+=-|}]{[:;?>.<,~`' ' " a and b Como lo puede ver, se crearon cuatro archivos con nombres un poco extraños. Warning El ejemplo anterior es sólo a manera de ilustración. Muchos de los caracteres utilizados en este ejemplo son meta-caracteres shell, cuyo significado aún no se ha discutido aquí. Debe evitar utilizar signos de puntuación en los nombres de archivos, pues si los utiliza de manera inapropiada puede producir resultados desastrosos.
  39. 39. 39 Filesystem basics La advertencia anterior no se debe olvidar. En general, los nombres de archivos deben estar compuestos de caracteres alfabéticos y numéricos (A-Z, a-z, 0-9) y signos de puntuación ._+~ (punto, guión bajo, guión, más, tilde). Normalmente, los nombres de archivos deben iniciar con un caracter alfanumérico o con un punto (vea la siguiente sección sobre archivos ocultos). Aunque encontrará nombres de archivos con espacios incrustados no se recomienda utilizarlos. Figure 1. Caracteres "seguros" para nombres de archivos A-Z a-z 0-9 . _ - + ~ Aquí hay dos ejemplos que le mostrarán el daño que puede causar el uso de caracteres nosignificativos. Vamos a abusar de dos meta-caracteres de shell: el espacio y el signo mayor que. Ejemplo 1: ¡Tenga cuidado con esos espacios! [hogan@station hogan]$ mkdir bad dir [hogan@station hogan]$ touch this and that [hogan@station hogan]$ mv this and that bad dir [hogan@station hogan]$ ls dir Hogan intenta crear un directorio llamado 'bad dir,' pero sin saber creó dos directorios, uno llamado 'bad' y otro llamado 'dir'. Después, Hogan trata de crear un archivo llamado 'this and that' con touch, pero en realidad crea tres archivos llamados 'this', 'and', y'that'. Ahora Hogan intenta mover el archivo que él cree que se llama 'this and that' al directorio que el piensa que se llama 'bad dir', pero lo que hace es mover todos los cuatro 'directoriosthis', 'and', 'that', y 'bad' (tres archivos comunes y un directorio) al directorio dir. Puesto que todos los comandos anteriores se ejecutaron "con éxito", sólo hasta este momento Hogan se da cuenta de que algo ha salido mal. Es obvio que, si Hogan hubiese encerrado entre comillas los nombres como se mostró en las notas explicativas, las cosas hubiesen funcionado como él lo quería. Hecho que vale la pena recordar, ya que encontrará nombres de archivos con espacios encrustados. En relación a esto, un nombre de archivo que contiene espacios al principio y al final es legal, pero es muy difícil de identificar en un listado de archivos. Ejemplo 2: Una pequeña equivocación de dirección
  40. 40. 40 Filesystem basics [hogan@station hogan]$ mkdir bad- > dir [hogan@station hogan]$ touch this [hogan@station hogan]$ mv this bad- > dir [hogan@station hogan]$ ls bad- dir Hogan finalmente decide evitar los espacios. Esta vez intenta crear un directorio llamado 'bad-> dir' pero sin querer crea un directorio llamado 'bad-' y un archivo llamado 'dir' (¿por qué?). Después Hogan crea un archivo llamado 'this' con touch. ¡Este paso lo hace bien! Ahora Hogan trata de mover un archivo llamado 'this' al directorio que el piensa que se llama 'bad->dir,' pero en vez de lograr esto, mueve 'this' al directorio bad-, redireccionando la salida (no hay ninguna) al archivo 'dir'. De nuevo, sólo hasta ahora Hogan se da cuenta de que algo ha salido mal. Como antes, si Hogan hubiese utilizado las comillas para encerrar los nombres de archivos, las cosas habrían salido como él quería. Las comillas enmascaran una multitud de pecados, pero no utilice esto como excusa para crear nombres de archivos inapropiados. Muchas de las tareas que aún tenemos que aprender se hacen más fáciles si se utilizan nombres "normales" para los archivos. Archivos ocultos Los nombres de archivos y directorios (recuerde un directorio es un tipo de archivo) que comienzan por un punto son archivos "ocultos". Estos archivos no aparecen en los listados de directorio producidos por ls a menos que se utilice la opción de comando especial -a (del inglés all) o a menos que se especifique el punto inicial como parte del nombre. Se hace posible reducir la aglomeración de elementos y la confusión manteniendo ciertos archivos" fuera de vista y de consideración". En la próxima sección aprenderemos a nombrar múltiples archivos por medio de una técnica conocida como uso de "comodines". En general, los archivos ocultos tampoco aparecen en un "comodín" a no ser que el punto inicial sea listado específicamente. Aparte de ocultar el archivo, el punto inicial no tiene otra importancia y los archivos y directorios ocultos se pueden utilizar como cualquiera de los otros. [alice@station alice]$ mkdir .secret [alice@station alice]$ touch sample [alice@station alice]$ ls
  41. 41. 41 Filesystem basics sample [alice@station . .. sample [alice@station [alice@station [alice@station sample [alice@station [alice@station sample [alice@station alice]$ .secret alice]$ alice]$ alice]$ ls -a mv sample .secret ls ls .secret alice]$ cd .secret .secret]$ ls .secret]$ "Comodines" Con frecuencia es necesario emitir un comando que actúe en más de un archivo. Los comandos como cp -r y rm -r funcionan en sub-árboles enteros de directorios, sin embargo, Linux cuenta con una manera más flexible de identificar grupos de archivos. La shell de comando bash trata algunos de sus meta-caracteres especiales como comodines. Cuando bash lee la línea de comando, la shell realiza un proceso llamado expansión de meta-caracteres o expansión de comodines, lo cual genera una lista de nombres de archivos que coinciden con el patrón descrito por la expresión del comodín y luego pasa la lista generada al comando. Esto se conoce comúnmente como "comodines de nombres de archivos." Table 1. Comodines Caracter Efecto * coincide con cero o más caracteres (a excepción del punto inicial) ? coincide exactamente con un caracter (a excepción del punto inicial) [...] coincide exactamente con un caracter de la lista o rango [^...] coincide exactamente con un caracter no incluido en la lista o rango El uso de * y ? es más bien sencillo. Los comodines de listas son un poco más complicados, pero también bastante poderosos y útiles. El comodín de parentesis representa una lista de caracteres individuales. Por lo tanto, [aeiou] coincide con cualquier vocal. Un rango contiguo de caracteres se puede representar utilizando un guión como en [a-z] para el alfabeto en minúsculas. Una ^ inicial, niega la lista de manera que [^aeiou] sea cualquier caracter menos una vocal. Un guión "real" se puede representar escapando los caracteres utilizando una barra invertida () (más adelante se abordará este tema). Por lo tanto, la expresión [a-z] coincide con a, z o un guión sólamente. Se pueden mezclar caracteres individuales y rangos. El patrón [A-Zaz0-9._-+~] coincide con cualquiera de los caracteres "seguros" de nombres de archivos mencionados anteriormente en la gráfica 5-1.
  42. 42. 42 Filesystem basics Suponga que el directorio actual contiene los siguientes archivos: image1.jpg image2.jpg image10.jpeg image11.jpeg page1.html page2.html page3.htm page40.htm script1.pl La siguiente tabla ilustra el uso de estos comodines. Table 2. Ejemplos de comodines Patrón Genera la lista * todos los archivos en la lista *.html page1.html page2.html page*.htm* page1.html page2.html page3.htm page40.htm image?.* image1.jpeg image2.jpeg [ps]* page1.html page2.html page3.htm page40.htm script1.pl [^ps]* image1.jpeg image2.jpeg image10.jpeg image11.jpeg Los comodines se pueden utilizar con cualquier comando que espera el nombre de un archivo. Por ejemplo, el comando [bob@station bob] mv *.htm public_html es lo mismo que el comando [bob@station bob] mv page3.htm page40.htm public_html asumiendo que el directorio de inicio de Bob contiene los archivos listados anteriormente. [Nota técnica: muchos de los comandos se comportan de manera diferente cuando no aparecen archivos en la lista, contrario a cuando uno o más archivos se dan como parte del comando. Entonces, ¿qué sucede en dicho comando si se utiliza un patron de comodín de modo que el listado de archivos esté vacío? En el caso especial donde la shell bash intenta expandir una expresión de comodín y no coincide con nada, ésta deja la expresión como parte del comando. Esto se ilustra a continuación: [bob@station bob]$ rm rm: too few arguments Try `rm --help' for more information. [bob@station bob]$ rm z* rm: cannot lstat `z*': No such file or directory En el primer rm, el comando vio cero nombres de archivos y falló presentando un mensaje de error. En la segunda versión, la shell no pudo generar una lista de nombres del patrón z* y por lo tanto la cadena z*se envió a rm como el nombre de archivo mismo. Como Bob no tiene un archivo llamado z* en su directorio, el comando falló con un mensaje diferente].
  43. 43. 43 Filesystem basics Ejemplos Búsqueda de ese archivo de configuración Alice estaba revisando recientemente el archivo de configuración del DNS (Servicio de Nombres de Dominio), pero olvidó el nombre. Recuerda que el archivo terminaba en .conf. Con el fin de reducir el número de archivos a tomar en consideración, utilizó los comodines para listar todos los archivos en el directorio /etc terminados en .conf. [alice@station images]$ ls /etc/*.conf /etc/aep.conf /etc/lftp.conf /etc/aeplog.conf /etc/libuser.conf /etc/cdrecord.conf /etc/logrotate.conf /etc/esd.conf /etc/lpd.conf /etc/fam.conf /etc/ltrace.conf /etc/gpm-root.conf /etc/modprobe.conf /etc/grub.conf /etc/mtools.conf /etc/host.conf /etc/named.conf /etc/initlog.conf /etc/nscd.conf /etc/jwhois.conf /etc/nsswitch.conf /etc/krb5.conf /etc/ntp.conf /etc/krb.conf /etc/pam_smb.conf /etc/ldap.conf /etc/pbm2ppa.conf /etc/ld.so.conf /etc/pine.conf /etc/pnm2ppa.conf /etc/pwdb.conf /etc/resolv.conf /etc/rndc.conf /etc/scrollkeeper.conf /etc/sysctl.conf /etc/syslog.conf /etc/updatedb.conf /etc/updfstab.conf /etc/warnquota.conf /etc/webalizer.conf /etc/wvdial.conf /etc/xinetd.conf /etc/yp.conf Mirando un poco más reconoce el archivo de configuración resolv.conf. Listado de bibliotecas estáticas Bob ha estado aprendiendo la diferencia entre bibliotecas enlazadas estáticamente y dinámicamente que los programas utilizan. El sabe que las bibliotecas enlazadas estática y convencionalmente tienen el nombre de libalgo.a, en donde algo es el nombre de la biblioteca. También sabe que las bibliotecas se encuentran por lo general en el directorio /usr/lib. Cuando echa un vistazo a las bibliotecas estáticas instaladas en su sistema, encuentra cerca de 1000 archivos en el directorio /usr/lib. Para reducir el número de archivos a examinar trata de listar todos los archivos terminados en a. [bob@station bob]$ ls /usr/lib/*a /usr/lib/liba2ps.a /usr/lib/libimlib-ps.a /usr/lib/libacl.a /usr/lib/libimlib-tiff.a /usr/lib/libanl.a /usr/lib/libimlib-xpm.a ... /usr/lib/mozilla: plugins
  44. 44. 44 Filesystem basics /usr/lib/samba: vfs Muchas de las líneas de este listado largo han sido borradas, pero se han dejado las suficientes para ilustrar el problema, el "comodín" de bob no fue lo suficientemente específico y capturó también algunos de los directorios terminados en a. Refinando un poco más la lista obtiene lo que quiere. [bob@station bob]$ ls /usr/lib/lib*.a /usr/lib/liba2ps.a /usr/lib/libimlib-ps.a /usr/lib/libacl.a /usr/lib/libimlib-tiff.a /usr/lib/libanl.a /usr/lib/libimlib-xpm.a ... /usr/lib/libimlib-jpeg.a /usr/lib/libimlib-png.a /usr/lib/libimlib-ppm.a /usr/lib/libz.a /usr/lib/libzvt.a Luego, bob sospecha que las bibliotecas utilizadas con más frecuencia tienen nombres cortos y eficientes (tal vez descriptivos). Procede a listar todas las bibliotecas que tengan nombres de una, dos o tres letras. [bob@station bob]$ ls /usr/lib/lib?.a /usr/lib/libc.a /usr/lib/libl.a /usr/lib/libz.a /usr/lib/libg.a /usr/lib/libm.a [bob@station bob]$ ls /usr/lib/lib??.a /usr/lib/libdl.a /usr/lib/libgd.a /usr/lib/librt.a /usr/lib/libfl.a /usr/lib/libmp.a [bob@station bob]$ ls /usr/lib/lib???.a /usr/lib/libacl.a /usr/lib/libgdk.a /usr/lib/libosp.a /usr/lib/librle.a /usr/lib/libanl.a /usr/lib/libgif.a /usr/lib/libpam.a /usr/lib/librpm.a /usr/lib/libapm.a /usr/lib/libgmp.a /usr/lib/libpbm.a /usr/lib/libSDL.a /usr/lib/libbfd.a /usr/lib/libgpm.a /usr/lib/libpci.a /usr/lib/libssl.a /usr/lib/libbsd.a /usr/lib/libgtk.a /usr/lib/libpgm.a /usr/lib/libttf.a /usr/lib/libefs.a /usr/lib/libIDL.a /usr/lib/libpng.a /usr/lib/libusb.a /usr/lib/libesd.a /usr/lib/libnsl.a /usr/lib/libpnm.a /usr/lib/libxml.a /usr/lib/libgal.a /usr/lib/libogg.a /usr/lib/libppm.a /usr/lib/libzvt.a ¿Hay alguna forma fácil de utilizar los comodines para que bob pudiese haber listado las bibliotecas con uno, dos o tres caracteres de nombres con una sola expresión? Listado de las páginas man
  45. 45. 45 Filesystem basics La usuaria alice descubrió que los archivos que contienen las páginas man se encuentran instalados en el directorio /usr/share/man en los subdirectorios relacionanados con los capítulos de las páginas man. [alice@station man]$ ls /usr/share/man/ cs de_DE fr hu it man1 man3 man5 de es fr_FR id ja man2 man4 man6 man7 man8 man9 mann pl pt_BR ru sk sv Como usuaria regular del sistema, sabe que los capítulos que más le interesan son el 1, 5 y 7. Utiliza una expresión con comodines para enumerar sólo el contenido de esos directorios. [alice@station man]$ ls /usr/share/man/man[157] /usr/share/man/man1: :.1.gz pbmtolj.1.gz [.1.gz pbmtoln03.1.gz 411toppm.1.gz pbmtolps.1.gz a2p.1.gz pbmtomacp.1.gz ... groff.7.gz groff_char.7.gz groff_diff.7.gz wireless.7.gz x25.7.gz Si alice hubiese estado interesada en todas las páginas man de los capítulos numerados, pero no en los capítulos impares "n" podría haber utilizado la expresión de rango con comodines. [alice@station man]$ ls /usr/share/man/man[1-9] /usr/share/man/man1: :.1.gz pbmtolj.1.gz [.1.gz pbmtoln03.1.gz 411toppm.1.gz pbmtolps.1.gz a2p.1.gz pbmtomacp.1.gz ... named-checkconf.8.gz named-checkzone.8.gz zic.8.gz /usr/share/man/man9: Ejercicios en línea Administración de archivos con comodines Lab Exercise Objetivo: Administrar archivos de modo eficiente por medio del uso de comodines
  46. 46. 46 Filesystem basics de archivo. Tiempo estimado: 20 minutos. Especificaciones Este laboratorio utilizará comodines de archivo para administrar un gran número de archivos que tienen nombres vagamente estructurados. Todos los archivos se encuentran en el directorio /usr/share/tcl8.4/encoding. 1. Cree los siguientes directorios en su directorio de inicio: cp_even, cp_mid, cp_thousand, iso_mid, mac y xxxn. 2. Examine los archivos en el directorio /usr/share/tcl8.3/encoding. Copie todos los archivos que comienzan con mac en el directorio mac. 3. Copie todos los archivos que comienzan con cp y que tengan un número par en el directorio cp_even. 4. Copie todos los archivos que comienzan con cp y que tengan un número mayor a 1000 en el directorio cp_thousand. 5. Copie todos los archivos que comienzan con cp y que tengan un número mayor a 800, pero menor que 1000 en el directorio cp_mid. 6. Copie todos los archivos que comienzan con iso8859- y que tengan un número después del guión entre 3 y 8 (inclusive) en el directorio iso_mid. 7. Copie todos los archivos cuyos primeros cuatro caracteres estén compuestos de exactamente tres letras seguidas por un número dentro del directorio xxxn. Deliverables Question 1 Si ha realizado el ejercicio correctamente, debe tener los seis directorios con los siguientes archivos. [bob@station bob]$ ls * cp_even: cp1250.enc cp1256.enc cp852.enc cp1252.enc cp1258.enc cp860.enc cp1254.enc cp850.enc cp862.enc cp_mid: cp850.enc cp852.enc cp855.enc cp857.enc cp860.enc cp861.enc cp_thousand: cp1250.enc cp1252.enc cp862.enc cp863.enc cp864.enc cp864.enc cp866.enc cp874.enc cp865.enc cp866.enc cp869.enc cp1254.enc cp932.enc cp936.enc cp950.enc cp874.enc cp932.enc cp936.enc cp1256.enc cp949.enc cp950.enc cp1258.enc
  47. 47. 47 Filesystem basics cp1251.enc cp1253.enc iso_mid: iso8859-3.enc iso8859-4.enc mac: macCentEuro.enc macCroatian.enc macCyrillic.enc xxxn: big5.enc iso2022.enc iso2022-jp.enc iso2022-kr.enc iso8859-10.enc cp1255.enc iso8859-5.enc iso8859-6.enc iso8859-7.enc iso8859-8.enc macDingbats.enc macGreek.enc macIceland.enc iso8859-13.enc iso8859-14.enc iso8859-15.enc iso8859-16.enc iso8859-1.enc cp1257.enc macJapan.enc macRoman.enc macRomania.enc iso8859-2.enc iso8859-3.enc iso8859-4.enc iso8859-5.enc iso8859-6.enc macThai.enc macTurkish.enc macUkraine.enc iso8859-7.enc iso8859-8.enc iso8859-9.enc jis0201.enc jis0208.enc jis0212.enc koi8-r.enc koi8-u.enc ksc5601.enc Sugerencias El siguiente comando copiaría los archivos que coinciden con el primer criterio (asumiendo que el directorio de trabajo actual es el directorio de inicio de Bob). [bob@station bob]$ cp /usr/share/tcl8.3/encoding/mac* mac/ Capítulo 6 Examen de archivos Conceptos clave • • • • • El comando file muestra el tipo de archivo El comando cat muestra el contenido de un archivo Los comandos more y less "hojean" através de un archivo, una pantalla completa a la vez. Los comandos head y tail presentan las primeras o las últimas líneas de un archivo. En el entorno gráfico X se puede utilizar nautilus para examinar archivos de texto. Ver archivos Linux ofrece varios comandos para examinar archivos y su contenido. Esta lección aborda algunas de las herramientas más utilizadas. El comando file
  48. 48. 48 Filesystem basics El contenido de cualquier archivo dado puede ser ASCII (texto plano, HTML, scripts de shell, código fuente del programa, etc.) o binario (un ejecutable compilado, un archivo, comprimido, audio, etc.). Los comandos analizados en este capítulo son sólo para uso en archivos ASCII, el intentar usarlos con archivos binarios puede generar problemas un poco molestos (como pantallas llenas de caracteres extraños) o hasta problemas mayores (bloqueando la terminal). Esto se debe a que los archivos binarios pueden contener códigos binarios arbitrarios y algunos de estos códigos tienen un significado especial cuando se (mal )interpretan como texto ASCII. Por lo tanto, es una buena idea revisar el tipo de archivo de cualquier archivo que usted no reconozca utilizando file antes de intentar ver el archivo con otra de las herramientas que se muestran aquí. file [OPCIONES] [ARCHIVO...] Prueba FILE(s) para determinar el tipo de archivo y muestra los resultados en la salida estándar. Ejemplo de uso con archivos ASCII: [nero@station nero]$ file index.html novel.ps mailer index.html: HTML document text novel.ps: PostScript document text conforming at level 3.0 mailer: perl script text executable Ejemplo de uso con archivos binarios: [nero@station nero]$ file logo.jpeg symphony.mp3 archive.tgz logo.png: PNG image data, 387 x 69, 8-bit grayscale, noninterlaced symphony.mp3: MP3, 128 bits, 44.1 kHz, JStereo archive.tgz: gzip compressed data, deflated, last modified: Thu Mar 20 21:27:27 2003, os: Unix El comando cat Este comando se introdujo por primera vez en el capítulo 3 de este cuaderno. Aquí le mostramos algunas de sus opciones. cat [OPCIONES] [ARCHIVO...] Concatena FILE(s) en la salida estándar. Opción Efecto
  49. 49. 49 Filesystem basics Opción Efecto -A Muestra todos los caracteres incluyendo los caracteres de control y los de no impresión. -s " Apiña" múltiples líneas adyacentes en blanco en una sóla línea en blanco -n Numera las líneas de la salida El comando cat, cuando se utiliza para ver archivos, simplemente muestra todo el contenido de una sola vez. Los archivos largos pasan por la pantalla de manera muy rápida haciendo que cat sea el comando más apropiado para aquellos archivos con menos de una pantalla de texto. Los paginadores more y less Tanto more como less están diseñados para ver archivos de texto en la pantalla. Su uso es muy similar aunque el comando less es un poco más moderno y tiene unas pocas características extras tales como el responder de manera correcta a [PgArriba], [PgAbajo] y a las flechas de navegación. Después de todo,less es more. Es bien importante familiarizarse con el comando less, ya que otras herramientas (como man) lo utilizan en segundo plano para brindar funciones de paginador. more [OPCIONES] [ARCHIVO...] Muestra el/los archivo(s)FILE(s) en la salida estándar y una pantalla a la vez bajo el control del teclado. Acción Opción -c Limpia la pantalla y redibuja en vez de desplazarse -s "Apiña" múltiples líneas adyacentes en blanco en una sóla línea en blanco less [OPCIONES] [ARCHIVO...] Muestra el/los archivo(s)FILE(s) en la salida estándar y una pantalla a la vez bajo el control del teclado. Opción Acción -c Limpia la pantalla y redibuja en vez de desplazarse -r Muestra los caracteres de control básico
  50. 50. 50 Filesystem basics Opción Acción -s "Apiña" múltiples líneas adyacentes en blanco en una sóla línea en blanco Table 1. Comandos de navegación less (more) Comando more? Acción >espacio> Si adelanta una pantalla entera [PgDn] No adelanta una pantalla entera b Si devuelve una pantalla entera [PgUp] No devuelve una pantalla entera [DnArrow] No adelanta una línea [Flechaarriba] No se devuelve una línea /text Si va hacia adelante para buscar texto ?texto No va hacia atrás para buscar texto n Si repite la última búsqueda N No repite la última búsqueda pero en dirección contraria q Si quit h Si ayuda (introduce muchos comandos nuevos) Una de las características del paginador less es que depende de un concepto estándar de Unix llamado tuberías. Aunque las tuberías se discuten más adelante esta característica de less es bastante útil y sencilla de utilizar así que amerita presentarla ahora. Una tubería actúa como un redireccionamiento en donde la salida de un comando es redireccionado a un lugar distinto de la terminal. Con la redirección (usando >) la salida se redirecciona a un archivo específico. Cuando se utiliza una tubería la salida de un comando es redireccionada como entrada de otro comando. La shell bash usa el caracter | (suele encontrarse encima de la tecla RETURN) para construir tuberías. Al ejecutar un comando que produce bastante salida, ésta se puede poner en una tubería usandoless. En vez de ser botada a una terminal, la salida se puede navegar como si fuese un archivo, subiendo y bajando de página y haciendo búsquedas. Cuando termine salga de less y la salida desaparecerá. El usuario elvis está utilizando el comando ps aux para ver una tabla con todos los procesos que están ejecutándose en la máquina. Como espera que la salida sea más bien larga, decide entonces poner una tubería del comando al navegador less. [elvis@station elvis]$ ps aux USER PID %CPU %MEM VSZ root 1 0.0 0.0 1392 RSS TTY 92 ? STAT START S 17:27 TIME COMMAND 0:04 init [
  51. 51. 51 Filesystem basics root 2 0.0 0.0 0 0 ? root 3 0.0 0.0 0 0 ? root 4 0.0 0.0 0 [ksoftirqd_CPU0] root 9 0.0 0.0 0 0 ? ... [elvis@station elvis]$ ps aux | less SW SW 17:27 17:27 SW 17:27 0 ? 0:00 [keventd] 0:00 [kapmd] SWN 17:27 0:00 0:00 [bdflush] Ahora él puede utilizar la mismas secuencia que utiliza al navegar un archivo (o las páginas man) para hojear las salidas de los comandos ps:ESPACIO para avanzar, b para retroceder, /textRETORNO para buscar el texto text, y q para salir. El comando head Algunas veces todo lo que se necesita al examinar un archivo es ver las primeras líneas del archivo. El comando head nos permite hacer esto. head [OPCIONES] [ARCHIVO...] Escribe las primeras 10 líneas de cada ARCHIVO a la salida estándar. Opción Efecto -num, -n num Imprime las primeras num líneas (por defecto es 10). -q Suprime encabezados que dan nombres de archivo En el siguiente ejemplo elvis examinará las primeras 10 líneas y luego las primeras 5 líneas del archivo /etc/group. [elvis@station elvis]$ head /etc/group root:x:0:root bin:x:1:root,bin,daemon daemon:x:2:root,bin,daemon sys:x:3:root,bin,adm adm:x:4:root,adm,daemon tty:x:5: disk:x:6:root lp:x:7:daemon,lp mem:x:8: kmem:x:9: [elvis@station elvis]$ head -n 5 /etc/group root:x:0:root bin:x:1:root,bin,daemon daemon:x:2:root,bin,daemon sys:x:3:root,bin,adm adm:x:4:root,adm,daemon
  52. 52. 52 Filesystem basics Si se le da más de un nombre de archivo como argumento head presentará unas primeras pocas líneas de cada archivo individualmente separado por un encabezado que muestra el nombre de archivo. En el siguiente ejemplo, elvis lista las primeras pocas líneas de los scripts de servicios de Red Hat que se encuentran en el directorio /etc/rc.d/init.d. [elvis@station elvis]$ head -5 /etc/rc.d/init.d/* ==> /etc/rc.d/init.d/aep1000 <== #!/bin/sh # # Tags # chkconfig: - 30 70 # description: load and unload AEP1000/AEP2000 coprocessor driver ==> /etc/rc.d/init.d/anacron <== #!/bin/sh # Startup script for anacron # # chkconfig: 2345 95 05 # description: Run cron jobs that were left out due to downtime ==> /etc/rc.d/init.d/apmd <== #!/bin/sh # # chkconfig: 2345 26 74 # description: apmd is used for monitoring battery status and logging it via # syslog(8). It can also be used for shutting down the machine when ==> /etc/rc.d/init.d/atd <== #!/bin/bash # # /etc/rc.d/init.d/atd # # Starts the at daemon ... Así como con el paginador less de arriba, la salida de comandos largos se puede truncar al establecer una tubería en el comando head. [student@station student]$ ps aux | USER PID %CPU %MEM VSZ RSS root 1 0.0 0.1 2500 416 root 2 0.0 0.0 0 0 root 3 0.0 0.0 0 0 root 4 0.0 0.0 0 0 [ksoftirqd/0] [student@station student]$ El comando tail head -5 TTY ? ? ? ? STAT S SW SW SWN START 10:51 10:51 10:51 10:51 TIME 0:03 0:00 0:00 0:00 COMMAND init [5] [keventd] [kapmd]
  53. 53. 53 Filesystem basics tail [OPCIONES] [ARCHIVO...] Para complementar head, el comando tail muestra las últimas 10 líneas de cada FILE a la salida estándar. Opción Efecto -num, -n num Muestra las últimas num líneas (por defecto es 10). -q Suprime encabezados que dan nombres de archivo -f Mantiene el archivo abierto y escribe las nuevas líneas como añadidas En el siguiente ejemplo, elvis escribe las últimas 10 líneas y después las ultimas 5 del archivo /etc/group. [elvis@station elvis]$ tail /etc/group named:x:25: gdm:x:42: postgres:x:26: apache:x:48: postdrop:x:90: postfix:x:89: squid:x:23: webalizer:x:67: ldap:x:55: elvis:x:500: [elvis@station elvis]$ tail -n 5 /etc/group postfix:x:89: squid:x:23: webalizer:x:67: ldap:x:55: elvis:x:500: El comando tail tiene otra opción bastante útil: la opción -f (follow). Con esta opción tail mostrará las últimas líneas del archivo y luego "espera" y continua presentando cualquier nueva línea al ser añadida al archivo. Frecuentemente, se utiliza para monitorear archivos de registro en tiempo real. Una vez inicie con esta opción, el intérprete de comandos no retorna. En su lugar, tail -f se mantiene activa y continuará presentando las nuevas líneas hasta que se presione CTRL-C. Ejemplos Identificación de documentos con file Al explorar la configuración del sistema de impresión cups, prince se encontró con los siguientes archivos en el directorio /usr/share/cups/banners.
  54. 54. 54 Filesystem basics [prince@station banners]$ ls /usr/share/cups/banners/ classified confidential secret standard topsecret unclassified Como no está seguro de qué tipo de archivos son, trata entonces de identificarlos con el comando file. [prince@station banners]$ cd /usr/share/cups/banners/ [prince@station banners]$ file * classified: PostScript document text conforming at level confidential: PostScript document text conforming at level secret: PostScript document text conforming at level standard: PostScript document text conforming at level topsecret: PostScript document text conforming at level unclassified: PostScript document text conforming at level 3.0 3.0 3.0 3.0 3.0 3.0 El comando file revela que éstos son documentos PostScript enviados a la impresora como pancartas. Determinar el tipo correcto de archivo con file El usuario elvis acaba de descargar algunas imágenes del álbum de fotos del sitio web de su amigo y las guardó en un directorio llamado pics. [elvis@station images]$ ls pics/ dscn0936.png dscn0942.png dscn0953.jpg dscn0938.png dscn0952.png dscn0959.jpg Observa las extensiones de cuatro de los archivos y parecen estar en formato PNG, mientras que dos de ellas parecen tener formato JPEG. Al parecerle extraño, confirma el tipo de archivos ejecutando el comando file. [elvis@station images]$ file pics/dscn0936.png: PNG image interlaced pics/dscn0938.png: PNG image interlaced pics/dscn0942.png: PNG image interlaced pics/dscn0952.png: PNG image interlaced pics/dscn0953.jpg: PNG image interlaced pics/dscn0959.jpg: PNG image interlaced pics/* data, 360 x 480, 8-bit/color RGB, nondata, 640 x 480, 8-bit/color RGB, nondata, 360 x 480, 8-bit/color RGB, nondata, 360 x 480, 8-bit/color RGB, nondata, 640 x 480, 8-bit/color RGB, nondata, 640 x 480, 8-bit/color RGB, non- Los últimos dos archivos están en formato PNG como los otros cuatro. Aparentemente, los dos últimos fueron nombrados con una extensión equivocada. Hojear archivos con head
  55. 55. 55 Filesystem basics La usuaria blondie recientemente aprendió que todos los archivos del directorio /etc/profile.d terminados en .sh se encuentran incluidos en su configuración de shell bash cada vez que inicia sesión. Interesada en saber lo que contienen los archivos decide hojear las primeras líneas de cada archivo con el siguiente comando. [blondie@station blondie]$ head /etc/profile.d/*.sh ==> /etc/profile.d/glib2.sh <== ## This caused GLib2 applications to convert filenames from ## locale encoding to UTF-8. If the locale encoding is already ## UTF-8 then it makes no difference. export G_BROKEN_FILENAMES=1 ==> /etc/profile.d/gnome-ssh-askpass.sh <== SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass export SSH_ASKPASS ==> /etc/profile.d/jdk.sh <== export PATH=/usr/local/j2sdk1.3.1/bin:$PATH ==> /etc/profile.d/lang.sh <== # /etc/profile.d/lang.sh - set i18n stuff sourced=0 for langfile in /etc/sysconfig/i18n $HOME/.i18n ; do [ -f $langfile ] && . $langfile && sourced=1 done if [ -n "$GDM_LANG" ]; then sourced=1 LANG="$GDM_LANG" ... Combinación de archivos múltiples en un sólo archivo con head La usuaria madonna está aprendiendo sobre PAM, los módulos de autenticación conectables de Linux. Acaba de descubrir el directorio /usr/share/doc/pam-0.75/txts, el cual contiene un gran número de archivos README. [madonna@station madonna]$ cd /usr/share/doc/pam-0.75/txts/ [madonna@station txts]$ ls pam_appl.txt README.pam_ftp README.pam_shells pam_modules.txt README.pam_limits README.pam_stack pam.txt README.pam_listfile README.pam_stress README README.pam_localuser README.pam_tally README.pam_access README.pam_mail README.pam_time README.pam_chroot README.pam_nologin README.pam_timestamp README.pam_console README.pam_permit README.pam_unix README.pam_cracklib README.pam_pwdb README.pam_userdb README.pam_deny README.pam_rhosts README.pam_warn

×