在 Linux 上启动什么语言?

JD *_*vis 19 security linux vim

我即将在普渡大学攻读 4 年的信息安全学位。该学位不需要任何编程课程。所以我唯一能参加的时间是偶尔的选修课。所以我的大部分学习都是靠我自己。在我高三开始时,我决定完全转向 Linux。到目前为止,我一直在学习一些 Linux 和安全方面的知识。但是,我也相信学习一些编程语言对我来说也很重要。

基本上,我计划在学习如何使用 Vim 的同时学习编程。所以这很可能是一个缓慢的过程。不过,最终我认为这将是值得的。正如我所说,我将进入安全领域,所以我将主要创建与安全相关的应用程序,其中大部分将与网络相关。我还想开始开发 Android 应用程序,但这将在以后的道路上进行。

话虽如此,我有一些想法。我想从 JavaScript 开始,因为它是跨平台的,而且我之前看到过它的建议。我也听说了很多关于 Ruby 的事情,或者可以用 C 走自然的 Linux 路线。我应该往哪个方向走?

Jim*_*imB 53

首先也是最重要的:bash,以及常见的命令行实用程序。Bash是操作系统的默认用户界面,Linux 系统上的很多程序都会在某种程度上封装在 shell 脚本中。它可能很古怪,有一些特质,而且通常看起来很愚蠢,但这是你必须处理的事情,所以要适应它。grepdiffheadtailsort、等标准工具uniq不仅对 shell 脚本很有帮助,而且对提高命令行效率也很有帮助。

至少学一些c。这是系统的最低级别所写的内容,它将让您更好地了解整个系统。

选择您喜欢的任何高级语言。Python, ruby, perl, java, 随便——只要你喜欢。这是您真正开始学习如何“编程”的地方,从这里开始学习更多语言并继续学习将变得更加容易。

  • 同意所有观点,但我更推荐 Python 作为高级语言而不是其他语言,因为它已成为服务器管理工​​具最常见的高级语言。与 ruby​​ 或 java 相比,您会更频繁地遇到它。Perl 也很常见,因为它太老了,所以我会选择下一个。 (8认同)
  • 如果你打算学习 bash,那么你应该包括学习 awk、sed、head、tail、cut、tr、diff、grep、find、ps、netstat、tcpdump、sort、uniq 等等等等。 (6认同)
  • 我同意这里列出的所有观点。 (2认同)
  • @jftuga 同意。我的工具包中很大一部分是“数据提取和集成”的技能 - 一种说“操作格式化文本文件”的奇特方式。一旦您了解了管道并了解了常用工具,您就可以不受任何预卷软件的工作流程的影响。我也是 MS Powershell 的忠实粉丝,它在许多方面都站在 Bash 的肩膀上。 (2认同)

Phi*_*ack 10

你会发现几乎每个人都会推荐他们最喜欢的语言。我最喜欢的语言是 Perl,所以我推荐它。:) 但是,除了我个人的喜好之外,还有一些重要的理由让您考虑使用 perl:

首先,perl 是一种很棒的通用语言。通过编写简单的脚本来执行与在 shell 脚本中所做的相同类型的事情,例如操作文件和根据用户输入做出决定,可以轻松地开始使用 perl。这为编程的一般思想提供了一个非常简单和渐进的介绍。Perl 已经存在了很长一段时间,因此有很多资源(书籍和网站)可供入门。

其次,perl 是一种非常强大且富有表现力的语言,支持所有现代编程功能。我已经使用它超过 15 年了,我仍在学习新的方法来更有效地做事。例如,如果你想探索面向对象的编程,perl 就有(特别是通过Moose)。

第三,perl 具有其官方附加存储库CPAN几乎无限的功能和灵活性。例如,要遵循编写安全软件的想法,假设您想开发某种自定义网络安全扫描程序。您可以先使用NMAP::Scanner作为扫描引擎,而不是自己编写所有内容,然后在此基础上编写自己的调整和改进。

最后,如果您想探索 Web 编程,Perl 也有。在 Perl 中编写 Web 软件的一种流行的现代方法是Catalyst,它提供了一个现代 MVC Web 框架,用于快速开发任何类型的 Web 应用程序。

综上所述,perl 的优势在于它允许您从编写小的命令行脚本和程序开始,逐渐成长为编写功能齐全的现代应用程序。当然,这种灵活性的代价是复杂性。学习和学习如何以正确的方式做事取决于您,perl 不会像其他语言那样强制执行良好的实践。我个人喜欢这种自由,尤其是加上网络上所有用于学习如何使用 perl 的优秀资源。


BMD*_*Dan 6

三种语言会让你受益匪浅。按重要性降序排列(即,第一个是最重要的):

  1. 伪代码。通常,您所使用的实现将是六种语言和工具的混合体,您只会直接了解其中的一些。但是,如果您知道正在实施什么模式,您就可以确定将哪些输入传递给一个部件以及它应该提供什么输出,在排除中测试它,并确定它是否是损坏的部件。
  2. Ç。不管是好是坏,它是运行 (Linux) 世界的东西,它为您提供了一个足够接近地面的视图,您可以了解任何高级语言实际在做什么(例如 PHP 的传递引用,或 Java 的线程模型)。
  3. 除了 C++ 之外的任何其他东西。像 SQL 这样的函数式语言,或者更好的是 Haskell,或者不像 C-ey 那样的东西——如果其他方法都失败了,Java 可以解决这个问题,但它仍然非常程序化——在这里得到高分;这个想法是让你的大脑围绕与你之前所做的完全不同的事情,你会不禁意识到你之前所做的事情的局限性。就纯粹的实用性而言,bash可能也属于此列表,但如果您没有其他方面的基础,您最终只会使用 bash 语法编写 C,而不是真正探索其功能。

  • +1 用于伪代码和“除 C++ 之外的任何其他内容”。在 linux 世界中,你应该至少学习一种 `script language`,比如 `python` 或 `PHP`。 (2认同)
  • 我不知道伪代码是否是对初学者的好推荐。在学习了大多数 c 风格的语言后,伪代码将是可以理解的,所以真的应该努力学习伪代码本身吗?更不用说,没有单一的伪代码语法,这可能会使初学者感到困惑。 (2认同)