Além disso, essas variáveis sempre correspondem ao nome de usuário atualmente conectado (no meu sistema Debian)? Posso assumir a disponibilidade deles em outros sistemas Unix (como)?
Também estou curioso por que alguém usaria, em whoamivez de apenas ler qualquer uma dessas variáveis.
USERe USERNAMEsão variáveis de ambiente comuns, o que significa que, se desejar, você pode configurá-las para valores arbitrários. Apenas digite USER=xyz. Em outras palavras, mesmo se essas variáveis existirem, não há garantia de que seus valores correspondam ao nome de usuário atualmente conectado.
guarantee, eu quis dizer por padrão (ou seja, assumindo que o usuário não os alterou).
sudo whoamiesudo echo $USER
sudo echo $USER, o shell se expande $USERe depois chama sudo. Então é claro que não produz a mesma saída que whoami. Como sudo whoami, sudo sh -c 'echo $USER'normalmente produz root. Em relação ao seu comentário sobre o whoamiuso do EUID , observe que ele sudo whoamisairia rootmesmo se whoamiusado o UID. sudoconjuntos tanto EUID e UID para o comando é executado (exceto na situação muito incomum que você configurá-lo explicitamente para se comportar de outra forma). Compare sudo id -ucom sudo id -ru.
manpágina,whoamirelata o nome associado ao seu ID de usuário efetivo. O que significa que ele retornará algo diferente se você estiver usandosudoou executando um executável setuid. Se vocêsudoconfigurou, tentesudo whoamipor exemplo.