Під час використання && та sudo для першої команди, чи виконується друга команда як sudo?


64

Якщо я запускаю команду.

sudo some-command && some-other-command

Чи виконується sudoтакож друга команда з перевагою?

Відповіді:


110

TL; DR: НІ


Перша команда -

sudo some-command

Друга команда -

some-other-command

Команда sudoприймає таку команду і виконує її з підвищеними привілеями. &&, Однак, не відноситься до команди і інтерпретатора, перед виконанням першої команди. Це говорить bash, щоб спочатку виконати першу команду, а за успіхом - другу.

Тож sudoне знаю про це && some-other command. Коли піднесений процес закінчується, bash приймає своє повернене значення, а потім виконує іншу команду, яка знову не знає першої.

Це можна легко продемонструвати:

$ sudo whoami && whoami
root
username

Щоб досягти того, що ви хочете, ви можете запустити підвищений удар і дозволити йому виконувати обидві команди:

$ sudo bash -c 'whoami && whoami'
root
root

Отже, обидві команди виконуються як root, оскільки весь описаний вище процес виконується в підвищеному процесі, тобто сеанс bash, розпочатий з цієї команди, який негайно завершується після завершення. І все-таки обидва whoamiне знають існування один одного.

Це не відповідає жодній меті, але для цієї демонстрації простіший спосіб - це просто зробити

sudo some-command && sudo some-other-command

29
+1 для whoamiприкладу.
Карл Н


Ця демонстрація справді класна! Треба думати про це, намагаючись навчити інших людей судо до наступного разу!
Фрагментація потрібна

20

Ні. Деякі приклади цього:

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
  • 2-й використовує іншу оболонку.
  • Майте на увазі, що при використанні 'або' у 2-й версії вам потрібно уникнути тих, що знаходяться в командах або параметрах цієї команди (тобто. \ 'Або \ "), щоб вони могли отримати складність дуже швидко.

Третій метод не працює: $ sudo -s -- whoami && whoamiдаєroot username
BartekChom

@BartekChom вибачте, що пропустив цитати на цьому
Rinzwind

sudo -s -- "whoami && whoami"Здається, команда не знайдена, більш-менш те саме, що команда "whoami && whoami". Як використовувати цю конструкцію за допомогою &&? Я бачу, що sudo -s cd ..не дає помилок на відміну від sudo cd ...
BartekChom

Я дізнався що - щось нове сьогодні: sudo bash <<"EOF"! Дякую! :-)
Fabby

4

Ні, або два рази потрібно написати судо, або зробити щось подібне

sudo bash -c 'foo && bar'

2

&&означає , що команда правобічної (другий) буде працювати тільки , тільки якщо щоб стороння команда (перший) успішний тобто код виходу $?є 0.

Дві команди відрізняються одна від одної і виконуватимуться у власних середовищах, тому друга команда не буде працювати з sudoпривілеєм.

Це дозволить вам зрозуміти:

$ sudo whoami && whoami 
root
foobar

1

НІ, і наступне колись було дуже часто макро'д.

sudo reboot && exit

Практично кожен повинен був зробити це хоча б раз

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

Таким чином, це чудове запитання про співбесіду "міккі-миші".

Це настільки легко перевіряється, що це питання може бути запідозрене в статевих вправах.


0

У командному рядку, коли бачите

$ command one && command two

типовим наміром є виконання команди, яка слідує &&, тільки якщо перша команда успішна.

Інша команда також працює як sudo?

абсолютно ні, це так само, як написання двох послідовних команд, це && не дає додаткової пільги для команди. Це просто сепаратор .

Щоб довести це, візьмемо приклад.

touch fileA fileB 

Я створив два файли fileA і fileB. Тепер я запускаю команду

sudo chown test:test fileA && chown test:test fileB

Я змінюю користувача та групи власників цих файлів на тест імені користувача та групи. Тепер перша команда повинна запускатися, а як щодо другої?

Вихід:

chown: changing ownership of `fileB': Operation not permitted

Отже команда не запускалася, оскільки вона потребує, sudoі хоча ми можемо зробити висновок, що && не є заміною другогоsudo

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.