Чёрный экран, мигающий курсор, никаких кнопок — для человека, привыкшего к Windows, командная строка выглядит как шаг назад. Зачем набирать текст, если можно кликнуть мышкой?
У графического интерфейса есть очевидные плюсы: он привычен, нагляден, подсказывает возможные действия — не нужно ничего запоминать, всё перед глазами. Но когда люди пробуют всерьёз поработать в консоли, многие с удивлением обнаруживают, что текстовый интерфейс по-своему удобен — а для ряда задач попросту быстрее. Вот почему.
Одна из ключевых идей командной строки Unix — принцип маленьких
инструментов. Каждая утилита делает что-то одно: grep ищет
текст, sort сортирует строки, wc считает их количество.
По отдельности каждая не слишком впечатляет. Но их можно
соединять в цепочки — передавать вывод одной команды на вход
другой через символ | (он называется «пайп», от английского
pipe — труба).
Например, вы хотите узнать, с каких IP-адресов чаще всего заходят на ваш сайт:
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20Выглядит пугающе. Но никто не пишет такое целиком, в одно движение. Администратор строит эту команду как домик из кубиков, добавляя по одному элементу и проверяя результат на каждом шаге.
Ход мысли примерно такой: «Мне нужны IP-адреса — это первое поле в каждой строке лога. Вытащу-ка их... Хорошо, вижу список. Теперь посчитать, сколько раз встречается каждый. Отлично. Отсортировать по убыванию... И взять двадцатку самых частых».
Каждый шаг — одна простая утилита. awk вытаскивает нужное
поле, sort сортирует, uniq -c считает повторения, head -20
обрезает вывод. Пайп | просто передаёт результат на вход
следующей. Вы собираете решение по частям, как конструктор, —
и на каждом этапе видите, что получается.
Мы подробно разберём каждую из этих утилит в главе 5. Пока достаточно понять принцип: не нужно держать в голове всю команду целиком — нужно уметь думать «шагами».
Эта комбинируемость — огромная сила консоли. Но у неё есть и обратная сторона. Когда задача усложняется, однострочники превращаются в нечитаемые конструкции с вложенными кавычками и подстановками, которые через неделю не разберёт даже автор. Умение почувствовать момент, когда пора перестать изощряться в bash и написать нормальный скрипт на Python — отдельный и важный навык. Мы ещё вернёмся к этому позже.
Команду можно записать, повторить, вставить в скрипт. То, что вы сделали руками на одном сервере, скрипт воспроизведёт на десяти — одинаково и без ошибок. Эту же команду можно положить в систему контроля версий, запустить по расписанию, передать коллеге. Текст — универсальный формат, с которым удобно работать и людям, и программам.
С графическим интерфейсом так не получится: попробуйте описать коллеге последовательность из двадцати кликов по меню.
У консоли есть ещё одно преимущество, о котором редко пишут в учебниках, — она почти ничего не требует от канала связи. SSH-сессия — это буквально килобайты трафика. Вы передаёте нажатия клавиш в одну сторону и получаете текст в другую. Всё.
Это звучит как мелочь — до тех пор, пока вам не приходится чинить сервер из зала ожидания аэропорта с полумёртвым Wi-Fi или из купе поезда, где мобильный интернет пропадает каждые три минуты. SSH-сессия будет работать даже там, где соединение с удалённым рабочим столом давно бы разорвалось.
Больше того: подключиться к серверу по SSH можно даже с телефона, установив приложение-терминал. Это неудобно — набирать команды на экранной клавиатуре не пожелаешь и врагу. Но когда коллеги просят срочно посмотреть, что случилось с сервером, а вы в дороге с одним телефоном в кармане — этот вариант серьёзно выручит.
Серверы, как правило, устанавливают без графического интерфейса. Не из аскетизма — причины практические.
Большинство серверных программ в Linux управляются из командной строки. Графические интерфейсы к ним существуют, но это отдельные проекты, которые разрабатываются независимо от самой программы. GUI может отставать от текущей версии, не поддерживать часть настроек, реализовывать логику по-своему. По сути, вам приходится учить не одну вещь, а две: саму программу и её графическую обёртку — со своими особенностями, ограничениями и багами. А когда что-то идёт не так, всё равно приходится открывать консоль и разбираться через конфиги и логи.
Кроме того, консоль автоматизируется (скрипты, контроль версий, повторяемость), а SSH работает там, где графический интерфейс давно бы отвалился.
Всё это звучит убедительно, но пока абстрактно. Давайте перейдём к конкретике — приёмам, благодаря которым работа в консоли становится быстрой и приятной.
Это самый важный приём в командной строке. Вместо того чтобы вводить длинные имена файлов и команд целиком, вы нажимаете клавишу Tab — и оболочка дописывает за вас.
Попробуйте. Введите начало команды и нажмите Tab:
hos TabОболочка дополнит до hostname.
Это работает и для путей к файлам. Введите:
cd /ho TabОболочка дополнит до cd /home/. Если в /home/ один каталог —
дополнит и его:
cd /home/stu TabПолучится cd /home/student/.
Если совпадений несколько, одно нажатие Tab не сработает. Нажмите Tab дважды — оболочка покажет все варианты:
ls /u Tab Tabusr/ udev/
Допишите ещё одну букву, чтобы убрать неоднозначность, и снова нажмите Tab:
ls /us TabПолучится ls /usr/.
Совет. Привыкайте нажимать Tab после каждых 2–3 букв. Это не лень — это нормальная практика. Автодополнение не только экономит время, но и защищает от опечаток: если Tab не дополняет — значит, вы ввели что-то не то.
Оболочка запоминает все команды, которые вы вводили. Нажмите стрелку вверх — появится предыдущая команда. Ещё раз вверх — команда перед ней. Стрелка вниз — обратно к более новым командам.
Это полезно, когда нужно повторить или слегка изменить предыдущую команду. Вместо того чтобы набирать заново:
docker compose -f docker-compose.yml up -d— просто нажмите стрелку вверх, найдите нужную команду и нажмите Enter.
Стрелки удобны для последних 3–5 команд. Если нужно найти команду, которую вы вводили час назад — используйте Ctrl+R.
Нажмите Ctrl+R — появится приглашение:
(reverse-i-search)`':
Начните вводить часть команды — например, docker:
(reverse-i-search)`docker': docker compose up -d
Оболочка покажет последнюю команду, содержащую docker.
Нажмите Ctrl+R ещё раз, чтобы перейти к более ранним
совпадениям. Когда нашли нужную команду — нажмите Enter,
чтобы выполнить, или стрелку вправо, чтобы отредактировать
перед выполнением.
Чтобы выйти из поиска без выполнения — нажмите Ctrl+C.
Чтобы увидеть всю историю команд:
historyОболочка покажет пронумерованный список:
1 whoami
2 hostname
3 pwd
4 ls /
5 cd /tmp
6 cd
Чтобы посмотреть последние 10 команд:
history 10В командной строке есть набор сочетаний клавиш, которые ускоряют работу. Вот самые важные — выучите их в первую очередь:
| Сочетание | Действие |
|---|---|
Ctrl+C |
Прервать выполнение текущей команды |
Ctrl+D |
Завершить сеанс (аналог команды exit) |
Ctrl+L |
Очистить экран (аналог команды clear) |
Ctrl+A |
Перейти в начало строки |
Ctrl+E |
Перейти в конец строки |
Ctrl+W |
Удалить слово перед курсором |
Ctrl+U |
Удалить всё от курсора до начала строки |
Ctrl+K |
Удалить всё от курсора до конца строки |
Ctrl+C — самое важное сочетание. Запомните его первым.
Если команда работает слишком долго, если вы случайно запустили
что-то не то, если экран заполнился непонятным текстом —
нажмите Ctrl+C. Это безопасно: команда прерывается, и вы
возвращаетесь к обычному приглашению $.
ping 8.8.8.8PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=118 time=5.42 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=118 time=5.31 ms
^C
--- 8.8.8.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss
Команда ping работает бесконечно, пока вы не остановите её.
^C в выводе — это и есть ваше нажатие Ctrl+C.
Ctrl+D означает «конец ввода». Если вы находитесь
в командной строке, Ctrl+D завершает сеанс — как команда exit.
Если вы внутри какой-то программы (например, python3
или mariadb) — Ctrl+D выходит из неё.
Когда экран заполнен выводом предыдущих команд и хочется
начать с чистого листа — нажмите Ctrl+L. Это аналог
команды clear, только быстрее — не нужно ничего набирать.
В обычном приложении Ctrl+C — это «копировать». Но
в терминале Ctrl+C — это «прервать команду». Поэтому
для копирования и вставки используются другие сочетания.
Терминалов существует много: Windows Terminal, GNOME Terminal, Konsole, xterm и другие. Почти во всех работает одна и та же схема:
| Действие | Сочетание клавиш |
|---|---|
| Копировать | Ctrl+Shift+C |
| Вставить | Ctrl+Shift+V |
Во многих терминалах также работает вставка правым кликом мыши.
В Linux есть особенность, к которой быстро привыкаешь и без которой потом сложно жить: два независимых буфера обмена.
Основной буфер — работает через Ctrl+Shift+C /
Ctrl+Shift+V, как описано выше. Это аналог обычного буфера
обмена в Windows.
Буфер выделения (selection buffer) — работает автоматически. Вы выделяете текст мышью — он тут же попадает в буфер. Чтобы вставить — нажимаете среднюю кнопку мыши (колёсико). Никаких дополнительных клавиш.
Два буфера работают независимо. Вы можете скопировать одну
строку через Ctrl+Shift+C, выделить мышью другую, и вставить
любую из них: Ctrl+Shift+V вставит первую, средняя кнопка
мыши — вторую.
На практике буфер выделения используется чаще: увидели нужную строку в логе — выделили мышью, перешли в другое окно — нажали среднюю кнопку. Два движения вместо четырёх.
Примечание. Буфер выделения — это особенность оконной системы X11 в Linux. Он работает, если вы подключаетесь с Linux-машины или используете терминал с поддержкой X11. В Windows Terminal буфер выделения недоступен, но основной буфер работает как обычно.
Набрали длинную команду и заметили ошибку в начале? Не нужно стирать всё. Используйте клавиши:
- Стрелки влево/вправо — перемещение по одному символу.
- Ctrl+A — прыжок в начало строки.
- Ctrl+E — прыжок в конец строки.
- Ctrl+стрелка влево/вправо — перемещение по словам (работает в большинстве терминалов).
Это работает точно так же, как перемещение курсора в текстовом редакторе, только вместо мыши вы используете клавиатуру.
Новички часто боятся ввести «не ту команду» и что-то сломать. Это понятный страх, но на практике сломать что-то серьёзное одной командой сложно — особенно если вы работаете от обычного пользователя, а не от root.
Вот что произойдёт, если вы ошибётесь:
Опечатка в имени команды:
hotsname-bash: hotsname: command not found
Оболочка просто скажет, что такой команды нет. Ничего не сломается.
Несуществующий файл:
cat /etc/nofilecat: /etc/nofile: No such file or directory
Ничего страшного — файл не найден, команда завершилась.
Нет прав доступа:
cat /etc/shadowcat: /etc/shadow: Permission denied
Система не даст вам прочитать файл, к которому у вас нет доступа. Никакого вреда.
Правило. В Linux обычный пользователь не может повредить систему. Самое серьёзное, что может случиться — вы удалите или испортите собственные файлы в домашнем каталоге. Но даже это легко исправить на учебном сервере. Ломайте, экспериментируйте, пробуйте — так учатся все.
Опытные администраторы часто работают с несколькими сеансами одновременно: в одном окне редактируют конфиг, в другом смотрят логи, в третьем перезапускают сервис.
Самый простой способ — открыть несколько вкладок в терминале. В большинстве терминалов:
- Ctrl+Shift+T — новая вкладка.
- Ctrl+Tab или Ctrl+Page Down — переключение между вкладками.
В каждой вкладке откройте отдельное SSH-соединение с сервером. Теперь вы можете одновременно следить за логами и вводить команды:
Вкладка 1: nano /etc/nginx/conf.d/default.conf
Вкладка 2: sudo systemctl restart nginx
Вкладка 3: tail -f /var/log/nginx/error.log
Примечание. Позже, в главе 9, мы познакомимся с программой
tmux, которая позволяет делить один экран на несколько панелей прямо на сервере — без открытия дополнительных вкладок.
В этой главе вы узнали приёмы, которые делают работу в консоли удобной:
- Tab — автодополнение команд и путей. Нажимайте после каждых 2–3 букв.
- Стрелки вверх/вниз — история команд. Не набирайте одно и то же дважды.
- Ctrl+R — поиск по истории. Находит команду по фрагменту.
- Ctrl+C — аварийный выход. Прерывает любую команду.
- Ctrl+L — очистка экрана. Быстрее, чем
clear. - Ctrl+A / Ctrl+E — прыжок в начало и конец строки.
- Копирование/вставка — через
Ctrl+Shift+C/V, а в Linux ещё и через выделение мышью + среднюю кнопку (два независимых буфера обмена).
Эти приёмы кажутся мелочью, но именно из них складывается ощущение «мне тут удобно». Попробуйте использовать их с самого начала — и вы быстро поймёте, почему администраторы предпочитают консоль.