Linux: Manejo de Archivos Tema 3 Laboratorio de sistemas operativos UTFSM-JMC 1-2016 Navegación del sistema de archivos: El árbol invertido • Linux utiliza un sólo árbol de directorios para toda su colección de archivos y directorios. • Todas las ramas “cuelgan” de una sola raíz. • Para nombrar un archivo o directorio comenzar desde la raíz y listar todas las ramas hasta el archivo o directorio deseado, separando cada rama con “/”. • Lo anterior se conoce como FQDN o nombre completamente calificado. -- bin... | / -- -- etc... | | -- mystuff... | | | -- alice -| | | | | -- website... | | -- home -| | -- docs... | | | | -- elvis -| | | -- graphics... ... Navegación del sistema de archivos Descubrir el directorio de inicio [hogan@station hogan]$ cd ~ Se cambia al directorio del usuario hogan [hogan@station hogan]$ pwd Verifica dónde está ubicado /home/hogan [hogan@station hogan]$ cd - Vuelve al último directorio visitado /home/hogan Subir y bajar del árbol [alice@station alice]$ cd website/html Se cambia al directorio /home/alice/website/html [alice@station html]$ ... (edits the html files) ... [alice@station html]$ cd /etc Se cambia al directorio /etc [alice@station etc]$ ... (examines the configuration file) ... [alice@station etc]$ cd Vuelve al directorio de inicio o personal [alice@station alice]$ ... (continues with other tasks) ... Navegación del sistema de archivos Directorio de inicio del usuario /home/usuario • Espacio privado del usuario. • Proporciona un lugar para almacenar archivos de configuración de cada usuario. • Normalmente se le da a los usuarios un control completo sobre los directorios de inicio, mientras que se les restringe el acceso al resto del sistema. • “~” Representa el FQDN del directorio de inicio del usuario cuando se utiliza como el primer caracter de una referencia de archivo o directorio. Directorio temporal /tmp • Espacio de borrador global que se encuentra disponible para todos los procesos y usuarios del sistema. • Después de unos días, el sistema borra los archivos allí almacenados. Directorios Importantes Directorio de configuración /etc • Prácticamente todo aspecto del sistema puede configurarse editando un archivo de configuración. • Los archivos de configuración normalmente se ubican bajo /etc. • Directorios de comandos /bin y /usr/bin • Los comandos para ser utilizados por los usuarios normales se almacenan en los directorios de binarios /bin o /usr/bin. • Estos directorios se conocen como “directorios de comandos no privilegiados” ya que no se necesitan privilegios especiales para utilizar los comandos almacenados en ellos. • Los comandos principales, como ls, cd, cp, mv y vi van en /bin. • Las utilidades adicionales como compiladores, el navegador web o la suite de oficina van en /usr/bin. Directorios de comandos /sbin y /usr/sbin • Almacenan comandos y otros binarios para que el superusuario root los utilice. • Estos se denominan comandos privilegiados. Directorios Importantes Directorio “variable” /var • Archivos que cambian frecuentemente (email, logs, websites, ftpsites, etc.) • Para facilitar la asignación de espacio y proteger archivos más importantes. • Búsqueda de comandos en /bin y /usr/bin • Para conocer el FQDN de un programa en esos directorios • Usar comando which programa Ejercicios • Para crear archivos nuevos (y vacíos) se usa el comando touch. Cree el archivo newfile.ext en los siguientes directorios: ~ /tmp /bin /root • Use which para determinar la ruta (o el FQDN) de los siguientes comandos: pwd ls whoami Administración de archivos Redirección • A linux le gusta pensar que todo es archivo • STDOUT es la salida estándar, que por defecto es la pantalla. • STDOUT puede ser redireccionada a algún otro archivo usando >. pwd > results.txt (redireccionar la salida del comando pwd) cat results.txt (observa el contenido del archivo recién creado) • Si se utiliza >> la nueva salida se añadirá al archivo creado anteriormente. [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 Administración de archivos • Copia de archivos con cp cp [OPCIONES] {FUENTE} {DESTINO} cp [OPCIONES] {FUENTE...} {DIRECTORIO} • Para crear duplicados de archivo • Mover o renombrar archivos con mv mv [OPCION...] {FUENTE} {DESTINO} mv [OPCION...] {FUENTE...} {DIRECTORIO} • Mover o renombrar un archivo siempre significa para Linux el cambio de FQDN de éste. Administración de Archivos Borrar archivos con rm rm [OPCIONES] {ARCHIVO...} • No puede borrar un directorio a menos que se utilicen opciones especiales. • rmdir puede borrar directorios vacíos. • Sobreescribir archivos Comandos potencialmente peligrosos: cp mv rm • Sobreescriben archivos sin ningún mensaje de advertencia Ejercicios • Cree los directorios ~/html y ~/archive • Cree el archivo ~/index.html, debe tener como contenido la frase “En construcción”. • Mueva ~/index.html a ~/html • Renombre el directorio ~/html como ~/public_html • Copie el archivo index.html al directorio ~/archive/ Ejercicios • Cree un archivo llamado source con el texto “fuente” y otro llamado target con el texto “destino”. • Sobreescriba el archivo target con el archivo source. (target debe llamarse source después del comando, por lo tanto desaparece). • Vuelva a crear el archivo target • Sobreescriba target con el contenido de source, pero ahora utilizando cat y redireccionando la salida. Administración de Directorios Creación de directorios vacíos mkdir [OPCIONES] {DIRECTORIO...} • Crea el o los directorios si no existen. • Emite un error si uno o más existe, aunque los sin error son igualmente creados. • No creará un directorio si el padre tampoco existe mkdir -p directorio_padre/directorio_hijo • El anterior crea ambos directorios, utilizando el modificador -p. Listado de árboles de directorio • El comando ls con el modificador -R obtiene el listado de los directorios y archivos que existen al interior de un directorio principal, recursivamente. Administración de Directorios Borrar directorios vacíos rmdir rmdir [OPCIONES] {DIRECTORIO...} • Borra los directorios vacíos. • Funciona de manera silenciosa Copiar árboles de directorio cp -r • Utilizando el modificador -r, el comando cp copia directorios recursivamente. Borrar árboles de directorio rm -r • Al igual que cp, si se utiliza el modificador -r, se establece borrar todo el contenido de un directorio, aún cuando éste sean otros directorios. Ejercicios (resueltos) 1. Utilice ls para obtener un listado recursivo del directorio /usr/share/gdm. El listado debe incluir los tamaños de los archivos. Redireccione la salida al archivo lsgdm.txt. (ls -sR /usr/share/gdm > lsgdm.txt) 2. Haga una copia recursiva del directorio /usr/share/gdm en su directorio de inicio. El nuevo directorio debe llamarse gdm. (cp -r /usr/share/gdm ~/) 3. Haga una segunda copia del directorio anterior, ahora llamándola gdm.bak. (cp -r /usr/share/gdm ~/gdm.bak) 4. Elimine recursivamente el directorio gdm.bak/themes (rm -r ~/gdm.bak/themes/) 5. Mueva el directorio gdm.bak/BuiltInSessions a su directorio de inicio. El directorio debe seguir llamándose BuiltInSessions. (mv ~/gdm.bak/BuiltInSessions/ ~/) Nombres y comodines de archivos Nombres de Archivo • Virtualmente se puede usar cualquier caracter imprimible, con longitud hasta 255 caracteres, excepto el “/”. • Los caracteres especiales pueden ser interpretados por la shell como parámetros, por lo que es necesario ponerlos entre comillas cuando se usen en un nombre de archivo. • En general, se sugiere nombrar los archivos de la siguiente forma: • Caracteres alfanuméricos: (A-Z, a-z, 0-9) • Signos de puntuación: . _ - + ~ (punto, guión bajo, guión, más, tilde). • No usar espacios, a no ser que utilice comillas. Archivos ocultos • Comienzan por un punto. • ls –a, permite mostrar los archivos ocultos de un directorio. Nombres y comodines de archivos Comodines • La shell realiza expansión de metacaracteres o comodines para generar una lista de nombres de archivo que coinciden con el patrón descrito por la expresión del comodín y luego pasa la lista al comando emitido. Consideraciones • [aeiou] : Lista • [a-z] : Rango • [^aeiou] : Lista negada • [a\-z] : Coincidirá con a, z o un guión, porque “\” permite que el guión sea considerado como comodín 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 Ejercicios (resueltos) 1. Cree los siguientes directorios en su directorio de inicio: cp_even, cp_mid, cp_thousand, iso_mid, mac y xxxn (mkdir ~/{cp_even,cp_mid,cp_thousand,iso_mid,mac,xxxn}) 2. Copie en ~/mac todos los archivos en /usr/lib64/python2.6/encodings que comienzan con la palabra mac. (cp /usr/lib/python2.6/encodings/mac* ~/mac) 3. Copie todos los archivos que comienzan con cp y que en su nombre tengan un número par en el directorio ~/cp_even. (cp /usr/lib/python2.6/encodings/cp*[02468]* ~/cp_even) 4. Copie todos los archivos que comienzan con cp y que en su nombre tengan un número mayor a 1000, en el directorio cp_thousand. (cp /usr/lib/python2.6/encodings/cp*[1-9][0-9][0-9][0-9]* ~/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. (cp /usr/lib/python2.6/encodings/cp*[89][0-9][0-9]* ~/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. (cp /usr/lib/python2.6/encodings/iso8859_[3-8]* ~/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. (cp /usr/lib/python2.6/encodings/[a-z][a-z][a-z][0-9]* ~/xxxn) Examen de archivos Comando file file [OPCIONES] {ARCHIVO...} • Prueba archivos para determinar el tipo y muestra los resultados en STDOUT. • En general, los archivos pueden ser ASCII o binarios. Comando cat cat [OPCIONES] {ARCHIVO...} • Concatena archivos en la salida estándar • -A : Muestra todos los caracteres • -s : Agrupa líneas adyacentes en blanco en una sola • -n : Numera las líneas de la salida • Apropiado sólo para archivos cortos. Examen de archivos Paginadores more y less: more [OPCIONES] {ARCHIVO...} less [OPCIONES] {ARCHIVO...} • Muestran el o los archivos en STDOUT bajo el control del teclado • Opciones • -c : Limpia la pantalla y redibuja en vez de desplazarse • -s : Agrupa múltiples líneas adyacentes en blanco en vez de una sola línea en blanco. • Al usar un comando que produce bastante salida, ésta se puede redireccionar al comando more o less, permitiendo una navegación más controlada. • ls –la |more; ps aux |less 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 ?texto No n Si N No q Si quit h Si ayuda (introduce muchos comandos nuevos) va hacia adelante para buscar texto va hacia atrás para buscar texto repite la última búsqueda repite la última búsqueda pero en dirección contraria Examen de archivos Comando head head [OPCIONES] {ARCHIVO...} Muestra las primeras líneas de uno o varios archivos • -num, -n numero : imprime las primera numero líneas (defecto 10). • -q : Suprime encabezados que dan nombre de archivo Comando tail tail [OPCIONES] {ARCHIVO...} Muestra las últimas líneas de uno o varios archivos • -num, -n numero : imprime las últimas numero líneas (defecto 10). • -q : Suprime encabezados que dan nombre de archivo • -f : Mantiene el archivo abierto y escribe las nuevas líneas como añadidas. Frecuentemente se utiliza para monitorear archivos de log en tiempo real. Ejercicios 1. Genere el archivo ~/services.cat.txt, el cual contiene el contenido del archivo /etc/services con líneas numeradas producidas por el comando cat. 2. Ejecute ls -R /, pero use una tubería para navegar por su salida. 3. Genere el archivo ~/confheaders.txt en su directorio de inicio, el cual contiene las primeras cinco líneas de los existentes en /etc/sysconfig que comienzan con redhat-. En el archivo, no deben mostrarse los nombres de los archivos visualizados. 4. Ejecute el siguiente comando: vmstat 5 > ~/vmstat.out & 5. Utilice tail con el modificador correspondiente para visualizar en tiempo real los cambios a las últimas líneas del archivo ~/vmstat.out. Editores de archivos Editores de texto versus procesador de texto • En Linux, la información sobre la configuración se encuentra almacenada en archivos de texto ASCII. • Un editor de texto no es lo mismo que un procesador de texto, porque está diseñado sólo para modificar el texto de un archivo ASCII plano. Editores de texto en Linux • vi (Robusto, por defecto, de línea de comandos, pero el más complicado) • nano (simple y de línea de comandos) • gedit (gráfico) Editores de archivos nano nano [OPCIONES] {ARCHIVO} • Abre el archivo en modo edición • Opciones: • • -w : Desactiva el ajuste de texto (para evitar daños al archivo por cortes de línea indebidos) -v : Ver el archivo en modo lectura Editores de archivos: nano Comando Función ^G Ayuda - abre una pequeña ventana de ayuda ^X Salir - sale (y opcionalmente guarda el archivo) ^O Escribir - guarda el archivo ^J Justificar ^R Leer el archivo - e insertar en la posición del cursor ^W Dónde está - búsqueda de texto ^Y Página anterior -retrocede una página ^V Próxima página - adelanta una página ^K Cortar texto - corta una línea a la vez ^U Deshace el corte de texto - inserta el último bloque de texto cortado ^C Posición del cursor- identifica el número de línea y de columna ^T Corrector ortográfico - empieza a corregir la ortografía Ejercicios 1. Cree una copia del archivo /etc/services como ~/services.nano. • • • • • Abra con nano el archivo services.nano Use las opciones que le provee el editor para buscar y eliminar todos los caracteres “+” que se encuentran en el archivo. Desplácese a la línea 140 y borre ésta y la siguiente, usando las opciones que brinda el programa. Guarde el archivo como services.nano.modified. Salga de nano. 2. Cree una copia del archivo /etc/services como ~/services.gedit. • • • • Desplácese a la línea 100 del archivo y borre ésta y las dos siguientes. Reemplace tcp por udp. Guarde el archivo como services.gedit.modified. Cierre gedit. Ejercicios: Directorios y Organización de Archivos 1. 2. 3. 4. 5. 6. 7. 8. 9. Inicie sesión en el sistema como el usuario 'alumno'. Manténgase en el directorio de inicio de este usuario. Ejecute el siguiente comando para crear los archivos: report_jan, report_feb, report_mar, graph_jan, graph_feb, graph_mar. touch {report,graph}_{jan,feb,mar} Cree los directorios Projects, Projects/graphs, Projects/reports y Projects/backups. Mueva todos los archivos que comienzan con 'graphs' al directorio Projects/graphs Mueva dos de los archivos que comienzan con 'report' al directorio Projects/reports Elimine el archivo report restante Cámbiese al directorio Projects/Backups y copie los archivos que terminan con 'jan' a este directorio. Ejercicio: Respaldar la configuración del sistema • Cámbiese a la terminal tty1 e inicie sesión como root • En /root cree un directorio llamado backups • Ejecute cp de manera que se copie recursivamente el directorio /etc/sysconfig en /root/backups, considerando lo siguiente: • Los permisos y propiedades de archivo deben mantenerse, por lo que debe investigar qué opción usar en el comando cp para cumplirlo. • Los vínculos simbólicos deben mantenerse, por lo que también debe determinar la opción a usar. • El nombre de los archivos debe mostrarse a medida que se van copiando al respaldo. • Considere en el nombre del directorio sysconfig respaldado que quede con un timestamp ejemplo: /root/backups/sysconfig-20140819