¿Por qué tantos programas viven en PATH?

10

Una cosa que me desconcierta sobre Linux de escritorio, al menos, es que casi todo está en mi RUTA. Por todo, me refiero a todas las aplicaciones de escritorio, incluidas cosas como gnome-character-map y glchess. Estos no tienen interfaces de línea de comandos para hablar, por lo que no puedo pensar en un caso en el que los lanzaría regularmente desde una terminal, y, dentro de ese caso improbable, no puedo imaginar que me molesten al tener que escribir su completo rutas. Simplemente parece desordenado, pero tal vez hay una buena razón.

Entonces, ¿por qué sucede esto? ¿Hay algún impacto notable en el rendimiento o la mantenibilidad?

Dylan McCall
fuente

Respuestas:

14

Todos los comandos que un usuario puede querer ejecutar están en la RUTA. Para eso es. Esto incluye comandos que se ejecutan directamente, comandos que otras personas se ejecutan directamente, y comandos que usted u otras personas gestión indirecta, ya que son invocados por otros comandos. Esto no se limita a los comandos que se ejecutan desde un terminal: los comandos que se ejecutan desde una GUI también se buscan en la ruta de búsqueda de comandos (de nuevo, para eso es).

La necesidad de escribir la ruta completa sería terrible: ¡necesitaría averiguar cuál es la ruta completa! Debería realizar un seguimiento de si está en /usr/bin(que contiene la mayoría de los programas incluidos con el sistema operativo) o en /usr/local/bin(que contiene los programas instalados manualmente por el administrador, así como los programas que no forman parte del sistema operativo central en algunos variantes de Unix), o en algún otro directorio específico del sistema, o en algún lugar del directorio de inicio del usuario.

Es difícil responder sobre el "impacto en el rendimiento o la capacidad de mantenimiento" porque no dice con qué lo está comparando. Si está comparando con tener que escribir la ruta completa en todas partes, es una pesadilla para el mantenimiento: si alguna vez reubica un programa, o si desea instalar una versión más nueva que la que vino con el sistema operativo o fue instalada por un administrador del sistema, tienes que reemplazar ese camino completo en todas partes. El impacto en el rendimiento de buscar el nombre en algunos directorios es insignificante.

Si está comparando con Windows, es aún peor: algunos programas agregan no solo el ejecutable, sino también todo tipo de basura a la RUTA, y termina con una PATHvariable de una milla que todavía no incluye todos los programas, porque muchos programas no se agregan a la RUTA del sistema cuando los instala.

Gilles 'SO- deja de ser malvado'
fuente
Eso parece una razón bastante racional. ¡Gracias por la explicación! La parte de reemplazar un programa tiene mucho sentido. No había pensado en eso en absoluto :) La parte que me sorprende es que me gusta tener espacios de nombres pequeños y descriptivos cuando pienso en la programación, mientras que aquí todo está más o menos en el mismo espacio de nombres global (y, cuando lo hacemos mira las rutas completas, en lugares bastante anodinos como * / bin). Sin embargo, supongo que son cosas bastante diferentes.
Dylan McCall
4

La variable PATH contiene una lista de rutas de directorio. Cuando el usuario escribe un comando sin proporcionar la ruta completa, esta lista se verifica si contiene una ruta que conduce al comando. No hay nada inherentemente terminal o línea de comando específica al respecto.

Además, tampoco hay nada específico en Desktop Linux. La RUTA de mi sistema XP contiene % SystemRoot% \ system32;% SystemRoot%;% SystemRoot% \ System32 \ Wbem que probablemente cubre la mayoría de los binarios de Windows.

Los directorios en PATH se buscan en el orden especificado y se detienen tan pronto como se encuentra una coincidencia. Los directorios del sistema suelen estar al principio para darles la mayor prioridad. Los usuarios deben agregar rutas de búsqueda personalizadas al final.

En cuanto al rendimiento: la mayoría de los shells modernos almacenan en caché el contenido de PATH para que no tengan que escanear el disco cada vez que los usuarios ingresan un comando.

djf
fuente
La RUTA de Windows cubre la mayoría de los archivos binarios que se incluyen con Windows, pero las aplicaciones normales que instala normalmente no se encuentran en la RUTA. (Bueno, las aplicaciones con un componente de línea de comandos se agregarán a PATH, pero las de solo GUI normalmente no.)
cjm
Genial, siempre contemplé el orden y su significado. ¿Qué tal una regla de oro? Tengo (casi) todas las combinaciones de usr, local, bin, y sbin(excluyendo mi directorio personal del usuario).
Emanuel Berg