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…

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!

Isaac

Apasionado de la computación y la tecnología en general. Siempre intentando desaprender para apreHender.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

A %d blogueros les gusta esto:

Si continuas utilizando este sitio aceptas el uso de cookies. más información

Los ajustes de cookies de esta web están configurados para "permitir cookies" y así ofrecerte la mejor experiencia de navegación posible. Si sigues utilizando esta web sin cambiar tus ajustes de cookies o haces clic en "Aceptar" estarás dando tu consentimiento a esto.

Cerrar