寫這篇文章的原因有二,一是因為接觸CTF的二進制型別題目后,經常會聽到個詞叫“getshell”,意為“獲取shell”;二是前一段時間,在區塊鏈的課程實驗中,用go語言實作raft演算法(解決分布式一致性問題的一個演算法),在運行測驗腳本的時候,我照常用命令“sh ./run.sh”來運行腳本,結果是報錯,搞得我一頭霧水,于是我決定好好學習一下這個Linux中的shell腳本,
什么是shell
shell是一個復雜的互動式程式,基本上用戶一登錄進終端,它就在運行了,它為用戶提供了啟動程式、管理檔案系統中的檔案以及運行在Linux系統上的行程的途徑,它允許你輸入文本命令,然后解釋命令,并在內核中執行,
在圖形化桌面出現之前,與Unix系統進行互動的唯一方式就是借助由shell提供的文本命令列界面(command line interface,CLI),CLI只能接受文本輸入,也只能顯示出文本和基本的圖形輸出,現在都是通過圖形化的終端(Terminal)訪問CLI,下圖是deepin的終端,還是比較美觀的,

Linux上可用的shell其實有好幾種,不同shell有不同的特性,執行“cat /etc/shells”可查看系統支持的shell,Linux中其它常見shell還有ash、korn、tcsh和zsh等,下圖所列全都是shell程式的絕對路徑,大多數發行版Linux系統默認的shell是bash shell:

shell腳本
將多個shell命令放入檔案中作為程式執行,這些檔案被稱作shell腳本,通常shell腳本的第一行內容是“#!/bin/bash"或者"#!/bin/sh"或者其它,意思就是指定運行該腳本的shell程式,

getshell
這下終于明白些了,getshell其實就是運行系統的shell程式,從而可以執行程式或訪問檔案,
"./xxx.sh"與"sh xxx.sh"的區別
用"sh xxx.sh"其實就相當于用"/bin/sh"程式執行shell腳本,由于與bash shell語法的差異,理所當然就會報錯,使用"./xxx.sh"來執行腳本,其實就是在用腳本檔案中第一行指定的shell來執行腳本,也就可以順利執行了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/212792.html
標籤:其他
