Bash — это командная оболочка для UNIX-подобных операционных систем (UNIX, GNU/Linux, MacOS). Она дает пользователю систему команд для работы с файлами и папками, поиском, настройкой окружения и позволяет управлять ОС прямо из командной строки.
Слово bash читается как «баш» и расшифровывается как Bourne-Again Shell. Стивен Борн — это имя и фамилия создателя оболочки, а sh (расшифровывается как «шелл») — ее предыдущая версия. Она использовалась в старых версиях операционных систем UNIX. На shell основаны практически все современные системы команд для работы с ОС.
Что делает bash
Оболочка принимает команды, которые пользователь ввел в командную строку, и интерпретирует их, то есть переводит в машинный код. Операционная система получает код в качестве инструкций и выполняет их.
Есть и другой способ использования: создание bash- или shell-скриптов, которые сохранены в файле. При каждом запуске файла будет выполняться набор указанных в нем команд.
Зачем использовать bash
Те же самые действия с файлами, папками и поиском можно выполнить с помощью графического интерфейса ОС. Но это дольше, неудобнее и сложнее. Программисты пользуются bash или shell, чтобы упростить и ускорить работу с системой.
Например, чтобы скопировать файл с помощью графического интерфейса, нужно открыть папку, где он расположен, кликнуть на файл правой кнопкой мыши, вызвать контекстное меню и выбрать «Скопировать». А если использовать командную строку и bash — потребуется ввести одну команду.
cp <файл1> <файл2>
Команда cp означает «скопировать». <файл1> — это путь к исходному файлу, например /home/file.txt. Это значит, что file.txt лежит в папке /home.
<файл2> — путь к копии файла, которая создастся при выполнении команды. Например, /home/usr/file2.txt, где file2.txt — название копии. Она будет находиться в папке /usr внутри директории /home.
В некоторых системах графический интерфейс практически не используется. Все действия нужно выполнять с помощью командной строки. Здесь bash/shell незаменим.
Как запустить bash
Оболочка-интерпретатор встроена в операционную систему и включается автоматически. Достаточно открыть окно терминала и начать вводить команды.
Чтобы запустить bash-скрипт, записанный в файл, нужно выдать права на его исполнение
Структура команды
Синтаксис команды выглядит так:
<команда> [флаги][аргументы]
Флаги — это короткие входные параметры после команды, которые обычно выглядят как дефис и буква. Например, в записи ls -l -l — это флаг. Это нужно, чтобы команда выполнялась определенным образом, например по-особому выводила результат. Для большинства команд существуют десятки флагов.
Аргументы — это данные, которые передаются команде. Например, чтобы создать файл, нужно указать его имя — оно будет аргументом.
Флаги и аргументы нужны не всегда и не для всех команд.
Как устроена навигация в bash
Организация файлов и папок в Linux не такая, как в Windows. Путь к файлу отсчитывается не от названия диска, а от так называемого корневого каталога. Говоря языком «для начинающих», это начальная точка: считается, что все файлы и папки в системе расположены внутри «корня». Внутри этих папок могут лежать свои подкаталоги и файлы, но их расположение тоже отсчитывается относительно корневого каталога. Корневой каталог обозначается прямым слэшем /.
Чтобы указать на файл, лежащий в корневом каталоге, нужно написать /<имя_файла>. Полный путь к любому файлу можно прописать так: /<папка1>/<папка2>/…/<папкаn>/<файл>.
Указывать весь путь необязательно. Можно прописать расположение файлов и папок относительно того места, где вы находитесь.
В системах Windows для указания пути используются обратные слэши \. В Linux это всегда прямые слэши /.
Команды для навигации по системе
Постоянно прописывать путь целиком сложно и долго. Поэтому в bash есть система обозначений специально для навигации:
- . — текущая папка;
- .. — папка на уровень выше текущей;
- ~ — домашний каталог. Его адрес по умолчанию зависит от дистрибутива операционной системы. Например, в Ubuntu это /home/<имя_пользователя>;
- — — предыдущий каталог.
Эти обозначения разрешается использовать вместо части пути или пути полностью. Например, можно написать ~/myfiles или ../docs/work.
Перемещаться по системе и ориентироваться в местоположении помогают команды:
- pwd — показать полный путь к папке, где сейчас находится пользователь;
- сd <путь> — перейти в другой каталог.
Команды для просмотра информации
В ходе работы бывает нужно просмотреть файл или мануал, проверить содержимое каталога. У bash для этого множество возможностей, но мы пока рассмотрим основные:
- man <command> — открыть мануал, руководство пользователя по какой-либо команде. Этот справочник очень полезен на начальных этапах изучения оболочки. Там приведены подробные описания команд, но на русский язык руководство не переведено;
- cat <файл> — показать содержимое файла прямо в терминале. Можно передать команде несколько файлов, тогда она выведет содержимое каждого;
- ls <путь к папке> — отобразить содержимое каталога. Если не передать этой команде путь, она покажет, что находится в текущей папке.
Less. Команда less <файл> открывает переданный файл для чтения в специальном интерфейсе. Она хорошо подходит для просмотра длинных файлов, потому что внутри интерфейса less можно ориентироваться по содержимому:
- нажатие g переводит пользователя в начало файла;
- нажатие G переносит в конец;
- / открывает поиск по содержимому;
- q выходит из less.
Язык bash зависит от раскладки: если ввести g, когда включен русский язык, команда не сработает.
Nano. Так называется текстовый редактор, которым можно пользоваться из консоли. Он очень простой: это аналог Notepad, который открывается прямо внутри командной строки. Чтобы открыть в нем файл, нужно ввести команду nano <файл>. Внутри программы можно читать, редактировать, сохранять содержимое. Основные команды редактора указаны внутри его интерфейса.
Для перехода в nano без открытия файла команду можно запустить без аргументов
Команды для поиска
Пользователю может понадобиться найти какой-нибудь файл или определенную информацию внутри него. Для этого используются две программы:
- find <папка> -name «имя файла в кавычках» ищет файл с нужным именем в указанной папке;
- grep «любой текст в кавычках» <имя_файла> ищет указанную строку в файле. Подходит для поиска определенного содержимого, например строчек в скриптах. Если запустить grep с аргументом -r и указать имя папки, то он будет искать нужную строку во всех файлах папки.
Работа с файлами
Со всем, что есть в системе, можно работать. Для этого bash предоставляет огромное множество команд. Вот некоторые из них:
- mkdir <имя_папки> — создает в текущем каталоге новую папку. Если папку нужно создать в другом месте, понадобится команда mkdir -p <путь>;
- touch <файл> — создает файл. Можно прописать к нему путь, а можно создать его в текущем каталоге. Тогда потребуется указать только имя файла;
- cp <путь1><путь2> — копирует файл из пути1 в путь2;
- mv <путь1><путь2> — перемещает файл из пути1 в путь2;
- rm — удаляет файл, rm -r — удаляет каталог;
- wget <ссылка> — скачивает файл с сайта по ссылке и размещает в текущем каталоге;
- echo <текст или переменная> — выводит аргумент в консоль.
Ввод и вывод
Потоки ввода и вывода можно перенаправлять с помощью символов > и <. Это значит, что команда может взять аргументы не из консоли, а из другого места, чаще всего из файла. Вывести результат она тоже может не на экран, а в файл или куда-либо еще:
- <команда> <<файл> — ввод аргументов из файла;
- <команда> ><файл> — вывод результата в файл;
- <команда> >><файл> — вывод результата в файл с дозаписью. Если в документе уже было содержимое, оно не перезапишется — новые данные добавятся в конец.
Можно запускать сразу несколько команд, чтобы они передавали друг другу данные, — это называется конвейером. В таком случае команды перечисляются через |.
Работа с git
Популярные дистрибутивы Linux (Ubuntu, Debian и прочие) поддерживают систему контроля версий git. Узнать о ней больше можно в этой статье. С системой можно работать из командной строки.
Скрипты на bash
Если пользователю нужно выполнить много шаблонных действий по очереди и этот алгоритм будет использоваться не один раз, можно создать скрипты. Команды записываются в файл и выполняются каждый раз, когда он исполняется. С помощью скриптов можно автоматизировать работу с системой и упростить процессы.
Чтобы запустить скрипт из консоли, нужно ввести команду bash <имя скрипта> или sh <имя скрипта>.
Начало скрипта. Чтобы система поняла, что файл — скрипт, его первая строка должна быть такой:
#!/bin/bash
После ! пишется путь к интерпретатору bash, который по умолчанию выглядит так, как указано в коде. Если в системе другой путь, соответственно меняется и запись в начале скрипта. Узнать этот путь можно с помощью команды в терминале:
whereis bash
Расширение для файла скрипта традиционно указывается как .sh. На самом деле система сможет выполнить файл и с другим расширением и даже без него. В первую очередь .sh указывается для удобства пользователя, чтобы ему было легче понять, что файл — bash-скрипт.
Переменные. Скриптовый язык поддерживает переменные. У них нет типа, а объявляются они так:
<имя_переменной> = <значение>
Значение может быть числовым, текстовым или другим. Можно получить его извне с помощью специальных обозначений:
- $0 — передает имя скрипта;
- $1, $2 и так далее — аргументы, которые пользователь может передать в скрипт, когда открывает его.
Обратиться к созданной переменной внутри скрипта можно так: $<имя_переменной>. Она используется для вычислений, ввода-вывода и других действий.
Условия и циклы. Скрипт может выполнять действия, если соблюдается какое-либо условие. Для этого используется конструкция:
If <условие>
then <действие, если условие выполнено>
else <действие, если условие не выполнено>
fi
Циклы позволяют выполнять команды заданное количество раз или пока некоторое условие верно. Таким образом можно управлять родительскими и дочерними процессами, контролировать версии или работать с сервером.
0 комментариев