sudo -i повертає помилку


11

Коли я намагаюся переключитися на root за допомогою sudo -iя отримую помилку /var/tmp/sclDvf3Vx: line 8: -i: command not found... Тим не менш, su -працює, яку я надалі використовуватиму. Я аж ніяк не системний адміністратор Linux, тому оточення для мене все ще досить туманне. Я думаю, мої запитання:

  1. Чому викидається помилка?
  2. Яка різниця між двома командами?
  3. Чому б ти використовував одне над іншим?

Оновлення:

Я використовую версію CentOS: випуск CentOS 6.6 (остаточний)

Ось вихід із деяких команд, яких мені запропонували запустити, в коментарях нижче.

  • type sudo : sudo is /opt/centos/devtoolset-1.1/root/usr/bin/sudo
  • sudo -V : /var/tmp/sclIU7gkA: line 8: -V: command not found
  • grep'^root:' /etc/passwd : root:x:0:0:root:/root:/bin/bash

Оновлення:

Це було додано до мого не-root користувача ~ / .bashrc деякий час назад, тому що мені була потрібна підтримка C ++ 11. Коли я коментую це, повторний ssh ​​в, я можу запустити sudo-я просто чудово, без помилок.

if [ "$(gcc -dumpversion)" != "4.7.2" ]; then 
  scl enable devtoolset-1.1 bash
fi

Ви впевнені, що -це справді (ASCII) -?
steeldriver

1
Хтось створив aliasдля вашої sudoкоманди?
garethTheRed

2
Гаразд, ви маєте локальну команду, sudoяка називається, що не є звичайною командою sudo. Зважаючи на те, що він не розуміє варіантів судо, це очевидно не стандартна річ. Або користуйтеся /usr/bin/sudoабо запитайте своїх місцевих адміністраторів (хто насправді повинен був вам розповісти про це, коли вони надавали вам судові повноваження).
Жил "ТАК - перестань бути злим"

4
Я голосую, щоб закрити це питання поза темою, оскільки це стосується якоїсь невідомої, ймовірно, домашньої програми, з якою Інтернет не може допомогти.
Жил "ТАК - перестань бути злим"

3
Я не думаю, що це взагалі вирощено в домашніх умовах, це версія набору інструментів RH Developer Tool від CentOS : people.centos.org/tru/devtools-1.1 . Імовірно, хтось в Інтернеті про це знає.
Майкл Гомер

Відповіді:


6

З коментарів та ваших подальших розслідувань виглядає, що ваш devtoolset модифікує PATH. На жаль, це включає в себе стару або зламану команду sudo.

Варто спробувати змінити включення devtoolset у ваше .bashrcподібне, а потім знову увійти в систему:

if [ "$(gcc -dumpversion)" != "4.7.2" ]; then 
  scl enable devtoolset-1.1 bash
  PATH=/usr/bin:$PATH    # We need a working sudo
fi

2

Замість того, щоб працювати над розбитою обгорткою судо SCL, я просто відключив її.

echo >> /opt/rh/devtoolset-2/root/usr/bin/sudo
chmod -x /opt/rh/devtoolset-2/root/usr/bin/sudo

Додавання нового рядка в кінці файлу гарантує, що він не буде перезаписаний наступними оновленнями Yum, і тоді я просто зробить його невиконаним.

Я встановив набір інструментів для розробників, щоб отримати сучасні версії gcc та c ++ на RHEL 6, і у мене не було проблем зі складанням коду без фальшивого sudo в суміші.


1

У мене були подібні проблеми із sudo -Eпрапором після використання devtoolset-4. У -Eцьому випадку ви не повинні додавати прапор, оскільки він доданий у /opt/rh/devtoolset-4/root/usr/bin/sudoскрипті для обгортки, ось його вміст:

#! /bin/sh
# TODO: parse & pass-through sudo options from $@
sudo_options="-E"

for arg in "$@"
do
   case "$arg" in
    *\'*)
      arg= ;;
   esac
   cmd_options="$cmd_options '$arg'" 
done
exec /usr/bin/sudo $sudo_options LD_LIBRARY_PATH=$LD_LIBRARY_PATH PATH=$PATH scl enable devtoolset-4 "$cmd_options"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.