busqueda y filtrado
Búsqueda y filtrado
Section titled “Búsqueda y filtrado”find /ruta -name "*.conf" # por nombre (sensible a mayúsculas)find /ruta -iname "*.conf" # por nombre, insensible a mayúsculasfind /ruta -type f # solo ficherosfind /ruta -type d # solo directoriosfind /ruta -type l # solo enlaces simbólicosPor permisos, fecha y tamaño
Section titled “Por permisos, fecha y tamaño”find / -perm -4000 -type f 2>/dev/null # binarios con SUIDfind / -perm -2000 -type f 2>/dev/null # binarios con SGIDfind . -mtime -7 # modificados en los últimos 7 díasfind . -mtime +30 # modificados hace más de 30 díasfind . -size +100M # ficheros de más de 100 MBfind . -size -1k # ficheros de menos de 1 KBfind . -newer referencia.txt # más recientes que un fichero dadoCombinando condiciones
Section titled “Combinando condiciones”find / -user root -perm -4000 -type f 2>/dev/null # SUID + propietario rootfind . -name "*.log" -type f -mtime +30 -delete # borra logs antiguos (cuidado)Ejecutar una acción sobre cada resultado: -exec
Section titled “Ejecutar una acción sobre cada resultado: -exec”find . -name "*.sh" -exec chmod +x {} \; # añade +x a todos los .sh encontradosfind . -name "*.tmp" -exec rm {} \; # borra cada .tmp encontradofind . -name "*.conf" -exec grep -l "password" {} \; # busca "password" dentro de cada .conf{% hint style=“info” %} {} es el placeholder del fichero encontrado, \; termina el comando por cada resultado (uno a uno). + en lugar de \; agrupa varios resultados en una sola invocación del comando, más eficiente para operaciones masivas. {% endhint %}
grep "patrón" fichero.txtgrep -i "patrón" fichero.txt # insensible a mayúsculasgrep -r "patrón" carpeta/ # recursivogrep -v "patrón" fichero.txt # invierte: líneas que NO coincidengrep -n "patrón" fichero.txt # muestra número de líneagrep -c "patrón" fichero.txt # cuenta coincidenciasgrep -l "patrón" *.txt # solo nombres de ficheros con coincidenciagrep -E "regex extendida" fichero.txt # regex extendida (equivalente a egrep)grep -A3 -B3 "patrón" fichero.txt # 3 líneas después (After) y antes (Before)| Flag | Significado |
|---|---|
-i |
Ignora mayúsculas/minúsculas |
-r |
Recursivo en subdirectorios |
-v |
Invierte: líneas que NO coinciden |
-n |
Muestra número de línea |
-c |
Cuenta coincidencias |
-l |
Solo nombres de fichero con match |
-E |
Regex extendida |
-w |
Solo coincidencias de palabra completa |
Regex básicas con grep
Section titled “Regex básicas con grep”grep -E "^[0-9]+" fichero.txt # líneas que empiezan por un númerogrep -E "error|fail|critical" log.txt # cualquiera de varias palabrasgrep -E "192\.168\.[0-9]+\.[0-9]+" log.txt # patrón de IPlocate, which, whereis
Section titled “locate, which, whereis”locate nombre_fichero # búsqueda rápida usando una base de datos indexadaupdatedb # actualiza la base de datos de locate (necesita privilegios)
which comando # ruta del ejecutable que se usaríawhereis comando # ruta del binario, fuentes y páginas de manual{% hint style=“warning” %} locate es muy rápido porque consulta un índice (updatedb), no el disco en tiempo real. Si acabas de crear un fichero, puede que locate aún no lo encuentre hasta la próxima actualización del índice. find siempre busca en tiempo real, más lento pero siempre actualizado. {% endhint %}
awk y sed — lo mínimo útil
Section titled “awk y sed — lo mínimo útil”awk: extraer columnas
Section titled “awk: extraer columnas”awk '{print $1}' fichero.txt # primera columnaawk -F: '{print $1}' /etc/passwd # separador distinto (ej: ":")awk '{print $1, $3}' fichero.txt # columnas 1 y 3awk '/error/' log.txt # líneas que contienen "error"sed: sustituir texto
Section titled “sed: sustituir texto”sed 's/antiguo/nuevo/' fichero.txt # sustituye la 1ª ocurrencia por líneased 's/antiguo/nuevo/g' fichero.txt # sustituye todas las ocurrenciassed -i 's/antiguo/nuevo/g' fichero.txt # modifica el fichero in-placesed -n '/patrón/p' fichero.txt # imprime solo líneas que coinciden{% hint style=“info” %}
-i sobrescribe el fichero original sin preguntar. Probar siempre primero sin -i para ver el resultado por pantalla.
{% endhint %}