Заполнение оболочки вкладкой для служебной команды, разбитой как root

7

На большинстве наших серверов завершение заполнения имен служб после ввода команды службы больше не работает, как root. Он отлично работает как не-root. Это на Ubuntu 12.04. Я не уверен, как подходить к устранению неполадок.

Демонстрация:

Завершение вкладки работает как обычный пользователь zachary , который нажал вкладку, чтобы отобразить завершение в первом изображении:

Но как пользователь root , он не перечисляет службы как завершение (только файлы):

Любая помощь будет принята с благодарностью.     

задан Zachary Alex Stern 05.01.2013 в 22:18
источник

5 ответов

4

Это отключено по умолчанию на Ubuntu.

Прочитайте свой /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

Выполнение Bash завершено закомментировано . По-видимому, есть причина для этого, о котором я не знаю (возможно, режим восстановления одного пользователя?).

Причина, почему она работает, когда вы делаете sudo su , sudo -s , sudo bash , состоит в том, что она действительно не запускает login , чтобы вы полностью root. При запуске sudo su - или sudo -i он действительно полностью регистрирует вас в качестве этого пользователя. Здесь, на примере переменной окружения $HOME , больше этой разницы:

[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
    
ответ дан gertvdijk 15.01.2013 в 13:28
источник
2

Хорошо, поэтому я понял, что-то вроде.

Вещи, которые работают:

  • sudo -i
  • sudo su -


Вещи, которые не работают:

  • sudo -s
  • sudo su
  • sudo bash

Итак, мне кажется, что в первом случае вы создаете новую оболочку для входа, поэтому bashrc, profile и т. д. загружаются правильно, либо из ~, либо из / etc / skel. В последнем случае вы просто «исполняете bash как root» и фактически не загружаете все эти критические функции в оболочку для автозаполнения и т. П.

Предостережение. Мое объяснение может быть на 100% неправильным. Но верхняя группа работает.

    
ответ дан Zachary Alex Stern 05.01.2013 в 22:44
0

Вы можете выполнить следующие шаги, чтобы получить завершение для sudo в bash:

  1. Откройте .bashrc .
  2. Вставьте следующие строки и сохраните файл
    if [ "$PS1" ]; then
    complete -cf sudo
    fi
    Команда complete генерирует списки завершений для имен команд ( -c ) и имя файла ( -f ) для sudo.
  3. Откройте новый bash и введите sudo -s Tab или любую другую команду, которую вы хотите использовать.
ответ дан qbi 14.01.2013 в 22:58
0

У меня была такая же проблема с root, а не с автозаполнением. Я безуспешно пробовал пару других способов, включая возиться с .bashrc и установить пару пакетов. Что, наконец, сработало для меня, было так же просто, как просто запустить bash. Таким образом, вы делаете свои sudo su и вкладки только списков (в /root )

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

echo $SHELL отвечает /bin/bash , поэтому я запускаю bash, но он не работает. Теперь я запускаю bash , и моя оболочка выглядит одинаково.

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

Теперь он работает. Просто имейте в виду, что вам нужно удвоить выход, чтобы выйти из bash, который вы только что запустили, а затем выйти из сеанса sudo su , чтобы вы не оставили открытый корневой терминал.

[email protected]:~# uname -mrs
Linux 3.8.0-33-generic x86_64  
[email protected]:~# lsb_release -d
Description:    Ubuntu 12.04.3 LTS
    
ответ дан Mattie 27.11.2013 в 04:50
-1

У меня была та же проблема. Я пробовал:

  1. Запустите /usr/sbin/visudo как пользователь root
  2. Добавьте сюда эту строку, затем сохраните и выйдите:

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

  3. Откройте новый сеанс и попробуйте запустить команду

Вот и все; вы это сделали.

    
ответ дан Mitter 01.05.2014 в 07:52