Qual é a diferença entre ~ / .profile, ~ / .bashrc, ~ / .bash_profile, ~ / .gnomerc, / etc / bash_bashrc, / etc / screenrc…?

68

As respostas às perguntas sobre SO e askubuntu , junto com a leitura (e leitura dos cabeçalhos) $HOMEe /etc/, indicam vários arquivos que podem ser usados ​​para definir variáveis ​​de ambiente, incluindo:

  • ~/.profile
  • ~/.bashrc
  • ~/.bash_profile
  • ~/.gnomerc
  • ~/.Rprofile
  • /etc/bash_bashrc
  • /etc/profile
  • /etc/screenrc

Eu reuni esses arquivos no /etc/trabalho para todos os usuários, enquanto os arquivos $HOMEsão específicos do usuário. Também recolho que .profileé carregado no login enquanto .bashrccarregado quando /bin/bashé executado. Eu também entendo que programas diferentes têm arquivos de configurações diferentes (por exemplo, .Rprofilepara R). Mas eu gostaria de receber alguns esclarecimentos:

  • Os arquivos *rce são *profilefundamentalmente diferentes?
  • Qual é o escopo desses arquivos (por exemplo, quais arquivos são usados ​​com o Linux)
  • Existe uma hierarquia (por exemplo, .bashrcsubstitui as variáveis ​​definidas em .settings)
  • Qual é uma boa referência para essa classe de arquivos? Para as opções nesses arquivos?

Perguntas vinculadas

Abe
fonte
3
Veja a INVOCATIONseção em man bash. Veja o FHSartigo da wiki sobre sistemas de arquivos Linux. Isso lhe dará um bom começo e responderá a algumas dessas perguntas. Arquivos com um ponto anterior ( .) geralmente são específicos do usuário - eles residem no $HOMEdiretório do usuário .
3
Todos eles? Realmente?
Ignacio Vazquez-Abrams
@ IgnacioVazquez-Abrams Não estou procurando os detalhes, apenas uma descrição geral de como eles se relacionam e quando um deve ser usado sobre o outro.
Abe

Respostas:

48

A organização dos arquivos de configuração é muito menos uniforme do que suas perguntas parecem sugerir. Não há "classe", não há "hierarquia" e não há "czar de configuração" global nem comitê que decrete uma sintaxe comum ou outras generalizações limpas como as que você está procurando. Só há uma infinidade de aplicações separadas como R, bash, screene para o ambiente desktop GNOME, todos os quais têm suas próprias maneiras de fazer as coisas, então você deve olhar para a documentação de cada programa individual para responder a quaisquer específicas perguntas sobre um determinado arquivo. Se parece ad-hoc, é porque é: a maioria dos softwares Unix / Linux disponíveis foi desenvolvida para diferentes propósitos por diferentes pessoas, que realizaram configurações ligeiramente diferentes.

Para responder suas outras perguntas no sentido do sentido:

  • *rce *profilenão significa muito, então essa pergunta não pode ser realmente respondida. "rc" é apenas uma abreviação ou sufixo comumente usado para arquivos de configuração. Sua etimologia remonta aos tempos antigos (nos anos do computador) e provavelmente significa executar comandos (da runcom ). Só porque os aplicativos usam a mesma palavra não significa que eles concordam com as convenções. "profile" é um sufixo muito menos comum.

  • Defina "escopo". A maioria dos aplicativos não compartilha arquivos de configuração com outros aplicativos não relacionados. A única exceção possível é /etc/profilee .profile, que pode ser usada por várias conchas diferentes (incluindo pelo menos she bash). Existe algo chamado ambiente associado a todo processo em execução que pode conter variáveis ​​que podem afetar o comportamento desse processo. Geralmente, as variáveis ​​de ambiente são definidas pelos arquivos de configuração de shell apropriados ou talvez pelos arquivos de configuração de qualquer ambiente gráfico de área de trabalho que você esteja usando. Também existem arquivos de configuração para "bibliotecas", como .inputrcpara readline e .gtkrc*para GTK, que afetarão todos os aplicativos que usam a biblioteca.

  • Não, não há hierarquia global para arquivos de configuração. Novamente, consulte a documentação do programa específico em questão, por exemplo, o bashmanual para bash. Uma convenção geral em que você geralmente pode confiar é que as configurações do usuário $HOMEsubstituem a configuração em todo o sistema /etc. Isso geralmente é realizado lendo o arquivo do usuário após o sistema, para que as configurações posteriores substituam as anteriores. No entanto, isso não é uma garantia e, para obter respostas definitivas, consulte a documentação do programa específico em uso.

  • Não há "classe", pelo menos nenhuma geral o suficiente para abranger todos os arquivos que você listou na sua pergunta; portanto, a questão de uma referência para essa "classe" é discutível. Mais uma vez, consulte a documentação do programa específico que você está usando.

jw013
fonte
5

Eu acho que essa pergunta é muito ampla em muitos níveis, por exemplo, você está fazendo perguntas sobre pelo menos quatro programas diferentes em uma pergunta. Vou ver apenas a diferença entre os arquivos de configuração em /etce $HOME.

Unix é um sistema operacional multi-usuário, isto significa muitas pessoas diferentes podem usar um sistema, usando ssh, telnet, ou Xorg. Para fornecer uma configuração padronizada para seus usuários, você pode fornecer uma configuração em todo o sistema /etc/; isso normalmente também é usado pela sua Distribuição para fornecer uma configuração global para, por exemplo, bashou screen.

Por outro lado, alguns usuários desejam personalizar as configurações de seus programas por conta própria, como combinações de teclas, cores ou aparência. Isso é feito através do arquivo de configuração $HOME. Em resumo, /etc/fornece uma configuração geral do sistema, enquanto os arquivos de configuração em $ HOME permitem que os usuários alterem / substituam a configuração geral do sistema.

Ulrich Dangel
fonte
3

Parte da resposta vem deste post :

.bashrc é um script de shell que o Bash executa sempre que é iniciado interativamente.

Contraste .bash_profilee .profileque são executados apenas no início de um novo shell de login. (bash -l)

Você escolhe se um comando entra .bashrcvs, .bash_profiledependendo se você deseja que ele seja executado uma vez ou para cada início de shell interativo.

Stan
fonte