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)
fuente
/bin
,/etc
desde/
.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/usr
y 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/etc
más la lista de paquetes instalados). También es útil para definir estrategias de copia de seguridad: lo que hay/etc
y/home
es de importancia crítica, mientras que lo que hay dentro/usr
se 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
/opt
estructura) y crear bosques de enlaces simbólicos desde los directorios del paquete a una/usr
estructura. 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.
fuente
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,
tmpfs
para/run
; y/sbin
en 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 ).fuente
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.
fuente