Módulo 6 - Expresiones regulares e integridad de sistemas de archivos

Comando grep

  • grep filtra texto y busca patrones en archivos.
  • Muestra coincidencias en la salida estándar.
  • Útil para archivos grandes cuando buscamos algo específico.
ComandoDescripción
grep [username] /etc/passwdBusca todas las líneas que contienen el nombre de usuario especificado en el archivo /etc/passwd.
grep [string] [file] -nBusca las coincidencias del patrón especificado en el archivo indicado. Con la opción -n, enumera las líneas donde se encontraron coincidencias. Ejemplo: grep root /var/log/auth.log -n.
grep [string] -c [file]Busca las coincidencias del patrón especificado en el archivo indicado. La opción -c muestra la cantidad de coincidencias encontradas, pero no las líneas en sí. Ejemplo: grep sda -c /var/log/kern.log.
history|grep clear -vImprime las líneas del historial que no coinciden con el patrón "clear", gracias a la opción -v.
journalctl|grep boot -oEjecuta journalctl y filtra la salida para mostrar únicamente el patrón coincidente, utilizando la opción -o.
journalctl|grep ^octFiltra las líneas que comienzan con "oct" (mes de octubre), utilizando el símbolo ^ como ancla.
journalctl|grep reserved$Filtra las líneas que terminan con "reserved", utilizando el símbolo $ como ancla.

Comando sed

  • sed es una herramienta más avanzada que grep.
  • Permite extraer, sustituir y filtrar texto.
ComandoDescripción
sed -n /unix/p < geek.txtEl contenido de “geek.txt” es extraído, de manera que no se imprima nada más que las líneas con la palabra “unix”.
sed /linux/d < geek.txtMostrará todo el contenido del archivo excepto las líneas que contengan la palabra linux.
sed s/unix/Ubuntu/ < geek.txtSustituirá las primeras palabras “unix” de cada línea del archivo geek.txt por la palabra Ubuntu.
sed s/unix/Ubuntu/2 < geek.txtSustituirá las segundas palabras “unix” de cada línea del archivo geek.txt por la palabra Ubuntu.
sed s/unix/Ubuntu/g < geek.txtSustituirá todas las palabras “unix” de cada línea del archivo geek.txt por la palabra Ubuntu.
sed -n 's/unix/linux/p' geek.txtMostrará únicamente las líneas donde se sustituyó la primera palabra unix por linux.

Expresiones regulares

  • Las expresiones regulares son conjuntos de caracteres para búsquedas complejas.
  • Ampliamente usadas en comandos como grep y sed.
  • El "átomo" define el patrón a buscar
    • .(punto): Coincide con cualquier carácter.
    • ^: Coincide con el comienzo de una línea.
    • $: Coincide en el final de una línea.
    • *: Significa que sustituya una o más ocurrencias.
    • ?: Significa que sustituya una única ocurrencia.
    • [ ]: Cualquier ocurrencia entre los corchetes.
    • {i}: El átomo debe aparecer exactamente “i” cantidad de veces.
    • {i,}: El átomo debe de aparecer como mínimo “i” veces.
    • {i,j}: El átomo debe de aparecer al menos “i” veces y a lo sumo “j” veces.
ComandoDescripción
journalctl|egrep .lMuestra todas las coincidencias con la letra "l" en journalctl, donde el punto representa cualquier letra antes de "l".
mount|egrep ^/devMuestra las líneas en mount que comienzan con "/dev".
dmesg|egrep NO_DATA$Muestra las líneas en dmesg que terminan con "NO_DATA".
rmdir [a-f]*Borra directorios que comienzan con una letra entre "a" y "f", sin importar el resto del nombre.

Ejemplo: Crearemos el archivo de texto team.txt con el siguiente contenido:

Fred apples 20 
Susy oranges 5 
Mark watermellons 12 
Robert pears 4 
Terry oranges 9 
Lisa peaches 7 
Susy oranges 12 
Mark grapes 39 
Anne mangoes 7 
Greg pineapples 3 
Oliver rockmellons 2 
Betty limes 14

Mas ejemplos de expresiones regulares:

ComandoDescripción
egrep 'mellon' team.txMostrará todas las coincidencias con “mellon” en el archivo team.txt
egrep '[aeiou]{2,}' team.txtMostrará las líneas y palabras donde exista al menos dos letras de las incluidas en los corchetes y que sean continuas.
egrep '2.' team.txtMostrará las palabras que incluyan un “2” seguido de cualquier caracter.
egrep '2$' team.txtMostrará las líneas que terminen con un “2”.
egrep 'or|is|go' team.txtMostrará las palabras que contengan “or”, “is” y “go”.
egrep '^[A-K]' team.txtMostrará las líneas que empiezan con cualquier letra entre “A” y “K”.

Integridad de sistemas de archivos

  • Preservar integridad asegura datos confiables.
  • Previene fallos de lectura/escritura y corrupción.
  • Protege contra virus, malware y fallos de hardware.
  • fsck y e2fsck verifican y reparan sistemas.

Para poder ejecutar los siguientes comandos se recomienda:

  1. Reiniciar el sistema y entrar en “recovery mode” como root.
  2. Desmontar la(s) unidad(es) que se desean verificar.
  3. Ejecutar los siguientes comandos.
ComandoDescripción
fsck [device]Realiza una verificación rápida del FS. Ej: fsck /dev/sda3.
fsck -nf [device]Realiza una verificación del FS sin realizar ningún cambio (n). Lo ejecuta de manera forzada (f). Importante: Usar esta opción si la anterior genera algún mensaje de error.
fsck -y [device]En caso de que fsck haya encontrado problemas, con el parámetro -y intentará corregir los problemas automáticamente. -y (yes) a todo.
fsck -FAR -y [device]Fuerza a verificar todos los FS. Omite el FS de root con “-R”. Todos los FS deben ser desmontados y a realizar cualquier cambio con “-y”.
e2fsck [device]Realiza una verificación rápida del FS. Ej: e2fsck /dev/sda3.
e2fsck -p [device]Realiza una verificación del FS y repara los errores encontrados automáticamente.
e2fsck -n [device]Realiza un escaneo de problemas sin realizar cambios.
e2fsck -fy [device]Fuerza a verificar todos los FS. Realiza un cambio en caso de encontrar errores.
e2fsck -c [device]Realiza un análisis de bloques dañados en la partición y trata de solucionarlos.

fsck vs e2fsck

  • fsck es la versión antigua para la verificación del sistema de archivos.
  • e2fsck es una versión mejorada de fsck.
  • Cuando fsck se ejecuta sin especificar un tipo de sistema de archivos, internamente llama a e2fsck para realizar la verificación.
  • Por defecto, e2fsck interpreta que el sistema de archivos puede ser ext2, ext3 o ext4.
  • e2fsck es la herramienta específica para trabajar con los sistemas de archivos ext2, ext3 y ext4.

Comando tune2fs

tune2fs gestiona particiones y sistemas de archivos como Ext2, Ext3 y Ext4.

ComandoDescripción
tune2fs -l [device]Muestra información y parámetros del sistema de archivos del dispositivo especificado. Ejemplo: tune2fs -l /dev/sda3.
tune2fs -L [label] [device]Permite agregar una etiqueta de nombre al volumen del sistema de archivos.
tune2fs -i [minutes] [device]Establece el tiempo mínimo entre dos verificaciones del sistema de archivos. Se puede especificar en minutos o meses. Ejemplo: tune2fs -i 10m /dev/sda3 o tune2fs -i 200 /dev/sda3 (en días).
tune2fs -c -1 [device]Deshabilita la verificación del sistema de archivos al arranque del sistema para el dispositivo especificado. Se recomienda ejecutar tune2fs -i -1 [device] para establecer el intervalo de verificación a "nunca".

Comando df (Disk Free)

El comando df (Disk Free) es útil para obtener información sobre sistemas de archivos, particiones y su uso.

ComandoDescripción
dfMuestra información estándar, aunque los valores numéricos pueden ser difíciles de entender.
df -hProporciona la misma información que df, pero con valores en un formato más legible para humanos.
df -TSimilar a df, pero incluye una columna adicional con el tipo de sistema de archivos de cada dispositivo.
df -t [FS.type]Permite filtrar la lista por tipo de sistema de archivos. Ejemplo, df -t ext2.
df --output=sourceMuestra solo la columna con la ruta de origen de los dispositivos.
df --output=fstypeMuestra solo la columna del tipo de sistema de archivos.
df --output=sizeMuestra el tamaño en bloques del dispositivo. Se puede agregar -h para hacerlo comprensible.
df --output=usedMuestra el espacio en bloques utilizado por el dispositivo. Se puede agregar -h para hacerlo comprensible.
df --output=availMuestra el espacio disponible en bloques. Se puede agregar -h para hacerlo comprensible.
df --output=pcentMuestra el porcentaje de uso por dispositivo.

Comando du (Disk Usage)

El comando du proporciona una lista de archivos y directorios desde la ubicación actual, junto con su tamaño en bytes.

ComandoDescripción
duMuestra el espacio utilizado por cada archivo y directorio en la ubicación actual, así como el espacio total utilizado en bytes.
du -hProporciona la misma información que du, pero en kilobytes, megabytes u otro formato comprensible para los humanos.
du --timeAgrega la fecha y hora de la última modificación de archivos y directorios, y puede combinarse con -h
du --exclude=[pattern]Permite excluir archivos o directorios según un patrón especificado. -h puede agregarse para una mejor comprensión. Por ejemplo, du -h --exclude=*.txt excluye archivos con extensión .txt.

Comando lsblk

La herramienta lsblk analiza información sobre dispositivos de bloque, como discos duros y CD-DVD. Es ampliamente utilizada para consultar particiones del sistema, su tamaño y uso.

lsblk: Muestra el siguiente contenido:

  • NAME: Nombre del dispositivo.
  • MAJ:MIN: Identificador numérico del dispositivo y sus particiones (ejemplo: sda 8:0 | sda1 8:1).
  • RM: Indica si el dispositivo es removible (1) o no (0).
  • SIZE: Tamaño del dispositivo en formato K, M, G, T.
  • RO: Indica si el dispositivo es de solo lectura (1) o no (0).
  • TYPE: Tipo de dispositivo.
  • MOUNTPOINTS: Punto de montaje de cada dispositivo.
ComandoDescripción
lsblk -lMuestra la salida en formato de lista en lugar de árbol.
lsblk -o [nombre-de-columna]Filtra la salida para mostrar solo una o varias columnas separadas por coma, como "NAME", "SIZE", "TYPE", "MOUNTPOINT", etc.
lsblk -mMuestra los permisos y el propietario de cada dispositivo.
lsblk [dispositivo]Filtra la salida para mostrar solo información sobre un dispositivo específico, y se pueden agregar otras opciones mencionadas anteriormente.
lsblk -bMuestra información numérica en bytes.

¿Qué es un dispositivo de bloque?

Un dispositivo de bloque es una unidad de almacenamiento que organiza y maneja la información en bloques de tamaño fijo, permitiendo el acceso independiente a cada bloque.

Ejemplos comunes:

  • Discos duros (HDD)
  • Unidades de estado sólido (SSD)

Características clave:

  • Puede leer y escribir datos en bloques individuales
  • No requiere energía constante para mantener la información almacenada (almacenamiento no volátil)
  • Ideal para almacenar grandes cantidades de datos de forma eficiente y confiable

Servicio y cliente SSH

El aseguramiento en la autenticación es fundamental para proteger sistemas y conexiones remotas.

En SSH se utiliza autenticación asimétrica mediante pares de claves (key pairs), en lugar de usuario y contraseña, ya que estas últimas son vulnerables. Un par de claves está compuesto por una llave pública y una llave privada, ambas cifradas y relacionadas entre sí.

  • Llave pública: Funciona como un nombre de usuario, cifrando datos o conexiones entre puntos. Es de acceso público, como un candado visible y manipulable por cualquiera.

  • Llave privada: Funciona como una contraseña, descifrando la llave pública. Es privada y solo personas autorizadas pueden tener una copia, similar a la llave que abre el candado.

En el proceso SSH:

  • La comunicación solo se completa si la llave pública y la privada coinciden.
  • Esto garantiza que solo el usuario autorizado pueda autenticarse.

Ejemplo: Jorge (servidor SSH) envía una caja con dinero (los datos) a Juan (cliente SSH).

  1. Preparación: Juan genera su par de claves y envía el candado (su llave pública) a Jorge. Cualquiera puede usar este candado para cerrar la caja, ya que es de acceso público.

  2. Envío cifrado: Jorge cifra la caja con el dinero usando el candado (llave pública de Juan). Una vez cerrada, nadie más puede abrirla.

  3. Recepción segura: La caja llega a Juan, quien usa su llave privada (única en su posesión) para abrir el candado y acceder al contenido.

Esto garantiza confidencialidad y autenticación en la conexión SSH, ya que solo Juan puede descifrar los datos, previniendo accesos no autorizados.

Proceso de autenticación en conexiones SSH entre Ubuntu (cliente) y AlmaLinux (servidor):

  1. Generación de llaves: Ubuntu genera un par de llaves: una privada (id_rsa) y una pública (id_rsa.pub). La llave pública se copia y envía a AlmaLinux.

  2. Inicio de conexión: Cuando un usuario en Ubuntu desea conectarse a AlmaLinux mediante SSH, ocurren los siguientes pasos:

    1. Desafío cifrado: AlmaLinux genera un desafío aleatorio y lo cifra con la llave pública de Ubuntu.

    2. Recepción y descifrado: Ubuntu recibe el desafío cifrado y lo descifra con su llave privada.

    3. Respuesta cifrada: Ubuntu responde cifrando la información con la llave pública de AlmaLinux.

    4. Verificación: AlmaLinux descifra la respuesta con su llave privada.

  3. Establecimiento de conexión: Si la respuesta es correcta, se verifica la identidad de Ubuntu y se establece una conexión SSH autenticada y segura.

Comando tmux

tmux es multiplexor de terminal para gestión avanzada, permite a los usuarios crear, acceder y controlar múltiples terminales desde una sola ventana de terminal.

Funcionalidades principales:

  1. Sesiones persistentes: Permite crear sesiones que pueden desconectarse y reconectarse sin perder el progreso.

  2. Múltiples ventanas y paneles: Facilita la organización y gestión de múltiples tareas dividiendo la terminal en varias ventanas.

  3. Personalización: Altamente configurable con opciones para teclas de acceso rápido, colores, diseño de paneles, y más.

ComandoDescripción
tmux new-session -A -s [name]Crea una sesión de Tmux con un nombre.
Ctrl + b + “Divide la pantalla del terminal en horizontal.
Ctrl + b + %Divide la pantalla del terminal en vertical.
Ctrl + b + FlechasNavega entre las ventanas abiertas del terminal.
Ctrl + b + : + synchronize panes onSincroniza la escritura en todos los paneles.
Ctrl + b + : + synchronize panes offDetiene la sincronización de escritura entre paneles.
Ctrl + b + ?Muestra una lista de todos los comandos y atajos de Tmux.
tmux lsMuestra la lista de sesiones Tmux existentes.
tmux atAdjunta a la última sesión Tmux creada.
tmux a -t [name]Adjunta a una sesión Tmux específica por nombre.
exitCierra los paneles Tmux en una sesión.
tmux kill-session -t [name]Cierra una sesión Tmux completa por nombre.
Built with LogoFlowershow