溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Go語言能否取代Linux腳本

發(fā)布時間:2021-10-15 10:09:02 來源:億速云 閱讀:228 作者:柒染 欄目:編程語言

Go語言能否取代Linux腳本,針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

  在Cloudflare的人們都非常喜歡Go語言。我們在許多內(nèi)部軟件項目以及更大的管道系統(tǒng)中使用它。但是,我們能否進入下一個層次并將其用作我們最喜歡的操作系統(tǒng)Linux的腳本語言呢?.

  簡短點的回答:為什么不呢?Go相對容易學(xué)習(xí),不冗余并且有一個強大的生態(tài)庫,這些庫可以重復(fù)使用避免我們從頭開始編寫所有代碼。它可能帶來的一些其他潛在優(yōu)勢:

  咋一看Go腳本貌似很容易實現(xiàn)Unix腳本的shebang(#!...)支持。shebang行)是腳本的第一行,以#!開頭,并指定腳本解釋器用于執(zhí)行腳本(例如,#!/bin/bash或#!/usr/bin/envpython),所以無論使用何種編程語言,系統(tǒng)都確切知道如何執(zhí)行腳本。Go已經(jīng)使用gorun命令支持.go文件的類似于解釋器的調(diào)用,所以只需要添加適當(dāng)?shù)膕hebang行(#!/usr/bin/envgorun)到任何的.go文件中,設(shè)置好文件的可執(zhí)行狀態(tài),然后就可以愉快的玩耍了。

是否還有其他方式支持

  OK,看起來shebang的方法并沒有為我們提供全面的解決方案。是否還有其他方式是我們可以使用的?讓我們仔細(xì)看看Linux內(nèi)核如何執(zhí)行二進制文件。當(dāng)你嘗試執(zhí)行一個二進制/腳本(或任何有可執(zhí)行位設(shè)置的文件)時,你的shell最后只會使用Linuxexecve系統(tǒng)調(diào)用,將它傳遞給二進制文件系統(tǒng)路徑,命令行參數(shù)和當(dāng)前定義的環(huán)境變量。然后內(nèi)核負(fù)責(zé)正確解析文件并用文件中的代碼創(chuàng)建一個新進程。我們中的大多數(shù)人都知道Linux(和許多其他類Unix操作系統(tǒng))為其可執(zhí)行文件使用ELF二進制格式。

Linux內(nèi)核核心原則

  然而,Linux內(nèi)核開發(fā)的核心原則之一是避免任何子系統(tǒng)的“vendor/formatlock-in”,這是內(nèi)核的一部分。因此,Linux實現(xiàn)了一個“可插拔”系統(tǒng),它允許內(nèi)核支持任何二進制格式-所有你需要做的就是編寫一個正確的模塊,它可以解析你選擇的格式。如果仔細(xì)研究內(nèi)核源代碼,你會發(fā)現(xiàn)Linux支持更多的二進制格式。例如,最近的4.14Linux內(nèi)核,我們可以看到它至少支持7種二進制格式(用于各種二進制格式的樹內(nèi)模塊通常在其名稱中具有binfmt_前綴)。值得注意的是binfmt_script模塊,它負(fù)責(zé)解析上面提到的shebang行并在目標(biāo)系統(tǒng)上執(zhí)行腳本(并不是每個人都知道shebang支持實際上是在內(nèi)核本身而不是在shell或其他守護進程/進程中實現(xiàn)的)。

  但既然我們認(rèn)為shebang不是Go腳本的最佳選擇,似乎我們需要別的東西。令人驚訝的是,Linux內(nèi)核已經(jīng)有了一個“其他類型的”二進制支持模塊,它有一個貼切的名稱binfmt_misc。該模塊允許管理員通過定義良好的procfs接口直接從用戶空間動態(tài)添加對各種可執(zhí)行格式的支持,并且有詳細(xì)記錄。

關(guān)于Go語言能否取代Linux腳本問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI