¿Cuáles son las ventajas de la estructura del sistema de archivos Unix?

9

Si instalo una aplicación en Linux, por ejemplo Debian / Gnu Linux, los archivos de las aplicaciones se copian en muchos directorios diferentes en el sistema de archivos.

Algunos scripts van a / usr / share .. / usr / local y otros archivos a / var .. / log .. etc / y así sucesivamente.

Para mí, esto está bien porque aprendí algo sobre el sistema de archivos y la mayoría de los directorios están ahí para almacenar archivos con un propósito específico. Esto encaja muy bien en la filosofía de Unix "haz una cosa y hazlo bien"

Pero mi pregunta es ¿cuáles son las ventajas de dicha estructura de directorios? ¿O es simplemente la herencia de los viejos tiempos de Unix? (por ejemplo, en comparación con el uso de Windows, donde todos los archivos de una aplicación están en una "carpeta" específica)

Jan Koester
fuente

Respuestas:

9

Lo que me parece la ventaja más fácil de pensar es que archivos similares viven en el mismo árbol de directorios. Los archivos de configuración viven /etc, los archivos de registro y / o los archivos de rastreo en tiempo de ejecución viven /var/log, los archivos ejecutables viven /usr/bin, la información de tiempo de ejecución como los archivos PID viven /var/run. ¿Quiere saber qué hay en el archivo de configuración NTP? Cambiar directorio a /etcy hacer ls ntp*. ¿Desea que algún programa vea archivos ejecutables para que algún virus del sistema de archivos tradicional no los infecte? Todo dentro /usr/biny /usr/local/binnecesita observación.

La segunda ventaja que se me ocurre es que el estilo de organización de Unix promueve la separación de datos y ejecutables. Los ejecutables viven en un directorio que está muy lejos de donde viven las plantillas ( /usr/shareprobablemente) y muy lejos de donde viven los datos. Esa separación podría ser una razón por la cual Unix / Linux / * BSD tiene más resistencia a los virus del sistema de archivos que Windows, o la antigua Mac Pre-OSX.

Bruce Ediger
fuente
Eso son buenos puntos. ¿Por qué la separación de archivos ejecutables y de datos, plantillas y configuración es una razón para una mayor protección contra virus?
Jan Koester
3
Muchos (pero no todos) de los virus y gusanos en el mundo se propagan debido a la capacidad de cambiar los datos a ejecutables: los desbordamientos de pila y la inyección SQL y la inyección de código funcionan de esta manera. Los virus de macro "Word" se propagan al menos en parte porque las macros "Word" están incluidas en los archivos .doc. La separación de los datos del ejecutable por archivo es un nivel de protección, poner los datos en un directorio, el ejecutable en un segundo, las plantillas en un 3er, la configuración en un 4to pone aún más barreras para confundir los datos y el ejecutable.
Bruce Ediger
2
El argumento de separación de datos y ejecutables no tiene sentido. La organización del sistema de archivos es para beneficio de un humano; No es que haya una separación física entre los bits que les impide darse cooties entre sí o algo así. La seguridad de UNIX es históricamente mejor debido a un modelo de permisos más fuerte y más estricto en general.
esponjoso
sistemas de archivos separados @fluffy ofrecen una separación ligeramente más fuerte, pero ese punto es discutible parcialmente, ya que no es posible separar /bin, /etcdesde /.
jw013
@fluffy: de acuerdo, no existe separación "física", o es posible. Pero es una separación por nombre. El malware tiene que buscar en algún otro directorio (en lugar de "." O dirname $ 0 o algo así) para encontrar plantillas u otros datos. No es seguridad absoluta, al igual que cerrar una ventana de vidrio es seguridad absoluta. La seguridad es un bien económico, con un valor marginal para cada unidad de trabajo adicional. Cada poquito ayuda.
Bruce Ediger
11

No importa qué organización se elija, hará que algunas cosas sean más fáciles y otras más difíciles.

Organización de los archivos por tipo, la forma en Unix (a bin, man, lib/python, ...), hace que sea más fácil de usar archivos. Si desea ejecutar un comando, sabe dónde encontrarlo, sin importar qué paquete lo proporcione. Si desea buscar en la documentación, todo está en un solo lugar. Si algún programa proporciona un módulo de resaltado de sintaxis de Vim, una función de finalización de zsh o enlaces de Python, el archivo relevante estará en un lugar donde vim / zsh / python pueda encontrarlo.

Unix también organiza archivos por patrones de uso. Los archivos de configuración entran /etc, los archivos que no cambian en la operación normal entran /usry los archivos que cambian entran automáticamente /var. Los datos del usuario quedan debajo /home. Esto es muy útil para la administración de la configuración (administre lo que hay /etcmás la lista de paquetes instalados). También es útil para definir estrategias de copia de seguridad: lo que hay /etcy /homees de importancia crítica, mientras que lo que hay dentro /usrse puede descargar fácilmente nuevamente.

El costo principal de la manera de Unix es que la instalación de una pieza de software se distribuye en muchos directorios. Sin embargo, los sistemas Unix modernos tienen administradores de paquetes de todos modos; administrar archivos en muchos directorios no es, con mucho, lo más complejo que hacen (rastrear dependencias es muy útil y más difícil).

Contrasta eso con Windows. Windows comenzó sin administración de paquetes, y cada aplicación creó su propio directorio en alguna parte. Todos los archivos normalmente estarían dentro de ese directorio: programas, datos estáticos, datos de usuario, ... Excepto a veces para las bibliotecas, qué programas caerían en un directorio de sistema común sin tener en cuenta los conflictos ("infierno de DLL"). Con el tiempo, Windows se convirtió en multiusuario, requiriendo la separación de los directorios de usuarios de los directorios del sistema. Windows también creó un lugar central para los archivos de configuración (Unix /etc) y algunos datos del sistema (Unix's/var), el registro. Esto es más un artefacto histórico en gran parte debido a la falta de administración de paquetes y la historia temprana como un sistema de usuario único. El enfoque de Windows tiene muchas limitaciones: no permite que los paquetes de software interactúen fácilmente. Por ejemplo, la mayoría del software instalado no termina en la ruta de búsqueda de comandos predeterminada, por lo que interactúa mal con cualquier forma de scripting. Los instaladores generalmente proporcionan un ícono de menú como un caso especial: se coloca en un directorio del sistema separado (¡a la Unix!).

Una limitación del enfoque de Unix es que no permite fácilmente la coexistencia de múltiples versiones de un paquete, lo cual es especialmente problemático mientras se actualiza el paquete. Una forma de obtener lo mejor de ambos mundos sería desempaquetar cada paquete en su propio directorio (una /optestructura) y crear bosques de enlaces simbólicos desde los directorios del paquete a una /usrestructura. Esto es lo que hace el software como stow .

En resumen, el enfoque de Unix hace que sea más fácil usar archivos, administrar archivos y permitir que los paquetes interactúen; requiere un software de administración de paquetes, pero eso es deseable de todos modos. El enfoque de Windows facilita la administración manual de paquetes, pero tiene que desviarse hacia el modelo Unix para obtener una funcionalidad útil.

Gilles 'SO- deja de ser malvado'
fuente
1
Increíble. Sin embargo, en mi opinión, solía ser más fácil administrar paquetes individualmente. El advenimiento del registro de Windows cambió todo eso y algo más. No solo es gigantesco y laberíntico, sino que también lo es intencionalmente , con algunos valores en código de bytes, mientras que otros no lo son y no hay una verdadera rima o razón para la estructura. Supongo que es así si quieres desarrollar un sistema operativo administrado y proteger los secretos comerciales y los métodos patentados: confuso.
mikeserv
3

Un beneficio principal no mencionado anteriormente, y una de las razones históricas de la estructura, es la separación física en múltiples volúmenes / discos disponibles en diferentes etapas del proceso de arranque.

Otro beneficio es que los diversos directorios se pueden montar en volúmenes / sistemas de archivos que están optimizados para los datos del directorio. Por ejemplo, tmpfspara /run; y /sbinen medios de solo lectura / ROM.

Además, los volúmenes pueden ser locales o remotos, personales o compartidos.

Finalmente, consulte el Directorio de aplicaciones para obtener un enfoque alternativo (mencionado por @fluffy) utilizado en UNIX (OS X .app), Linux ( ROX Desktop ) y Windows ( PortableApps.com ).

go2null
fuente
1

Realmente no hay ventajas en este diseño, además de que es fácil adivinar dónde están los archivos compartidos y de configuración para una aplicación. UNIX tiene un largo legado de este tipo de diseño, y romperlo sería bastante difícil. Sin embargo, algunas distribuciones de UNIX han cambiado su modelo: solo proporcionan las ubicaciones antiguas para fines heredados, y otras aplicaciones se incluyen en su propio pequeño directorio / paquete. Mac OS X es el ejemplo más destacado de esto, y hay algunas distribuciones oscuras de Linux que hacen lo mismo (y Android hace algo similar, solo lo lleva un poco más allá e instala e inicia cada aplicación con su propia ID de usuario) )

Lo principal que proporciona una convención de sistema de archivos es solo eso: una convención, para que las personas sepan dónde buscar archivos (ya sea manualmente o en código). No hay una razón técnica real para que sea de una manera sobre otra.

mullido
fuente