De acuerdo con el estándar de jerarquía del sistema de archivos, hay varios lugares que son aceptables, según la aplicación. Lo cito extensamente aquí.
bin
es la abreviatura de "binario", por supuesto-
sbin
es la abreviatura de "servidor binario", definido de otro modo como:Utilidades utilizadas para la administración del sistema (y otros comandos exclusivos de root)
-
/usr
es para datos compartibles de solo lectura, y debe poder compartirse entre varios hosts compatibles con FHS (si tiene muchas máquinas en su red y todas tienen la misma arquitectura, debería poder compartir una sola carpeta /usr con cada máquina en la red) /usr/local
es para uso del administrador del sistema al instalar software localmente (es decir, para aplicaciones instaladas solo en esta máquina, no en todas las máquinas de la red).
Tomando estos juntos:
/usr/bin
es el directorio principal de comandos ejecutables en el sistema./usr/sbin
es para cualquier binario no esencial utilizado exclusivamente por el administrador del sistema.- Los programas de administración del sistema que se requieren para la reparación del sistema, la recuperación del sistema, el montaje de /usr u otras funciones esenciales deben colocarse en
/sbin
en su lugar (es decir, las cosas a las que necesita acceder para montar/usr/sbin
entra en/sbin
) - Del mismo modo, los comandos de usuario esenciales que pueden ser necesarios antes de
/usr
está montado ir en/bin
- Todo lo que se instale solo en la máquina local debe ir en
/usr/local/bin
o/usr/local/sbin
Sin embargo, hay otro uso para /usr/local. La mayoría de las cosas que instale a través del administrador de paquetes de su distribución se colocarán en /usr; muchas personas colocan las cosas que han compilado a mano en /usr/local. Esto los mantiene fuera del camino del sistema de administración de paquetes y le permite detectar lo que instaló desde la distribución (y no necesita hacer una copia de seguridad porque puede tomarlo nuevamente) y lo que compiló a mano; también le permite ejecutar diferentes versiones al mismo tiempo (por ejemplo, /usr/bin/firefox vs /usr/local/bin/firefox).
Justo cuando pensabas que las cosas estaban resueltas, hay otro lugar, que probablemente sea el equivalente más cercano a c:\Program Files
- /opt
:
/opt
está reservado para la instalación de paquetes de software de aplicación complementarios.`
/opt
es probablemente el equivalente más cercano a c:\program files
, en el sentido de que es el único lugar en el que esperaría encontrar una aplicación con todos sus archivos juntos en una carpeta, en lugar de estar dispersos en /usr/bin
, /var
y /etc
. Por lo general, solo lo usan paquetes muy grandes, pero en este caso, dado que Netbeans quiere tener su propia carpeta, probablemente tenga más sentido colocarlo en /opt/netbeans
Realmente todo se reduce a la preferencia personal. Explicaré el mío por lo que vale.
/usr, /usr/bin suelen ser lugares para instalar el software instalado por el sistema. Cuando instalo cosas yo mismo, las instalo en uno de varios lugares:
- Si es un script o un programa pequeño que solo usaré, lo instalo en ~/bin; aquí es donde termina la mayoría de mis cosas.
- Si es algo como lo que describiste (NetBeans) con un árbol de archivos completo propio, lo instalo en /opt
- Si es un único ejecutable, lo instalo en /usr/local/bin
¿Por qué distingo entre #2 y #3? Ni idea, es solo un hábito que he desarrollado con el tiempo. Resulta que /opt generalmente termina convirtiéndose en un árbol profundo de archivos, pero solo tiene 2 o 3 'cosas' reales instaladas. En este momento, tengo instalados lampp y lotus notes en opt, 2 directorios que tienen árboles bastante grandes debajo de ellos. En /usr/local/bin, tengo 20 o 30 entradas, pero ningún subdirectorio.
No instalo cosas en /usr/bin o /usr/sbin porque me gusta mantener separadas las cosas que agrego manualmente (que no forman parte de la simple instalación desde el repositorio estándar).