Shell linux что это
Перейти к содержимому

Shell linux что это

  • автор:

Оболочка пользователя ( shell ) в Linux.

Операционные системы семейства Linux, как впрочем, и любые другие ОС, предполагают наличие интерфейса взаимодействия между компонентами компьютерной системы и конечным пользователем, т. е. наличие программного уровня, который обеспечивает ввод команд и параметров для получения желаемых результатов. Такой программный уровень получил название «оболочка» или, на английском языке — shell .

Что такое оболочка ?

Командная оболочка ( shell ) обеспечивает взаимотействие между пользователем и средой операционной системы Linux. Она является специализированным программным продуктом, который обеспечивает выполнение команд и получения результатов их выполнения, или, если совсем уж упрощенно, оболочка — это программа, которая предназначена для обеспечения выполнения других программ по желанию пользователя. Примером оболочки может быть, например, интерпретатор команд command.com операционной системы MS DOS, или оболочка bash операционных систем Unix / Linux.

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

— Интерпретация командной строки.

— Доступ к командам и результатам их выполнения.

— Поддержка переменных , специальных символов и зарезервированных слов.

— Обработка файлов, операций стандартного ввода и вывода.

— Реализация специального языка программирования оболочки.

Для операционных систем семейства Unix / Linux возможно использование нескольких различных оболочек, отличающихся свойствами и методами взаимодействия с системой. Наиболее распространенными оболочками являются

sh — оболочка Bourne , классическая оболочка для ОС Unix

bash оболочка Bourne Again (GNU Bourne-Again SHell). Пожалуй, наиболее распространенная на данный момент, оболочка в среде ОС семейства Linux.

ksh — оболочка Korn , разработанная в качестве развития оболочки Bourne с историей командной строки и возможностью редактирования команд.

csh — оболочка C , использующая синтаксис популярного языка программирования C

tcsh — версия оболочки C с интерактивным редактированием командной строки.

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

В процессе загрузки операционных систем семейства Linux, после загрузки ядра системы выполняется переход в интерактивный режим – режим взаимодействия пользователя и операционной системы. В ОС Linux, первым запускаемым в ходе загрузки процессом, является программа инициализации init , которая считывает содержимое конфигурационного файла /etc/inittab , определяет перечень и характеристики терминалов, имеющихся в системе, и вызывает программу интерактивного входа getty , отображающую приглашение для ввода имени пользователя. После ввода имени пользователя и пароля, программа getty вызывает программу login , которая проверяет достоверность учетной записи, выполняет переход в домашний каталог пользователя и передает управление программе начального запуска сеанса, в качестве которой обычно используется программа оболочки пользователя, конкретная разновидность которой определяется содержимым файла /etc/passwd для данной учетной записи. Например:

user1:x:508:511::/home/user1:/bin/sh
interbase:x:510:511::/home/interbase:/bin/csh
apb:x:511:513:apb:/home/apb:/bin/bash

Как видно из содержимого файла /etc/passwd, для пользователя user1 будет запущена оболочка sh ( оболочка Bourne ), для пользователя interbase — оболочка csh (оболочка C ) и для пользователя apb — оболочка bash ( Bourne Again ). После старта оболочки, на экран выводится приглашение к вводу команд ( обычно в виде знака доллара $ , если работа выполняется в контексте учетной записи обычного пользователя , или фунта # , если оболочка используется под учетной записью привилегированного пользователя ( root ).

При выходе из оболочки, ядро системы возвращает управление программе init , которая перезапускает процесс входа в систему и на терминале отображается приглашение к вводу имени пользователя. Выход из оболочки может быть выполнен одним из двух способов :

— посредством команды exit выполненной пользователем

— при получении процессом оболочки сигнала kill , отправленного ядром, например при перезагрузке системы.

Интерпретация командной строки.

Пользовательский ввод в ответ на приглашение оболочки обычно называют командной строкой или командой . Команда Linux — это строка символов из имени команды и аргументов, разделенных пробелами. Аргументы предоставляют команде дополнительные параметры, определяющие ее поведение. Наиболее часто в качестве аргументов используются опции и имена файлов и каталогов. Например, командная строка

ls -l file01 file02

содержит команду ls , опцию -l и два имени файлов file01 file02 .

При использовании нескольких опций, их можно объединять. Например, варианты следующих команд идентичны :

Команды, являющиеся частью оболочки, называются встроенными. К таким командам относятся, например, cd, if, case и т. п. Естественно, встроенные команды могут отличаться для различных вариантов оболочек. Кроме встроенных команд, возможно использование программных модулей, представляющих собой отдельные исполняемые файлы, или файлов скриптов или сценариев — обычных текстовых файлов, содержащих последовательно выполняемые строки с командами оболочки. Некоторые скрипты (сценарии) могут выполняться процессами Linux, как например, планировщиком задач cron . Планировщик задач, как правило, предназначен для автоматического выполнения задач администрирования системы по расписанию. Задачи cron представляют собой команды или скрипты и выполняются автоматически, без какого либо вмешательства человека и могут выполняться в контексте разных учетных записей пользователей. В случае, когда задача планировщика предполагает выполнение какого-либо скрипта, возникает проблема выбора оболочки, которая должна быть запущена в качестве дочернего процесса cron для обработки команд из файла скрипта — ведь оболочка может быть любой, а синтаксис скрипта, как правило, предполагает использование конкретной оболочки, под которую он написан. Для устранения данной проблемы, в ОС семейства Linux принято в первой строке скрипта указывать разновидность оболочки, необходимой для его выполнения, в виде:

#!/bin/bash — для оболочки bash

#!/bin/sh — для оболочки sh

Знак # является признаком комментария и следующие за ним символы не интерпретируются в качестве команды. Такой прием позволяет явно указать, какая оболочка должна быть использована для обработки последующего содержимого файла. Если же скрипт не содержит запись, явно определяющую требуемую оболочку, то будут использованы настройки из учетной записи, в контексте которой выполняется данный скрипт. В этом случае, возможна ситуация, когда скрипт, написанный для оболочки, например, tch будет передан для выполнения в оболочку bash , что приведет к невозможности его выполнения.

При выполнении команд или сценариев используются переменные окружения (на английском языке — environment , значения которых характеризуют программную среду, в которой происходит выполнение команд. Такие переменные могут содержать общие настройки системы, параметры графической или командной оболочки, пути исполняемых файлов и т.п. Значения переменных окружения устанавливаются на уровне системы (для всех пользователей) и на уровне конкретного пользователя. Для установки переменных окружения на уровне системы используется содержимое файлов:

/etc/profile — устанавливает переменные только для командных оболочек. Может запускать любые скрипты в оболочках, совместимых с Bourne shell.

/etc/bash.bashrc — устанавливает переменные только для интерактивных оболочек. Он также запускает bash-скрипты.

/etc/environment — используется модулем PAM-env. В этом файле можно указывать только пары имя=значение .

Каждый из этих файлов имеет свои особенности применения, поэтому следует внимательно выбирать тот, который подходит для ваших целей. Например, если нужно добавить пользовательский каталог ~/bin в переменную PATH для всех пользователей, поместите следующий код в один из системных файлов инициализации окружения (/etc/profile или /etc/bash.bashrc):

# Если идентификатор ID пользователя более или равно 1000, и существует каталог ~/bin, и он

#не был ранее добавлен в переменную PATH,

# выполнить экспорт ~/bin в переменную $PATH.

if [[ $UID -ge 1000 && -d $HOME/bin && -z $(echo $PATH | grep -o $HOME/bin)

Как правило, в операционных системах Linux, идентификатор пользователя менее 1000 или менее 500 используется для служебных учетных записей. В данном примере, переменная окружения будет установлена для всех локальных пользователей системы с идентификатором 1000 или более.

Если же нужно изменить среду окружения для конкретного пользователя, используется модификация содержимого среды окружения пользователя:

— ~/.bash_profile , ~/.bash_login и т.п. — файлы инициализации командной оболочки из домашнего каталога пользователя.

— ~/.profile — файл инициализации профиля пользователя. Используется многими оболочками для определения переменных среды.

~/.pam_environment — пользовательский аналог файла /etc/environment, который используется модулем PAM-env.

Например, чтобы добавить каталог пользователя ~/bin в пути поиска исполняемых файлов, заданных переменной PATH , можно например, в файл ~/.profile поместить строку:

Чтобы установить переменные окружения для графических приложений, используется содержимое файлов настройки графической среды пользователей ~/.xinitrc

Гораздо чаще значения переменных окружения задаются для текущего сеанса пользователя. Например, для добавления пользовательского каталога ~/bin в пути поиска исполняемых файлов:

Новое значение переменной PATH будет действовать только до завершения текущего сеанса пользователя.

Для просмотра значения переменной можно использовать команду echo $переменная , например:

В настоящее время, самой распространенной оболочкой, как уже упоминалось выше, является bash . Вызвано это, в первую очередь тем, что оболочка bash является sh — совместимой командной оболочкой, в которую добавлены полезные возможности из оболочек Korn shell ( ksh ) и C shell ( csh ). Оболочка bash может без какой-либо модификации выполнять большинство скриптов, написанных под язык программирования оболочки sh и в максимальной степени пытается приблизиться к стандарту POSIX , что привело к появлению множества улучшений, причем как для программирования, так и использования в интерактивном режиме. В современной реализации bash имеется режим редактирования командной строки, неограниченный размер истории команд, средства управление заданиями, возможность использования псевдонимов, обширный перечень встроенных команд, функции командной оболочки и т.п. В целом, bash в наибольшей степени соответствует потребностям среднестатистического пользователя, что и сделало ее наиболее используемой в среде Linux.

При запуске bash без параметров командной строки, оболочка запускается в интерактивном режиме, отображая на экране приглашение к вводу команд. Интерактивная оболочка обычно читает данные из терминала пользователя и пишет данные в этот же терминал, стандартным устройством ввода является клавиатура, а стандартным устройством вывода – дисплей. Пользователь вводит команды на клавиатуре, а результат их выполнения отображается на дисплее.

Command-line shell (Русский)

Состояние перевода: На этой странице представлен перевод статьи Command-line shell. Дата последней синхронизации: 15 октября 2023. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Кома́ндная оболо́чка Unix (англ. Unix shell, часто просто «шелл» или «sh») — командный интерпретатор, используемый в операционных системах семейства Unix, в котором пользователь может либо давать команды операционной системе по отдельности, либо запускать скрипты, состоящие из списка команд. В первую очередь, под shell понимаются POSIX-совместимые оболочки, восходящие к Bourne shell (шелл Борна), появившемуся в Unix Version 7.

Список оболочек

Оболочки, более или менее совместимые с POSIX, перечислены в разделе #POSIX-совместимые, а оболочки с другим синтаксисом — в разделе #Альтернативные оболочки.

POSIX-совместимые

На эти оболочки может вести символическая ссылка /usr/bin/sh . Когда Bash, mksh AUR и zsh запускаются через исполняемый файл с именем sh , они автоматически становятся более совместимыми с POSIX.

  • Bash — Bash расширяет оболочку Bourne shell, добавляя историю и автодополнение, индексированные и ассоциативные массивы, целочисленную арифметику, подстановку процессов, here strings, регулярные выражения и расширение скобок.
  • Dash — Потомок NetBSD-версии Almquist SHell (ash). Быстрая POSIX-совместимая оболочка, которая стремится быть настолько маленькой, насколько это возможно.
  • Korn shell (ksh) — Язык KornShell представляет собой полный, мощный язык программирования высокого уровня для написания приложений, зачастую легче и быстрее, чем на других языках высокого уровня. Это делает его особенно подходящим для прототипирования. ksh сочетает в себе лучшие черты оболочки Bourne и C, плюс множество самостоятельных возможностей. Таким образом Ksh может сделать многое, чтобы повысить продуктивность и качество вашей работы при взаимодействии с системой и в программировании. Программы на ksh легче писать, они более кратки и читабельны, чем программы, написанные на языке более низкого уровня, таком как C.
  • nsh — Командная оболочка, похожая на fish, но POSIX-совместимая.
  • Oil Shell (OSH) — Bash-совместимая оболочка командной строки UNIX. OSH может быть запущена на большинстве UNIX-подобных операционных систем, в том числе GNU/Linux. Она написана на языке Python (v2.7), но поставляется в виде нативного исполняемого файла. Диалект Bash, распознаваемый OSH, называется языком OSH.
  • Yash — Yet another shell, POSIX-совместимая оболочка командной строки, написанная на языке C99 (ISO/IEC 9899:1999). Yash стремится стать самой POSIX-совместимой оболочкой в мире, поддерживая при этом функции для интерактивного использования и для написания скриптов.
  • Zsh — Оболочка, предназначенная для интерактивного использования, хотя это также мощный скриптовый язык. Многие из полезных особенностей Bash, ksh и tcsh были включены в Zsh; были добавлены многие оригинальные черты. Во введении перечислены некоторые из уникальных особенностей Zsh.

Совет: Скрипты POSIX и Bash можно проверить на наличие ошибок с помощью shellcheck .

Альтернативные оболочки

  • C shell (tcsh) — Командный интерпретатор, используемый как интерактивная оболочка входа в систему и командный процессор скриптов. Он имеет редактор командной строки, программируемое автодополнение слов, проверку орфографии, механизм истории, управление заданиями и C-подобный синтаксис.
  • Closh — Bash-подобная командная оболочка на Clojure.
  • Elvish — Современная и выразительная оболочка, которая может переносить внутренние структурированные значения через конвейеры. Эта возможность позволяет избежать большого количества сложного кода для обработки текста. Это выразительный язык программирования с такими возможностями, как исключения, пространства имён и анонимные функции. Также есть мощный readline, который проверяет синтаксис при наборе текста, и подсветка синтаксиса по умолчанию.
  • fish — Умная и удобная командная оболочка. Fish делает полноцветную подсветку синтаксиса командной строки, а также подсветку и автодополнение команд и их аргументов, существующих файлов и истории. Поддерживается функция завершения по мере ввода для истории и команд. Fish способен анализировать man-страницы системы для определения допустимых аргументов команд, что позволяет ему подсвечивать и дополнять команды. Лёгкий просмотр последних команд может быть сделан с помощью Alt+Up . Демон Fish (fishd) облегчает синхронизацию истории всех экземпляров fish, а также универсальных и постоянных переменных окружения. Кроме того, fish имеет простой синтаксис программирования и поток управления (подобно ruby). Для получения дополнительной информации смотрите руководство.
  • ion — Современная системная оболочка с простым, но мощным синтаксисом. Она полностью написана на Rust, что значительно повышает общее качество и безопасность оболочки, устраняя возможность появления уязвимостей вроде ShellShock и упрощая разработку. Она также обеспечивает уровень производительности, превосходящий Dash, при использовании возможностей Ion. Хотя он разрабатывается наряду с RedoxOS и в первую очередь для неё, он вполне пригоден и для других *nix-платформ. Для получения более подробной информации смотрите руководство.
  • Murex — Командная оболочка с расширенными возможностями и улучшенным пользовательским интерфейсом.
  • Nash — Системная оболочка, созданная на основе plan9 rc, которая позволяет легко создавать надёжные и безопасные скрипты, используя преимущества пространств имён операционных систем (в Linux и plan9) идиоматичным способом.
  • nushell — Nu черпает вдохновение в функциональных языках программирования и современных инструментах командной строки. Вместо того, чтобы рассматривать файлы и сервисы как необработанные потоки текста, Nu рассматривает каждый ввод как нечто, имеющее структуру.
  • Oh — Unix-оболочка, написанная на Go. Это оболочка в духе Unix, но отличается в деталях. Oh расширяет возможности языка программирования оболочки без ущерба интерактивных функций оболочки.
  • PowerShell — Объектно-ориентированный язык программирования и интерактивная оболочка командной строки, изначально написанная для Windows. Позже PowerShell был открыт и портирован на macOS и Linux.
  • rc — Командный интерпретатор для Plan 9, который предоставляет возможности, похожие на Bourne shell, с небольшими дополнениями и менее своеобразным синтаксисом.
  • xonsh — Оболочка на Python с дополнительными примитивами, к которым вы привыкли из Bash и IPython.

Выбор оболочки по умолчанию

После установки какой-либо из перечисленных выше оболочек вы можете запустить эту оболочку внутри вашей текущей оболочки, просто запустив её исполняемый файл. Если вы хотите всегда пользоваться только что поставленной оболочкой, для этого нужно изменить оболочку, используемую по умолчанию.

Посмотрите все установленные оболочки:

$ chsh -l

И выберите одну из них в качестве оболочки по умолчанию для вашего пользователя:

$ chsh -s полный-путь-до-оболочки 

Если вы используете systemd-homed, выполните:

$ homectl update --shell=полный-путь-до-оболочки пользователь 

Где полный-путь-до-оболочки — это путь, который вывела команда chsh -l .

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

Совет: chsh берёт информацию об оболочках из файла /etc/shells . Если свежеустановленная оболочка не появилась в списке, вы можете добавить её вручную в этот файл.

Удаление оболочки

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

В качестве альтернативы измените базу данных пользователей.

Сделайте это для каждого пользователя, у которого удаляемая оболочка используется в качестве оболочки входа (не забудьте проверить пользователя root). После завершения пакет можно удалить.

Оболочка входа

Оболочка входа (login shell) — это режим запуска оболочки, в котором она читает файлы, предназначенные для однократной инициализации, такие как общесистемный /etc/profile или пользовательский ~/.profile или другие специфические для оболочки файлы. Эти файлы задают начальное окружение, которое наследуется всеми другими процессами, запущенными из оболочки (в том числе другими оболочками, не связанными со входом в систему, или графическими приложениями). Следовательно, они читаются только один раз в начале сеанса, то есть, например, когда пользователь входит в консоль или через SSH, меняет пользователя с помощью sudo или su с параметром —login , или когда пользователь вручную запускает оболочку входа (например, командой bash —login ).

Обзор различных файлов инициализации смотрите в разделе #Файлы настроек и по ссылкам в нём. Для получения дополнительной информации об оболочке входа смотрите также Difference between Login Shell and Non-Login Shell? и Why a «login» shell over a «non-login» shell? на Stack Exchange.

Файлы настроек

Чтобы сделать автозапуск программ в консоли или при входе в систему, можно использовать файлы/каталоги, которые оболочка выполняет при запуске. Смотрите документацию к вашей оболочке или соответствующую статью в ArchWiki: например, Bash (Русский)#Файлы настроек или Zsh (Русский)#Файлы запуска/завершения.

/etc/profile

При входе в систему все Bourne-совместимые оболочки выполняют source файла /etc/profile , который, в свою очередь, выполняет source всех читабельных файлов *.sh в каталоге /etc/profile.d/ : в этих скриптах не требуется указывать директиву интерпретатора (шебанг) и их не нужно делать исполняемыми. Они используются для настройки окружения и определения параметров, специфичных для приложений.

Стандартизация

Можно заставить файлы настроек (некоторых) оболочек следовать одному и тому же соглашению об именовании, а также поддерживать некоторые общие настройки между оболочками.

Ввод и вывод

    При перенаправлении вывода в файл важно иметь в виду, что файл очищается (truncate) перед выполнением команды. Если вы попытаетесь сделать что-то подобное:

$ команда файл > файл

Смотрите также

  • Evolution of shells in Linux on the IBM developerWorks
  • terminal.sexy — Конструктор цветовых схем терминала
  • Hyperpolyglot — Сравнение синтаксиса разных оболочек
  • UNIX Power Tools — General command-line tool usage
  • commandlinefu.com — Command-line snippets sharing
  • List of applications#Terminal emulators [ссылка недействительна: раздел не найден]
  • Command-line shells (Русский)
  • Lists of software (Русский)

Что такое bash / shell

И то, и другое — интерпретаторы командной строки в линуксе. То есть если вы откроете командную строку и введете любую команду, да хоть:

cd /home

То именно интерпретатор ее расшифрует и скажет компьютеру «он хочет перейти в директорию /home». Компьютер ведь не понимает команды на русском / английском языке. Ему нужны байтики. Этим и занимается интерпретатор — переводом с «нашего» на «компьютерный» язык.

Так что «cd /home» — это shell-команда! Или bash. Смотря какой интерпретатор установлен в вашей системе. В каждой операционной системе установлен интерпретатор по умолчанию. У них есть какие-то различия, но есть и набор базовых команд, которые понимают все: cd, mv, cp, ls… (в винде эти команды немного другие)

А что такое shell-скрипт тогда? Это просто текстовый документ, внутри которого написан набор команд! Это не обязательно должны быть «сложные» команды, которые делают что-то супер-навороченное. Это любые команды, которые вы выполняете в консоли.

Например, создадим скриптик, который создаст директорию и в ней файлик:

mkdir /home/test cd /home/test touch test.txt

Так, команды записали, осталось сохранить их в файлик. Скрипты хранят в файлах с расширением .sh, поэтому назовем файл first_script.sh. Но есть нюанс — линуксу плевать на ваше расширение файла. Его может вообще не быть, и все равно скрипт останется скриптом. Почему? Потому что у любого скрипта в первой строке должен содержаться путь к интерпретатору. Например:

#!/bin/bash или #!/bin/sh

Весь файл целиком:

#!/bin/bash mkdir /home/test cd /home/test touch test.txt

И даже если у такого файла не будет расширения вовсе, его можно будет запустить как скрипт:

sh first_script # Проверяем директорию /home — там появилась папка test с файлом test.txt внутри.

Расширение .sh ставится для понимания человеком. Зашел в директорию:

— Ага, что тут у нас? Файлы sh, скрипты какие-то лежат.

Скрипты могут быть простые, а могут быть сложные. Вот, например, в одном проекте мы вначале вручную обновляли тестовые платформы. Для обновления надо:

  1. Остановить сервис.
  2. Переподложить war-файл с приложением (лежат они в директории /opt)
  3. Запустить сервис

Сервиса два, допустим это test и cloud. Так что шагов уже 6.

Когда обновлять вручную надоело, мы положили на все линукс машины простой скриптик:

#!/bin/bash service test stop cp test.war /opt/jboss-test/bin service test start service cloud stop cp cloud.war /opt/jboss-cloud/bin service cloud start

Собираешь приложение, подкладываешь к скриптику и запускаешь 1 команду вместо 6. Удобно! Это называется «автоматизация рутины» =)

Другой пример с того же проекта — мы делали серверное приложение. И во время установки приложения на сервере linux нужно выполнить пункты по настройке самой системы. Например, увеличить параметр max_map_count — сколько максимум памяти может использовать процесс.

Приложение в пике работы требует много памяти. Если не настроить параметр, то «тяжеловесная» задача просто упадет с ошибкой «Не хватает памяти». И если мы видим такую ошибку, то в первую очередь идем проверять настройки системы.

Вообще, если вы отдаете установку приложения на откуп «чужим» админам, лучше потом проверять — а всё ли настроено верно? Конечно, обычно на production (машина, с которой работают реальные пользователи) настраивают всё внимательно, это на тестовых стендах могут что-то пропустить. Но лучше перебдеть!

Мы написали скрипт по проверке настройки окружения (символ «#» в начале строки означает, что это комментарий):

#!/bin/sh # # check sysctl # if [ -f /proc/sys/vm/max_map_count ] && [ $(cat /proc/sys/vm/max_map_count) -ge 16777216 ]; then echo "vm.max_map_count: ok" else echo "vm.max_map_count: failed" fi if [ -f /proc/sys/vm/overcommit_memory ] && [ $(cat /proc/sys/vm/overcommit_memory) -eq 2 ]; then echo "vm.overcommit_memory: ok" else echo "vm.overcommit_memory: failed" fi if [ -f /proc/sys/vm/overcommit_ratio ] && [ $(cat /proc/sys/vm/overcommit_ratio) -eq 100 ]; then echo "vm.overcommit_ratio: ok" else echo "vm.overcommit_ratio: failed" fi if [ -f /proc/sys/vm/swappiness ] && [ $(cat /proc/sys/vm/swappiness) -le 10 ]; then echo "vm.swappiness: ok" else echo "vm.swappiness: failed" fi 

В итоге админы настраивают окружение, а потом мы даем им скрипт, просим запустить его и прислать результаты. Я запустила скрипт на «голой» системе, где, разумеется, параметры настроены не были, и вот ответ:

Видим, что все проверки провалились, статус failed. Если и от админов приходит похожая картина, направляем их в документацию по настройке системы. Если к нам приходят с проблемой падения из-за нехватки памяти, снова просим выполнить скрипт. Так проще локализовать ошибку: это в приложении косяк, или окружение настроено плохо?

Просить других людей выполнить 10 команд не очень хорошо. Потому что часть команд может «потеряться» при выполнении — плохо скопировал, забыл выполнить проверку, которую дали сообщением позже. Гораздо проще сделать 1 скрипт и попросить выполнить именно его.

Когда надо писать скрипт?

  • Когда надо выполнить больше 3 команд за раз — проще выполнить одну, запустить скрипт.
  • Когда одну и ту же команду надо выполнять чаще 3 раз — лучше автоматизировать эту работу.

По сути своей, bash-скрипты — это та же автоматизация. А когда нужна автоматизация? Когда мы хотим избавиться от рутины, от постоянного выполнения одного и того же действия вручную. Повторяете одно и то же каждый день / неделю? Напишите скрипт. Даже если он на 2-3 строчки будет, это правда удобнее. Поверьте, сама делала небольшие скрипты =)

См также по bash:

Основы BASH. Часть 1 (Хабр) — цикл статей о том, как писать скрипты

См также другие статьи из цикла «Что такое. »:

Bash

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

«IT-специалист с нуля» наш лучший курс для старта в IT

Слово bash читается как «баш» и расшифровывается как Bourne-Again Shell. Стивен Борн — это имя и фамилия создателя оболочки, а sh (расшифровывается как «шелл») — ее предыдущая версия. Она использовалась в старых версиях операционных систем UNIX. На shell основаны практически все современные системы команд для работы с ОС.

Что делает bash

Оболочка принимает команды, которые пользователь ввел в командную строку, и интерпретирует их, то есть переводит в машинный код. Операционная система получает код в качестве инструкций и выполняет их.

Есть и другой способ использования: создание bash- или shell-скриптов, которые сохранены в файле. При каждом запуске файла будет выполняться набор указанных в нем команд.

Зачем использовать bash

Те же самые действия с файлами, папками и поиском можно выполнить с помощью графического интерфейса ОС. Но это дольше, неудобнее и сложнее. Программисты пользуются bash или shell, чтобы упростить и ускорить работу с системой.

Например, чтобы скопировать файл с помощью графического интерфейса, нужно открыть папку, где он расположен, кликнуть на файл правой кнопкой мыши, вызвать контекстное меню и выбрать «Скопировать». А если использовать командную строку и bash — потребуется ввести одну команду.

Команда cp означает «скопировать». — это путь к исходному файлу, например /home/file.txt. Это значит, что file.txt лежит в папке /home.

— путь к копии файла, которая создастся при выполнении команды. Например, /home/usr/file2.txt, где file2.txt — название копии. Она будет находиться в папке /usr внутри директории /home.

В некоторых системах графический интерфейс практически не используется. Все действия нужно выполнять с помощью командной строки. Здесь bash/shell незаменим.

Профессия / 8 месяцев
IT-специалист с нуля

Попробуйте 9 профессий за 2 месяца и выберите подходящую вам

vsrat_7 1 (1)

Как запустить bash

Оболочка-интерпретатор встроена в операционную систему и включается автоматически. Достаточно открыть окно терминала и начать вводить команды.

Чтобы запустить bash-скрипт, записанный в файл, нужно выдать права на его исполнение

Структура команды

Синтаксис команды выглядит так:

Флаги — это короткие входные параметры после команды, которые обычно выглядят как дефис и буква. Например, в записи ls -l -l — это флаг. Это нужно, чтобы команда выполнялась определенным образом, например по-особому выводила результат. Для большинства команд существуют десятки флагов.

Аргументы — это данные, которые передаются команде. Например, чтобы создать файл, нужно указать его имя — оно будет аргументом.

Флаги и аргументы нужны не всегда и не для всех команд.

Как устроена навигация в bash

Организация файлов и папок в Linux не такая, как в Windows. Путь к файлу отсчитывается не от названия диска, а от так называемого корневого каталога. Говоря языком «для начинающих», это начальная точка: считается, что все файлы и папки в системе расположены внутри «корня». Внутри этих папок могут лежать свои подкаталоги и файлы, но их расположение тоже отсчитывается относительно корневого каталога. Корневой каталог обозначается прямым слэшем /.

Чтобы указать на файл, лежащий в корневом каталоге, нужно написать /. Полный путь к любому файлу можно прописать так: ///…//.

Указывать весь путь необязательно. Можно прописать расположение файлов и папок относительно того места, где вы находитесь.

В системах Windows для указания пути используются обратные слэши \. В Linux это всегда прямые слэши /.

Курс для новичков «IT-специалист
с нуля» – разберемся, какая профессия вам подходит, и поможем вам ее освоить

Команды для навигации по системе

Постоянно прописывать путь целиком сложно и долго. Поэтому в bash есть система обозначений специально для навигации:

  • . — текущая папка;
  • .. — папка на уровень выше текущей;
  • ~ — домашний каталог. Его адрес по умолчанию зависит от дистрибутива операционной системы. Например, в Ubuntu это /home/;
  • — — предыдущий каталог.

Эти обозначения разрешается использовать вместо части пути или пути полностью. Например, можно написать ~/myfiles или ../docs/work.

Перемещаться по системе и ориентироваться в местоположении помогают команды:

  • pwd — показать полный путь к папке, где сейчас находится пользователь;
  • сd — перейти в другой каталог.

Команды для просмотра информации

В ходе работы бывает нужно просмотреть файл или мануал, проверить содержимое каталога. У bash для этого множество возможностей, но мы пока рассмотрим основные:

  • man — открыть мануал, руководство пользователя по какой-либо команде. Этот справочник очень полезен на начальных этапах изучения оболочки. Там приведены подробные описания команд, но на русский язык руководство не переведено;
  • 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;
  • mv — перемещает файл из пути1 в путь2;
  • rm — удаляет файл, rm -r — удаляет каталог;
  • wget — скачивает файл с сайта по ссылке и размещает в текущем каталоге;
  • echo — выводит аргумент в консоль.

Ввод и вывод

  • — ввод аргументов из файла;
  • >— вывод результата в файл;
  • >>— вывод результата в файл с дозаписью. Если в документе уже было содержимое, оно не перезапишется — новые данные добавятся в конец.

Можно запускать сразу несколько команд, чтобы они передавали друг другу данные, — это называется конвейером. В таком случае команды перечисляются через |.

Работа с git

Популярные дистрибутивы Linux (Ubuntu, Debian и прочие) поддерживают систему контроля версий git. Узнать о ней больше можно в этой статье. С системой можно работать из командной строки.

Скрипты на bash

Если пользователю нужно выполнить много шаблонных действий по очереди и этот алгоритм будет использоваться не один раз, можно создать скрипты. Команды записываются в файл и выполняются каждый раз, когда он исполняется. С помощью скриптов можно автоматизировать работу с системой и упростить процессы.

Чтобы запустить скрипт из консоли, нужно ввести команду bash или sh .

Начало скрипта. Чтобы система поняла, что файл — скрипт, его первая строка должна быть такой:

После ! пишется путь к интерпретатору bash, который по умолчанию выглядит так, как указано в коде. Если в системе другой путь, соответственно меняется и запись в начале скрипта. Узнать этот путь можно с помощью команды в терминале:

Расширение для файла скрипта традиционно указывается как .sh. На самом деле система сможет выполнить файл и с другим расширением и даже без него. В первую очередь .sh указывается для удобства пользователя, чтобы ему было легче понять, что файл — bash-скрипт.

Переменные. Скриптовый язык поддерживает переменные. У них нет типа, а объявляются они так:

Значение может быть числовым, текстовым или другим. Можно получить его извне с помощью специальных обозначений:

  • $0 — передает имя скрипта;
  • $1, $2 и так далее — аргументы, которые пользователь может передать в скрипт, когда открывает его.

Обратиться к созданной переменной внутри скрипта можно так: $. Она используется для вычислений, ввода-вывода и других действий.

Условия и циклы. Скрипт может выполнять действия, если соблюдается какое-либо условие. Для этого используется конструкция:

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

IT-специалист с нуля

Наш лучший курс для старта в IT. За 2 месяца вы пробуете себя в девяти разных профессиях: мобильной и веб-разработке, тестировании, аналитике и даже Data Science — выберите подходящую и сразу освойте ее.

картинка (75)

Статьи по теме:
Анализируем требования к опыту, образованию, возрасту и навыкам

Где искать модели для машинного обучения, готовиться к собеседованиям и осваивать новые технологии на практике

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *