Conclusão da guia Shell para o comando de serviço quebrado como raiz

7

Na maioria dos nossos servidores, a conclusão de tabulação de nomes de serviço depois de digitar o comando de serviço não funciona mais, como root. Funciona muito bem como não-raiz. Isso está no Ubuntu 12.04. Não sei como abordar a solução de problemas.

Demonstração:

A conclusão de tabulação funciona como o usuário normal zachary , que pressionou a guia para concluir as listagens na primeira imagem:

Mas como usuário root , ele não lista serviços como conclusões (somente arquivos):

Qualquer ajuda seria muito apreciada.

    
por Zachary Alex Stern 05.01.2013 / 23:18

5 respostas

4

Isso está desabilitado por padrão no Ubuntu.

Leia seu /root/.bashrc :

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
#if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
#    . /etc/bash_completion
#fi

A conclusão do Bash é comentada . Aparentemente, há uma razão para isso que eu não estou ciente de (recuperação modo de usuário único, talvez?).

A razão pela qual ele funciona quando você faz sudo su , sudo -s , sudo bash é que ele realmente não executa login para fazer você root completamente. Ao executar sudo su - ou sudo -i , ele realmente registra você como usuário. Aqui, pelo exemplo da variável de ambiente $HOME , mais dessa diferença:

gert@gert-laptop:~$ id
uid=1000(gert) gid=1000(gert) groups=1000(gert),4(adm),7(lp),24(cdrom),27(sudo),[...]
gert@gert-laptop:~$ echo $HOME
/home/gert
gert@gert-laptop:~$ sudo -s
root@gert-laptop:~# id
uid=0(root) gid=0(root) groups=0(root)
root@gert-laptop:~# echo $HOME
/home/gert
root@gert-laptop:~# exit
gert@gert-laptop:~$ sudo su -
root@gert-laptop:~# id
uid=0(root) gid=0(root) groups=0(root)
root@gert-laptop:~# echo $HOME
/root
    
por gertvdijk 15.01.2013 / 14:28
2

Ok, então eu descobri, mais ou menos.

Coisas que funcionam:

  • sudo -i
  • sudo su -


Coisas que não funcionam:

  • sudo -s
  • sudo su
  • sudo bash

Então, parece-me que, no primeiro caso, você está realmente criando um novo shell de login, então bashrc, profile, etc são carregados corretamente, de ~ ou de / etc / skel. No último caso, você está apenas "executando o bash como root" e, na verdade, não está carregando todas as funções críticas no shell para o autocomplete e coisas do gênero.

Advertência: Minha explicação pode estar 100% errada. Mas o grupo de topo trabalha.

    
por Zachary Alex Stern 05.01.2013 / 23:44
0

Você pode seguir as etapas a seguir para obter a conclusão de sudo no bash:

  1. Abra seu .bashrc .
  2. Insira as seguintes linhas e salve o arquivo
    if [ "$PS1" ]; then
    complete -cf sudo
    fi
    O comando complete gera listas de conclusões para nomes de comandos ( -c ) e nome de arquivos ( -f ) para sudo.
  3. Abra um novo bash e digite sudo -s Tab ou qualquer outro comando que você queira usar.
por qbi 14.01.2013 / 23:58
0

Eu tive o mesmo problema com a raiz que não é preenchida automaticamente. Eu tentei sem sucesso algumas outras maneiras, incluindo brincar com o .bashrc e instalar alguns pacotes. O que finalmente funcionou para mim foi tão simples como apenas correr bash. Então você faz o seu sudo su e guia apenas listas (em /root )

root@xxxxxxxx:~# service<tab>
root@xxxxxxxx:~# service .<tab><tab>
./             .aptitude/     .bashrc        .viminfo  
../            .bash_history  .profile  

echo $SHELL replies /bin/bash , então estou executando o bash, mas não está funcionando. Agora eu corro bash e meu shell parece o mesmo ainda.

root@xxxxxxxx:~# bash
root@xxxxxxxx:~# service <tab><tab>
acpid                        plymouth-upstart-bridge  
apache2                      portmap  
apparmor                     portmap-wait  

Agora está funcionando. Apenas tenha em mente que você terá que sair duas vezes para sair do bash que acabou de lançar e sair da sessão sudo su para não deixar um terminal raiz aberto.

root@xxxxxxxx:~# uname -mrs
Linux 3.8.0-33-generic x86_64  
root@xxxxxxxx:~# lsb_release -d
Description:    Ubuntu 12.04.3 LTS
    
por Mattie 27.11.2013 / 05:50
-1

Eu tive o mesmo problema. O que eu tentei é:

  1. Executar /usr/sbin/visudo como usuário root
  2. Adicione esta linha a ela e salve e saia:

    Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin

  3. Abra uma nova sessão e tente executar o comando agora

É isso aí; você fez isso.

    
por Mitter 01.05.2014 / 09:52