mount -v
включает тип файловой системы в его большее количество подробного списка выводов.
Из Соляриса 10 систем здесь:
/dev/dsk/c1t0d0s0 on / type ufs read/write/setuid/devices/intr/largefiles/logging/xattr/onerror=panic/dev=700040 on Tue May 1 11:33:55 2012
/devices on /devices type devfs read/write/setuid/devices/dev=4380000 on Tue May 1 11:33:43 2012
ctfs on /system/contract type ctfs read/write/setuid/devices/dev=43c0001 on Tue May 1 11:33:43 2012
proc on /proc type proc read/write/setuid/devices/dev=4400000 on Tue May 1 11:33:43 2012
mnttab on /etc/mnttab type mntfs read/write/setuid/devices/dev=4440001 on Tue May 1 11:33:43 2012
swap on /etc/svc/volatile type tmpfs read/write/setuid/devices/xattr/dev=4480001 on Tue May 1 11:33:43 2012
/dev/dsk/c1t0d0p0:boot on /boot type pcfs read/write/setuid/devices/nohidden/nofoldcase/dev=723050 on Tue May 1 11:33:54 2012
init
сообщит вам только небольшая часть истории. В мире Linux существует своего рода близорукость. Люди думают, что они используют вещь под названием «System 5 init
», и это одновременно и традиционный, и лучший способ начать. На самом деле это не так.
Во-первых, традиция на самом деле не такая, как говорят такие люди. System 5 init
и System 5 rc
относятся к AT&T UNIX System 5, которая была почти так же далека от первого UNIX, как мы сейчас (скажем) после первой версии Linux-Mandrake .
1-е издание UNIX имеет только init
. У него не было RC
. Ассемблер 1-го издания init
(, код которого был восстановлен и предоставлен Warren Toomey et al.) непосредственно порождал и повторно порождал 12 getty
процессов, монтировал 3 аппаратные файловые системы из встроенной таблицы и напрямую запускал программу из домашнего каталога пользователя с именем mel
. Таблица getty
также была непосредственно в образе программы.
Прошло еще одно десятилетие после UNIX System 5, когда появилась так называемая «традиционная» система инициализации Linux. В 1992 году Микель ван Смуренбург (переписал) написал Linux init
+ rc
и связанные с ними инструменты, которые теперь называют «System 5 init
", хотя на самом деле это не программное обеспечение из UNIX System 5 (и не только init
).
Система 5 init
/ rc
- не лучшее место для начала, и даже если добавить информацию о systemd, это не покрывает половину того, что нужно знать . Только за последние два десятилетия было проделано много работы в области проектирования системы инициализации (для Linux и BSD). Обсуждались, принимались, проектировались, внедрялись и применялись всевозможные инженерные решения. Коммерческие Unices тоже немало сделали.
Вот неполный список некоторых из основных систем инициализации , кроме этих двух, и один или два из их (нескольких) основных моментов:
init
. getty
и сбор зомби) в отдельный диспетчер служб, а только ] обработка специфичных для операционной системы "API" устройств / символических ссылок / каталогов и системных событий. /bin/rc.init
, задача которого - запускать программы, монтировать файловую систему и т. Д. Для этого вы можете использовать что-то вроде minirc . Более того, около 10 лет назад среди пользователей daemontools и других было обсуждение использования svscan
в качестве процесса №1, что привело к таким проектам, как svscan Пола Джарка в качестве исследования процесса 1 , идеи Геррита Пейпа и svscan как процесс 1 Лорана Берко.
Это подводит нас к тому, что делают программы №1.
Представления о том, какой процесс №1 «предполагается» делать, по своей природе субъективны. Значимым объективным критерием проектирования является то, что процесс №1 как минимум должен делать . Ядро предъявляет к нему несколько требований. И всегда есть какие-то специфические для операционной системы вещи разного рода, которые она должна делать. Когда дело доходит до того, что процесс №1 выполнял традиционно ,тогда мы еще не достигли этого минимума и никогда не были на самом деле.
Есть несколько вещей, которые различные ядра операционной системы и другие программы требуют от процесса №1, от которых невозможно избежать.
Люди скажут вам, что fork ()
создание вещей и выполнение роли родительского элемента для осиротевших процессов является основной функцией процесса №1. Как ни странно, это неправда. Работа с потерянными процессами (с недавними ядрами Linux, как объяснено на https://unix.stackexchange.com/a/177361/5132 ) является частью системы, которую можно в значительной степени исключить из процесса №1. в другие процессы, такие как выделенный диспетчер служб . Все это менеджеры служб, которые выполняются вместе с процессом №1:
srcmstr
, Контроллер системных ресурсов запускает vdir
из runit Дэниела Дж. Бернштейна
из daemontools, svscan Адама Сэмпсона
из freedt , svscan Брюса Гюнтера
из daemontools-encore и s6-svscan
от s6 perpd
от perp s6-svscan
от perp
от nosh Точно так же, как объяснено на https://superuser.com/a/888936/38062 , вся идея / dev / initctl
не должна быть где-нибудь возле процесса №1. По иронии судьбы, именно высокоцентрализованная система systemd демонстрирует, что ее можно исключить из процесса №1.
И наоборот, обязательными вещами для init
, которые люди обычно забывают в своих нестандартных проектах, являются такие вещи, как обработка SIGINT
, SIGPWR
, SIGWINCH
и т.д., отправленные ядром и выполняющие различные запросы на изменение состояния системы, отправленные из программ, которые «знают», что определенные сигналы для процесса №1 означают определенные вещи. (Например: как объяснено на https://unix.stackexchange.com/a/196471/5132 , инструменты BSD «знают», что SIGUSR1
имеет особое значение.)
Существуют также однократные задачи инициализации и завершения, от которых невозможно избавиться или которые будут сильно страдать от невыполнения, такие как монтирование "API" файловых систем или очистка кеша файловой системы.
Основы работы с файловыми системами «API» мало отличаются от работы init
в 1-й редакции UNIX: у одного есть список информации, встроенной в программу, а у другого просто mount ( )
- все записи в списке. Вы найдете этот механизм в самых разных системах, от BSD (sic!) init
, через системный менеджер nosh
до systemd.
Как вы заметили, init = / bin / sh
не монтирует файловые системы «API», аварийно завершает работу без очистка кеша при вводе exit
( https: //unix.stackexchange.com / a / 195978/5132 ), и, как правило, предоставляет (суперпользователю) возможность вручную выполнять действия, которые делают систему минимально пригодной для использования.
Чтобы увидеть, что на самом деле нет другого выбора, кроме как делать в программах процесса №1, и, таким образом, направить вас на хороший курс для достижения заявленной цели дизайна, лучше всего посмотреть на совпадения в работе runit Геррита Папе , Minit Феликса фон Лейтнера и программу system-manager
из пакета nosh. Первые две демонстрируют две попытки быть минималистичными, но все же справляются с вещами, которых невозможно избежать.
Последний вариант полезен, как я полагаю, для его обширного ручного ввода в программу system-manager
, в которой подробно описано, какие именно файловые системы «API» смонтированы, какие задачи инициализации выполняются и какие сигналы используются. обработано; в системе, в которой по замыслу системный менеджер просто порождает три другие вещи (диспетчер служб, сопутствующий регистратор и программу для запуска изменений состояния) и выполняет только неизбежное в процессе №1.
Абсолютный минимум, голый минимум, который INIT должен сделать, это запускать хотя бы одну другую программу и не выходить. Если init выходит из аварии системы. Я полагаю, что даже запуск одной другой программы не является строго необходимой, но если вы этого не сделаете, это будет нести ответственность за то, что ожидается, что система будет делать, или она не будет очень полезна.
Система V init на Debian (существуют другие варианты и вариации), выполняет следующее:
/etc/rCx.d/s*
в буквенно-цифровом порядке. Где x
- проговел. Эти скрипты должны настроить пробег. Типичная настройка начинает демоны и выполняет задачи настройки для этого уровня запуска. Это одноразовое, сделанное при входе на протяжку. / etc / inittab
, что нужно активно активно во время этого уровня запуска. Если эти демоны перестают работать, он перезапускает их. Пока у вас может быть какой-либо демон, который вы хотите, чтобы управлять init
, как минимум, вы хотите, чтобы несколько Getty
, чтобы вы могли войти. Getty
выходит после Войти завершено, то init
перезагружается, обеспечивая свежий вход в систему. init
Автоматически пытаться сохранить его. Вам необходимо указать, что отдельно в / etc / inittab
. /etc/rcx.d/k*
в буквенно-цифровом порядке, где x
- проговел. Способ реализации отключения или перезагрузки - это определить проговел для тех событий и сделать последнюю задачу, выполненную Halt
или REBOOK
Команда. Итак, вы можете использовать init
init в качестве элементарного руководителя сервисных услуг, если вы хотите, но это главная задача в наши дни, чтобы сохранить Getty
Доступно, чтобы пользователь мог войти в систему, и отключен Переходные переходы.
Мне просто интересно, какие задачи init делают, чтобы установить систему для простой оболочки?
Все, что вы хотите. На Debian в каждом каталог /etc/rcx.d
- это симличинка скрипта в /etc/init.d
, и вы можете полностью настроить или удалить эти скрипты. Заказ устанавливается предшествующим каждому сценарию 00
, 01
и т. Д.
Вы также можете указать вариант -B
на init
(т.е. через командную строку ядра), если вы просто хотите init
, чтобы вызвать оболочку. При выходе из раковины init
умирает и когда init
умирает, ядро будет паниковать.
Я обнаружил, что Ubuntu 15.04 был обновлен до конца апреля. Внешние USB-накопители можно совместно использовать только через NFS, если они подключены к домашнему каталогу пользователей, а НЕ к папкам музыки/видео по умолчанию. Тогда никто: nogroup на сервере. fsid = 0 для корня экспорта также должен присутствовать. Все работает. Я могу предоставить образцы от первого клиента, затем сервера.
Клиент - fstab server:/home/userid/MyMusic /home/clientid/Music nfs auto 0 0
server:/home/userid/MyVideo /home/clientid/Videos nfs auto 0 0
Я отправлю раздел сервера в качестве отдельного ответа, так как у меня нет доступа ЕЩЕ к корневому каталогу
-121--44156-Это, вероятно, не официальный способ Debian сделать это, но я бы сделал это именно так.
ar -p foo.deb tmp.tar.gz | tar tzv
Тогда, конечно, вы можете провести этот выход через grep.
ar -p foo.deb tmp.tar.gz | tar tzv | grep -i bar
В качестве объяснения:
ar -p foo.deb tmp.tar.gz
преобразует архив .deb в gzipped tar.
Затем мы направляем файл tar.gz через tar
и перечисляем файлы, содержащиеся в tarball ( t
списки, z
unzips, и v
делает это подробно)
Возможно, существует более простой путь, но когда я перерабатываю .deb архивы для использования в Slackware, это в основном рабочий процесс
-121--161198- Если вы привержены модульному принципу «делай одно и делай это хорошо», то программа init
должна начать процессы.
Он должен выполняться после того, как ядро успешно распаковано, с учетом всех элементарных задач, связанных с инициализацией всех исходных процессов, которые требуются системе для работы (например, установка дисков в/etc/fstab, включение сетевых интерфейсов и т.д.).
Поскольку процесс загрузки и завершения работы является по существу обратным друг другу, программа init обычно также гарантирует, что процессы будут остановлены по команде завершения работы.
Это означает, что он должен остановить процессы в соответствии с главной страницей этого процесса (другими словами, не просто вопиющий kill -9
, он должен выключить процесс в том пути, в котором он должен быть завершен), демонтировать диски и в конечном итоге выдать окончательную команду отключения питания.
Хорошей ссылкой на то, как это делается другими, является просмотр сценариев Slackware/etc/rc.d , а также простой системы инициализации, которая уже существует, как ninit (преемник minit). Он имеет контроль процесса (означающий, что если процесс умирает, он запускается повторно), который, возможно, не является заданием init, но он все еще достаточно базовый и простой для понимания, особенно через примеры скриптов автора.