Что среди Bash / Python / Perl / Ruby / Sed / Awk для системного администрирования, аксессуары для кодирования - PullRequest
6 голосов
/ 26 ноября 2009

Я знаю, вопрос очень субъективный. Но я не могу сформулировать вопрос гораздо лучше. Буду признателен за некоторые рекомендации.

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

Понятно, что когда один и тот же тип задач нужно выполнять многократно и когда скорость критична, я могу подумать о написании этого на C ++ / Java.

Но в большинстве случаев это какая-то операция по обработке текста или поиску файлов, которую я хочу выполнить только один раз, чтобы выполнить быструю проверку или выполнить предварительный анализ и т. Д. В таких случаях мне было бы лучше делать задачу вручную, а не писать на C ++ / Java. Но я наверняка смог бы сделать это за считанные секунды, если бы знал такой язык, как Bash / Python / Perl / Ruby / Sed / Awk.

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

Будет ли Perl хорошим выбором?
Это супер набор Sed / Awk, плюс он позволяет писать краткий код. Я могу сделать это с меньшим количеством строк кода. Он не читаемый и не легко обслуживаемый, но я никогда не хотел этих возможностей. Единственное, что меня беспокоит, это негативная публичность, которую Perl получил в последнее время, и он подвергся критике со стороны сообщества Ruby / Python. Кроме того, я не уверен, может ли он полностью заменить скрипты bash. Если нет, то является ли Perl + Bash хорошей комбинацией для подобных задач?

Ответы [ 7 ]

7 голосов
/ 26 ноября 2009

Я склонен много обрабатывать с ruby. Он обладает всеми функциями Perl, но я считаю, что он немного более читабелен. И perl, и ruby поддерживают параметры -n, -e и -p.

-e 'command'    one line of script. Several -e's allowed. Omit [programfile]
-n              assume 'while gets(); ... end' loop around your script
-p              assume loop like -n but print line also like sed

Например, в рубине

seq 1 4 | ruby -ne 'BEGIN{ $product = 1 }; $product *= $_.to_i; END { puts $product }'
24

Что очень похоже на Perl

seq 1 4 | perl -ne 'BEGIN{ $product = 1 }; $product *= $_; END { print $product }'
24

В Python то же самое будет выглядеть так:

seq 1 4 | python -c 'import sys; print reduce(lambda x,y : int(x)*int(y),  sys.stdin.read().splitlines(True))'
24

Хотя это можно сделать в bash / awk / sed, вы будете ограничены отсутствием более продвинутых функций.

4 голосов
/ 26 ноября 2009

Python более выразителен и удобочитаем, чем bash, но требует больше настроек: import os и так далее. Для простых задач bash работает быстрее - что для этого наиболее важно. И не стоит недооценивать силу перенаправления ввода / вывода в bash!

3 голосов
/ 26 ноября 2009

Я нахожу Python + Bash очень хорошим комбо.
Я обычно использую Python, потому что он очень удобочитаемый и обслуживаемый. И потому, что есть много онлайн-документации.

Кстати, я предлагаю вам прочитать http://www.ibm.com/developerworks/aix/library/au-python/

2 голосов
/ 26 ноября 2009

Я бы использовал Perl вместо комбинации bash / sed / awk. Почему?

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

Фактически, я бы порекомендовал любой язык сценариев для комбинации shell / awk / sed по тем же причинам. У меня нет проблем с sed / awk per se , но по мере того, как ваши требуемые решения становятся более сложными / длинными, я нахожу более мощные языки сценариев более масштабируемыми и (в некоторой степени) реорганизованными для -использование.

1 голос
/ 26 ноября 2009

За то время, что вам понадобилось написать эти несколько абзацев, вы могли бы уже выучить достаточно Python, чтобы сделать вашу жизнь значительно лучше .

Любой, кто уже знает C ++ или Java, может начать работать на Python примерно за 4 часа. Просто прочитайте учебник.

1 голос
/ 26 ноября 2009

С помощью сценариев оболочки все, что вам нужно знать, это немного bash / sh и много awk. Bash для вызова ваших команд и awk для обработки. Некоторые из перечисленных ниже инструментов Unix, несмотря на то, что многие люди их используют, не нужны, потому что awk может выполнять свои функции.

1) cut
2) sed
3) wc
4) (e)grep
5) cat
6) head 
7) etc..

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

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

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

0 голосов
/ 26 ноября 2009

Мой первый порт захода - это bash с sed для обеспечения обработки регулярных выражений. Вы можете многое сделать с помощью bash for loop, grep и некоторых регулярных выражений.

Стоит изучать регулярные выражения, если вы их еще не знаете. Редактор, который позволяет вам их использовать (например, vi), чрезвычайно полезен при манипулировании файлами (например, у вас есть набор данных, извлеченный из файла журнала, и вам нужно, например, превратить его в набор операторов SQL).

Если мне требуется больше нескольких минут, чтобы понять, как выполнить любую задачу анализа, которую я пытаюсь выполнить в bash / sed, я обычно заканчиваю тем, что вместо этого использую perl. Как предполагает ikkebr, python, вероятно, так же хорош, как (или лучше, чем) perl; Мне просто не повезло сначала изучать Perl, так что я гораздо лучше знаком с ним - если бы я начал заново, я бы вместо этого выучил Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...