Em um servidor ao fazer login como root, vejo .bashrc
(Ubuntu 10.10).
No meu Mac, tenho um .bash_profile
O Ubuntu sempre tem apenas um .bashrc
arquivo e não .bash_profile
? (Estou apenas confuso, então, perguntando, percebo que eles são diferentes, mas talvez haja um relacionamento de alguma forma?)
No meu servidor, quero criar um alias, devo colocá-lo .bashrc
?
E se eu quiser que esse alias seja aplicado para que todos os usuários possam usá-lo?
Respostas:
Os aliases do Bash devem aparecer nos arquivos
.bash_aliases
ou.bashrc
nos diretórios pessoais individuais. Se você deve criar aliases globais do bash, eles podem entrar/etc/bash.bashrc
, mas geralmente é melhor simplesmente adicioná-los aos arquivos.bash_aliases
ou para que sejam herdados pelos usuários recém-criados..bashrc
/etc/skel
É quase sempre errado para definir um alias em em
.profile
,.bash_profile
ou/etc/profile
.Para entender o porquê, é preciso entender em que circunstâncias os comandos de cada um desses arquivos são executados. Existem conceitos errados sobre isso, que abordarei abaixo.
Mesmo que você queira definir aliases para vários usuários, você deve estar familiarizado com a forma como eles são definidos para usuários individuais, para que você possa decidir sobre o melhor método de fazer o que precisa.
Aliases para usuários individuais
Especialmente se você usar uma GUI, a maioria de seus shells interativos provavelmente são shells sem login . Mesmo que você nunca use uma GUI, provavelmente ainda usa shells sem login com alguma frequência. Você deseja que seus aliases funcionem nessas conchas.
Especialmente se você fizer logon não graficamente em um console virtual ou via SSH , provavelmente usará shell de login algumas vezes. Portanto, você deseja que seus aliases também funcionem em shells de login interativos.
Quando um shell interativo sem login é iniciado , ele é originado
.bashrc
no diretório inicial do usuário. Por padrão no Ubuntu, as.bashrc
fontes de cada usuário.bash_aliases
, se existentes.A leitura dos comentários no padrão do Ubuntu
.bashrc
revela que se pretende oficialmente que os aliases sejam inseridos.bashrc
ou.bash_aliases
..bashrc
já contém algumas definições de alias (executegrep '^[[:blank:]]*alias' ~/.bashrc
para vê-las) e fornece conselhos explícitos sobre onde colocar novas definições:Mas e as conchas de login interativas ? Em vez de
.bashrc
, faça o login na fonte dos shells.profile
..bash_login
exista, ele será obtido..bash_profile
exista, ele será obtido.No entanto, a boa notícia é que, por padrão, no Ubuntu, os comandos também
.bashrc
serão executados em shells de logon interativo, porque o padrão.profile
verifica se o shell atual é bash (e se.bashrc
existe) e, se houver, fontes.bashrc
:Sugiro que os usuários definam novos aliases de bash
.bash_aliases
em seus diretórios pessoais (criá-lo se ele ainda não existir). Essa é uma maneira particularmente limpa e simples de tornar as definições de alias permanentes no nível por usuário.Os aliases não devem ser definidos,
.profile
pois permaneceriam indefinidos em shells sem logon. Ao contrário de grande parte do ambiente de um shell bash, os aliases não são exportados para shells filhos:Em particular, por padrão, a maioria dos ambientes de área de trabalho
.profile
é originada no logon gráfico, mas:Os aliases não devem ser definidos em
.bash_profile
(ou.bash_login
) pelo mesmo motivo, mas também por outro motivo. Ingenuamente, criar um desses arquivos e colocar apenas definições de alias impede que qualquer código.profile
seja executado!Em situações em que
.bash_profile
ou.bash_login
realmente é útil, normalmente uma fonte está.profile
em algum lugar delas, o que resolve esse problema. (Então, o único problema restante é que, assim como.profile
, definir aliases.bash_profile
ou.bash_login
não funciona corretamente.)Aliases para novos usuários individuais, automaticamente
Quando uma conta de usuário do tipo destinada a representar um ser humano real é criada, um novo diretório geralmente é criado para servir como seu diretório inicial. O conteúdo de
/etc/skel
é copiado para o diretório inicial. É assim que vários usuários começam com alguns arquivos de configuração semelhantes em seus diretórios pessoais. No Ubuntu, o que inclui.profile
,.bashrc
e alguns outros arquivos.Para alterar quais aliases são definidos para novos usuários, você pode simplesmente colocá-los
/etc/skel/.bash_aliases
(você precisará criá-lo) ou/etc/skel/.bashrc
.Se você editar um arquivo já existente,
/etc/skel
poderá fazer backup primeiro - mas não deve colocar o backup/etc/skel
, ou ele também será copiado nos diretórios pessoais de novos usuários.Essa é provavelmente a melhor maneira de adicionar novos aliases para vários usuários. Os usuários existentes podem simplesmente adicionar os aliases. Se você definir os aliases em
/etc/skel/.bash_aliases
, poderá simplesmente direcioná-los para esse arquivo, que eles poderão optar por copiar em seus diretórios pessoais (ou adicionar em seu próprio.bash_aliases
arquivo personalizado ).É trivial para um usuário definir um alias. Além disso, os aliases não são extremamente robustos ; eles trabalham apenas em circunstâncias particulares. Se você precisar criar um novo comando que funcione o tempo todo, para todos , não deverá implementar esse comando como um alias. E você não pode forçar com alias os usuários que não os desejam - eles podem simplesmente
unalias
fazê-lo.Aliases globais, para todos os usuários
Embora eu recomendo que você evite essa abordagem, você pode definir aliases no arquivo global
/etc/bash.bashrc
. Eles serão então definidos para shells interativos sem logon e para shells interativos. O motivo é que, antes que qualquer um dos arquivos no diretório inicial do usuário seja originado:/etc/profile
automaticamente./etc/bash.bashrc
automaticamente, mas/etc/profile
verifica se o shell em execução é bash (e se/etc/bash.bashrc
existir) e, se houver, fontes/etc/bash.bashrc
.Isso é análogo ao modo como o usuário padrão
.profile
origina o usuário.bashrc
se o shell for bash (conforme detalhado acima).Aqui está como é o código real para isso no padrão
/etc/profile
:Esse bloco também executa outras tarefas. Especificamente, a
if
verificação externa verifica se o shell provavelmente será interativo (verificando se o texto do prompt está vazio) e, em seguida, verifica se o shell atual é bash e as fontes,/etc/bash.bashrc
se for, e se isso não funcionar, o bash , já está pronto em/etc/bash.bashrc
.Você não deve definir aliases globais
/etc/profile
pelo mesmo motivo que os usuários não devem defini-los em seus.profile
s locais : se o fizer, eles serão definidos apenas para shells de logon e não para seus shells filhos.Por fim, observe que, diferentemente do padrão por usuário
.bashrc
, o/etc/bash.bashrc
arquivo padrão não contém nada sobre aliases. É um tanto incomum fornecer aliases aos usuários em um arquivo onde eles não podem editá-los ou desativá-los. (Claro, eles ainda podem fazer isso, substituindo suas definições em seu próprio local,.bashrc
,.bash_aliases
, ou em outro lugar.)Leitura adicional
. .bash_profile
sempre que criar um novo alias?fonte
Aqui está uma boa leitura sobre isso. ".bash_profile é executado para shells de login, enquanto .bashrc é executado para shells interativos de não login"
Portanto, para o seu alias, use .bash_profile
fonte
.bash_profile
não está correto. No Ubuntu,.profile
(que é executado para shells de login), fontes.bashrc
quando é um shell bash interativo. Assim, colocar aliases em.bashrc
(ou.bash_aliases
originados.bashrc
) os define em todos os shells bash interativos. Aliases em.bash_profile
produz esse problema , entre outros. Veja isto , aquilo , minha resposta e os~/.bashrc
comentários padrão recomendando colocar aliases lá ou dentro.bash_aliases
.