En un servidor cuando inicio sesión como root, veo .bashrc
(Ubuntu 10.10).
En mi Mac tengo un .bash_profile
¿Ubuntu siempre tiene solo un .bashrc
archivo y no .bash_profile
? (Solo estoy confundido, así que preguntando, me doy cuenta de que son diferentes o / s, pero ¿tal vez hay una relación de alguna manera?)
En mi servidor, quiero crear un alias, ¿debería ponerlo .bashrc
?
¿Qué sucede si deseo que se aplique este alias para que todos los usuarios puedan usarlo?
Respuestas:
Los alias de bash deben ir en los archivos
.bash_aliases
o.bashrc
en directorios de inicio individuales. Si debe crear alias bash globales, pueden entrar/etc/bash.bashrc
, pero a menudo es mejor simplemente agregarlos a los archivos.bash_aliases
o para que sean heredados por los usuarios recién creados..bashrc
/etc/skel
Es casi siempre malo para definir un alias en en
.profile
,.bash_profile
o/etc/profile
.Para entender por qué, uno debe entender bajo qué circunstancias se ejecutan los comandos de cada uno de estos archivos . Hay ideas erróneas sobre esto, que abordo a continuación.
Aunque desee definir alias para varios usuarios, debe estar familiarizado con cómo se definen para usuarios individuales, de modo que pueda decidir el mejor método para hacer lo que necesita.
Alias para usuarios individuales
Especialmente si usa una GUI, la mayoría de sus shells interactivos son probablemente shells sin inicio de sesión . Incluso si nunca usa una GUI, probablemente todavía use shells sin inicio de sesión con cierta frecuencia. Querrás que tus alias funcionen en estos shells.
Especialmente si alguna vez inicia sesión de forma no gráfica en una consola virtual o mediante SSH , es probable que use shells de inicio de sesión algunas veces. Por lo tanto, también querrá que sus alias funcionen en shells de inicio de sesión interactivos.
Cuando se inicia un shell interactivo sin inicio de sesión , se origina
.bashrc
en el directorio de inicio del usuario. Por defecto en Ubuntu, cada usuario.bashrc
se abastece.bash_aliases
, si existe.La lectura de los comentarios en el valor predeterminado de Ubuntu
.bashrc
revela que oficialmente se pretende que los alias entren.bashrc
o.bash_aliases
..bashrc
ya contiene algunas definiciones de alias (ejecutargrep '^[[:blank:]]*alias' ~/.bashrc
para verlas) y brinda consejos explícitos sobre dónde colocar nuevas definiciones de este tipo:¿Pero qué pasa con los shells de inicio de sesión interactivos ? En lugar de
.bashrc
, iniciar sesión fuente de shells.profile
..bash_login
exista, entonces se obtiene en su lugar..bash_profile
exista, entonces se obtiene en su lugar.Sin embargo, la buena noticia es que por defecto en Ubuntu, los comandos en
.bashrc
serán también se ejecutan en shells de entrada interactivos debido a las predeterminadas.profile
comprueba si el shell actual es bash (y si.bashrc
existe), y si es así, las fuentes.bashrc
:Sugiero que los usuarios definan nuevos alias bash
.bash_aliases
en sus directorios de inicio (creándolo si aún no existe). Esta es una forma particularmente limpia y simple de hacer que las definiciones de alias sean permanentes en el nivel por usuario.Los alias no deben definirse
.profile
porque permanecerían indefinidos en shells sin inicio de sesión. A diferencia de gran parte del entorno de un bash shell, los alias no se exportan a los shells secundarios:En particular, de manera predeterminada, la mayoría de los entornos de escritorio
.profile
se originan en el inicio de sesión gráfico, pero:Los alias no deben definirse en
.bash_profile
(o.bash_login
) por la misma razón, sino también por otra razón. ¡Crear ingenuamente uno de estos archivos y poner solo definiciones de alias evita que se.profile
ejecute cualquiera de los códigos !En situaciones en las que
.bash_profile
o.bash_login
realmente es útil, generalmente uno se.profile
encuentra en algún lugar de ellas, lo que resuelve ese problema. (Entonces, el único problema que queda es que, al igual que con.profile
, definir alias en.bash_profile
o.bash_login
no funciona correctamente).Alias para nuevos usuarios individuales, automáticamente
Cuando se crea una cuenta de usuario del tipo destinado a representar a un ser humano real, generalmente se crea un nuevo directorio para que sirva como su directorio de inicio. El contenido de
/etc/skel
se copia a su directorio de inicio. Así es como varios usuarios comienzan con algunos archivos de configuración similares en sus directorios de inicio. En Ubuntu, esto incluye.profile
,.bashrc
y algunos otros archivos.Para cambiar qué alias se definen para los nuevos usuarios, simplemente puede ponerlos
/etc/skel/.bash_aliases
(tendrá que crearlos) o/etc/skel/.bashrc
.Si edita un archivo ya existente,
/etc/skel
es posible que desee hacer una copia de seguridad primero, pero no debe colocar la copia de seguridad/etc/skel
, o también se copiará en los directorios principales de los nuevos usuarios.Esta es probablemente la mejor forma de agregar nuevos alias para múltiples usuarios. Los usuarios existentes pueden simplemente agregar los alias ellos mismos. Si define los alias en
/etc/skel/.bash_aliases
, simplemente puede dirigirlos a ese archivo, que pueden elegir copiar en sus directorios de inicio (o agregar a su propio.bash_aliases
archivo personalizado ).Es trivial que un usuario defina un alias. Además, los alias no son extremadamente robustos ; funcionan solo en circunstancias particulares. Si necesita crear un nuevo comando que funcione todo el tiempo, para todos , no debe implementar ese comando como un alias. Y no puede forzar con éxito los alias a los usuarios que no los quieren, simplemente pueden
unalias
usarlos.Alias globales, para todos los usuarios
Aunque le aconsejo que evite este enfoque, puede definir alias en el archivo global
/etc/bash.bashrc
. Luego se definirán tanto para shells interactivos sin inicio de sesión como para shells interactivos de inicio de sesión. El motivo es que, antes de que se obtenga cualquiera de los archivos del directorio de inicio del usuario:/etc/profile
automáticamente./etc/bash.bashrc
automáticamente, pero/etc/profile
verifica si el shell en ejecución es bash (y si/etc/bash.bashrc
existe) y, de ser así, las fuentes/etc/bash.bashrc
.Esto es análogo a cómo el usuario predeterminado obtiene el usuario
.profile
por usuario.bashrc
si el shell es bash (como se detalla anteriormente).Así es como se ve el código real para esto en el valor predeterminado
/etc/profile
:Ese bloque también realiza otras tareas. Específicamente, el externo
if
verifica si es probable que el shell sea interactivo (verificando que el texto de solicitud no esté vacío), luego verifica si el shell actual es bash y fuentes/etc/bash.bashrc
si lo es, y si no funciona, para bash , ya está hecho en/etc/bash.bashrc
.Usted debe no definir alias globales en
/etc/profile
los mismos usuarios razón no les deben definir en sus locales.profile
s: si lo hace, que se definirán sólo para shells de entrada, y no por sus conchas niño.Finalmente, tenga en cuenta que, a diferencia del predeterminado por usuario
.bashrc
, el/etc/bash.bashrc
archivo predeterminado no contiene nada sobre alias. Es algo inusual dar a los usuarios alias en un archivo donde no pueden editarlos o deshabilitarlos. (Por supuesto, todavía pueden hacer eso, anulando sus definiciones en su propio local de.bashrc
,.bash_aliases
o en otro lugar).Otras lecturas
. .bash_profile
cada vez que creo un nuevo alias?fuente
Aquí hay una buena lectura al respecto. ".bash_profile se ejecuta para shells de inicio de sesión, mientras que .bashrc se ejecuta para shells interactivos sin inicio de sesión"
Entonces, para su alias, use .bash_profile
fuente
.bash_profile
no es correcto. En Ubuntu,.profile
(que se ejecuta para shells de inicio de sesión) se origina.bashrc
cuando se trata de un bash shell interactivo. Por lo tanto, poner alias.bashrc
(o.bash_aliases
fuentes.bashrc
) los define en todos los shells interactivos de bash. Los alias en los.bash_profile
rendimientos de este problema , entre otros. Ver este , que , mi respuesta , y el valor predeterminado~/.bashrc
comentarios que recomiendan poner alias allí o en 's.bash_aliases
.