Инструменты Linux

Терминал, командная строка, обработка текста и диагностика

Вячеслав Федоров

Лекция 2

Разработка и применение ПО

в физических исследованиях

|

Содержание

От рабочего места до поиска неисправностей

01

Рабочее место

02

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

03

Полезные утилиты

04

Редактирование

05

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

06

Диагностика

Цель лекции

Командная строка как основной интерфейс к системе

Скорость повседневной работы определяется тем, какая доля действий выполняется командами, а не вручную: копирование файлов, просмотр журналов и обработка результатов расчётов укладываются в одну строку.

Рабочее место

Печать, терминал, шрифт и оболочка

01

Рабочее место

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

Утилиты

Редакторы

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

Диагностика

Слепая

печать

01

Скорость набора растёт

02

Ошибок становится меньше

03

Внимание остаётся на экране, а не на клавиатуре

Важно

В первые месяцы после переучивания скорость набора временно снижается.

GNU Typist

консольный тренажёр; уроки и собственные тексты

apt install gtypist

monkeytype.com, keybr.com

онлайн-тренажёры, в том числе на текстах программ со скобками и знаками препинания

Эмулятор

терминала

Стандартный терминал, как правило, только отображает текст. Полноценный эмулятор дополнительно поддерживает:

01

вкладки и разделение окна на панели

02

копирование выделением

03

ссылки, открывающиеся по щелчку

04

плагины, темы, прозрачность

СистемаЭмулятор
macOSiTerm2
LinuxTerminator, Kitty, Konsole
Windows 10/11Windows Terminal
WindowsMobaXterm (условно бесплатный; SSH, X-сервер)

Моноширинные

шрифты

Source Code Pro

0O o 1lI

{}[]() ;:

E = mc^2; x[i] = 0

Inconsolata

0O o 1lI

{}[]() ;:

E = mc^2; x[i] = 0

JetBrains Mono

0O o 1lI

{}[]() ;:

E = mc^2; x[i] = 0

Все символы имеют одинаковую ширину: колонки вывода не смещаются, а ноль и буква O, единица и строчная l различимы. К этой группе относится и Anonymous Pro; сравнение шрифтов приведено на programmingfonts.org.

Терминал и

оболочка

Клавиатура и экран

Эмулятор терминала

Псевдотерминал /dev/pts/N

Оболочка bash

Программа ls, grep…

Пояснение

Терминал только отображает символы и передаёт нажатия клавиш. Строку разбирает и выполняет оболочка; приглашение root@lab:~# тоже выводит она.

Для физика

Команды одинаково работают в любом терминале: на ноутбуке, по ssh на кластере и в окне tmux.

Командные

оболочки

01

bash

есть почти на любой машине, доступной по ssh; переносимые скрипты пишутся под него

02

zsh

развитое дополнение и плагины, фреймворк Oh My Zsh; оболочка по умолчанию в macOS

03

fish

подсказки и подсветка без настройки; синтаксис несовместим с POSIX sh

Пояснение

Выбор оболочки: при работе со многими удалёнными серверами — bash, на собственной рабочей машине — zsh или fish; скрипты пишутся для bash или POSIX sh.

Демонстрация:

оболочка

01

Оболочка текущего сеанса

02

Процесс оболочки: ps -p $$

03

Допустимые оболочки: /etc/shells

04

Псевдотерминал и тип терминала

Что наблюдается

Сеанс обслуживает bash на псевдотерминале /dev/pts/N; в /etc/shells рядом с bash и dash перечислены screen и tmux.

root@lab — запись со стенда

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

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

02

Рабочее место

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

Утилиты

Редакторы

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

Диагностика

Поиск и запуск

команды

ls -l /etc

Разбор: argv = ls, -l, /etc

Проверка встроенных: cd, [, echo

Поиск по $PATH слева направо

execve /usr/bin/ls

Расположение команды:

type cd ls [

which -a python3

which находит только файлы, type — также встроенные команды.

ФлагОбычное значение
-h, --helpкраткая справка
-v, --versionверсия или подробный вывод
-y, -fбез подтверждения
--конец флагов, далее аргументы

Демонстрация:

поиск команд

01

Каталоги поиска: $PATH

02

Тип команд cd, ls и [

03

Все копии [ в $PATH

04

Исполняемый файл /usr/bin/[

05

Аргументы процесса cron в /proc

Что наблюдается

cd и [ — встроенные команды bash, хотя файл /usr/bin/[ существует; командная строка процесса хранится в /proc/PID/cmdline.

root@lab — запись со стенда

Справка

man

РазделСодержание
1команды пользователя
2системные вызовы
3функции библиотек
5форматы файлов: fstab, passwd
7обзоры: signal, regex
8администрирование

Внутри man (пейджер less):

КлавишаДействие
/словопоиск
n, Nследующее, предыдущее
g, Gначало, конец
qвыход

man 7 signal

MANPAGER=cat man ls

Демонстрация:

справка man

01

Краткие описания: whatis

02

Поиск по описаниям: man -k

03

Обзор сигналов: man 7 signal

04

Поиск в less: /Standard signals

05

Выход: q

Что наблюдается

whatis и man -k показывают номер раздела рядом с именем; поиск в less переносит прямо к таблице стандартных сигналов.

root@lab — запись со стенда

Редактирование

строки

КлавишиДействие
Ctrl+A, Ctrl+Eв начало, в конец строки
Alt+B, Alt+Fна слово назад, вперёд
Ctrl+Wудаление слова слева
Ctrl+U, Ctrl+Kудаление до начала, до конца
Ctrl+Yвставка удалённого
Ctrl+Lочистка экрана

Пояснение

Alt называется Meta: на macOS это Option, который в настройках терминала включается как Meta.

Для физика

Длинная команда запуска расчёта правится в строке, а не набирается заново.

Сигналы и

задания

КлавишиЧто происходит
Ctrl+CSIGINT: прерывание
Ctrl+\SIGQUIT: завершение с дампом памяти
Ctrl+ZSIGTSTP: приостановка
Ctrl+Dне сигнал: конец ввода (EOF)

На переднем плане

Ctrl+Z

Остановлено

bg — продолжение в фоне, fg — возврат

В фоне

jobs — список заданий; fg %1, bg %1, kill %1 — по номеру; stty -a — назначение клавиш.

Демонстрация:

задания

01

Клавиши терминала: stty -a

02

Запуск sleep 300

03

Ctrl+Z: остановка задания

04

jobs и bg: работа в фоне

05

fg и Ctrl+C: прерывание задания

Что наблюдается

Остановленное задание не завершено: после bg оно работает в фоне, после fg снова получает терминал и прерывается по Ctrl+C.

root@lab — запись со стенда

Потоки

ввода-вывода

0 · stdin

1 · stdout

2 · stderr

cat file

stdout

Канал: буфер в памяти ядра

stdin

grep err

Пояснение

Конвейер передаёт только stdout: сообщения об ошибках выводятся на экран, минуя фильтр. |& передаёт оба потока.

Перенаправление

вывода

ЗаписьСмысл
cmd > fstdout в файл с перезаписью
cmd >> fstdout в конец файла
cmd 2> fstderr в файл
cmd &> fоба потока в файл
cmd > f 2>&1оба потока в файл
cmd < fstdin из файла

Важно

Порядок перенаправлений существен: в cmd 2>&1 > f в файл попадёт только stdout, а ошибки останутся на экране.

Специальные файлы:

/dev/null — поглощает запись

/dev/zero — нули

/dev/urandom — случайные байты

Для физика

Долгий расчёт: ./sim > result.dat 2> errors.log — ошибки собираются в отдельном файле и не теряются среди выходных данных.

Демонстрация:

перенаправление

01

Вывод и ошибки в разные файлы

02

Строки в файле и текст ошибки

03

Оба потока в конвейер

04

Порядок: 2>&1 > /dev/null

05

16 случайных байт

06

Файл из нулей: dd

Что наблюдается

При 2>&1 > /dev/null в /dev/null направляется только stdout, а ошибка остаётся на экране: перенаправления применяются слева направо.

root@lab — запись со стенда

Дополнение и

история

Tab

одно нажатие дополняет команду, файл, флаг;

два — показывают варианты;

правила дополнения устанавливаются пакетом bash-completion.

История ~/.bash_history

Ctrl+R — поиск по подстроке, повторное нажатие — более раннее совпадение;

!! — предыдущая команда, sudo !! — она же с sudo;

!$ — последний аргумент предыдущей команды;

history | grep слово.

Пояснение

Команда с пробелом в начале не попадает в историю (в .bashrc Ubuntu задано HISTCONTROL=ignoreboth); history -a сразу дописывает историю в файл.

Демонстрация:

история

01

Команда с аргументом /var/log

02

!$ — последний аргумент

03

Последние записи истории

04

Ctrl+R: поиск по подстроке

Что наблюдается

bash показывает развёрнутую команду перед выполнением; Ctrl+R находит команду по подстроке в любом месте строки.

root@lab — запись со стенда

Циклы, условия,

подоболочки

for i in $(seq 1 10); do ./sim --seed $i > run$i.dat; done

du -sh /var/* | while read size path; do …; done

if [ "$(wc -l < f.txt)" -gt 3 ]; then …; fi

(cd /tmp; …) — подоболочка

x=$(date +%s) — подстановка вывода

Пояснение

[ — это команда (встроенная и /usr/bin/[), поэтому пробелы вокруг скобок обязательны.

Для физика

Серия из ста расчётов с параметрами из файла запускается циклом в одну строку. Скрипт длиннее двух-трёх десятков строк целесообразно переписать на Python.

Демонстрация:

циклы

01

Цикл for по seq

02

Самые большие каталоги /var

03

while read: разбор вывода

04

Смена каталога в подоболочке

05

Подоболочка и переменные родителя

06

Условие через [

Что наблюдается

cd и присваивания внутри ( ) не влияют на родительскую оболочку; [ -d /etc ] возвращает код 0, и && выполняет вторую команду.

root@lab — запись со стенда

Полезные утилиты

Поиск файлов, параллельный запуск, сессии

03

Рабочее место

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

Утилиты

Редакторы

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

Диагностика

Поиск файлов:

find

find <где> <условия> <действие>

УсловиеЗначение
-name '*.dat'имя по шаблону
-type f / -type dфайл / каталог
-size +100Mбольше 100 МиБ
-mtime -1изменён за сутки
-exec cmd {} +запуск команды для найденных файлов
-print0имена через нулевой байт

Для физика

find ~/runs -name '*.root' -mtime -1 — выходные файлы расчётов за последние сутки.

Важно

-delete удаляет найденное без подтверждения, поэтому команда сначала выполняется без него.

xargs и

параллельный запуск

find … -print0

xargs -0 -P4 -n1 md5sum

md5sum файл1

md5sum файл2

md5sum файл3

md5sum файл4

ФлагЗначение
-n Nдо N аргументов на запуск
-P NN процессов одновременно; 0 — без ограничения
-0имена через нулевой байт
-I{}подстановка строки на место {}

Пояснение

Выигрыш ограничен числом ядер (nproc) и скоростью диска. GNU parallel дополнительно сохраняет порядок вывода, ведёт журнал заданий и запускает задания по ssh.

Демонстрация:

find и xargs

01

Файлы *.conf в /etc

02

Число найденных файлов

03

Пять sleep подряд: 0+1+2+3+4 = 10 с

04

Те же sleep параллельно: 4 с

Что наблюдается

Последовательный запуск длится сумму времён, параллельный — время самого долгого задания.

root@lab — запись со стенда

Сессии:

tmux и screen

Действиеtmuxscreen
новая сессияtmux new -s calcscreen -S calc
отключениеCtrl+B, DCtrl+A, D
список сессийtmux lsscreen -ls
подключениеtmux a -t calcscreen -r calc
разделение окнаCtrl+B, % или "Ctrl+A, S или |

Для физика

Расчёт на кластере запускается внутри tmux: обрыв ssh его не прерывает, а к сессии можно позднее подключиться с другой машины.

Пояснение

watch -d -n1 'wc -l result.dat' в соседней панели показывает, как растёт файл результатов.

Демонстрация:

tmux

01

Сессия calc с watch в фоне

02

Список сессий: tmux ls

03

Экран сессии без подключения

04

Завершение сессии

Что наблюдается

Сессия работает без подключённого терминала: capture-pane показывает экран watch, который обновляется каждую секунду.

root@lab — запись со стенда

Редактирование

Консольные редакторы: vim, vimdiff, vimtutor

04

Рабочее место

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

Утилиты

Редакторы

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

Диагностика

Режимы

vim

Вставка

Нормальный

Визуальный

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

i, a, o — вход
Esc — выход

v, V — вход
Esc — выход

«:» — вход
Enter, Esc — выход

КлавишиДействие
i, a, oвставка перед курсором, после, с новой строки
Escвозврат в нормальный режим
:w, :qсохранение, выход
:wq, :q!сохранение с выходом; выход без сохранения
/слово, nпоиск и следующее совпадение
u, Ctrl+Rотмена, повтор
dd, yy, pудаление строки, копирование, вставка
:%s/a/b/gзамена a на b во всём файле

Освоение

vim

01

vimtutor

встроенный учебник: около 30 минут упражнений в терминале

02

vimdiff file1 file2

сравнение двух файлов в соседних окнах с подсветкой различий

03

Режим vim в IDE

расширения Vim для VS Code и сред JetBrains

04

Сборки Neovim

LazyVim, AstroNvim, NvChad: подсветка, дополнение, LSP

Stack Overflow Developer Survey 2023, доля респондентов

22 %

Vim

12 %

Neovim

9 %

nano

Допускался выбор нескольких ответов, поэтому доли не суммируются.

Демонстрация:

vim

01

Открытие файла: vim notes.txt

02

i — режим вставки

03

Набор строки

04

Esc и :wq — сохранение и выход

05

Проверка: cat notes.txt

Что наблюдается

Внизу экрана vim показывает режим (-- INSERT --) и позицию курсора; после :wq строка записана в файл.

root@lab — запись со стенда

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

grep, sed, awk и конвейеры

05

Рабочее место

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

Утилиты

Редакторы

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

Диагностика

Утилиты

потоковой обработки

Каждая выполняет одну операцию над потоком строк; соединяются они конвейером.

grep

строки, подходящие под регулярное выражение

awk

язык для обработки текста по колонкам

sed

потоковый редактор: замена и удаление

cut

выбор колонок по разделителю

head

первые N строк

tail

последние N строк; tail -f — дописываемые

tr

замена и удаление символов

wc

число строк, слов и байтов

sort

сортировка строк: -n, -r, -k, -t

uniq

удаление соседних повторов; -c — счётчик

Конвейер:

частотная таблица

Самый частый код ответа в журнале веб-сервера access.log (поле 9)

awk '{print $9}'

404
200
404
500
404
200

sort

200
200
404
404
404
500

uniq -c

2 200
3 404
1 500

sort -rn

3 404
2 200
1 500

head -n 1

3 404

Для физика

Тот же приём строит распределение дискретной величины: cut -d, -f3 events.csv | sort -n | uniq -c — число событий по номерам каналов.

grep и

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

ШаблонСовпадает с
.любым символом
*предыдущим символом 0 и более раз
^, $началом, концом строки
[0-9]одним символом из класса
x+, x?1 и более раз, 0 или 1 раз (-E)
a|ba или b (-E)
\.точкой как символом
ФлагЗначение
-iбез учёта регистра
-vстроки без совпадения
-cчисло совпавших строк
-nномера строк
-rрекурсивно по каталогу
-oтолько совпавшая часть
-E, -Fрасширенные выражения; фиксированная строка

grep -rn 'TODO' src/

grep -E '^(ERROR|WARN)' app.log

grep -v '^#' app.conf

sed

и

awk

sed — потоковый редактор

sed 's/admin/user/g' f

замена всех вхождений в каждой строке

sed -n '10,20p' f

вывод строк с 10-й по 20-ю

sed '/^#/d' f

удаление строк-комментариев

sed -i.bak 's/a/b/' f

правка файла на месте с сохранением копии

awk — язык обработки колонок

awk '{print $1, $NF}' f

первое и последнее поле строки

awk -F, '$3 > 100' f

строки, где третья колонка больше 100

awk '{s += $10} END {print s}' f

сумма десятой колонки

awk 'NR % 10 == 0' f

каждая десятая строка

Пояснение

NF — число полей строки, $NF — последнее поле, $(NF-1) — предпоследнее; NR — номер строки. Блок END выполняется один раз, после последней строки.

Демонстрация:

разбор журнала

01

Начало системного журнала

02

Число строк с упоминанием systemd

03

Самые частые источники записей

Что наблюдается

Конвейер из шести команд строит частотную таблицу источников: больше всего записей оставляет systemd.

root@lab — запись со стенда

Демонстрация:

данные расчёта

01

Ряд sin + шум в файле run.csv

02

Первые строки и их число

03

Среднее и отклонение: awk

04

Максимум: sort -g

05

Табуляция вместо запятой: sed

Что наблюдается

Статистика по тысяче строк считается одной командой awk; sort -g находит максимум 1,0962 в строке 394.

root@lab — запись со стенда

Тренажёры и

квест

01

grep, sed, awk exercises

Интерактивные задачи в терминале с проверкой ответа (learnbyexample).

pipx install grepexercises

также sedexercises и awkexercises

02

The Command Line Murders

Детективный квест: улики ищутся среди тысяч текстовых файлов только командами терминала.

git clone https://github.com/veltman/clmystery

входит в домашнее задание

Важно

В Ubuntu 23.04 и новее pip install в системный Python запрещён (PEP 668): программы на Python устанавливаются с помощью pipx.

Диагностика

Метод, процессор, память, диск, сеть

06

Рабочее место

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

Утилиты

Редакторы

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

Диагностика

Порядок

диагностики

01

Процессор

загрузка и очередь готовых задач

uptime, top, vmstat

02

Память

запас свободной памяти и обмен со swap

free -h, vmstat

03

Диск

свободное место и загрузка устройства

df -h, iostat -x

04

Сеть

связность и объём передаваемых данных

ping, ss, ethtool

Пояснение

Метод USE (Б. Грегг): для каждого ресурса проверяются использование, насыщение и ошибки.

Для физика

Замедление расчёта проверяется последовательно: top — загрузка процессора, free — использование swap, iostat — загрузка диска.

Карта

инструментов

Приложения

ps, top, htop, pidstat, perf

Системные вызовы

strace, ltrace, lsof

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

df, du, lsof +L1

Диски

iostat -x, iotop, smartctl

Сеть

ss, tcpdump, ethtool, ping, mtr

Процессор и память

vmstat, mpstat, free

Ядро

dmesg -T, sysctl, /proc

Пояснение

Полные схемы Б. Грегга: наблюдение, статическая конфигурация, нагрузочное тестирование, настройка — brendangregg.com/linuxperf.html.

Systems Performance

B. Gregg, 2-е изд., 2020: справочник по всему, что в Linux измеримо.

Демонстрация:

ресурсы машины

01

Ядра и процессор: nproc, lscpu

02

Память: free -h

03

Место на дисках: df -h

04

Средняя загрузка: uptime

05

Процессор и память во времени: vmstat

06

Ввод-вывод по устройствам: iostat

Что наблюдается

У lab 2 ядра и 3,8 ГиБ памяти, корень заполнен на 35 %; столбец id в vmstat близок к 100 — система простаивает.

root@lab — запись со стенда

Процессор и

память

ПоказательГдеЧто означает
load averageuptime, topготовые к выполнению и ждущие диска задачи за 1, 5, 15 мин
us, sy, watop, vmstatвремя процессора: программы, ядро, ожидание ввода-вывода
%CPUtop, ps100 % — одно ядро целиком
availablefree -hпамять, доступная без вытеснения
si, sovmstatобмен со swap: признак нехватки памяти

Пояснение

Внутри top: 1 — по ядрам, P и M — сортировка по процессору и памяти, c — полная команда, d — интервал обновления.

Для физика

Расчёт в 4 потока: у процесса 400 %, а строка %Cpu(s) на 32-ядерной машине покажет около 12 %.

Демонстрация:

top и htop

01

Снимок top в пакетном режиме

02

htop: загрузка по ядрам и память

03

Выход из htop: q

Что наблюдается

Верхние строки top повторяют uptime и free; htop показывает каждое ядро отдельной полосой.

root@lab — запись со стенда

Диск и

сеть

КомандаПоказывает
df -hместо по файловым системам
df -ihзанятые иноды
du -sh /var/log/*размер каталогов
iostat -x 1загрузку дисков (%util)
lsof +L1удалённые, но открытые файлы
КомандаПоказывает
ping -c 3 hostсвязность и задержку
mtr -T -P 443 hostмаршрут и потери
ss -tlnpслушающие порты
ss -sсводку по сокетам
ethtool eth0скорость и параметры интерфейса
tcpdump -nn host Xпакеты с узлом X

Важно

Свободное место исчерпано, а du не находит занятого: файл удалён, но ещё открыт процессом. lsof +L1 показывает такие файлы; место освобождается после их закрытия.

Демонстрация:

сеть

01

ping до шлюза виртуальной сети

02

mtr по TCP на порт 443

03

tcpdump: рукопожатие TCP при запросе curl

Что наблюдается

Видны три пакета рукопожатия [S], [S.], [.], затем клиент отправляет 517 байт — приветствие TLS (ClientHello).

root@lab — запись со стенда

Трассировка:

strace и lsof

strace

strace -c cmd

сводка системных вызовов

strace -e trace=openat cmd

открываемые файлы

strace -fp PID

подключение к процессу, -f — все потоки

lsof

lsof -p PID

файлы и сокеты процесса

lsof -i :22

процесс, открывший порт

lsof +L1

удалённые, но открытые файлы

Ядро

dmesg -T

сообщения ядра с датой и временем

journalctl -k

те же сообщения из журнала systemd

sysctl -a | grep name

параметры ядра

Важно

strace останавливает процесс на каждом системном вызове и замедляет его в несколько раз.

Для физика

Программа не находит конфигурацию и не сообщает об этом: strace -e trace=openat показывает все пути, по которым она ищет файл.

Демонстрация:

strace, ss и lsof

01

Сводка системных вызовов ls

02

Файлы, открываемые cat

03

Слушающие порты: ss -tlnp

04

Владелец порта 22: lsof

Что наблюдается

ls выполняет около 150 системных вызовов; порт 22 открыт процессом systemd, так как в Ubuntu 24.04 ssh запускается по сокету.

root@lab — запись со стенда

Профилирование:

perf

01

perf top -F 99

профиль системы в реальном времени: функции, занимающие процессор

02

perf record -e cpu-clock -g -- cmd

запись выборок со стеками вызовов в perf.data

03

perf report

отчёт по функциям: [k] — ядро, [.] — пользовательский код

apt install linux-tools-$(uname -r)

Важно

В виртуальной машине аппаратных счётчиков обычно нет: событие cycles недоступно, используется программное cpu-clock.

Пояснение

Без отладочных символов вместо имён функций видны адреса; имена восстанавливаются установкой пакетов -dbgsym или сборкой с -g.

curl

из командной строки

curl -sI URL

только заголовки ответа

curl -v URL

весь обмен, включая установку TLS

curl -s -o /dev/null -w '%{http_code}\n' URL

только код ответа

curl -H 'Accept: application/json' URL

дополнительный заголовок запроса

curl -X POST -d @body.json URL

запрос с телом из файла

Пояснение

-w выводит переменные измерений запроса: код ответа, размеры, времена этапов. Их список — в man curl, раздел --write-out.

Важно

Запросы в цикле к стороннему сервису выполняются с паузой, иначе они создают на него заметную нагрузку.

Демонстрация:

curl

01

Заголовки ответа: curl -sI

02

Код ответа и полное время: -w

Что наблюдается

Сайт книги отвечает HTTP/2 200 за 0,37 с; времена отдельных этапов запроса выводятся той же опцией -w.

root@lab — запись со стенда

Заключение

01

Слепая печать и полноценный эмулятор терминала повышают скорость всей последующей работы.

02

Справка man описывает именно установленную версию команды; к ней обращаются раньше, чем к поисковой системе.

03

Долгие расчёты запускаются в tmux: обрыв связи их не прерывает.

04

grep, sed, awk и sort в конвейере заменяют разовую программу; повторяемая обработка переносится на Python.

05

Диагностика выполняется сверху вниз по подсистемам, и каждое предположение подтверждается измерением.

Мерилом является не число выученных команд, а число действий, выполняемых одной строкой вместо ручной работы.

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

Настройка рабочего места

01

Эмулятор терминала и одна фраза, объясняющая выбор

02

PS1 вида login@your-login-at-nsu: тремя цветами

03

asciinema для записи скринкастов

Практика: запись в asciinema

01

gtypist, упражнение S3

02

The Command Line Murders

03

Машина с Ubuntu по ssh: ядра, память, диск, IOPS, сеть

04

Однострочник на curl, раз в секунду

05

perf record и perf report; (*) zstd с отладочными символами

Требования к сдаче

На записи виден результат, а не только набор команды

gtypist: Raw speed, Adjusted speed и процент ошибок

curl: несколько строк вывода со всеми шестью полями

Мониторинг: ответы на все пять вопросов

(*) запись perf report и имя самой нагруженной функции с файлом исходников

Репозиторий: github.com/phys-dev/linux-tools-task · глава «Инструменты Linux»

Типичные

ошибки

01

Команды скопированы со слайдов

типографские тире и кавычки (–P10, “cmd”) оболочка не понимает

02

Цвета в PS1 без \[ и \]

bash неверно вычисляет длину приглашения, и курсор при редактировании смещается

03

perf record в ВМ без -e cpu-clock

аппаратное событие cycles недоступно, запись завершается ошибкой

04

Сжатие из /dev/urandom не прервано

cat /dev/urandom | zstd … работает бесконечно, out.zst растёт

05

На записи нет результата

gtypist закрыт до статистики, у однострочника видна одна строка

06

ethtool не сообщает Speed

у виртуального интерфейса скорость часто не определена; в отчёте объясняется, как получен ответ

Источники

1

Книга курса: глава «Инструменты Linux»

phys-dev.github.io/soft-dev-book

2

Лекция «Инструменты Linux», КИТ 2024, Young&&Yandex; И. Жидков

youtube.com/watch?v=PI4bkN-m0oI

3

Gregg B. Systems Performance: Enterprise and the Cloud. – 2nd ed. – Addison-Wesley, 2020

brendangregg.com/linuxperf.html

4

Стенберг Д. Мастер-класс по curl

youtube.com/watch?v=V5vZWHP-RqU

5

The Command Line Murders

github.com/veltman/clmystery

6

Интерактивные упражнения по grep, sed и awk

learnbyexample.github.io/interactive-grep-sed-awk-exercises

7

Страницы руководства: bash(1), signal(7), xargs(1), tmux(1), curl(1), perf-record(1)

Спасибо за внимание

Вопросы

phys-dev.github.io/soft-dev-book

^D