Как круглые скобки интерпретируются в командной строке?

Из Википедии:

setuid и setgid (короткий для "идентификатора пользователя аппарата после выполнения" и "идентификатора группы набора после выполнения", соответственно) [1] являются флагами прав доступа Unix, которые позволяют пользователям выполнять исполняемый файл с полномочиями владельца или группы исполняемого файла. Они часто используются, чтобы позволить пользователям на компьютерной системе запускать программы со временно поднятыми полномочиями для выполнения определенной задачи. В то время как принятый идентификатор пользователя или идентификационные обеспеченные полномочия группы не всегда поднимаются, как минимум они конкретны.

Попробуйте что-то вроде этого

stefan@linux-ulsk:/usr/bin> zypper up
Root privileges are required for updating packages.
linux-ulsk:~ # whereis zypper
zypper: /usr/bin/zypper /usr/bin/X11/zypper /usr/include/zypper /usr/share/zypper /usr/share/man/man8/zypper.8.gz
linux-ulsk:~ # chmod u+s /usr/bin/zypper
linux-ulsk:~ # exit
stefan@linux-ulsk:/usr/bin> zypper up
Retrieving repository ...

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

Будьте осторожны с setuid и setgid! Некоторая книжная кавычка:

Никогда не давайте сценарии оболочки setuid разрешение. Несколько методов для того, чтобы ниспровергать их известны.

45
02.02.2016, 08:51
2 ответа

Круглые скобки обозначают подоболочку в ударе. Заключить в кавычки man bash страница:

(list)    list  is  executed  in  a  subshell  environment (see COMMAND
          EXECUTION ENVIRONMENT below).  Variable assignments and builtin 
          commands that affect the shell's environment do not remain in 
          effect after the command completes.  The return status is the
          exit status of list.

где a list просто нормальная последовательность команд.

Это на самом деле довольно портативно и не характерно для просто bash все же. Shell POSIX спецификация Командного языка имеет следующее описание для (compound-list) синтаксис:

Выполните составной список в среде подоболочки; посмотрите Среду выполнения Shell. Переменные присвоения и встроенные команды, которые влияют на среду, не должны оставаться в силе после того, как список заканчивается.

46
27.01.2020, 19:34
  • 1
    В ударе и других оболочках...? удар –  jasonwryan 05.12.2011, 02:20
  • 2
    является тем, о котором я спрашивал... –  Steve Brown 05.12.2011, 02:24
  • 3
    Между чем различие $() и ()? –  CMCDragonkai 07.12.2015, 09:47
  • 4
    @CMCDragonkai $() замена команды, () подоболочка. Они оба команды выполнения, различие - то, что происходит с выводом. Имена намного легче искать, чем символы. См. также unix.stackexchange.com/q/213530/9537 –  jw013 07.12.2015, 20:19

Список команд, встроенный между круглыми скобками, работает как подоболочка.

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

См. Linuxtopia - глава 20. Подоболочки

12
27.01.2020, 19:34

Теги

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