Интерфейс командной строки
CLI
Что это такое
Интерфейс командной строки начинается с привычки: тянуться к терминалу, а не к графическому инструменту. Вы набираете команду, читаете её вывод и из узнанного собираете следующую команду. Инструментарий при этом даёт оболочка, а сам навык состоит в том, чтобы довести работу с ней до автоматизма. Выигрыш заметен как скорость на незнакомых задачах: команду можно поправить и запустить снова, а диалоговое окно остаётся только щёлкнуть ещё раз.
Почему это важно
Графический инструмент показывает одну компоновку за раз, а командная строка позволяет задавать вопросы: сколько, какие именно, отсортированные по чему, изменённые за последнюю неделю. В графическом инструменте такой информации может не быть вовсе, а приходит она в форме, пригодной для скрипта или для вставки в сообщение. Есть и вторая половина — воспроизводимость. Команда служит записью того, что вы сделали, поэтому коллега, который спрашивает, как получился список, получает одну строку, а не описание кликов.
Ключевые идеи
Команды компонуются, а диалоговые окна — нет
Интерфейс единообразен: всё читает текст, пишет текст и сообщает код возврата. Именно поэтому инструменты, написанные разными людьми с разницей в десятилетия, можно соединять друг с другом. Вывод графического инструмента живёт внутри него, и чтобы перенести данные между двумя такими инструментами, нужен формат экспорта и диалоговое окно. Когда задача затрагивает несколько инструментов или повторяемое преобразование, побеждает терминал.
git log --oneline | grep -i "fix" | wc -l
Беглость — это в основном редактирование и история
Удобного пользователя от беглого отличает редко знание большего числа команд. Отличает его скорость правки текущей строки и поиска того, что запускали час назад: перемещение по словам, удаление до конца строки, поиск назад по истории. Именно такие мелкие движения повторяются сотни раз в день.
Ctrl+R поиск назад по истории
Ctrl+A / E переход в начало или конец строки
Alt+B / F перемещение по одному слову
Tab дополнение пути или имени команды
Инструмент документирует себя
Почти каждая команда отвечает на флаг справки, а у остальных есть страница руководства. Первые пятнадцать строк часто быстрее поиска ответа и соответствуют той версии, которая у вас действительно есть. Поэтому предпочитайте их команде, скопированной из результатов поиска, особенно если дело касается удаления или перезаписи.
tar --help | head -20
man find | less
Автоматизируйте на второй раз
Длинная команда, набранная впервые, остаётся разовой; на второй раз она становится скриптом. Если команда короткая, хватит псевдонима; если она принимает аргументы или принимает решение, нужен небольшой скрипт с именем и комментарием. Так растёт личный инструментарий, и поэтому же окружение беглого пользователя смещается к задачам, которые он действительно повторяет.
alias ll='ls -alh'
# именованный скрипт лучше вызова в сорок символов, который набирают ежедневно
Читайте вывод как данные и проверяйте, что собираетесь сделать
Вывод — текст, поэтому полезно сначала посмотреть, а потом действовать: перечислить, что совпадает с шаблоном, посчитать файлы до удаления, напечатать то, что сделал бы скрипт, вместо его запуска. Так класс необратимых случайностей превращается в задержку на минуту. Заодно команда становится переиспользуемой: форма её вывода уже известна.
grep -rl "TODO" src/ # сначала посмотреть список
rm $(grep -rl "TODO" src/) # потом решить
Знайте, когда уходить из терминала
Визуальный конфликт слияния, правку изображения, дашборд или diff большого рефакторинга часто быстрее сделать в графическом инструменте. Однако использовать терминал для всего не нужно: навык в том, чтобы чувствовать себя дома в обоих и выбирать осознанно. Беглость означает, что терминал — вариант, который вы оцениваете, а не верность, которую защищаете.
Практика
Найдите собственную историю
Найдите команду, которую запускали раньше, поиском назад по истории — не перепечатыванием и не прокруткой. Повторите пять раз.
Готово, когда: вы достали пять прежних команд без прокрутки и без повторного набора ни одной из них.
Превратите повторяемую команду в скрипт
Найдите команду, которую набирали три или больше раз за эту неделю. Превратите её в псевдоним или в именованный скрипт с комментарием и пользуйтесь им дальше.
Готово, когда: именованная версия запускается из любого каталога, а длинную форму вы с тех пор не набирали.
Частые ошибки
- Копирование разрушительной команды из результатов поиска — она написана для другого инструмента, версии или пути; исправить: прочитайте справку для своего инструмента и перечислите совпадения до действия.
- Повторный набор команды часовой давности — медленно и с ошибками; исправить: ищите по истории и правьте прежний вызов.
- Попытка собрать огромный однострочник — нечитаемо и непроверяемо; исправить: всё, где есть цикл или условие, выносите в скрипт с именем.
- Игнорирование кода возврата — отказ даёт пустой вывод, который выглядит как корректный пустой результат; исправить: проверьте код возврата или соедините команды условием.
- Использование терминала для действительно графической работы — разбирать запутанное слияние визуально быстрее; исправить: выбирайте инструмент под задачу, а не по привычке.
Что читать дальше
- Командная оболочка Unix (01-cs-fundamentals/13-unix-shell) — инструментарий, на котором строится эта привычка, поэтому прочтите сначала о потоках, конвейерах и правах.
- Git (система контроля версий) (01-cs-fundamentals/12-git) — инструмент, где беглый пользователь терминала экономит больше всего времени.
- Отладка (01-cs-fundamentals/11-debugging) — та же дисциплина «сначала прочитай вывод», но применённая к неисправности, а не к задаче.