Development

Юникс-утилиты – это ваши друзья

(В оригинале – The Unix Tools Are Your Friends)

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

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

Далее, если IDE – это лишь набор команд, которые его разработчики сочли нужными, то при помощи юниксовых утилит вы можете сделать все, что захотите. Представляйте их как конструктор Лего и собирайте нужную вам команду из маленьких, но многогранных утилит. Например, вот так можно рассчитать сигнатуру Каннингема – «образ» файла, от которого остались только точки с запятой, скобки и кавычки, что может многое сказать о его содержимом.

for i in *.java; do echo -n "$i: "
sed 's/[^"{};]//g' $i | tr -d '\n'
echo done

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

Утилиты Юникса разрабатывались в эру, когда многопользовательский компьютер имел 128 килобайт памяти. Гениальность их дизайна означает в настоящее время возможность обрабатывать огромные массивы данных с невероятной эффективностью. Большинство утилит работают как фильтры, работая с обычной строкой, что означает отсутствие верхнего предела на количество данных, которые могут быть обработаны. Хотите узнать количество записанных изменений в полутерабайтной английской википедии? Не проблема:

 grep '' | wc –l

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

Изящность и открытость кода юниксовых утилит делают их общедоступными, даже на платформах с ограниченными ресурсами, как например, медиа плейер или DSL роутер. Вряд ли у подобных устройств будет полноценный графический интерфейс, но они часто содержат BusyBox, предоставляющий практически все часто используемые утилиты. Если вы пишете под Виндоуз, то Cygwin также предоставит вам все возможные утилиты как в исполняемом виде, так и в исходных кодах.

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

Автор оригинала – Diomidis Spinellis