Introducción
Linux organiza los archivos en un único árbol de directorios que comienza en /, el directorio raíz. Cada archivo y directorio tiene una ruta que describe su ubicación dentro de ese árbol. Aprender a leer y utilizar rutas facilita prácticamente cualquier tarea posterior en Linux.
En este laboratorio, creará un pequeño espacio de trabajo mientras aprende las operaciones habituales del trabajo diario en el terminal. Navegará por directorios, creará y editará archivos, copiará y moverá datos, buscará archivos, inspeccionará metadatos e inodes, experimentará con enlaces físicos y simbólicos, y comparará archivos y árboles de directorios con diff.
Explore el árbol de directorios de Linux
En este paso, identificará su ubicación actual, inspeccionará directorios importantes del nivel superior y creará un espacio de trabajo específico para el resto del laboratorio.
El comando pwd significa «print working directory» (mostrar el directorio de trabajo). Ejecútelo primero para saber dónde se inició el terminal:
pwd
El resultado debería ser /home/labex/project. Una ruta absoluta comienza con / y describe una ubicación desde la raíz del sistema de archivos.
Muestre el nivel superior del sistema de archivos:
ls /
Verá directorios estándar como etc, home, tmp, usr y var. Sus usos habituales son:
/etcalmacena la configuración de todo el sistema./homealmacena los directorios personales de los usuarios comunes./tmpalmacena datos temporales./usrcontiene muchos programas instalados y recursos compartidos./varcontiene datos que cambian con frecuencia, como registros y cachés.
La opción -d indica a ls que describa los directorios especificados en lugar de mostrar su contenido. La opción -l selecciona el formato largo:
ls -ld /etc /home /tmp /usr /var
El primer carácter de cada línea es d, lo que indica que el objeto es un directorio. Las columnas restantes contienen los permisos, el propietario, el tamaño, la fecha y hora, y el nombre.
Cree un espacio de trabajo para este laboratorio. La opción -p permite que mkdir cree los directorios padre que falten y evita un error si el directorio ya existe:
mkdir -p /home/labex/project/file-ops-lab
Entre en él y confirme su nueva ubicación:
cd /home/labex/project/file-ops-lab
pwd
El resultado final debería ser /home/labex/project/file-ops-lab.
Navegue con rutas absolutas y relativas
En este paso, creará un árbol de directorios anidados y se moverá por él utilizando rutas absolutas, rutas relativas y atajos de navegación.
Asegúrese de comenzar en el espacio de trabajo del laboratorio:
cd /home/labex/project/file-ops-lab
Cree tres directorios anidados con un solo comando:
mkdir -p navigation/alpha/beta
Aquí, navigation/alpha/beta es una ruta relativa porque no comienza con /. El intérprete de comandos la resuelve a partir del directorio actual.
Utilice una ruta absoluta para entrar en el directorio más profundo:
cd /home/labex/project/file-ops-lab/navigation/alpha/beta
pwd
La ruta especial .. representa el directorio padre. Vaya de beta a alpha:
cd ..
pwd
El resultado debería terminar en /navigation/alpha. El comando cd - vuelve al directorio de trabajo anterior:
cd -
pwd
Debería estar de nuevo en beta. Por último, ~ representa su directorio personal. Úselo al principio de una ruta para volver al espacio de trabajo del laboratorio:
cd ~/project/file-ops-lab
pwd
Las rutas absolutas funcionan desde cualquier ubicación. Las rutas relativas son más cortas cuando ya conoce su ubicación actual.
Cree directorios y escriba archivos
En este paso, creará directorios y archivos. Después aprenderá la diferencia entre sobrescribir y añadir contenido mediante la redirección del shell.
Comience en el espacio de trabajo del laboratorio y cree dos directorios a la vez:
cd /home/labex/project/file-ops-lab
mkdir documents archive
El comando touch crea un archivo vacío cuando el archivo especificado no existe:
touch documents/empty.txt
Inspeccione el archivo vacío con el formato de listado largo:
ls -l documents/empty.txt
Su tamaño debería ser de 0 bytes. A continuación, > redirige la salida de un comando a un archivo. Crea el archivo o reemplaza su contenido anterior:
echo "Linux file practice" > documents/notes.txt
El operador >> añade la salida sin eliminar el contenido existente:
echo "Paths identify each filesystem object" >> documents/notes.txt
Muestre el archivo completo con cat:
cat documents/notes.txt
Debería ver dos líneas en su orden original. Utilice wc -l para contarlas; -l indica a wc que cuente líneas:
wc -l documents/notes.txt
El primer campo debería ser 2.
Copie, mueva, cambie el nombre y elimine archivos
En este paso, practicará las cuatro formas habituales en que cambian los objetos del sistema de archivos: copiar, mover, cambiar el nombre y eliminar.
Vuelva al espacio de trabajo del laboratorio:
cd /home/labex/project/file-ops-lab
El comando cp copia un origen en un destino. Copie notes.txt en el archivo con un nombre nuevo:
cp documents/notes.txt archive/notes-backup.txt
Confirme que tanto el archivo original como la copia existen:
ls -l documents/notes.txt archive/notes-backup.txt
Cree un archivo temporal y utilice mv para moverlo y cambiarle el nombre en una sola operación:
echo "draft" > documents/draft.txt
mv documents/draft.txt archive/final-draft.txt
La ruta antigua ya no debería existir, mientras que la nueva sí:
ls -l archive/final-draft.txt
Para copiar un directorio y todo su contenido, utilice la opción recursiva -r:
cp -r documents archive/documents-copy
find archive/documents-copy -maxdepth 1 -type f
El comando rm elimina archivos permanentemente; el terminal no tiene una papelera de reciclaje. Cree y elimine un archivo desechable:
touch disposable.tmp
rm disposable.tmp
Muestre el directorio actual para confirmar que la ruta ha desaparecido:
ls
disposable.tmp no debería aparecer. Compruebe siempre cuidadosamente una ruta antes de utilizar rm.
Vea, actualice y busque archivos
En este paso, creará un archivo con varias líneas, inspeccionará distintas partes, lo actualizará mediante una redirección de adición y lo buscará por nombre.
Vuelva al espacio de trabajo del laboratorio. Un documento aquí-document envía varias líneas a un comando hasta que el shell llega a una línea que contiene únicamente el marcador elegido, en este caso EOF:
cd /home/labex/project/file-ops-lab
cat > documents/journal.txt <<'EOF'
First entry: created a workspace
Second entry: practiced paths
Third entry: copied files
EOF
Las comillas de 'EOF' impiden que el shell expanda los caracteres especiales dentro del documento. Muestre el archivo con números de línea:
nl -ba documents/journal.txt
La opción -ba numera todas las líneas. Utilice head -n 2 para mostrar las dos primeras líneas y tail -n 1 para mostrar la última:
head -n 2 documents/journal.txt
tail -n 1 documents/journal.txt
Añada una cuarta entrada. Antes utilizó >>; este operador agrega la salida al final sin reemplazar las tres líneas existentes:
echo "Fourth entry: reviewed the results" >> documents/journal.txt
Compruebe el resultado:
tail -n 2 documents/journal.txt
Ahora busque archivos de texto en el espacio de trabajo. En find, . representa el directorio actual, -type f limita los resultados a archivos normales y -name busca un patrón de nombre de archivo. Las comillas impiden que el shell expanda *.txt antes de que find lo reciba:
find . -type f -name "*.txt"
La salida debería incluir ./documents/journal.txt junto con los demás archivos de texto que creó.
Inspeccione tipos de archivo, metadatos e inodes
En este paso, irá más allá del nombre de un archivo e inspeccionará la información que Linux almacena sobre un objeto del sistema de archivos.
Comience en el espacio de trabajo del laboratorio y pida a file que identifique dos objetos diferentes:
cd /home/labex/project/file-ops-lab
file documents/journal.txt /bin/ls
El diario se identifica como texto, mientras que /bin/ls se identifica como un programa ejecutable. Linux no se basa únicamente en las extensiones de los nombres para identificar los datos.
El comando stat muestra metadatos como el tamaño, los permisos, el propietario, las marcas de tiempo y el número de inode:
stat documents/journal.txt
Un inode es el registro del sistema de archivos que almacena los metadatos de un archivo y apunta a sus datos. Un nombre de archivo es una entrada de directorio que hace referencia a un inode. Utilice un formato personalizado de stat para mostrar campos estables:
stat -c 'name=%n type=%F size=%s inode=%i links=%h' documents/journal.txt
El campo %i es el número de inode, mientras que %h es el número de enlaces físicos que hacen referencia a ese inode.
La opción -i de ls también muestra los números de inode. Cree un archivo para practicar con metadatos e inspecciónelo:
echo "inode practice" > metadata-sample.txt
ls -li metadata-sample.txt
El número al principio de la línea es el número de inode. Puede variar entre entornos, así que concéntrese en lo que representa el campo en lugar de memorizar su valor.
Trabaje con enlaces físicos y enlaces simbólicos
En este paso, creará ambos tipos de enlaces de Linux y observará cómo se comporta cada uno cuando se elimina el nombre de archivo original.
Cree un directorio y un archivo de origen para el experimento:
cd /home/labex/project/file-ops-lab
mkdir links
echo "shared inode data" > links/source.txt
El comando ln sin opciones crea un enlace físico. Ambos nombres hacen referencia al mismo inode y a los mismos datos del archivo:
ln links/source.txt links/hard-link.txt
La opción -s crea un enlace simbólico, también llamado symlink. Un enlace simbólico almacena la ruta hacia otro archivo:
ln -s source.txt links/symbolic-link.txt
Compare los números de inode y la información de los enlaces:
ls -li links
source.txt y hard-link.txt deberían tener el mismo número de inode. El enlace simbólico tiene su propio inode y muestra -> source.txt.
Utilice readlink para mostrar la ruta almacenada dentro del enlace simbólico:
readlink links/symbolic-link.txt
Elimine el nombre de archivo original:
rm links/source.txt
El enlace físico todavía permite acceder al inode y a sus datos:
cat links/hard-link.txt
Ahora el enlace simbólico apunta a un nombre que ya no existe. Intente leerlo:
cat links/symbolic-link.txt
Se espera el error No such file or directory, que proporciona una evidencia útil: el objeto del enlace permanece, pero la ruta de destino almacenada está rota. Este experimento muestra por qué eliminar un nombre de enlace físico no elimina los datos mientras exista otro enlace físico, mientras que un enlace simbólico depende de la ruta de destino que almacena.
Compare archivos y directorios con Diff
En este paso, utilizará diff para localizar diferencias y, después, sincronizará dos árboles de directorios pequeños.
Cree dos directorios de versiones:
cd /home/labex/project/file-ops-lab
mkdir -p comparison/version-a comparison/version-b
Cree archivos de configuración que difieran en una línea:
printf 'mode=production\nport=8080\n' > comparison/version-a/app.conf
printf 'mode=production\nport=9090\n' > comparison/version-b/app.conf
La opción -u solicita a diff una vista unificada con contexto alrededor de cada cambio:
diff -u comparison/version-a/app.conf comparison/version-b/app.conf
diff marca con - las líneas del primer archivo y con + las líneas del segundo. Su estado de salida distinto de cero significa que los archivos son diferentes; esto es lo esperado.
Haga que el segundo archivo coincida con el primero y utilice después -q para realizar una comprobación silenciosa de igualdad:
cp comparison/version-a/app.conf comparison/version-b/app.conf
diff -q comparison/version-a/app.conf comparison/version-b/app.conf
La ausencia de salida significa que los archivos coinciden. Ahora añada un archivo únicamente a uno de los directorios:
echo "release notes" > comparison/version-a/README.txt
La opción -r compara recursivamente los árboles de directorios:
diff -r comparison/version-a comparison/version-b
La salida informa de que README.txt solo existe en version-a. Cópielo y vuelva a comparar:
cp comparison/version-a/README.txt comparison/version-b/README.txt
diff -r comparison/version-a comparison/version-b
El comando final no debería producir ninguna salida. Esto demuestra que ambos árboles de directorios contienen ahora el mismo contenido de archivos.
Resumen
Ha practicado las operaciones básicas con archivos y directorios que se utilizan en el trabajo con el terminal de Linux. Ha navegado mediante rutas absolutas y relativas, ha creado y editado archivos, ha copiado y movido datos, ha eliminado de forma segura un archivo desechable y ha buscado archivos por nombre.
También ha inspeccionado tipos de archivo y metadatos, ha aprendido cómo se relacionan los nombres de archivo con los inodes, ha comparado enlaces físicos con enlaces simbólicos y ha utilizado diff para comparar archivos individuales y árboles de directorios completos. Estos conceptos le preparan para razonar sobre los archivos de Linux en lugar de tratar los comandos como recetas aisladas.



