.png)
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.html
recebo um erro sudo: vim: command not found
, posso, no entanto, executar sudo su
e então vim /var/www/html/index.html
funciona conforme o esperado.
echo $PATH
e sudo echo $PATH
ambos produzem:
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jared/bin
sudo which vim
no entanto produz:
which: no vim in (/sbin:/bin:/usr/sbin:/usr/bin)
Eu tentei adicionar
export PATH=$PATH:/usr/local/bin
ao /root/.bashrc
qual corrigiu o problema ao usar, sudo su
mas 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_reset
e vários Defaults env_keep += "SOME_VARIABLE_NAME"
em /etc/sudoers
. A última PATH
substituição "segura" é especificada como Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
– exclua esta linha para remover este comportamento ao sudo
fazer o ing.
A maneira como qual variável de ambiente é tratada é impressa quando você executa sudo -V
como 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 SETENV
no sudoers
arquivo, 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á /sbin
etc.).
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
.profile
ou,.login
serã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