Por que não consigo sudo alguns comandos? (por exemplo, vim)

Por que não consigo sudo alguns comandos? (por exemplo, vim)

Tenho acesso sudo no servidor dos meus amigos, rodando centos-6.3, mas quando tento executar alguns comandos como sudo vim /var/www/html/index.htmlrecebo um erro sudo: vim: command not found, posso, no entanto, executar sudo sue então vim /var/www/html/index.htmlfunciona conforme o esperado.

echo $PATHe sudo echo $PATHambos produzem:

/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jared/bin

sudo which vimno entanto produz:

which: no vim in (/sbin:/bin:/usr/sbin:/usr/bin)

Eu tentei adicionar

export PATH=$PATH:/usr/local/bin

ao /root/.bashrcqual corrigiu o problema ao usar, sudo sumas não apenas sudo <command>.

Como faço sudo <command>para trabalhar?

Responder1

Ao executar o sudo, muitos sistemas são configurados para limpar o ambiente de todos os valores não incluídos na lista de permissões e para redefinir a variável PATH para um valor limpo.

Você encontrará o primeiro como Defaults env_resete vários Defaults env_keep += "SOME_VARIABLE_NAME"em /etc/sudoers. A última PATHsubstituição "segura" é especificada como Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin– exclua esta linha para remover este comportamento ao sudofazer o ing.


A maneira como qual variável de ambiente é tratada é impressa quando você executa  sudo -Vcomo root.


Se não quiser se livrar desses padrões, você sempre pode especificar os programas usando seu caminho completo ( sudo /usr/local/bin/vim).

Alternativamente, você pode permitir que sua conta esteja SETENVno sudoersarquivo, por exemplo:

%wheel  ALL=(ALL)       SETENV: ALL

Isso permite que você substitua os padrões do ambiente como este: sudo PATH=$PATH which vim, já que a variável é interpretada pelo seu shell antes do comando ser executado, resultando em uma herança PATH(que provavelmente não incluirá /sbinetc.).

Responder2

sudo echo $PATH

não faz o que você pensa. $PATHé substituído pelo (seu) shellantesexecutando o comando.

Para realizar o comportamento desejado, você pode usar sudo -i.

Decara sudo:

-eu mando]

O-eu(simular login inicial) opção executa o shell especificado nosenha(5) entrada do usuário alvo como um shell de login. Isso significa que arquivos de recursos específicos de login, como .profileou, .loginserão lidos pelo shell. Se um comando for especificado, ele será passado ao shell para execução.

Responder3

Como faço sudo <command>para trabalhar?

Até você resolver o problema com os caminhos, use um nome de caminho completo

  sudo /usr/local/bin/vim /var/www/html/index.html

informação relacionada