Командная строка и Shell как системообразующие
- SGID directory traversal (долг за прошлый раз)
Информационная подсистема:
- Man (UNIX-style)
- 9 разделов
- Перекрестные ссылки из текста
- Структура страницы
- Важность see also
- Apropos, whatis
- Info (GNU style)
- /usr/share/doc/*
Интерфейс командной строки
- Human readable
- Human writeable
- ЧМС, обратная связь, диалог
- Совмещение/разделение потока данных и потока управления
- UNIX-like: много утилит на все случаи жизни
- системные вызовы
- подзадачи администратора
- пользовательские подзадачи
Командная оболочка (shell):
- ИКС
- ЯПВУ
- Оболочка вокруг утилит
Похоже, компонентная структура UNIX вообще, и уж точно каналы — заслуга начальника лаборатории Дугласа МакИлроя
Почему это гениально:
- пользователь управляет системой вручную
а когда это ему надоест, напишет сценарий на shell, в котором будет использовать те же команды
- более того, именно такие сценарии и составляют программную начинку системы
Почему это удобно:
- Команды как операторы
- вызов по имени
- Условный оператор и цикл вокруг exit status (0 — истина, код ошибки — ложь)
например, команда [
- Много команд для обработки текстов (sort, tac, cut, МНОГО, sed, awk)
- Параметры командной строки
Каналы: cal | wc
Перенаправление В/В cmd > out, cmd < in, cmd 2> errout и т. п.
Подстановка вывода RES = $(command)
- фоновые процессы
- что там ещё?
Что умеют современные оболочки:
- ИКС:
- alias
- pattern generation
- completion
- в т. ч. с запуском дополнительных команд (напр., zftp)
- переключение между фоновыми процессами
- удобная подсказка
- арифметика
- ...
- ЯП:
- массивы
- страшные подстановки и фильтрованные шаблоны
- ...
- Оболочка:
- множественный В/В
- ...
Пример: загрузка GNU/Linux системы
- Досистемная загрузка
- Boot ROM
- Boot block
- Boot prog
- Ядро
- Linux: +initrd
- Системная загрузка
- Ядро: опрос устройств
- монтирование ФС (/etc/fstab)
- запуск init
- init: стартовые сценарии
TODO .d-схема
- консоль/DM
Финал: принципы 4U:
- распределения ресурсов (физиологических, эмоциональных, умственных),
- информационной открытости (для себя, для эффективности взаимодействия, для свободы ориентации),
- умопостижимости контекста (human-readable, human-writeable, "7 +/- 2"),
- оравданой ответственности (захотел -- получил, достаточность знаний).