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.
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.
- En tu terminal, que debería estar en la ruta
~/project, iniciavipara crear el archivofilea:
vi filea
- Tu terminal mostrará ahora la interfaz del editor
vi. Para empezar a escribir, necesitas cambiar al modo Inserción. Presiona la teclaiuna vez. Es posible que veas-- INSERT --en la parte inferior de la pantalla. - Ahora, escribe el siguiente texto:
This is filea.
- Para guardar el archivo y salir de
vi, primero debes volver al modo Comando presionando la teclaEsc. Luego, escribeZZ(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
fileacomienza con un-, lo que indica un archivo regular. La cadena parafilebcomienza con unal, 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
fileayfilebson 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
fileayfilectienen 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ólicofilebtiene su propio inode único. - Contador de Enlaces (Columna 2): Mira el número para
fileayfilec. Ahora es2. 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 creastefilec, el contador de enlaces para este inode aumentó de 1 a 2. - Tipo de Archivo (Columna 1 de permisos): Observa que
filecaparece como un archivo regular (sus permisos comienzan con-), al igual quefilea. No es un tipo de enlace especial comofileb(que comienza conl).
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 nombrefilea, pero ese nombre ya no corresponde a un archivo existente. En muchas terminales, el nombre de archivofilebse coloreará en rojo para indicar este estado roto. Si intentas hacercat fileb, obtendrás un error. - Enlace Duro
filec: El archivofilecno 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 eliminarfileasolo 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.
- Inicia
vi:vi filea - Presiona
ipara entrar en el modo Inserción. - Escribe el nuevo contenido:
This is the new filea. - Presiona
Escpara volver al modo Comando, luego escribeZZpara 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 archivofilea, pero observa que su número de inode (por ejemplo,131080) es diferente al inode defilec(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 llamadofilea. - Enlace Duro
filec:filecno 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.
- Primero, crea un archivo sencillo para trabajar con él usando el comando
touch.touchcrea un archivo vacío si no existe.
touch source_file
- 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
- A continuación, copia
source_filea un nuevo archivo llamadocopied_file.
cp source_file copied_file
- 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.
- Vamos a renombrar
source_filearenamed_file.
mv source_file renamed_file
- 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
- Ahora, vamos a mover este archivo. Primero, crea un directorio de destino.
mkdir move_destination
- Mueve
renamed_fileal directoriomove_destination.
mv renamed_file move_destination/
- 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".
- Intentemos copiar
copied_filesobre el archivo que está dentro de nuestro directoriomove_destination.
cp -i copied_file move_destination/renamed_file
- 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.



