В большинстве дистрибутивов Linux по умолчанию установлена командная оболочка Bash. Отметим, что между всеми командными оболочками, соответствующими стандарту POSIX Unix-подобных операционных систем, разница небольшая.
Bash запускается в текстовом режиме или приложении «Терминал» и работает интерактивно. Это значит, что он ожидает ввод пользователя, далее интерпретирует введенную строку как команду, которую надо выполнить. Команды бывают разными: запуск программы, операции с файлами, выполнение скрипта на языке самого Bash и др.
Unix разрабатывалась как многопользовательская операционная система, доступ к которой пользователи осуществляли через терминалы. Например, в здании был один мощный компьютер, а в рабочих помещениях специалистов располагались терминалы – точки доступа к ресурсам общей машины.
В связи с распространением персональных компьютеров, начавшимся в 80-х годах, многопользовательские ОС оказались не востребованными массовым потребителем. Однако для серверов они стали хорошим выбором.
Linux: что такое BASH скрипты. Примеры.
Представьте, что подключаетесь по протоколу SSH к веб-серверу, на котором размещаете файлы сайта. Работая в ОС GNU/Linux и запустив программу «Терминал», вы даете Bash’у команду на подключение к удаленной машине под конкретным именем пользователя. Сервер отвечает вам и требует ввести пароль этого пользователя. Все потому, что пользоваться данным компьютером-сервером может далеко не один человек.
На локальном компьютере в текстовом режиме Linux (если вы нажмете, например, Ctrl + Alt + F2) эмулируется удаленный доступ к машине через терминал. Здесь Bash первым делом предлагает вам ввести логин, после чего – пароль. При вводе пароля на экране ничего не отображается. Так сделано специально, чтобы нельзя было подсмотреть даже количество вводимых символов.
Если введенная пара логин/пароль соответствуют какому-либо ранее зарегистрированному в системе пользователю, то вы увидите приглашение командной строки Bash’а на ввод команды. В случае ошибки потребуется заново вводить логин/пароль.
В графическом режиме приложение «Терминал» автоматически «берет» данные запустившего его пользователя и передает Bash’у. Таким образом, вы уже оказываетесь представленными системе и первое, что видите, – приглашение командной строки.
На скриншоте pl – имя пользователя, comp – имя компьютера. Символ тильды ~ в Linux-системах – это сокращенное обозначение домашнего каталога пользователя ( /home/user ). Именно эту директорию Bash делает текущей по умолчанию. Знак доллара $ обозначает, что мы работаем под непривилегированным пользователем. Если находиться в системе под администратором, вместо доллара будет знак решетки # .
После приглашения автоматически ставится пробел и ожидается ввод команды. На рисунке выше сначала был просто нажат Enter . Во второй строке была введена команда перехода в другую директорию. В третьей строке мы видим результат ее выполнения – текущим каталогом стал /opt , что отображено в приглашении.
Что такое bash
Существует множество команд, которые можно отдавать в 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. Курс
Источник: younglinux.info
Основы BASH для новичков
Вы когда-нибудь замечали, как супер-ботаник хакер в кино может легко проникнуть в самые безопасные банки и ограбить их все, просто набрав несколько команд, яростно уставившись в зеленый экран с черным фоном? Как человек последовательно получает доступ ко всем паролям и берет под контроль скрытые камеры, где бы он ни находился, всего несколькими нажатиями клавиш на клавиатуре. Ну, я не уверен, откуда у кинематографистов это взялось, но, наверное, это их способ сказать нам, что командная строка — это мощный инструмент, и без всех этих хакеров и ACCESS GRANTED!! До смешного..
Часто новички настолько привыкли работать с графическим интерфейсом GUI, что склонны игнорировать возможности интерфейса командной строки (CLI). Мышь очень удобна, когда нужно скопировать в папку около ста тысяч файлов, но что, если переименовать все эти тысячи файлов или разделить их по расширениям? Так как графические интерфейсы не программируемы, то переименование или разделение их с помощью командной строки заняло бы целую вечность, однако, мы могли бы быстро добиться этого за несколько строк кода.
Unix shell является довольно мощным инструментом для разработчиков всех видов. Эта статья призвана дать краткое введение в самые основы, начиная с операционной системы UNIX.
UNIX
Большинство современных операционных систем, за исключением WINDOWS, построены на базе UNIX. Среди них много дистрибутивов Linux, macOS, iOS, Android и др. Достаточно одного взгляда на схему развития операционных систем, основанных на UNIX, чтобы подчеркнуть важность UNIX, и именно по этой причине она стала широко использоваться на производстве. На самом деле, бэк-энд многих вычислительных систем, включая такие промышленные гиганты, как Facebook и Google, в значительной степени используют UNIX.
Shell
Shell — это интерфейс командной строки для запуска программ на компьютере. Пользователь набирает в строке запроса кучу команд, оболочка запускает программы для пользователя, а затем выводит результат. Команды могут быть либо введены непосредственно пользователем, либо прочитаны из файла, называемого shell-скриптом или shell-программой.
Shell. Какие бывают
UNIX-система обычно предлагает различные типы оболочек shell. Некоторые из них наиболее распространены:
Однако в этой статье мы ограничимся оболочкой Bash. Тем не менее, вам рекомендуется прочитать и попробовать другие оболочки, особенно zsh, так как уже в версии MacOS под названием Catalina zsh заменил оболочку bash. Так что будет хорошей идеей познакомиться с ним сейчас.
Terminal
Терминал — это программа, которая используется для взаимодействия с оболочкой. Это просто интерфейс к оболочке и к другим программам командной строки, которые запускаются внутри нее. Это похоже на то, как веб-браузер является интерфейсом для веб-сайтов. Вот как выглядит типичный терминал в Mac:
У Mac и Linux есть соответствующие версии терминала. Windows также имеет встроенную командную оболочку, но она основана на командной строке MS-DOS, а не на UNIX. Так что давайте посмотрим, как мы можем установить шелл и программу терминала в операционной системе Windows, которая работает так же, как и в системах Mac и Linux.
Установка терминала в WINDOWS
- Подсистема Windows для Linux (WSL)
Это новая система совместимости с Linux в Windows 10. WSL позволяет разработчикам запускать GNU/Linux окружение — включая большинство инструментов командной строки, утилит и приложений — прямо под Windows, без изменений, без дополнительных виртуальных машин. Подробнее о его установке и функциях вы можете прочитать здесь.
Git Bash — это то, что мы будем использовать в этой статье. Скачайте Git на компьютер с Windows отсюда и установите его со всеми настройками по умолчанию. В конце концов, вы получите окно терминала, вроде того, что показано ниже.
Изучение терминала
Если вам не нужна вся эта информация, вы можете использовать PS1 для настройки командной строки.
Теперь терминал будет показывать только $ в строке. Однако это только временно и после перезапуска терминал вернется к своим первоначальным настройкам.
Приступим
Чтобы немного развлечься, давайте начнем с нескольких простых команд:
- echo: выводит все, что вы набираете в командной строке шелла, аналогично Print на Python.
- date: отображает текущие время и дату.
- cal: отображает календарь на текущий месяц.
- clear: очистит окно терминала, также можно использовать сочетание клавиш Ctrl-L.
Основные команды Bash
Команда bash — наименьшая единица кода, которую bash может выполнить самостоятельно. Эти команды говорят bash, что нам нужно, чтобы он сделал. Обычно bash принимает от пользователя одну команду и возвращается к пользователю после ее выполнения.
Рабочая директория
pwd
pwd выводит содержимое рабочей директории и указывает на текущую рабочую директорию, то есть на директорию, которую оболочка просматривает в данный момент. Это также место по умолчанию, где команды оболочки будут искать файлы данных.
Директория похожа на папку, но в shell мы будем придерживаться наименования директория (каталог). Файловая иерархия UNIX имеет древовидную структуру. Чтобы добраться до определенной папки или файла, нам нужно пройти по определенным путям внутри этой древовидной структуры. Пути разделяют каждый узел вышеуказанной структуры с помощью символа слэш( / ).
Навигация по директориям
Для навигации и организации файлов используются команды ls и cd.
ls
ls обозначает список и показывает содержимое директории. ls обычно начинает с просмотра нашего домашнего каталога. Это означает, что если мы вызовем команду ls самостоятельно, то он всегда выведет содержимое текущего каталога, которым в моем случае является /Users/parul.
Параметры команды
Параметры и опции включают некоторые специальные функции при использовании команды ls.
- ls : для просмотра содержимого определенной папки.
- ls -a: Для перечисления всех скрытых файлов в папке
- ls -l: Выводитболее длинный и подробный список файлов. ls -l также может быть использован с именем каталога для перечисления файлов этого конкретного каталога.
- ls ~: tilde(~) — сокращение, обозначающее домашний каталог. Таким образом, независимо от того, в какой директории мы находимся, ls ~ всегда будет показывать содержимое домашнего каталога.
Немного о масках файлов
Оболочка также позволяет нам сопоставлять имена файлов с шаблонами, обозначенными звездочкой(*). Она служит подстановочным знаком для замены любого другого символа внутри заданного шаблона. Например, если мы введем *.txt, то это приведет к перечислению всех файлов с расширением .txt. Давайте попробуем перечислить все файлы с расширением .py в нашей папке Demo:
cd
cd, дословно, означает Change Directory (Изменить директорию) и изменяет активную директорию на указанный путь. После того, как мы используем cd в нужную директорию, можно воспользоваться командой ls, чтобы увидеть содержимое ее содержимое. Давайте посмотрим, как можно использовать эту команду:
- cd . : Чтобы вернуться в родительский каталог.
- cd : Для возврата в домашний каталог
Организация файлов
Существуют определенные команды, которые позволяют нам перемещать, удалять, создавать и копировать файлы из самой оболочки.
mkdir
mkdir означает Make directory и используется для создания новой директории или папки.
mv
mv означает Move и перемещает один или несколько файлов или каталогов из одного места в другое. Нам нужно указать, что мы хотим переместить, т.е. источник и куда мы хотим переместить их, т.е. место назначения.
Создадим в папке Demo новую директорию PythonFiles и переместим в нее все .py-файлы из папки Demo, используя две вышеприведенные команды.
touch
Команда touch используется для создания новых пустых файлов. Она также используется для изменения временных меток на существующих файлах и каталогах. Вот как мы можем создать файл под названием foo.txt в папке Demo.
rm
Команда rm означает «Удалить» и удаляет файлы или каталоги. По умолчанию она не удаляет каталоги, но если используется как rm -r * внутри каталога, то удаляется каждый каталог и файл внутри этого каталога.
Теперь удалим ранее созданный файл foo.txt.
rmdir
rmdir означает «удалить каталог» и используется для удаления пустых каталогов из файловой системы. Давайте удалим папку PythonFiles, которую мы создали некоторое время назад.
Обратите внимание, что ../ обозначает родительский каталог.
Просмотр файлов
Это еще один нюанс использования оболочки shell, который очень полезен. Существуют команды, которые помогают нам просматривать содержимое файла, чтобы мы могли ими манипулировать.
cat
Команда cat читает файл и выводит его содержимое. Она может читать любое количество файлов, как следует из ее наименования. В нашей папке Demo есть несколько текстовых файлов, давайте используем cat, чтобы просмотреть их содержимое.
Чтобы просмотреть более одного файла, укажите оба имени файлов после команды cat:
$ cat Names.txt fruits.txt
less
Команда cat отображает содержимое файла на экране. Это нормально, когда содержимого мало, но это становится проблемой, когда файл большой. Как видно из примера ниже, команда выводит все на терминал с очень высокой скоростью, и мы не можем разобраться во всем содержимом файла.
К счастью, есть команда под названием «Меньше», которая позволяет нам просматривать содержимое по одному экрану за раз.
$ less babynames.txt
Существуют определенные варианты с меньшим количеством используемых опций:
Пробел: перейти к следующему экрану
b: перейти к предыдущему экрану
/: для поиска конкретного слова
q: выйти
man
Команда man отображает страницы мануалов, которые являются руководством пользователя, встроенным по умолчанию во многие Linux и большинство Unix операционных систем.
man bash : Чтобы отобразить всю инструкцию bash
man , например man ls выдает информацию о команде ls.
Каналы и фильтры
Оператор pipe ‘|’ (вертикальная полоса) — это способ отправки вывода одной команды в качестве входной для другой команды.
Когда команда посылает свой выход в канал, принимающей стороной для этого выхода является другая команда, а не файл. На рисунке ниже показано, как команда wc подсчитывает содержимое файла, отображенного командой cat.
wc — это команда, которая принимает данные на входе и каким-то образом преобразует их вывод. Такие команды называются фильтрами и помещаются после Unix каналов.
Фильтры
Теперь давайте посмотрим на некоторые часто используемые команды фильтров. Мы будем работать с файлом под названием babynames.txt, который содержит около 1000 имен детей, и с файлом fruits.txt, который содержит имена нескольких фруктов.
- grep или глобальное регулярное выражение ищет строки с заданной строкой или ищет шаблон в заданном входном потоке и выводит результат. Следующая команда прочитает все файлы и выведет все строки, содержащие либо слово ‘Tom’.
Но получился большой список, и мы не можем разобраться во всех этих данных, только что выведенных в терминале. Давайте посмотрим, как мы можем использовать оператор pipe, чтобы разобраться в этом.
- Фильтр wc — это сокращение от количества слов (word count). Он читает список файлов и генерирует одну или несколько следующих статистик: количество новых строк, количество слов и количество байтов. Введем в wc вывод вышеприведенной команды grep для подсчета количества строк, содержащих слово ‘Tom’.
- Фильтр sort сортирует строки в алфавитном или цифровом порядке.
Команда cat сначала читает содержимое файла fruits.txt, а затем сортирует его.
- Фильтр uniq означает «уникальный» и дает нам количество уникальных строк во входном потоке.
Важно отметить, что uniq не может обнаружить дубликаты записей, если они не находятся рядом. Поэтому мы использовали сортировку файла перед использованием команды сортировки. В качестве альтернативы можно также использовать команду sort -u вместо uniq.
Каналы очень удобны для выполнения некоторых сложных задач, так как несколько команд могут быть объединены в один канал вывода.
Что изучить еще по теме?
Инструменты командной строки могут быть отличным дополнением к основному набору инструментов. Первоначально терминал может напугать новичков, но как только они его освоят, его реальные достоинства и преимущества могут быть реализованы. Данная статья призвана заставить начинающего пользователя начать изучение терминала только поверхностно. В сети доступно множество полезных ресурсов, позволяющих детально изучить и узнать об оболочке. Вот некоторые из рекомендуемых ресурсов (на английском):
- Командная строка Linux пятое интернет-издание William Shotts
- Bash — Руководство для начинающих
- The Bash Academy
Источник: omgubuntu.ru