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

46ca1173c0169e0b9e566f9dde04597d.png

Командная строка в операционной системе Linux «умеет» делать очень много полезного — того, что часто невозможно сделать при помощи других инструментов. Самый популярный вариант интерфейса командной строки называется bash.

Даниил Пилипенко, программный директор факультета backend-разработки направления «Программирование» Skillbox, директор центра подбора IT-специалистов SymbioWay ответил на самые популярные вопросы про командную строку bash и рассказал, как её освоить.

Что такое и зачем нужна bash

В операционных системах, устанавливаемых на обычные компьютеры, — Windows и macOS, — всегда есть командная строка bash, но обычными пользователями она используется редко или не используется совсем.

Другая ситуация, если вы разработчик. Например, frontend-разработчикам может понадобиться собирать свои приложения при помощи сборщика webpack, который удобно запускать из командной строки. Тем, кто настраивает на своём компьютере окружение для разрабатываемого программного обеспечения, может потребоваться настраивать Docker, что также удобнее всего делать именно из командной строки. Если вы работаете с системой контроля версий Git, то командная строка для Git — наиболее универсальный инструмент работы, позволяющий использовать функционал этой системы наиболее полно.

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

Таким образом, сама по себе командная строка –– это отдельная область знаний, которыми важно уметь пользоваться каждому разработчику и современному IT-специалисту. Требование знаний командной строки Linux есть в большинстве современных вакансий backend-разработчиков, DevOps-инженеров и инженеров по тестированию, поскольку в их работе она применяется достаточно часто и порой является чуть ли не основным инструментом повседневной работы.

Пример использования bash

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

Для того, чтобы выполнить такую настройку, вы заходите на сервер — подключаетесь к нему по SSH — и переходите в папку, в которой у вас лежат сайты:

cd /var/www/html

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

mkdir referral.symbioway.ru

Команда mkdir создаёт папку с указанным вами именем в текущей папке. Затем вы можете настроить сервер Nginx, чтобы он работал с этой папкой — сначала перейти в папку с файлами конфигурации сервера:

cd /etc/nginx/sites-available

Затем скопировать какой-нибудь уже существующий файл конфигурации и создать на его основе файл конфигурации для вашего домена:

cp test.symbioway.ru.conf referral.symbioway.ru.conf

И заменить в нём имя домена на новое:

sed -i "s/test.symbio/referral.symbio" referral.symbioway.ru.conf

Эта команда заменит в файле referral.symbioway.ru.conf все строки «test.symbio» на «referral.symbio». Затем вам нужно создать ссылку на этот файл в папке sites-enabled сервера Nginx:

cd ../sites-enabled

ln -s ../sites-available/referral.symbioway.ru.conf .

После чего вам нужно перезапустить Nginx:

service nginx restart

Всё, сайт настроен! Если вы уже сделали запись в настройках DNS, в которой домен referral.symbioway.ru сопоставлен с IP-адресом вашего сервера, то, скорее всего, при входе по этому домену у вас уже открывается страница сервера. Чтобы убедиться, что на сервере работает PHP, вы можете перейти в папку сервера и создать в ней PHP-файл, который будет выводить, например, текущую дату. Для этого при помощи команды cd вы можете снова перейти в папку вашего сайта:

cd /var/www/referral.symbioway.ru

Создать файл index.php и записать в него строку, которая будет выводить текущую дату:

echo " index.php

После этого вы можете даже запустить этот файл, выполнив команду:

php index.php

И, если всё работает, результат будет примерно таким:

Tue, 09 Aug 2022 08:05:59 +0300

Но, поскольку вы хотите проверить работу сервера, вам следует зайти по ссылке https://referral.symbioway.ru/ и убедиться в том, что страница открывается. Затем мы с вами хотели настроить HTTPS. Если у вас на сервере уже установить certbot — программа для настройки HTTPS-сертификатов, добавить такой сертификат к своему домену не составит труда. Для этого нужно выполнить команду:

certbot --nginx -d referral.symbioway.ru

И после выполнения этой команды следовать инструкциям. По окончании настройки перезапустить Nginx:

service nginx restart

Ну и, конечно, зайти в браузер и проверить, всё ли работает верно :)

Аналогичным образом командная строка bash может быть использована в работе любого backend-разработчика. Например, если вы создаёте приложение на Java, то для его развертывания на сервере, оборачивания JAR-файла в сервис или просто запуска вам потребуется командная строка и понимание принципов её работы.

Какие есть сложности с использованием bash

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

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

Другая частая проблема — это незнание команд по умолчанию при работе с редактором vim. Этот редактор часто открывается по умолчанию при работе с командной строкой и застаёт начинающих разработчиков врасплох: работа с ним отличается от работы с привычными редакторами текста. При входе в этот редактор он находится в так называемом командном режиме, и чтобы отредактировать текст, нужно сначала перейти в режим редактирования, нажав клавишу «i». По завершении редактирования вам нужно выйти из этого режима и сохранить файл, что тоже делается определённым образом — не так, как в обычных текстовых редакторах: сначала нажать клавишу (вернуться в командный режим), а затем ввести команду : wq, выполнение которой приведёт к сохранению изменений в файле (буква «w» означает «write» — от английского «записать») и выходу из редактора vim (буква «q» означает «quit» — выход).

Какие есть аналоги bash

В различных операционных системах есть разные варианты командной строки bash. Например, в операционной системе Windows по умолчанию присутствуют терминалы командной строки cmd и PowerShell. Они во многом непохожи на bash, но тоже предоставляют широкий спектр возможностей при работе с Windows. В операционной системе macOS используется zsh, который похож на bash и в котором большинство основных команд идентичны командам в bash.

Как изучить bash и с чего начать

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

Например, команда просмотра содержимого папки ls имеет очень полезный ключи -l и -a, которые позволяют выводить содержимое папки в «полном» варианте — с отображением скрытых и системных файлов, с указанием прав доступа к ним, их размеров и дат изменения. Вот для сравнения результаты работы команды ls с этими параметрами и без них:

# ls

bin            composer.lock  config       migrations  README.md  symfony.lock  translations  vendor

composer.json  composer.phar  EXAMPLES.md  public      src        templates     var

# ls -la

total 3008

drwxrwxr-x 12 smb smb    4096 Jun 13 15:28 .

drwxrwxr-x  3 smb smb    4096 Jun  1 18:07 ..

drwxrwxr-x  2 smb smb    4096 Jun 12 08:25 bin

-rw-rw-r--  1 smb smb    2246 Jun 13 15:46 composer.json

-rw-rw-r--  1 smb smb  254785 Jun 13 15:46 composer.lock

-rw-rw-r--  1 smb smb 2719975 Jun  6 17:43 composer.phar

drwxrwxr-x  5 smb smb    4096 Jun 13 15:28 config

-rw-rw-r--  1 smb smb    1974 Jun 12 08:34 .env

-rw-rw-r--  1 smb smb     359 Jun 13 15:28 .env.example

-rw-rw-r--  1 smb smb     690 Jun 13 15:33 .env.local

-rw-rw-r--  1 smb smb     846 Jun 12 08:25 EXAMPLES.md

drwxrwxr-x  8 smb smb    4096 Jun 13 18:27 .git

-rw-rw-r--  1 smb smb     298 Jun 12 08:25 .gitignore

drwxrwxr-x  2 smb smb    4096 Jun 12 08:25 migrations

-rw-rw-r--  1 smb smb     969 Jun 12 08:25 .php-cs-fixer.dist.php

-rw-rw-r--  1 smb smb       4 Jun 12 08:25 .php-version

drwxrwxr-x  2 smb smb    4096 Jun 12 08:40 public

-rw-rw-r--  1 smb smb     621 Jun 12 08:25 README.md

drwxrwxr-x 10 smb smb    4096 Jun 12 08:34 src

-rw-rw-r--  1 smb smb   10491 Jun 13 15:28 symfony.lock

drwxrwxr-x  3 smb smb    4096 Jun 13 15:28 templates

drwxrwxr-x  2 smb smb    4096 Jun 12 08:34 translations

drwxrwxrwx  4 smb smb    4096 Jun 12 14:49 var

drwxrwxr-x 18 smb smb    4096 Jun 12 14:49 vendor

В первом случае выводится просто список основных файлов и папок, а во втором — их полный список, включающий системные файлы и папки, имена которых начинаются с точки, со всей дополнительной информацией.

Помимо команд работы с файлами и папками стоит изучить команды для работы с правами доступа, а также принципы работы прав доступа. В примере выше права доступа к каждому файлу и к каждой папке указаны в начале. Например, у файла ».env» указано »-rw-rw-r--», что означает, что владелец (пользователь smb) и члены группы пользователей smb имеют права на чтение и изменение этого файла, но не имеют прав на его запуск, а все остальные пользователи в системе имеют право только на чтение этого файла.

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

© Habrahabr.ru