Quando estou fazendo algo que exige que o root seja digitado dezenas de vezes seguidas, prefiro mudar minha sessão para uma sessão raiz. Nos vários tutoriais e instruções que tenho usado na Internet, vejo sudo su
, sudo su -
, sudo -i
e sudo /bin/bash
que está sendo usado para abrir uma sessão de raiz, mas eu não estou claro sobre a diferença entre estes e quando ou se o que importa diferença.
Alguém pode esclarecer isso para mim?
command-line
bash
sudo
su
Paulo
fonte
fonte
sudo -s
esudo su
.Respostas:
Para explicar isso, você precisa saber o que os programas fazem:
su
- O comandosu
é usado para alternar para outro usuário ( s bruxa u ser), mas você também pode mudar para o usuário root, invocando o comando sem parâmetros.su
solicita a senha do usuário para alternar, depois de digitar a senha que você alternou para o ambiente do usuário.sudo
-sudo
destina-se a executar um único comando com privilégios de root. Mas, ao contráriosu
, solicita a senha do usuário atual. Esse usuário deve estar no arquivo sudoers (ou em um grupo que esteja no arquivo sudoers). Por padrão, o Ubuntu "lembra" sua senha por 15 minutos, para que você não precise digitar sua senha todas as vezes.bash
- Uma interface de texto para interagir com o computador. É importante entender a diferença entre shells de login, não login, interativos e não interativos:Tipos de conchas:
Portanto, os casos são:
sudo su
Chamasudo
com o comandosu
. O Bash é chamado como shell interativo sem logon. Portanto, o bash é executado apenas.bashrc
. Você pode ver que, depois de mudar para o root, você ainda está no mesmo diretório:sudo su -
Desta vez, é um shell de login, portanto/etc/profile
,.profile
e.bashrc
é executado e você se encontrará no diretório inicial do root com o ambiente do root.sudo -i
É quase o mesmo quesudo su -
A opção -i (simular login inicial) executa o shell especificado pela entrada do banco de dados de senha do usuário de destino como um shell de login. Isso significa que os arquivos de recursos específicos de login, como.profile
,.bashrc
ou.login
serão lidos e executados pelo shell.sudo /bin/bash
Isso significa que você chamasudo
com o comando/bin/bash
./bin/bash
é iniciado como um shell sem logon para que todos os arquivos de ponto não sejam executados, mas o bash lê.bashrc
o usuário que está chamando. Seu ambiente permanece o mesmo. Sua casa não será a casa da raiz. Então você é root, mas no ambiente do usuário que está chamando.sudo -s
lê a$SHELL
variável e executa o conteúdo. Se o$SHELL
contiver/bin/bash
chamasudo /bin/bash
(veja acima).Verifica:
Para verificar se você está em um shell de logon ou não (funciona apenas no bash porque
shopt
é um comando interno):fonte
sudo
permite que um usuário permitido execute um comando como superusuário ou outro usuário . Enfim, +1 pelo seu esforço.root
sessão de usuário (vs. usarsudo
) é quando estou fazendo algo que requer uso pesado deroot
privilégios, como ao instalar algo novo ou executar uma grande reconfiguração . Estou usandosudo /bin/bash
, mas aparentemente esse método tem uma má reputação por algum motivo que não entendo.sudo -i
é sugerido. Leia aqui: ubuntuforums.org/showthread.php?t=1817402 e aqui: unix.stackexchange.com/questions/98531/...Para procurar diferenças, você pode influenciar o ambiente resultante entre diferentes invocações.
Você pode encontrar algumas diferenças "pequenas" em algumas variáveis críticas:
PATH
,LD_LIBRARY_PATH
,LD_PRELOAD
ou alguma diferença em ~ /. manipulação de dotfiles (
~/.config
).Considere também a propriedade de arquivos de log baseados em $ HOME (
~/.xsession.errors
, etc ...) ou cookies xauth (~/.Xauthority
) que os comandos geram.Experimente estes comandos:
fonte