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

63

Respostas às perguntas em SO e askubuntu , além de examinar (e ler os cabeçalhos de) $HOME e /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 entendo que os arquivos em /etc/ funcionam para todos os usuários, enquanto os arquivos em $HOME são específicos do usuário. Eu também entendo que .profile é carregado no login enquanto .bashrc carregado quando /bin/bash é executado. Também entendo que programas diferentes têm arquivos de configurações diferentes (por exemplo, .Rprofile para R). Mas eu apreciaria algum esclarecimento:

  • Os arquivos *rc e *profile são fundamentalmente diferentes?
  • Qual é o escopo de tais arquivos (por exemplo, quais arquivos são comumente usados com o Linux)
  • Existe uma hierarquia (por exemplo, .bashrc sobrescreve as variáveis definidas em .settings )
  • O que é uma boa referência para essa classe de arquivos? Para as opções nesses arquivos?

Perguntas vinculadas

por Abe 13.06.2012 / 22:38

3 respostas

46

A organização dos arquivos de configuração é muito menos uniforme do que suas perguntas parecem implicar. Não há "classe", não há "hierarquia", e não existe um "czar de configuração" global nem um comitê que decida uma sintaxe comum ou outras generalizações limpas como as que você está procurando. Há apenas uma infinidade de aplicativos separados como R , bash , screen e o ambiente de área de trabalho GNOME, todos com suas próprias maneiras de fazer as coisas, portanto, você deve examinar a documentação de cada programa individual para responder qualquer específico perguntas sobre um determinado arquivo. Se parece ad-hoc, é porque é: a maioria dos softwares Unix / Linux foi desenvolvida para diferentes propósitos por pessoas diferentes, todas com configurações ligeiramente diferentes.

Para responder às suas outras perguntas pontuais:

  • *rc e *profile não significam muito, então essa pergunta não pode ser respondida. "rc" é meramente uma abreviação ou sufixo comumente usado para arquivos de configuração. Sua etimologia remonta a tempos antigos (em anos de computador) e provavelmente significa executar comandos (de runcom ). Só porque os aplicativos usam a mesma palavra não significa que eles concordam com 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/profile e .profile , que pode ser usada por vários shells diferentes (incluindo pelo menos sh e bash ). Existe algo chamado de ambiente associado a cada processo em execução que pode conter variáveis que podem afetar o comportamento do dito processo. Geralmente, as variáveis de ambiente são configuradas pelos arquivos de configuração de shell apropriados ou, talvez, pelos arquivos de configuração de qualquer ambiente de desktop gráfico que você esteja utilizando. Há também arquivos de configuração para "bibliotecas", como .inputrc para readline e .gtkrc* para GTK, que afetará todos os aplicativos que usam a biblioteca.

  • Não, não há hierarquia global para arquivos de configuração. Mais uma vez, consulte a documentação do programa específico em questão, por exemplo, o bash manual para bash . Uma convenção geral na qual você geralmente pode confiar é que as configurações do usuário em $HOME substituem a configuração de todo o sistema em /etc . Isso geralmente é feito lendo o arquivo do usuário após o sistema um, para que as configurações posteriores substituam as anteriores. No entanto, isso não é uma garantia e, para respostas definitivas, você deve consultar a documentação do programa específico que está usando.

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

por 14.06.2012 / 03:03
5

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. Eu só vou olhar para a diferença entre os arquivos de configuração em /etc e $HOME .

O Unix é um sistema operacional para vários usuários. Isso significa que 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 de todo o sistema em /etc/ . Isso geralmente também é usado por sua Distribuição para fornecer uma configuração global para, por exemplo, bash ou screen .

Por outro lado, alguns usuários querem personalizar as configurações de seus programas por conta própria, como atalhos de teclado, cores ou aparência. Isso é feito por meio do arquivo de configuração em $HOME . Portanto, em suma, /etc/ fornece configuração de todo o sistema, enquanto os arquivos de configuração no $ HOME permitem que os usuários alterem / cancelem a configuração do sistema.

    
por 14.06.2012 / 03:08
2

Parte da resposta vem de esta postagem :

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

Contraste .bash_profile e .profile que são executados apenas no início de um novo shell de login. (bash -l)

Você escolhe se um comando vai em .bashrc vs .bash_profile dependendo se você deseja que ele seja executado uma vez ou para cada início de shell interativo.

    
por 05.04.2017 / 21:23