Статьи

Основные инструменты командной строки для веб-разработчиков

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

Если вы работаете в Mac OS X, вы можете использовать Homebrew для установки любых инструментов, которые не входят в стандартные пакеты. У каждого из этих инструментов есть варианты страниц, и только часть из них рассматривается ниже. Если вы хотите узнать больше о каждом инструменте, начните на страницах man <command> с man <command> или <command> -h .

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


cURL — почтенный швейцарский армейский нож для получения URL-адресов и получения данных в ответ.

cURL используется для «передачи URL» в соответствии с man-страницей. Это почтенный швейцарский армейский нож для получения URL-адресов и получения взамен данных. От простого возврата тела страницы, такого как ваш внешний IP-адрес из ifconfig.me , до загрузки файла и просмотра заголовков страницы. Но cURL — это не просто извлечение данных, вы можете использовать его для передачи данных в URL-адреса для отправки форм или API. Каждый разработчик, работающий в сети, должен знать этот инструмент.

Основное использование cURL — загрузка содержимого веб-сайта. Вот пример:

1
2
$ curl ifconfig.me
173.247.192.90

Вы можете скачать файл с сайта, и в этом случае вы будете использовать флаг -O .

1
$ curl -LO http://download.virtualbox.org/virtualbox/4.2.4/VirtualBox-4.2.4-81684-OSX.dmg

Обратите внимание, что мы также использовали флаг -L , который указывает cURL следовать любым перенаправлениям (которые нам нужны для загрузки VirtualBox).

Часто при настройке веб-серверов вы захотите убедиться, что заголовки установлены правильно (например, Cache-Control и Etags). Вы можете просмотреть только заголовки страницы с флагом -I :

01
02
03
04
05
06
07
08
09
10
11
12
$ curl -I http://newrelic.com
HTTP/1.1 200 OK
Server: NewRelic/0.8.53
Date: Fri, 16 Nov 2012 22:24:36 GMT
Content-Type: text/html;
Connection: keep-alive
Status: 200 OK
X-UA-Compatible: IE=Edge,chrome=1
ETag: «4dafac3d1cc508e44b4ed1b0ac7f22d9»
Cache-Control: max-age=0, private, must-revalidate
X-Runtime: 0.056271
X-Rack-Cache: miss

Установка заголовков запросов довольно распространена при работе с URL-адресами из командной строки. Во многих случаях вам необходимо определить заголовок Accept для установки типа ответа или заголовок Authorization для установки ваших учетных данных. Вы также можете установить пользовательские заголовки, если этого требует ваш API.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
$ curl -iH «x-api-key:yourapikey» https://api.newrelic.com/api/v1/accounts/1/servers.xml
HTTP/1.1 200 OK
Server: NewRelic/0.8.53
Date: Fri, 16 Nov 2012 22:38:55 GMT
Content-Type: application/xml;
Connection: keep-alive
Status: 200 OK
X-Runtime: 606
ETag: «c57879ddfc1e35ec4a390d306114275f»
Cache-Control: private, max-age=0, must-revalidate
Content-Length: 38871
Vary: Accept-Encoding
 
<?xml version=»1.0″ encoding=»UTF-8″?>
    <servers type=»array»>
        <server>
            <id type=»integer»>987987</id>
            <hostname>proxy1</hostname>
            <overview-url>https://api.newrelic.com/accounts/1/servers/987987</overview-url>
        </server>
    </servers>

В дополнение к установке заголовка ключа API с помощью -H , мы использовали -i для возврата информации заголовка, а также тела ответа.

cURL предназначен не только для извлечения URL-адресов, вы также можете использовать его для отправки запросов POST / PUT на передачу данных в API или в качестве HTML-формы.

1
2
3
4
$ curl https://api.faker.com/v1/customers \
   -H ‘x-api-key:apikey’ \
   -H ‘Content-Type: application/json’ \
   -d ‘{«firstName»:»Justin», «lastName»:»Bieber»}’

Прелесть cURL в том, что он может быть передан в другие программы для работы с возвращенными данными.

Мы разбили команду на несколько строк, используя \ для облегчения чтения. Во-первых, нам нужно установить правильные заголовки с -H ; вы можете видеть, что мы установили несколько заголовков, используя несколько -H . Затем мы устанавливаем данные JSON для POST, используя -d .

Мы только немного поцарапали всю мощь cURL, и вы должны очень хорошо ознакомиться с этими основными командами. Через некоторое время вы можете даже чаще просматривать веб-страницы через cURL. Прелесть cURL, как и многих утилит UNIX, заключается в том, что он может быть передан в другие программы (например, grep или jq) для работы с возвращенными данными.


JQ — это как sed для JSON.

Если вы работаете с большим количеством API-интерфейсов JSON (кто не в эти дни?), То вы захотите ознакомиться с jq . Описанный как легкий и гибкий JSON-анализатор командной строки, jq похож на sed для JSON. Вы не ограничены использованием jq с API, хотя; он может анализировать любой документ JSON (возможно, из вашей любимой базы данных NoSQL, например, Riak или Couchbase). Наиболее распространенным вариантом использования будет передача результатов запроса cURL в jq, и вы получите мощную комбинацию для работы с JSON API.

Во-первых, начните с получения документа JSON; в этом случае мы извлекаем твиты как JSON из API Twitter и добавляем их в jq. Мы вернем весь ответ с . (Период).

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
$ curl ‘http://search.twitter.com/search.json?q=bieber&rpp=5&include_entities=true’ |
 
{
    «since\_id\_str»: «0»,
    «since_id»: 0,
    «results\_per\_page»: 5,
    «completed_in»: 0.082,
    «max_id»: 269583781747372030,
    «max\_id\_str»: «269583781747372032»,
    «next_page»: «?page=2&max_id=269583781747372032&q=bieber&rpp=5&include_entities=1»,
    «page»: 1,
    «query»: «bieber»,
    «refresh_url»: «?since_id=269583781747372032&q=bieber&include_entities=1»,
    «results»: […]
}

Ответ JSON включает метаданные о запросе, а также результаты запроса, хранящиеся в массиве results[] (который я обрезал в ответе выше). Мы можем извлечь только первый твит с помощью:

1
$ curl ‘http://search.twitter.com/search.json?q=bieber&rpp=5&include_entities=true’ |

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

1
2
3
4
5
6
$ curl ‘http://search.twitter.com/search.json?q=bieber&rpp=5&include_entities=true’ |
 
{
    «text»: «I just voted for Justin Bieber #maleartist #PeoplesChoice. Retweet to vote http://t.co/Y8405WqO via @peopleschoice»,
    «from_user»: «PequenaDoDrew»
}

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

1
2
3
4
5
6
7
$ curl ‘http://search.twitter.com/search.json?q=bieber&rpp=5&include_entities=true’ |
 
{
    «media»: [ «https://twitpic.com/show/iphone/bdpx8p» ],
    «text»: «I just voted for Justin Bieber #maleartist #PeoplesChoice. Retweet to vote http://t.co/Y8405WqO via @peopleschoice»,
    «from_user»: «PequenaDoDrew»
}

Это только начало того, на что способен jq. Обратитесь к полной документации, чтобы разблокировать его серьезную силу. Как только вы научитесь складывать ответы в желаемый результат, вы сможете работать с данными и преобразовывать их, как машины.


Ngrep, или сетевой grep, звучит именно так: grep для сетевого трафика.

Ngrep, или сетевой grep, звучит именно так: grep для сетевого трафика. Он позволяет вам использовать регулярное выражение для сопоставления сетевых пакетов, и он будет возвращать информацию, очень похожую на ту, которую вы получили бы из curl -I . Основное использование может быть полезно, чтобы увидеть все запросы, которые делает страница, но это только начало. При работе с клиентскими приложениями с богатыми JavaScript, которые выполняют бесчисленные запросы AJAX, которые сложно контролировать и отлаживать, ngrep станет вашим новым лучшим другом.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
$ ngrep -d en1 -q -W byline «^(GET|POST) .*»
interface: en1 (172.16.0.0/255.255.255.0)
match: ^(GET|POST) .*
 
T 172.16.0.79:59435 -> 204.93.223.150:80 [A]
GET / HTTP/1.1.
Host: newrelic.com.
Connection: keep-alive.
Cache-Control: max-age=0.
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10\_7\_4) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11.
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8.
Accept-Encoding: gzip,deflate,sdch.
Accept-Language: en-US,en;q=0.8.
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3.
Cookie: …

Эта команда покажет все запросы GET и POST, сделанные на интерфейсе не по умолчанию с -d en1 . -W byline будет поддерживать разрывы строк для лучшей читаемости, а -q даст вам меньше шума о несовпадающих пакетах. При необходимости вы можете использовать параметры host и port чтобы изолировать трафик для конкретного приложения, с которым вы работаете.

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


S3cmd дает вам доступ в командной строке к вашим корзинам и файлам на S3, а также многое другое.

На данный момент почти каждый разработчик хранит файлы в Amazon S3 . Вы можете использовать его для простого хранения резервных копий БД, или использовать его как резервную копию вашего CDN, или даже обслуживать весь статический сайт с него. Хотя название означает «Простое хранилище», работа с панелью администратора может быть простой. Кроме того, почему вы хотите оставить командную строку, чтобы использовать интерфейс для файловой системы? S3cmd дает вам доступ в командной строке к вашим корзинам и файлам на S3, а также многое другое.

После настройки инструмента, которая подразумевает ввод ключей доступа с консоли AWS, вы сможете работать с S3 практически так же, как с локальной файловой системой.

Сделать ведро:

1
2
$ s3cmd mb s3://ckelly-demo-bucket
Bucket ‘s3://ckelly-demo-bucket/’ created

Перечислите свои ведра:

1
2
$ s3cmd ls
2012-11-27 00:52 s3://ckelly-demo-bucket

Поместите файл в ведро:

1
2
$ s3cmd put index.html s3://ckelly-demo-bucket/index.html
index.html -> s3://ckelly-demo-bucket/index.html [1 of 1]

Перечислите содержимое ведра:

1
2
$ s3cmd ls s3://ckelly-demo-bucket
2012-11-27 00:54 0 s3://ckelly-demo-bucket/index.html

Загрузите файл из корзины:

1
2
$ s3cmd get s3://ckelly-demo-bucket/index.html
s3://ckelly-demo-bucket/index.html -> ./index.html [1 of 1]

Удалить ведро и его содержимое:

1
2
3
4
$ s3cmd rb —recursive s3://ckelly-demo-bucket
WARNING: Bucket is not empty.
File s3://ckelly-demo-bucket/index.html deleted
Bucket ‘s3://ckelly-demo-bucket/’ removed

Мы только что просмотрели команды файловой системы, но это только начало для S3cmd. Вы также можете использовать его для управления списком контроля доступа, а также точками распространения CloudFront из командной строки!


Вам больше никогда не придется возиться с туннелированием трафика вручную.

Localtunnel — это проект Джеффа Линдси, спонсируемый Twilio , который упрощает выставление вашего локального веб-сервера в Интернет. Localtunnel — это один из инструментов, который принимает философию UNIX: он делает одно и делает это хорошо. Единственный вариант — загрузить открытый ключ для аутентификации, но это нужно сделать только один раз.

Localtunnel — это RubyGem, поэтому вам нужно установить Ruby и RubyGems. Простая gem install localtunnel поможет вам начать. Затем, чтобы предоставить локально работающий сервер и порт, вы просто передаете порт, который вы хотите предоставить в качестве аргумента.

1
2
3
$ localtunnel -k /Users/ckelly/.ssh/id_rsa.pub 3000
This localtunnel service is brought to you by Twilio.
Port 3000 is now publicly accessible from http://4nc9.localtunnel.com …

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


Существует множество других инструментов, которые являются центральными в жизни веб-разработчика (нагрузочное тестирование, мониторинг сети и т. Д.), И они сильно различаются в зависимости от того, в какой части стека вы работаете. Возможно, вы захотите посетить Command- Линия Фу или следуйте командной строке Magic на Twitter, чтобы открыть для себя новые инструменты. И, конечно же, вам обязательно стоит попробовать New Relic , так как ни один веб-разработчик не должен обходиться без него.