De los niveles que hice ese día, el 5→6 fue de los más difíciles con diferencia. No porque el comando en sí fuera raro — es que find no es un comando de “una sola función” como los anteriores, engloba varias a la vez, y en este nivel concreto había que filtrar por dos características combinadas: tamaño y permisos del archivo.
El problema del nivel 5
El enunciado, esta vez, no da un nombre de archivo ni una carpeta concreta — da propiedades que el archivo cumple, y toca encontrarlo dentro de un árbol de subdirectorios:
- Es legible por humanos.
- Ocupa exactamente 1033 bytes.
- No es ejecutable.
Y para complicarlo más, el archivo está escondido varios niveles dentro de un directorio llamado inhere, que a su vez contiene decenas de subdirectorios (maybehere00, maybehere01… hasta maybehere19), cada uno con más archivos dentro. Mirar uno a uno, aquí, ya ni siquiera es una opción razonable — hacen falta docenas de comprobaciones.
Por qué find no es “un comando”, son varios en uno
Los comandos anteriores (cat, ls, file) hacen una cosa concreta cada uno. find es distinto: es un buscador con filtros combinables, y ahí está la dificultad real de este nivel — no es aprender un comando nuevo, es aprender a combinar criterios dentro de la misma búsqueda.
La estructura general es:
find [dónde buscar] [criterio 1] [criterio 2] [criterio N]
Y cada criterio se añade como una opción más, todos dentro de la misma línea.
Construyendo la búsqueda, criterio a criterio
Vayamos paso a paso, como toca hacerlo la primera vez que te encuentras con esto.
Paso 1 — filtrar solo archivos, no directorios, para no perder tiempo con carpetas que nunca van a coincidir:
find . -type f
Paso 2 — añadir el filtro de tamaño exacto, con -size y el sufijo c para indicar bytes (no bloques, no kilobytes):
find . -type f -size 1033c
Paso 3 — añadir que no sea ejecutable, con -executable combinado con ! (que significa “no”, niega la condición):
find . -type f -size 1033c ! -executable
Cada opción nueva no sustituye a la anterior — se suman, y solo sobreviven los archivos que cumplen todas a la vez. Es exactamente esa acumulación de filtros lo que me costó entender al principio: no es “prueba con tamaño, y si no, prueba con permisos” — es “cumple tamaño y permisos al mismo tiempo”.
bandit5@bandit:~$ find . -type f -size 1033c ! -executable
./inhere/maybehere07/.file2
Con los tres filtros combinados, de decenas de archivos candidatos solo queda uno — exactamente el objetivo de combinar criterios en vez de aplicarlos por separado.
Por qué no bastaba con el tamaño solo
Es tentador pensar que con -size 1033c ya habría bastado, sin añadir lo de “no ejecutable”. Y es verdad que en este nivel concreto probablemente sí habría sido suficiente — pero el enunciado da tres propiedades a propósito, no dos, y confiar en que “seguro que con una basta” es la clase de atajo que en un caso real (con más archivos candidatos del mismo tamaño) te puede devolver varios resultados en vez de uno solo, dejándote igual de perdido que al principio. Aplicar todos los filtros que te dan, aunque parezcan redundantes, es el hábito correcto.
Un matiz que también confunde al principio: el orden no importa
Otra duda que tuve resolviendo esto: ¿importa en qué orden pongo los filtros? La respuesta es no — find . -type f -size 1033c ! -executable y find . ! -executable -size 1033c -type f devuelven exactamente el mismo resultado. find evalúa todos los criterios como un conjunto, no como una secuencia de pasos donde el orden altera el resultado. Lo que sí importa es no olvidar ninguno de los filtros necesarios, no el orden en que los escribes.
La tabla de opciones que más se repiten en find
Más allá de este nivel concreto, estas son las opciones de find con las que me he ido encontrando y que vale la pena tener a mano:
| Opción | Qué filtra |
|---|---|
-type f | Solo archivos (no directorios) |
-type d | Solo directorios |
-size 1033c | Tamaño exacto en bytes (c) |
-size +1033c | Mayor que ese tamaño |
-size -1033c | Menor que ese tamaño |
-executable | Solo archivos ejecutables |
! -executable | Solo archivos NO ejecutables |
-name "patrón" | Filtra por nombre de archivo |
El ! delante de cualquier opción de find invierte su significado — funciona igual con -name, con -type o con cualquier otro filtro, no es exclusivo de -executable.
Pon a prueba lo que has entendido
Necesitas encontrar un archivo que cumple dos condiciones a la vez: un tamaño exacto y que no sea ejecutable. ¿Cómo se combinan ambos criterios en find?
Resumen rápido
find no es un comando de una sola función — es un buscador donde los criterios (-type, -size, -executable…) se combinan en la misma línea, y solo sobreviven los archivos que cumplen todos a la vez, no uno u otro por separado. El símbolo ! invierte cualquier condición. Localizar un archivo por tamaño exacto y permisos, en vez de por nombre, es el mismo tipo de búsqueda “por características, no por identidad” que se repite constantemente en administración de sistemas y en auditorías de seguridad reales. Si quieres ver el nivel que viene justo antes en la serie, con otra herramienta distinta para identificar archivos, está en Bandit nivel 4 a 5: cómo encontrar el único archivo legible entre varios con file.