Linux: программное окружение

Название — калька с «UNIX: Программное окружение» Кернигана и Пайка. Правда, объём несравненно меньший :).

При подготовке отчасти помогает учебник, а отчасти — нет. Чтение традиционных конспектов Евгения Сыромятникова (в очередной раз выражаю ему горячую благодарность) помогает, только если вы и так знаете материал :) . Более всего помогает чтение документации и эксперименты с Linux непосредственно.

Решение задач хранения, обработки и передачи информации

Концепция

  1. Формализуется человеко-машинное взаимодействие (двусторонний обмен данными с обратной связью)

  2. Конструктор
    • Тезис: «Всё можно запрограммировать»
    • Антитезис «всё запрограммировано заранее, надо уметь находить готовое решение»
    • Синтез: утилиты + оболочка-интегратор

Требования

  1. Полнота инструментария
  2. Воспроизводимость условий и решения
  3. Формализованное пространство объектов взаимодействия
  4. Минимизация аппаратных зависимостей

Допущение и его следствия

  1. Наиболее формализуемый объект — текст
    • ⇒ способ управления должен быть текстовым
    • ⇒ пространство объектов также должно быть текстовым
      • имён объектов

      • содержания объектов

Интерфейс командной строки

  1. Команда — апелляция к имени инструмента с указанием имён объектов и операций над ними
  2. «Принцип одного окна» :) : поток данных и поток управления имеет один и тот же интерфейс — терминал

  3. Принцип «всё файл, всё — текст»: объекты системы — файлы, по возможности текстовые. Пространство имён объектов — файловая система — текстовое дерево.
  4. Команды (инструменты) — модификация файлов (объектов) и манипуляция ими
  5. Оболочка (shell) обеспечивает взаимодействие команд и построение решения

Терминал

  1. Управляющий символы: управлением системой напрямую
    • Передача сигналов
    • Базовое редактирование ввода
    • Управление вводом
    • Иное
  2. ESC-последовательности: управление интерфейсным устройством (терминалом)

Командная строка

  1. Формат: [<переменные окружения>] <команда> [<параметры>]

  2. Команды: встроенные и утилиты
  3. Параметры: содержательные и ключи
  4. Ключи: однобуквенные (-a) и полнословные (–all)

  5. Однобуквенные ключи: принцип аббревиативности и «прилипания» (-a -b -c == -abc)

Файловая система Linux

  1. Типы объектов файловой системы: файлы, каталоги, сокеты, иные файлы-дырки
  2. «Жёсткие ссылки» (hardlinks), символьные ссылки
  3. FHS

Процессы и права доступа

  1. PID и PPID
  2. Порождение процесса: fork() + exec()

  3. UID и GID файла и процесса, наследование UID и GID
  4. Сигналы, утилита kill
  5. Виртуальная файловая систем /proc

  6. Чтение, запись и использование для файлов и каталогов
  7. User, Group и other; 9 атрибутов файла rwxrwxrwx

  8. Алгоритм вычисления прав доступа процесса к файлу
  9. setUID, setGID и t-BIT
  10. ACL

Shell

  1. Shell как оболочка
  2. Shell как ЯП
  3. Shell как интерфейс работы в командной строке
  4. История развития shell-ов, современное состояние
  5. Шаблоны shell, где они используются

Shell как оболочка

  1. Запуск процесса в фоне, fg, bg

Перенаправление ввода и вывода

  1. > < >> <<EOF

  2. Каналы вообще и | в частности

  3. &0, &1 и &2, зачем нужен &2

Окружение

  1. Переменные shell, закавычивание строк с разделителчми
  2. Переменные окружения; export; специальные переменные (PATH, PS1 и пр.); команда set

  3. Переменные окружения, открытые дескрипторы файлов, UID+GID; Наследование окружения

Подстановка

  1. Значения переменных: $V, ${V}, ${V:[-=?+]word}

  2. Специальные переменные: ?, !, $
  3. Значения переменных с преобразованием: ${#V}, ${V[#|##|%|%%<шаблон>}

  4. Результата работы команд: $(<команды>) (то же, что и `<команды>`)

  5. Простое арифметическое выражение: $((<выражение>))

  6. Подстановка и закавычивание

Shell как ЯП

Написание командных сценариев

  • #!/bin/sh

  • Позиционные параметры. $@, $#, $*

  • Цикл со списком по позиционным параметрам, shift

Элементы классического ЯП

  • Операторные скобки {} и ()

  • Код завершения (exit status), условные операторы и операторы цикла, команда test ([); операции && и ||

  • Функции
  • Цикл со списком; case; другие операторы

Shell как интерфейс работы с командной строкой

  • Разбор командной строки на слова
  • Генерация списка файлов по шаблону (filename generation)
  • Редактирование ввода: системное и предоставляемое shell-ом
  • Работа с историей: просмотр, выбор и поиск
  • Достраивание имени файла, имени переменной, другие виды достраивания
  • Привязка командных функций к клавишам (bind)
  • Сокращения (alias)

Текстовые редакторы

Просьба свериться с главой учебника, мне кажется, не всё в лекции Наану прозрачно

  1. Для чего нужны и какие бывают
  2. ex → vi → vim
  3. vi: три режима: командной строки, командный и вставки; какой вид команд в каком режиме выполняется
  4. vi: основные команды каждого из трёх режимов
  5. vi: принцип аббревиативности
  6. vi: команды перемещения и гнездовые команды
  7. vim: возможности vim

Регулярные выражения

  1. Принцип: сопоставление подстроки в строке и шаблона по правилу «самый левый, самый длинный»

  2. Базовое и расширенное РВ
  3. РВ и поиск с заменой
  4. Утилиты, использующие РВ
  5. Как работет sed

  6. PCRE: пре- и пост-просмотр, нежадные повторители
  7. Недостатки РВ как явления: flavours, «вечные» РВ,

Утилиты Linux

Несортированные :(

  1. Для выделения части текста
  2. Для преобразования текста
  3. Для работы с файлами (в т. ч. поиска)
  4. Для управления терминалом и работы с ним
  5. Поддержка актуальных настроек программного окружения на нескольких рабочих местах

Пакеты

  1. Монолитная, ячеистая и гибридная концепции формирования дистрибутива, их достоинства и недостатки
  2. Условия существования «ячеистого» дистрибутива: FHS, хранилище, свободное лицензирование
  3. Пакеты в Linux
    • архив, регистрация в системе, действия при установке и удалении
    • зависимости пакетов; конфликты и альтернативы
  4. Функции установщика пакетов
  5. Функции диспетчера пакетов
  6. Linux и вирусы

RMS

  1. Кто такой, чем занима{л|ет}ся