Мне интересно, что означает точка sh, символически связанная с dash? Я понимаю, что dash должен быть быстрее, чем bash, но я не уверен, почему исходная оболочка sh отсутствует в sh.
Или, если что-нибудь, почему нет sh, связанного с bash?
Короткий ответ на вопрос «почему исходная оболочка sh отсутствует в sh» заключается в том, что нет оригинальной sh.
Ну, хорошо, есть: это оболочка Томпсона. В версии 1 были некоторые функции, которые мы знаем сегодня, в частности перенаправление и каналы (прочитайте статью Денниса Ритчи о ранней истории Unix). В более поздних версиях добавлены такие функции, как выполнение фона с помощью &, глобирование (реализовано с помощью внешней программы) и некоторые формы цитирования, но у него не было переменных или вложенных структур управления. Условные и циклы были предоставлены через внешние программы if (которые принимали одно условие и одну команду в качестве аргументов) и goto (которые работали, изменяя положение файла его родителя в файле сценария).
В 1979 году в оболочке Томпсона оболочка Томпсона была заменена оболочкой Борна /bin/sh. В первом выпуске уже была статья Денниса Ритчи о ранней истории Unix , которая сегодня присутствует в тире, а в последующих версиях появилось еще много. Несколько лет спустя на сцене появились более поздние версии с растущим набором функций; многие версии Unix установили его под именем ksh.
В 1992 году оболочка Bourne кодифицировала минимальный набор функций sh, который был в основном Bourne плюс несколько вещей. Любая система, которая называла себя «Unix», должна была реализовать по крайней мере эти функции. Коммерческие Unix-системы обычно использовали ksh как POSIX sh, но некоторые из них (например, OSF / 1) имели свои собственные.
Ни оболочка Bourne, ни оболочка Korn не были доступны с открытым исходным кодом до недавнего времени, поэтому, когда Linux мир начал формироваться в середине 1990-х годов, они не были доступны. /bin/sh должен был быть чем-то другим. Большинство дистрибутивов Linux пошло на OSF / 1 , оболочку из еще много , которая, как правило, находилась между Bourne и Korn с точки зрения возможностей сценариев и намного лучше, чем для интерактивных использования). Единственной жизнеспособной альтернативой была pdksh («общедоступная оболочка Korn»), свободная (теперь прекращенная, но живущая как mksh, которая является if ), но я не помню дистрибутив Linux используя pdksh как /bin/sh, я не знаю, почему, я думаю, потому что дистрибутивы Linux всегда были дистрибутивами GNU / Linux, в основном отправляющими версии GNU любого инструмента, для которого существовала версия GNU.
также несколько реализаций с открытым исходным кодом sh, называемых «ash», в первую очередь mksh , но они были очень неполными, лишены некоторых функций POSIX, которые люди хотели использовать. Программист, поддерживающий Debian, Герберт Сюй, расширил зонд, чтобы сделать его совместимым с POSIX. В конце концов его версия была переименована в тире, и был некоторый толчок, чтобы сделать ее /bin/sh в Debian вместо bash. Ubuntu начал работу до того, как Debian начал систематически рассматривать базисы (использование специфичных для bash функций в сценариях #!/bin/sh) в качестве ошибок. Оба переключались позже (Ubuntu 6.10, Debian только в 2009 году ( goto , но переключатель был сделан только после выпуска lenny, то есть в сжатии)).
Основной Герберт Сюй как /bin/sh заключается в том, что он значительно быстрее. Это было особенно важно для Ubuntu, который стремился сохранить время загрузки с самого начала. Dash также имеет тенденцию использовать меньше памяти, чем bash, что несколько важно для сценариев-оболочек, которые остаются вокруг, просто чтобы немного очистить, когда основная программа выходит. Еще одно преимущество тире состоит в том, что он основан только на libc (основной системной библиотеке), тогда как bash также использует библиотеки поддержки терминалов (он не может запускаться без них, даже для запуска скрипта); это означает, что у черточки больше шансов продолжить работу над сломанной системой.
В какой-то момент в 21 веке оболочка Korn открылась с открытым исходным кодом, и появились версии с открытым исходным кодом оболочки Bourne (старые версии , потому что развитие прекратилось несколько лет назад). Но тишина и баш были слишком прочно укоренились в мире Linux, чтобы они получили какое-либо признание, особенно оболочку Bourne, поскольку ее ценность сегодня является только исторической. Dash смещенный bash, потому что он имел явные преимущества, но ни один из других соперников не имеет решающего преимущества, как /bin/sh.
Короткий ответ на вопрос «почему исходная оболочка sh отсутствует в sh» заключается в том, что нет оригинальной sh.
Ну, хорошо, есть: это оболочка Томпсона. В версии 1 были некоторые функции, которые мы знаем сегодня, в частности перенаправление и каналы (прочитайте статью Денниса Ритчи о ранней истории Unix). В более поздних версиях добавлены такие функции, как выполнение фона с помощью &, глобирование (реализовано с помощью внешней программы) и некоторые формы цитирования, но у него не было переменных или вложенных структур управления. Условные и циклы были предоставлены через внешние программы if (которые принимали одно условие и одну команду в качестве аргументов) и goto (которые работали, изменяя положение файла его родителя в файле сценария).
В 1979 году в оболочке Томпсона оболочка Томпсона была заменена оболочкой Борна /bin/sh. В первом выпуске уже была статья Денниса Ритчи о ранней истории Unix , которая сегодня присутствует в тире, а в последующих версиях появилось еще много. Несколько лет спустя на сцене появились более поздние версии с растущим набором функций; многие версии Unix установили его под именем ksh.
В 1992 году оболочка Bourne кодифицировала минимальный набор функций sh, который был в основном Bourne плюс несколько вещей. Любая система, которая называла себя «Unix», должна была реализовать по крайней мере эти функции. Коммерческие Unix-системы обычно использовали ksh как POSIX sh, но некоторые из них (например, OSF / 1) имели свои собственные.
Ни оболочка Bourne, ни оболочка Korn не были доступны с открытым исходным кодом до недавнего времени, поэтому, когда Linux мир начал формироваться в середине 1990-х годов, они не были доступны. /bin/sh должен был быть чем-то другим. Большинство дистрибутивов Linux пошло на OSF / 1 , оболочку из еще много , которая, как правило, находилась между Bourne и Korn с точки зрения возможностей сценариев и намного лучше, чем для интерактивных использования). Единственной жизнеспособной альтернативой была pdksh («общедоступная оболочка Korn»), свободная (теперь прекращенная, но живущая как mksh, которая является if ), но я не помню дистрибутив Linux используя pdksh как /bin/sh, я не знаю, почему, я думаю, потому что дистрибутивы Linux всегда были дистрибутивами GNU / Linux, в основном отправляющими версии GNU любого инструмента, для которого существовала версия GNU.
также несколько реализаций с открытым исходным кодом sh, называемых «ash», в первую очередь mksh , но они были очень неполными, лишены некоторых функций POSIX, которые люди хотели использовать. Программист, поддерживающий Debian, Герберт Сюй, расширил зонд, чтобы сделать его совместимым с POSIX. В конце концов его версия была переименована в тире, и был некоторый толчок, чтобы сделать ее /bin/sh в Debian вместо bash. Ubuntu начал работу до того, как Debian начал систематически рассматривать базисы (использование специфичных для bash функций в сценариях #!/bin/sh) в качестве ошибок. Оба переключались позже (Ubuntu 6.10, Debian только в 2009 году ( goto , но переключатель был сделан только после выпуска lenny, то есть в сжатии)).
Основной Герберт Сюй как /bin/sh заключается в том, что он значительно быстрее. Это было особенно важно для Ubuntu, который стремился сохранить время загрузки с самого начала. Dash также имеет тенденцию использовать меньше памяти, чем bash, что несколько важно для сценариев-оболочек, которые остаются вокруг, просто чтобы немного очистить, когда основная программа выходит. Еще одно преимущество тире состоит в том, что он основан только на libc (основной системной библиотеке), тогда как bash также использует библиотеки поддержки терминалов (он не может запускаться без них, даже для запуска скрипта); это означает, что у черточки больше шансов продолжить работу над сломанной системой.
В какой-то момент в 21 веке оболочка Korn открылась с открытым исходным кодом, и появились версии с открытым исходным кодом оболочки Bourne (старые версии , потому что развитие прекратилось несколько лет назад). Но тишина и баш были слишком прочно укоренились в мире Linux, чтобы они получили какое-либо признание, особенно оболочку Bourne, поскольку ее ценность сегодня является только исторической. Dash смещенный bash, потому что он имел явные преимущества, но ни один из других соперников не имеет решающего преимущества, как /bin/sh.
Короткий ответ на вопрос «почему исходная оболочка sh отсутствует в sh» заключается в том, что нет оригинальной sh.
Ну, хорошо, есть: это оболочка Томпсона. В версии 1 были некоторые функции, которые мы знаем сегодня, в частности перенаправление и каналы (прочитайте статью Денниса Ритчи о ранней истории Unix). В более поздних версиях добавлены такие функции, как выполнение фона с помощью &, глобирование (реализовано с помощью внешней программы) и некоторые формы цитирования, но у него не было переменных или вложенных структур управления. Условные и циклы были предоставлены через внешние программы if (которые принимали одно условие и одну команду в качестве аргументов) и goto (которые работали, изменяя положение файла его родителя в файле сценария).
В 1979 году в оболочке Томпсона оболочка Томпсона была заменена оболочкой Борна /bin/sh. В первом выпуске уже была статья Денниса Ритчи о ранней истории Unix , которая сегодня присутствует в тире, а в последующих версиях появилось еще много. Несколько лет спустя на сцене появились более поздние версии с растущим набором функций; многие версии Unix установили его под именем ksh.
В 1992 году оболочка Bourne кодифицировала минимальный набор функций sh, который был в основном Bourne плюс несколько вещей. Любая система, которая называла себя «Unix», должна была реализовать по крайней мере эти функции. Коммерческие Unix-системы обычно использовали ksh как POSIX sh, но некоторые из них (например, OSF / 1) имели свои собственные.
Ни оболочка Bourne, ни оболочка Korn не были доступны с открытым исходным кодом до недавнего времени, поэтому, когда Linux мир начал формироваться в середине 1990-х годов, они не были доступны. /bin/sh должен был быть чем-то другим. Большинство дистрибутивов Linux пошло на OSF / 1 , оболочку из еще много , которая, как правило, находилась между Bourne и Korn с точки зрения возможностей сценариев и намного лучше, чем для интерактивных использования). Единственной жизнеспособной альтернативой была pdksh («общедоступная оболочка Korn»), свободная (теперь прекращенная, но живущая как mksh, которая является if ), но я не помню дистрибутив Linux используя pdksh как /bin/sh, я не знаю, почему, я думаю, потому что дистрибутивы Linux всегда были дистрибутивами GNU / Linux, в основном отправляющими версии GNU любого инструмента, для которого существовала версия GNU.
также несколько реализаций с открытым исходным кодом sh, называемых «ash», в первую очередь mksh , но они были очень неполными, лишены некоторых функций POSIX, которые люди хотели использовать. Программист, поддерживающий Debian, Герберт Сюй, расширил зонд, чтобы сделать его совместимым с POSIX. В конце концов его версия была переименована в тире, и был некоторый толчок, чтобы сделать ее /bin/sh в Debian вместо bash. Ubuntu начал работу до того, как Debian начал систематически рассматривать базисы (использование специфичных для bash функций в сценариях #!/bin/sh) в качестве ошибок. Оба переключались позже (Ubuntu 6.10, Debian только в 2009 году ( goto , но переключатель был сделан только после выпуска lenny, то есть в сжатии)).
Основной Герберт Сюй как /bin/sh заключается в том, что он значительно быстрее. Это было особенно важно для Ubuntu, который стремился сохранить время загрузки с самого начала. Dash также имеет тенденцию использовать меньше памяти, чем bash, что несколько важно для сценариев-оболочек, которые остаются вокруг, просто чтобы немного очистить, когда основная программа выходит. Еще одно преимущество тире состоит в том, что он основан только на libc (основной системной библиотеке), тогда как bash также использует библиотеки поддержки терминалов (он не может запускаться без них, даже для запуска скрипта); это означает, что у черточки больше шансов продолжить работу над сломанной системой.
В какой-то момент в 21 веке оболочка Korn открылась с открытым исходным кодом, и появились версии с открытым исходным кодом оболочки Bourne (старые версии , потому что развитие прекратилось несколько лет назад). Но тишина и баш были слишком прочно укоренились в мире Linux, чтобы они получили какое-либо признание, особенно оболочку Bourne, поскольку ее ценность сегодня является только исторической. Dash смещенный bash, потому что он имел явные преимущества, но ни один из других соперников не имеет решающего преимущества, как /bin/sh.
Основными факторами являются скорость и соответствие POSIX (другими словами, переносимость). Помните, что /bin/sh предназначен для системных скриптов, которые могут появляться или не появляться из более старых версий Ubuntu и / или других систем.
Конечно, блестящие функции bash классны для пользователей, но когда дело доходит до запуска в среде, где вам нужно управлять несколькими разными серверами / системами - наличие POSIX-совместимой оболочки делает все разницы. Особенно, если вы новый системный администратор и унаследованная среда со многими скриптами.
Что касается того, почему оригинальная оболочка Bourne отсутствует, это просто - это запатентованный продукт, первоначально принадлежащий AT & amp; T Bell Labs.
Кроме того, на Ubuntu wiki есть явное объяснение:
Почему это было сделано? Основной причиной переключения оболочки по умолчанию была эффективность. bash - отличная полнофункциональная оболочка, подходящая для интерактивного использования; действительно, он по-прежнему является стандартной оболочкой входа в систему. Однако он довольно большой и медленный, чтобы запускаться и работать по сравнению с тире. Большое количество экземпляров оболочки запускается как часть процесса загрузки Ubuntu. Вместо того, чтобы изменять каждый из них индивидуально, чтобы работать явно под / bin / dash, это изменение потребовало бы значительного постоянного обслуживания и которое могло бы быть регрессным, если бы не уделялось пристального внимания, основная группа разработчиков Ubuntu считала, что лучше всего просто изменить оболочка по умолчанию. Улучшения скорости загрузки в Ubuntu 6.10 часто неправильно приписывались Upstart, который является прекрасной платформой для будущей разработки системы init, но в Ubuntu 6.10 в основном работает в режиме совместимости с системой V с небольшими поведенческими изменениями. Эти улучшения в основном были связаны с изменением / bin / sh.А вот записка о переносимости:
Почему было сделано это изменение? Основной причиной переключения оболочки по умолчанию была эффективность. bash - отличная полнофункциональная оболочка, подходящая для интерактивного использования; действительно, он по-прежнему является стандартной оболочкой входа в систему. Однако он довольно большой и медленный, чтобы запускаться и работать по сравнению с тире. Большое количество экземпляров оболочки запускается как часть процесса загрузки Ubuntu. Вместо того, чтобы изменять каждый из них индивидуально, чтобы работать явно под / bin / dash, это изменение потребовало бы значительного постоянного обслуживания и которое могло бы быть регрессным, если бы не уделялось пристального внимания, основная группа разработчиков Ubuntu считала, что лучше всего просто изменить оболочка по умолчанию. Улучшения скорости загрузки в Ubuntu 6.10 часто неправильно приписывались Upstart, который является прекрасной платформой для будущей разработки системы init, но в Ubuntu 6.10 в основном работает в режиме совместимости с системой V с небольшими поведенческими изменениями. Эти улучшения в основном были связаны с изменением /bin/sh.
В руководстве по политике Debian уже давно указано, что «сценарии оболочки, определяющие« / bin / sh »в качестве интерпретатора, должны использовать только POSIX функции"; на самом деле это требование существует уже задолго до начала проекта Ubuntu. Более того, любые сценарии оболочки, которые ожидали быть переносимыми в другие Unix-системы, такие как BSD или Solaris, уже выполнили это требование. Таким образом, мы полагали, что влияние этого изменения на совместимость было бы минимальным.
В дистрибутивах GNU / Linux «original /bin/sh» на самом деле Bash.
GNU хотел, чтобы оболочка Bourne была под GPL, поэтому они выбрали Bash для своих /bin/sh вместо Bourne, который не был лицензирован GPL. Современные дистрибутивы Linux унаследовали это решение до такой степени, что он стал стандартом defacto для /bin/sh как Bash. Оригинальная оболочка Bourne («sh») использовалась в других Unix-Unix, даже в то время как Solaris 10, но она никогда не была оплотом в дистрибутивах Linux.
Переключение /bin/sh с bash на dash было решением Debian (унаследовано Ubuntu), мотивированным в значительной степени скоростью - оно произошло в то время, когда они приложили огромные усилия для повышения скорости загрузки и значительной части времени загрузки процессора в то время, когда выполнялись сценарии запуска. [ ! d2]
Bash по-прежнему используется как интерактивная / интерактивная оболочка по умолчанию для пользователей, но Dash - это тот, который находится в /bin/sh и тот, который выполняется для системных сценариев, таких как сценарии инициализации.
[d4 ] Dash очень быстрый, но также очень близко совместим с POSIX - стандартом, который тесно связан с оболочкой Bourne. Так что, переключившись с Bash на Dash, мы возвращаемся к оболочке, более близкой к Bourne./bin/sh связан с /bin/dash, поскольку я считаю, что это соображения совместимости. Многие сценарии просто начинаются с
#!/bin/sh
, поэтому, перейдя на dash и не создавая символическую ссылку, многие скрипты не будут работать должным образом (или вообще), если /bin/sh не существуют.
Изменение было сделано с bash до dash, потому что согласно https://wiki.ubuntu.com/DashAsBinSh:
Основная причина переключения стандартная оболочка была эффективной. bash - отличная полнофункциональная оболочка, подходящая для интерактивного использования; действительно, он по-прежнему является стандартной оболочкой входа в систему. Однако он довольно большой и медленный, чтобы запускаться и работать по сравнению с тире. Большое количество экземпляров оболочки запускается как часть процесса загрузки Ubuntu. Вместо того, чтобы изменять каждый из них индивидуально, чтобы работать явно под / bin / dash, это изменение потребовало бы значительного постоянного обслуживания и которое могло бы быть регрессным, если бы не уделялось пристального внимания, основная группа разработчиков Ubuntu считала, что лучше всего просто изменить оболочка по умолчанию.sh не связан с bash, потому что
Основной причиной переключения оболочки по умолчанию была эффективность. bash - отличная полнофункциональная оболочка, подходящая для интерактивного использования; действительно, он по-прежнему является стандартной оболочкой входа в систему. Однако он довольно большой и медленный, чтобы запускаться и работать по сравнению с тире. Большое количество экземпляров оболочки запускается как часть процесса загрузки Ubuntu. Вместо того, чтобы изменять каждый из них индивидуально, чтобы работать явно под / bin / dash, это изменение потребовало бы значительного постоянного обслуживания и которое могло бы быть регрессным, если бы не уделялось пристального внимания, основная группа разработчиков Ubuntu считала, что лучше всего просто изменить оболочка по умолчанию.
В руководстве по политике Debian давно указано, что «сценарии оболочки, определяющие« / bin / sh »в качестве интерпретатора, должны использовать только функции POSIX«
проблемы более распространены, и вы хотите изменить системную оболочку по умолчанию, а затем вы можете указать системе управления пакетами прекратить установку тире как / bin / sh:sudo dpkg-reconfigure dash
Если вы хотите использовать bash как /bin/sh:
Если проблемы более распространены и вы хотите изменить системную оболочку по умолчанию, то вы можете проинструктировать систему управления пакетами, чтобы остановить установку тире как / bin / sh :
/bin/sh связан с /bin/dash, поскольку я считаю, что это соображения совместимости. Многие сценарии просто начинаются с
#!/bin/sh
, поэтому, перейдя на dash и не создавая символическую ссылку, многие скрипты не будут работать должным образом (или вообще), если /bin/sh не существуют.
Изменение было сделано с bash до dash, потому что согласно https://wiki.ubuntu.com/DashAsBinSh:
Основная причина переключения стандартная оболочка была эффективной. bash - отличная полнофункциональная оболочка, подходящая для интерактивного использования; действительно, он по-прежнему является стандартной оболочкой входа в систему. Однако он довольно большой и медленный, чтобы запускаться и работать по сравнению с тире. Большое количество экземпляров оболочки запускается как часть процесса загрузки Ubuntu. Вместо того, чтобы изменять каждый из них индивидуально, чтобы работать явно под / bin / dash, это изменение потребовало бы значительного постоянного обслуживания и которое могло бы быть регрессным, если бы не уделялось пристального внимания, основная группа разработчиков Ubuntu считала, что лучше всего просто изменить оболочка по умолчанию.sh не связан с bash, потому что
Основной причиной переключения оболочки по умолчанию была эффективность. bash - отличная полнофункциональная оболочка, подходящая для интерактивного использования; действительно, он по-прежнему является стандартной оболочкой входа в систему. Однако он довольно большой и медленный, чтобы запускаться и работать по сравнению с тире. Большое количество экземпляров оболочки запускается как часть процесса загрузки Ubuntu. Вместо того, чтобы изменять каждый из них индивидуально, чтобы работать явно под / bin / dash, это изменение потребовало бы значительного постоянного обслуживания и которое могло бы быть регрессным, если бы не уделялось пристального внимания, основная группа разработчиков Ubuntu считала, что лучше всего просто изменить оболочка по умолчанию.
В руководстве по политике Debian давно указано, что «сценарии оболочки, определяющие« / bin / sh »в качестве интерпретатора, должны использовать только функции POSIX«
проблемы более распространены, и вы хотите изменить системную оболочку по умолчанию, а затем вы можете указать системе управления пакетами прекратить установку тире как / bin / sh:sudo dpkg-reconfigure dash
Если вы хотите использовать bash как /bin/sh:
Если проблемы более распространены и вы хотите изменить системную оболочку по умолчанию, то вы можете проинструктировать систему управления пакетами, чтобы остановить установку тире как / bin / sh :
Основными факторами являются скорость и соответствие POSIX (другими словами, переносимость). Помните, что /bin/sh предназначен для системных скриптов, которые могут появляться или не появляться из более старых версий Ubuntu и / или других систем.
Конечно, блестящие функции bash классны для пользователей, но когда дело доходит до запуска в среде, где вам нужно управлять несколькими разными серверами / системами - наличие POSIX-совместимой оболочки делает все разницы. Особенно, если вы новый системный администратор и унаследованная среда со многими скриптами.
Что касается того, почему оригинальная оболочка Bourne отсутствует, это просто - это запатентованный продукт, первоначально принадлежащий AT & amp; T Bell Labs.
Кроме того, на Ubuntu wiki есть явное объяснение:
Почему это было сделано? Основной причиной переключения оболочки по умолчанию была эффективность. bash - отличная полнофункциональная оболочка, подходящая для интерактивного использования; действительно, он по-прежнему является стандартной оболочкой входа в систему. Однако он довольно большой и медленный, чтобы запускаться и работать по сравнению с тире. Большое количество экземпляров оболочки запускается как часть процесса загрузки Ubuntu. Вместо того, чтобы изменять каждый из них индивидуально, чтобы работать явно под / bin / dash, это изменение потребовало бы значительного постоянного обслуживания и которое могло бы быть регрессным, если бы не уделялось пристального внимания, основная группа разработчиков Ubuntu считала, что лучше всего просто изменить оболочка по умолчанию. Улучшения скорости загрузки в Ubuntu 6.10 часто неправильно приписывались Upstart, который является прекрасной платформой для будущей разработки системы init, но в Ubuntu 6.10 в основном работает в режиме совместимости с системой V с небольшими поведенческими изменениями. Эти улучшения в основном были связаны с изменением / bin / sh.А вот записка о переносимости:
Почему было сделано это изменение? Основной причиной переключения оболочки по умолчанию была эффективность. bash - отличная полнофункциональная оболочка, подходящая для интерактивного использования; действительно, он по-прежнему является стандартной оболочкой входа в систему. Однако он довольно большой и медленный, чтобы запускаться и работать по сравнению с тире. Большое количество экземпляров оболочки запускается как часть процесса загрузки Ubuntu. Вместо того, чтобы изменять каждый из них индивидуально, чтобы работать явно под / bin / dash, это изменение потребовало бы значительного постоянного обслуживания и которое могло бы быть регрессным, если бы не уделялось пристального внимания, основная группа разработчиков Ubuntu считала, что лучше всего просто изменить оболочка по умолчанию. Улучшения скорости загрузки в Ubuntu 6.10 часто неправильно приписывались Upstart, который является прекрасной платформой для будущей разработки системы init, но в Ubuntu 6.10 в основном работает в режиме совместимости с системой V с небольшими поведенческими изменениями. Эти улучшения в основном были связаны с изменением /bin/sh.
В руководстве по политике Debian уже давно указано, что «сценарии оболочки, определяющие« / bin / sh »в качестве интерпретатора, должны использовать только POSIX функции"; на самом деле это требование существует уже задолго до начала проекта Ubuntu. Более того, любые сценарии оболочки, которые ожидали быть переносимыми в другие Unix-системы, такие как BSD или Solaris, уже выполнили это требование. Таким образом, мы полагали, что влияние этого изменения на совместимость было бы минимальным.
В дистрибутивах GNU / Linux «original /bin/sh» на самом деле Bash.
GNU хотел, чтобы оболочка Bourne была под GPL, поэтому они выбрали Bash для своих /bin/sh вместо Bourne, который не был лицензирован GPL. Современные дистрибутивы Linux унаследовали это решение до такой степени, что он стал стандартом defacto для /bin/sh как Bash. Оригинальная оболочка Bourne («sh») использовалась в других Unix-Unix, даже в то время как Solaris 10, но она никогда не была оплотом в дистрибутивах Linux.
Переключение /bin/sh с bash на dash было решением Debian (унаследовано Ubuntu), мотивированным в значительной степени скоростью - оно произошло в то время, когда они приложили огромные усилия для повышения скорости загрузки и значительной части времени загрузки процессора в то время, когда выполнялись сценарии запуска. [ ! d2]
Bash по-прежнему используется как интерактивная / интерактивная оболочка по умолчанию для пользователей, но Dash - это тот, который находится в /bin/sh и тот, который выполняется для системных сценариев, таких как сценарии инициализации.
Dash очень быстрый, но также очень близко совместим с POSIX - стандартом, который тесно связан с оболочкой Bourne. Так что, переключившись с Bash на Dash, мы возвращаемся к оболочке, более близкой к Bourne.
/bin/sh связан с /bin/dash, поскольку я считаю, что это соображения совместимости. Многие сценарии просто начинаются с
#!/bin/sh
, поэтому, перейдя на dash и не создавая символическую ссылку, многие скрипты не будут работать должным образом (или вообще), если /bin/sh не существуют.
Изменение было сделано с bash до dash, потому что согласно https://wiki.ubuntu.com/DashAsBinSh:
Основная причина переключения стандартная оболочка была эффективной. bash - отличная полнофункциональная оболочка, подходящая для интерактивного использования; действительно, он по-прежнему является стандартной оболочкой входа в систему. Однако он довольно большой и медленный, чтобы запускаться и работать по сравнению с тире. Большое количество экземпляров оболочки запускается как часть процесса загрузки Ubuntu. Вместо того, чтобы изменять каждый из них индивидуально, чтобы работать явно под / bin / dash, это изменение потребовало бы значительного постоянного обслуживания и которое могло бы быть регрессным, если бы не уделялось пристального внимания, основная группа разработчиков Ubuntu считала, что лучше всего просто изменить оболочка по умолчанию.sh не связан с bash, потому что
Основной причиной переключения оболочки по умолчанию была эффективность. bash - отличная полнофункциональная оболочка, подходящая для интерактивного использования; действительно, он по-прежнему является стандартной оболочкой входа в систему. Однако он довольно большой и медленный, чтобы запускаться и работать по сравнению с тире. Большое количество экземпляров оболочки запускается как часть процесса загрузки Ubuntu. Вместо того, чтобы изменять каждый из них индивидуально, чтобы работать явно под / bin / dash, это изменение потребовало бы значительного постоянного обслуживания и которое могло бы быть регрессным, если бы не уделялось пристального внимания, основная группа разработчиков Ubuntu считала, что лучше всего просто изменить оболочка по умолчанию.
В руководстве по политике Debian давно указано, что «сценарии оболочки, определяющие« / bin / sh »в качестве интерпретатора, должны использовать только функции POSIX«
проблемы более распространены, и вы хотите изменить системную оболочку по умолчанию, а затем вы можете указать системе управления пакетами прекратить установку тире как / bin / sh:sudo dpkg-reconfigure dash
Если вы хотите использовать bash как /bin/sh:
Если проблемы более распространены и вы хотите изменить системную оболочку по умолчанию, то вы можете проинструктировать систему управления пакетами, чтобы остановить установку тире как / bin / sh :
Основными факторами являются скорость и соответствие POSIX (другими словами, переносимость). Помните, что /bin/sh предназначен для системных скриптов, которые могут появляться или не появляться из более старых версий Ubuntu и / или других систем.
Конечно, блестящие функции bash классны для пользователей, но когда дело доходит до запуска в среде, где вам нужно управлять несколькими разными серверами / системами - наличие POSIX-совместимой оболочки делает все разницы. Особенно, если вы новый системный администратор и унаследованная среда со многими скриптами.
Что касается того, почему оригинальная оболочка Bourne отсутствует, это просто - это запатентованный продукт, первоначально принадлежащий AT & amp; T Bell Labs.
Кроме того, на Ubuntu wiki есть явное объяснение:
Почему это было сделано? Основной причиной переключения оболочки по умолчанию была эффективность. bash - отличная полнофункциональная оболочка, подходящая для интерактивного использования; действительно, он по-прежнему является стандартной оболочкой входа в систему. Однако он довольно большой и медленный, чтобы запускаться и работать по сравнению с тире. Большое количество экземпляров оболочки запускается как часть процесса загрузки Ubuntu. Вместо того, чтобы изменять каждый из них индивидуально, чтобы работать явно под / bin / dash, это изменение потребовало бы значительного постоянного обслуживания и которое могло бы быть регрессным, если бы не уделялось пристального внимания, основная группа разработчиков Ubuntu считала, что лучше всего просто изменить оболочка по умолчанию. Улучшения скорости загрузки в Ubuntu 6.10 часто неправильно приписывались Upstart, который является прекрасной платформой для будущей разработки системы init, но в Ubuntu 6.10 в основном работает в режиме совместимости с системой V с небольшими поведенческими изменениями. Эти улучшения в основном были связаны с изменением / bin / sh.А вот записка о переносимости:
Почему было сделано это изменение? Основной причиной переключения оболочки по умолчанию была эффективность. bash - отличная полнофункциональная оболочка, подходящая для интерактивного использования; действительно, он по-прежнему является стандартной оболочкой входа в систему. Однако он довольно большой и медленный, чтобы запускаться и работать по сравнению с тире. Большое количество экземпляров оболочки запускается как часть процесса загрузки Ubuntu. Вместо того, чтобы изменять каждый из них индивидуально, чтобы работать явно под / bin / dash, это изменение потребовало бы значительного постоянного обслуживания и которое могло бы быть регрессным, если бы не уделялось пристального внимания, основная группа разработчиков Ubuntu считала, что лучше всего просто изменить оболочка по умолчанию. Улучшения скорости загрузки в Ubuntu 6.10 часто неправильно приписывались Upstart, который является прекрасной платформой для будущей разработки системы init, но в Ubuntu 6.10 в основном работает в режиме совместимости с системой V с небольшими поведенческими изменениями. Эти улучшения в основном были связаны с изменением /bin/sh.
В руководстве по политике Debian уже давно указано, что «сценарии оболочки, определяющие« / bin / sh »в качестве интерпретатора, должны использовать только POSIX функции"; на самом деле это требование существует уже задолго до начала проекта Ubuntu. Более того, любые сценарии оболочки, которые ожидали быть переносимыми в другие Unix-системы, такие как BSD или Solaris, уже выполнили это требование. Таким образом, мы полагали, что влияние этого изменения на совместимость было бы минимальным.
В дистрибутивах GNU / Linux «original /bin/sh» на самом деле Bash.
GNU хотел, чтобы оболочка Bourne была под GPL, поэтому они выбрали Bash для своих /bin/sh вместо Bourne, который не был лицензирован GPL. Современные дистрибутивы Linux унаследовали это решение до такой степени, что он стал стандартом defacto для /bin/sh как Bash. Оригинальная оболочка Bourne («sh») использовалась в других Unix-Unix, даже в то время как Solaris 10, но она никогда не была оплотом в дистрибутивах Linux.
Переключение /bin/sh с bash на dash было решением Debian (унаследовано Ubuntu), мотивированным в значительной степени скоростью - оно произошло в то время, когда они приложили огромные усилия для повышения скорости загрузки и значительной части времени загрузки процессора в то время, когда выполнялись сценарии запуска. [ ! d2]
Bash по-прежнему используется как интерактивная / интерактивная оболочка по умолчанию для пользователей, но Dash - это тот, который находится в /bin/sh и тот, который выполняется для системных сценариев, таких как сценарии инициализации.
Dash очень быстрый, но также очень близко совместим с POSIX - стандартом, который тесно связан с оболочкой Bourne. Так что, переключившись с Bash на Dash, мы возвращаемся к оболочке, более близкой к Bourne.