Как пройти аргументы в ядро ​​Linux `init =` BootParam?

Что касается названий (crontab) таблицы cron, (inittab) таблицы init и (fstab) таблицы файловой системы: насколько я знаю, помимо очевидной ассоциации tab с "таблицей", это означает, что они являются основными файлами для настройки этих действий.

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

Кроме того, в старые времена телетайпные терминалы были медленными.

Следует отметить, что концепции crontab, initab и fstab довольно старые в истории Unix.

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

В manpage для Vixie crontab специально упоминаются таблицы: crontab - это программа, используемая для установки, удаления или перечисления таблиц, используемых для управления демоном cron(8) в Vixie Cron.

Страница crontab(5) для ISC (старого Vixie) cron имеет название "crontab - таблицы для управления cron".

В руководствах пользователя AT&T:

  • inittab описывается как "скрипт для процесса init" в руководстве по System V;
  • mnttab описывается как "смонтированная файловая система tab" как в руководстве по System III, так и в руководстве по System V;

Интересно, что и initab, и mnttab, похоже, являются самыми старыми найденными упоминаниями *tab-файлов.

3
16.04.2018, 23:34
1 ответ

Sí, así es como tradicionalmente le dices a un sistema de inicio regular en qué estado debe iniciarse. Si está ejecutando sysv -init (o prácticamente cualquier sistema de inicio ampliamente utilizado que no sea systemd ), puede poner un número entre 1 y 5 al final de los argumentos del kernel y se iniciará en ese el nivel de ejecución (1 es siempre el modo de usuario único -, los otros están definidos por el sistema, 3 o 4 es lo que la mayoría de las distribuciones de Linux han usado convencionalmente como predeterminado ). Si está utilizando systemd, puede pasar singleo emergencyal final de los argumentos del kernel para iniciar en esos modos respectivamente.

Sin embargo, usar este mecanismo para pasar argumentos arbitrarios es un poco difícil porque el kernel hace el mínimo absoluto de análisis, lo que significa en particular que:

  • Los argumentos con espacios en blanco no se pueden pasar en absoluto, porque el núcleo no analiza las cadenas entre comillas (, es decir, 'some string'se analiza como dos argumentos 'someystring').
  • No puede hacer referencia a ninguna variable de entorno en absoluto, porque el kernel no realiza la sustitución de variables (, lo que normalmente hace el shell desde el que está ejecutando el comando incluso antes de que inicie el comando ).
  • En general, los argumentos deben poder interpretarse correctamente bajo la configuración regional POSIX C (esencialmente US ASCII ), lo que arroja la internacionalización por la ventana a menos que desee usar algo como base64 o punycode.
  • Hay un límite superior sobre la cantidad de datos que se pueden pasar en los argumentos del núcleo, pero olvidé cuál es.

Estas limitaciones combinadas son la razón por la que no puede encontrar nada en Google sobre hacer este tipo de cosas, ningún ingeniero de integración de sistemas en su sano juicio lo hace, porque es mucho más esfuerzo evitar las limitaciones anteriores que simplemente escriba un script que contenga todos los argumentos requeridos y llámelo en su lugar.

6
27.01.2020, 21:18

Теги

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