Saltar al contenido
Open Security
Linux RealInicial· 25 min

Encontrar archivos y texto: Find y Grep

Sabés que hay un archivo con un problema en algún lado, pero no cuál. Aprendé a buscar por nombre con find y por contenido con grep.

#linux#find#grep#shell

Antes de empezar necesitás

  • Una terminal Linux o WSL
  • Haber hecho el lab de filesystem real

Al terminar vas a poder

  • Distinguir búsqueda por nombre (find) de búsqueda por contenido (grep)
  • Buscar archivos por nombre, patrón y tipo con find
  • Buscar texto en uno o varios archivos con grep
  • Usar -n para ubicar la línea y -i para ignorar mayúsculas

Entorno listo con Podman

Un servidor de juguete con cientos de líneas de log, donde una sola explica la caída del worker. lab-check revisa tus find y grep, el archivo culpable y el reto BUSCARME.

# Una vez: cloná el repo y construí la imagen
git clone https://github.com/ValentinTorassa/Open-Security-Labs.git
cd Open-Security-Labs
podman build -t osl/encontrar-archivos-y-texto -f entornos/linux-real/encontrar-archivos-y-texto/Containerfile entornos

# Abrí el entorno (se borra al salir)
podman run --rm -it --name osl-encontrar-archivos-y-texto --hostname labs osl/encontrar-archivos-y-texto

# Al terminar, adentro del contenedor
lab-check
  • lab-check revisa lo que hiciste y guarda el resultado en /home/vt/evidencia. Desde otra terminal, en la carpeta del repo, npm run lab:check -- linux-real/encontrar-archivos-y-texto corre el mismo chequeo y copia tu evidencia a evidencia/encontrar-archivos-y-texto/.
  • ¿Usás Docker? Cambiá podman por docker en los comandos y funciona igual.
  • Qué trae, qué revisa y sus límites: entornos/linux-real/encontrar-archivos-y-texto/README.md.

Sabés que hay un archivo con información que necesitás, pero no recordás el nombre ni dónde lo guardaste. O querés saber qué error ocurrió en un log, pero hay cientos de líneas. find y grep son las herramientas que usan los sysadmins todo el día para esto.

La diferencia es clara: find busca archivos por atributos (nombre, tipo). grep busca texto dentro de archivos.

Empecemos por lo básico

Creá una carpeta de práctica y un archivo adentro:

vt@labs:~
mkdir proyecto
cd proyecto
echo "Estas son mis notas" > notas.txt
echo "para linux real" >> notas.txt

find . -name "notas.txt"
grep "notas" notas.txt

> crea el archivo y >> le agrega una línea al final. find te responde dónde está (./notas.txt). grep te responde qué dice: imprime la línea que contiene la palabra (Estas son mis notas).

Find: buscar archivos por nombre y tipo

Cuando no recordás dónde guardaste algo, find es tu respuesta.

vt@labs:~/proyecto
# Sumá un segundo archivo y una subcarpeta con otro archivo
echo "Mis apuntes" > apuntes.txt
mkdir clases
echo "Practicar cuentas en linux" > clases/matematicas.txt

# Buscar todos los .txt desde la carpeta actual
find . -name "*.txt"

# Solo archivos (no directorios)
find . -type f

# Solo directorios
find . -type d

Entendamos la sintaxis:

  • find . = buscar desde acá (. = carpeta actual) y en todas sus subcarpetas
  • -name "*.txt" = archivos cuyo nombre termine en .txt
  • -type f = solo archivos
  • -type d = solo directorios

Tu carpeta quedó así:

proyecto/
├─ notas.txt
├─ apuntes.txt
└─ clases/
   └─ matematicas.txt

find . -name "*.txt" te devuelve los tres archivos, incluido ./clases/matematicas.txt, aunque esté dentro de una subcarpeta: find entra solo a cada carpeta que encuentra. find . -type f te da lo mismo, porque acá todos los archivos son .txt. find . -type d devuelve . (la carpeta actual) y ./clases. El orden puede variar en tu máquina.

Grep: buscar texto dentro de archivos

Ya encontraste un archivo (o varios). Ahora querés saber si contiene la palabra que buscás.

vt@labs:~/proyecto
# Buscar una palabra que no está en el archivo
grep "error" notas.txt

# Buscar una palabra que sí está
grep "linux" notas.txt

# Buscar en varios archivos
grep "linux" *.txt

# Mostrar el número de línea
grep -n "linux" notas.txt

# Ignorar mayúsculas
grep -i "Linux" notas.txt

# Buscar recursivamente en carpetas
grep -r "linux" .

La sintaxis:

  • grep "patrón" archivo = buscar el patrón en ese archivo
  • -n = mostrar el número de línea
  • -i = ignorar mayúsculas (ERROR, Error y error son iguales)
  • -r = recursivo (buscar en la carpeta y sus subcarpetas)

Output: las líneas que contienen lo que buscás.

$ grep "linux" notas.txt
para linux real

$ grep "linux" *.txt
notas.txt:para linux real

$ grep -n "linux" notas.txt
2:para linux real

$ grep -r "linux" .
./clases/matematicas.txt:Practicar cuentas en linux
./notas.txt:para linux real

Fijate cuatro cosas:

  • grep "error" notas.txt no devuelve nada: si no hay coincidencias, grep no imprime ningún mensaje. Que no salga nada también es una respuesta.
  • grep distingue mayúsculas: grep "Linux" notas.txt no encuentra nada, porque el archivo dice linux. Con grep -i "Linux" notas.txt sí aparece la línea.
  • Cuando buscás en varios archivos (con *.txt o con -r), grep antepone el nombre del archivo a cada línea, así sabés en cuál está la coincidencia. grep "linux" *.txt revisó apuntes.txt y notas.txt, pero solo muestra notas.txt porque es el único que contiene la palabra.
  • *.txt solo mira la carpeta actual: no entra a clases/, por eso no encuentra matematicas.txt. grep -r "linux" . recorre también las subcarpetas y encuentra los dos. Si buscás algo y no sabés en qué carpeta está, usá -r.

Lo que practicás en este lab

Llevátelo a tu repo si querés, pero no es obligatorio: es tu aprendizaje.

  • Salida de find y grep guardada en un archivo de evidencia
  • Writeup corto: qué encontraste, dónde y con qué comando

Reto

Creá un archivo de texto con una palabra especial (por ejemplo BUSCARME), salí de esa carpeta, localizalo por nombre con find y confirmá con grep que el archivo contiene la palabra. Guardá los comandos y la salida en evidencia.txt.

Resolvelo y escribí dos líneas explicando qué pasó. Con eso lo fijás.

¿Hiciste el lab?

Si querés, guardá lo que hiciste (comandos, notas, un repo) para volver después. Y si encontrás un error o querés mejorar este lab,contribuí al repo. El progreso se guarda solo en tu navegador.