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

Лекция посвящена основным инструментам для эффективной работы в Linux-терминале. Мы рассмотрим всё: от настройки окружения до продвинутых методов диагностики проблем.

Часть 1: Подготовка и окружение

Слепая печать

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

  • Преимущества: Увеличение скорости, меньше ошибок, полный контроль над терминалом.
  • Сложности: Первые месяцы будут тяжелыми, но результат того стоит.

Инструменты для тренировки:

  • GNU Typist (gtypist) — консольный тренажер. Устанавливается через apt-get install gtypist или brew install gtypist.
  • monkeytype — современный онлайн-тренажер.
  • www.keybr.com — еще один популярный онлайн-тренажер.

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

Стандартные терминалы часто бедны на функции. Хороший терминал должен иметь:

  • Вкладки (табы).
  • Разделение окна (split panels).
  • Копирование в буфер обмена просто при выделении текста.
  • Поддержка кликабельных ссылок.
  • Система плагинов для расширения функционала.
  • Прочие "рюшечки" (темы, прозрачность и т.д.).

Рекомендуемые терминалы:

  • macOS: iTerm2
  • Linux: Terminator, Kitty, Konsole
  • Windows 10/11: Windows Terminal
  • Windows (условно-бесплатный): MobaXterm (также включает SSH-клиент, X-сервер и сетевые инструменты).

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

Для удобства чтения кода в терминале необходимы качественные моноширинные шрифты.

  • Source Code Pro (Adobe)
  • Inconsolata (Google)
  • Anonymous Pro

Ссылки для скачивания приведены в презентации.

Командные оболочки (Shell)

Это интерпретатор команд, с которым вы взаимодействуете в терминале.

  • bash (Bourne-Again SHell): Универсальный стандарт. Лучший выбор для разнородной инфраструктуры.
  • zsh (Z Shell): Обладает расширенными возможностями и богатой экосистемой плагинов. Идеален для локальной разработки и контролируемой инфраструктуры. Фреймворк Oh My Zsh делает настройку zsh простой и приятной.
  • fish (Friendly Interactive SHell): Современный shell с удобством "из коробки". Выбирается по тем же причинам, что и zsh.

Часть 2: Основы командной строки

Структура команд

  • syscall exec — ищет исполняемый файл по путям, указанным в переменной окружения $PATH.
  • which <команда> или type <команда> — показывают полный путь к исполняемому файлу команды. Флаг -a покажет все возможные пути в $PATH.
  • Флаги команд не стандартизированы, но есть соглашения:
    • -v / --version — показать версию.
    • -h / --help — показать справку.
    • -y / -f — пропустить подтверждение (yes/force).

Справка man

Основной источник информации — команда man (manual).

  • Пейджер: По умолчанию для просмотра используется less. Можно изменить переменной окружения $MANPAGER (например, MANPAGER=cat).
  • Основные клавиши в less:
    • h — помощь.
    • PgUp, PgDown, , — навигация.
    • /KEYWORD — поиск.
    • N, n — переход к следующему/предыдущему совпадению.
    • g — в начало документа.
    • G — в конец документа.
  • man <раздел> <команда> — например, man 1 bash (справка по bash из раздела "пользовательские команды").
  • man -P 'less +/KEYWORD' bash — открыть man с поиском по ключевому слову.

Управление процессами

  • Ctrl + C — послать сигнал SIGINT (завершение процесса).
  • Ctrl + \ — послать сигнал SIGQUIT (завершение с дампом памяти).
  • Ctrl + Z — послать сигнал SIGTSTP (приостановка процесса).
  • fg — вернуть приостановленный процесс на передний план.
  • bg — запустить приостановленный процесс в фоновом режиме.
  • stty -a — посмотреть и перенастроить настройки терминала.

Управление вводом/выводом (I/O Redirection)

  • Потоки данных:
    • stdin (0) — стандартный вход.
    • stdout (1) — стандартный выход.
    • stderr (2) — стандартный вывод ошибок.
  • Перенаправление:
    • команда > файл — записать stdout в файл (перезаписать).
    • команда >> файл — дописать stdout в конец файла.
    • команда 2> файл — записать stderr в файл.
    • команда &> файл — записать stdout и stderr в файл.
    • команда 2>&1 — перенаправить stderr в stdout.
    • команда | другая_команда — передать stdout первой команды на stdin второй.
  • Специальные файлы:
    • /dev/null — "черная дыра".
    • /dev/zero — источник нулей.
    • /dev/urandom — источник псевдослучайных чисел.

Полезные помощники

  • Автодополнение (completion): Клавиша TAB — ваш лучший друг.
    • Одно нажатие — дополнить команду/файл.
    • Двойное нажатие — показать все возможные варианты.
  • История команд (~/.bash_history, ~/.zsh_history):
    • Ctrl + R — реверсивный поиск по истории.
    • history | grep <ключевое_слово> — поиск по истории.
    • sudo !! — выполнить предыдущую команду с sudo.
    • !$ — подставить последний аргумент предыдущей команды.

Ветвления, циклы и подоболочки (Subshell)

  • ; — разделитель команд (выполняются последовательно).
  • Циклы и условия:
    while true; do ...; done
    for i in $(seq 1 10); do echo $i; done
    if [ $(wc -l file.txt) -gt 3 ]; then ...; fi
    
  • read — встроенная команда для чтения ввода в переменные.
  • Подоболочка (Command Substitution):
    • $(команда) или `команда` — вывод команды подставляется в строку.
  • [ — это бинарник, а не синтаксис shell. Подробнее: man [ или man test.

Часть 3: Полезные команды и утилиты

Find и многопоточность

  • find — мощный поиск файлов и директорий.
    • Пример: find /etc -type f -name "nginx*"
  • xargs — передает результаты из stdin в аргументы другой команды.
    • -P <N> — запуск до N процессов параллельно.
    • -n1 — передавать по одному аргументу за раз.
    • Пример: find ... | xargs -P10 -n1 md5sum
  • GNU parallel — более мощная альтернатива xargs для параллельного выполнения.

Управление сессиями: screen и tmux

Позволяют запускать процессы, которые продолжают работать после разрыва соединения.

  • screen:

    • screen — создать новую сессию.
    • Ctrl + A, D — отключиться от сессии (detach).
    • screen -ls — список сессий.
    • screen -r <session> — подключиться к сессии.
  • tmux (рекомендуется):

    • tmux — создать сессию.
    • Ctrl + B, D — отключиться.
    • tmux ls — список сессий.
    • tmux a -t <session> — подключиться.
    • Интеграция с iTerm2: tmux -CC.
  • watch -d -n1 "команда" — выполняет команду раз в секунду и подсвечивает различия.

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

  • Vim:
    • Мощный, вездесущий, имеет крутую кривую обучения.
    • vimtutor — встроенный интерактивный учебник. Пройдите его!
    • Основы: i — вход в режим вставки, ESC — возврат в нормальный режим, :wq — сохранить и выйти, :q! — выйти без сохранения.
    • vimdiff file1 file2 — сравнение файлов.
  • Emacs: Другой мощный редактор. "Если вы знаете, что это, скорее всего, вам не нужна эта лекция".
  • Система контроля версий Git: Обязательный инструмент для любой современной IT-профессии.

Потоковая обработка текста

Мощные утилиты для фильтрации и преобразования текстовых потоков. Не используйте их для построения продакшен-процессов!

  • grep — фильтрация строк по регулярному выражению.
  • awk — целый язык для обработки текста, основанный на колонках.
  • sed — потоковый текстовый редактор (замена, удаление строк и т.д.).
  • cut — извлечение конкретных колонок.
  • head / tail — вывод начала/конца файла.
  • tr — замена или удаление символов.
  • wc — подсчет строк, слов, символов.
  • sort — сортировка строк.
  • uniq — фильтрация повторяющихся строк.

Тренажеры: grepexercises, sedexercises, awkexercises (устанавливаются через pip).

Практика: The Command Line Murders — текстовый квест в терминале для отработки навыков. (https://github.com/veltman/clmystery)


Часть 4: Диагностика и поиск проблем

Методология и ресурсы

  • Брендан Грегг (Brendan Gregg) — гуру производительности.
  • Его сайт — кладезь информации: https://www.brendangregg.com/linuxperf.html
  • Книга "Systems Performance: Enterprise and the Cloud" — must-read для углубленного изучения.

На его сайте можно найти бесценные диаграммы выбора инструментов:

  • Linux Observability Tools
  • Linux Static Performance Tools
  • Linux Benchmarking Tools
  • Linux Tuning Tools

Мини-топ полезных утилит

  • Мониторинг процессов и системы:
    • top / htop — интерактивный просмотр процессов.
    • atop — расширенный мониторинг, может записывать данные в файл.
    • pidof — найти PID по имени процесса.
    • ps fauxw | less — детальный список процессов.
  • Диски и файловая система:
    • df -h / df -ih — место на дисках и inodes.
    • du -sh /path/* — размер директорий.
    • iostat -x 1 — статистика ввода-вывода.
  • Сеть:
    • ss -s / netstat -ntlp — статистика сокетов и открытые порты.
    • ping / traceroute / mtr — диагностика сетевой связности.
    • tcpdump — "сниффер" сетевых пакетов.
    • ethtool eth0 — настройки и статистика сетевого интерфейса.
  • Прочее:
    • lsof -i:포트 / lsof -p $PID — список открытых файлов сокетов процессом.
    • strace -fp $PID / strace $cmd — трассировка системных вызовов.
    • dmesg -T — просмотр логов ядра.
    • perf top -F99 — профилирование системы в реальном времени.
    • curl — мастер на все руки для работы с HTTP/сетью.

Заключение

Освоение терминала и его инструментов — это путь к настоящей эффективности в Linux. Начинайте с основ: печать, терминал, справка man. Постепенно внедряйте в свою практику более сложные инструменты, такие как vim, tmux, grep, awk и sed. Не бойтесь экспериментировать и использовать ресурсы, подобные сайту Брендана Грегга, для углубления знаний.

Удачи в освоении мощного мира Linux-инструментов!