Bash – командная оболочка Linux
В большинстве дистрибутивов Linux по умолчанию установлена командная оболочка Bash. Отметим, что между всеми командными оболочками, соответствующими стандарту POSIX Unix-подобных операционных систем, разница небольшая.
Bash запускается в текстовом режиме или приложении «Терминал» и работает интерактивно. Это значит, что он ожидает ввод пользователя, далее интерпретирует введенную строку как команду, которую надо выполнить. Команды бывают разными: запуск программы, операции с файлами, выполнение скрипта на языке самого Bash и др.
Unix разрабатывалась как многопользовательская операционная система, доступ к которой пользователи осуществляли через терминалы. Например, в здании был один мощный компьютер, а в рабочих помещениях специалистов располагались терминалы – точки доступа к ресурсам общей машины.
В связи с распространением персональных компьютеров, начавшимся в 80-х годах, многопользовательские ОС оказались не востребованными массовым потребителем. Однако для серверов они стали хорошим выбором.
Представьте, что подключаетесь по протоколу SSH к веб-серверу, на котором размещаете файлы сайта. Работая в ОС GNU/Linux и запустив программу «Терминал», вы даете Bash’у команду на подключение к удаленной машине под конкретным именем пользователя. Сервер отвечает вам и требует ввести пароль этого пользователя. Все потому, что пользоваться данным компьютером-сервером может далеко не один человек.
На локальном компьютере в текстовом режиме Linux (если вы нажмете, например, Ctrl + Alt + F2) эмулируется удаленный доступ к машине через терминал. Здесь Bash первым делом предлагает вам ввести логин, после чего – пароль. При вводе пароля на экране ничего не отображается. Так сделано специально, чтобы нельзя было подсмотреть даже количество вводимых символов. Если введенная пара логин/пароль соответствуют какому-либо ранее зарегистрированному в системе пользователю, то вы увидите приглашение командной строки Bash’а на ввод команды. В случае ошибки потребуется заново вводить логин/пароль.
В графическом режиме приложение «Терминал» автоматически «берет» данные запустившего его пользователя и передает Bash’у. Таким образом, вы уже оказываетесь представленными системе и первое, что видите, – приглашение командной строки.
Приглашение командной строки имеет относительно стандартный синтаксис и выглядит примерно так: имя_пользователя@имя_компьютра:текущий_каталог знак .

На скриншоте pl – имя пользователя, comp – имя компьютера. Символ тильды ~ в Linux-системах – это сокращенное обозначение домашнего каталога пользователя ( /home/user ). Именно эту директорию Bash делает текущей по умолчанию. Знак доллара $ обозначает, что мы работаем под непривилегированным пользователем. Если находиться в системе под администратором, вместо доллара будет знак решетки # .
После приглашения автоматически ставится пробел и ожидается ввод команды. На рисунке выше сначала был просто нажат Enter . Во второй строке была введена команда перехода в другую директорию. В третьей строке мы видим результат ее выполнения – текущим каталогом стал /opt , что отображено в приглашении.
Существует множество команд, которые можно отдавать в Bash. В основном это команды запуска различных программ, которые находятся в каталогах /bin , /usr/bin и ряде других. Проверяемые каталоги записаны в переменной $PATH оболочки:

Здесь с помощью команды echo мы просим Bash выдать нам значение переменной $PATH . В выводе каталоги отделены друг от друга с помощью двоеточия.
Можно посмотреть, какие программы установлены в том или ином каталоге, после чего запустить одну из них:

Если приложение имеет только графический интерфейс, то оно так и запустится (если вы находитесь в графическом режиме, в случае текстового произойдет ошибка). При этом Bash будет ожидать завершения работы программы, то есть другие команды вводить не получится. Однако в «Терминале» вы можете открыть вторую вкладку или создать второе окно. При этом запустится другой процесс для Bash.
Существуют программы с текстовым интерфейсом. Например, редактор Nano:

В данном случае Bash’у была дана команда nano , и прямо в терминале был открыт редактор GNU Nano. В нем была введена пара слов. Чтобы завершить работу редактора, надо нажать Ctrl + X , подтвердить сохранение или отказаться от него. После этого произойдет возврат к командной строке Bash.
Многие из запускаемых в Bash программ не предполагают взаимодействие с пользователем в интерактивном режиме (в режиме диалога). По смыслу их правильнее называть командами, а не программами. Пользователь вводит команду, она выполняется и передает управление обратно Bash. Что делает команда, зависит от команды.
В Bash можно выполнять программы, находящиеся не только в каталогах, перечисленных в $PATH . Однако в этом случае адрес до них надо указывать явно. Кроме того, следует не забывать, что у файла должно быть право на исполнение.

Здесь в домашнем каталоге был создан файл test.py , содержащий код на языке программирования Python, выводящий на экран число 10. Код был написан в Nano (на скриншоте не показано). Далее мы пытаемся выполнить программу, обратившись к файлу по его адресу. Точкой обозначается текущий каталог. В данном случае он домашний, поэтому это равносильно ~/test.py или /home/pl/test.py .
При первом вызове мы получаем ошибку, так как у нас нет прав на исполнение программы. С помощью команды chmod мы добавляем такое право (параметр +x ).
Существует множество команд. Знать их все как минимум затруднительно. Однако есть ряд наиболее востребованных. Это команды для совершения операций над файлами, установки программ, просмотра директорий и файлов, перемещения по дереву каталогов, то есть всего того, что мы делаем в графическом режиме операционной системы. Многие из них будут рассмотрены в данном курсе. С некоторыми мы уже немного познакомились ( cd , ls , echo , chmod ).
Потребность в остальных возникает реже. В этих случаях на помощь приходят доступные через Bash справочные руководства, иные источники. В курсе в первую очередь будет уделено внимание особенностям работы в Bash.
Также не будем забывать, что Bash – это еще и скриптовый язык программирования. В файл, обычно с расширением .sh , может быть записан не только список команд, но также инструкции языка (условный оператор, циклы и др.), «говорящие» как и в каких случаях исполнять те или иные команды. Программирование в Bash в данном курсе не изучается.
Исследуйте самостоятельно, что делают следующие команды: date , cal , pwd , who , clear , exit . С помощью команды which выясните, в каких каталогах находятся исполняемые файлы этих программ.
Курс с ответами к заданиям и дополнительными уроками в PDF
X Скрыть Наверх
Введение в Linux и Bash. Курс
В чем различие bash и терминала
В большинстве дистрибутивов Linux по умолчанию установлена командная оболочка Bash. Отметим, что между всеми командными оболочками, соответствующими стандарту POSIX Unix-подобных операционных систем, разница небольшая.
Bash запускается в текстовом режиме или приложении «Терминал» и работает интерактивно. Это значит, что он ожидает ввод пользователя, далее интерпретирует введенную строку как команду, которую надо выполнить. Команды бывают разными: запуск программы, операции с файлами, выполнение скрипта на языке самого Bash и др.
Unix разрабатывалась как многопользовательская операционная система, доступ к которой пользователи осуществляли через терминалы. Например, в здании был один мощный компьютер, а в рабочих помещениях специалистов располагались терминалы – точки доступа к ресурсам общей машины.
В связи с распространением персональных компьютеров, начавшимся в 80-х годах, многопользовательские ОС оказались не востребованными массовым потребителем. Однако для серверов они стали хорошим выбором.
Представьте, что подключаетесь по протоколу SSH к веб-серверу, на котором размещаете файлы сайта. Работая в ОС GNU/Linux и запустив программу «Терминал», вы даете Bash’у команду на подключение к удаленной машине под конкретным именем пользователя. Сервер отвечает вам и требует ввести пароль этого пользователя. Все потому, что пользоваться данным компьютером-сервером может далеко не один человек.
На локальном компьютере в текстовом режиме Linux (если вы нажмете, например, Ctrl + Alt + F2) эмулируется удаленный доступ к машине через терминал. Здесь Bash первым делом предлагает вам ввести логин, после чего – пароль. При вводе пароля на экране ничего не отображается. Так сделано специально, чтобы нельзя было подсмотреть даже количество вводимых символов. Если введенная пара логин/пароль соответствуют какому-либо ранее зарегистрированному в системе пользователю, то вы увидите приглашение командной строки Bash’а на ввод команды. В случае ошибки потребуется заново вводить логин/пароль.
В графическом режиме приложение «Терминал» автоматически «берет» данные запустившего его пользователя и передает Bash’у. Таким образом, вы уже оказываетесь представленными системе и первое, что видите, – приглашение командной строки.
Приглашение командной строки имеет относительно стандартный синтаксис и выглядит примерно так: имя_пользователя@имя_компьютра:текущий_каталог знак .

На скриншоте pl – имя пользователя, comp – имя компьютера. Символ тильды ~ в Linux-системах – это сокращенное обозначение домашнего каталога пользователя ( /home/user ). Именно эту директорию Bash делает текущей по умолчанию. Знак доллара $ обозначает, что мы работаем под непривилегированным пользователем. Если находиться в системе под администратором, вместо доллара будет знак решетки # .
После приглашения автоматически ставится пробел и ожидается ввод команды. На рисунке выше сначала был просто нажат Enter . Во второй строке была введена команда перехода в другую директорию. В третьей строке мы видим результат ее выполнения – текущим каталогом стал /opt , что отображено в приглашении.
Существует множество команд, которые можно отдавать в Bash. В основном это команды запуска различных программ, которые находятся в каталогах /bin , /usr/bin и ряде других. Проверяемые каталоги записаны в переменной $PATH оболочки:

Здесь с помощью команды echo мы просим Bash выдать нам значение переменной $PATH . В выводе каталоги отделены друг от друга с помощью двоеточия.
Можно посмотреть, какие программы установлены в том или ином каталоге, после чего запустить одну из них:

Если приложение имеет только графический интерфейс, то оно так и запустится (если вы находитесь в графическом режиме, в случае текстового произойдет ошибка). При этом Bash будет ожидать завершения работы программы, то есть другие команды вводить не получится. Однако в «Терминале» вы можете открыть вторую вкладку или создать второе окно. При этом запустится другой процесс для Bash.
Существуют программы с текстовым интерфейсом. Например, редактор Nano:

В данном случае Bash’у была дана команда nano , и прямо в терминале был открыт редактор GNU Nano. В нем была введена пара слов. Чтобы завершить работу редактора, надо нажать Ctrl + X , подтвердить сохранение или отказаться от него. После этого произойдет возврат к командной строке Bash.
Многие из запускаемых в Bash программ не предполагают взаимодействие с пользователем в интерактивном режиме (в режиме диалога). По смыслу их правильнее называть командами, а не программами. Пользователь вводит команду, она выполняется и передает управление обратно Bash. Что делает команда, зависит от команды.
В Bash можно выполнять программы, находящиеся не только в каталогах, перечисленных в $PATH . Однако в этом случае адрес до них надо указывать явно. Кроме того, следует не забывать, что у файла должно быть право на исполнение.

Здесь в домашнем каталоге был создан файл test.py , содержащий код на языке программирования Python, выводящий на экран число 10. Код был написан в Nano (на скриншоте не показано). Далее мы пытаемся выполнить программу, обратившись к файлу по его адресу. Точкой обозначается текущий каталог. В данном случае он домашний, поэтому это равносильно ~/test.py или /home/pl/test.py .
При первом вызове мы получаем ошибку, так как у нас нет прав на исполнение программы. С помощью команды chmod мы добавляем такое право (параметр +x ).
Существует множество команд. Знать их все как минимум затруднительно. Однако есть ряд наиболее востребованных. Это команды для совершения операций над файлами, установки программ, просмотра директорий и файлов, перемещения по дереву каталогов, то есть всего того, что мы делаем в графическом режиме операционной системы. Многие из них будут рассмотрены в данном курсе. С некоторыми мы уже немного познакомились ( cd , ls , echo , chmod ).
Потребность в остальных возникает реже. В этих случаях на помощь приходят доступные через Bash справочные руководства, иные источники. В курсе в первую очередь будет уделено внимание особенностям работы в Bash.
Также не будем забывать, что Bash – это еще и скриптовый язык программирования. В файл, обычно с расширением .sh , может быть записан не только список команд, но также инструкции языка (условный оператор, циклы и др.), «говорящие» как и в каких случаях исполнять те или иные команды. Программирование в Bash в данном курсе не изучается.
Исследуйте самостоятельно, что делают следующие команды: date , cal , pwd , who , clear , exit . С помощью команды which выясните, в каких каталогах находятся исполняемые файлы этих программ.
Курс с ответами к заданиям и дополнительными уроками в PDF
X Скрыть Наверх
Введение в Linux и Bash. Курс
В чём разница между терминалом, консолью и оболочкой? [дубликат]
Часто вижу термины «терминал», «виртуальный терминал», «tty», «консоль», «командная оболочка». В чём отличие между ними? Или это синонимы? Даже на этом форуме для терминал предлагают синоним консоль.
Отслеживать
2,313 2 2 золотых знака 10 10 серебряных знаков 38 38 бронзовых знаков
задан 20 окт 2022 в 10:35
1 1 1 бронзовый знак
отсюда и далее по ссылкам. дубликаты
20 окт 2022 в 10:37
Вот здесь дается развернутый ответ на вопрос.
20 окт 2022 в 10:38
@aleksandrbarakin@Alexey Vesker хотелось бы видеть каноничный ответ на этот достаточно популярный вопрос на ruSO.
20 окт 2022 в 10:39
0
Сортировка: Сброс на вариант по умолчанию
Связанные
Похожие
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.28.1620
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Что такое Терминал на Mac?

Терминал — это приложение для опытных пользователей и разработчиков, которое дает возможность взаимодействовать с операционной системой Mac через интерфейс командной строки. В Терминале можно вводить команды и скрипты (так называемые shell-скрипты) для выполнения задач на Mac.

При открытии Терминала отображается простое окно с приглашением в командную строку. В Терминале доступен широкий выбор команд и параметров, которые можно использовать для выполнения любых задач: от простых до очень сложных. Подробнее об отображении и использовании команд в Терминале см. в статье Чтение справочных страниц UNIX (на английском языке) на сайте Apple для разработчиков.
В отличие от обычных приложений Mac, где используется графический интерфейс — кнопки, бегунки и меню, — в Терминале для выполнения задач и доступа к функциям нужно вводить код в интерфейсе командной строки. Такие команды (и последовательности команд, отправляемые в виде скриптов) выполняются оболочкой (shell), которая представляет собой пользовательский интерфейс операционной системы Unix.
В Терминале можно выполнять команды и скрипты, которые сообщают оболочке (shell), что необходимо сделать. Например, с помощью команды можно показать содержимое папки или запустить скрипт, автоматизирующий открытие приложения и выполнение определенной задачи.
Также с помощью простых скриптов в Терминале можно экономить время и автоматизировать часто выполняемые задачи. Когда Вам требуется автоматизация задач или работа со скриптами на быстрых низкоуровневых языках программирования, Терминал предоставляет легкий доступ к вводу и выводу командных оболочек Unix, в том числе BASH и ZSH.
Подробнее об использовании Терминала и создании скриптов см. в статье Основные сведения о shell-скриптах на сайте Apple для разработчиков.
Примечание. Приложение «Терминал» также может быть полезно при устранении проблем на Mac с помощью службы поддержки Apple. Рекомендуется не удалять это приложение с компьютера.
Терминалы, оболочки, консоли и командные строки
Оригинал: Terminals, shells, consoles, and command lines
Автор: Seth Kenlon (Red Hat).
Дата публикации: 23 марта 2020 г.
Перевод: В.Костромин
Дата перевода: 12 мая 2020 г.
Терминалы, оболочки, консоли и командные строки связаны, но эти термины не являются синонимами. Сет Кенлон объясняет различия.
Если вы изучаете Linux или Unix, вы могли встречать термины «терминал», «командная строка», «оболочка» и «консоль», и у вас может быть справедливое замешательство относительно того, что есть что, и обозначают ли эти слова одно и то же. Определенно эти термины связаны, но есть нюансы и различия, которые могут иметь важные последствия. В этой статье вы найдете необходимые разъяснения.
Как работают компьютеры
Когда компьютер запускается, ядро ОС распознает его физические устройства и обеспечивает возможность взаимодействия между ними. Существует много разных ядер: давным-давно было ядро Unix, ядро Sun, ядро BSD, а позже появилось ядро Linux, ядро Hurd, ядро Mach и ядро NT.
И это еще не всё. Существуют специализированные ядра для различных типов вычислительных устройств. Некоторые из них совсем простые, другие очень сложные. Все зависит от потребностей устройств, на которых они запускаются.
Самый базовый набор инструкций для компьютера поддерживает его во включенном состоянии. Драйверы устройств, управляемые ядром, следят за вентиляторами, предотвращая перегрев, мониторят использование дискового пространства, управляют состоянием оперативной памяти, обнаруживают новые устройства и так далее. Самые первые компьютеры в состоянии простоя делали даже меньше этого, и каждая программа, которая запускалась на ранних моделях компьютеров, была единственной целью использования компьютера, по крайней мере на то время, пока эта программа (в виде колоды перфокарт) исполнялась. Возможность запуска фонового задания или двух приложений одновременно была невообразимой. Если вы хотели запустить два процесса одновременно, вы должны были использовать второй компьютер.
Интерактивная оболочка
Однако по мере развития комьютеров, некоторые ученые осознали, что использование компьютера для выполнения одной задачи при каждом его запуске является неэффективным и, с развитием технологий, нерациональным использованием его мощности. Поэтому они разработали нечто, что они назвали оболочкой — shell.
Существуют разные версии того, почему был выбран термин «оболочка», самое правдоподобное и удовлетворительное объяснение состоит в том, что интерфейс оболочки окружает ядро так же, как ореховая скорлупа окружает орех. Оболочка — это та часть, с которой взаимодействует пользователь, а запросы на вычислительную мощность управляются ядром.
Когда мы говорим об оболочке, важно понимать, что ее появление определило новый этап в развитии компьютерных технологий. Оболочка превратила компьютер из изолированного прибора в мощный инструмент, который может менять свою функцию по требованию. Компьютеры стали интерактивными. Даже в современных компьютерах оболочка — это самый низкий уровень взаимодействия пользователя с компьютером. Это самый прямой способ проинструктировать компьютер о том, что вы хотите делать дальше, поэтому умение использовать возможности оболочки является бесценным знанием для опытных пользователей.
Оболочка является абстрактной концепцией для многих людей. Когда мы думаем или говорим об оболочке, полезно иметь в виду какую-то конкретную. Их много и есть из чего выбрать. Самая популярная — это (GNU) Bash, но альтернативой ей могут служть Zsh и Fish. Tcsh и Ksh — это надежные старые фавориты ранних версий UNIX со строгим соответствием POSIX. Ash и Dash стремятся быть легкими и быстрыми, что делает их идеальными для встраиваемых систем и для минимальных сред. Powershell от Microsoft — это основанная на .NET оболочка с открытым кодом.
Командная строка
Когда вы обращаетесь к оболочке, вы видите вначале приглашение. Некоторые называют приглашение оболочки командной строкой, что понятно: приглашение появляется в строке, в которой вы можете ввести (набрать, напечатать) какую-то команду.
Приглашение представляет собой некоторый символ, который дает вам понять, что оболочка ожидает ваших инструкций. Обычно это символ доллара ( $ ), но это может быть также символ процента ( % ), угловая скобка ( > ), знак числа ( # ) или что-то еще. То есть приглашение оболочки может выглядеть примерно следующим образом:
Одно из заметных различий между оболочками заключается в синтаксисе. Например, в Bash, Zsh, Ash и Ksh значения переменных задаются с помощью знака равенства:
$ foo=bar $ echo $foo bar
В Tcsh, однако, используется ключевое слово set :
$ set foo=bar $ echo $foo bar
Помощь
На первый взгляд интерфейс оболочки не очень удобен для пользователя, потому что кажется, что вы должны заранее точно знать, что вы хотите делать с помощью оболочки. Это не то, к чему привыкло большинство современных компьютерщиков, потому что графические приложения по крайней мере предоставляют пользователям кнопки и меню, которые можно исследовать, даже не зная точно, что делает приложение.
Даже если пользователь понимает, что оболочка ожидает ввода, попытка ввести какое-то слово английского или другого языка, приводит либо к выводу сообщения об ошибке, либо какой-то бессмыслицы.
Даже если вы введете команду help в ответ на приглашение Bash, вы получите только список встроенных команд, только немногие из которых могут показаться полезными для дальнейшего взаимодействия с оболочкой.
В этом смысле оболочка не похожа на привычные для вас приложения. Она действительно для большинства просто командная строка: строка, в которой вы можете набрать какую-то команду. Пользователь должен знать, какие команды доступны, и предполагается, что пользователь, открывающий оболочку, ознакомился по крайней мере с самыми простыми командами, чтобы с их помощью он мог больше узнать о системе.
Поскольку пользователь не всегда имеет даже необходимый минимум знаний, в публичных системах заменяют не всегда полезную команду help на что-то более информативное, например, на shellp.
Консоль
В Linux или BSD вы можете получить доступ к оболочке не запуская графическое окружение вообще (то есть оболочка — это все, что будет вам доступно), либо набрав сочетание клавиш Alt+Shift с одной из функциональных клавиш от F2 до F6. Каждая из этих функциональных клавиш открывает для вас экран, предоставляемый getty (или agetty, или еще чем-то подобным, в зависимости от того, что используется в вашем дистрибутиве). На этом экране отображается приглашение для входа в оболочку, и этот экран часто называют консолью. Строго говоря, это сеанс getty или эмулированное tty-устройство.
На Mac нет никакого способа отказаться от запуска графического интерфейса в работающей системе, хотя во время загрузки вы можете использовать специальные (snag) клавиши для загрузки в однопользовательском режиме. В однопользовательском режиме в Mac OS отключены многие функции, в том числе управление пользователями, поэтому обычно это не рекомендуется.
Наиболее распространенный способ доступа к оболочке на современных компьютерах — это открыть эмулятор терминала, в котором запускается оболочка.
Терминал
Терминал исторически был физическим устройством, которое использовалось еще до того, как появилась концепция персонального компьютера (ПК). Терминал был в чем-то похож на современный компьютер, но на самом деле это был просто экран (иногда даже просто принтер!) с подключенной клавиатурой. Окно терминала на современном компьютере является эмуляцией этого исторического объекта, и вы обычно можете запустить любую оболочку внутри эмулятора терминала.
Например, на рабочем столе Linux вы можете запустить один экземпляр терминала GNOME (GNOME Terminal), который будет служить окном для доступа к оболочке Bash, и другой экземпляр терминала GNOME, который послужит окном в оболочку Tcsh.

Сам терминал служит только для запуска работающей оболочки. Эмулятор терминала не обрабатывает данные и не запускает команды, хотя он может добавлять функции пользовательского интерфейса, такие как специальные сочетания клавиш, возможность перетаскивания файлов в оболочку, цветовые темы и т.д.
Существует множество эмуляторов терминала для любой операционной системы. Настольные компьютеры с Linux и BSD поставляются с xterm в качестве запасного варианта и обычно включают современный эмулятор для ежедневного использования (например, GNOME Terminal, Konsole и т.д.). Mac OS поставляется с проприетарным эмулятором терминала, но существует намного лучшая замена — iTerm2 (поставляется под лицензией GPLv2).
Windows по умолчанию включает PowerShell, но существует много возможностей замены этого эмулятора программами с открытым кодом, такими как ConEmu или Cmder.
Введение в Bash. Принцип работы, популярные команды и создание скриптов.

Для успешного использования Linux необходимо понимать специфику его функционирования и овладеть навыками работы с командной строкой. Это позволит автоматизировать множество задач и значительно ускорить процесс работы. В данном тексте мы обсудим стандартный командный интерпретатор, который присутствует в большинстве дистрибутивов Linux — Bash. Мы рассмотрим основные принципы его функционирования, исследуем наиболее популярные команды и применим полученные знания на практике.
Что такое Bash
- Быстро переименовывать все файлы в каталоге
- Генерировать случайные пароли
- Создавать и отправлять отчеты по email
- Проверять и обновлять систему и программы
- Очищать кэш браузера одной командой
В UNIX-системе обычно доступны различные типы shell-оболочек. Помимо Bash, стоит упомянуть такие, как csh (C shell), ksh (Ksh shell) и zsh (Z shell).
Давайте проясним термины Unix и Shell.
Большинство современных операционных систем, кроме WINDOWS, основаны на UNIX. Это, в том числе, дистрибутивы Linux, macOS, iOS и Android. UNIX характеризуется модульной архитектурой, в которой каждая функция выполняется отдельной программой, а взаимодействие между ними происходит через общую файловую систему. Shell используется для управления этими программами и исполнения команд.
Shell (оболочка) — это программа, обеспечивающая взаимодействие пользователя с системой. В командной строке вы вводите команды, которые оболочка интерпретирует, вызывает соответствующие программы и отображает результаты. Команды могут подаваться не только в текстовом режиме, но и считываться из файла, называемого shell-скриптом или оболочкой shell-программы.
Для обеспечения интерфейса командной строки в операционных системах используются командные интерпретаторы. Они могут представлять собой самостоятельные языки программирования со своим синтаксисом и функциональными возможностями.
Самые популярные командные интерпретаторы — это Terminal (Linux, macOS) и Konsole (Windows). Именно с их помощью можно взаимодействовать с командной оболочкой shell, которая будет принимать специальные команды и передавать их на выполнение операционной системе.

Основы Bash
Для начала — три главных особенности, с которых стоит начать знакомство с Bash:
- Написание любого скрипта нужно начинать со строки: #!/bin/bash. После символа #! следует путь к bash-интерпретатору. Вы можете узнать путь к нему (возможно, интерпретатор был установлен в другое место) с помощью команды whereis bash.
- Комментарии и примечания нужно указывать после символа # (кроме первой строки, где мы указываем путь к bash-интерпретатору)
- Bash не имеет строгой системы типов
Тип данных определяется в зависимости от контекста использования переменной и ее содержимого. Bash устанавливает следующие правила для именования переменных:
- Имена переменных должны начинаться с латинской буквы (в верхнем или нижнем регистре) или символа подчеркивания.
- В имени переменной запрещено использовать пробелы или специальные символы.
- Регистр букв в именах переменных учитывается. Переменные name1 и Name1 считаются разными.
- Рекомендуется избегать использования ключевых слов Bash в качестве названий переменных
Создаем виртуальный сервер и подключаемся к нему
Чтобы учиться на практике, нам нужна соответствующая среда. Если вы используете компьютеры с системой Linux или macOS, то можете все сделать локально. В нашем случае компьютер на базе Windows, поэтому мы создадим виртуальный сервер на базе Ubuntu 20.4. Для этого нам нужно зайти в Панель 1cloud и перейти в раздел «Виртуальный сервер ».

Нажимаем на кнопку «Создать сервер» и далее выбираем, какой дистрибутив Linux установим на свой сервер. Ниже настраиваем нужную нам конфигурацию и жмем «Заказать».

Осталось подождать несколько минут и мы можем подключиться к нашей виртуальной машине. Для этого есть два варианта: использовать программу putty или подключиться по SSH. В данном случае мы выберем второй вариант.
Чтобы начать, откройте командную строку и введите «ssh root@» с указанием IP-адреса сервера. После этого появится строка для ввода пароля. Обратите внимание, что символы пароля не будут отображаться.
IP-адрес и пароль вашего виртуального сервера можно найти на странице с параметрами сервера.

После указания IP-адреса и ввода пароля для удаленного сервера, вы увидите приветствие от Ubuntu. Здесь указаны ссылки на документацию и поддержку, актуальная информация о вашей системе и последних обновлениях. Последние две строки содержат информацию о вашем последнем входе в систему и приглашение Shell. В разных дистрибутивах строка Shell может отображаться по-разному, но обычно она выглядит как имя_пользователя@имя_компьютера и знаки ~#.

С приглашения Shell будет начинаться каждая новая строка. Если вы хотите изменить содержимое этой переменной введите PS1= и после знака равенства напишите то, что будет выводиться в начале строки. Например, мы введем line:. После перезапуска Терминал вернется к своим исходным настройкам.

Теперь мы можем приступать к работе. Для начала изучим несколько простых команд.
Команды Bash
Команда Bash — наименьшая единица кода, которую оболочка может выполнить самостоятельно. С их помощью bash понимает, что нужно сделать. Обычно оболочка принимает от пользователя одну команду и возвращается после ее выполнения.
- echo — выводит указанную информацию.
- date — отображает текущие время и дату.
- cal — календарь на текущий месяц.
- clear (или сочетание CTRL+L) — очищает окно терминала.

Как видите, все достаточно просто и легко. Значит, мы можем идти дальше и знакомиться с более сложными сценариями работы с Bash.
Теперь разберемся, как использовать основные команды для работы с файловой системой.
Работа с файлами
В Bash вся файловая система состоит из файлов и директорий. Директория — это аналог папки, которая также может содержать в себе файлы и другие директории, которые называются поддиректориями. В свою очередь, поддиректория также может содержать в себе другие файлы и поддиректории. Так образуется иерархия директорий, которое называют деревом (tree). Чтобы получить доступ к каталогу или файлу, необходимо пройти через последовательность узлов в этой древовидной структуре. Пути разделены между узлами структуры с помощью слеша /.
Самая главная, верхняя, директория называется root и обозначается символом /.

Рассмотрим основные команды для работы с директориями.
- pwd — указывает на текущую рабочую директорию.
- cd — перемещение между директориями.
- mkdir — создание новой директории.
- ls — отображение содержимого текущей рабочей директории.
Под текущей рабочей директорией подразумевается та директория, из которой выполняются команды в настоящий момент. То есть с помощью команды cd можно перейти в другую директорию, размещенную в текущей.

Используя команду cd мы можем указать абсолютный и относительный путь.
Абсолютный путь — это путь, который начинается от корневой директории /. Например: cd /root/dmkuk.
Относительный путь — это путь, который начинается от текущей рабочей директории. То есть так, как мы сделали в примере выше: сначала ввели pwd и узнали в какой директории находимся, а затем с помощью команды cd перешли в следующую.
Как видите, передвигаться вверх по дереву директорий довольно просто, а вот обратно не очень — нужно указывать абсолютный путь вплоть до нужной директории. Чтобы упростить этот момент, существуют специальные символы.
. — текущая директория
.. — родительская директория
~ — домашняя директория текущего пользователя
Добавим в наш пример выше обратный путь к домашней директории.

Переменные
Для создания переменной, которая хранит определенное значение, достаточно указать ее название, знак = и нужное значение после него. Например, Number=16. В качестве значения можно использовать как числа, так и строки. Однако для того, чтобы объявить переменную строкового типа, состоящую из нескольких слов, нужно заключить ее в кавычки — одинарные или двойные. Разница между ними лишь в том, что при двойных кавычках мы можем использовать итерполяцию — обращение к другим переменным.
Когда мы хотим обратиться к нашей переменной, достаточно ввести команду echo и указать имя переменной со знаком $.

Важно понимать, что таким образом мы создаем локальные переменные, т.е. такие, которые доступны только в рамках данного окна shell. Когда мы введем другую команду, внутри нее уже не будет доступа к локальным переменным. Чтобы сделать глобальную переменную (на языке Unix — Environment variables, переменная окружения) нужно воспользоваться командой export.
Если мы захотим посмотреть, какие у нас в целом имеются переменные окружения, мы можем воспользоваться командой printenv.

В этом списке мы можем увидеть и другие переменные окружения, которые уже были установлены. Например, переменная Shell, которая указывает, где оболочка shell находится по умолчанию. Здесь же мы можем увидеть переменную pwd. То есть, когда мы используем команду pwd, на самом деле мы просто выводим значение этой переменной окружения.
Еще одна важная переменная окружения в контексте работы Unix — PATH. Остановимся на ней подробнее.

Переменная PATH используется каждый раз, как мы вбиваем любую команду. Все команды хранятся в виде обычных файлов. Для того, чтобы найти нужный файл, операционная система использует переменную окружения PATH и ищет последовательно в каждой из директорий файл нужной команды.
Соответственно, чтобы создать новую команду, необходимо положить ее в одну из указанных директорий, либо добавить новую также с помощью команды export.
Теперь пришло время начать работать с файлами и их содержимым.
Чтение текстовых файлов
Для чтения текстовых файлов существует перечень стандартных команд.
- cat — позволяет вывести на консоль все содержимое файла.
- nl — также выводит все содержимое файла, но кроме этого нумерует строки и позволяет проводить дополнительные манипуляции с ними.
- head — отображает первые 10 строк файла.
- tail — отображает последние 10 строк файла.
- less — позволяет понемногу считывать большой файл.
Если мы хотим на практике посмотреть, как работают эти команды, то для начала нам нужно создать текстовый файл и что-то написать в нем. Для этого есть несколько способов. Рассмотрим два из них.
Команда touch. Это стандартная команда для создания пустых файлов. После ее ввода через пробел нужно указать название файла. Если вам нужно создать несколько файлов одновременно, просто введите несколько названий, отделяя их пробелом. Далее созданный файл можно отредактировать в любом текстовом редакторе (о которых поговорим ниже).

Перенаправление вывода (>). Второй способ — оператор перенаправления вывода. Чтобы создать с помощью него файл, достаточно ввести знак > и через пробел указать имя файла. Важно быть внимательным при использовании этого способа, т.к. если файл уже существует, то он будет перезаписан.
В связке с командой cat он позволяет создать пустой файл и сразу внести в него нужную информацию, без использования текстового редактора. Это удобно, если необходимо создать текстовый файл с небольшим содержимым.
После ввода команды написать текст можно прямо в терминале. Чтобы завершить ввод текста и сохранить изменения, нужно воспользоваться комбинацией Ctrl + D.

Что с типами данных?
В Bash отсутствует строгая типизация, как в некоторых других языках. Bash-переменные являются строками, но, в зависимости от контекста, допускается целочисленная арифметика. Фактором, определяющим тип данных, является содержимое переменной.
Строки (strings) — последовательность символов, заключенная в кавычки. Как мы уже говорили, Bash допускает написание строк в одинарных или двойных кавычках.
Числа (numbers) — целочисленные значения. Bash поддерживает арифметические действия с целыми числами. Выражения начинаются со знака $ и обрамляются двойными круглыми скобками.

Массивы (arrays) — упорядоченные коллекции данных, доступ к которым осуществляется по индексу.

Логические значения (boolean) — используются для проверки выполнения условий. Могут принимать только два значения — истинное или ложное.
Итак, мы почти готовы к созданию наших первых скриптов на Bash. Осталось только установить текстовый редактор.
Какой текстовый редактор выбрать?
Текстовых редакторов есть большое множество. Для локальной работы можно использовать абсолютно любой редактор. В случае работы на удаленном сервере через SSH рекомендуем использовать эти:
Знакомство с vim может быть достаточно сложным, однако после того, как вы его освоите, он станет для вас незаменимым инструментов. Подробно о работе в этом текстовом редакторе вы можете прочитать в нашей статье из раздела «Помощь». Сегодня же мы воспользуемся редактором nano, который прост и удобен в использовании.
Nano предустановлен в большинстве дистрибутивов Linux. Если вдруг у вас его нет, то установить его можно в два этапа.
Сначала обновите репозитории apt:
sudo apt update
После установите Nano. Для разных дистрибутивов команды по установке могут отличаться, но их можно просто найти в интернете. Для Ubuntu команда выглядит следующим образом:
sudo apt install nano
Открывается файл с помощью простой команды nano имяфайла. Откроем таким образом недавно созданный нами текстовый файл demo_file.txt.

Открывается окно редактора, в котором мы видим содержимое файла (если в нем уже что-то было записано) и снизу основные команды и соответствующие им сочетания клавиш (знак ^ означает Ctrl). Сочетание Ctrl+X сохранит содержимое и закроет окно редактора, а если нам нужно сохраниться без выхода, стоит использовать сочетание Ctrl+O.
if-then-else
Ветвление if-then-else позволяет не только проверить условие, но и выполнить определенный набор команд при истинном условии, и другой набор команд при ложном.
Для выполнения более сложных задач используется конструкция elif, которая позволяет проверить дополнительное условие. Если же необходимо проверить одно условие, используется конструкция if-then. В этом случае команда будет выполнена только при истинном условии.
Далее мы продолжим создавать скрипты уже в редакторе. Для этого создадим новый файл с разрешением .sh.

Напишем скрипт приветствия, соответствующего указанному имени. Помним, что любой скрипт в Bash должен начинаться со строки #!/bin/bash.

Итак, разберем, что мы написали.
- Открыв ветвление конструкцией ifмы задали первое значение переменной. Эти значения мы указываем в качестве аргумента после имени скрипта. $0 — всегда означает имя исполняемого скрипта, $1 — следующий за ним аргумент, $2 — следующий и т.д. В нашем случае скрипт будет иметь вид имяскрипта аргумент, поэтому нам достаточно только одного аргумента. Внутри кавычек [] важно ставить пробелы в начале и конце, иначе условие не будет работать.
- После того, как мы задали первое значение переменной, с помощью команды echo мы указываем действие, которые будет совершено, если условие окажется верным.
- Далее с помощью конструкции elif аналогичным образом создаем второе условие и соответствующее ему действие.
- Теперь вводим еще одно условие — когда не введен ни один аргумент. $# — количество аргументов без учета имени скрипта. В нашем случае мы указали -lt 1 что означает меньше одного (lower than 1). Получается, конструкция $# -lt 1 означает количество аргументов меньше одного.

Циклы
Циклы в Bash позволяют повторять набор команд много раз, пока не будет выполнено определенное условие.
- for — используется для итерации по элементам списка или диапазону значений.
- while — позволяет выполнять набор команд, пока определенное условие остается верным.
Посмотрим на практике, как они работают. Для этого создадим новый скрипт под названием myscript2.sh.

В этом примере мы сначала задали значение нашей переменной, а затем внутри цикла while указали, что если значение переменной будет меньше 10, нужно увеличивать ее на 1. В результате получаем вот такой скрипт:

Цикл for является основной конструкцией для обработки массивов. Поэтому приведем пример именно с использованием элементов массива.

В результате мы получим очень простой список:

Функции
Функции в Bash позволяют выполнять блоки кода повторно без необходимости каждый раз вводить весь код заново.
Внутри функции можно использовать обычные команды Bash, а также другие функции. Когда функция вызывается, она выполняется так, как будто весь ее код был вставлен в то место, где она вызвана. В качестве примера создадим функцию, которая выводит числа от 1 до 10.

Важная особенность — функцию необходимо объявить до того, как она будет вызвана. Вызвав нашу функцию мы увидим следующий результат:

Заключение
Подавляющее большинство приложений, особенно на Java, разрабатываются и разворачиваются на UNIX-системах. Поэтому, рано или поздно, вам все-таки придется столкнуться с Bash. Как видите, это гибкий язык и его достаточно просто изучить. Надеемся, наш текст помог вам разобраться в большинстве основных элементов Bash, и теперь вы сможете легко и быстро автоматизировать свои рутинные процессы.
Что такое bash в Linux? Гайд по созданию bash-скриптов
bash (сокр. от «Bourne-Again shell») — это командная оболочка (или «интерпретатор командной строки»), используемая по умолчанию в операционных системах на базе Unix и Linux, созданная в 1989 году Брайаном Фоксом с целью усовершенствования командной оболочки sh.
bash позволяет автоматизировать различные задачи, устанавливать программное обеспечение, настраивать конфигурации для своего рабочего окружения и многое другое. В этой статье мы рассмотрим использование нескольких основных команд в bash, а также рассмотрим гайд по созданию bash-скриптов.
Оглавление:
- Что такое терминал?
- Команды в bash
- Редактор nano
- Гайд по созданию bash-скриптов
- Создание bash-скрипта
- Выполнение bash-скрипта
- Команда echo
- Комментарии
- Объявление и использование переменных
- Условный оператор if
- Оператор else if
- Цикл while
- Цикл for
- Заключение
Что такое терминал?
Терминал — это программа, которая используется для взаимодействия с шеллом. Это просто интерфейс к нему и другим программам командной строки, которые работают внутри нее. Вот как выглядит типичный терминал (Konsole) в Debian 11 (окружение рабочего стола — KDE Plasma):

Типичный терминал в Linux
Всякий раз, когда мы открываем окно терминала, мы видим приглашение шелла — имя_пользователя@имя_машины:~$ . Символ $ означает, что мы работаем под учетной записью обычного пользователя, а символ ~ (тильда) означает, что в данный момент мы находимся в домашнем каталоге /home/.
Команды в bash
Команда в bash — это наименьшая единица кода, которую bash может выполнить. С помощью команд мы сообщаем шеллу, что нам нужно, чтобы он сделал. bash обычно принимает от пользователя одну команду и возвращается к нему после того, как команда будет выполнена. Чтобы немного освоиться в bash, давайте попробуем выполнить несколько простых команд.
Команда echo — возвращает всё, что вы вводите в командной строке:

Пример использования команды echo
Команда date — отображает текущее время и дату:

Пример использования команды date
Команда pwd (сокр. от «print working directory») — указывает на текущий рабочий каталог, в котором команды шелла будут искать файлы.
Файловая иерархия в Linux имеет древовидную структуру, поэтому, чтобы добраться до указанного каталога или файла, нам нужно пройти определенный путь, каждый узел которого отделен от других узлов символом / .

Пример использования команды pwd
Команда ls (сокр. от «list») — отображает содержимое каталога. Обычно, команда ls начинает с просмотра нашего домашнего каталога. Это означает, что если мы просто напечатаем ls , то данная команда выведет содержимое текущего каталога, которым в нашем примере является домашний каталог /home/diego:

Пример использования команды ls
Команда cd (сокр. от «change directory») — изменяет текущую директорию на заданную пользователем. Рассмотрим некоторые примеры использования данной команды:
cd — меняет текущую директорию на заданную. Давайте попробуем с помощью команды ls перейти к корневому каталогу / и ознакомимся с его содержимым. Обратите внимание, что мы также можем использовать точку с запятой ; для записи двух команд в одной строке.

Пример объединения двух команд в одной строке
cd .. — вернуться в родительский каталог.
cd — вернуться в домашний каталог.
Команда mkdir (сокр. от «make directory») — создает новый каталог.
Команда mv (сокр. от «move») — перемещает один или несколько файлов/каталогов из одного места в другое (заданное пользователем). Для этого нужно указать, что мы хотим переместить (т.е. источник), и куда мы хотим переместить (т.е. пункт назначения).
В качестве примера я создам новый каталог Ravesli в своей домашней директории и перемещу в него все .txt-файлы (ну как «все», у меня там только один файл — Адреса.txt) из /home/diego/Документы/ с помощью двух вышеприведенных команд:

Перемещение файлов с помощью команды mv
Команда touch — создает новые пустые файлы (а также изменяет временные метки в существующих файлах и каталогах). Вот как мы можем создать пустой файл под названием foo.txt в папке Ravesli из домашнего каталога:

Создание файла с помощью команды touch
Команда rm (сокр. от «remove») — удаляет файлы/каталоги. По умолчанию, команда rm НЕ удаляет каталоги, но если используется как rm -r * внутри заданного каталога, то каждый подкаталог и файл внутри заданного каталога — удаляются.
Давайте удалим ранее созданный файл foo.txt:

Удаление файла с помощью команды rm
Команда rmdir (сокр. от «remove directory») — удаляет каталоги.
Давайте удалим созданный ранее каталог /home/diego/Ravesli:

Удаление каталогов с помощью команды rmdir
Команда cat (сокр. от «concatenate») — считывает файл и выводит его содержимое. Она может работать с несколькими файлами, объединяя их вывод в единый поток (отсюда и происходит её название). У меня в домашнем каталоге есть папка untitled с файлами С++/Qt-проекта, и ниже я использую команду cat для просмотра содержимого файла main.cpp из untitled:

Пример использования команды cat
Чтобы просмотреть несколько файлов, укажите друг за другом (через пробел) имена требуемых файлов после команды cat , например:

Просмотр нескольких файлов с помощью команды cat
Команда man (сокр. от «manual») — отображает справочные страницы, которые являются руководством пользователя, встроенным по умолчанию во многие дистрибутивы Linux и большинство систем Unix. Например, команда man bash отобразит руководство пользователя, а команда man ls отобразит справку по команде ls .

Отображение справочной информации с помощью команды man
Редактор nano
nano — это маленький, простой, консольный текстовый редактор *nix-подобных операционных систем, впервые увидевший свет в далеком 1999 году. Для запуска редактора достаточно ввести в терминале всего одну команду — nano . Если же нужно отредактировать какой-то конкретный файл, то применяется команда nanо / . Отличительной чертой данного редактора является то, что он управляется сочетаниями клавиш. Например, для сохранения текущего документа применяется сочетание Ctrl+O, для вызова меню поиска — Ctrl+W, для выхода из редактора — Ctrl+X, а для получения всего списка доступных сочетаний клавиш — Ctrl+G.
Гайд по созданию bash-скриптов
Наш шелл, это не только промежуточное звено между пользователем и системой, но еще и мощный язык программирования. Программы, написанные на языке шелла, называются shell-скриптами (или shell-сценариями) и имеют соответствующее расширение файлов — .sh. Сам язык содержит полный набор утилит и команд, доступных в *nix-системах, а также циклы, условные операторы, объявление переменных и пр. Такие скрипты будут очень полезными там, где не требуется использование полноценных языков программирования, например, в задачах администрирования операционной системы.
Создание bash-скрипта
Чтобы создать новый файл bash-скрипта, откройте в любом редакторе текстовый файл и сохраните его с расширением .sh. Все дальнейшие эксперименты я будут проводить в Debian Linux, с применением текстового редактора nano.
Давайте создадим новый файл ravesli.sh:
diego@debian:~$ touch ravesli.sh
diego@debian:~$ ls -l
-rw-r—r— 1 diego diego 0 мар 9 14:59 ravesli.sh
diego@debian:~$
Чтобы выполнить файл bash-скрипта, нужно изменить права доступа к файлу и сделать его исполняемым. Разрешение, как вы наверняка помните из предыдущих уроков, изменяется командой chmod +x :
diego@debian:~$ chmod +x ravesli.sh
diego@debian:~$ ls -l
итого 40
drwxr-xr-x 2 diego diego 4096 фев 27 00:23 build-untitled-Desktop-Debug
-rw x r- x r- x 1 diego diego 0 мар 9 14:59 ravesli.sh
Выполнение bash-скрипта
Файл bash-скрипта может быть запущен двумя способами:
Способ №1: bash . Чтобы выполнить скрипт, просто напишите в терминале команду bash , а затем (через пробел) имя файла и нажмите Enter.
Способ №2: ./ . Чтобы выполнить скрипт введите команду ./ и нажмите Enter.
Команда echo
Команда echo — это самая фундаментальная и базовая команда в bash-скриптах. Её основное предназначение заключается в выводе любой информации на экран. Давайте откроем c помощью nano (или любого другого текстового редактора) файл ravesli.sh и попробуем применить команду echo для вывода некоторого текста в терминале.