Bash

Bash — это командная оболочка для UNIX-подобных операционных систем (UNIX, GNU/Linux, MacOS). Она дает пользователю систему команд для работы с файлами и папками, поиском, настройкой окружения и позволяет управлять ОС прямо из командной строки.

Логотип bash

Слово 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

Чтобы запустить 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

Для перехода в 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

Циклы позволяют выполнять команды заданное количество раз или пока некоторое условие верно. Таким образом можно управлять родительскими и дочерними процессами, контролировать версии или работать с сервером. 

Другие термины на букву «B»

BFS
Big Data
Bitbucket
Bootstrap
Bruteforce
Burp Suite

Все термины

Освойте новую профессию

(рейтинг: 5, голосов: 5)
Добавить комментарий