Как создание forcefsck файл инициировало проверку файловой системы на перезагрузке?

Состояния Справочника Bash:

Встроенные команды необходимы для реализации функциональности, невозможной или неудобной для получения с отдельными утилитами.

Таким образом, оболочки разработаны, чтобы только включать встроенные команды если:

  1. Требуемый стандартом POSIX
  2. Команды, которые требуют доступа к самой оболочке, такой как созданное-ins управление заданиями
  3. Команды, которые очень просты, не зависимы от операционной системы и эффективность выполнения увеличения при реализации столь же созданный-ins, такие как printf

ls команда не соответствует ни одному вышеупомянутому requirments.

Однако вот не ограничение программирования, которое предотвратило бы ls будучи implmented как встроенное, которое выполняется в том же процессе как интерпретатор удара. Причины дизайна команд, не являющихся implmented как созданная-ins оболочка:

  1. Оболочка должна быть быть отдельной от файловой системы - никакие встроенные команды не должны зависеть от корректной операции никакой файловой системы или периферийных устройств
  2. Команда, которая могла бы быть типом файловой системы или зависимый от операционной системы, должна быть отдельным исполняемым файлом
  3. Команда, от которой Вы могли бы хотеть передать по каналу к или, должна быть отдельным процессом
  4. Команда, которую Вы могли бы хотеть выполнить в фоновом режиме, должна быть отдельным исполняемым файлом
  5. Команда, которая имеет большое количество возможных параметров, лучше реализована в отдельном исполняемом файле
  6. Команды, которые должны иметь тот же вывод, независимо от которого тип оболочки (удар, csh, tsh...) вызывает их, должны быть автономными исполняемыми файлами

Относительно первой причины - Вы хотите, чтобы оболочка была максимально независима и эластична. Вы не хотите, чтобы оболочка застряла на ls из NFS монтируют, что это "не отвечает, все еще пробуя".

Относительно второй причины - Во многих экземплярах Вы могли бы хотеть использовать оболочку для системы, которая использует Busybox или другую файловую систему, которая имеет другое ls реализация. Или даже используйте тот же источник оболочки в ОС, которые имеют отличающийся ls реализации.

Относительно третьей причины - Для выражения такой как find . -type d | xargs ls -lad это было бы трудно или невозможно реализовать ls в том же процессе как интерпретатор оболочки.

Относительно четвертой причины - Некоторые ls команды могут занять много времени для завершения. Вы могли бы хотеть, чтобы оболочка продолжила выполнение чего-то еще тем временем.


Примечание: См. это полезное сообщение Warren Young в ответ на подобный вопрос.

2
03.09.2014, 20:46
1 ответ

Например, в случае Debian это находится в этом init-скрипте: /etc/init.d/checkfs.sh/etc/init.d/checkroot.sh, и любая из их символических ссылок):

...
if [ -f /forcefsck ] || grep -s -w -i "forcefsck" /proc/cmdline
...
4
27.01.2020, 22:00

Теги

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