Операционные системы семейства UNIX — 2017


Материалы

Wikipedia on the subject

Курс МФТИ

Arch Linux Wiki и Gentoo Linux Wiki - замечательные и обширные вики в стиле DIY от двух замечательных хардкорных дистрибутивов.

The Art of Unix Programming

Unix Programming FAQ

Awesome Linux

How to Create an Operating System - книга про создание игрушечной UNIX-подобной операционной системы на C++

Writing a Simple Operating System - From Scratch и Попытка реализации и другие ресурсы по разработке ОС с нуля

Бесплатные книги

The Linux Command Line

Ten Steps to Linux Survival (PDF ePub Mobi)

Operating Systems: Three Easy Pieces - книга посвящена устройству операционных систем в разрезах виртуализации, многозадачности и персистентности.

Beej's Guide to Unix IPC - обзор механизмов межпроцессного взаимодействия в UNIX-системах.

Beej's Guide to Network Programming Using Internet Sockets - обзор механизмов сетевого взаимодействия в UNIX-системах.

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

Filesystem Hierarchy Standard (см. также man hier)

Linux Standard Base (на практике не поддерживается многими дистрибутивами, в т.ч. Debian)

Список Linux Allocated Devices

SysFS

ProcFS

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

Тест производительности ФС

Shell

Bash Guide - ресурсы по продвинутому использованию Bash (BashFAQ / BashPitfalls). Иногда на ревью я буду напрямую ссылаться на нарушение пунктов BashFAQ/BashPitfalls.

Safe ways to do things in bash

Advanced Bash Scripting Guide

Bash Hackers Wiki

Бесплатная книжка The Linux Command Line

Learn by Example: Linux Command Line

Toybox (замена busybox) и рассуждения о том, что он должен в перспективе в себя включать; в том числе можно использовать как список команд, полезных для ознакомления

Fun Unix Awards - некоторые распространённые ошибки.

ShellCheck - инструмент синтаксического анализа скриптов на предмет частых ошибок. Требуется прохождение вашими скриптами этого теста (или обоснование ложности его срабатывания).

Gallery of Bad Code - больше распространённых ошибок.

ExplainShell - разбор выражений командной оболочки с подбором справочных материалов к их компонентам.

Советы по устранению "башизмов"

Советы по укорачиванию кода на bash (не для промышленного использования).

Command Line Fu - рейтинг однострочных команд.

Awesome Shell - много ссылок.

Флаги для упрощения отладки сценариев

Roundup - юнит-тестирование сценариев командной оболочки.

coreutils in Rust - попытка реализации GNU coreutils на языке Rust.

Google Shell Style Guide - рекомендации по стилю сценариев командной оболочки, принятому в Google.


Q: Где достать примеров?

A1: Advanced Bash Scripting Guide - List of Examples.

A2: /usr/bin$ for file in *; do if [ "$(head -c2 "$file")" = '#!' ]; then echo "$file"; fi; done

Обработка текста

Learn by Example: Command-Line Text Processing

Regular Expression Syntax

 grep(1)
 -w, --word-regexp
         The expression is searched for as a word (as if surrounded by
         `[[:<:]]' and `[[:>:]]'; see re_format(7)).

Ядро

Linux insides

Драйверы устройств

Список Linux Allocated Devices

Получить список Minor и Major всех устройств в /dev:

 stat -f "Name: %N%n%tType: %HT%n%tMajor: %Hr%n%tMinor: %Lr%n%n" /dev/*

Занятие 20.12.2017 г.

Файловые системы

Ознакомиться с материалами.

Дополнительные материалы:

Сравнение современных файловых систем

In-band deduplication for btrfs - механизм дедупликации в ФС btrfs.

ADBFS - пример файловой системы пользовательского режима на основе FUSE.

ELF, динамическое связывание

Про ELF-секции и то, как под капотом устроены макросы вроде module_init

Про динамическую линковку и то, как работает PIC

Eщё про ELF, GOT/PLT и низкоуровневые подробности динамической линковки

Про библиотеки-"оборотни" (которые одновременно и исполняемые файлы)

LD_PRELOAD

Иллюстрация механизма LD_PRELOAD

Одно из применений

Механизм futex()

futex(2) - подход к решению проблемы производительности мьютексов

Напоследок (развлечения)

Полный перевод Unix-коанов на русский язык

Vim Adventures - игра для изучения редактора Vim (довольно скоро просит денег :)

VimGolf - соревнование по решению задач обработки текста наименьшим числом нажатий клавиш; решения таких задачи в Emacs

Aboriginal Linux - набор скриптов, собирающих Linux-систему, способную пересобраться из исходного кода (deprecated в пользу mkroot)

К выполнению ДЗ

Флаги для упрощения отладки сценариев

EINTR and what is it good for - об обработке возвращаемого значения EINTR по возврату из системных вызовов

sh - shell autoindent (внизу README.md - ссылки на плагины для популярных текстовых редакторов

Online autoindent with shell syntax support

Общие замечания

Вместо послесловия

Знаете ли Вы, что...

  • bash -c 'echo "$1"' a b c выводит не a (это полезно знать, если запускаете bash -c из xargs, find -exec и т.д.)?
  • в bash можно выполнить последнюю команду под sudo с помощью sudo !! или найти предыдущую команду по подстроке после нажатия Ctrl-R (и очень много чего ещё)?
  • с помощью программы pv можно наблюдать за потоком данных через pipe, а с помощью программы sponge можно записать в файл, из которого идёт чтение, по завершении его обработки (обе команды нужно устанавливать дополнительно, пакеты обычно называются pv и moreutils соответственно)?
  • с помощью программы watch можно запускать команду через промежутки времени, чтобы наблюдать за её выводом (аргументы по умолчанию передаются в sh -c, поэтому работают пайплайны и нужно быть осторожными с escaping; есть интересный режим --difference)?
  • с помощью программы tput можно выводить специальные символы управления терминалом, которые будут подбираться по универсальным смысловым описаниям исходя из типа терминала?
  • можно устанавливать целые пакеты программ, предназначенных для некоторой цели, с помощью утилиты tasksel (ну или установки метапакетов)?
  • можно настроить систему так, чтобы добавление/расширение/сжатие разделов жёсткого диска (даже за счёт нескольких физических дисков) осуществлялось без необходимости перемещения данных на остальных разделах?
  • с помощью команды sudo mknod -m 0666 /tmp/mynull c 1 3 можно создать свою копию устройства /dev/null?

Если Вам интересно узнать про:

  • операции, гарантированно выполняемые атомарно - см. этот список;
  • выполнение задач по расписанию - см. cron (чтобы долгие задачи выполнялись в "критической секции" и не могли запуститься в нескольких экземплярах одновременно, используйте "мьютексы" на основе файловой системы - flock);
  • обход ограничений сетевых брандмауэров с помощью зашифрованных каналов (тоже ssh!) - читайте про SSH Tunneling;
  • создание сервисов (обычно демонов), перезапускаемых после завершения или перезагрузки - см. это руководство;
  • работу с пакетами и репозиториями - см. сюда;
  • некоторые, местами весьма подробные, детали работы ядра Linux - можно начать отсюда;

Если Вы готовы учиться постоянно...

...уже доступны некоторые материалы курса для двухгодичной магистратуры!

И просто интересные ссылки:

  • fd - find on steroids
  • Sortix - "a small self-hosting operating-system aiming to be a clean and modern POSIX implementation"

Архивные материалы

Материалы 2014 года

Материалы 2015 года

Материалы 2016 года

Темы

Результаты голосования

Домашние задания

Задания сдаются через систему AnyTask.

Курс: "Белорусский государственный университет", далее "БГУ 2017 - Linux".

  1. Установить UNIX-систему
  2. Matryoshka: файловая система внутри файла
  3. Be a shell master: сценарии командной оболочки (запись)
  4. Pipeline: конвейер команд своими руками
  5. 100 TB: выделить 100 ТБ памяти
  6. Guess: guessing game через Unix-сокеты
  7. /dev/nulll: /dev/null с подсчётом объёма выброшенного мусора
  8. Brainstorm: kernel-level interpreter
  9. Be an open source jerk: патчим ПО с открытым исходным кодом (запись)

Общие замечания

Система оценки

Для зачёта должны быть сданы как минимум задания 1, 2A, 2B и какое-то из оставшихся.

3 балла из 10 рассчитываются исходя из оценки по курсу машинного обучения (менее 4 - 0, 4-6 - 1, 7-8 - 2, 9-10 - 3).

Оставшиеся баллы напрямую вычисляются на основании суммарного балла из ведомости в Anytask по следующей схеме (т.е., например, получив 2 балла по ML, всё ещё можно получить 8 собственно по Unix и 10 в сумме):

Баллы Оценка
33+ 10
31-32 9
29-30 8
27-28 7
25-26 6
23-24 5
21-22 4
19-20 3
17-18 2
15-16 1
Менее 15 0

Расписание

Актуальное расписание см. в соответствующей таблице

Стандарты

POSIX (Portable Operating System Interface)

SUS (Single UNIX Specification) Версия 4, редакция 2016 года

LSB (Linux Standard Base)

FHS (Filesystem Hierarchy Standard)


Про POSIX с точки зрения доступности стандарта

Контакты

Группа в Telegram

Преподаватель: Картынник Юрий