Терминал Linux: справка, история и клавиши Bash
Автор: Казачкин Даниил Михайлович · Обновлено
Осваивать терминал удобнее через небольшую задачу: найти команду, прочитать её контракт, выполнить безопасный пример и повторить его из истории. Запоминание сотен ключей не требуется. Для этого урока нужна интерактивная Bash; поведение истории и клавиш в другом shell может отличаться.
Откуда берётся команда и где читать справку
type понимает встроенные команды, функции, alias и внешние программы. which обычно ищет исполняемый файл по PATH и не объясняет все способы разрешения имени оболочкой. Поэтому type -a cd полезнее вопроса, где находится файл cd: в Bash это builtin, меняющий состояние текущего shell.
type -a cd printf ls
help cd
ls --help
man 1 ls
man 5 passwdhelp относится к встроенным командам Bash, --help — распространённое, но не всеобщее соглашение программы. man 1 описывает пользовательские команды, man 5 — форматы файлов; одно имя может существовать в нескольких разделах. В SYNOPSIS квадратные скобки обычно обозначают необязательную часть, многоточие — повторение, а не символы, которые надо перепечатать.
whatis ls выводит краткое назначение, apropos 'copy files' ищет по описаниям. База apropos может отсутствовать или быть устаревшей. Клиент tldr, если установлен, даёт короткие примеры, но ограничения и коды завершения лучше проверять по штатной справке. В Astra Linux и других дистрибутивах базовые команды работают сходно; конкретный пакет man-pages или tldr выбирают через менеджер своего дистрибутива. Для первого административного обзора используйте id (кто выполняет команду), ps -ef (процессы), df -h (свободное место), systemctl --failed (отказавшие units) и journalctl -b -p warning (предупреждения текущей загрузки). Последние команды требуют системы с systemd; отсутствие вывода интерпретируют вместе со статусом и правами на журнал.
Как выйти из man и найти нужный раздел
По умолчанию man часто запускает просмотрщик less. Клавиша q завершает просмотр, /pattern начинает поиск, n переходит к следующему совпадению, g — в начало, G — в конец. Ctrl+C не является универсальной командой выхода из любой программы: сначала смотрите её управление.
Для русской справки необходимы соответствующая locale и установленный перевод man-pages. Попробуйте man -L ru ls; отсутствие перевода не означает отсутствие команды. man -L C ls выбирает базовый язык. Если флаг появился недавно, сверяйте документацию с установленной версией программы: перевод может отставать. Сообщение No manual entry требует проверки имени, раздела и пакета документации, а не запуска команды через sudo.
Редактирование строки без повторного набора
| Клавиши в стандартном Emacs-режиме Bash | Действие |
|---|---|
| Tab, затем ещё Tab | Дополнение и список вариантов |
| Ctrl+A / Ctrl+E | Начало / конец строки |
| Alt+B / Alt+F | Слово назад / вперёд |
| Ctrl+U / Ctrl+K / Ctrl+W | Удаление до начала / до конца / слова слева |
| Ctrl+R | Обратный поиск в истории; повторное нажатие ищет дальше |
| Ctrl+L | Очистить видимую область, сохранив командную строку |
| Ctrl+C / Ctrl+Z | Прервать foreground-задачу / приостановить её |
| Ctrl+D | Сообщить EOF при пустом вводе; пустая строка shell обычно завершает сеанс |
Эти сочетания зависят от режима Readline и настроек терминала. В режиме set -o vi редактирование отличается. После Ctrl+Z процесс остаётся существовать: его видно в jobs, а fg возвращает на передний план. clear и Ctrl+L очищают представление, но не удаляют историю shell, журналы или данные программы.
История команд и её границы
history выводит список текущей Bash. Поиск history | grep 'find' помогает вспомнить рабочую команду; сам поиск тоже может попасть в вывод. Ctrl+R позволяет сначала отредактировать найденную строку, а затем запустить её. Перед повтором команды проверьте текущий каталог и аргументы: прежняя строка удаления может оказаться опасной в другом месте.
printf 'history file: %s\n' "${HISTFILE:-не задан}"
printf 'memory limit: %s\n' "${HISTSIZE:-не задан}"
HISTTIMEFORMAT='%F %T '
history 5Обычно HISTFILE указывает на ~/.bash_history, HISTSIZE ограничивает список в памяти, HISTFILESIZE — файл. Время показывается корректно для записей с сохранённой временной отметкой; включение формата не восстанавливает отсутствовавшие данные прошлого. История может записываться при выходе или дополнительными настройками prompt. Несколько открытых Bash имеют отдельные списки и влияют на общий файл.
Удаление строки через history -d НОМЕР действует на текущий список. history -c очищает его, history -w записывает текущий список в HISTFILE. Эта последовательность не стирает другие сеансы, audit-журналы или уже утёкший секрет. Выполнять её для упражнения следует только с отдельным HISTFILE. Если пароль попал в команду, его меняют; очистка истории не заменяет отзыва секрета.
Практика: отдельная история
В новой интерактивной Bash создайте временный файл и переключите только её историю:
training_history=$(mktemp)
HISTFILE=$training_history
history -c
printf 'history exercise\n'
history 3
history -w
cat "$training_history"
unset HISTFILE
rm -- "$training_history"Ожидается собственный небольшой список, содержащий учебный printf. После unset HISTFILE эта учебная Bash не записывает историю в файл при выходе; исходный shell родительского сеанса сохраняет свои настройки. Не применяйте пример в сеансе, историю которого хотите сохранить.
Для самостоятельной проверки найдите в man ls назначение -d, вернитесь клавишей q, наберите без запуска длинную строку и отредактируйте её Ctrl+A/Ctrl+K. Объясните, почему нажатие Ctrl+L не защищает секрет и почему help cd полезнее поиска исполняемого файла cd.