Какой язык для запуска в Linux? [закрыто]

Я собираюсь начать 4-летнюю степень по информационной безопасности в Пердью. Степень не требует каких-либо курсов программирования. Так что единственный раз, когда я смогу взять один из них, это случайный факультатив. Таким образом, большая часть моего обучения будет проводиться самостоятельно. В начале моего последнего года обучения в средней школе я решил полностью перейти на Linux. До сих пор я изучал некоторые вещи для Linux и безопасности. Тем не менее, я также считаю, что для меня будет важно также выучить несколько языков программирования.

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

С этим у меня есть несколько идей. Я думал начать с JavaScript, потому что он кроссплатформенный, и я видел, как это предлагалось раньше. Я также много слышал о Ruby или мог бы пойти по естественному пути Linux с C. В каком направлении мне идти?

19
задан 14 June 2011 в 21:24
12 ответов

Прежде всего: bash, наряду с общими утилитами командной строки. Bash пользовательский интерфейс по умолчанию к операционной системе, и много программ в системе Linux будет перенесено в сценарий оболочки на некотором уровне. Это может быть изворотливым, имеет некоторые особенности и часто кажется совершенно немым, но это - что-то, что необходимо будет иметь дело с, поэтому стать довольными им. Стандартные инструменты как grep, diff, head, tail, sort, uniq, и так далее, будет очень полезно не только со сценариями оболочки, но и с Вашей производительностью на командной строке.

Изучите по крайней мере некоторых c. Это - то, в чем записаны самые низкие уровни системы, и это даст Вам лучшее понимание системы в целом.

Выберите любой высокоуровневый язык, который Вы любите. Python, ruby, perl, java, безотносительно - пока Вы наслаждаетесь им. Это - то, где Вы действительно начинаете изучать, как "программировать", и отсюда на этом будет легче взять больше языков и продолжать учиться.

53
ответ дан 2 December 2019 в 20:12

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

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

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

В-третьих, жемчуг идет с почти бесконечным питанием и гибкостью, он - официальный дополнительный репозиторий, CPAN. Например, для следования за идеей записать защитное программное обеспечение скажите, что Вы хотите разработать своего рода пользовательский сканер сетевой безопасности. Вместо того, чтобы писать все, что самостоятельно, Вы могли запустить при помощи NMAP:: Сканер как механизм сканирования, и затем пишет Ваши собственные тонкие настройки и улучшения вдобавок ко всему

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

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

10
ответ дан 2 December 2019 в 20:12

Три языка будут содержать Вас в хорошем земельном участке. В порядке убывания важный (т.е. первое является самым важным):

  1. Псевдокод. Часто, реализация, с которой Вы работаете, будет амальгамой полдюжины языков и инструментов, только некоторые из которых Вы будете знать непосредственно. Если Вы знаете, какой шаблон реализуется, однако, можно выяснить то, что вводит, вручается части и что производит его, должен дать, протестировать его в исключении и выяснить, является ли это частью, которую это повреждает.
  2. C. Для лучше или для худшего, это - то, что выполняет (Linux) вселенную, и это высказывает Вам close-enough-to-the-ground мнение вещей, что можно понять то, что любой из высокоуровневых языков на самом деле делает (например, передача ссылкой PHP или модель потока Java).
  3. Примерно Что-либо еще кроме C++. Функциональный язык как SQL или, еще лучше, Haskell, или что-то не совсем как C-ey — если все остальное перестало работать, Java, может работать на это, но это является все еще очень процедурным — получают высокие оценки здесь; идея состоит в том, чтобы перенести Ваш мозг вокруг чего-то достаточно совершенно другого от того, что Вы сделали прежде, который Вы не можете не понять ограничения того, что Вы сделали прежде. С точки зрения чистой утилиты удар, вероятно, также принадлежит этого списка, но если у Вас не будет основания в чем-то еще, то Вы только закончите тем, что писали C с синтаксисом удара вместо того, чтобы действительно исследовать его питание.
6
ответ дан 2 December 2019 в 20:12

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

4
ответ дан 2 December 2019 в 20:12

Я собираюсь начать 4-летний градус информационной безопасности в Пердью. Градус не призывает ни к каким курсам программирования.

Я единственный один для размышления OMG!!!! в этой точке?

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

Я сказал бы так. Хотя Вы действительно не ожидаете становиться опытным программистом, Вам, вероятно, нужны навыки, требуемые моделировать / воссоздают нападения и понимают, как процесс программирования работает. Вам также будут нужны навыки для анализа данных и информации об извлечении из объемных источников (как журналы). JimB упомянул удар - и в то время как Вы будете несомненно использовать это - он только берет около нескольких часов для изучения существенных битов. Actualy единственное место, Вы, вероятно, будете, когда-либо видеть удар, находится в системах Linux - но другие оболочки очень похожи.

Я рекомендовал бы изучить awk и/или Perl для уплотнения данных. Не потрудитесь ни о каком требовании отмечать объектно-ориентированное поле - но я рекомендовал бы смотреть на непроцедурные языки также.

Изучение C также подвергнет Вас большой информации о том, как код превращается в исполняемую программу (компиляция является всего одним шагом в очень сложном процессе).

Очевидным выбором для кого-то заинтересованного разработкой Android / мобильной разработкой был бы Java - но Java пытается очень трудно изолировать разработчика от необходимости иметь дело с фактами работы и протоколов - ее мой опыт, который это - то, где Вы получаете проблемы безопасности с приложениями Java. т.е. это могло бы помочь Вам достигнуть своей конечной цели, и это будет выглядеть хорошим на Вашем CV, но не ожидает изучать Java для добавления знания безопасности очень.

4
ответ дан 2 December 2019 в 20:12

Мой совет:

  • bash (и его род), не языки программирования общего назначения. В то время как возможно выполнить некоторые сложные сценарии в bash это не лучший способ изучить программирование в целом. Это - самый естественный способ выполнить системные задачи администрирования, которые, прежде всего, вращаются вокруг выполнения других программ, обработки их файлов данных и каталогов и маршалинга ввода и вывода в и от них. Если bash молоток, зарезервируйте его для проблем, которые действительно похожи на гвозди. Обучение сделать что-либо нетривиальное в bash будет значительно легче, если Вы изучите некоторые очень небольшие подмножества sed и awk (так как обработка строк в bash в основном вдохновлен синтаксисом подобных операций на этих "небольших" языках).
  • Для программирования общей цели в соответствии с Linux Вы услышите много страстных аргументов. Два лучших соперника являются Perl и Python. Это оба языки сценариев очень высокого уровня, которые являются общей целью, которые выставляют достаточно низкоуровневой функциональности, чтобы сделать, выполняют почти любую операцию, это доступно для любого процесса пространства пользователя в Вашей системе, и с огромными наборами предзаписанных модулей и доступных библиотек.

Я действительно рекомендую, чтобы Вы прочитали вводный текст на C и провели некоторое время, работая strace и ltrace команды на некоторой простой утилите управляют как ls и mkdir и /bin/echo и т.д. (На самом деле в эти дни я предложил бы ltrace -S вместо strace но набеги в вывод от обеих команд и в ltrace вывод, как увеличено -S опция будет чрезвычайно образовательной).

C является основным языком программирования, на котором записаны ядро Linux и GNU libc. (Мелкие детали находятся в блоке). Почти все программы на Linux (или другое подобное UNIX) система связаны против библиотек C (libc). Основной Perl и интерпретаторы Python (и большинство других языков сценариев) также записаны в C. Эти программы (ядро, библиотеки общей системы и различные интерпретаторы языка сценариев) все записаны программистами C, их дизайн, и функции сильно под влиянием их конкретных реализаций. Таким образом более глубокое понимание любого из них в конечном счете влечет за собой понимание C. Вы не должны знать, что что-либо о C++, ни Java понимает программирование на этом уровне. (Это может каждый быть интересным и необходимым самостоятельно в зависимости от Вашего карьерного патча, но различия между C и C++ и Java являются в основном ортогональными к использованию C для большинства программ и утилит Вашей системы.

Так, если Вы соглашаетесь с моим помещением до сих пор, мы свели его к выбору между Perl и Python.

Вот то, где реальные войны пламени начинаются.

Мой совет состоит в том, чтобы сфокусироваться на Python (2.x) сначала. Python имеет относительно простой и непротиворечивый синтаксис. Можно изучить основы синтаксиса Python через несколько часов, и это - подавляющее большинство синтаксиса, с которым Вы будете когда-либо встречаться. Существует только несколько функций (понимания списка, выражения генератора, декораторы), которые являются морщинами к базовому синтаксису. Таким образом, большая часть Вашего усилия в изучении Python будет посвящена изучению обширных стандартных библиотек и попытке найти "лучший" способ использовать их (и выяснение, которые являются определенными наборами исключений, которые стоит обработать для создания программ устойчивыми), и, самое главное, в изучении базовых понятий.

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

Во-первых, поскольку Вы изучаете, как делают к вещи на очень высоком уровне в Python, Вы могли бы найти мысль о необходимости работать на более низком уровне, чтобы быть утомительными. Где я работаю, Perl является стандартом. Я моделирую свою работу в Python, где я знаю, что могу получить его работающий намного более быстро и надежно затем в Perl; затем я боюсь иметь необходимость пройти и портировать его на Perl для моих коллег. (Я был довольно хорош в Perl за годы до того, как я когда-либо использовал Python---, таким образом, это не вопрос простого знакомства).

Другой недостаток - то, что иногда трудно найти высший уровень способом выполнить данную задачу в Python. Например, для выборки веб-страницы Вы могли бы первоначально попытаться делать, она с низким уровнем снабжает сокетом..., который будет работать. Однако Вы копировали бы довольно мало кода, включая который можно уже найти в urllib и/или urllib2 модули. Самое то, что стандартные библиотеки, с 2.7.1, включают оба из них, высказывает мое мнение. Где возможный специалисты по обслуживанию Python расширили более старые модули и API прозрачно; однако существуют десятки случаев, где Python сохраняет два или три модуля, где прозрачное расширение не было возможно по некоторым причинам. (Для другого примера Вы могли посмотреть на опции для парсинга параметров командной строки: argparse, optparse, и getopt. Существует мало вреда записи Вашего использования программ getopt (самый старый из них). Для очень простых утилит с немногими опциями и твердым соглашением о вызовах (используемый только небольшой группой людей, например) затем нет ничего по сути неправильно с обходом законченного sys.argv самостоятельно. Однако обычно стоит прочитать документы тщательно и перейти по ссылкам в нижних частях более старых или более низких модулей уровня, которые описывают более новые или высокоуровневые доступные функции.

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

Встречный аргумент, для Perl, прост и практичен. Существует еще довольно много заданий там, которые будут звонить а именно, для навыков с Perl. Perl является мощным языком и имеет чрезвычайно обширные библиотеки. (Ядро Perl, это распределяется с большей частью системы Linux, является покрытиями меньший диапазон функциональности, чем стандартные библиотеки Python; предполагается, что Вы будете, установил значительное количество дополнительных пакетов от Вашего распределения или через CPAN---Всесторонняя Сеть Архива Perl). (В отличие от этого, существует меньше модулей Python и пакетов, которые я должен выбрать отдельно..., это доступно от PyPI---Индекс Пакета Python).

Так, если Вы изучите Perl, то у Вас будет участок для нахождения заданий, особенно задания системного администратора, в ближайшей перспективе. Однако синтаксис Perl находится... хорошо... в словах некоторых энтузиастов самих по себе... "патологически эклектичных!" Perl может быть чрезвычайно кратким, и его код заполнен довольно мало пунктуации. Те, кто любит его, будут утверждать бесконечно, что это "легко" и имеет смысл---и будет иметь бесконечные возможности сделать так на форумах, которые заполнены беспорядком о точно, как интерпретировался данный отрывок кода. Синтаксис и язык использовали в документации и теми, кто поддерживает его на общедоступных форумах, детальны до такой степени, когда, можно потратить значительное усилие изучить их.

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

Существует много других языков, которые Вы изучили бы, Java, Lisp и Схема, TCL, Scala, и так далее. Однако я предложил бы запуститься с того, который предлагает лучший баланс между утилитой и простотой.

2
ответ дан 2 December 2019 в 20:12

В мире Linux необходимо знать две основных вещи:

  1. Regular Expression. Это - необходимость. RegEx универсальный "язык", после того как Вы знаете, как использовать регулярное выражение, Ваша жизнь будет намного легче :-)
  2. "quick & dirty"очень распространено в мире Linux. Если можно было сделать задание, неважно, насколько ужасный решение, Вам сделали Ваше задание.

Так, если Вы хотите выучить язык на Linux, НЕОБХОДИМО выбрать a script language, как python, PHP, или даже bash scripting.

И, мой рекомендовать PHP. Это просто и ужасно. Это имеет подробное руководство онлайн. Это имеет хороший RegEx поддержка. Это все.

1
ответ дан 2 December 2019 в 20:12

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

Определенно стоит знать языки от следующих категорий:

  • Скомпилированные языки (как C/C ++/Java). C/C++ является хорошим местом для исследования проблем безопасности с переполнением буфера, повреждением стека, и т.д.
  • Интерпретируемые языки (как PHP). Хорошее место для исследования проблем со свободно-переменными-определенного-типа и не обнаружения неопределенных функций, пока Вы не называете их
  • Языки сценариев (sh/bash/csh/ksh). Действительно полезный для склеивания многих полезных утилит оболочки (см. / мусорное ведро и/usr/bin), вместе

Я приложил бы усилие для изучения C/C++, поскольку это позволяет повреждение стека и прямой доступ к памяти. Это важно, если Вы хотите экспериментировать с проблемами безопасности. Много языков имеют подобный синтаксису C (включая JavaScript), таким образом, это - хороший трамплин.

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

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

1
ответ дан 2 December 2019 в 20:12

Во-первых, некоторый отрицательный совет:

В основном то, что я - планирование выполнения, учится программировать бок о бок с изучением, как использовать Vim.

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

Как я сказал, я вхожу в безопасность, таким образом, я буду создавать главным образом связанные с безопасностью приложения. Большинство которых будет объединяться в сеть связанный.

Сети связанных приложений защиты? C не является никаким brainer выбором здесь. Необходимо будет получить доступ к сети на системном уровне API, что означает, что C является способом пойти. Конечно, это не означает, что все должно быть в C - библиотека C + a $favorite-high-level-language обертка могла бы сохранить Вас стычки C-related в частях, которым не нужен C.

После этих слов у меня есть несколько идей. Я думал о запуске с JavaScript, потому что это является межплатформенным, и я видел, что он предложил прежде.

Я держал пари, что это было предложено в контексте, отличающемся от Вашего. JavaScript имеет свои преимущества, но это не хороший язык общего назначения, еще. JS не имеет никаких стандартных библиотек, сопоставимых с доступными C, Python, Perl, Ruby, Java и компании.

Разговор о $favorite-high-level-language - мой совет состоит в том, чтобы пойти с Python. Это взаимодействует через интерфейс приятно с C, это поставлется с большим количеством полезных библиотек и имеет намного больше библиотек, доступных, как добавляют ons.

1
ответ дан 2 December 2019 в 20:12

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

Существуют, вероятно, как много ответов на, 'что является хорошим языком программирования для запуска на', поскольку существуют языки. Моя tuppence ценность - то, что Вы могли сделать хуже, чем запуск с основных сценариев оболочки, просто видя то, что можно сделать для автоматизации задач, ничего не используя вне оболочки, затем расширить тот Perl использования или подобный язык, который вырос из потребности сделать задачи, более сложные, чем оболочка способна к, после этого, и если Вам действительно будет интересно, то только потребуется несколько недель, начать использовать C или производную.

0
ответ дан 2 December 2019 в 20:12

Мои рекомендации? Хм. Ну, Вам, вероятно, придется решить, когда Вы идете. Для полезного, всестороннего диапазона можно пойти обычным путем градуса CS, возможно, не в этом порядке.

(1) C/C++ - можно свалить Объектно-ориентированный материал, и по крайней мере Вы попробуете. C++ является 'профессиональным' стандартом. (2) Блок (только для немного - это поможет Вам понять реальные работы процессора, памяти, и т.д. - Вы не должны жениться на нем.) (3) Python/Perl/Bash - Снижает эти языки сценариев, они будут самыми полезными для Вашего уровня Linux (4), PHP/Ruby, MySQL и HTML - Просто надевают Ваше Веб-программирование! Вы поймете целый процесс взаимодействия клиента сервера, другой уровень вычислений.

Нужны полезные понятия? AI, нейронные сети. Они должны закруглить Вас.

Можно выбрать один из них, чтобы сделать или затронуть всех их. Мой язык? У всех них, по мере необходимости, но I'v, программируя с 1984, и, есть градус CS, записанные игры и все виды приложений встроенных систем. Это - то, что я делаю. Необходимо узнать, кто Вы и что ВЫ делаете. Просто удостоверьтесь, что Вы весело проводите время.

Приятного отдыха!

0
ответ дан 2 December 2019 в 20:12

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

Java

  1. Должен быть ход программирования начального уровня, это основано на Java, это рассчитает к Вашему градусу. Всегда хороший получить кредиты на материал Вы учитесь.
  2. Это даст Вам некоторый карьерный рост, если Вы устанете от того, чтобы быть строго системным парнем... или если компания, Вы работаете позже, решает, что системы похожи на тостеры и так являются людьми, которые выполняют их.
  3. Объектно-ориентированный
  4. Вы сказали, что хотели сделать некоторую разработку Android. Это собирается означать Java.

Честно, если Вы работаете в Linux и берете ход программирования начала в Java и затем возможно, добиваетесь пары большего количества курсов программирования, других инструментов как Bash sed/awk, и т.д.... должен отсортировать, встают на свое место. При реальном вхождении в системы Вы могли бы погрузка некоторый C позже, но я не сказал бы, что это пользуется большим спросом, и я даже не сказал бы, что это - требование того, чтобы быть системным парнем - если Вы не действительно во внутренности.

YMMV

0
ответ дан 2 December 2019 в 20:12

Теги

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