Я переключаюсь на пользователя root с помощью sudo -i
, но возможно ли передать команду для выполнения в той же самой строке? Пример: sudo -i -c "mkdir qq"
Можно использовать что-то как:
$ sudo -i /bin/bash -c 'mkdir qq && bash'
# pwd
/root
# ls -d qq
qq
первый Вы передаете /bin/bash
как Ваша оболочка, mkdir qq
как команда, Вы хотите быть выполненными и && bash
для получения оболочки с корневым доступом.
sudo
запускает команды. Просто сделайте:
sudo -i mkdir qq
Вам не нужна специальная опция, как с su
.
Как Муру говорит , типичное использование 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. Это просто пример.)