Cerramos del 10/08 al 18/08. Los pedidos cursados a partir del 09/08 a las 12.00 hora de España peninsular se tramitarán el 19/08/2024.
Cerramos del 10/08 al 18/08. Los pedidos cursados a partir del 09/08 a las 12.00 hora de España peninsular se tramitarán el 19/08/2024.
  1. Libros
  2. Linux
  3. Manipulación de archivos
Extrait - Linux Principios básicos de uso del sistema (8ª edición)
Extractos del libro
Linux Principios básicos de uso del sistema (8ª edición)
2 opiniones
Volver a la página de compra del libro

Manipulación de archivos

Introducción

Tras leer este capítulo, el lector estará capacitado para moverse por el árbol de Linux y para crear, mover y borrar archivos y directorios.

Nombres de archivos y de directorios

Los nombres de archivos y de directorios en Linux responden a ciertas reglas de escritura.

Descripción del contenido

En primer lugar, un nombre de archivo debe proporcionar indicaciones sobre su contenido; esto es válido para todos los sistemas operativos.

Para un profesor, es más fácil encontrar las notas de historia de la clase de 6º A del primer trimestre de 2022 en el archivo llamado notas.historia.clase.6A.trim.1.2022 que en el archivo llamado vale.

Sintaxis

La distinción de mayúsculas y minúsculas es determinante en la sintaxis de los nombres de archivos. Así, los archivos vale, Vale y VALE son distintos.

Sólo deben utilizarse los caracteres alfanuméricos (de a a z, A a Z y 0 a 9) junto con algunos más (_, ., @, -, +) en los nombres de archivos.

Algunos caracteres tienen un significado especial en la línea de comandos; estos se detallarán en el capítulo dedicado al Shell Bash. Por ejemplo, borrar a* no significa borrar el archivo llamado a*, sino todos los archivos que empiezan por la letra a.

De hecho, pueden utilizarse todos los caracteres en los nombres de archivo exceptuando /, que es el carácter de separación de nombres de directorios en la línea de comandos.

Los signos - y + deben evitarse al principio de un nombre de archivo porque puede haber ambigüedad con algunas opciones de la línea...

Tipos de archivos

En Unix se entiende por archivo la estructura que contiene datos del usuario.

Los archivos estándar están constituidos por una serie de caracteres o flujo de bytes cuyo formato no viene impuesto por el sistema, sino por las aplicaciones.

La analogía entre byte y carácter se debe al hecho de que un carácter se codifica con un byte; el tamaño de un archivo puede indicarse, por tanto, tanto en bytes como en caracteres.

Los directorios son archivos especiales que pueden contener otros muchos archivos (directorios o no). Esto permite organizar los archivos de forma jerárquica en estructura de árbol.

Los términos "directorio" y "archivo", utilizados en Linux, son equivalentes a "carpeta" y "documento" empleados habitualmente en Windows y Mac OS.

Existen siete tipos de archivos en Linux; los tres más importantes son:

  • archivo estándar u ordinario;

  • directorio;

  • vínculo simbólico o lógico (soft link).

Los otros cuatro tipos de archivo, que se trabajan principalmente en la administración o en programación del sistema, son:

  • archivo que apunta a un dispositivo de tipo "bloque" (archivos presentes  /dev);

  • archivo que apunta a un dispositivo de tipo "carácter" (archivos presentes en /dev);

  • archivo de tubería llamado "named pipe" para la comunicación entre procesos;

  • archivo...

Rutas

Conocer el nombre de un archivo (o de un directorio) no es suficiente para acceder a él; un mismo nombre puede estar asociado a varios archivos en directorios diferentes.

La referencia plenamente cualificada de un archivo se denomina "ruta" e indica el directorio en el que se encuentra el archivo. Los nombres de directorios y de archivos van separados por una / (barra oblicua) en las rutas.

Atención, en un sistema Windows, el separador entre los nombres de archivo y de directorios es el \ (barra inversa).

Existen tres tipos de rutas: absolutas, relativas y personales. Pueden utilizarse indiferentemente en la forma de nombrar archivos en la línea de comando.

Ejemplo de árbol:

images/0501arbo.png

1. Rutas absolutas

Una ruta absoluta se basa en la raíz del árbol de Linux. Toda ruta absoluta empieza, pues, por /.

Sea cual sea la ubicación actual donde se encuentre, se podrá referenciar el archivo notas del ejemplo anterior con la ruta /home/willy/notas.

Ejemplo:

[willy]$ ls /home/willy/notas 
/home/willy/notas 

2. Rutas relativas

Las rutas relativas dependen del directorio actual en el que se encuentra el usuario.

Sabiendo que cada directorio en el sistema contiene los archivos . (punto) y .. (punto-punto) que referencian respectivamente el propio directorio actual y el directorio padre, existen varias rutas relativas que designan el archivo notas en el ejemplo:

Directorio actual

Ruta relativa correspondiente

/home

willy/notas...

Exploración del árbol

1. pwd

El comando pwd (print working directory) muestra la ruta absoluta del directorio actual en el que se encuentra el usuario:

[willy]$ pwd 
/home/willy 

2. cd

El comando cd (change directory) permite cambiar de directorio actual. En la línea de comandos, se indica como argumento junto con el directorio al que se quiere ir:

[willy]$ pwd 
/home/willy 
[willy]$ cd /var/spool 
[willy]$ pwd  
/var/spool 
[willy]$ cd .. 
[willy]$ pwd 
/var 

En este ejemplo el comando que permite "subir" hacia el directorio padre cd .. y no cd.. (sin espacio) como en DOS: el carácter de espacio es obligatorio entre el comando y su argumento.

Además, la ruta del archivo (o del directorio) como argumento puede ser absoluta, relativa o personal; esto es válido para todos los comandos.

Llamado sin argumentos, el comando cd devuelve al usuario a su directorio personal:

[willy]$ pwd 
/var 
[willy]$ whoami 
willy 
[willy]$ cd 
[willy]$ pwd 
/home/willy 

Finalmente, la sintaxis particular siguiente permite volver al directorio anterior:

[willy]$ pwd 
/home/willy 
[willy]$ cd - 
/var 
[willy]$ pwd 
/var 

No hay que confundir el directorio "padre" (..), situado sobre el directorio actual en el árbol de Linux, con el directorio "anterior", que corresponde al directorio en el que se encontraba antes el usuario.

3. ls

El comando ls permite listar el contenido de directorios. Sin opciones, la visualización sigue el orden alfabético de los nombres de archivo.

Argumentos

Llamado sin argumentos, ls se limita a mostrar los archivos presentes en el directorio actual:

[willy]$ cd 
[willy]$ pwd 
/home/willy 
[willy]$ ls 
colores formas notas 

Puede especificarse una o más rutas en la línea de comandos. Si la ruta corresponde a un directorio, se muestran los archivos que contiene; si es un archivo, se muestra su nombre:

[willy]$ pwd 
/home/willy 
[willy]$ ls notas . colores /home/gerardo ~nicolas/novale  
ls: /home/nicolas/novale: No such file or directory 
notas  
 
.: 
colores formas notas 
 
colores: 
azul amarillo rojo 
 
/home/gerardo: 
archivo1 

Cuando la ruta no corresponde a ningún archivo o directorio, el comando devuelve un error.

Opción -l

La opción...

Directorios

1. mkdir

El comando mkdir (make directory) permite crear directorios:

[willy]$ ls -l 
total 12 
drwxr-xr-x  2 willy tec 4096 jun  1 10:42 colores 
drwxr-xr-x  2 willy tec 4096 jun  1 10:43 formas 
-rw-r--r--  1 willy tec   62 may 26 22:55 notas 
[willy]$ mkdir flores 
[willy]$ ls -l 
total 16 
drwxr-xr-x  2 willy tec 4096 jun  1 10:42 colores 
drwxr-xr-x  2 willy tec 4096 jun  1 11:30 flores 
drwxr-xr-x  2 willy tec 4096 jun  1 10:43 formas 
-rw-r--r--  1 willy tec   62 may 26 22:55 notas 

Se pueden indicar varios argumentos en la línea de comandos:

[willy]$ ls 
colores flores formas notas 
[willy]$ mkdir nombres flores/alegres 
[willy]$ ls . flores 
.: 
colores flores formas nombres notas 
 
flores: 
alegres 

Hay que agregar la opción -p (padres) para crear una serie de directorios anidados:

[willy]$ mkdir -p estaciones/invierno/enero 
[willy]$ ls -R 
.: 
colores flores formas nombres notas estaciones 
 
./colores: 
azul amarillo rojo 
 
./flores: 
alegres 
 
./flores/alegres: 
 
./formas: 
círculo triángulo 
 
./nombres: 
./estaciones: 
invierno 
 
./estaciones/invierno: 
enero 
 
./estaciones/invierno/enero:...

Archivos

1. touch

El comando touch cambia las fechas del último acceso y de la última modificación de un archivo existente:

[willy]$ ls -l notas 
-rw-r--r-- 1 willy tec 62 may 26 22:55 notas 
[willy]$ touch notas 
[willy]$ ls -l notas 
-rw-r--r-- 1 willy tec 62 jun 1 11:37 notas 

Diversas opciones, detalladas en la página del manual electrónico (véase capítulo Documentación, apartado Manual), permiten precisar el nuevo fechado del archivo.

Cuando se emplea este comando con un nombre de archivo inexistente como argumento, se crea un archivo con ese nombre que no contiene ningún dato:

[willy]$ ls -l 
total 12 
drwxr-xr-x  2 willy tec 4096 jun 1 10:42 colores 
drwxr-xr-x  2 willy tec 4096 jun 1 10:43 formas 
-rw-r--r--  1 willy tec   62 jun 1 11:37 notas 
[willy]$ touch nuevoarch 
[willy]$ ls -l 
total 12 
drwxr-xr-x  2 willy tec 4096 jun 1 10:42 colores 
drwxr-xr-x  2 willy tec 4096 jun 1 10:43 formas 
-rw-r--r--  1 willy tec   62 jun 1 11:37 notas 
-rw-r--r--  1 willy tec    0 jun 1 11:38 nuevoarch 

2. cp

La copia de archivos se efectúa con el programa cp; la sintaxis principal de este comando es:

cp [-R] <origen ...> <destino> 

Se puede copiar un archivo normal en un nuevo directorio o con un nuevo nombre, o ambas cosas a la vez; por ejemplo:

[willy]$ ls -R 
.: 
colores formas notas nuevoarch 
 
./colores: 
azul amarillo rojo 
 
./formas: 
círculo triángulo 
[willy]$ cp notas minota 
[willy]$ cp colores/amarillo formas  
[willy]$ cp formas/triángulo curva 
[willy]$ ls -R 
.: 
colores curva formas rombo notas nuevoarch 
 
./colores: 
azul amarillo...

Organización física de los archivos en Linux

Aunque esta etapa parezca precipitada para una aproximación de tipo "usuario" a Linux, el aprendizaje de la organización física de los sistemas de archivos es primordial. Permite una correcta comprensión de la noción de enlaces y una buena gestión de los derechos de acceso.

Un sistema de archivos físico puede separarse en dos partes distintas:

  • la tabla de inodos;

  • los bloques de datos.

Todo archivo está constituido por un inodo con la información relativa al archivo y un cierto número de bloques de datos con los datos del usuario almacenados en el archivo.

1. Inodos

Cada archivo se representa por una estructura llamada inodo (índex node). Estos inodos se agrupan en una tabla y se identifican por un número.

El inodo contiene toda la información sobre el archivo, salvo su nombre:

  • Tipo de archivo: - (normal), d (directorio), l (enlace simbólico), b (bloque), c (carácter), p (tubo), s (socket).

  • Modo o derechos de acceso al archivo.

  • Número de enlaces físicos (hard links): corresponde al número de referencias, es decir, al número de nombres para este mismo archivo.

  • UID o identificador del usuario propietario.

  • GID o identificador del grupo propietario.

  • Tamaño del archivo en número de bytes.

  • Fechas de la última consulta, modificación del contenido y modificación...

Administradores de archivos

Existen en Linux muchas herramientas que agrupan de forma más o menos ergonómica y amigable todas las funcionalidades implementadas por los comandos enunciados hasta ahora.

1. Midnight Commander

Midnight Commander se llama con el comando mc en la línea de comandos. Es un administrador de archivos completo en un entorno de texto con una interfaz de usuario de un producto similar existente en DOS.

Veamos un ejemplo de presentación:

images/05RIT01.png

La tecla [Tab] permite pasar de una mitad de la pantalla a la otra (izquierda-derecha), mientras que las teclas de función [F1] a [F10] invocan los comandos indicados en la parte inferior de la pantalla.

2. Dolphin, Nautilus

En la consola gráfica, los administradores de archivos más extendidos son Dolphin (antiguo Konqueror) y Nautilus.

La elección de la herramienta es subjetiva y depende generalmente de la distribución y el entorno de escritorio utilizados.

Una ventana de Dolphin:

images/8.png

Una vista posible de Nautilus:

images/9.png

Consultar archivos

1. cat

cat muestra en la pantalla el contenido de los archivos pasados como argumento en la línea de comandos:

[nicolas]$ cat /etc/motd  
Bienvenido a Linux 
Está conectado al equipo doe.reso.local 

2. more, less

El comando Unix more también permite la presentación del contenido de archivos de texto en pantalla. Sin embargo, su visualización se hace página por página; las teclas útiles con more son:

[Intro]

Desplaza el texto línea a línea.

[Espacio]

Desplaza el texto página por página.

[q]

Sale del programa.

Este ejemplo muestra el indicador presente en la parte inferior de la pantalla:

[nicolas]$ more /etc/services  
ssh             22/udp                  # SSH Remote Login Protocol 
telnet          23/tcp 
telnet          23/udp                  # 24 - private mail system 
smtp            25/tcp      mail 
smtp            25/udp      mail 
time            37/tcp      timserver ...

Ejercicios

Ejercicio 1

Descargue de Internet la imagen que quiera y muévala a un subdirectorio de /tmp que tenga su nombre.

Solución

Utilice un navegador web para descargar una imagen y grábela en la carpeta propuesta por defecto:

images/05-03.png

Podemos constatar que el archivo ha sido grabado en un subdirectorio Descargas de la carpeta personal del usuario.

Una vez creado el directorio de destino como exige el enunciado, bastará con emplear el comando mv adecuado para desplazar el archivo:

[javier]$ cd 
[javier]$ pwd 
/home/ javier 
[javier]$ ls Descargas 
indice.jpg 
[javier]$ mkdir /tmp/ javier 
[javier]$ mv Descargas/indice.jpg /tmp/ javier 
[javier]$ ls Descargas 
[javier]$ ls /tmp/ javier 
indice.jpg 

Ejercicio 2

Elimine el archivo y los subdirectorios creados en el ejercicio anterior.

Solución

No se puede eliminar directamente el subdirectorio creado en /tmp con el comando rmdir porque este no está vacio.

Por contrario, el comando rm con la opción -R ("recursivo") permite eliminarlo al igual que todos los archivos que contenga:

javier@Debian8:~$ rmdir /tmp/javier 
rmdir: fallo al borrar "/tmp/javier": El directorio no está vacío 
javier@Debian8:~$ rm -R /tmp/javier 
javier@Debian8:~$ ls /tmp/javier 
ls: no se puede acceder a /tmp/javier: No existe el fichero o el directorio 
javier@Debian8:~$