Comando della scheda della shell per il comando di servizio interrotto come root

7

Sulla maggior parte dei nostri server, il completamento del tab dei nomi dei servizi dopo aver digitato il comando di servizio non funziona più, come root. Funziona bene come non-root. Questo è su Ubuntu 12.04. Non sono sicuro di come risolvere questo problema.

Dimostrare:

Il completamento della tabulazione funziona come l'utente normale zachary , che ha premuto tab per elencare i completamenti nella prima immagine:

Ma come utente root , non elenca i servizi come completamenti (solo file):

Qualsiasi aiuto sarebbe molto apprezzato.

    
posta Zachary Alex Stern 05.01.2013 - 23:18

5 risposte

4

Questo è disabilitato di default su Ubuntu.

Leggi il /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

Il completamento di Bash è tutto commentato . Apparentemente c'è una ragione per cui non sono a conoscenza (modalità di recupero single user forse?).

Il motivo del perché funziona quando fai sudo su , sudo -s , sudo bash è che in realtà non esegue login per renderti completamente root. Quando si esegue sudo su - o sudo -i , in realtà fa completamente il login come quell'utente. Qui, con l'esempio della variabile d'ambiente $HOME , più di questa differenza:

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

Ok, ho capito, tipo.

Cose che funzionano:

  • sudo -i
  • sudo su -

Cose che non funzionano:

  • sudo -s
  • sudo su
  • sudo bash

Quindi mi sembra che nel primo caso stiate creando una nuova shell di login, quindi bashrc, profile, ecc sono caricati correttamente, da ~ o da / etc / skel. In quest'ultimo caso si sta semplicemente "eseguendo bash come root" e in realtà non si caricano tutte le funzioni critiche nella shell per il completamento automatico e cose simili.

Avvertenza: la mia spiegazione potrebbe essere sbagliata al 100%. Ma il gruppo principale funziona.

    
risposta data Zachary Alex Stern 05.01.2013 - 23:44
0

Puoi eseguire i seguenti passaggi per ottenere il completamento per sudo in bash:

  1. Apri il .bashrc .
  2. Inserisci le seguenti righe e salva il file
    if [ "$PS1" ]; then
    complete -cf sudo
    fi
    Il comando complete genera elenchi di completamenti per nomi di comandi ( -c ) e nome file ( -f ) per sudo.
  3. Apri una nuova bash e digita sudo -s Scheda o qualsiasi altro comando che desideri utilizzare.
risposta data qbi 14.01.2013 - 23:58
0

Ho avuto lo stesso problema con root non con il completamento automatico. Ho provato senza successo un paio di altri modi, incluso fare casino con .bashrc e installare un paio di pacchetti. Ciò che alla fine ha funzionato per me è stato semplice come la semplice esecuzione di bash. Così fai il tuo sudo su e premi solo gli elenchi (in /root )

[email protected]:~# service<tab>
[email protected]:~# service .<tab><tab>
./             .aptitude/     .bashrc        .viminfo  
../            .bash_history  .profile  

echo $SHELL risponde /bin/bash quindi sto eseguendo bash, ma non funziona. Ora eseguo bash e la mia shell sembra sempre la stessa.

[email protected]:~# bash
[email protected]:~# service <tab><tab>
acpid                        plymouth-upstart-bridge  
apache2                      portmap  
apparmor                     portmap-wait  

Ora funziona. Tieni presente che dovrai uscire due volte per uscire dalla bash appena avviata e quindi uscire dalla sessione sudo su in modo da non lasciare un terminale root aperto.

[email protected]:~# uname -mrs
Linux 3.8.0-33-generic x86_64  
[email protected]:~# lsb_release -d
Description:    Ubuntu 12.04.3 LTS
    
risposta data Mattie 27.11.2013 - 05:50
-1

Ho avuto lo stesso problema. Quello che ho provato è:

  1. Esegui /usr/sbin/visudo come utente root
  2. Aggiungi questa riga e salva e esci:

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

  3. Apri una nuova sessione e prova a eseguire il comando ora

Questo è tutto; l'hai fatto.

    
risposta data Mitter 01.05.2014 - 09:52

Leggi altre domande sui tag