При использовании && и sudo для первой команды вторая команда запускается как sudo?

55

Если я запустил команду.

sudo some-command && some-other-command

Повторяется ли вторая команда с sudo previlege?

    
задан user974407 10.06.2015 в 13:32
источник

6 ответов

102

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
    
ответ дан s3lph 10.06.2015 в 13:44
источник
18

Нет. Вот некоторые примеры:

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
  • Второй использует другую оболочку.
  • Помните, что когда вы используете «или» во второй версии, вам нужно избегать тех, которые находятся в командах или параметрах этой команды (то есть. \ 'или \ "), так что это может стать очень сложным процессом.
ответ дан Rinzwind 10.06.2015 в 13:41
4

Нет, либо вы должны написать sudo дважды, либо сделать что-то вроде

sudo bash -c 'foo && bar'
    
ответ дан davidbaumann 10.06.2015 в 13:41
2

&& означает, что правосторонняя (вторая) команда будет выполняться только в том случае, если команда lest sided (first) выполнена успешно, т.е. код выхода $? равен 0 .

Две команды отличаются друг от друга и будут работать в их собственных средах, поэтому вторая команда не будет работать с привилегиями sudo .

Это позволит вам очистить:

$ sudo whoami && whoami 
root
foobar
    
ответ дан heemayl 10.06.2015 в 13:49
0

В командной строке, когда вы видите

$ command one && command two

типичным намерением является выполнение команды, следующей за & amp; & amp; только если первая команда выполнена успешно.

Выполняется ли другая команда как sudo?

абсолютно нет, это так же, как запись двух последовательных команд, это & ​​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

    
ответ дан Maythux 10.06.2015 в 13:42
0

НЕТ, и следующее было обычно очень часто.

sudo reboot && exit

Почти каждый должен был сделать это как минимум один раз

sudo apt-get update && sudo apt-get upgrade

Таким образом, это отличный вопрос интервью «mickey mouse».

Это так легко проверяется, что вопрос может быть заподозрен в упражнении по заполнению стати.

    
ответ дан mckenzm 13.06.2015 в 20:19