Qual é a diferença entre .bashrc e .profile no Linux?

Laptop Linux mostrando um prompt do bash

A máquina Linux executando o Bash lê determinados arquivos quando você faz login para configurar seu ambiente shell. Mas quais arquivos são lidos e quando podem ser confusos, o que torna difícil saber se deve editar o arquivo .bashrc, o arquivo .bash_profile ou outro arquivo de configuração. Aqui está o que você deve saber.

Os diferentes tipos de casca

O ambiente que você obtém ao iniciar um shell é definido pelas configurações mantidas nos arquivos de configuração ou de perfil. Eles contêm informações que estabelecem coisas como as cores do texto, o prompt de comando, os aliases e o caminho que os arquivos executáveis ​​são pesquisados ​​quando você digita o nome de um programa.

Existem vários arquivos diferentes – em locais diferentes no sistema de arquivos – onde essas configurações são armazenadas. Mas antes de analisarmos quais arquivos são lidos quando você inicia um shell, precisamos deixar claro que tipo de shell você está usando.

Um shell de login é um shell no qual você faz login. Quando você inicializa o computador e faz login, abaixo do ambiente gráfico da área de trabalho há um shell de login. Se você se conectar a outro computador por meio de uma conexão SSH , também fará login em um shell de login.

O tipo de shell que você obtém ao abrir uma janela de terminal é um shell sem login. Você não precisa se autenticar para iniciar um shell quando já estiver logado. Shells de login e sem login são shells interativos. Você os usa digitando instruções, pressionando a tecla “Enter” e lendo as respostas na tela.

Existem também shells não interativos. Esses são os tipos de shells iniciados quando um script é executado. O script é iniciado em um novo shell. A coisa

 #!/bin/bash 

na parte superior do script indica qual shell deve ser usado.

#!/bin/bash

echo -e "Olá, mundo!\n"

Este script será executado em um shell Bash não interativo. Observe que mesmo que o shell não seja interativo, o próprio script pode ser. Este script é impresso na janela do terminal e pode aceitar facilmente a entrada do usuário.

Shells não interativos

Os shells não interativos não leem nenhum arquivo de perfil quando são iniciados. Eles herdam variáveis ​​de ambiente, mas não sabem nada sobre aliases, por exemplo, se estão definidos na linha de comando ou em um arquivo de configuração.

Recomendado:  Como desativar os atalhos de “acesso rápido” no Google Drive

Você pode testar se um shell é interativo ou não observando as opções que foram passadas para ele como parâmetros de linha de comando. Se houver um “i” nas opções, o shell é interativo. parâmetro especial Bash $- contém os parâmetros de linha de comando para o shell atual.

[[ $- == *i* ]] && echo 'Interativo' || echo 'Não interativo'

Teste Bash para identificar sessões de shell interativas e não interativas

Vamos criar um alias chamado xcque significará “gato”. Também verificaremos se temos um $PATHconjunto de variáveis.

alias xc=gato

echo $PATH

Definir um alias e ecoar o valor de $PATH

Tentaremos acessar ambos dentro deste pequeno script. Copie este script em um editor e salve-o como “int.sh”.

#!/bin/bash

xc ~/text.dat

echo "Variável=$PATH"

Precisaremos usar parachmod tornar o script executável.

chmod +x int.sh

Usando chmod para tornar um script executável

Vamos executar nosso script:

./int.sh

Executando um script que não pode acessar um alias, mas pode acessar variáveis ​​de ambiente herdadas

Em seu shell não interativo, nosso script não pode usar o alias, mas pode usar a variável de ambiente . Os shells interativos são mais interessantes no uso de arquivos de perfil e configuração.

Shells de login interativos

Existem dois tipos de shells de login interativos. Um é o shell que permite fazer login no seu computador. Em desktops, geralmente é o shell subjacente ao seu ambiente de desktop. Quer você use um ambiente de área de trabalho em janela ou lado a lado , algo deve autenticá-lo no sistema Linux e permitir que você faça login.

Em servidores sem um ambiente de desktop instalado, você faz login diretamente em um shell interativo. Você pode fazer o mesmo em um computador desktop se sair do ambiente de desktop e acessar um terminal. No GNOME você pode fazer isso com a combinação de teclas Ctrl+Alt+F3. Para voltar à sessão do GNOME, pressione a combinação de teclas Ctrl+Alt+F2. O shell ao qual você se conecta por meio de um SSH também é um shell de login.

Recomendado:  As melhores coisas que o Google anunciou no I / O 2017, em poucas palavras

O perfil e os arquivos de configuração chamados podem ser definidos usando variáveis ​​de ambiente, portanto podem variar de distribuição para distribuição. Além disso, nem todos os arquivos são usados ​​por todas as distribuições. Em uma instalação genérica do Bash, os shells de login interativos leem o arquivo “/etc/profile”. Isso contém opções de configuração de shell para todo o sistema. Se existirem, este arquivo também lê arquivos como “/etc/bash.bashrc” e “/usr/share/bash-completion/bash_completion”.

Bash então procura um arquivo “~/.bash_profile”. Se não existir, o Bash procura um arquivo “~/.bash_login”. Se esse arquivo não existir, o Bash tenta encontrar um arquivo “.profile”. Depois que um desses arquivos é encontrado e lido, o Bash para de pesquisar. Portanto, na maioria dos casos, é improvável que “~/.profile” seja lido.

Freqüentemente, você encontrará algo assim em seu “~/.bash_profile” ou, como uma espécie de proteção, em seu arquivo “~/.profile”:

# se estiver executando o bash

se [ -n "$BASH_VERSION"]; então

#inclua .bashrc se existir

se [ -f "$HOME/.bashrc"]; então

. "$HOME/.bashrc"

fi

fi

Isso verifica se o shell ativo é Bash. Se for, ele procura um arquivo “~/.bashrc” e o lê se for encontrado.

Shells interativos sem login

Um shell interativo sem login do Bash lê “/etc/bash.bashrc” e depois lê o arquivo “~/.bashrc”. Isso permite que o Bash tenha configurações específicas para todo o sistema e para o usuário.

Este comportamento pode ser alterado com sinalizadores de compilação quando o Bash é compilado, mas seria uma circunstância rara e peculiar encontrar uma versão do Bash que não origine e leia o arquivo “/etc/bash.bashrc”.

Cada vez que você abre uma janela de terminal em sua área de trabalho, esses dois arquivos são usados ​​para configurar o ambiente desse shell interativo sem login. O mesmo acontece com shells iniciados por aplicativos, como a janela do terminal no IDE Geany .

Onde você deve colocar seu código de configuração?

O melhor lugar para colocar seu código de personalização pessoal é no arquivo “~/.bashrc”. Seus aliases e funções de shell podem ser definidos em “~/.bashrc” e serão lidos e disponibilizados para você em todos os shells interativos.

Recomendado:  Como girar manualmente a tela do seu iPhone ou iPad sem inclinar

Se sua distribuição não lê seu “~/.bashrc” nos shells de login, e você gostaria que fizesse isso, adicione este código ao seu arquivo “~/.bash_profile”.

# se estiver executando o bash

se [ -n "$BASH_VERSION"]; então

#inclua .bashrc se existir

se [ -f "$HOME/.bashrc"]; então

. "$HOME/.bashrc"

fi

fi

Modularidade é melhor

Se você tiver muitos aliases ou quiser usar os mesmos aliases em várias máquinas, é melhor armazená-los em seus próprios arquivos, e o mesmo com suas funções shell. Você pode chamar esses arquivos do seu arquivo “~/.bashrc”.

Em nosso computador de teste, os aliases são armazenados em um arquivo chamado “.bash_aliases” e um arquivo chamado “.bash_functions” contém as funções do shell.

Você pode lê-los em seu arquivo “~/.bashrc” assim:

# leia meus apelidos

se [ -f ~/.bash_aliases ]; então

. ~/.bash_aliases

fi

# leia minhas funções do shell

se [ -f ~/.bash_functions ]; então

. ~/.bash_functions

fi

Isso permite que você mova facilmente seus aliases e funções entre computadores. Você só precisa adicionar as linhas acima ao arquivo “~/.bashrc” em cada computador e copiar os arquivos contendo seus aliases e funções de shell para o diretório inicial de cada computador.

Isso significa que você não precisa copiar todas as definições de “~/.bashrc” em um computador para os arquivos “~/.bashrc” em cada um dos outros computadores. Também é melhor do que copiar todo o arquivo “~/.bashrc” entre computadores, especialmente se eles estiverem executando o Bash em distribuições diferentes.

Resumindo

Os arquivos que você realmente precisa conhecer são:

  • /etc/profile : definições de configuração de todo o sistema. Usado por shells de login.
  • ~/.bash_profile : usado para armazenar configurações para usuários individuais. Usado por shells de login.
  • ~/.bashrc : Usado para armazenar configurações para usuários individuais. Usado por shells interativos sem login. Também pode ser chamado a partir do arquivo “~/.bash_profile” ou “~/.profile” para shells de login.

Um método conveniente é colocar suas configurações pessoais em “~/.bashrc” e certificar-se de que seu arquivo “~./bash_profile” chame seu arquivo “~/.bashrc”. Isso significa que suas configurações pessoais são mantidas em um único arquivo. Você obterá um ambiente de shell consistente em shells de login e sem login. Combinar isso com o armazenamento de seus aliases e funções de shell em arquivos que não são do sistema é uma solução simples e robusta.