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
- Кто такой, чем занима{л|ет}ся
 
