Инструменты 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-инструментов!