Linux: программное окружение
Название — калька с «UNIX: Программное окружение» Кернигана и Пайка. Правда, объём несравненно меньший :).
При подготовке отчасти помогает учебник, а отчасти — нет. Чтение традиционных конспектов Евгения Сыромятникова (в очередной раз выражаю ему горячую благодарность) помогает, только если вы и так знаете материал . Более всего помогает чтение документации и эксперименты с Linux непосредственно.
Решение задач хранения, обработки и передачи информации
Концепция
Формализуется человеко-машинное взаимодействие (двусторонний обмен данными с обратной связью)
- Конструктор
- Тезис: «Всё можно запрограммировать»
- Антитезис «всё запрограммировано заранее, надо уметь находить готовое решение»
- Синтез: утилиты + оболочка-интегратор
Требования
- Полнота инструментария
- Воспроизводимость условий и решения
- Формализованное пространство объектов взаимодействия
- Минимизация аппаратных зависимостей
Допущение и его следствия
- Наиболее формализуемый объект — текст
- ⇒ способ управления должен быть текстовым
- ⇒ пространство объектов также должно быть текстовым
имён объектов
содержания объектов
Интерфейс командной строки
- Команда — апелляция к имени инструмента с указанием имён объектов и операций над ними
«Принцип одного окна» : поток данных и поток управления имеет один и тот же интерфейс — терминал
- Принцип «всё файл, всё — текст»: объекты системы — файлы, по возможности текстовые. Пространство имён объектов — файловая система — текстовое дерево.
- Команды (инструменты) — модификация файлов (объектов) и манипуляция ими
- Оболочка (shell) обеспечивает взаимодействие команд и построение решения
Терминал
- Управляющий символы: управлением системой напрямую
- Передача сигналов
- Базовое редактирование ввода
- Управление вводом
- Иное
- ESC-последовательности: управление интерфейсным устройством (терминалом)
Командная строка
Формат: [<переменные окружения>] <команда> [<параметры>]
- Команды: встроенные и утилиты
- Параметры: содержательные и ключи
Ключи: однобуквенные (-a) и полнословные (–all)
Однобуквенные ключи: принцип аббревиативности и «прилипания» (-a -b -c == -abc)
Файловая система Linux
- Типы объектов файловой системы: файлы, каталоги, сокеты, иные файлы-дырки
- «Жёсткие ссылки» (hardlinks), символьные ссылки
- FHS
Процессы и права доступа
- PID и PPID
Порождение процесса: fork() + exec()
- UID и GID файла и процесса, наследование UID и GID
- Сигналы, утилита kill
Виртуальная файловая систем /proc
- Чтение, запись и использование для файлов и каталогов
User, Group и other; 9 атрибутов файла rwxrwxrwx
- Алгоритм вычисления прав доступа процесса к файлу
- setUID, setGID и t-BIT
- ACL
Shell
- Shell как оболочка
- Shell как ЯП
- Shell как интерфейс работы в командной строке
- История развития shell-ов, современное состояние
- Шаблоны shell, где они используются
Shell как оболочка
Запуск процесса в фоне, fg, bg
Перенаправление ввода и вывода
> < >> <<EOF
Каналы вообще и | в частности
&0, &1 и &2, зачем нужен &2
Окружение
- Переменные shell, закавычивание строк с разделителчми
Переменные окружения; export; специальные переменные (PATH, PS1 и пр.); команда set
- Переменные окружения, открытые дескрипторы файлов, UID+GID; Наследование окружения
Подстановка
Значения переменных: $V, ${V}, ${V:[-=?+]word}
- Специальные переменные: ?, !, $
Значения переменных с преобразованием: ${#V}, ${V[#|##|%|%%<шаблон>}
Результата работы команд: $(<команды>) (то же, что и `<команды>`)
Простое арифметическое выражение: $((<выражение>))
- Подстановка и закавычивание
Shell как ЯП
Написание командных сценариев
#!/bin/sh
Позиционные параметры. $@, $#, $*
Цикл со списком по позиционным параметрам, shift
Элементы классического ЯП
Операторные скобки {} и ()
Код завершения (exit status), условные операторы и операторы цикла, команда test ([); операции && и ||
- Функции
- Цикл со списком; case; другие операторы
Shell как интерфейс работы с командной строкой
- Разбор командной строки на слова
- Генерация списка файлов по шаблону (filename generation)
- Редактирование ввода: системное и предоставляемое shell-ом
- Работа с историей: просмотр, выбор и поиск
- Достраивание имени файла, имени переменной, другие виды достраивания
- Привязка командных функций к клавишам (bind)
- Сокращения (alias)
Текстовые редакторы
Просьба свериться с главой учебника, мне кажется, не всё в лекции Наану прозрачно
- Для чего нужны и какие бывают
- ex → vi → vim
- vi: три режима: командной строки, командный и вставки; какой вид команд в каком режиме выполняется
- vi: основные команды каждого из трёх режимов
- vi: принцип аббревиативности
- vi: команды перемещения и гнездовые команды
- vim: возможности vim
Регулярные выражения
Принцип: сопоставление подстроки в строке и шаблона по правилу «самый левый, самый длинный»
- Базовое и расширенное РВ
- РВ и поиск с заменой
- Утилиты, использующие РВ
Как работет sed
- PCRE: пре- и пост-просмотр, нежадные повторители
- Недостатки РВ как явления: flavours, «вечные» РВ,
Утилиты Linux
Несортированные
- Для выделения части текста
- Для преобразования текста
- Для работы с файлами (в т. ч. поиска)
- Для управления терминалом и работы с ним
- Поддержка актуальных настроек программного окружения на нескольких рабочих местах
Пакеты
- Монолитная, ячеистая и гибридная концепции формирования дистрибутива, их достоинства и недостатки
- Условия существования «ячеистого» дистрибутива: FHS, хранилище, свободное лицензирование
- Пакеты в Linux
- архив, регистрация в системе, действия при установке и удалении
- зависимости пакетов; конфликты и альтернативы
- Функции установщика пакетов
- Функции диспетчера пакетов
- Linux и вирусы
RMS
- Кто такой, чем занима{л|ет}ся