Considere algunos sistemas * nix comunes (digamos Debian, CentOS, Arch y Kali).

Siempre usó find; No recuerdo haber usado GNU find, pero de un ejemplo , he visto que asumí que la sintaxis de GNU find podría ser más simple (aunque podría permitir menos operaciones).

Tengo dos preguntas:

  1. ¿Es find la utilidad predeterminada «buscar o-y operar» en sistemas comunes o los sistemas vendrán con ambos find y GNU find?

  2. Was GNU find destinado a para ser más simple que find ?

Comentarios

  • has siempre usado GNU find en linux, a menos que ' eres un gran usuario de find en busybox o android 😉 En sistemas que no son Linux, GNU find generalmente se llama gfind.
  • Pruebe find --version😉
  • Los sistemas a los que ' se refiere son sistemas GNU, GNU / Linux para la mayoría, aunque Debian está disponible para otros núcleos como bien. Entonces, ' no es sorprendente que la implementación find en esos sistemas sea GNU find.

Respuesta

Las utilidades GNU a menudo implementan el estándar POSIX y luego lo amplían con funcionalidad adicional para mayor conveniencia (y, como otra cara de la moneda, una menor portabilidad en Unices). El aspecto de la portabilidad es la razón por la que en algún momento verá respuestas o comentarios en este sitio que son muy cuidadosos para señalar cuando se asume una utilidad GNU o alguna otra implementación específica de una utilidad.

Si está en Linux sistema, muy probablemente estaría usando la implementación GNU de find, y probablemente no tendría otro find instalado. En sistemas que no sean Linux, tendría un find nativo y la posibilidad de instalar también GNU find (que se instalaría con mayor frecuencia bajo el name gfind o, con menos frecuencia, gnufind).

Como con la mayoría de las utilidades GNU, GNU find implementa y extiende la find especificación estándar. Por lo tanto, no es «más simple» sino posiblemente más complejo para que sea más conveniente, y sería algo más fácil hacer ciertas tareas complejas con él que con un find estrictamente estándar. .

Las implementaciones extendidas de find a menudo, por ejemplo, implementan -maxdepth y -mindepth predicados que el estándar no menciona, y GNU find en particular también tiene -printf para imprimir los nombres de ruta encontrados usando una variedad de posibilidades de formato (el find estándar no tiene -printf) y predicados para hacer coincidencias de expresiones regulares de varios tipos en nombres de ruta, así como otros predicados no estándar, algunos de los cuales también se encuentran en otras implementaciones de find (posiblemente con semánticas ligeramente diferentes, como -execdir whi ch funciona ligeramente diferente dependiendo de qué find se esté usando 1 ).

El -delete, que se utiliza en la respuesta a la que se vincula, no es estándar, pero está implementado por GNU find y en find en algunos otros sistemas que no son Linux. GNU find «s -delete se quejará si lo usa para eliminar un directorio no vacío, pero la opción correspondiente con, por ejemplo, OpenBSD» s find no lo hará (tampoco eliminará el directorio no vacío).

La mayoría de los sistemas Linux, independientemente de la distribución, usan el mismo conjunto de herramientas coreutils y findutils (variantes como busybox existe, obviamente). Para utilizar un conjunto de implementaciones de herramientas completamente diferente, tendría que pasar a uno de los sistemas BSD de código abierto oa macOS, Solaris, AIX o algún otro Unix comercial.


1 GNU find antepone ./ a los nombres de ruta cuando se usa -execdir while algunas otras implementaciones no «t.

Comentarios

  • Y -print0, y -direxec, y -delete, y … ;-). Las opciones de separador nulo disponibles en las herramientas GNU son particularmente convenientes.
  • @StephenKitt Pero rara vez es necesario 🙂
  • correcto, excepto cuando escribe aquí respuestas que no son POSIX ;-). (O scripts que necesitan funcionar en cualquier lugar .)
  • El principal problema con la documentación GNU es que intenta permitir que las personas usen alias no estándar para los métodos POSIX y así provocar scripts relacionados para crear un bloqueo de proveedor.
  • @StephenKitt -print0 también está disponible en * bsd y solaris; pero en solaris xargs -0 no funciona ' t, por lo que gxargs -0 (de /usr/bin/sfw) debe usarse en su lugar.

Responder

Lo que la gente suele referir ya que Linux se conoce mejor como GNU / Linux: Linux más GNU. Por lo tanto, las herramientas que está utilizando probablemente sean GNU.

  • Linux: un kernel, se usa en GNU / Linux, Android y muchos otros sistemas.
  • GNU: un sistema operativo, a menudo usado con el kernel de Linux, pero también se puede usar con BSD, Hurd, Cygwin (una DLL para Windows de Microsoft, pretende ser un kernel), WSL (Subsistema de Windows para Linux: GNU sin Linux, en Microsoft Windows), HPUX, Solaris, Dec Athena y muchos otros.

Por lo tanto, probablemente esté utilizando GNU find.

GNU es un proyecto para volver a escribir, una versión gratuita (gratuita como en libertad, no como en precio) de todo Unix, incluidas herramientas como find, el proyecto GNU no se preocupa por el cumplimiento de POSIX: cumplirá donde tenga sentido, pero también hará mejoras.

También asume que solo hay otro find es incorrecto.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *