Выполнение нескольких команд с su в Bash

Здесь существуют некоторые превосходные ответы. Однако одна вещь, я думаю, была не учтена, то, как *отклоняют, отличается от других операционных систем, особенно Microsoft Windows.

Фундаментальное понятие, уже покрытое выше ", делает одну вещь, сделайте это хорошо" является столь центральным к *, отклоняют операционные системы, что это может иногда пропускаться. Все же это - эти принципы проектирования, которые делают Linux настолько гибким и мощным.

Например, Графический интерфейс пользователя (GUI) для MS Windows переплетен в ОС. Фактически невозможно установить операционную систему MS без GUI. В Linux можно легко поднять сервер или встроенную систему, которая не имеет никакого графического компонента вообще. Это может быть управляемой совершенно командной строкой и все еще быть полнофункциональным сервером.

Модульная конструкция Linux также позволяет системному администратору побеждать сервис, обновлять его и возвращать его, не перезагружая операционную систему. На самом деле в единственное время необходимо перезагрузить операционную систему Linux, когда само ядро изменяется или обновляется.

Например, Вы могли установить новый диспетчер Windows (гном, kde, какой бы ни) на Linux, и пользователь в настоящее время входил в систему, никогда не могло бы знать.

В Windows часто самые простые изменения в системе требуют перезагрузки, хотя иногда это - больше проблемы безопасности, чем фактическое техническое требование. Я утверждал бы, что это - один из основных дефектов операционных систем MS. На Linux Вы могли обновить многие модули драйвера и иметь мало или не повлиять на пользователей. В Windows Вы могли бы быть обязаны перезагружать все поле, если Вы просто устанавливаете новое приложение.

Эта модульная конструкция также дает Linux экстраординарную гибкость. Каждая система Linux может быть адаптирована для определенной задачи, которую необходимо выполнить с как можно меньше ресурсом наверху. С Windows Вы не можете выключить графический интерфейс для выполнения простого сервера HTTP. Существует объем потребляемой памяти, который принимает Windows, который создает барьер, ниже которого не могут пойти Ваши аппаратные средства. Это - основная причина, что Linux стал предпочтительной ОС для многих мобильных и встраиваемых приложений.

Я мог продолжить и на, но я надеюсь, что эти примеры помогают объяснить, почему Linux стал настолько популярным, и как он действительно отличается от той другой ОС.

10
15.02.2017, 21:46
5 ответов

Эта команда хорошо работает:

su root -c "date; ls -lh"

Но в этой команде:

su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & ; ls -lh;"

Так как Вы имеете & прежде ; поэтому Вы получаете ошибки. Попытайтесь удалить & и перевыполнение команды.

Или можно выполнить команду как это:

su root -c "(tcpdump -i wlan0 -s 1500 -w CCCCCC &); ls -lh"
14
27.01.2020, 20:01
  • 1
    Конечно, нет никакой причины добавить круглые скобки, если OP действительно действительно действительно не хочет к типу a ; между tcpdump и ls команды — просто не учитывают точки с запятой, и это будет работать. –  G-Man Says 'Reinstate Monica' 15.02.2017, 22:04

Я думаю nohup команда получит Вас, что Вы хотите также... tcpdump работающий в фоновом режиме (никакой необходимый амперсанд):

su root -c "nohup tcpdump -i wlan0 -s 1500 -w CCCCCC ; ls -lh"
1
27.01.2020, 20:01
  • 1
    Привет я думаю так. NOHUP оставляет команды, работающие в фоне даже когда пользовательское разъединение. Я не помнил это.Большое спасибо. –   04.04.2011, 18:34
  • 2
    (1) польза  It для использования nohup когда Вы команды выполнения в фоновом режиме, но это действительно не имеет никакого отношения к этому вопросу.   (2) ответ  This является неправильным — nohup отдельно не заставляет команду работать в фоновом режиме; все еще необходимо ввести & (который оставляет нас, где мы запустили с синтаксической ошибкой в команде). –  G-Man Says 'Reinstate Monica' 15.02.2017, 22:11

Использовать && разделить Ваши команды как так:

$ su -c "ls && ls"
-1
27.01.2020, 20:01
  • 1
    .. это - моя ошибка. Я хотел выполнить процесс в фоне, но я не знал об этом && для разделения команд. Спасибо –   04.04.2011, 18:35
  • 2
    && "Только выполняют вторую команду, если первое успешно выполнилось". Если Ваши первые ошибки команды, вторая не будет работать. Это обычно хорошо, но я смущался бы описывать && как просто разделитель. –  Leons 21.02.2013, 17:50
  • 3
    И, если Вы хотите работать tcpdump обработайте в фоновом режиме, && делает Вас отрицательный результат вообще. –  G-Man Says 'Reinstate Monica' 15.02.2017, 22:14

Просто чтобы добавить к отличный ответ Анубхавы :

Вы также можете использовать {} , например:

su root -c "{ tcpdump -i wlan0 -s 1500 -w CCCCCC & }; ls -lh"

{} немного больше эффективнее, чем () , поскольку не создает вспомогательную оболочку. {} действительно нуждается в пробеле после { и ; перед } , если только у нас нет и .

0
27.01.2020, 20:01

Как говорит anubhava, ваша

su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & ; ls -lh;"

команда не работает, потому что вам не разрешено иметь. &, за которым сразу же следует ;.  Вы можете увидеть это, просто введя команды непосредственно в оболочку:

  • true & true работает
  • true & ; true не работает

Если вы хотите, чтобы команда tcpdump выполнялась в фоновом режиме, удалите ;, как в

su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & ls -lh;"

; в конце тоже не нужны, но это не помешает).

2
27.01.2020, 20:01

Теги

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