LPIC-1 Tema 103.3: realizar una gestión básica de los ficheros y directorios
El tema 103.3 de las certificaciones LPIC-1 está orientado a evaluar los conocimientos del aspirante a administrador de sistemas GNU/Linux sobre la gestión básica de archivos. Es decir, para evaluar si el sysadmin tiene las competencias para poder usar los comandos que operan sobre ficheros y directorios (copiar, renombrar, eliminar, crear, localizar, empaquetar, etc.). Un tema bastante sencillo, pero que resulta vital para construir los cimientos del conocimiento para una buena administración.
Las operaciones tratadas se pueden hacer de forma individual u operar sobre conjuntos de ficheros o directorios. Además, se usarán algunos comodines simples y avanzados de ciertos comandos. Dicho esto, vamos a pasar a ver los ejemplos prácticos con las diferentes herramientas que debes dominar…
ÍNDICE:
Herramientas de gestión básica de archivos
cd y pwd
Con cd puedes dirigirte a un directorio concreto, mientras que con pwd puedes obtener el nombre del directorio donde te encuentras dentro de la jerarquía de directorios del sistema. Por ejemplo:
#Ir a /etc/gdb cd /etc/gdb #Ir a tu directorio personal (varias formas) cd /home/isaac cd ~/ cd $HOME #Retroceder al nivel superior (directorio del que cuelga el directorio donde te encuentras ahora) cd .. #Retroceder dos niveles cd ../.. #Conseguir el nombre del directorio actual pwd
ls
La herramienta ls sirve para listar el contenido de un directorio. Tiene diferentes opciones para poder mostrar más o menos información o para alterar la forma en la que se muestra el contenido por stdout:
#Listar el contenido del directorio actual ls #Listar el contenido de un directorio específico ls /etc #Listar todo el contenido (-a), incluido los ocultos y mostrarlo en formato largo (-l) del directorio actual o de otro diferente ls -la ls -la /home #Muestra info de los inodes del directorio actual ls -i #Para mostrar info del UID y GID de los archivos listados ls -n #Más opciones e información man ls
cp y mv
No es lo mismo copiar que mover. Cuando copias un archivo, lo que estás haciendo es generar una copia de ese archivo en otra ruta direcente. Cuando mueves, el archivo pasa de su origen a un destino, pero no se genera copia, al final de la operación solo estará en un lugar. Además, si usas estos comandos y no cambias a otra ruta, sino que operas sobre el mismo directorio, te pueden servir para renombrar un archivo.
#Genera una copia de nombre en otra ruta cp nombre /home/isaac/copias #Renombra nombre a nombre1 cp nombre nombre1 #Mueve nombre a otra ruta mv nombre /home/isaac #Renombra nombre a nombre1 mv nombre nombre1 #En ambos casos, puedes usar los paths absolutos también mv /home/isaac/nombre /home/isaac/Escritorio cp /home/isaac/nombre /home/isaac/Escritorio
touch y mkdir
Con las herramientas touch y mkdir puedes crear ficheros y directorios vacíos respectivamente. Realmente touch lo que hace es cambiar la marca de tiempo (timestamp) de un fichero existente, pero también permite crearlos si no existen. Algunos ejemplos son:
#Crear varios archivos con diversos nombres, de uno en uno o de forma simultánea touch nombre.txt touch prueba touch prueba nombre.txt ejemplo.c #Cambiar timestamp de uno ya existente, sin crearlo touch -c nombre.txt #Cambiar el tiempo de acceso (a) y de modificación (m) de varios archivos con extensión .txt touch -am *.txt #Crear ficheros con nombres compuestos por letras mayúsculas y números del 1 al 10 touch {A..Z}{1..10}.txt #Usar como referencia un archivo para que otro tenga su misma timestamp touch referncia.txt nombre.txt #Especificar el tiempo que quieras con formato [[CC]YY]MMDDhhmm[.ss]], siendo CC el siglo, YY el año, MM el mes, DD el día, hh la hora, mm minutos y ss segundos. touch -c -t 1603051015 nombre.txt #Crear directorios con modo verbose para que muestre información del proceso o para que no lo haga mkdir -v directorio1 directorio2 directorio3 mkdir directorio1 directorio2 directorio3 #Para crear varios niveles de directorios a la vez. En este caso crea uno y dentro dos. Dentro de dos crea tres a su vez mkdir -p /uno/dos/tres #Si quieres evitar que los nuevos directorios tomen el valor de la máscara de modos por defecto, puedes especificar flags para el nuevo directorio. En este caso le da permiso de lectura, escritura y ejecución mkdir -m a=rwx prueba #También puedes usar el sistema octal mkdir -m 777 prueba
rm y rmdirr
Sivern para eliminar ficheros y directorios respectivamente. Aunque rm también permite eliminar directorios y su contenido con la opción -r (recursivo). rmdir elimina directorios si éstos están vacíos. Ejemplos:
#Eliminar un fichero rm nombre rm /home/isaac/prueba #Eliminar un directorio rm -r prueba rmdir prueba #Si lo prefieres, puedes eliminar varios a la vez rm nombre1 nombre2 nombre3 rmdir /home/prueba1 /home/prueba2 #Elimina B si está vacío y después eliminará A si está vacío. Los siguientes comandos son equivalentes rmdir A/B A rmdir -p A/B
tar, cpio y dd
La herramienta tar y cpio, dd y dump, restore, han sido muy populares en el mundo Unix para empaquetar, especialmente para crear backups de un sistema. En el caso de tar, aún sigue siendo muy popular para generar un tipo de empaquetado comprimido conocido como tarball. Pero entre ellas existen algunas diferencias clave.
- tar permite agrupar archivos y directorios en un solo fichero, conservando sus permisos. Además, permite agregar opciones de compresión.
#Empaquetar todos los archivos del directorio actual en un solo paquete y comprimir con xz (ambos comandos son equivalentes) tar -cpvf paquete.tar * | xz -z > paquete.tar.xz tar -cpvJf paquete.tar.xz * #Empaqueta todos los archivos del directorio actual menos los .txt tar -cpvJf paquete.tar.xz ./* --exclude=*.txt #Desempaquetar un paquete en el directorio actual tar -xpvJf paquete.tar.xz #Especificar una ruta en la que quieres desempaquetar tar -xpvJf paquete.tar.xz -C /home/isaac *NOTA: en vez de la J puedes sustituirlo por otras opciones para trabajar con otros algoritmos de compresión, como -z para Gzip, -j para bzip2, --lzma para LZMA, etc.
- cpio fue creado en un inicio para hacer copias de seguridad en cintas magnéticas. En la actualidad sigue siendo útil para copiar estructuras enteras de archivos de un medio a otro.
#Copia de seguridad de todos mi directorio personal que se almacenará en /tmp/copia comprimida find /home/isaac/ | cpio -o | gzip /tmp/backup.cpio.gz #Extraer el contenido del .cpio cpio -i < /home/prueba.cpio #Extraer solo un fichero específico que se encuentre dentro del .cpio cpio -i nombre_fichero_específico < ejemplo.cpio #Copiar el árbol de directorios del directorio actual a otro find . -print | cpio -pvd /directorio/destino
- dd sirve para crear copias exactas de una partición completa o particiones en otro medio de almacenamiento, aunque es mucho más útil que todo eso.
#Clonar disco duro sda en sdc usando bloques de 1MB dd if=/dev/sda of=/dev/sdc bs=1M #Si estás intentando recuperar un disco duro y solo quieres copiar los sectores que se pueden leer dd if=/dev/sda of=/dev/sdc bs=1M conv=noerror,sync #Crear una imagen ISO de un medio óptico (también pueden ser imágenes .bin, etc.) dd if=/dev/cdrom of /home/isaac/imagen.iso #Eliminar el contenido de una partición llenándola de ceros dd if=/dev/zero of=/dev/sda4 #Eliminar el contenido de forma segura (7 veces reescribe el disco duro con caracteres aleatorios) for n in `seq 7`; do dd if=/dev/urandom of=/dev/sda bs=8b conv=notrunc; done #Crear un swapfile de un tamaño determinado que resulta de multiplicar bs por count, en este caso 1GB dd if=/dev/zero of=/home/isaac/swapfile bs=1024 count=1024
file
Es un comando muy práctico que te indica el tipo de archivo con el que estás tratando. Ejemplos:
#Comprobar el tipo de archivo que son estos file /home/isaac/hola.c file /usr/bin/zrun file prueba.pdf #Muestra los tipos de todos los que encuentra dentro del directorio especificado file /home/*
Compresión y descompresión
Para comprimir y descomprimir archivos, puedes trabajar con las herramientas gzip, gunzip, bzip2, bunzip2, xz, unxz, etc. Su uso es sencillo.
En el caso de usar Lempel-Ziv:
#Comprimir un archivo gzip nombre.txt #Comprimir sin eliminar el original gzip -k nombre.txt #Compresión recursiva gzip -r * #Descomprimir (ambos equivalentes) gzip -d nombre.txt.gz gunzip nombre.txt.gz #Obtener información de un .gz gzip -l nombre.txt.gz
Para bzip2:
#Comprimir uno o varios archivos a la vez bzip2 nombre bzip2 nombre1 nombre2 nombre3 #Comprimir conservando el original (ambos equivalentes) bzip2 -c nombre > nombre.bz bzip2 -k nombre #Descomprimir (ambos equivalentes) bzip2 -d nombre.bz2 bunzip2 nombre.bz2
Usando xz, algo más moderno que los anteriores:
#Comprimir sin conservar el original o conservandolo xz nombre xz -k nombre #Comprimir varios archivos o todos los del directorio actual xz nombre1 nombre2 nombre3 xz * #Descomprimir (ambos equivalentes) xz -d nombre.xz unxz nombre.xz #Listar información xz -l nombre.xz
Globbing (comodines y caracteres especiales)
Y por último, lo que en el mundo Unix se conoce como globbing. Que es la posibilidad de usar algunos caracteres especiales, expresiones regulares, y comodines a la hora de trabajar con archivos. De hecho, ya lo hemos venido viendo en ejemplos anteriores. Aquí tienes algunos más:
#El comodín * indica todo. Por ejemplo, para listar info de todas las particiones del primer disco duro: ls -l /dev/sda* #Usando ? se consigue un efecto similar, pero no se incluye /dev/sda ls -l /dev/sda? #Usar rangos con [] ls -l /dev/sd[ab]* rm *[1-10].txt #Excluir con ! ls -l /home/isaac/hola[!4]
¡Hasta la próxima entrada!