El 30 de noviembre de 2010, David Collier escribió:
Noté que en busybox los enlaces están distribuidos en estos cuatro directorios.
¿Hay alguna regla simple para determinar en qué directorio debe ir cada enlace…?
Por ejemplo, kill está en /bin, mientras que killall está en /usr/bin… No veo ninguna lógica en tal separación.
Probablemente sepas que Ken Thompson y Dennis Ritchie crearon Unix en PDP-7 en 1969. Aproximadamente en 1971 hicieron una actualización a PDP-11 con un par de discos RK05 (de 1.5 megabytes cada uno).
Cuando el sistema operativo creció y no cabía en el primer disco (donde estaba el sistema de archivos raíz), trasladaron parte al segundo, donde se encontraban los directorios de inicio (por eso el punto de montaje se llamaba /usr, de user). Duplicaron allí todos los directorios necesarios del sistema operativo (/bin, /sbin, /lib, /tmp…) y colocaron archivos en el nuevo disco porque el viejo se quedó sin espacio. Luego tuvieron un tercer disco, lo montaron en el directorio /home y trasladaron allí los directorios de inicio de los usuarios, para que el sistema operativo pudiera ocupar todo el espacio restante en los dos discos, que eran tres megabytes enteros (¡vaya!).
Por supuesto, tuvieron que establecer una regla de que "cuando el sistema operativo se inicia, debe ser capaz de montar el segundo disco en el directorio /usr, así que no se deben colocar programas como mount en el segundo disco en /usr, o tendremos un problema de gallina y huevo". Así de simple. Y esto se aplicaba a Unix V6 hace 35 años.
La separación entre /bin y /usr/bin (y todos los directorios similares) es resultado de esos acontecimientos, un detalle de implementación de los años 70 que aún se copia por los burócratas. Nunca se preguntaron por la cual, simplemente lo hacían así. Esta separación dejó de tener sentido incluso antes de que Linux fuera creado, por varias razones:
- Durante el arranque se utiliza initrd o initramfs, que se encarga de problemas como "este archivo lo necesitamos antes que aquel". Así que tenemos ya hay un sistema de archivos temporal que se utiliza para arrancar todo lo demás.
- Las bibliotecas compartidas (que fueron añadidas en Unix por los chicos de Berkeley) no te permiten modificar de manera independiente el contenido de /lib y /usr/lib. Ambas partes deben coincidir entre sí, de lo contrario no funcionarán. Esto no sucedía en 1974, ya que entonces tenían cierta independencia debido al enlace estático.
- Los discos duros baratos superaron la barrera de los 100 megabytes alrededor de 1990 y aproximadamente al mismo tiempo aparecieron programas para cambiar el tamaño de las particiones (partition magic 3.0 salió en 1997).
Por supuesto, dado que existe una separación, algunas personas han ideado reglas que la justifican. Tipo, la partición raíz es necesaria para varias cositas comunes del sistema operativo, y en /usr se deben colocar tus archivos locales. O en / colocan lo que distribuye AT&T, y en /usr se agrega lo que tu distribución, IBM AIX, o Dec Ultrix, o SGI Irix añadieron, y en /usr/local se encuentran los archivos específicos de tu sistema. Luego alguien decidió que /usr/local no es un lugar adecuado para instalar nuevo software, ¡así que añadamos /opt! No me sorprendería si también apareciera /opt/local...
Por supuesto, a lo largo de 30 años, debido a esa separación, han aparecido y desaparecido varias reglas interesantes específicas de algunas distribuciones. Por ejemplo, ".../tmp se limpia al reiniciar, mientras que /usr/tmp no." (Y en Ubuntu /usr/tmp no existe en absoluto, mientras que en Gentoo, /usr/tmp es un enlace simbólico a /var/tmp, al cual se aplica esa regla, y no se limpia al reiniciar. Sí, todo esto ocurrió mucho antes de tmpfs. También sucede que el sistema de archivos raíz es de solo lectura, y entonces tampoco deberías escribir nada en /usr, sino en /var. O en / principalmente no se puede escribir, salvo en /etc, que a veces intentaron mover a /var...)
Los burócratas como la Linux Foundation (que absorbió el Free Standards Group durante la expansión hace años) se dedican gustosamente a documentar y complicar estas reglas, sin siquiera intentar entender por qué surgieron. No se dan cuenta de que Ken y Dennis simplemente trasladaron parte del sistema operativo a su directorio personal, porque el disco RK05 en el PDP-11 era demasiado pequeño.
Estoy prácticamente seguro de que busybox simplemente coloca los archivos de la misma manera que se ha hecho históricamente. No hay ninguna razón real para hacerlo de esta manera hasta ahora. Personalmente, simplemente hago de /bin, /sbin y /lib enlaces a directorios similares en /usr. Después de todo, las personas que trabajan con software embebido intentan entender y simplificar...
Fuente: habr.com
