Qual é a diferença entre .profile e .bash_profile e por que não tenho um arquivo .profile no meu sistema?

12

Então, eu sou muito novo no Linux e instalei recentemente o Fedora 19 no meu netbook. Eu quero ter uma compreensão mais profunda do Linux e da CLI, agora estou lendo Aprenda Linux: o caminho mais difícil .

No exercício 3, o autor fornece os seguintes comandos:

  • ls -al
  • perfil de gato

Tento seguir estas instruções, mas sem sucesso. Não há arquivo .profile no meu diretório de nome de usuário, como posso ver em ls -al. Pelo que aprendi, o arquivo .bash_profile e .profile são praticamente os mesmos. A única diferença que concluí da minha pesquisa é que o .bash_profile é verificado primeiro.

O que eu não entendo é por que existem vários arquivos para a mesma função no Linux, por que o autor está usando .profile e não .bash_profile (se eu entendi corretamente .profile não será lido quando o sistema encontrar primeiro .bash_profile) e como é que eu não tenho o arquivo .profile no meu sistema?

Emiroe
fonte
Veja também unix.stackexchange.com/questions/45684/…, que responde parte da sua pergunta. Além disso, unix.stackexchange.com/questions/67940/… mostra uma das razões pelas quais esses vários arquivos podem causar confusão para itens mais avançados do que você provavelmente já está lidando.
msw

Respostas:

13

A .profiledata remonta ao shell Bourne original conhecido como sh. Desde que o shell GNU bashé (dependendo das opções) um super do shell Bourne, ambas as conchas pode usar o mesmo arquivo de inicialização. Ou seja, desde que apenas shcomandos sejam colocados.profile

Por exemplo, aliasé um comando interno válido bashmas desconhecido para sh. Portanto, se você tivesse apenas um .profileem seu diretório pessoal e colocasse uma aliasdeclaração nele, shreclamaria. Portanto, há um arquivo específico do bash que possui comandos de inicialização do shell que o bash lerá se e somente se não houver um .profilearquivo presente.

Na verdade, isso é um pouco simplista em algumas instalações, e eu não estou familiarizado com o Fedora. Em bash, /etc/profileé lido pelo shell antes de qualquer arquivo em seu diretório pessoal. Se houver um script de inicialização em todo o sistema, ele geralmente diz algo como

if there is a $HOME/.profile:
   source it
elseif bash is my shell and there is a $HOME/.bash_profile:
   source that

Por que é assim? Uma tentativa de compatibilidade através de décadas de dialetos shell. Por que o tutorial foi escrito dessa maneira? O shell Bourne não é mais usado muito mais e algumas pessoas nem sabem que existe outro shell semelhante ao Bourne que o bash. Mesmo quando a sintaxe Bourne (limitada) é usada para maior compatibilidade entre plataformas, ela geralmente é executada dashou bash no modo de compatibilidade POSIX. De fato, a fonte shell Bourne real é provavelmente um componente de direitos autorais do Unix System V, que parece ser propriedade da Novell agora, mas não tenho idéia do que estão fazendo com ela.

Para o usuário iniciante, use um $HOME/.profileou $HOME/.bash_profilemas não ambos, e você ficará bem. Como você já .bash_profiletrabalha com isso, pode haver coisas específicas do sistema necessárias para sua instalação.

msw
fonte
Obrigado! Eu acho que entendo um pouco melhor agora, ainda há muito a aprender, eu acho.
Emiroe
Muito disso é lixo histórico que você realmente não precisa saber; apenas concentre-se no último parágrafo da minha resposta. Além disso, como você é novo por aqui, pode votar e aceitar uma resposta que seja a forma mais alta de agradecimento por aqui.
msw
Sim, eu já aceitei sua resposta. Eu não esperava que alguém colocasse tanto esforço nisso, então estou muito agradecido. Aceitei sua resposta, mas não posso votar novamente, porque exige 15 de reputação e só tenho 8. Desculpe-me por isso!
Emiroe
Eu esqueci o limite de 15 repetições; você está certo.
msw
4
Bônus da história # 1 : a verdadeira concha Bourne finalmente escapou do cativeiro. O minnie.tuhs.org possui o código fonte completo da V7 (a primeira versão unix com o shell Bourne) e o heirloom.sourceforge.net possui uma versão um pouco mais recente do shell Bourne que ainda é realmente utilizável. Bônus de história # 2 : aliasé exigido pelo POSIX, portanto não há muitos por shaí que não saibam disso.