Cuando uso find --versioncon GNU find, obtengo algo como esto:
find (GNU findutils) 4.5.9
[license text]
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS(FTS_CWDFD) CBO(level=2)
¿Qué significan estas "características"? Hay alguna referencia a O_NOFOLLOWser una medida de seguridad man find, y hay una mención de LEAF_OPTIMISATIONser una optimización que ahorra algunas lstatllamadas en los nodos hoja. Pero no puedo encontrar nada sobre FTS, D_TYPEo CBO.

Respuestas:
Esta es una respuesta completa derivada de las respuestas de Ketan y Daniel Kullman, así como de mi propia investigación.
La mayoría de las "características" resultan ser optimizaciones de consultas, ya
findque en general es capaz de consultas (casi) arbitrariamente complejas en el sistema de archivos.D_TYPE
La presencia de la
D_TYPEfunción significa quefindse compiló con soporte para eld_typecampo enstruct dirent. Este campo es una extensión BSD también adoptada por Linux, que proporciona el tipo de archivo (directorio, archivo, tubería, socket, dispositivo char / block, etc.) en la estructura devuelta porreaddiry amigos. Como optimización,findpuede usar esto para reducir o eliminarlstatllamadas cuando-typese usa como una expresión de filtro.readdires posible que no siempre se llened_typeen algunos sistemas de archivos, por lo que a veceslstataún será necesario.Más información de la documentación oficial: https://www.gnu.org/software/findutils/manual/html_node/find_html/d_005ftype-Optimisation.html
O_NOFOLLOW
Esta opción leerá
(enabled)o(disabled). Si está presente y habilitada, esta característica implementa una medida de seguridad que protegefindcontra ciertos ataques de carrera TOCTTOU. Específicamente, evitafindatravesar un enlace simbólico mientras se realiza el recorrido del directorio, lo que podría ocurrir si el directorio fuera reemplazado por un enlace simbólico después de verificar el tipo de archivo del directorio pero antes de ingresar el directorio.Con esta opción habilitada,
findse usaráopen(..., O_NOFOLLOW)en el directorio para abrir solo directorios reales, luego se usaráopenatpara abrir archivos dentro de ese directorio.HOJA_OPTIMIZACIÓN
Esta optimización ligeramente oscura permite
finddeducir qué subdirectorios de un directorio padre son directorios mediante el uso del recuento de enlaces del directorio padre, ya que los subdirectorios contribuirán al recuento de enlaces del padre (a través del..enlace). En ciertas circunstancias, permitiráfindeludir unastatllamada. Sin embargo, si el sistema de archivos o el sistema operativo tergiversanst_nlinks, puedefindproducir resultados falsos (afortunadamente, esto es muy raro).Más información en la documentación oficial: https://www.gnu.org/software/findutils/manual/html_node/find_html/Leaf-Optimisation.html
FTS
Cuando está habilitada, la
FTScaracterística hacefindque use laftsAPI para atravesar la jerarquía de archivos, en lugar de una implementación recursiva directa.No tengo claro cuál es la ventaja
fts, peroFTSes básicamente el valor predeterminado en todas lasfindversiones predeterminadas que he visto hasta ahora.Más información: https://www.gnu.org/software/findutils/manual/html_node/find_html/fts.html , http://man7.org/linux/man-pages/man3/fts.3.html
CBO
Resulta (después de leer el
findcódigo fuente según lo sugerido por daniel kullman) que "CBO" se refiere al nivel de optimización de la consulta (significa "optimizador basado en costos"). Por ejemplo, si lo hagofind -O9001 --version, me saleMirando la
-Oopción enman find, veo¡Misterio resuelto! Es un poco extraño que la opción sea un valor de tiempo de ejecución; por lo general, esperaría que la
--versionsalida solo refleje las opciones de tiempo de compilación.fuente
La información sobre
O_NOFOLLOWse proporciona en lainfopágina defind:Desde el árbol fuente,
CBOocurre solo en el archivoparser.c:indicando que es una optimización basada en el costo (mi mejor suposición).
D_TYPEocurre en varios lugares en el árbol de origen y parece que tiene que ver con el tipo de entrada de directorio:Rendimientos:
Y algunas entradas más. Puedes encontrar la fuente aquí .
fuente
Al mirar a través del árbol fuente findutils ( http://git.savannah.gnu.org/cgit/findutils.git/tree/ ), encontré lo siguiente:
No encontré nada sobre CBO; es posible que deba descargar el código fuente y buscar el término.
fuente