Если я запустил команду.
sudo some-command && some-other-command
Повторяется ли вторая команда с sudo
previlege?
Если я запустил команду.
sudo some-command && some-other-command
Повторяется ли вторая команда с sudo
previlege?
TL; DR: NO
Первая команда
sudo some-command
Вторая команда
some-other-command
Команда sudo
принимает следующую команду и выполняет ее с повышенными привилегиями. Однако &&
не принадлежит команде и интерпретируется оболочкой перед выполнением первой команды. Он сообщает bash, чтобы сначала выполнить первую команду, а при успешном - вторую.
Таким образом, sudo
не знает о && some-other command
. Когда возвышенный процесс завершается, bash берет свое возвращаемое значение, а затем выполняет другую команду, которая снова не знает первого.
Это можно легко продемонстрировать:
$ sudo whoami && whoami
root
username
Чтобы достичь того, чего вы хотите, вы можете запустить повышенную настройку bash и позволить ей выполнять обе команды:
$ sudo bash -c 'whoami && whoami'
root
root
Итак, обе команды выполняются как root, так как весь процесс, описанный выше, выполняется в процессе с повышенным приоритетом, т. е. сеанс bash начинается с этой команды, которая сразу же завершается после завершения. Тем не менее, оба whoami
s не знают о существовании друг друга.
Это не подходит для каких-либо целей, но для этой демонстрации проще всего сделать
sudo some-command && sudo some-other-command
Нет. Вот некоторые примеры:
sudo some-command && sudo some-other-command
sudo sh -c "some-command && some-other-command"
, или если вы хотите выполнить команды гнезда:
sudo bash <<"EOF"
some-command
some-other-command
sudo bash <<"EOF2"
some-command2
some-other-command2
EOF2
EOF
Нет, либо вы должны написать sudo дважды, либо сделать что-то вроде
sudo bash -c 'foo && bar'
&&
означает, что правосторонняя (вторая) команда будет выполняться только в том случае, если команда lest sided (first) выполнена успешно, т.е. код выхода $?
равен 0
. Р>
Две команды отличаются друг от друга и будут работать в их собственных средах, поэтому вторая команда не будет работать с привилегиями sudo
.
Это позволит вам очистить:
$ sudo whoami && whoami
root
foobar
В командной строке, когда вы видите
$ command one && command two
типичным намерением является выполнение команды, следующей за & amp; & amp; только если первая команда выполнена успешно. Р>
абсолютно нет, это так же, как запись двух последовательных команд, это & amp; & amp; не дает никаких дополнительных привилегий команде. Это всего лишь отдельный .
Чтобы доказать, что возьмем пример.
touch fileA fileB
Я создал два файла fileA и fileB. Теперь я запустил команду
sudo chown test:test fileA && chown test:test fileB
Я меняю владельца и группы этих файлов на проверку имени пользователя и группы. Теперь первая команда должна запускаться, а другая?
Вывод:
chown: changing ownership of 'fileB': Operation not permitted
Таким образом, команда не запускалась, так как ей требуется sudo
, и хотя мы можем заключить, что & amp; & amp; не является заменой второго sudo
НЕТ, и следующее было обычно очень часто.
sudo reboot && exit
Почти каждый должен был сделать это как минимум один раз
sudo apt-get update && sudo apt-get upgrade
Таким образом, это отличный вопрос интервью «mickey mouse».
Это так легко проверяется, что вопрос может быть заподозрен в упражнении по заполнению стати.