现在的位置: 首页 > 编程语言 > 正文

Go语言能否取代Linux脚本

2020年01月11日 编程语言 ⁄ 共 1212字 ⁄ 字号 评论关闭

  在Cloudflare的人们都非常喜欢Go语言。我们在许多内部软件项目以及更大的管道系统中使用它。但是,我们能否进入下一个层次并将其用作我们最喜欢的操作系统Linux的脚本语言呢?.

  简短点的回答:为什么不呢?Go相对容易学习,不冗余并且有一个强大的生态库,这些库可以重复使用避免我们从头开始编写所有代码。它可能带来的一些其他潜在优势:

  咋一看Go脚本貌似很容易实现Unix脚本的shebang(#!...)支持。shebang行)是脚本的第一行,以#!开头,并指定脚本解释器用于执行脚本(例如,#!/bin/bash或#!/usr/bin/envpython),所以无论使用何种编程语言,系统都确切知道如何执行脚本。Go已经使用gorun命令支持.go文件的类似于解释器的调用,所以只需要添加适当的shebang行(#!/usr/bin/envgorun)到任何的.go文件中,设置好文件的可执行状态,然后就可以愉快的玩耍了。

是否还有其他方式支持

  OK,看起来shebang的方法并没有为我们提供全面的解决方案。是否还有其他方式是我们可以使用的?让我们仔细看看Linux内核如何执行二进制文件。当你尝试执行一个二进制/脚本(或任何有可执行位设置的文件)时,你的shell最后只会使用Linuxexecve系统调用,将它传递给二进制文件系统路径,命令行参数和当前定义的环境变量。然后内核负责正确解析文件并用文件中的代码创建一个新进程。我们中的大多数人都知道Linux(和许多其他类Unix操作系统)为其可执行文件使用ELF二进制格式。

Linux内核核心原则

  然而,Linux内核开发的核心原则之一是避免任何子系统的“vendor/formatlock-in”,这是内核的一部分。因此,Linux实现了一个“可插拔”系统,它允许内核支持任何二进制格式-所有你需要做的就是编写一个正确的模块,它可以解析你选择的格式。如果仔细研究内核源代码,你会发现Linux支持更多的二进制格式。例如,最近的4.14Linux内核,我们可以看到它至少支持7种二进制格式(用于各种二进制格式的树内模块通常在其名称中具有binfmt_前缀)。值得注意的是binfmt_script模块,它负责解析上面提到的shebang行并在目标系统上执行脚本(并不是每个人都知道shebang支持实际上是在内核本身而不是在shell或其他守护进程/进程中实现的)。

  但既然我们认为shebang不是Go脚本的最佳选择,似乎我们需要别的东西。令人惊讶的是,Linux内核已经有了一个“其他类型的”二进制支持模块,它有一个贴切的名称binfmt_misc。该模块允许管理员通过定义良好的procfs接口直接从用户空间动态添加对各种可执行格式的支持,并且有详细记录。

  结束语:以上就是关于Go语言能否取代Linux脚本的全部内容,更多内容请关注学步园。

抱歉!评论已关闭.