Como posso definir um único arquivo .bashrc para vários usuários?


30

durante o meu trabalho, preciso adicionar constantemente comandos alternativos ao bashrc, a maioria desses comandos precisa ser executada por outros usuários. Existe alguma maneira que eu poderia adicionar comandos de alias para um bashrc de fonte externa?

Respostas:


40

Muitos arquivos de configuração no diretório inicial dos usuários apenas substituem / adicionam aos do /etc- por exemplo, as configurações do GIMP na página inicial dos usuários ~/.gimp-2.*, o que aumenta a configuração em todo o sistema /etc/gimp/2.0.

Portanto ~/.bashrc, você pode editar os arquivos de configuração em todo o sistema /etc/bash.bashrc (para funções / aliases ) ou /etc/profile (para itens de ambiente) - você pode obter a lista completa de man bash:

FILES
       /bin/bash
              The bash executable
       /etc/profile
              The systemwide initialization file, executed for login shells
       /etc/bash.bash_logout
              The systemwide login shell cleanup file, executed when a login shell exits
       ~/.bash_profile
              The personal initialization file, executed for login shells
       ~/.bashrc
              The individual per-interactive-shell startup file
       ~/.bash_logout
              The individual login shell cleanup file, executed when a login shell exits
       ~/.inputrc
              Individual readline initialization file

Este aviso é dado para alguns sistemas Linux nos arquivos:

# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.

Portanto, você pode editar esses arquivos, fazer backup primeiro deles ( cp /etc/bash.bashrc /etc/bash.bashrc-backuppor exemplo) ou criar um script de shell /etc/profile.d- por exemplo, você pode criar um com estes comandos (com sudo / as root):

touch /etc/profile.d/custom.sh
chmod +x /etc/profile.d/custom.sh

Em seguida, abra-o com nano /etc/profile.d/custom.sh

#!/bin/sh
alias ls='ls -lah'

E verifique se funciona, verificando se ele aparece na saída de alias- Observe que você pode precisar fazer logout / logon ou reinicializar para ver as alterações (se não desejar, executar source /etc/profileapós qualquer alteração pode funcionar)

[edit: removeu este link morto] www.thelinuxdaily.com/2010/08/setup-a-universal-user-profile-with-etcprofile-dcustom-sh/]


5
Muitas boas sugestões lá. Eu acho que há outra opção, que vale a pena mencionar também. Pode-se editar /etc/skel/.bashrcpara alterar a ~/.bashrcaparência do conteúdo dos usuários recém-criados.
kasperd

@kasperd - boa idéia (você poderia fazer uma resposta nele se você quiser)
Wilf

Na minha experiência, ~/.bash_logoute /etc/bash.bash_logoutnão funciona. :(
Paddy Landau

AFAIK alias no /etc/profile.d/vai não ser pego por certo sub-processo? Portanto, o alias está disponível apenas quando o Bash é o shell de logon?
Franklin Yu

Eu acho que alguns deles só funcionam quando é usado em, por exemplo, um TTY como o único ambiente; em um terminal de desktop, alguns deles não podem ser usados. Eu teria que testar isso para verificar isso embora e não posso no momento!
Wilf

7

Vamos para /etc/bash.bashrc

vim /etc/bash.bashrc

e faça seu apelido lá.

adicione seu apelido na última linha.

alias abc = "tanto faz"

Esse alias se tornará global para todos os usuários.

mas por razões de segurança, não recomendamos isso.

existe um profile.ddiretório que contém arquivos do ambiente do usuário

vamos para

cd /etc/profile.d/

aliases do vim

e adicione seus aliases aqui.

sem afetar os arquivos do sistema. É a maneira certa e segura de trabalhar com os arquivos do ambiente.


3

Já existe uma resposta aceita aqui, mas você pode considerar usar algum tipo de módulo de ambiente para lidar com a configuração de ambientes de usuário em todo o sistema, em vez de mexer nos arquivos em /etc/profile.d, etc. Isso é especialmente verdade se você quiser gerencie esse controle em um só lugar através de várias conchas. Lmod (em desenvolvimento muito ativo), módulos C / TCL (a solução clássica) ou Cmod (leve).


1

Não sei se estou fazendo certo, mas funciona para mim manter um diretório / home / ComunAtodos (em maiúscula e em espanhol para tornar evidente que não é um diretório nativo do linux) e colocar .bashrc, .nanorc e .bash_aliases lá. Depois, faço referência aos que estão no /etc/skel/.profile para que novos usuários aponte para eles e apenas adicione extras a usuários específicos que precisam deles.


-1

Eu sou realmente novo no sistema operacional Linux, mas fiz um esboço de um script bash que funciona para modificar todos os arquivos .bashrc dos usuários e não o arquivo de sistema /etc/.bashrc.

#!/bin/bash

X=$( cat etc/passwd | cut -f1 -d: ) #All-users

For X in /home/*/.bashrc ; do 

echo "alias ls='ls -al'" >> $X

2>/dev/null

done

source $X

exit 0

Ok, então eu sei que esse script funciona, mas eu não, se for sem falhas :) Também você pode modificá-lo para que não envolva todos os usuários, talvez você crie um arquivo para todos os usuários que precisam do arquivo .bashrc personalizado.


3
A primeira linha (onde você lê / etc / passwd) parece não fazer nada. Sua quarta linha parece um erro (e não vejo por que você deseja suprimir erros). "exit 0" é redundante. Isso requer que todos os usuários já tenham um .bashrcarquivo e sempre é anexado, independentemente de a linha já estar no arquivo.
thomasrutter

Eu estava pensando em obter os nomes de todos os usuários com essa linha? Mas agora que penso nisso, eu poderia simplesmente cortar </ etc / passwd, havia muitos nomes nessa lista, então não queria que a TI fizesse erros para aqueles que não têm o arquivo bashrc. Como você pode acrescentar apenas se a linha não existe? E você poderia escrever o script adequado para esse tipo de rask, por favor, só uso o Linux há uma semana.
Farhad Rahimi

Parece que você já possui algumas habilidades, mas este tutorial é bom para scripts de shell: shellscript.sh . Para outras questões, como anexar uma linha apenas se ela ainda não existir, sinta-se à vontade para perguntar como novas perguntas aqui.
thomasrutter
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.