Самый универсальный язык для Linux?

Мы пишем скрипты для систем Linux, были некоторые дебаты о том, что будет самым универсальным языком для использования на языке Linux. Bash, SH, Posix? Что?

25 голосов | спросил Ron Whites 26 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 26 Sep 2012 02:51:51 +0400 2012, 02:51:51

8 ответов


39

Есть две среды программирования, которые доступны в каждой операционной системе, подобной UNIX, которые являются Turing-complete и могут вызывать другие программы: awk и sh , семейство оболочек Bourne /POSIX. AWK ориентирован на обработку текста (он дополняет более специализированные утилиты), в то время как sh ориентирован на то, чтобы быть языком клей для объединения программ. Sh является универсальным скриптовым языком в Linux и в мире unix.

Стандарт POSIX определяет обязательные функции самого sh и связанные с ним утилиты. Большинство UNIX-подобных систем соответствуют POSIX 1003.1-2004 (aka Single Unix v3, также как и проблема с базовой базой для Open Group 6 ); последней версией этого стандарта является POSIX 1003.1-2008 (aka Single Unix v4, также как базовая спецификация Open Group Issue 7 ).

Каждая система Linux и Unix или Unix имеет оболочку типа Bourne на пути /bin/sh и любая не антикварная система имеет POSIX-совместимую оболочку (запрет случайной ошибки). Каждая современная unix-подобная система (включая Linux) поддерживает shebangs , поэтому она автоматически запускает скрипты в /bin/sh, если первая строка #!/bin/sh. Существуют системы POSIX, в которых sh находится в другом месте (обычно это уровни эмуляции на операционных системах, которые вы бы не считали действительно Unix-подобными ).

Встраиваемые системы Linux могут иметь усеченную систему BusyBox , которая не реализует все функции POSIX. BusyBox имеет большое количество вариантов времени компиляции для размещения небольших систем слежения, поэтому трудно понять, чего ожидать заранее, вы должны адаптировать свои сценарии к определенному устройству. BusyBox - это самая распространенная реализация sh и различных утилит для небольших площадок; другой, с которым вы можете столкнуться, - это чрезвычайно сокращенная оболочечная среда в Android (более поздние версии менее анемичны).

Не встроенные системы Linux почти всегда имеют тире или bash как /bin/sh. Dash - это небольшая и быстрая оболочка, которая реализует чуть больше, чем функции POSIX. Bash - большая оболочка с большим количеством функций.

Не встроенные системы Linux почти всегда имеют Bash, установленные как /bin/bash. Следовательно, для переносимости на не встроенных системах Linux вы можете предположить, что bash доступен. Среди полезных дополнительных возможностей bash - массивы, способность удобно обрабатывать файлы точек, переменную pipestatus, чтобы получить статус возврата всех команды в конвейере, дополнительные операторы сравнения для времени файла и (в последних версиях) соответствия регулярных выражений.

Одна из характеристик программирования оболочки заключается в том, что вы не просто используете программу sh, вы также используете номер утилиты . Большинство утилит для обработки файлов и обработки текста в Linux - это GNU coreutils (на встроенных системах , они обычно из BusyBox).

Если вам нужна переносимость за пределами Linux, лучше всего придерживаться POSIX. Другие варианты unix могут не иметь bash (bash является частью стандартной установки на OSX, но является дополнительным пакетом на * BSD и большинстве коммерческих сетей). Почти все версии unix, отличные от Linux и OSX (т. Е. BSD и коммерческие узлы), имеют некоторую версию оболочка Korn , не менее pdksh . Многие из удобных расширений bash относятся к ksh, поэтому полезно писать сценарии, которые могут выполняться под обоими, но обнаружение того, где bash или ksh находится в неизвестной системе, может быть немного больным.

Оболочка не может делать все. Если вам нужен более сложный язык, двумя более распространенными вариантами являются Perl и Python (все остальное далеко позади как язык сценариев unix). Perl - традиционный язык сценариев, а для некоторых ненастроенных Linux-систем его нет, но Python набирает силу (в частности, это был рекомендуемый язык сценариев для Ubuntu). В мире, отличном от Linux, Perl является частью базовой установки на OSX и OpenBSD; это необязательно, но очень часто устанавливается на FreeBSD и необязательно, но часто устанавливается на NetBSD.

ответил Gilles 26 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 26 Sep 2012 05:03:22 +0400 2012, 05:03:22
11

В режиме готовности:

  1. sh, но придерживайтесь указанных в POSIX объектов.
  2. bash, но не забудьте явно указать его в shebang, или вы можете вместо этого перейти в тире.
  3. Python. Почти каждый использует его.
  4. Perl. Но вы можете написать его.

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

ответил Ignacio Vazquez-Abrams 26 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 26 Sep 2012 03:02:42 +0400 2012, 03:02:42
4

Обычно я бы сказал sh .... но так как вы указали Linux, я скажу bash - это гарантировано для каждой системы Linux (ну, за исключением неясных педантично-крошечных, фетишизирующих минимализм :).

Если вам не нужно заботиться о переносимости не-linux (и если вам не нужно запускать на крошечных дистрибутивах или во встроенных Linux-устройствах, таких как маршрутизаторы с пластиковыми коробками), тогда вы можете также использовать существенные улучшения, которые он предлагает по сравнению с обычным sh. В противном случае используйте sh.

После bashsh ), следующим самым «универсальным» языком сценариев для Linux будет некоторый диалект awk - обычно либо mawk или gawk. Если вы придерживаетесь простого awk и избегаете gawkisms, ваш скрипт должен работать нормально почти в любой системе Linux (это может отсутствовать на крошечных дистрибутивах или встроенных устройствах). Большинство систем Linux будут иметь как mawk, так и gawk доступно, но на некоторых дистрибутивах (например, debian) mawk устанавливается по умолчанию, и вам нужно установить gawk самостоятельно, если вы этого хотите.

Далее будет perl. AFAIK, базовый язык perl устанавливается по умолчанию на всех распространенных дистрибутивах Linux, поэтому это делает его хорошим выбором. К счастью, версия для perl5 очень мала (хотя perl 5.12 или, может быть, она была 5.14, наконец-то удалось устранить некоторые неясные функции, которые были устаревшими в течение примерно 15 лет ... достаточное предупреждение не использовать их), поэтому если ваш стиль кодирования не является поистине странным, и вам нравится игнорировать более десятилетия предупреждения «не делай этого», ваши скрипты perl будут работать практически отлично. Язык является надежным и мощным и может делать все, что awk и sed может делать и многое другое. С небольшим усилием он может делать то, что обычно имеет значение sh (например, запуск внешних команд и использование /конвейер вывода). Стандартные библиотеки perl также довольно обширны, охватывая не только основы.

Единственный улов с perl заключается в том, что существует также огромная библиотека модулей CPAN, чтобы делать все, о чем вы можете думать (и многое другое, что может никогда не произойти с вами) - и не все из них будут доступны на всех система с perl. Они обычно очень высокого качества, поэтому легко привыкнуть к их использованию, но если вы их используете, вам нужно будет убедиться, что они установлены. Многие модули CPAN предварительно упакованы для Linux, а остальные легко устанавливаются с помощью инструмента cpan (или dh-make-perl на debian /ubuntu /etc для превращения модуля CPAN в пакет .deb)

Я бы хотел сказать python дальше, но я действительно не могу. В Python очень много нравится, но по умолчанию он не включен во многие Linux-системы, и, честно говоря, совместимость с версией (как для самого python, так и для его якобы «стандартных» libs) - это полный шквал. Некоторые дистрибутивы отлично справляются с сортировкой беспорядка, а некоторые нет. Никому не помогает тот факт, что python - это в основном язык, написанный программистами программистами (в отличие от системных администраторов), и они, похоже, не думают, что их код system будет установлен вообще важно ... их код действительно супер специальный , поэтому им не нужно заботиться о скучных вещах, таких как интеграция в существующие системы.

(Не поймите меня неправильно из моего сарказма здесь - мне очень нравится python как язык, я просто ненавижу тот факт, что управление версиями и зависимостями - это PITA. Это похоже на возвращение 20+ лет в эпоху ручного охота за неясными битами кода и патчей, чтобы получить что-то скомпилированноеи работает на вашем собственном * nix)

ответил cas 26 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 26 Sep 2012 13:50:43 +0400 2012, 13:50:43
1

Я предлагаю использовать ksh93 или даже POSIX-аромат, и вы всегда можете использовать bash /zsh для запуска.

И Debian-дистрибутив, использующий Debian, не gawk как awk по умолчанию. Так что да, избегайте добавления gawk, так как mawk быстрее.

ответил MeaCulpa 26 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 26 Sep 2012 09:23:07 +0400 2012, 09:23:07
0

Не баш. Напишите на близком к POSIX sh подобном тире или золе. Это будет самым универсальным. Я не думаю, что есть что-то еще, что является даже близким конкурентом. (И это мне кажется фактическим вопросом, а не «мнением», как жалуется один из комментаторов.)

Если вам нужно что-то более мощное, чем sh (например, если вы хотите создавать реальные ассоциативные массивы), используйте awk. (Избегайте расширений gawk. Существует много версий awk, но есть много общего ядра). Это должно быть доступно почти так же широко, как и sh.

ответил dubiousjim 26 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 26 Sep 2012 03:01:07 +0400 2012, 03:01:07
0

Я бы сказал, что доступность будет ранжироваться где-то в этом порядке:

  1. ш
  2. AWK
  3. Perl (я еще не видел ник без него, включая BSD)

Хотя Python звучит как хороший язык, я не использовал никаких ОС, которые поставлялись вместе с ним в базовой установке, хотя, видимо, Ubuntu, может быть?

ответил Earlz 26 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 26 Sep 2012 18:24:07 +0400 2012, 18:24:07
0

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

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

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

FTP-файлы взад и вперед; обрабатывать их; отправлять уведомления по электронной почте; и т. д.

В этом случае было бы лучше придерживаться оболочки (например, Bash) и использовать различные утилиты (например, ftp , cron и mail). Это типичный случай использования во многих крупных компаниях.

Быстрая обработка текста

Еще раз, оболочка. Утилиты, такие как grep, awk, ---- +: = 5 =: + ----, sed, а другие очень удобны в этот случай.

Build

В домене C /C ++ универсальный инструмент для этого - paste. Мир Java предпочитает Apache ANT.

Развертывание и дистанционное управление

Либо оболочка, либо Python. Например, make и scp, соответственно , было бы весьма полезно при копировании файла (ов) или синхронизации файлов.

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

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

ответил Barun 31 PM00000050000000331 2013, 17:02:03
-1

Perl не входит в состав FreeBSD, NetBSD или DragonflyBSD, извините. OpenBSD имеет Perl в базовой установке. OS X в настоящее время является сертифицированной UNIX и может рассматриваться как некоторый вариант BSD на каком-то уровне, и в ней есть Perl, Python и Ruby.

Многие проприетарные UNIXen не имеют Perl в своей базе, например Solaris, AFAIK ни HP-UX, ни IBM AIX тоже ...

ответил Marko V. 31 PM00000010000003931 2013, 13:27:39

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132