🖇️
Apuntes LPIC-1
  • General
  • Ejercicios de utilidades
  • 1️Examen 101
    • Tema 101: Arquitectura del Sistema
    • Tema 102: Instalación de Linux y gestión de paquetes
    • Tema 103: Comandos GNU y Unix
      • 103.1 - Trabajar desde la línea de comandos
      • 103.2 - Procesar secuencias de texto usando filtros
        • Listado de texto plano
        • Ejercicios 103.2
      • 103.3 - Administración básica de archivos
      • 103.4 - Uso de secuencias de texto, tuberías y redireccionamientos
      • 103.5 - Crear, supervisar y matar procesos
        • 🚧Ejercicios 103.5
      • 103.6 Modificar la prioridad de ejecución de los procesos
      • 103.7 - Realizar búsquedas en archivos de texto usando expresiones regulares
      • 103.8 - Edición básica de archivos
    • Tema 104: Dispositivos, sistemas de archivos Linux y el estándar de jerarquía de archivos
    • Test prueba
  • 2️Examen 102
    • Tema 105: Shells y scripts
    • Tema 106: Interfaces de usuario y escritorios
    • Tema 107: Tareas administrativas
    • Tema 108: Servicios esenciales del sistema
    • Tema 109: Fundamentos de redes
    • Tema 110: Seguridad
Powered by GitBook
On this page
  • Contenidos
  • Moverse entre ficheros
  • Crear, mover y eliminar archivos
  • Crear y eliminar directorios
  • FILE GLOBBING
  • Como encontrar archivos
  • Empaquetar y comprimir
  • Los comandos cpio y dd
  1. Examen 101
  2. Tema 103: Comandos GNU y Unix

103.3 - Administración básica de archivos

Importancia

4

Descripción

El candidato debe ser capaz de usar comandos básicos de Linux para la administración de archivos y directorios.

Áreas de conocimiento clave:

  • Copiar, mover y eliminar archivos y directorios de forma individual.

  • Copiar múltiples archivos y directorios de forma recursiva.

  • Eliminar archivos y directorios de forma recursiva.

  • Utilizar especificaciones de comodines simples y avanzadas en los comandos.

  • Usar find para localizar archivos y actuar sobre ellos en base a su tipo, tamaño o marcas de tiempo.

  • Uso de tar, cpio y dd.

Contenidos

Moverse entre ficheros

Para moverse entre ficheros usaremos cd y para listarlos ls. Este último tiene algunos parámetros interesantes:

  • Para que se listen los ficheros por defecto en oculto, ósea los que empiezan con " . "

ls -a
  • Para que se listen archivos ignorando con " . " (directorio actual) y " .. " (directorio anterior)

ls -A

La diferencia la podemos comprender contando el numero de líneas que aparecen:

ls -a | wc -l
ls -A | wc -l
  • Para mostrar los tamaños de archivo en un formato legible para humanos:

ls -lh

Para movernos por directorios y ficheros, como ya hemos indicado, usaremos el comando cd (change directory). Por ejemplo:

#Para moverte a un directorio siempre y cuando esté en una jerarquia inferior
cd directorio/
cd directorio/que/me/interesa

#Volver al directorio en el que estabas antes
cd - 

#Volver al directorio raiz
cd ~

Crear, mover y eliminar archivos

El comando touch es la forma más fácil de crear archivos nuevos y vacíos o para cambiar las marcas de tiempo (el timestamp es decir, la hora de modificación) de los archivos y directorios existentes:

touch file1
touch file2 file3
touch -am file1 #cambia el acceso y también la hora de modificación a la hora actual

Vamos a usar cp (copy) para todas las tareas de copia, es muy sencillo:

#cp ORIGEN DESTINO
cp file1 dir2
#Copia recursiva, copiar un directorio junto con todos sus subdirectorios y archivos
cp -r mydir newcopy

Se puede usar con rutas absolutas o relativas pero ten cuidado por que sino te informará de errores.

El comando para mover y renombrar archivos es mv (move). La operación de mover es análoga a la operación de cortar y pegar que generalmente se realiza a través de una GUI y es parecido a cp en su sintaxis:

#mv ORIGEN DESTINO
mv file1 dir2
#Para renombrarlo:
mv file1 file_new
mv -i file1 file_new #Para solicitar confirmación
mv -f file1 file_new #Para hacerlo forzosamente

rm (remove) se usa para eliminar archivos, esta acción suele ser irreversible, por lo que este comando debe utilizarse con precaución.

rm file1
rm file1 file2 #Si quieres eliminar mas de uno
rm -i file1 #Para pedir confirmación
rm -f file1 #Para eliminar forzosamente
rm -r mydir/ #Eliminación recursiva del directorio y todo su contenido

Crear y eliminar directorios

Crear directorios es fundamental para organizar sus archivos y carpetas ya que los archivos se pueden agrupar de manera lógica manteniéndolos dentro de un directorio.

Para crear un directorio, usamos mkdir:

mkdir dir1
mkdir dir1 dir2 dir3 #Para crear varios
mkdir -p parents/children #Para crear un directorio con subdirectorio

Para borrar un directorio si está vacío usamos rmdir:

rmdir dir1
rmdir dir1 dir2 dir3 #Para eliminar varios
rmdir -p parents/children #Para eliminar un directorio con subdirectorio

FILE GLOBBING

El globbing es una característica proporcionada por el shell para representar múltiples nombres de archivo mediante el uso de caracteres especiales llamados wildcards, son esencialmente símbolos que pueden usarse para sustituir uno o más caracteres y que permiten, por ejemplo, mostrar todos los archivos que comienzan con la letra A o todos los archivos que terminan con las letras .conf.

Los wildcards son muy útiles ya que pueden usarse con comandos como cp, ls o rm. Esto no recoge los archivos ocultos.

  • * -> cualquier carácter de 0 a N veces, por lo tanto que no aparezca nada también sirve.

  • ? -> cualquier carácter pero 1 vez solo.

  • [A-B] -> rango de valores.

  • ! -> invertimos o negamos

Algunos ejemplos:

ls -l session* #Lista todos los archivos que empiecen por "session"
rm *           #Elimina todos los archivos del directorio actual
rmdir [a-z] *  #Elimina todos los archivos cuyo nombre comience por una letra
grep history sess* #Busca todos los que coincidan
find /home -name *.png #Busca todos los archivos png del directorio /home
cp -r animal/* forest #Copiar todos los contenidos de animal a forest


ls l?st #Lista todos los archivos con nombre que comienza con l seguido de cualquier caracter y termina con st

ls l[aeo]st.txt #Lista todos los archivos con nombre que coincida con las tres, esto es: last, lest y lost
ls l[a-z]st.txt #Lo mismo pero para todas las iteraciones del alfabeto
ls [plf]?st* #La combinación genera:
#Cualquier archivo que, empezando por [p,l,f] seguido de un solo caracter cualquiera, siga con st y termine con ninguno o mas caracteres cualquiera.
Caso de uso

Dado un listado de pelicules1.txt, pelicules2.txt, pelicules3.txt...

touch pelicules{1..12}.txt
ls pelicules*txt #Te lista todas desde pelicules.txt a pelicules12.txt
ls pelicules?.txt #Te lista de pelicules1.txt a pelicules9.txt
ls pelicules[2-7].txt #De la 2 a la 7
ls pelicules[!2-7].txt #La 1 y luego de la 8 a la 9

Como encontrar archivos

A veces se hace difícil localizar un archivo en particular pero afortunadamente, Linux proporciona el comando find para buscar y localizar archivos rápidamente, este usa la siguiente sintaxis:

find STARTING_PATH OPTIONS EXPRESSION
  • STARTING_PATH define el directorio donde comienza la búsqueda.

  • OPTIONS controla el comportamiento y agrega criterios específicos para optimizar el proceso de búsqueda.

  • EXPRESSION define la consulta de búsqueda.

Por ejemplo:

find . -name "myfile.txt"
#Siendo el . el directorio actual y -name indica el nombre a buscar 
find /home/frank -name "*.png"
#Busca todos los .png dentro del directorio indicado

Vamos a ver algunos de sus parámetros más importantes para usar criterios de búsqueda:

# Búsqueda por tipo de archivo
find -type 
# f para files (archivos)
# d para directories (carpetas)
# l para links (enlaces simbólicos)
#Por ejemplo:
find / -type d -name "example"

#Búsqueda por nombre
find / -name ""
find / -iname "" #lo mismo pero case-insensitive 
find / -not "" #resultados que NO coincidan
find / -maxdepth N #Donde N es el numero de profundidad de subdirectorios
  
#Búsqueda por tiempo
find -mtime N #Donde N es el numero de dias pasados
sudo find / -name "*.conf" -mtime 7 #Búsca en los últimos 7 días

#Búsqueda por tamaño
find / 
-size 100b #archivos de exactamente 100 bytes.
-size +100k #archivos de más de 100 kilobytes.
-size -20M #archivos de menos de 20 megabytes.
-size +2G #archivos de más de 2 gigabytes
-empty #archivos vacíos

Una vez que se realiza una búsqueda, es posible realizar una acción en el conjunto resultante utilizando -exec:

find . -name "*.conf" -exec chmod 644 '{}' ; 

Esto filtra cada objeto en el directorio actual y dentro de éste para los nombres de archivo que terminan en *.conf y luego ejecuta el comando chmod 644 para modificar los permisos de archivo en los resultados. Por ahora, no se preocupe con el significado de '{}'; ya que se discutirá más adelante.

Podemos usarlo tambien para buscar una palabra clave en un archivo:

find . -type f -exec grep "lpi" '{}' \; -print
  • Esto buscaría solo archivos (-type f) en la jerarquía de directorio actual

  • Ejecutaria el comando grep buscando la palabra "lpi" para cada archivo que satisfaga las condiciones

  • Los archivos que coinciden con estas condiciones se imprimirán en la pantalla (-print).

  • Las llaves ({}) son un marcador de posición para los resultados de la búsqueda find.

  • Los {} están encerrados entre comillas simples (') para evitar pasar archivos grep con nombres que contengan caracteres especiales.

El comando -exec se termina con un punto y coma (;), que se debe escapar (\;) para evitar la interpretación por parte del shell.

Además, agregar la opción -delete al final de una expresión eliminaría todos los archivos que coincidan, obviamente no hace falta decir que esta opción debe usarse cuando esté seguro de que los resultados solo coinciden con los archivos que desea eliminar.

En el ejemplo a continuación, find localiza todos los archivos en la jerarquía comenzando en el directorio actual y luego elimina todos los archivos que terminan con los caracteres .bak:

find . -name "*.bak" -delete

EXTRA. El comando fdfind

fdfind (or fd) is a modern, fast, and user-friendly alternative to the classic find command. It simplifies the process of searching your filesystem by providing reasonable defaults for most use cases. While fd may not support every feature of find, it covers the majority of common scenarios with ease.

Example: To search for all files with "log" in their name, use:

$ fd --type f logs

This command will return a list of all files containing "logs" in their name

Empaquetar y comprimir

No es lo mismo y no necesariamente van de la mano

Puedo crear un fichero vacío que ocupe con dd como ya vimos

  • Empaquetar -> tar

  • Comprimir -> gzip, bzip2, xz

Para comprimir un fichero no hace falta empaquetar. Pero empaquetar es meterlo dentro de un paquete, ajuntarlo, puede ayudar a optimizar el espacio

Empaquetando con tar

El comando tar, abreviatura de “tape archive (r)”, se utiliza para crear archivos tar convirtiendo un grupo de archivos en un archivo que se crean para mover o respaldar fácilmente un grupo de archivos. Por si mismo, también tiene la capacidad de extraer archivos tar, mostrar una lista de los archivos incluidos en el archivo y agregar archivos adicionales a un archivo existente.

Acepta los tres estilos de llamada (unix, tradicional, GNU)

tar -cvf archive.tar /stuff
#Donde:
# -c crea el archivo
# -v "verbose", muestra el progreso en terminal
# -f especifica el nombre del archivo

tar -cvf archive.tar /stuff1 /stuff2 #Para multiples directorios

tar -tf archive.tar #Para ver el contenido del paquete

Para extraer archivos:

tar -xvf archive.tar
#Donde:
# -x extrae en vez de crear

tar -xvf archive.tar -C /tmp # -C para indicar el directorio donde extraer

Se puede comprimir con tar tambien:

tar -czvf archive.tar.gz /stuff #Compresión gzip
tar -cJvf archive.tar.gz /stuff #Compresión xz
tar -cjvf archive.tar.gz /stuff #Compresión bzip2
#Para descomprimir sustituimos -c por -x

Al revisar con file podemos ver el tipo de compresión

Para la compresión hay tres métodos gzip, bzip2 y xz vamos a verlos:

#Gzip
#Compresión
gzip paquete.txt
#Lectura
zcat paquete.tar.gz
#Descompresión
gunzip paquete.tar.gz
gzip -d paquete.tar.gz

#Bzip2
#Compresión
bzip paquete.txt
#Lectura
bzcat paquete.tar.bz
#Descompresión
bzip -d paquete.tar.bz
bunzip2 paquete.tar.bz

#XZ
#Compresión
xz paquete.txt
#Lectura
xzcat paquete.tar.xz
#Descompresión
xz -d paquete.tar.xz
unxz paquete.tar.xz

Como ya hemos visto previamente, los cat sirven para leer archivos de texto comprimidos, por ejemplo los logs antiguos además permite pasarle cosas del estandar otuput:

sudo zcat /var/log/auth.log.1.gz | grep alex

Con Ctrl+R puedo hacer una búsqueda por el historial del comando que yo busco

Al dar a Ctrl+R otra vez me aparece la siguiente coincidencia.

Los comandos cpio y dd

cpio significa “copy in, copy out” (copiar dentro, copiar fuera). Se utiliza para procesar archivos de almacenamiento como archivos *.cpio o *.tar. cpio realiza las siguientes operaciones:

  • Copiar archivos a un archivo.

  • Extraer archivos de un archivo.

Toma la lista de archivos de la entrada estándar (principalmente salida de ls).

Para crear un archivo cpio, utilizamos:

ls | cpio -o > archive.cpio 

La opción -o indica a cpio que cree una salida llamada archive.cpio. El comando ls lista el contenido del directorio actual que se archivará. Para extraer el archivo utilizamos:

cpio -id < archive.cpio 

La opción -i se usa para realizar el extracto. La opción -d crearía la carpeta de destino. El caracter < representa la entrada estándar. El archivo de entrada a extraer es archive.cpio.

Respecto a dd copia datos de una ubicación a otra. La sintaxis de la línea de comandos de dd difiere de muchos otros programas de Unix, utiliza la sintaxis option=value más parecido a Windows para sus opciones de línea de comandos en lugar de los formatos estándar GNU -option value o --option=value:

dd if=oldfile of=newfile 

El comando dd normalmente no mostrará nada en la pantalla hasta que el comando haya finalizado. Al proporcionar la opción status=progress, la consola mostrará la cantidad de trabajo que realiza el comando. Por ejemplo:

dd status=progress if=oldfile of=newfile.

Este comando copiará el contenido de oldfile en newfile, donde of= se refiere al archivo de salida (outfile).

dd también se utiliza para cambiar datos a mayúsculas/minúsculas o escribir directamente en dispositivos de bloque como /dev/sdb:

dd if=oldfile of=newfile conv=ucase 

Esto copiaría todo el contenido de oldfile en newfile y capitalizaría todo el texto. El siguiente comando hará una copia de seguridad de todo el disco duro ubicado en /dev/sda en un archivo llamado backup.dd:

dd if=/dev/sda of=backup.dd bs=4096 

Caso práctico: Uso de cpio y dd

PreviousEjercicios 103.2Next103.4 - Uso de secuencias de texto, tuberías y redireccionamientos

Last updated 3 months ago

1️
Evidencia