Передача команд при переключении на root

Я переключаюсь на пользователя root с помощью sudo -i, но возможно ли передать команду для выполнения в той же самой строке? Пример: sudo -i -c "mkdir qq"

1
задан 2 September 2017 в 18:25

3 ответа

Можно использовать что-то как:

$ sudo -i /bin/bash -c 'mkdir qq && bash'

# pwd
/root

# ls -d qq
qq

первый Вы передаете /bin/bash как Ваша оболочка, mkdir qq как команда, Вы хотите быть выполненными и && bash для получения оболочки с корневым доступом.

1
ответ дан 3 September 2017 в 04:25

sudo запускает команды. Просто сделайте:

sudo -i mkdir qq

Вам не нужна специальная опция, как с su.

0
ответ дан 2 September 2017 в 18:25

Как Муру говорит , типичное использование sudo - запуск только одной команды. Вам не нужно передавать флаг -c, как это было бы с большинством оболочек или командой su.

Однако, в зависимости от того, какой результат вы хотите запустить mkdir qq, вы можете также пропустить флаг -i. Если вы запускаете sudo -i без аргумента команды для запуска оболочки или с аргументом команды (sudo -i command...) для запуска одной команды, sudo -i имитирует среду, которую вы получите , если вы войдете в систему как целевой пользователь . Если целевой пользователь не указан, это пользователь root, домашний каталог которого - /root. Вход в систему как пользователь помещает вас в их домашнюю директорию, поэтому sudo -i делает это тоже, хотя только для запуска оболочки или запуска одной команды.

Таким образом, запуск sudo -i mkdir qq фактически запускает mkdir qq как root из /root. Поскольку qq является относительным путем , каталог, который создает команда, на самом деле является /root/qq, то есть каталогом с именем qq внутри каталога /root. Если это то, что вы хотите, отлично! Но если вы действительно хотите создать каталог с именем qq, где бы вы ни находились прямо сейчас, вам следует вместо этого сделать одну из следующих вещей:

  • Для создания каталога обычно нет причин, по которым вы нужна полная среда входа в систему root. Таким образом, вы можете просто сбросить флаг -i и запустить sudo mkdir qq.
  • В весьма маловероятном случае вам потребовалась среда входа в систему root для создания каталога - я не могу придумать причину, по которой вы это сделаете - тогда вы можете использовать полный путь к каталогу. Хотя я сомневаюсь, что вам это понадобится в этом случае, полезно знать, что вы используете полный путь в команде, которую вы запускаете с sudo -i, чтобы убедиться, что вы ссылаетесь на правильный файл или каталог. Например, если вашей целью было создать qq в /opt, вы могли бы запустить sudo -i mkdir /opt/qq. Опять же, хотя, для mkdir это не должно быть необходимым, просто отбросьте -i.
  • Если вам не нужно запускать команду от имени root или любого другого альтернативного пользователя, не делайте этого. Чтобы создать новый каталог там, где у вашего пользователя уже есть права на запись, лучше просто запустить mkdir qq без sudo. В частности, если в этом каталоге qq вы собираетесь установить программу мгновенного обмена сообщениями QQ для использования только вами, а не другими пользователями в системе, и вы создаете ее внутри своего домашнего каталога, то лучше не используйте sudo при установке или запуске программы. (Я не предполагаю, что это для QQ. Это просто пример.)
0
ответ дан 2 September 2017 в 18:25

Другие вопросы по тегам:

Похожие вопросы: