GESTIÓN DE FICHEROS Y DIRECTORIOS EN LINUX · PDF file3...

19
1 GESTIÓN DE FICHEROS Y DIRECTORIOS EN LINUX

Transcript of GESTIÓN DE FICHEROS Y DIRECTORIOS EN LINUX · PDF file3...

1

GESTIÓN DE FICHEROS Y DIRECTORIOS EN LINUX

2

 

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  

3

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.

4

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.

5

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.

6

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.

7

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

8

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

9

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:

10

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.

11

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

12

-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 <ENTER>, la salida avanzará una

línea; si pulsamos la barra espaciadora, la salida avanzará una pantalla; por último, si deseamos

acabar, podemos hacerlo con <Ctrl>+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.

13

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.

14

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 <Ctrl>+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 << “cadena”

cuando se utiliza, el shell lee caracteres de la entrada estándar hasta que en una línea nueva se

escriba la cadena de texto cadena seguida de la pulsación de <ENTER>. Cadena puede ser una o

15

varias palabras, si contiene espacios en blanco las comillas son obligatorias.

7.2.-Redireccionamiento de salida estándar Se lleva a cabo haciendo uso del símbolo > 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 <ENTER>) tecleemos un final de fichero <CTRL>+ 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 << fin > 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 <ENTER>.

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.

16

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

17

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:

18

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

19

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.