Por que sudo -s é melhor que sudo su?

28

Eu já vi muitos comentários aqui no Ask Ubuntu sobre preferências de uso em sudo -svez de sudo su.

Para mim, esses dois comandos fazem exatamente o mesmo. Mas por que sudo -sdeveria ser melhor?

fitojb
fonte
1
Eu acho que sudo -iou sudo sué melhor do que sudo -s, por motivos mencionados aqui: ubuntuforums.org/showpost.php?p=6188826&postcount=4 também: esta é uma possível duplicata de superuser.com/questions/29/...
organizar
Eu acho que esta questão deve ser movido para unix.stackexchange.com
IGI

Respostas:

26

Eu acho que sudo -snão é "melhor", é apenas diferente.

sudo -s

mantém seu diretório $ HOME; portanto, quando você inicia os programas, eles usam seus arquivos de configuração (e não os da raiz) etc. Desvantagem: eles também podem alterar a propriedade dos seus arquivos no diretório $ HOME, exemplo típico é o .Xauthorityarquivo, mas eu nunca tive um problema com isso.

sudo su ou sudo -i

Os programas usarão o diretório inicial da raiz e seus arquivos de configuração. Isso pode ser mais intuitivo, mas também significa que não usará nenhuma configuração que você tenha definido (aliases, histórico do bash, ...).

organizar
fonte
1
Ok, agora eu entendo a diferença. Obrigado!
Fitojb 4/10/11
1
"sudo su" não é equivalente a "sudo -i". "sudo -i" é equivalente a "sudo su -" mas "sudo su -" mantém o diretório de trabalho atual, enquanto "sudo -i" o move para a casa de raiz
Gregory Pakosz
13

Porque sudo -snão mudará suas variáveis ​​de ambiente, principalmente $HOME, as que permanecerão HOME=/home/USER. Se você usar, sudo suisso mudará para o HOME=/rootque pode ter efeitos colaterais negativos quando os programas iniciados tentam acessar o diretório pessoal do usuário.

Então, basicamente, é como sudovs gksudoao executar programas gráficos.

htorque
fonte
5

Além das diferenças já mencionadas nas variáveis ​​de ambiente, acho sudo subobo e inútil porque você está pedindo sudopara executar sucomo root e pede para executar um shell como root. Por que pedir a um programa que solicite a um programa um shell raiz, quando você pode apenas ter o primeiro programa desse shell? Isso importa em algum sentido prático? Não, eu sou apenas pedante.

psusi
fonte
Você está certo, é um pouco redundante.
Fitojb 4/10
Bem, não completamente: se você estiver usando sudo supara ser root, sim, basta ir sudo -i, por exemplo. Mas isso não ajuda quando você quer se tornar um usuário diferente: sudo su - myuser.
Hggdh 04/10
2
Há outra diferença: sudo -imudará para o /rootdiretório e sudo supermanecerá no diretório que você é.
laurent
1
@hggdh sudo -u myuser,.
psusi
3

Discordo de outras respostas ao considerar os casos em que você deseja fazer login como um usuário que não possui um shell. Esse é um caso muito comum com usuários atribuídos a serviços.

O uso de "sudo su" iniciará o shell especificado pelo usuário. No entanto, no caso de um usuário atribuído ao processo do servidor, o shell é / usr / bin / false e o log falhará. Em vez disso, você deve inserir como:

sudo -sHu <server-user>

que fará o logon e o cd no caminho inicial, mesmo se o usuário não tiver um shell atribuído

SystematicFrank
fonte