Shell и bash в чем разница
Shell и bash
Что такое shell и bash. В чем их различие?
bash, sh, zsh, dash и т.д. и т.п. это все shell
Что такое shell и bash. В чем их различие?
Что такое car и bmw. В чем их различие?
но как и описали выше: от shell идёт много ответвлений, например, как описано выше.
Оболочка операционной системы (shell) — интерпретатор команд операционной системы, обеспечивающий интерфейс для взаимодействия пользователя с функциями системы.
В общем случае, различают оболочки с двумя типами интерфейса для взаимодействия с пользователем: текстовый пользовательский интерфейс (TUI) и графический пользовательский интерфейс (GUI).
Интерфейс командной строки (англ. Command line interface, CLI) — разновидность текстового интерфейса между человеком и компьютером, в котором инструкции компьютеру даются в основном путём ввода с клавиатуры текстовых строк (команд).
Для обеспечения интерфейса командной строки в операционных системах часто используются командные интерпретаторы, которые могут представлять собой самостоятельные языки программирования, с собственным синтаксисом и отличительными функциональными возможностями.
Командная оболочка UNIX (англ. Unix shell, часто просто «шелл» или «sh») — командный интерпретатор, используемый в операционных системах семейства UNIX, в котором пользователь может либо давать команды операционной системе по отдельности, либо запускать скрипты, состоящие из списка команд. В первую очередь, под shell понимаются POSIX-совместимые оболочки, восходящие к Bourne shell (шелл Борна), появившемуся в Unix Version 7.
Bash (от англ. Bourne again shell, каламбур «Born again» shell — «возрождённый» shell) — усовершенствованная и модернизированная вариация командной оболочки Bourne shell. Одна из наиболее популярных современных разновидностей командной оболочки UNIX. Особенно популярна в среде Linux, где она часто используется в качестве предустановленной командной оболочки.
Bash — это командный процессор, работающий, как правило, в интерактивном режиме в текстовом окне. Bash также может читать команды из файла, который называется скриптом (или сценарием). Как и все Unix-оболочки, он поддерживает автодополнение имён файлов и директорий, подстановку вывода результата команд, переменные, контроль за порядком выполнения, операторы ветвления и цикла. Ключевые слова, синтаксис и другие основные особенности языка были заимствованы из sh. Другие функции, например, история, были скопированы из csh и ksh. Bash в основном соответствует стандарту POSIX, но с рядом расширений.
Таким образом вопрос поставлен некорректно, т.к. bash является реализацией shell.
Что такое bash / shell
И то, и другое — интерпретаторы командной строки в линуксе. То есть если вы откроете командную строку и введете любую команду, да хоть:
То именно интерпретатор ее расшифрует и скажет компьютеру «он хочет перейти в директорию /home». Компьютер ведь не понимает команды на русском / английском языке. Ему нужны байтики. Этим и занимается интерпретатор — переводом с «нашего» на «компьютерный» язык.
Так что «cd /home» — это shell-команда! Или bash. Смотря какой интерпретатор установлен в вашей системе. В каждой операционной системе установлен интерпретатор по умолчанию. У них есть какие-то различия, но есть и набор базовых команд, которые понимают все: cd, mv, cp, ls… (в винде эти команды немного другие)
А что такое shell-скрипт тогда? Это просто текстовый документ, внутри которого написан набор команд! Это не обязательно должны быть «сложные» команды, которые делают что-то супер-навороченное. Это любые команды, которые вы выполняете в консоли.
Например, создадим скриптик, который создаст директорию и в ней файлик:
И даже если у такого файла не будет расширения вовсе, его можно будет запустить как скрипт:
Расширение .sh ставится для понимания человеком. Зашел в директорию:
— Ага, что тут у нас? Файлы sh, скрипты какие-то лежат.
Скрипты могут быть простые, а могут быть сложные. Вот, например, в одном проекте мы вначале вручную обновляли тестовые платформы. Для обновления надо:
Переподложить war-файл с приложением (лежат они в директории /opt)
Сервиса два, допустим это test и cloud. Так что шагов уже 6.
Когда обновлять вручную надоело, мы положили на все линукс машины простой скриптик:
Собираешь приложение, подкладываешь к скриптику и запускаешь 1 команду вместо 6. Удобно! Это называется «автоматизация рутины» =)
Другой пример с того же проекта — мы делали серверное приложение. И во время установки приложения на сервере linux нужно выполнить пункты по настройке самой системы. Например, увеличить параметр max_map_count — сколько максимум памяти может использовать процесс.
Приложение в пике работы требует много памяти. Если не настроить параметр, то «тяжеловесная» задача просто упадет с ошибкой «Не хватает памяти». И если мы видим такую ошибку, то в первую очередь идем проверять настройки системы.
Вообще, если вы отдаете установку приложения на откуп «чужим» админам, лучше потом проверять — а всё ли настроено верно? Конечно, обычно на production (машина, с которой работают реальные пользователи) настраивают всё внимательно, это на тестовых стендах могут что-то пропустить. Но лучше перебдеть!
Мы написали скрипт по проверке настройки окружения (символ «#» в начале строки означает, что это комментарий):
В итоге админы настраивают окружение, а потом мы даем им скрипт, просим запустить его и прислать результаты. Я запустила скрипт на «голой» системе, где, разумеется, параметры настроены не были, и вот ответ:
Видим, что все проверки провалились, статус failed. Если и от админов приходит похожая картина, направляем их в документацию по настройке системы. Если к нам приходят с проблемой падения из-за нехватки памяти, снова просим выполнить скрипт. Так проще локализовать ошибку: это в приложении косяк, или окружение настроено плохо?
Просить других людей выполнить 10 команд не очень хорошо. Потому что часть команд может «потеряться» при выполнении — плохо скопировал, забыл выполнить проверку, которую дали сообщением позже. Гораздо проще сделать 1 скрипт и попросить выполнить именно его.
Когда надо писать скрипт?
Когда надо выполнить больше 3 команд за раз — проще выполнить одну, запустить скрипт.
Когда одну и ту же команду надо выполнять чаще 3 раз — лучше автоматизировать эту работу.
По сути своей, bash-скрипты — это та же автоматизация. А когда нужна автоматизация? Когда мы хотим избавиться от рутины, от постоянного выполнения одного и того же действия вручную. Повторяете одно и то же каждый день / неделю? Напишите скрипт. Даже если он на 2-3 строчки будет, это правда удобнее. Поверьте, сама делала небольшие скрипты =)
См также по bash:
Основы BASH. Часть 1 (Хабр) — цикл статей о том, как писать скрипты
См также другие статьи из цикла «Что такое. »:
Bash vs shell
Уважаемые знатоки объясните новичку, чем отличается bash от shell`a просто не могу понять в чем между ними разница.
P.S В гугле не нарыл.
bash это bourne again shell.
Спасибо за ответ все понятно, но не могли бы вы привести пример отличия bash от sh. p.s Крохотный пример.
чтобы понять разницу тебе надо понять что такое командный интерпретатор
Спасибо за ответ все понятно, но не могли бы вы привести пример отличия bash от sh. p.s Крохотный пример.
а откуда пошла эта копипаста?
Предприимчивые молодые люди, стоит интересоваться этой темой. Вы молодые, здоровые, умные. Это то что надо. Это яхты и виллы. Сюда нужно вливаться незамедлительно. Серьезно, любой из вас будет счастлив от такого. Это лучше чем сидеть на жопе и создавать треды про ЕОТ. Я вполне понимаю что данным сообщением вызову дополнительный интерес, но хочу сразу предостеречь — самое опасное в жизни — прожить ее, не заметив, как она прошла, будучи серой мышью. Остальные просто не будут такими умными чтобы сделать все чисто.
супер классное оформление
ИМХО, какая-то вариация обращения жирика к бушу. На лурке было
Всем спасибо за ответы, понял в чем разница между bash и sh.
В чем разница между Bash и Shell?
Bash (bash) — одна из многих доступных (но наиболее часто используемых) оболочек Unix. … Сценарии оболочки — это сценарии в любой оболочке, а сценарии Bash — это сценарии специально для Bash. Однако на практике «сценарий оболочки» и «сценарий bash» часто используются взаимозаменяемо, если только рассматриваемая оболочка не является Bash.
Что такое bash и оболочка в Linux?
Bash — это оболочка или интерпретатор командного языка для операционной системы GNU. Название является аббревиатурой от «Bourne-Again SHell», каламбура Стивена Борна, автора прямого предка текущей оболочки sh Unix, появившейся в версии Unix седьмого издания Bell Labs Research.
Что такое баш?
Bash — это оболочка Unix и командный язык, написанный Брайаном Фоксом для проекта GNU в качестве бесплатной замены оболочки Bourne. Впервые выпущенный в 1989 году, он использовался в качестве оболочки входа по умолчанию для большинства дистрибутивов Linux. … Bash также может читать и выполнять команды из файла, называемого сценарием оболочки.
В чем разница между оболочкой и терминалом?
Shell — это программа, которая обрабатывает команды и возвращает вывод, как bash в Linux. Терминал — это программа, запускающая оболочку, в прошлом это было физическое устройство (раньше терминалы были мониторами с клавиатурой, они были телетайпами), а затем ее концепция была перенесена в программное обеспечение, такое как Gnome-Terminal.
Какая оболочка лучшая и почему это bash?
Он был разработан на основе исходной оболочки UNIX Bourne (также известной как sh) и был разработан для полной совместимости со старыми сценариями с добавлением нескольких улучшенных функций. Bash — очень надежный вариант оболочки, поскольку он используется в течение длительного времени и для него имеется обширная документация.
Для чего используется оболочка bash?
Bash (также известный как «Bourne Again SHell») является реализацией Shell и позволяет эффективно выполнять многие задачи. Например, вы можете использовать Bash для быстрого выполнения операций с несколькими файлами через командную строку.
Для чего нужен bash?
Bash невероятно полезен в системном администрировании, развертывании веб-приложений, обработке данных, автоматическом резервном копировании, даже в повседневном управлении повседневными делами, и это лишь некоторые из них.
Bash — это язык программирования?
Bash — мощный язык программирования, идеально подходящий для использования в командной строке и в сценариях оболочки. В этой серии из трех частей рассматривается использование Bash в качестве языка программирования интерфейса командной строки (CLI).
На чем написан bash?
CMD — это терминал?
Итак, cmd.exe не является эмулятором терминала, потому что это приложение Windows, работающее на машине Windows. Не нужно ничего подражать. Это оболочка, в зависимости от вашего определения оболочки. … cmd.exe — это консольная программа, а их очень много.
Терминал — это оболочка?
Оболочка — это пользовательский интерфейс для доступа к службам операционной системы. Чаще всего пользователь взаимодействует с оболочкой с помощью интерфейса командной строки (CLI). Терминал — это программа, которая открывает графическое окно и позволяет вам взаимодействовать с оболочкой.
Почему это называется оболочкой?
Он назван оболочкой, потому что это самый внешний уровень операционной системы. Оболочки командной строки требуют, чтобы пользователь был знаком с командами и их синтаксисом вызова, а также понимал концепции языка сценариев, специфичных для оболочки (например, bash).
Рыба лучше zsh?
На мой взгляд, Fish, или «Friendly Interactive Shell», является наиболее удобной и интерактивной оболочкой. Он гораздо более настраиваемый, чем Zsh и Bash. Он имеет массу интересных функций, таких как согласованный синтаксис, красивое завершение табуляции и подсветка синтаксиса, его легко подобрать и использовать, а также имеет отличную помощь во время выполнения.
Какая оболочка наиболее распространена и лучше всего подходит для использования?
Объяснение: Bash близок к POSIX-совместимой и, вероятно, является лучшей оболочкой для использования. Это наиболее распространенная оболочка, используемая в системах UNIX.
Какова одна из причин выбора оболочки, отличной от bash?
Следовательно, первая причина — расширить оболочку дополнительными функциями. Разные оболочки предпочитают фокусироваться на разных вещах. Например, Zsh фокусируется на расширенных интерактивных функциях, в то время как ksh93 (текущая «оригинальная» оболочка korn) фокусируется на мощных функциях программирования и производительности.
В чем разница между Bash и Sh?
Я вижу два типа используемого кода:
Я искал это онлайн, и мнения сильно различаются. Объяснения, которые я видел на большинстве веб-сайтов, говорят, что sh старше bash и разницы нет.
Кто-нибудь знает разницу между этими? Можете ли вы дать мне практический пример, когда использовать один над другим?
5 ответов 5
Bash имеет больше возможностей (ветвление, встроенные функции, массивы), что облегчает написание скрипта. Некоторые более поздние * nix’ы имеют /bin/sh как ссылку на /bin/bash
Для полного объяснения того, что вот учебник
Традиционно, /bin /sh был бы оригинальной оболочкой Bourne, которая не имеет истории или редактирования в командной строке, а также не контролирует работу.
В течение последних 15 лет в большинстве Unix-систем была установлена оболочка POSIX, или, по крайней мере, ksh или bash (которые очень похожи на POSIX), но все еще имеют более ограниченную оболочку в /bin /sh
В Linux команда sh почти всегда представляет собой ссылку на bash со всеми теми же функциями.
/bin/sh не является символической ссылкой или жесткой ссылкой в OS X, но он почти такого же размера, как /bin/bash:
Если bash вызывается с именем sh, он пытается максимально близко имитировать поведение при запуске исторических версий sh, при этом также соответствует стандарту POSIX.
В остальном мимикрирование снарядов Борна довольно ограничено. bash +B (Bourne) фактически отключил бы такие функции, как расширение скобок.
Если вы действительно хотите писать сценарии для (что-то вроде) оригинальных оболочек Борна, вы можете использовать #!/usr/bin/env bash +B вместо этого.
Я думаю, что проще написать сценарии для bash, чем избегать функций, которые не являются частью спецификаций POSIX или оболочек Bourne, или проверять все с помощью других оболочек.