¿Agregar un directorio a $ PATH en CentOS?


84

Acabamos de instalar nuestros nuevos servidores y estamos ejecutando CentOS en todos ellos. Después de instalar con éxito Ruby Enterprise Edition, ahora me gustaría agregar el /usr/lib/ruby-enterprise/bindirectorio REE / bin (ubicado en ) para que sea el intérprete de Ruby predeterminado en el servidor.

He intentado lo siguiente, que solo lo agrega a la sesión de shell actual:

export PATH=/usr/lib/ruby-enterprise/bin:$PATH

¿Cuál sería el enfoque correcto para agregar permanentemente este directorio a $ PATH para todos los usuarios ? Actualmente estoy conectado como root.

¡Gracias por adelantado!

Respuestas:


116

No es una buena idea editar /etc/profilepara cosas como esta, porque perderá todos sus cambios cada vez que CentOS publique una actualización para este archivo. Esto es exactamente para lo que /etc/profile.dsirve:

# echo 'pathmunge /usr/lib/ruby-enterprise/bin' > /etc/profile.d/ree.sh
# chmod +x /etc/profile.d/ree.sh

Inicie sesión de nuevo y disfrute de su RUTA (segura) actualizada:

# echo $PATH
/usr/lib/ruby-enterprise/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
# which ruby
/usr/lib/ruby-enterprise/bin/ruby

En lugar de volver a iniciar sesión, puede volver a cargar el perfil:

# . /etc/profile

Esto actualizará la $PATHvariable.


1
~/.profilees otra opción válida también
Zypher

44
Sí, para un solo usuario. Pero la pregunta era sobre alterar la RUTA para todos los usuarios.
Mike

2
@ Mike ¿Qué es este comando pathmunge?
Nickolai Leschov

@NickolaiLeschov Estoy bastante seguro de que solo agrega un camino a $ PATH.
Mike

@NickolaiLeschov es una función que se define en / etc / profile
CrazyPheel

11

Después de seguir el consejo de fmonk, revisé /etc/bashrc, donde noté que decía "Las cosas del medio ambiente van en / etc / profile". Procedí a mirar /etc/profile, vi esto:

pathmunge () {
    if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
       if [ "$2" = "after" ] ; then
          PATH=$PATH:$1
       else
          PATH=$1:$PATH
       fi
    fi
}

[...]

# Path manipulation
if [ "$EUID" = "0" ]; then
    pathmunge /sbin
    pathmunge /usr/sbin
    pathmunge /usr/local/sbin
fi

Para resolver mi problema, simplemente agregué pathmunge /usr/lib/ruby-enterprise/bindebajo de la declaración if. Esto resolvió mi problema.


¿Podría alguien explicar qué "$EUID" = "0"significa en este contexto?
Eli

EUID 0 significa que el usuario es root.
bbaja42 05 de

66
Deberías haber usado /etc/profile.d. Vea mi respuesta a continuación.
Mike

Considere aceptar la respuesta @MikeConigliaro como la correcta. Su camino es el correcto. Está desarrollado para funcionar de esa manera. Eche un vistazo a los archivos en la /etc/profile.d/carpeta y lo notará. Además, como dijo, una actualización del sistema podría deshacer su solución.
Caio Cunha

4

"Un shell de inicio de sesión interactivo se inicia después de un inicio de sesión exitoso, utilizando / bin / login, leyendo el archivo / etc / passwd. Esta invocación de shell normalmente lee / etc / profile y su equivalente privado ~ / .bash_profile al inicio.

Un shell interactivo sin inicio de sesión normalmente se inicia en la línea de comandos utilizando un programa de shell (por ejemplo, [prompt] $ / bin / bash) o mediante el comando / bin / su. También se inicia un shell interactivo sin inicio de sesión con un programa de terminal como xterm o konsole desde un entorno gráfico. Este tipo de invocación de shell normalmente copia el entorno principal y luego lee el archivo ~ / .bashrc del usuario para obtener instrucciones adicionales de configuración de inicio. " Http://www.linuxfromscratch.org/blfs/view/6.3/postlfs/profile.html

Por lo tanto, no pondría las variables de entorno en bashrc, porque no solo va en contra de una convención común, sino que también extrañará sus variables de bashrc al invocar un terminal desde un entorno gráfico de escritorio.

En Redhat en el /etc/profileencontré este comentario:

"Las funciones y los alias de todo el sistema deben ir en / etc / bashrc. Las variables de entorno personal y los programas de inicio deben ir a ~ / .bash_profile. Las funciones y los alias personales deben ir a ~ / .bashrc".

Entonces, si desea establecer variables de entorno en función del usuario, hágalo en el archivo .bash_profile del usuario.

Dirigiéndome a la .bash_profileleí:

"Variables de entorno personal y programas de inicio.

Los alias y funciones personales deben ir en ~ / .bashrc. Las variables de entorno de todo el sistema y los programas de inicio están en / etc / profile. Los alias y funciones de todo el sistema están en / etc / bashrc ".

Conclusión
Si solo desea que la raíz vea los programas que residen, por ejemplo, en / sbinagregaría esa ruta al .bash_profilearchivo raíz . Pero si desea que cada usuario pueda ver lo que la raíz programas específicos están instalados en su caja me gustaría poner /sbinen /etc/.profile. Ahora cada usuario puede usar la finalización de pestañas para buscar programas específicos de raíz y elevar los derechos si es necesario.

Caso especial: SSH
Cuando se inicia ssh con una línea de comandos, se inicia un shell de inicio de sesión interactivo. Pero en este caso /etc/profileno se lee. Cuando definí variables de entorno en el .bash_profilearchivo de cada usuario, funcionó con ssh.


2

LO SIENTO interpretó mal la pregunta que la siguiente respuesta es para el perfil de un USUARIO dejándolo en caso de que ayude a alguien

modificar .bash_profile

nano ~/.bash_profile

luego, en algún lugar del archivo, agregue / modifique sus rutas separadas por:

 PATH=$PATH:$HOME/bin:/your/path
 export PATH

luego recarga tu perfil

source ~/.bash_profile

o cierre sesión y vuelva a iniciar sesión

si marca RUTA, debe incluir sus rutas recién agregadas

echo $PATH

1

Puede establecer variables de entorno en un archivo .rc; para bash shells (creo que es el más común y predeterminado en CentOS) cada usuario tiene un archivo llamado .bashrc en su directorio de inicio.

Agregue el comando PATH = / usr / lib / ruby-enterprise / bin: $ PATH a este archivo para configurarlo para cualquier usuario en particular.

Para configurarlo para todos los usuarios (como usted menciona), cámbielo en / etc / bashrc (el .bashrc predeterminado en el directorio de inicio de cada usuario debe generar este archivo, pero debe verificarlo dos veces).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.