Горячие клавиши терминала Linux и приёмы работы в bash
Горячие клавиши терминала Linux в bash дают редактировать строку без мыши: Ctrl+A и Ctrl+E переносят курсор в начало и конец, Ctrl+U и Ctrl+K вырезают, Ctrl+R ищет по истории команд. Ниже сочетания, настройка истории и автодополнения, перенаправление вывода и конвейеры.

Содержание
Кто обрабатывает сочетания: эмулятор, оболочка, readline
В терминале клавиши ловят сразу три слоя, и от этого зависит, почему одно сочетание работает, а другое нет. Эмулятор терминала (Konsole, GNOME Terminal или Ptyxis, Alacritty, kitty) отвечает за окно: вкладки, масштаб, копирование. Поэтому копирование и вставка там идут через Ctrl+Shift+C и Ctrl+Shift+V: обычный Ctrl+C занят. Оболочка bash редактирует строку через библиотеку readline, и почти все сочетания ниже относятся к ней. Наконец, драйвер терминала в ядре превращает Ctrl+C и Ctrl+Z в сигналы для запущенной программы.
Сочетания readline по умолчанию работают в режиме emacs. В zsh они почти такие же, в fish большинство тоже совпадает. Если вы предпочитаете клавиши vim, включите set -o vi в ~/.bashrc, но дальше в статье везде режим по умолчанию.
Горячие клавиши терминала Linux для редактирования строки
Набор, который окупается за первый же день. Alt в некоторых эмуляторах занят меню, тогда вместо него нажмите и отпустите Esc, а потом букву.
| Сочетание | Что делает |
|---|---|
Ctrl+A / Ctrl+E | В начало или в конец строки |
Alt+B / Alt+F | На слово назад или вперёд |
Ctrl+U | Вырезать всё от курсора до начала строки |
Ctrl+K | Вырезать от курсора до конца строки |
Ctrl+W / Alt+D | Вырезать слово перед курсором или после него |
Ctrl+Y | Вставить последнее вырезанное |
Ctrl+_ | Отменить последнее изменение в строке |
Alt+. | Вставить последний аргумент предыдущей команды, повторное нажатие листает дальше |
Ctrl+R | Поиск по истории |
Ctrl+L | Очистить экран, текущая строка остаётся |
Ctrl+X Ctrl+E | Открыть строку в редакторе из $EDITOR, после сохранения команда выполнится |
Ctrl+C | Прервать программу или сбросить набранную строку |
Ctrl+D | Конец ввода, на пустой строке закрывает оболочку |
Вырезанное через Ctrl+U, Ctrl+K и Ctrl+W попадает в собственный буфер readline, а не в системный буфер обмена. Типичный приём: начали набирать длинную команду, поняли, что сначала нужна другая. Нажмите Ctrl+U, выполните нужную, затем Ctrl+Y вернёт отложенную строку.
Ctrl+Z, фоновые задания и зависший терминал
Ctrl+Z не закрывает программу, а приостанавливает её. Это удобно: открыли файл в редакторе, понадобилось что-то проверить в оболочке, нажали Ctrl+Z, проверили, вернулись командой fg.
jobs # список заданий текущей оболочки
fg %1 # вернуть задание 1 на передний план
bg %1 # продолжить задание 1 в фоне
long-task & # сразу запустить в фоне
disown %1 # отвязать от оболочки, переживёт закрытие окна
nohup ./build.sh > build.log 2>&1 &Если терминал вдруг перестал реагировать на ввод, вы, скорее всего, нажали Ctrl+S: это старая команда остановки вывода. Освобождает его Ctrl+Q. Отключить ловушку навсегда можно строкой stty -ixon в ~/.bashrc, тогда Ctrl+S заработает как поиск вперёд по истории. Если после вывода бинарного файла экран заполнился мусором, наберите вслепую reset и Enter.
История команд bash: поиск, повтор и настройка
Bash помнит команды и сохраняет их в ~/.bash_history при выходе из оболочки. Самые полезные способы до них добраться:
history | tail -20 # последние 20 команд с номерами
!! # повторить предыдущую команду
sudo !! # повторить её с sudo
!512 # выполнить команду номер 512
!ssh # последнюю команду, начинавшуюся с ssh
!$ # последний аргумент прошлой команды
^ngnix^nginx # повторить прошлую команду с исправленной опечаткойПоиск по Ctrl+R работает инкрементально: набирайте кусок команды, повторные Ctrl+R листают совпадения дальше в прошлое, Enter выполняет, стрелка вправо оставляет строку для правки, Ctrl+G отменяет поиск.
Настройка истории
Значения по умолчанию скромные, а при нескольких открытых окнах история последнего закрытого окна затирает остальные. Добавьте в ~/.bashrc:
HISTSIZE=50000
HISTFILESIZE=100000
HISTCONTROL=ignoreboth:erasedups
HISTTIMEFORMAT='%F %T '
shopt -s histappend
PROMPT_COMMAND="history -a${PROMPT_COMMAND:+; $PROMPT_COMMAND}"ignoreboth не сохраняет дубликаты подряд и команды, начинающиеся с пробела. Последнее полезно: если нужно ввести команду с паролем или токеном, поставьте перед ней пробел, и она не попадёт в историю. Случайно сохранённую строку удаляет history -d номер, затем history -w перезапишет файл.
Автодополнение по Tab и файл .inputrc
Одно нажатие Tab дополняет имя команды, файла или каталога, если вариант единственный. Двойное показывает все варианты. Дополнение ключей команд, имён пакетов, служб systemd и веток git обеспечивает пакет bash-completion. В Ubuntu и Fedora он обычно стоит, в минимальных установках Debian и в Arch его ставят отдельно:
sudo apt install bash-completion
sudo dnf install bash-completion
sudo pacman -S bash-completionПосле установки откройте новый терминал. Теперь systemctl restart ss плюс Tab дополнит имя службы, а apt install firef плюс Tab имя пакета.
Поведение readline настраивается в ~/.inputrc. Четыре строки, которые делают жизнь заметно проще:
$include /etc/inputrc
set completion-ignore-case on
set show-all-if-ambiguous on
"\e[A": history-search-backward
"\e[B": history-search-forwardПервая сохраняет системные настройки, вторая игнорирует регистр при дополнении, третья показывает варианты с первого Tab. Последние две превращают стрелки вверх и вниз в поиск по началу строки: набрали git, нажали стрелку вверх, и листаются только команды git. Применяется в новом терминале или сразу по bind -f ~/.inputrc.
Перенаправление вывода в Linux: >, >>, 2> и /dev/null
У каждой программы три стандартных потока: ввод (0, stdin), вывод (1, stdout) и ошибки (2, stderr). Перенаправление отправляет их в файл или берёт из файла:
ls -l > list.txt # вывод в файл, файл перезаписывается
ls -l >> list.txt # дописать в конец файла
find / -name '*.conf' 2> /dev/null # спрятать ошибки
make > build.log 2>&1 # вывод и ошибки в один файл
make &> build.log # то же короче, работает в bash
sort < names.txt # взять ввод из файла
grep -c error <<< "$text" # строка как вводПорядок в 2>&1 важен. Запись команда > файл 2>&1 отправит в файл оба потока, а команда 2>&1 > файл отправит ошибки на экран: на момент копирования второй поток указывал на терминал.
Многострочный текст удобно подавать конструкцией here-document. Так, например, создают конфиг одной командой:
cat > ~/notes.txt <<'EOF'
Первая строка
Переменные вроде $HOME здесь не раскрываются
EOFОдна лишняя угловая скобка в > вместо >> молча стирает файл. Включите защиту командой set -o noclobber в ~/.bashrc: оболочка откажется перезаписывать существующий файл через >, а когда это действительно нужно, пишите >|.
Конвейеры, tee и xargs
Вертикальная черта передаёт вывод одной команды на ввод следующей. Из маленьких утилит так собираются полноценные отчёты:
# десять самых частых IP в журнале nginx
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head
# ошибки текущей загрузки с поиском по слову
journalctl -b -p err | grep -i usb
# смотреть вывод и одновременно писать в файл
sudo apt full-upgrade 2>&1 | tee upgrade.log
# передать список файлов как аргументы
find . -name '*.tmp' -print0 | xargs -0 rm -vtee нужен и для записи в системные файлы: echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swap.conf. Конструкция sudo echo ... > файл не сработает, потому что перенаправление делает ваша оболочка без прав root. Пара -print0 и -0 защищает от пробелов в именах файлов. Больше приёмов поиска в материале поиск файлов: find и grep.
В скриптах добавляйте set -o pipefail: без него код возврата конвейера равен коду последней команды, и падение в середине цепочки пройдёт незамеченным.
Мелкие приёмы, которые экономят время
cd -возвращает в предыдущий каталог,cdбез аргументов ведёт домой.- Фигурные скобки размножают аргументы:
mkdir -p project/{src,docs,tests}создаст три каталога,cp nginx.conf{,.bak}сделает резервную копию файла. команда1 && команда2выполнит вторую только при успехе первой,команда1 || команда2только при ошибке.$(команда)подставляет вывод одной команды в другую:echo "Ядро: $(uname -r)".fcоткрывает последнюю команду в редакторе. Удобно, если она длинная и в ней ошибка в середине.Ctrl+Shift+Tв большинстве эмуляторов открывает новую вкладку, аCtrl+Shift+Fищет по выводу в окне.
Часто повторяемые длинные команды стоит превратить в короткие имена, как это сделать, рассказано в статье aliases в Linux. Если вы только начинаете, сначала пригодится список основных команд Linux, а для работы на удалённых машинах инструкция как подключиться по SSH. Полный список привязок readline есть в разделе Bindable Readline Commands руководства GNU Bash, а свои текущие привязки показывает bind -P.
Частые вопросы
Как скопировать и вставить текст в терминале Linux?
В большинстве эмуляторов через Ctrl+Shift+C и Ctrl+Shift+V. Обычный Ctrl+C прерывает запущенную программу.
Как найти команду в истории bash?
Нажмите Ctrl+R и начните набирать часть команды. Повторный Ctrl+R показывает более ранние совпадения, Enter выполняет найденное.
Почему терминал завис и не реагирует на клавиши?
Скорее всего, нажат Ctrl+S, который останавливает вывод. Нажмите Ctrl+Q. Отключить поведение можно командой stty -ixon.
Как записать в файл и вывод, и ошибки?
Используйте команда > файл 2>&1 или короче команда &> файл. Порядок 2>&1 после имени файла важен.
Как не сохранять команду с паролем в истории?
При HISTCONTROL=ignoreboth или ignorespace поставьте пробел перед командой. Уже сохранённую строку удалит history -d номер.
Документация и источники
- Bash Reference Manual: Bindable Readline Commands, GNU Project, 2025
- Bash Reference Manual: Redirections, GNU Project, 2025
- Bash Reference Manual: Bash History Facilities, GNU Project, 2025
Читайте также
- Aliases в Linux: псевдонимы команд, которые экономят время
- Основные команды Linux для начинающих с примерами
- Поиск файлов в Linux: по имени, размеру, дате и содержимому
- Как подключиться по SSH из Linux и Windows: от первого входа до туннелей
- Права доступа в Linux: chmod, chown и разбор Permission denied
Команды проверены на актуальных версиях дистрибутивов на момент обновления. Перед изменением системных настроек сделайте резервную копию.