Введение
Командная строка остается верным союзником всех, кто занят в сфере технологий. Правильно подобранные инструменты CLI (интерфейс командной строки) и TUI (интерфейс пользователя терминала) могут значительно повысить эффективность рабочего процесса — будь то управление кластерами Kubernetes, создание кода, автоматизация развертывания или написание текстов в Markdown-файлах.
За годы своей деятельности я интегрировал в повседневный рабочий процесс различные CLI- и TUI-инструменты. Некоторые из них стали настолько необходимыми, что без них я уже не представляю свою работу. В этой статье расскажу о 10 инструментах, в полезности которых убеждался неоднократно.
Эти инструменты охватывают широкий спектр функциональных возможностей: от фильтра командной строки до git-интерфейсов, от менеджеров задач до просмотрщиков файлов. Они не просто сокращают количество нажатий клавиш — они упрощают сложные задачи и позволяют сосредоточиться на главном.
Я использую эти инструменты в Linux, но они должны работать в большинстве операционных систем.
Для нетерпеливых предоставляю краткий перечень наиболее интересных случаев использования этих команд:
- fzf: утилита, оптимизирующая рабочие процессы командной строки с помощью интерактивного поиска;
- bpytop: монитор ресурсов, который показывает использование и статистику для процессора, памяти, дисков, сети и процессов;
- tmux: терминальный мультиплексор для эффективного управления несколькими сессиями терминала;
- lazygit: TUI для операций с git, упрощающий управление репозиторием;
- gh (GitHub CLI): инструмент GitHub CLI для управления репозиториями, проблемами и PR из терминала;
- entr: утилита, выполняющая команды при изменении файлов, полезная для автоматизации;
- just: программа для выполнения команд, позволяющая управлять задачами конкретного проекта с помощью простых команд;
- taskwarrior: инструмент командной строки для эффективного управления задачами;
- tldr: упрощенные man-страницы с примерами быстрых команд;
- pet: менеджер фрагментов для сохранения и повторного использования сложных команд командной строки.
Расширение возможностей терминала и навигация
Если CLI-инструменты — основа вашего ПО-инструментария, то обеспечение их надлежащего оснащения и универсальности должно быть главным приоритетом!
Инструменты из этой категории улучшают работу с терминалом, облегчая навигацию и многозадачность. Они являются залогом продуктивного CLI-процесса, позволяя работать быстрее и интуитивно понятнее.
fzf (фильтр командной строки)
fzf — мощная утилита, которая может значительно оптимизировать рабочий процесс в командной строке. Вот три пользовательские функции, которые используют fzf для упрощения обычных задач (можете добавить их в .bash(zsh)rc
).
1. Интерактивное уничтожение процесса (process killing, pkill):
function pkill() {
ps aux | fzf --height 40% --layout=reverse --prompt="Select process to kill: " | awk '{print $2}' | xargs -r sudo kill
}
Эта функция представляет интерактивный список запущенных процессов. С ее помощью можно найти и выбрать процесс для уничтожения. При этом не нужно запоминать PID (идентификационный номер процесса) или использовать grep
.
2. Навигация по Git-логам и просмотр коммитов:
function logg() {
git lg | fzf --ansi --no-sort \
--preview 'echo {} | grep -o "[a-f0-9]\{7\}" | head -1 | xargs -I % git show % --color=always' \
--preview-window=right:50%:wrap --height 100% \
--bind 'enter:execute(echo {} | grep -o "[a-f0-9]\{7\}" | head -1 | xargs -I % sh -c "git show % | nvim -c \"setlocal buftype=nofile bufhidden=wipe noswapfile nowrap\" -c \"nnoremap <buffer> q :q!<CR>\" -")' \
--bind 'ctrl-e:execute(echo {} | grep -o "[a-f0-9]\{7\}" | head -1 | xargs -I % sh -c "gh browse %")'
}
Эта функция объединяет fzf с git log
, предоставляя интерактивный интерфейс для просмотра Git-логов. Она предлагает предварительный просмотр каждого коммита и доступ к полной информации о коммите в Neovim
или browse
(просмотр) ее на GitHub. Это неоценимо для быстрой навигации по сложным Git-логам.
3. Просмотр репозиториев:
function repo() {
export repo=$(fd . ${HOME}/dev --type=directory --max-depth=1 --color always| awk -F "/" '{print $5}' | fzf --ansi --preview 'onefetch /home/decoder/dev/{1}' --preview-window up)
if [[ -z "$repo" ]]; then
echo "Repository not found"
else
echo "Repository found locally, entering"
cd ${HOME}/dev/$repo
if [[ -d .git ]]; then
echo "Fetching origin"
git fetch origin
onefetch
fi
create_tmux_session "${HOME}/dev/$repo"
fi
}
Эта функция упрощает навигацию по репозиториям. Она использует fzf для интерактивного выбора репозитория из каталога dev (нужно настроить его под свою установку), затем автоматически переходит в этот каталог, получает последние изменения и устанавливает сессию tmux. Это отличный пример того, как утилита fzf может быть интегрирована в более сложные рабочие процессы для повышения производительности.
Подробнее о функции create_tmux_session funciton
поговорим ниже.
bpytop (мониторинг ресурсов)
bpytop
— визуально привлекательный и интуитивно понятный инструмент командной строки для мониторинга системы в реальном времени. Он позволяет отслеживать использование процессора, памяти, диска и сети с помощью красочных, легко читаемых графиков, что делает его гораздо более интересным, чем традиционные инструменты, такие как top
и htop
.
Для мониторинга производительности системы просто запустите:
bpytop
Команда bpytop запускает интерфейс, отображающий использование ресурсов в реальном времени, что помогает быстро выявлять и управлять ресурсоемкими процессами. Это особенно полезно для разработчиков и системных администраторов, которым необходимо следить за состоянием системы.
Чтобы интегрировать bpytop
в свой рабочий процесс, добавьте эту привязку в .tmux.conf
:
bind -n M-b popup -d '#{pane_current_path}' -E -h 95% -w 95% -x 100% "bpytop"
tmux (терминальный мультиплексор)
tmux — терминальный мультиплексор, позволяющий создавать, получать доступ и управлять несколькими сессиями терминала с одного экрана. Это незаменимый инструмент для управления сложными рабочими процессами, особенно при работе над несколькими проектами или с удаленными серверами.
Несмотря на то, что tmux является мощным инструментом сам по себе, его истинный потенциал реализуется при интеграции в более широкий рабочий процесс разработки. Ниже приведена пользовательская функция, которая демонстрирует эту интеграцию.
Мы используем эту функцию в репозитории.
function create_tmux_session() {
local RESULT="$1"
zoxide add "$RESULT" &>/dev/null
local FOLDER=$(basename "$RESULT")
local SESSION_NAME=$(echo "$FOLDER" | tr ' .:' '_')
if [ -d "$RESULT/.git" ]; then
SESSION_NAME+="_$(git -C "$RESULT" symbolic-ref --short HEAD 2>/dev/null)"
fi
if ! tmux has-session -t "$SESSION_NAME" 2>/dev/null; then
tmux new-session -d -s "$SESSION_NAME" -c "$RESULT"
fi
if [ -z "$TMUX" ]; then
tmux attach -t "$SESSION_NAME"
else
tmux switch-client -t "$SESSION_NAME"
fi
}
Эта функция выполняет несколько действий:
- Создает сессию tmux с именем папки проекта и Git-ветки.
- Она интегрируется с
zoxide
, умной cd-командой, чтобы отслеживать наиболее используемые каталоги.
- Проверяет, существует ли уже сессия. Если нет — создает ее.
- Либо подключается к сессии, либо переключается на нее в зависимости от того, находитесь ли вы уже в tmux.
Хотя в tmux есть множество встроенных команд и привязок клавиш, использование этой функции расширяет возможности по реализации рабочего процесса, отвечающего конкретным потребностям.
Оптимизация процесса разработки
Этот раздел посвящен инструментам, которые улучшают взаимодействие с системами контроля версий, автоматизируют повторяющиеся задачи и оптимизируют общий процесс разработки.
lazygit (TUI Git)
lazygit предлагает визуальный интерфейс для Git-операций, делая управление репозиторием более интуитивным. Это простой пользовательский интерфейс терминала, который упрощает выполнение обычных Git-задач без необходимости запоминать сложные команды.
Чтобы использовать lazygit
, просто перейдите к своему Git-репозиторию в терминале и введите lazygit. Откроется интерфейс, в котором можно создавать файлы, коммитить изменения и управлять ветками с помощью сочетаний клавиш.
Представление diff — одна из сильных сторон lazygit. Она позволяет легко просмотреть изменения перед коммитом, перейдя к файлу и нажав ‘d’. Такое визуальное представление изменений может быть невероятно полезным при подготовке коммитов.
Для более сложных Git-операций в lazygit есть такие функции, как интерактивное перемещение, или перебазирование (interactive rebasing). Вы можете запустить интерактивное перебазирование, перейдя к коммиту и нажав ‘r’, а затем ‘i’. В отличие от использования командной строки это гораздо упрощает такие задачи, как сквошинг и переупорядочивание коммитов.
gh (GitHub CLI)
gh
привносит функциональность GitHub прямо в терминал, позволяя легко управлять репозиториями, проблемами, запросами на исправление и многим другим, не выходя из среды командной строки.
Создание репозитория GitHub
Создать новый репозиторий GitHub довольно легко с помощью gh
. Просто выполните команду:
gh repo create my-new-repo --public --description "My new repository"
Эта команда создает новый публичный репозиторий с именем «my-new-repo» и указанным описанием. Можно также создавать приватные репозитории, добавив флаг --private
.
Создание Gist
Gist’ы — отличная возможность делиться фрагментами кода или небольшими скриптами. Следующая команда позволит создать новый Gist с помощью gh
:
gh gist create my_script.sh --public --desc "A simple bash script"
Эта команда создает публичный gist с контентом my_script.sh
и указанным описанием. Для создания приватного gist можете опустить флаг --public
.
Использование GitHub-команд с поддержкой искусственного интеллекта
GitHub интегрировал в gh
возможности искусственного интеллекта для выполнения различных задач. Например, можно попросить Copilot GitHub предложить код прямо из терминала:
gh copilot suggest "Install git"
или в режиме объяснения:
gh copilot explain "traceroute github.com"
entr (event notify test runner — запуск тестирования при регистрации событий)
entr — утилита, которая отслеживает изменения файлов и выполняет заданные команды в ответ на эти изменения. Она особенно полезна для автоматизации таких задач, как запуск тестов и перезагрузка приложений во время разработки.
Например, можно настроить entr на запуск тестового набора при каждом изменении файла. Команда типа find . -name "*.go" | entr go test ./...
будет автоматически запускать тесты Go при каждом сохранении файла .go. Такая немедленная обратная связь может оказаться бесценной во время разработки, управляемой тестами.
При работе над веб-приложениями entr может помочь с перезагрузкой в реальном времени. Команда find . -name "*.py" | entr -r python app.py
перезапускает веб-сервер Python при каждом внесении изменений в код. Флаг -r гарантирует, что entr перезапустит команду при выходе.
Управление задачами и проектами
Инструменты из этой категории помогают оптимизировать рабочий процесс, упорядочить команды и отслеживать выполнение заданий, позволяя сосредоточиться на главном.
just (средство запуска команд)
just — удобная программа для запуска команд, которая служит современной и более мощной альтернативой make. just позволяет сохранять и запускать команды для конкретного проекта, значительно упрощая управление проектами и автоматизацию задач.
По сути, just использует файл justfile
(похожий на Makefile
), в котором определяются команды или «рецепты». Эти рецепты могут быть простыми однострочниками или сложными скриптами, и выполняются они путем запуска команды just <recipe-name>
в терминале.
Вот пример рецепта, создающего локальный кластер KIND:
# установка кластера kind
setup_kind cluster_name='control-plane':
#!/usr/bin/env bash
set -euo pipefail
echo "Creating kind cluster - {{cluster_name}}"
envsubst < kind-config.yaml | kind create cluster --config - --wait 3m
kind get kubeconfig --name {{cluster_name}}
kubectl config use-context kind-{{cluster_name}}
taskwarrior (управление задачами)
taskwarrior — мощный инструмент управления задачами с открытым исходным кодом, который работает исключительно из командной строки. Он разработан, чтобы помочь эффективно организовывать, планировать и отслеживать задачи.
С помощью taskwarrior добавить новую задачу можно, просто набрав task add
. Например, task add Write blog post about command-line tools due:tomorrow
добавляет новую задачу с датой выполнения. Набрав затем task
, можно просмотреть список ожидающих выполнения задач, отсортированных по срочности.
taskwarrior отлично справляется со сложными атрибутами задач. Можете добавлять приоритеты, теги, проекты и даже зависимости между задачами. Команда типа task 1 modify priority:H project:BlogPost +writing
установит высокий приоритет, назначит его проекту BlogPost и добавит тег ‘writing’ к задаче 1.
Одной из самых мощных функций taskwarrior является надежная система фильтрации. Можно легко просматривать задачи по проектам (task project:BlogPost
), дате выполнения (task due:today
) или любой комбинации атрибутов. Такая гибкость позволяет сосредоточиться на том, что важно в каждый конкретный момент.
Я активно использую это приложение, и оно определенно заслуживает отдельной статьи!
Организация информации и справка
Эта группа инструментов направлена на облегчение поиска, просмотра и управления нужной информацией — будь то фрагменты команд, документация или поиск в файлах различных типов.
tldr (упрощенные man-страницы)
tldr — проект сообщества, направленный на упрощение man-страниц с помощью практических примеров. Он предоставляет краткие, сфокусированные на примерах описания инструментов командной строки, облегчая быстрое понимание и использование различных команд.
Просто наберите tldr
, а затем имя команды. Например, tldr tar
предоставит краткий обзор наиболее распространенных команд tar с практическими примерами.
Отличительная особенность tldr — ориентация на реальное использование. Вместо того чтобы осваивать детализированную документацию, можете сразу переходить к делу с помощью примеров, которые охватывают наиболее распространенные случаи использования.
pet (менеджер фрагментов командной строки)
Назначение pet — помочь запомнить и быстро получить доступ к сложным командам, которые редко используются, но необходимы для рабочего процесса.
С помощью pet можно легко сохранять, искать и выполнять фрагменты команд прямо из терминала. Это особенно полезно для DevOps-инженеров и разработчиков, которые часто работают со сложными командами CLI.
Чтобы добавить новый фрагмент, можно воспользоваться командой pet new
. В результате будет предложено ввести команду и описание. Например:
pet new
Command> awk -F, 'NR <=2 {print $0}; NR >= 5 && NR <= 10 {print $0}' company.csv
Description> Print specific lines from a CSV file
Заключение
Мы завершили обзор нескольких CLI-инструментов, ставших моими фаворитами. Их возможности — от магии интерактивного поиска fzf до pet-библиотеки фрагментов команд — не просто сокращают количество нажатия клавиш, они вносят немного позитива в повседневный рабочий процесс, связанный с командной строкой.
Помните, цель использования этих инструментов не в том, чтобы усложнить работу. Постарайтесь найти среди них жемчужины, соответствующие вашему стилю и повышающие производительность.
Как и в случае с любым набором инструментов, максимальный эффект от CLI-инструментария можно получить только при внедрении его в повседневную практику. Начните с малого, может быть, с одного или двух инструментов, которые привлекут ваше внимание. Не успеете оглянуться, как обнаружите, что уже не можете без них обходиться.
Читайте также:
- 5 визуально эффектных программ для командной строки
- 10 лайфхаков для Linux, которые повысят продуктивность
- Приемы работы с оболочкой Zsh, которые я хотел бы знать раньше
Читайте нас в Telegram, VK и Дзен
Перевод статьи Piotr: 10 CLI Tools That Made the Biggest Impact