Todos los posts
Comandos mágicos: Find!
Linux Comandos Mágicos — Parte 2
EN ES

Comandos mágicos: Find!

Guía práctica de find con ejemplos reales: buscar por nombre, tipo, usuario, permisos y ejecutar acciones.

(Actualizado May 12, 2020) 5 min read por b4rt

Serie: Comandos Mágicos

  1. 1. Comandos mágicos: Grep!
  2. 2. Comandos mágicos: Find!

find es uno de mis comandos favoritos, no solo porque me ha salvado la vida en múltiples ocasiones, sino por la cantidad de usos que le podemos dar. Find básicamente sirve para buscar algo dentro del sistema operativo; la mejor parte es que, gradualmente, podemos ejecutar alguna acción sobre lo que encontramos.

Uso básico

find "path_a_buscar" -name "nombre_de_fichero"

Donde:

  • path_a_buscar — es la ruta completa donde buscaremos el fichero.
  • -name — opción para buscar por nombre. Recuerda que es case sensitive.
  • nombre_de_fichero — es el nombre del fichero a buscar.

Ejemplo 1 — Buscar un fichero en todo el sistema

Buscaremos el fichero pg_hba.conf, donde se encuentra la configuración de PostgreSQL. Usamos / para buscar en todo el sistema:

find / -name pg_hba.conf

Como usuario normal veremos errores de “Permission denied” en directorios del sistema. Como root (o con sudo), obtendremos la ruta completa sin restricciones.


Ejemplo 2 — Buscar por tipo

Usamos -type para especificar si buscamos directorios o ficheros.

Buscar directorios (-type d):

find /home/ -type d -name 'movies'

Buscar ficheros (-type f): Aquí usamos * para buscar todas las imágenes de un formato:

find /home/ -type f -name '*.jpg'

Ejemplo 3 — Buscar por usuario (UID)

Si queremos buscar directorios o ficheros cuyo propietario sea un usuario concreto, usamos -uid. Esto es muy útil cuando en un sistema tenemos un usuario malicioso y queremos encontrar todos los ficheros que ha creado. Primero identificamos el ID que tiene el usuario:

id nombre_usuario
# uid=1001(b4rt) gid=1001(b4rt) groups=1001(b4rt)

find / -uid 1001

Ejemplo 4 — Buscar por grupo

De la misma forma, si queremos buscar por un grupo concreto, usamos -group seguido del nombre o ID del grupo:

find / -group developers
# o por GID:
find / -gid 1002

Ejemplo 5 — Buscar por permisos

Podemos buscar ficheros con permisos específicos usando -perm:

# Ficheros con permisos exactamente 644
find /home/ -type f -perm 644

# Ficheros con el bit SUID activo (potencial riesgo de seguridad)
find / -type f -perm -4000

# Ficheros escribibles por cualquier usuario
find / -type f -perm -o+w

Ejemplo 6 — Buscar por tiempo de modificación

Podemos buscar ficheros modificados en los últimos N días con -mtime:

# Ficheros modificados en las últimas 24 horas
find /var/log/ -type f -mtime -1

# Ficheros modificados hace más de 30 días
find /home/ -type f -mtime +30

# Ficheros modificados exactamente hace 7 días
find /home/ -type f -mtime 7

Ejemplo 7 — Buscar por tamaño

Con -size podemos buscar ficheros por tamaño:

# Ficheros mayores de 100MB
find / -type f -size +100M

# Ficheros menores de 1KB (posiblemente vacíos o dummies)
find /tmp/ -type f -size -1k

# Ficheros de exactamente 0 bytes
find /var/log/ -type f -empty

Ejemplo 8 — Ejecutar acciones sobre los resultados

La verdadera potencia de find es poder ejecutar acciones sobre lo que encuentra, usando -exec:

# Borrar todos los ficheros .log mayores de 7 días
find /var/log/ -type f -name '*.log' -mtime +7 -exec rm {} \;

# Cambiar permisos a todos los .sh encontrados
find /home/b4rt/scripts/ -type f -name '*.sh' -exec chmod +x {} \;

# Copiar todos los .conf a un directorio de backup
find /etc/ -type f -name '*.conf' -exec cp {} /backup/etc/ \;

Ejemplo 9 — Combinar condiciones

Podemos combinar múltiples condiciones con -and (implícito), -or y ! (negación):

# Ficheros .jpg O .png
find /home/ -type f \( -name '*.jpg' -o -name '*.png' \)

# Ficheros .conf que NO sean de root
find /etc/ -type f -name '*.conf' ! -user root

# Directorios vacíos
find /tmp/ -type d -empty

Resumen de opciones más usadas

OpciónDescripción
-nameBuscar por nombre (case sensitive)
-inameBuscar por nombre (case insensitive)
-type f/d/lBuscar ficheros / directorios / symlinks
-uid / -gidBuscar por UID o GID
-user / -groupBuscar por nombre de usuario o grupo
-permBuscar por permisos
-sizeBuscar por tamaño
-mtime / -atime / -ctimeBuscar por tiempo de modificación / acceso / cambio
-emptyBuscar ficheros o directorios vacíos
-execEjecutar un comando sobre los resultados
-deleteBorrar los resultados directamente

find combinado con grep, xargs o exec es una herramienta muy poderosa para administración de sistemas, auditorías de seguridad y scripting.

Etiquetas: #linux #find #cli #bash #terminal #servidores

Comentarios

Stay in the loop

New posts about Linux, debugging, and systems programming. No noise, no spam — just signal.