Há muitos lugares que podem conter configurações permanentes de env var no Linux, então não consigo descobrir qual é o mais correto/adequado.
- /etc/ambientes
- /etc/bash.bashrc
- /etc/perfil
- /etc/profile.d/*
- ~/.bash
- ~/.profile
....
Agora preciso definir um env-var que seja um caminho para uma base de código do meu projeto, e esse env-var deve ser compartilhado com muitos usuários do meu Debian-12.
Qual método acima devo usar?
Em outras palavras, qual método é adequado à minha solicitação?
Obrigado!
Resumindo,
/etc/profile.d/*.sh
é o local tradicional para variáveis de ambiente para todos os usuários, mas hoje em dia/etc/environment
pode abranger um pouco mais.Hoje em dia, nem todos os processos seguem o mesmo caminho de inicialização; na prática, com o GNOME como sua interface gráfica, haverá dois caminhos paralelos que possuem configurações diferentes, e um deles pode se comportar de maneira diferente dependendo se você escolheu o modo Wayland ou o modo X11 (a ser removido em breve) para GNOME.
Quando você faz login em qualquer coisa, 'pam_env' é executado como parte do PAM e carrega /etc/environment. Este seria o local mais apropriado para variáveis de ambiente de "todo o sistema" que devem ser aplicadas a todo tipo de sessão de usuário.
Se uma sessão X11 foi escolhida, o script Xsession do GDM carrega /etc/profile, /etc/xprofile, ~/.profile, ~/.xprofile (como scripts de shell 'sh' - independentemente de qual shell você normalmente usa). Então /etc/xprofile seria um bom lugar para qualquer coisa que seja inerentemente específica do X11.
Se uma sessão Wayland foi escolhida, o GDM não carrega nada, mas gnome-session fornece comportamento semelhante reiniciando-se através de seu shell de login padrão e, portanto, carregará /etc/profile, ~/.profile (ou ~/.bash_profile) se você estão usando Bash. Portanto, /etc/profile seria um bom lugar para variáveis de ambiente que se aplicam a todos os processos GUI de qualquer tipo.
Em ambos os casos, se /etc/profile estiver sendo executado, geralmente também carregará /etc/profile.d/*.sh. Alguns pacotes que precisam de uma determinada variável de ambiente fazem isso através de /etc/profile.d/.
(Se ~/.profile estiver sendo executado através do Bash, ele também carregará explicitamente ~/.bashrc; no entanto, eu geralmente não colocaria variáveis de ambiente globais no bashrc, porque no caso do X11 ~/.profile está realmente sendo executado através de / bin/sh que não é Bash no Debian.)
Ao mesmo tempo, o login faz com que um gerenciador de serviço 'systemd --user' seja iniciado de forma independente em segundo plano. Isso também chama o PAM por conta própria – incluindo pam_env – então começará com tudo o que /etc/environment possui.
O gerenciador de serviços 'systemd --user' carrega tudo de /etc/environment.d/ e ~/.config/environment.d/ (consulte 'man Environment.d') antes de iniciar seus serviços em segundo plano no "nível do usuário".
Agora, gnome-session chama 'systemd-user' e fornece as variáveis de ambiente coletadas nas etapas 1-2 (basicamente faz 'systemctl --user import-environment') e, em seguida, solicita que ele inicie o restante da GUI do GNOME. Portanto, os aplicativos GUI terão uma combinação de variáveis de ambiente das etapas 1-2 e 3-4, pois na verdade descendem do 'usuário do systemd' e não da sessão GDM/gnome.
Finalmente, se o usuário abrir um aplicativo de terminal, o shell executado nessa janela de terminal geralmente carregará /etc/bash.bashrc, ~/.bashrc (mas geralmente não os scripts de "perfil"). Portanto, qualquer coisa definida no bashrc estará disponível para janelas de terminal, mas não para o resto do sistema; é um bom lugar para colocar coisas específicas do shell (não apenas ambiente, mas também aliases e coisas assim).
Para logins SSH, o processo é um pouco mais simples, pois o 'systemd-user' não está envolvido (ele é iniciado, mas permanece em segundo plano e não está envolvido no seu shell de login).
O servidor SSH também chama 'pam_env', carregando /etc/environment.
O servidor SSH inicia seu shell de login; se for Bash, ele carregará /etc/profile (incluindo .d/*.sh) e ~/.profile. Normalmente, seu ~/.profile normalmente carrega ~/.bashrc.
Os logins do console (tty) funcionam da mesma maneira (apenas com "O processo /sbin/login" em vez de "O servidor SSH").