Story Transcript
GESTIÓN DE FICHEROS Y DIRECTORIOS EN LINUX
1
1.-‐Organización de la información en Linux ...................................................................... 3 2.-‐Soporte de los ficheros ......................................................................................................... 4 3.-‐Tipos de archivos en Linux .................................................................................................. 5 4.-‐Estructura de directorios en Linux ................................................................................. 6 5.-‐Comandos para la manipulación y gestión de directorios ....................................... 8 6.-‐Comandos para la manipulación y gestión de ficheros ............................................. 9 7.-‐Redireccionamientos en Linux ....................................................................................... 14 8.-‐Carácter de interconexión (o pipe) y filtros ............................................................... 16 9.-‐Metacaracteres ..................................................................................................................... 17 ANEXO I. Diferencias entre un enlace físico (hard) y un enlace simbólico. .......... 19
2
1.-‐Organización de la información en Linux En UNIX (y en Linux) la información se estructura en una serie de ficheros organizados según una estructura jerárquica de directorios en forma de árbol invertido. A diferencia de lo que ocurría en MS-DOS, que se disponía de una unidad lógica para cada dispositivo (disquetera, CD-ROM, particiones del disco duro) y tenía sentido hablar de unidad activa, en el caso de UNIX (y Linux) la información de los dispositivos de almacenamiento acaba integrándose en una única estructura jerárquica de directorios. El árbol padre de esta estructura se encuentra en el llamado dispositivo raíz, y forma el sistema de ficheros raíz, en él se encuentra un directorio del cual cuelgan, directa o indirectamente todos los demás: el directorio raíz, representado por el carácter /. Sin embargo, el concepto de directorio de trabajo sigue existiendo. A la hora de especificar las rutas de los ficheros y directorios haremos uso del carácter / a diferencia de cómo se hace en MS-DOS (el carácter usado es \). Todos los ficheros y directorios son referenciables de dos formas: •Ruta absoluta. Consiste en especificar el camino entero que se debe seguir desde el directorio raíz / hasta el fichero o directorio. •Ruta relativa. Es el camino que se ha de seguir desde el directorio activo hasta llegar al fichero o directorio. Todo directorio contiene dos entradas que se crean al crear el directorio. Estas son . y ... La entrada . hace referencia (es un enlace físico) al propio directorio. La entrada .. hace referencia (es un enlace físico) al padre del directorio. El núcleo trata a todos los ficheros como secuencias de bytes sin estructura alguna, cada programa es responsable de interpretar su propia estructura.
3
2.-‐Soporte de los ficheros La información relativa a los ficheros se encuentra en las tablas de nodos de índices ( o tablas de inodes). Las tablas de inodes soportan la información administrativa de los ficheros, son gestionadas directamente por el sistema y son creadas al crear cada sistema de ficheros, bien sea en la instalación del sistema o a posteriori. Un inode es un registro de una tabla de inodes que contiene la mayor parte de la información acerca de un fichero: •Identificador de grupo. •Identificador de usuario. •Fecha y hora de la última modificación. •Fecha y hora del último acceso al fichero. •Número de enlaces. •Tipo de fichero (ordinario, directorio,....). •Punteros a los bloques que contienen los datos del fichero.
4
3.-‐Tipos de archivos en Linux En UNIX (y en Linux) podemos encontrar los siguientes tipos de ficheros: •Ficheros ordinarios. Contienen datos y/o programas. Según su contenido pueden ser de dos tipos: ficheros ASCII o de texto y ficheros binarios. Los últimos suelen ser ficheros ejecutables. •Directorios. Son los ficheros que permiten una organización jerárquica en forma de árbol invertido. Pueden contener directorios y ficheros. •Ficheros especiales. UNIX (y Linux) trata los dispositivos físicos como si fueran ficheros. Los ficheros especiales de dispositivo son pues ficheros que representan dispositivos y se encuentran en el directorio /dev. Así, por ejemplo, el fichero especial de dispositivo /dev/fd0 representa a la primera unidad de disquete. Los ficheros especiales pueden ser modo bloque o modo carácter. •Enlaces simbólicos. Se utilizan para hacer referencia a algún nombre de fichero. Se puede decir que son el equivalente a los accesos directos de Windows. •Tuberías (o pipes). Son ficheros especiales utilizados para la comunicación entre procesos. En la línea de comandos del shell se suele utilizar frecuentemente para filtros. •Sockets. Ficheros especiales para comunicación entre procesos ubicados en máquinas distintas. El tipo de un archivo lo podemos conocer observando el carácter más a la izquierda en la primera columna del resultado obtenido al usar el comando ls con la opción –l.
5
4.-‐Estructura de directorios en Linux Una característica ventajosa de un sistema UNIX (y Linux) es que su estructura de directorios básica es una estructura significativa no organizada al azar. Esto quiere decir que cada directorio está relacionado con archivos específicos, lo cual permite mantener un sistema ordenado y la posibilidad de una mejor administración del mismo. Parte de esta organización es preceptiva para el funcionamiento del sistema, pues éste espera encontrar ciertos archivos (muchos de ellos de configuración) en lugares específicos, y el cambiar su ubicación implicaría hacer modificaciones internas en el propio sistema operativo. Dentro del directorio raíz podemos encontrar los siguientes directorios con fines específicos: /bin: Contiene programas esenciales para el funcionamiento del sistema y que serán usados por todos los usuarios. /boot: Contiene los archivos requeridos por el gestor de arranque (comúnmente grub). Generalmente contiene una imagen del kernel (o núcleo, que es el corazón del sistema operativo). /dev: Archivos que representan a los dispositivos físicos (modem, ratón, impresora, discos), recordemos que Linux maneja cada componente de hardware como archivo para lograr una mayor abstracción. Por ejemplo /dev/ttyS0 representa al primer puerto serie (el equivalente a COM1 en sistemas Windows). /etc: Este directorio contiene los archivos de configuración del sistema. /home: En este directorio se guardan los directorios personales de los usuarios. Por ejemplo Juan podría tener todos sus documentos y personalizaciones en /home/juan. /lib: Todas las bibliotecas (comúnmente llamadas librerías) para los programas esenciales del sistema y los módulos del kernel (componentes del kernel que se cargan según la demanda) se alojan en este directorio. /mnt: En este directorio se ubican los puntos de montaje para los dispositivos de bloque (Archivos de bloque son archivos que representan unidades de disco). /opt: Contiene los paquetes que no son esenciales para que el sistema funcione. Puede contener por ejemplo a KDE. /proc: Es un sistema de archivos virtual, se usa para obtener información de los procesos y del hardware. La información contenida en este sistema de archivos es utilizada para que funcionen utilidades como ps.
6
/root: Este es el directorio del administrador del sistema o root. El usuario root es más bien una función, es decir conviene que aun el usuario que tiene la función de root, se registre como un usuario normal para las tareas no administrativas. /sbin: Contiene programas esenciales para el sistema, aunque son ejecutados más bien por el usuario root. /tmp: Directorio que contiene los archivos temporales. /usr: Este archivo contiene principalmente los programas no esenciales para el sistema. Tiene una subjerarquía propia. También contiene la documentación de las aplicaciones. /var: Contiene datos que son modificados en tiempo real por los programas. Es decir lleva un registro de errores, informaciones y advertencias del sistema y de las aplicaciones.
7
5.-‐Comandos para la manipulación y gestión de directorios Comando pwd Sintaxis: pwd Muestra el nombre del directorio activo. Comando cd Cambia el directorio activo. Sintaxis: cd [directorio] directorio es opcional, si no se especifica, el directorio activo pasará a ser el directorio home (directorio personal) del usuario que ejecuta el comando. Comando mkdir Sintaxis: mkdir directorio1 [directorio2 ...] Crea el directorio o directorios que se especifiquen. Es posible crear un árbol completo de directorios con un único comando. Comando rmdir Elimina los directorios especificados siempre que estén vacíos. No se puede eliminar el directorio activo. Sintaxis: rmdir directorio1 [directorio2 ...]
8
6.-‐Comandos para la manipulación y gestión de ficheros Comando cat Concatena el contenido de los ficheros que se le pasen, si no se le pasa nombres de fichero, lee datos de la entrada estándar (teclado) hasta que encuentre un final de fichero Ctrl+D y entonces produce un eco en la salida estándar (pantalla). Sintaxis: cat [-n] [fichero1 [fichero2 ...]] -n : El comando produce una numeración de todas las líneas del resultado. Comando cp Copia ficheros. Sintaxis: cp [opciones] origen destino cp [opciones] origen1 [origen2 …] directorio_destino La segunda sintaxis de cp, copia varios archivos en un directorio dado. Los permisos de los archivos también se copian. origen, origen1, origen2 : son nombres de ficheros (especificados con su ruta relativa o absoluta). destino: puede ser el nombre de un archivo (con su ruta absoluta o relativa) o un directorio. Si es un directorio, entonces origen es copiado sin cambiar el nombre. Si se quiere copiar en el propio directorio es necesario especificar otro nombre. En cualquier caso si se da un nombre de fichero ya existente su contenido será reemplazado. Opciones: -r : Copia directorios recursivamente. Comando mv Cambia el nombre a un fichero o directorio. Sintaxis:
9
mv fichero1 fichero2 mv fichero1 [fichero2] directorio En la primera sintaxis fichero1 es el nombre original de un archivo o directorio y fichero2 es el nuevo nombre. Comando rm Elimina archivos o directorios. Sintaxis: rm [-opciones] fichero1 [fichero2 ...] Opciones: -r : Permite aceptar nombres de directorios como argumentos, y realiza un borrado recursivo del mismo. Atención a esta opción que puede ser peligrosa. Si el nombre del fichero (o ficheros) es un directorio obligatoriamente debe utilizarse la opción ‘-r’. Comando find Busca ficheros recursivamente a partir del directorio que se especifique. Sintaxis: find nodo_ruta criterio_nombre_expresión nodo_ruta : especifica a partir de dónde buscar los archivos (camino). criterio : indica cómo seleccionar los archivos, si es por el nombre solamente o es por otro criterio cualquiera. acción : se refiere a, qué hacer con los ficheros seleccionados. Criterios: -name fichero : busca ficheros con nombre fichero. -type f : busca ficheros ordinarios. -type d : busca directorios. -user nombre_usuario : busca ficheros cuyo propietario sea el usuario nombre_usuario.
10
-group nombre_grupo : busca ficheros cuyo grupo propietario sea nombre_grupo. -atime -n : busca ficheros a los que se ha accedido hace menos de n días. Ejemplos: find /usr -name fic busca a partir del directorio /usr ficheros llamados fic find / -name fic -type f -user juan busca a partir del directorio raíz los ficheros ordinarios que se llamen fic y tengan como propietario a juan. Comando ln Establece un enlace o vínculo entre dos ficheros, de manera que al actualizar uno de ellos los cambios se producirán en los dos. Sintaxis: ln [-opciones] fichero_exitente fichero_nuevo Opciones: -s : crea un enlace simbólico. Si no se especifica el enlace será físico. Comando grep Busca cadenas en un fichero o ficheros Sintaxis: grep [-opciones] cadena fichero1 [fichero2 ...] cadena : cadena de texto a buscar, si contiene espacios en blanco debe ir entre comillas (simples o dobles). Opciones: -i : no hace distinción entre mayúsculas y minúsculas. -n : numera las líneas de salida. El número de cada línea será el orden que tiene en el fichero en el cual se encuentra. -v : Para que el resultado sean las líneas que no contienen la cadena. Si no se especifica esta opción, mostrará las líneas que contienen la cadena.
11
-c : En lugar de mostrar líneas, muestra el número total de líneas que contienen la cadena en cada fichero. Comando more Permite visualizar línea a línea o pantalla a pantalla el contenido del fichero o ficheros que se le pasen si el contenido de estos no cabe en una pantalla. Sintaxis: more fichero1 [fichero2 ...] Una vez que tengamos llena una pantalla, y siempre que queden más líneas por visualizar, el programa espera la pulsación de alguna tecla. Si pulsamos , la salida avanzará una línea; si pulsamos la barra espaciadora, la salida avanzará una pantalla; por último, si deseamos acabar, podemos hacerlo con +C. Comando sort Da como resultado el contenido de uno o varios ficheros, ordenando las líneas según determinados criterios. Sintaxis: sort [-opciones] fichero1 [fichero2 ...] Opciones: -r: invierte el orden. -t separador : especifica el carácter a utilizar como separador de campos. Si no se especifica, se asume que es el carácter espacio en blanco. -k pos1[,pos2] : Indica los campos por los que ordenar (pos1 y pos2 son valores enteros mayores que cero, 1 para el primer campo, 2 para el segundo campo,....) Si sólo se especifica pos1 se ordenará por el campo que indique, si se especifica pos2, se ordenará en primer lugar por el campo pos1, a continuación (en caso de coincidencia de varios valores en el campo1) por el campo pos1+1 y así hasta pos2. Si no se especifica esta opción, ordenará por el primer campo. Si no se especifica separador ni campos, la salida se ordenará por líneas. -o fichero_salida : el resultado se guardará en fichero_salida. Comando tr Visualiza por la salida estándar el contenido de un fichero sustituyendo unos caracteres por otros.
12
Sintaxis: tr [-s] caracter_inicial caracter_final fichero Devuelve el contenido de fichero, sustituyendo las apariciones del carácter caracter_inicial por caracter_final. Con la opción –s sustituye repeticiones del carácter caracter_inicial por un único carácter caracter_final.
13
7.-‐Redireccionamientos en Linux Todo proceso en Linux tiene una entrada estándar, una salida estándar y una salida estándar de error. La entrada estándar es el fichero desde el cual el proceso espera recibir datos. La salida estándar es el fichero en el que el proceso volcará su salida normal. La salida estándar de error es el fichero en el que el proceso escribirá los mensajes de error que emita. De forma predeterminada la entrada estándar es el teclado, y la salida estándar y la salida estándar de error es la pantalla. Sin embargo esto es posible cambiarlo desde la línea de órdenes del shell. Ejemplo: Si usamos el comando cat sin ningún argumento, su comportamiento será leer caracteres de la entrada estándar (el teclado, ya que no se ha redireccionado) hasta que encuentre un final de fichero (e.d. hasta que se pulse en una nueva línea +d). Finalmente volcará el texto leído por la salida estándar (la pantalla, pues tampoco se ha redireccionado). 7.1.-Redireccionamiento de entrada Se lleva a cabo haciendo uso del símbolo < seguido del nombre del nuevo fichero de entrada. Ejemplos: El comando sort < empleados.txt muestra por la salida estándar (la pantalla) las líneas ordenadas del fichero empleados.txt. El comando cat < empleados.txt muestra por la salida estándar (la pantalla) el contenido del fichero empleados.txt. Una variante muy útil es la doble redirección de la entrada, cuya forma de uso es seguido del nombre del nuevo fichero de salida estándar. Ejemplos: El comando date > salida.txt escribe la fecha y la hora en el archivo salida.txt. Si el fichero no existe lo crea, en caso contrario, reemplazará su contenido por los nuevos datos. Como vemos, la redirección de la salida estándar es útil para la creación rápida de ficheros. Si no disponemos de un editor de texto, podemos improvisar uno (muy rudimentario, pero más vale eso que nada) de la siguiente manera: cat > datos.txt como resultado de la ejecución de este comando, se leerán caracteres del teclado hasta que en una nueva línea (e. d. después de pulsar ) tecleemos un final de fichero + D. Los datos tecleados irán a parar al fichero datos.txt. Si el comando anterior lo combinamos con la doble redirección de la entrada cat salida.txt el comportamiento será similar, la única diferencia es que la entrada de datos se detendrá cuando en una nueva línea se escriba la palabra fin seguida de . Por último veamos un ejemplo de combinar el redireccionamiento de entrada con el de la salida estándar cat < fichero1.txt > fichero2.txt el efecto es hacer una copia del contenido de fichero1.txt en fichero2.txt. Existe también una variante del redireccionamiento de la salida estándar, que consiste en utilizar los símbolos >> en lugar de >. El efecto de ambos operadores es similar: si el fichero de salida especificado no existe se crea, pero si el fichero ya existe, con >> los datos que contiene ya no son destruidos, pues los nuevos datos se añaden al final del mismo.
15
8.-‐Carácter de interconexión (o pipe) y filtros Los filtros son programas que operan sobre estructuras de datos (generalmente ficheros) y proporcionan como salida modificaciones sobre la entrada. En esta categoría entran los comandos grep, more, sort, y tr que ya hemos visto. Ahora bien, al describir su sintaxis hemos visto que todos ellos permiten especificar nombres de fichero para su entrada, y que su salida predeterminada es la pantalla (el comando sort permitía, con la opción –o, especificar un nombre de fichero para su salida). En cualquier caso, podemos hacer uso de la redirección para especificar ficheros de entrada o de salida. Si lo que pretendemos es hacer que la entrada de un programa sea tomada de la salida de otro, se debe hacer una interconexión de los mismos. Esto se lleva a cabo utilizando el carácter |. Este carácter, usado en este contexto se denomina pipe ( o tubería). Deben quedar claras las situaciones en que se debe usar este carácter y cuándo se deben usar los caracteres de redirección: si lo que pretendemos es que la entrada o salida de un programa sea un fichero, utilizaremos redirección; en cambio, si pretendemos que la salida de un programa pase a ser la entrada de otro, hemos de usar el pipe. Ejemplo: grep disquetera perifericos.txt | sort > disqueteras.txt en esta orden, el comando grep selecciona aquellas líneas del fichero.txt que contengan la palabra disquetera. La salida predeterminada de grep es la pantalla, pero en este caso, como hemos puesto un pipe será pasada a la entrada de sort, que ordenará las líneas y las volcará al fichero disqueteras.txt. Por último, cabe señalar que el carácter pipe no es aplicable exclusivamente a aquellos programas que sean filtros (según la definición de arriba). Con el uso del mismo, cualquier programa que espere datos por su entrada estándar podrá obtenerlos de la salida de otro programa que envíe datos a su salida estándar (ver la prácticas de redireccionamiento y filtros).
16
9.-‐Metacaracteres Los metacaracteres pueden definirse como caracteres o combinaciones de ellos con significados especiales para el shell. En el tema que nos ocupa, son de interés aquellos que se pueden utilizar manipular nombres de ficheros y directorios. Vamos a ver los siguientes: * : Sustituye a una cadena de cero o más caracteres. ? : sustituye a un único carácter. [] : sustituye a cualquier carácter de los incluidos entre los corchetes. Dentro de éstos puede haber una secuencias de caracteres, intervalos (dos caracteres separados por un guión) o ambos. Ejemplo 1: ls fich*.txt Muestra un listado de los ficheros del directorio actual cuyo nombre comience por fich y acabe en .txt. Ejemplo 2: ls fich??.txt Muestra un listado de los ficheros del directorio actual cuyo nombre comience por fich y acabe en .txt, y tenga intercalados, entre fich y .txt dos caracteres cualquiera. Ejemplo 3: ls fich[1-7].txt Muestra un listado de los ficheros del directorio activo cuyo nombre comienze por fich, acabe en .txt y en medio tenga un dígito comprendido entre 1 y 7 (ambos incluidos). Ejemplo 4: ls fich[1234567].txt Realiza la misma función que el comando anterior. Ejemplo 5:
17
ls fich[a-ce-g].txt Muestra un listado de los ficheros del directorio activo cuyo nombre sea cualquiera de los siguientes: ficha.txt, fichb.txt, fichc.txt, fiche.txt, fichf.txt, fichg.txt
18
ANEXO I. Diferencias entre un enlace físico (hard) y un enlace simbólico. Enlace físico: ✔ Se crea con el comando ln sin hacer uso de la opción -s. ✔ Con la orden ls -l aparece como un fichero más, no hay forma de saber que se trata de un enlace. ✔ No puede crearse un enlace físico para un directorio. ✔ Debe apuntar obligatoriamente a un fichero que esté en la misma partición. ✔ Al borrar el último enlace físico el fichero se borra. Enlace simbólico: ✔ Se crea con el comando ln haciendo uso de la opción -s. ✔ Con la orden ls -l aparece como un fichero de tipo enlace simbólico (el primer carácter de la primera columna es l). ✔ Es posible crear un enlace simbólico para un directorio. ✔ Puede apuntar a un fichero o directorio que esté en otra partición e incluso, puede no apuntar a nada. ✔ Al borrar el último enlace simbólico el fichero no se borra.
19