При устранении неполадок при неудачном развертывании Docker я заметил, что эта строка была в Dockerfile. Что именно делает следующая строка?
#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d
Этот фрагмент кода состоит из четырех компонентов:
1). #!/bin/sh
представляет собой «shebang», указывающий на конкретный интерпретатор, в котором выполняется последующий код. В этом случае код, который идет после shebang, отправляется Sh, который, скорее всего, является Bash (вероятно, наиболее распространенной оболочкой Linux).
2). \n
- специальный символ, определяющий новую строку.
3). exit 0
используется в сценариях, чтобы определить, как он заканчивается. Как правило, нулевой код выхода означает, что программа успешно завершилась (не всегда верно, так что имейте это в виду).
4). >
это перенаправление Linux. Есть несколько операторов, которые могут управлять Stdin, Stdout и Stderr. В этом случае результаты Stdin (слева от оператора) отправляются в файл (определяемый именем файла справа от оператора). Вот как обновляется этот конкретный файл.
Предполагая, что это дистрибутив Debian / Ubuntu, policy-rc.d
определяет, запускается / перезапускается демон, если он только что был установлен / обновлен. Это делается путем считывания кода выхода, поэтому в этом примере «0» будет означать, что автоматический запуск разрешен.
Обычно в chrooted средах этот код выхода установлен на 101, чтобы предотвратить запуск демонов. Вот полезная ссылка для получения дополнительной информации: https://people.debian.org/~hmh/invokerc.d-policyrc.d-specification.txt