Gestión de Archivos y Directorios en Linux

CompTIABeginner
Practicar Ahora

Introducción

En esta práctica de laboratorio, aprenderás las habilidades fundamentales para gestionar archivos y directorios dentro de un entorno de línea de comandos de Linux. Obtendrás experiencia práctica creando y eliminando estructuras de directorios complejas utilizando mkdir y rm, así como copiando y moviendo archivos y directorios con cp y mv.

Además, esta práctica ofrece una exploración detallada del enlazado de archivos. Crearás tanto enlaces simbólicos (blandos) como duros utilizando el comando ln, analizarás el concepto subyacente de los inodes y observarás los comportamientos distintivos de cada tipo de enlace cuando se modifica el archivo de origen. Esto te proporcionará una comprensión más profunda de cómo el sistema de archivos de Linux organiza y referencia los datos.

Esta es una Práctica Guiada, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y ganar experiencia práctica. Los datos históricos muestran que esta es una práctica de nivel principiante con una tasa de finalización del 93%. Ha recibido una tasa de valoraciones positivas del 99% por parte de los alumnos.

Crear y Eliminar Estructuras de Directorios con mkdir, rmdir y rm

En este paso, aprenderás a crear y eliminar directorios. Organizar archivos en una estructura jerárquica de directorios es una tarea fundamental en Linux. Utilizaremos el comando mkdir para crear directorios, rmdir para eliminar directorios vacíos y rm para eliminar directorios y todo su contenido. Todos los comandos se ejecutarán desde tu directorio por defecto, ~/project.

Primero, vamos a crear un directorio sencillo. El comando mkdir significa "make directory" (crear directorio).

En tu terminal, ejecuta el siguiente comando para crear un directorio llamado cars:

mkdir cars

Para verificar que el directorio ha sido creado, puedes usar el comando ls -ld. La opción -l proporciona un formato de listado largo, y la opción -d lista la entrada del directorio en sí, no su contenido.

ls -ld cars

Deberías ver una salida similar a esta, confirmando la creación del directorio cars. La d al principio de la cadena de permisos indica que se trata de un directorio.

drwxr-xr-x 2 labex labex 4096 May 20 10:30 cars

Ahora, vamos a eliminar este directorio. El comando rmdir se utiliza para eliminar directorios vacíos.

rmdir cars

Verifica su eliminación ejecutando de nuevo el comando ls -ld.

ls -ld cars

En esta ocasión, recibirás un mensaje de error porque el directorio ya no existe. Esto confirma que rmdir se ejecutó correctamente.

ls: cannot access 'cars': No such file or directory

El comando rmdir solo funciona con directorios vacíos. ¿Qué sucede si tenemos una estructura de directorios anidados? Intentemos crear una estructura de directorios pastry/pies/cakes. Para crear los directorios padres según sea necesario, debemos usar la opción -p (parents) con mkdir.

Ejecuta el siguiente comando:

mkdir -p pastry/pies/cakes

Para ver toda la estructura de directorios que acabas de crear, utiliza el comando ls con las opciones -l (formato largo) y -R (recursivo).

ls -lR pastry

La salida mostrará el directorio pastry y sus subdirectorios, pies y cakes.

pastry:
total 4
drwxr-xr-x 3 labex labex 4096 May 20 10:35 pies

pastry/pies:
total 4
drwxr-xr-x 2 labex labex 4096 May 20 10:35 cakes

pastry/pies/cakes:
total 0

Ahora, intentemos eliminar el directorio pastry usando rmdir.

rmdir pastry

¿Por qué falló este comando? La terminal mostrará un mensaje de error:

rmdir: failed to remove 'pastry': Directory not empty

Esto se debe a que rmdir solo puede borrar directorios vacíos, y pastry contiene el subdirectorio pies.

Para eliminar un directorio y todo su contenido (incluyendo subdirectorios y archivos), debes usar el comando rm con la opción -r (recursivo). Ten mucho cuidado con este comando, ya que puede eliminar datos de forma permanente.

rm -r pastry

Este comando no producirá ninguna salida si tiene éxito. Puedes verificar que el directorio pastry ha sido eliminado por completo ejecutando ls -ld pastry de nuevo, lo que debería resultar en un error de "No such file or directory".

ls -ld pastry

Crear Archivos y Enlaces Simbólicos con vi y ln -s

En este paso, crearás un archivo utilizando el editor de texto vi y luego crearás un enlace simbólico hacia él. Un enlace simbólico, también conocido como symlink o enlace blando, es un tipo especial de archivo que apunta a otro archivo o directorio. Es similar a un acceso directo en otros sistemas operativos.

Primero, vamos a crear un archivo de texto simple llamado filea usando vi. vi es un editor de texto potente orientado a pantalla. Tiene dos modos principales: modo Comando y modo Inserción. Comienzas en el modo Comando, donde las pulsaciones de teclas se interpretan como comandos. Para escribir texto, debes entrar en el modo Inserción.

  1. En tu terminal, que debería estar en la ruta ~/project, inicia vi para crear el archivo filea:
vi filea
  1. Tu terminal mostrará ahora la interfaz del editor vi. Para empezar a escribir, necesitas cambiar al modo Inserción. Presiona la tecla i una vez. Es posible que veas -- INSERT -- en la parte inferior de la pantalla.
  2. Ahora, escribe el siguiente texto:
This is filea.
  1. Para guardar el archivo y salir de vi, primero debes volver al modo Comando presionando la tecla Esc. Luego, escribe ZZ (mantén presionada la tecla Shift y presiona Z dos veces). Este comando guarda el archivo y cierra el editor.

Ahora que estás de vuelta en el símbolo del sistema, verifiquemos que el archivo se creó y contiene el contenido correcto.

Primero, lista el archivo:

ls filea

La salida debería ser simplemente el nombre del archivo:

filea

A continuación, muestra su contenido utilizando el comando cat:

cat filea

La salida debería coincidir con el texto que introdujiste:

This is filea.

Ahora, vamos a crear un enlace simbólico. Crearemos un enlace llamado fileb que apunte a nuestro archivo original, filea. El comando es ln -s <archivo_origen> <enlace_destino>.

ln -s filea fileb

Para comprobar los resultados, utiliza el comando ls -il. La opción -i muestra el número de inode, que es un identificador único para un archivo o directorio en el sistema de archivos.

ls -il file[ab]

Examina la salida cuidadosamente.

131075 -rw-r--r-- 1 labex labex 14 May 20 10:40 filea
131076 lrwxrwxrwx 1 labex labex  5 May 20 10:41 fileb -> filea

Observa algunos puntos clave:

  • Tipo de Archivo: La cadena de permisos para filea comienza con un -, lo que indica un archivo regular. La cadena para fileb comienza con una l, lo que indica un enlace simbólico.
  • Puntero del Enlace: La salida muestra claramente fileb -> filea.
  • Números de Inode: Mira la primera columna. Los números de inode para filea y fileb son diferentes. ¿Por qué? Porque un enlace simbólico es un archivo independiente que simplemente almacena la ruta al archivo de destino. No es el archivo en sí, por lo que obtiene su propio inode único.

Finalmente, veamos si podemos leer el contenido a través del enlace.

cat fileb

La salida es el contenido de filea:

This is filea.

Este es el comportamiento esperado. Cuando realizas una operación como cat en un enlace simbólico, el sistema sigue automáticamente el enlace hasta el archivo de origen y realiza la operación sobre él.

Crear y Analizar Enlaces Duros con ln e Inodes

En este paso, crearás un enlace duro y aprenderás en qué se diferencia del enlace simbólico que creaste anteriormente. A diferencia de un enlace simbólico, que es un puntero a un nombre de archivo, un enlace duro es otro nombre para el archivo en sí. Ambos nombres apuntan directamente a los mismos datos en el disco, los cuales se identifican mediante un número único llamado inode.

Continuaremos trabajando con los archivos filea y fileb del paso anterior en el directorio ~/project.

Primero, vamos a crear un enlace duro llamado filec que apunte al mismo inode que filea. Para hacer esto, usamos el comando ln sin la opción -s.

ln filea filec

Ahora, veamos el contenido de los tres archivos: el original filea, el enlace simbólico fileb y el nuevo enlace duro filec.

cat filea
cat fileb
cat filec

Verás el mismo contenido impreso tres veces, lo cual es de esperar.

This is filea.
This is filea.
This is filea.

La verdadera diferencia se hace evidente cuando inspeccionamos las propiedades de los archivos. Utiliza de nuevo el comando ls -il para ver los números de inode y otros detalles de los tres archivos.

ls -il file[a-c]

La salida se verá algo parecido a esto. Presta mucha atención a la primera y segunda columna.

131075 -rw-r--r-- 2 labex labex 14 May 20 10:40 filea
131076 lrwxrwxrwx 1 labex labex  5 May 20 10:41 fileb -> filea
131075 -rw-r--r-- 2 labex labex 14 May 20 10:40 filec

Analicemos esta salida:

  • Números de Inode (Columna 1): Observa que filea y filec tienen exactamente el mismo número de inode (por ejemplo, 131075). Esta es la característica definitoria de un enlace duro. No son archivos separados; son dos nombres diferentes que apuntan a los mismos datos de archivo en el disco. El enlace simbólico fileb tiene su propio inode único.
  • Contador de Enlaces (Columna 2): Mira el número para filea y filec. Ahora es 2. Este número es el contador de enlaces duros (hard link count), y rastrea cuántos nombres (enlaces duros) apuntan a este único inode. Cuando creaste filec, el contador de enlaces para este inode aumentó de 1 a 2.
  • Tipo de Archivo (Columna 1 de permisos): Observa que filec aparece como un archivo regular (sus permisos comienzan con -), al igual que filea. No es un tipo de enlace especial como fileb (que comienza con l).

Observar el Comportamiento de los Enlaces tras Modificar el Archivo de Origen

En este paso, observarás las diferencias críticas de comportamiento entre los enlaces simbólicos y los enlaces duros cuando el archivo de origen original se elimina y luego se vuelve a crear. Esto consolidará tu comprensión de cómo funciona cada tipo de enlace. Continuaremos usando filea, fileb y filec en el directorio ~/project.

Primero, eliminemos el archivo original, filea.

rm filea

Ahora, examinemos el estado de nuestros tres archivos. Utiliza el comando ls -l. Probablemente verás un error para filea porque ya no existe, lo cual es normal.

ls -l file[a-c]

La salida será muy reveladora:

ls: cannot access 'filea': No such file or directory
lrwxrwxrwx 1 labex labex 5 May 20 10:41 fileb -> filea
-rw-r--r-- 1 labex labex 14 May 20 10:40 filec
  • Enlace Simbólico fileb: El enlace está ahora "roto". Todavía apunta al nombre filea, pero ese nombre ya no corresponde a un archivo existente. En muchas terminales, el nombre de archivo fileb se coloreará en rojo para indicar este estado roto. Si intentas hacer cat fileb, obtendrás un error.
  • Enlace Duro filec: El archivo filec no se ve afectado en absoluto. Su contador de enlaces (la segunda columna) simplemente ha disminuido de 2 a 1, pero el archivo y sus datos siguen intactos. Esto se debe a que eliminar filea solo eliminó uno de los nombres que apuntaban al inode; los datos no se borran hasta que el contador de enlaces llega a cero. Puedes comprobarlo viendo su contenido:
cat filec

La salida sigue siendo el contenido original:

This is filea.

Ahora, volvamos a crear filea, pero con un contenido diferente. Usa vi para crear un nuevo archivo llamado filea.

  1. Inicia vi: vi filea
  2. Presiona i para entrar en el modo Inserción.
  3. Escribe el nuevo contenido: This is the new filea.
  4. Presiona Esc para volver al modo Comando, luego escribe ZZ para guardar y salir.

Con el nuevo filea en su lugar, inspeccionemos los tres archivos de nuevo con ls -il.

ls -il file[a-c]

La salida mostrará una situación nueva:

131080 -rw-r--r-- 1 labex labex 20 May 20 11:05 filea
131076 lrwxrwxrwx 1 labex labex  5 May 20 10:41 fileb -> filea
131075 -rw-r--r-- 1 labex labex 14 May 20 10:40 filec
  • Nuevo filea: Existe un nuevo archivo filea, pero observa que su número de inode (por ejemplo, 131080) es diferente al inode de filec (por ejemplo, 131075). Este es un archivo completamente nuevo que casualmente tiene el mismo nombre que el antiguo.
  • Enlace Simbólico fileb: ¡El enlace ya no está roto! Apunta automáticamente al nuevo archivo llamado filea.
  • Enlace Duro filec: filec no ha cambiado. Sigue apuntando al inode original y contiene los datos originales.

Finalmente, comprobemos el contenido de los tres archivos para ver el resultado.

cat filea
cat fileb
cat filec

La salida demuestra claramente la diferencia:

This is the new filea.
This is the new filea.
This is filea.

El enlace simbólico fileb siguió el nombre hasta el nuevo archivo, mientras que el enlace duro filec mantuvo su conexión con los datos originales.

Copiar y Mover Archivos con cp y mv

En este paso final, aprenderás a usar los comandos cp (copiar) y mv (mover), que son esenciales para la gestión de archivos. El comando cp crea un duplicado de un archivo o directorio, mientras que el comando mv renombra un archivo/directorio o lo mueve a una ubicación diferente.

Empecemos por limpiar los archivos de los pasos anteriores para tener un espacio de trabajo despejado. Todos los comandos se ejecutarán desde tu directorio ~/project.

rm filea fileb filec

Copiar Archivos con cp

El comando cp crea una copia nueva e independiente de un archivo. El nuevo archivo tendrá su propio inode.

  1. Primero, crea un archivo sencillo para trabajar con él usando el comando touch. touch crea un archivo vacío si no existe.
touch source_file
  1. Ahora, veamos sus propiedades, prestando atención al número de inode (la primera columna).
ls -i source_file

La salida mostrará un número de inode único para este archivo.

131081 source_file
  1. A continuación, copia source_file a un nuevo archivo llamado copied_file.
cp source_file copied_file
  1. Ahora, lista las propiedades de ambos archivos.
ls -i source_file copied_file

Verás que son dos archivos separados con números de inode diferentes.

131082 copied_file
131081 source_file

Mover y Renombrar Archivos con mv

El comando mv es versátil. Si el destino es un nuevo nombre de archivo en el mismo directorio, renombra el archivo. Si el destino es un directorio, mueve el archivo a su interior. Al renombrar o mover un archivo dentro del mismo sistema de archivos, el número de inode no cambia; el comando simplemente actualiza el nombre del archivo o el puntero de ubicación.

  1. Vamos a renombrar source_file a renamed_file.
mv source_file renamed_file
  1. Comprueba el inode del archivo recién nombrado.
ls -i renamed_file

Notarás que el número de inode (por ejemplo, 131081) es el mismo que el del source_file original. El archivo en sí no cambió, solo su nombre.

131081 renamed_file
  1. Ahora, vamos a mover este archivo. Primero, crea un directorio de destino.
mkdir move_destination
  1. Mueve renamed_file al directorio move_destination.
mv renamed_file move_destination/
  1. Verifica que el archivo esté ahora dentro del directorio y comprueba su inode de nuevo.
ls -i move_destination/renamed_file

El número de inode sigue siendo el mismo, lo que confirma que el archivo fue movido, no copiado.

131081 move_destination/renamed_file

Manejo de Sobrescrituras

Por defecto, muchos sistemas tienen un alias de cp a cp -i para evitar que sobrescribas accidentalmente un archivo existente. La -i significa "interactivo".

  1. Intentemos copiar copied_file sobre el archivo que está dentro de nuestro directorio move_destination.
cp -i copied_file move_destination/renamed_file
  1. Debido al alias -i, se te pedirá confirmación.
cp: overwrite 'move_destination/renamed_file'?

Escribe y y presiona Enter para confirmar la sobrescritura. Si quisieras cancelar, escribirías n.

Resumen

En esta práctica de laboratorio, has aprendido los comandos fundamentales para gestionar archivos y directorios en un entorno Linux. Practicaste la creación de estructuras de directorios utilizando mkdir, incluyendo la opción -p para directorios padres, y su eliminación con rmdir para directorios vacíos y rm para los que no lo están. También creaste archivos con el editor vi y te introdujiste en el concepto de enlazado de archivos.

El núcleo de la práctica se centró en la creación y el análisis de los dos tipos de enlaces: enlaces simbólicos (blandos) con ln -s y enlaces duros con ln. Observaste sus diferencias clave examinando los inodes y notando cómo se comporta cada enlace cuando el archivo de origen se modifica o se elimina. Finalmente, utilizaste el comando cp para crear copias independientes de archivos y el comando mv para mover o renombrar archivos y directorios, completando una visión general exhaustiva de las operaciones esenciales de gestión de archivos.