¿Dónde debo poner mis scripts de bash?

15

Tengo algunos scripts de bash muy simples que combiné para cosas que hago regularmente. Una de ellas es ejecutar duplicidad para hacer mis tareas de respaldo. Nada inteligente, solo un montón de si ... entonces declaraciones realmente. Como esto debe ejecutarse como sudo, ¿sería una buena práctica poner mi script en / usr / bin (u otra ubicación en PATH), conocido como root.root y chmod a 700?

sombrerero
fuente
Yo diría que use gitpara controlar las versiones de sus scripts, coloque copias locales de los repositorios de git en algún lugar que le guste ~y luego enlace simbólicamente los scripts ~/bin.
edwinksl
¿Quieres decir gitcomo githuben las nubes?
WinEunuuchs2Unix
2
@ WinEunuuchs2Unix Si desea que sus scripts estén disponibles para otros usuarios, debe incluirlos /usr/local/bin. De lo contrario, yo diría que sólo hay que poner en ~/bin. Sus propios scripts en ambos directorios deben estar seguros cuando actualice.
edwinksl
2
Como arriba, colóquelos en / usr / local / bin. Solo asegúrese de que los nombres de sus scripts sean únicos y no un nombre de comando / binario de Linux existente. Yo solo agrego un número al final de cualquier script que creo, ya que no he visto ningún nombre de Linux preexistente que termine en un número. (por no decir que algunos realmente oscuros pueden ...
Doug
1
@edwinksl Casi un año después, debo decir que ~/bines el mejor lugar para la mayoría de los scripts, ya que no tiene que usarlos sudopara editarlos como lo hace cuando están almacenados /usr/local/bin.
WinEunuuchs2Unix

Respuestas:

3

Guardo mis propios scripts en /opt/scripts.

Si su script debe ser ejecutable por cada usuario del sistema, puede crear un enlace simbólico a /usr/bin.

Si solo root debe ejecutar el script, puede crear un enlace simbólico a /usr/sbin.

Comando para agregar un enlace simbólico en /usr/bin/:

ln -s /opt/scripts/<script> /usr/bin/

Puede ejecutar el script, porque /usr/bin/está en su RUTA por defecto.

SynPrime
fuente
1
Recomendaría que, en lugar de usar /usr/bincomo objetivo para el script de shell de usuario / local, sea /usr/local/bin(o /opt/bin) según el Estándar de Jerarquía del Sistema de Archivos - Wiki de Debian para evitar conflictos (la mayoría de las veces, desea que los scripts proporcionados por Ubuntu tengan prioridad).
shalomb
En la mayoría de los sistemas se /usr/local/binanula /usr/bin, ya que viene más adelante en el camino. Esto es a propósito, ya que el sistema no coloca archivos allí, por lo que puede colocar archivos allí, que DEBERÍAN anular los proporcionados por el sistema.
allo
Marqué esto como la respuesta correcta, aunque ambas respuestas parecen estar bien. La razón es que terminé echando un vistazo a los documentos de FHS y me di cuenta de que / opt está allí exactamente para este propósito. Me gusta la idea de que simplemente enlacen sym a mis scripts en / usr / local / bin. Gracias por todos los consejos.
sombrerero
17

Si ningún otro usuario que no sea usted usa estos scripts:

Entonces puedes mantenerlos adentro /home/$USER/bin. Cree la bincarpeta si no está allí y mueva los archivos allí. La carpeta bin en su hogar se agregará automáticamente a la variable de entorno PATH. El código está en .profile:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Consulte ¿Cómo agregar / home / username / bin a $ PATH?

O en algunos sistemas puede estar en .bashrc:

export PATH=${HOME}/bin/:${HOME}/.local/bin:${PATH}

Gracias, élder Geek

Si estos scripts deben ser utilizados por otros usuarios:

Entonces, /usr/local/bino /opt/binson buenas opciones. Consulte ¿Existe un lugar estándar para colocar scripts de Linux personalizados?

Espero que esto ayude

usuario68186
fuente
3

Tengo un directorio que uso para la recopilación rápida de mis herramientas locales o cosas que implemento en varias computadoras /usr/local/apollo. Hay ramas fuera de este directorio para flags, biny logs.

Para las aplicaciones que descargo e instalo fuera de los apt-getrepositorios predeterminados, se colocan en /opt/un directorio por el nombre de la aplicación, con un subdirectorio más para la versión específica de la aplicación. De esta manera, mi versión compilada de una aplicación comovlc o eclipseno conflicto con la versión distribuida.

Mi uso de /opt es la forma en que está básicamente diseñado oficialmente.

Por cierto, los directorios /usr/local/bin, /usr/local/apolloy /optsobrevive a una nueva instalación de la versión del sistema operativo se sobrescriben.

LD James
fuente
1
$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/binMe gusta el hecho de /usr/local/binque ya está en el camino una cosa menos para recordar. Me gusta su método /opt/program/version, puedo usarlo para las cosas del kernel que obtengo y compilar como EnhanceIO, donde cambian las cosas entre las versiones del kernel. ¿Es /apolloun aterrizaje lunar favorito personal o tiene significado de Ubuntu?
WinEunuuchs2Unix
¿Cuál es la diferencia entre /usr/local/biny usr/local/sbintal que este último se destruye durante las actualizaciones?
WinEunuuchs2Unix
El instalador Nukes los directorios que utiliza. Convenientemente crea /usr/localdirectorios, pero no pone nada en ninguno de ellos. Esos directorios son poblados por el usuario. Muchos programas de origen fuera de los repositorios le dan al usuario la opción de seleccionar dónde quiere que vaya la instalación. Los valores predeterminados en los archivos de configuración son /usr/local/bin. Entonces, debido a lo común que es usar esos directorios, se incluyen en la ruta del usuario de forma predeterminada. Por defecto, el sistema busca ~/bin y agrega a la ruta si existe.
LD James
¿Quiere decir que el sistema verifica ~/bindurante la instalación o cada arranque? ¿Cuál es la diferencia entre sbiny bin? Parecen coexistir, debe haber cuasi-reglas que elijas según el tipo de programa, ¿verdad?
WinEunuuchs2Unix
1
@ WinEunuuchs2Unix En la ~/binruta ... no se agrega durante la instalación. El sistema lo busca en cada inicio de sesión y lo agrega a $ PATH si existe durante el inicio de sesión. Mira las dos últimas líneas de tu ~/.profileconfiguración.
LD James