Perfis de usuários no Linux

Alexandre Liberato
3 min readSep 30, 2020

--

Qual a diferença entre .bashrc e .profile?

Photo exibindo terminais e softwares rodando nos mesmos

TL:DR

.bashrc é executado toda vez que você abre um terminal.

.profile é executado no login e pode ter uma instrução para rodar o .bashrc.

INTRODUÇÃO

Para entendermos a diferença e qual a melhor forma de configurarmos nosso sistema primeiramente precisamos estudar os seguintes conceitos:

Imagem do shell Bash

Shell — É um programa utilizado para processar comandos e trazer os resultados do mesmo. Basicamente ele serve para interagirmos com o kernel do sistema operacional de forma mais abstrata, menos low-level.

Imagem de um terminal, Gnome-Terminal, rodando o shell Bash.
Imagem de um antigo terminal LSI (terminal físico)

Terminal — É um programa que roda um shell. Outrora eram equipamentos com capacidade mínima de processamento onde eram realizadas conexões a um computador remoto. Para diferenciar basta se lembrar que terminal indica o ponto final de algo por exemplo, no caso onde acontecem a entrada e saída dos dados para o computador.

Imagem do console de um avião

Console e CLI ou Command Line — São abstrações que indicam a utilização de um terminal+shell. No Linux console pode ainda indicar terminais, 6 por padrão, implementados diretamente pelo kernel. Podemos acessá-los usando os atalhos CTRL + ALT + F/n, exemplo o /dev/tty1 pode ser acessado com CTRL + ALT + F1, enquanto o atalhos CTRL + ALT + F7 traz você de volta para o modo gráfico.

LOGIN x INTERACTIVE x NON-INTERACTIVE

Vamos lá! Parte 2

Login Shell

É um shell usado para o login. Pode ser acessado por terminal ou ssh por exemplo. Ele executa arquivos mínimos de configuração para podermos utilizar o sistema. Outro exemplo é você acessar seu console 1 ou /dev/tty1 como nos exemplos acima.

Interactive Shell

É o shell que você executa, por exemplo após o login, como por exemplo o bash. Daí você me pergunta: “Ah mas eu não executei nada após o login, estou em um shell de login ou interativo?”, a resposta é que você está em um shell de login/interativo. Outro exemplo é abrir um novo terminal.

Non-Interactive Shell

É um shell que não tem interação com o usuário. É raro de encontrar e não convém ao nosso cenário no momento.

A DIFERENÇA ENTRE .BASHRC E .PROFILE

Esses são dois dos mais famosos arquivos de configuração do sistema que utilizamos mas existem outros, quando um login shell é invocado ele roda o /etc/profile para o ambiente atual então checa por outros três arquivos:

se o /etc/profile existe ele é executado(source)se ~/.bash_profile existe ele é executado(source)
se ~/.bash_login existe ele é executado(source)
se ~/.profile existe ele é executado(source)

Quando um deles é encontrado ele deixa de buscar pelos outros.

Já o .bashrc é executado toda vez que executamos um shell interativo. Normalmente colocamos variáveis, aliases e funções aqui.

Muitas pessoas colocam uma instrução no .profile para ler o .bashrc.

REFERÊNCIAS

https://askubuntu.com/questions/506510/what-is-the-difference-between-terminal-console-shell-and-command-line#:~:text=Shell%20is%20a%20program%20which,software%20%2C%20like%20Gnome-Terminal%20.

https://stackoverflow.com/questions/18186929/what-are-the-differences-between-a-login-shell-and-interactive-shell#:~:text=An%20interactive%20shell%20generally%20reads%20from%20and%20writes%20to%20a%20user%27s%20terminal.&text=An%20interactive%20shell%20is%20one%20which%20reads%20commands%20from%20it%27s,shell%20and%20an%20interactive%20one.

https://stackoverflow.com/questions/415403/whats-the-difference-between-bashrc-bash-profile-and-environment

--

--