Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Командная строка в операционной системе 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 "<? echo date('r');" > 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”. По завершении редактирования вам нужно выйти из этого режима и сохранить файл, что тоже делается определённым образом — не так, как в обычных текстовых редакторах: сначала нажать клавишу <Esc> (вернуться в командный режим), а затем ввести команду :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 имеют права на чтение и изменение этого файла, но не имеют прав на его запуск, а все остальные пользователи в системе имеют право только на чтение этого файла.
Также для начинающего разработчика важно уметь устанавливать и удалять программы, настраивать их, запускать и устанавливать, просматривать перечень текущих процессов, находить среди них нужные, смотреть, сколько ресурсов они потребляют, и, при необходимости, завершать их. Кроме того, важно разобраться с получением доступа к командной строке на сервере, настройкой авторизации по ключу и по паролю.