5 приемов использования терминала Unix для ускорения разработки

0
2
views

Программисты часто пользуются терминалом. Они вводят команды Git, запускают скрипты сборки и автоматизации. Практически все операционные системы с графическими пользовательскими интерфейсами имеют встроенные приложения-терминалы, дающие пользователям возможность выполнять задачи в интерфейсе командной строки.

Каждый такой терминал для получения результата обычно посылает введенные пользователем команды в интерпретатор командной строки.

Например, когда вы вводите mkdir для создания новой директории, терминал выполняет процесс /usr/bin/mkdir с аргументами ввода через интерпретатор командной строки вроде Bash. Затем двоичный файл mkdir создает новый каталог при помощи системного вызова mkdir и направляет вывод обратно на терминал.

В терминале можно запускать множество команд для выполнения самых разных задач. В Unix-подобных системах, таких как GNU/Linux и macOS, эти команды практически одинаковы.

Большинство разработчиков в ходе сессий программирования предпочитают взаимодействовать с ОС через терминал. Это позволяет выполнять многие задачи гораздо быстрее.

В этой статье я дам несколько советов по использованию Unix-терминала. Следование этим советам позволит вам ускорить разработку.

Используйте фоновые задачи эффективно

Чаще всего мы вводим в терминале быстро выполняющиеся команды. Например, введя git status, мы немедленно получаем на экран текущее состояние репозитория, после чего команда прекращает работу.

Но порой нам случается запускать команды, работающие длительное время. Например, мы можем открыть при помощи терминала текстовый редактор с графическим интерфейсом, чтобы отредактировать какой-то файл. Можем запустить установку нового пакета или клонирование репозитория из интернета.

В подобных случаях многие программисты просто открывают несколько экземпляров оболочки (несколько вкладок в терминале). Но практически все интерпретаторы командной строки предлагают специальный функционал для управления несколькими задачами, запущенными в одном экземпляре оболочки.

В Unix-подобных операционных системах есть разные режимы для фоновых задач. Самый простой и наиболее ходовой вид запуска задачи в фоне — с добавлением символа &. Я часто им пользуюсь, чтобы открыть текстовый файл в приложении gedit:

gedit myFile.py &

Открытие текстового редактора при этом не блокирует текущую оболочку. Я могу продолжить вводить другие команды в том же окне терминала, не закрывая при этом gedit.

Но этот подход не применим для долгоиграющих задач, выводящих что-то в консоль: при выводе текста оболочка блокируется. В подобных случаях мы можем воспользоваться следующей командой с перенаправлением потоков вывода и ошибок:

./download.sh &> /dev/null &

Если этот синтаксис кажется вам слишком длинным, всегда можно создать специальную функцию в файле .bashrc. Пример:

function bgt() {
"$@" &> /dev/null &
}
….
….
bgt ./download.sh # даст тот же результат!

Просмотреть статус фоновых задач можно при помощи встроенной команды jobs. Если вам нужно, чтобы команда продолжала работать даже после закрытия окна терминала, породите процесс с использованием команды nohup.

user@host:~$ nohup команда [аргументы]

Учимся быстрее находить и вводить команды

Опытные программисты вводят нужные команды быстрее неопытных не потому, что умеют быстрее печатать. Каждое терминальное приложение предлагает набор сочетаний клавиш (шорткатов), с помощью которых вы можете вводить команды гораздо эффективнее.

Все разработчики знают, что чтобы воспользоваться одной из предыдущих команд, их можно перебрать клавишами со стрелками, а клавиша tab служит для автодополнения. Но знаете ли вы, что при редактировании команды можно быстро перемещать курсор? Ctrl + A и Ctrl + E перемещают курсор в начало и конец команды соответственно.

Порой нам нужно найти команду, которую мы вводили некоторое время назад. Если искать команду «стрелкой» слишком долго, к вашим услугам два других способа поиска. Вы можете скомбинировать команду grep с командой history:

history | grep git

В результате выполнения этого конвейера будут выведены все git-команды, которые вы вводили ранее. Вам останется только скопировать и запустить нужную.

Если вы не любите пользоваться мышью, можно задействовать реверсивный поиск. Нажмите Ctrl + R и введите часть команды. Затем нажимайте Ctrl + R, пока не найдете нужную команду.

Попробуйте осуществлять все операции с файлами в терминале

Занимаясь разработкой, нам часто приходится создавать, удалять и копировать файлы и директории. Для осуществления операций с файлами вам не нужно покидать ваш терминал.

Несмотря на то, что менеджер файлов с графическим интерфейсом дает лучшее визуальное представление о файлах, он снижает продуктивность операций с ними, ведь нам приходится делать много кликов и движений мышью. В вашем любимом редакторе кода тоже могут быть специальные функции для работы с файлами, но это все равно GUI.

Учитесь пользоваться командами touch, cp, mv, rm и mkdir вместо менеджера файлов. Но будьте осторожны с командами типа rm, потому что при использовании опции -force у вас не будет запрашиваться подтверждение удаления.

Также в терминале можно куда быстрее искать текстовые паттерны. Например, следующая команда покажет все места, где вы включили header-файл unistd.h:

grep -rn "#include <unistd.h>"

Если эти команды кажутся вам длинными, всегда можно определить их в качестве функций в файле .bashrc, как показано ниже:

function sp() {
grep -rn "$@"
}
….
….
sp "#include " # даст тот же результат!

Но порой все же необходимо использовать менеджер файлов с графическим интерфейсом. Его тоже можно вызвать из терминала:

xdg-open ~/folder # Linux
или
open ~/folder # macOS

От редакции Techrocks. Предлагаем также почитать статьи «Поиск в Unix: команда grep» и «16 опций grep, которые помогут вам в реальном мире».

Для написания скриптов автоматизации используйте JavaScript или Python

Когда приходится ежедневно вводить в терминале один и тот же набор команд, мы обычно помещаем их в скрипт. Большинство программистов для написания скриптов автоматизации используют Bash.

Bash хорош для shell-скриптов, но не для всех скриптов автоматизации. Что, если вам нужно создать файл с многострочным шаблоном? Bash — язык команд. Он не предлагает ни синтаксиса, дружественного к разработчику, ни специальных функций.

Попробуйте выбрать другой язык для написания скриптов автоматизации. JavaScript и Python прекрасно подойдут.

Каждая Unix-подобная операционная система поставляется с предустановленной версией Python. Также у многих программистов установлен Nodejs. Так что вы сможете писать портируемые скрипты автоматизации, аналогичные Bash-скриптам, и на Python, и на JavaScript. На этих языках вы также сможете писать скрипты автоматизации для CI/CD серверов.

Чтобы сделать JavaScript-скрипты похожими на Bash, можно воспользоваться zx или shelljs. Аналог для Python — shellpy.

Обращайте внимание на доступные опции команд и возможные их комбинации

Обычно команда, введенная в терминале, выполняет какое-то одно действие. Например, команда tac выводит на экран строки указанного файла в обратном порядке. Некоторые внешние команды имеют подкоманды. Практически все команды имеют по несколько опций для управления внутренним поведением. И порой эти опции помогают ускорить нашу работу, поскольку с их помощью можно избежать использования дополнительных команд.

Например, с помощью одной команды mkdir с опцией -p можно создать несколько вложенных директорий одновременно:

mkdir -p ./src/core/filesystem

Интерпретаторы поддерживают два способа запуска последовательных команд:

  • команды можно писать в одну строчку и разделять точкой с запятой или двумя амперсандами (&&)
  • можно использовать конвейеры.

Вместо того чтобы вводить несколько команд по одной, мы можем создавать «однострочники». Это повышает продуктивность. Следующий однострочник создает набор вложенных директорий и делает последнюю созданную директорию текущей (т. е. мы переходим в нее):

mkdir -p ./src/core/filesystem && cd $_

Иногда можно ускорить работу, используя вывод одной команды в качестве аргументов другой. Это не то же самое, что конвейер, где вывод одной команды направляется на вход другой. В следующем примере мы удаляем все контейнеры Docker одновременно:

docker rm -f $(docker ps -a -q)

Больше того: мы можем создавать массивы и мгновенно использовать их в качестве аргументов. Следующий однострочник создает пять скриптов Python с последовательными именами:

touch script_{1..5}.py

Попробуйте начать создавать собственные комбинации команд для выполнения нескольких задач сразу, а не вводить по одной команде за раз.

Перевод статьи «5 Unix Terminal Tips To Boost Your Coding Speed».

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here