icann官方網(wǎng)站常用的網(wǎng)絡(luò)營銷方法
目的:了解腳本和不同類型的 Linux shell。
任務(wù)1:Introduction to Linux Shells(Linux Shell 簡介)
作為操作系統(tǒng)的常規(guī)用戶,我們都廣泛使用圖形用戶界面 (GUI)?來執(zhí)行大多數(shù)操作。只需點擊幾下不同的選項,您的任務(wù)就完成了。但是,您可以通過在操作系統(tǒng)的 CLI 中編寫命令而不是使用?GUI?來執(zhí)行幾乎所有任務(wù)。shell 為您在 CLI 中編寫的命令提供了一些很棒的功能。這種與?OS?交互的方式更高效且對資源更友好。
假設(shè)您在一家餐廳,您的食物有兩種選擇。第一種選擇是從菜單中點餐,服務(wù)員會上菜。第二種選擇是在廚房里自己做你想要的菜。就?Linux?系統(tǒng)而言,這里的廚房就是操作系統(tǒng),使用 OS 的 GUI 就像從菜單點菜一樣,服務(wù)員會為你端上來。但是,使用 CLI 意味著您必須去廚房 (OS) 并烹飪您想要的食物。在此示例中,Shell 將通過為您提供一些食譜建議來幫助您烹飪所需的菜肴。使用 CLI 在?Linux?系統(tǒng)中執(zhí)行操作可在執(zhí)行任務(wù)時為您提供更多功能和控制。
您可能在電影中看到過黑客場景,這些場景顯示了執(zhí)行許多命令的酷終端。這是因為大多數(shù)?Linux?用戶更喜歡通過使用 shell 在 CLI 上編寫命令來執(zhí)行操作,而不是使用 GUI。這個房間將教我們?nèi)绾闻c?Linux?shell 交互。我們還將探索?Linux?中可用的不同 shell,并最后編寫一些 shell 腳本。
學習目標
- 了解與?Linux?shell 的交互
- 使用基本的 shell 命令
- 探索可用的?Linux?shell 類型
- 編寫一些 shell 腳本
會議室先決條件
- Linux的基礎(chǔ)模塊
任務(wù)2:How To Interact With a Shell?(如何與 shell 交互?)
我們?yōu)檫@個房間準備了一臺機器。?首先,讓我們通過按下下面給出的?Start Machine?按鈕來啟動虛擬機。本機將以分屏視圖啟動。
如果?VM?不可見,請使用頁面頂部的藍色?Show Split View?按鈕。計算機將在?GUI?中打開。您還可以使用下面的?SSH?憑據(jù)通過 Attackbox 或您自己的 VPN 連接計算機連接計算機:

計算機在分屏視圖中打開后,您將準備好 shell 提示符 接受命令。

大多數(shù)?Linux?發(fā)行版使用 Bash (Bourne Again Shell) 作為其 default shell 的 shell 中。但是,當您打開 終端依賴于您的?Linux?發(fā)行版。
注意:在接下來的任務(wù)中,我們將討論 不同類型的shell。
您可能已經(jīng)探索了本房間的先決條件中提到的?Linux?基礎(chǔ)模塊中的基本?Linux?命令。讓我們 簡要討論我們在 shell 中使用的一些最重要的 Shell。
與 shell 交互時,您必須位于 想要執(zhí)行操作。默認情況下,當您在大多數(shù)?Linux?發(fā)行版,您將位于主目錄中。要查看當前工作目錄,可以執(zhí)行 ,它代表打印工作目錄,如下面的終端所示:pwd

在上述命令的結(jié)果中,您可以看到您當前的 working directory 為/home/user
但是,您也可以更改目錄。為此,您可以使用 (Change Directory 的縮寫),如下面的終端所示:cd

使用操作系統(tǒng)的?GUI?時,您可以看到目錄的內(nèi)容 在屏幕上。但是,在使用 shell 時,要查看 目錄中,您必須輸入以下命令:

如果要讀取文件的內(nèi)容,可以鍵入 following 命令:cat
grep 命令是?Linux?用戶中非常流行的命令。這個強大的命令可以搜索文件中的任何單詞或模式。假設(shè)您想在一個大文件中搜索特定條目。您可以將 grep 命令與這些條目的模式一起使用,這將為您提取它們。它還可以幫助您在大文件中搜索特定關(guān)鍵字。
以下終端向我們展示了如何使用 grep 命令在大文本文件中搜索單詞 “THM”。輸出顯示包含此單詞的文本文件的特定行。


任務(wù)3:Types of Linux Shells(Linux Shell 的類型)
與 Windows 操作系統(tǒng)中的命令提示符和 PowerShell 一樣,Linux?具有不同的 可用的 shell 類型,每種類型都有自己的功能和 特性。
多個 shell 安裝在不同的?Linux?發(fā)行版中。自 查看您正在使用的 shell,鍵入以下命令:
echo $SHELL
這里必須大寫shell
您還可以列出?Linux?操作系統(tǒng)中的可用 shell。該文件包含?Linux?系統(tǒng)上所有已安裝的 shell。您可以通過在終端中鍵入來列出?Linux?操作系統(tǒng)中的可用 shell:
/etc/shells
cat /etc/shells
要在這些 shell 之間切換,您可以鍵入 shell 名稱,即 出現(xiàn)在您的操作系統(tǒng)上,它將為您打開,如下所示:
如果要永久更改默認 shell,可以使用命令:。這將使此 shell 成為終端的默認 shell。
chsh -s /usr/bin/zsh
Linux?shell 有多種類型。我們將討論其中的一些 及其功能。
Bourne Again Shell
Bourne Again Shell (Bash) 是大多數(shù)?Linux?發(fā)行版的默認 shell。當您打開終端時,bash 會讓您 enter 命令。在 bash 之前,一些 shell (如 sh、ksh 和 csh)具有 不同的功能。Bash 是這些的增強替代品 shell 的 shell 中,從所有這些 shell 中借用了 shell 的功能。這意味著它具有 這些舊shell的許多特征及其一些獨特的 能力。列出了 bash 提供的一些關(guān)鍵功能 下面:
- Bash 是一種廣泛使用的 shell,具有腳本功能。
- 它提供了一個 Tab 鍵補全功能,這意味著如果你在 在完成命令的過程中,您可以按鍵盤上的 Tab 鍵。它會 根據(jù)可能的匹配項自動完成命令或為您提供 完成它的多個建議。
- Bash 會保留一個歷史文件并記錄您的所有命令。您可以使用 向上和向下箭頭鍵使用前面的命令而無需鍵入 他們又來了。您還可以鍵入以顯示您之前的所有 命令。history
友好的交互式 Shell
Friendly Interactive Shell (Fish) 在大多數(shù)?Linux?發(fā)行版中也不是默認的。顧名思義,它更側(cè)重于 比其他 shell 用戶友好。提供的一些關(guān)鍵功能 按魚分類如下:
- 它提供了一種非常簡單的語法,對于初學者來說是可行的 用戶。
- 與 bash 不同,它對您編寫的命令具有自動拼寫更正功能。
- 您可以使用一些很酷的主題來自定義命令提示符 魚。
- fish 的語法高亮功能會給 fish 的不同部分著色 命令,這可以提高 命令。它還可以幫助我們發(fā)現(xiàn)具有獨特顏色的錯誤。
- Fish 還提供腳本、Tab 鍵補全和命令歷史記錄 功能,類似于此任務(wù)中提到的 shell。
Z Shell
默認情況下,大多數(shù)?Linux?發(fā)行版中不安裝 Z Shell (Zsh)。它被認為是一種現(xiàn)代 shell,它結(jié)合了 一些以前 shell 的功能。一些主要功能 由 ZSH 提供,下面列出了:
- Zsh 提供高級 Tab 鍵自動補全功能,并且還能夠編寫 腳本。
- 就像 fish 一樣,它還為命令提供自動拼寫更正。
- 它提供廣泛的定制,這可能會使其比其他定制慢 殼。
- 它還提供 Tab 鍵補全、命令歷史記錄功能和 其他幾個功能。
不過我個人感覺,就bash用到多一點,其他使用情況并不多。
特征 | bash | fish | ZSH |
---|---|---|---|
全名 | Bash 的完整形式是 Bourne Again Shell。 | Fish 的完整形式是 Friendly Interactive Shell。 | Zsh 的完整形式是 Z Shell。 |
腳本 | 它提供廣泛兼容的腳本和廣泛的文檔 可用。 | 與其他兩個相比,它的腳本功能有限 殼。 | 它提供了出色的腳本水平,結(jié)合了傳統(tǒng)的 具有一些額外功能的 Bash shell 的功能。 |
Tab 鍵補全 | 它具有基本的 Tab 鍵補全功能。 | 它通過根據(jù)以下因素提供建議來提供高級 Tab 鍵自動補全 您之前的命令。 | 它的 Tab 鍵補全功能可以通過使用 插件。 |
定制 | 基本級別的自定義。 | 它通過交互式工具提供了一些很好的定制。 | 通過 oh-my-zsh 框架進行高級定制。 |
用戶友好性 | 它不太用戶友好,但是一種傳統(tǒng)且廣泛使用的 shell 的 shell 中,它的用戶非常熟悉和熟悉它。 | 它是最用戶友好的 shell。 | 通過適當?shù)亩ㄖ?#xff0c;它可以是高度用戶友好的。 |
語法高亮顯示 | 語法高亮功能在此 shell 中不可用。 | 語法高亮是此 shell 中內(nèi)置的。 | 語法高亮可以通過引入 一些插件。 |
選擇最佳?Linux?shell 取決于您的使用情況及其 特征。此任務(wù)中討論的 shell 是眾多 shell 中的一部分?Linux?中可用的不同 shell。您可以比較 這些不同的 shell 并根據(jù)您的任務(wù)選擇最好的一個。
任務(wù)4:Shell Scripting and Components(Shell 腳本和組件)
shell 腳本只不過是一組命令。假設(shè)一個重復的 任務(wù)要求您使用 shell 輸入多個命令。而不是 在每一次重復該任務(wù)時一個接一個地輸入它們,這可能會 花更多的時間,你可以把它們組合成一個腳本。執(zhí)行 所有這些命令,您將只執(zhí)行腳本,而所有 命令。前面提到的所有 shell 任務(wù)具有腳本功能。腳本幫助我們自動執(zhí)行任務(wù)。 在學習如何編寫腳本之前,我們需要知道,即使?Linux?shell 具有腳本功能,但這并不意味著您 只能使用 shell 制作腳本。腳本可以用各種方式完成 編程語言。然而,這個房間的范圍是 Cover 使用 shell 編寫腳本。
第一步是打開終端并選擇一個 shell。我們走吧 使用 bash shell,這是大多數(shù) shell 中默認且廣泛使用的 shell 分布。
與我們在 shell 中鍵入的其他命令不同,我們首先需要 使用腳本的任何文本編輯器創(chuàng)建文件。該文件必須是 以 extension 命名,這是 bash 腳本的默認擴展。 以下終端顯示腳本文件的創(chuàng)建:.sh
每個腳本都應該從 shebang 開始。Shebang 是 在腳本開頭添加的一些字符,從 with 后跟執(zhí)行時要使用的解釋器的名稱 劇本。當我們在 bash 中編寫腳本時,讓我們將其定義為 Shebang 的翻譯。#!
我們現(xiàn)在都準備好編寫我們的第一個腳本了。有一些 腳本的基本構(gòu)建塊共同構(gòu)成了高效的 腳本。讓我們學習并利用這些腳本結(jié)構(gòu)來編寫一個 編寫腳本。
要執(zhí)行腳本,我們首先需要確保腳本具有 執(zhí)行權(quán)限。要向腳本授予這些權(quán)限,我們可以 在我們的終端中鍵入以下命令:
現(xiàn)在腳本具有執(zhí)行權(quán)限,之前使用 用于執(zhí)行它的腳本名稱。我們使用 before the script 來運行,而不是直接鍵入腳本名稱,因為 shell 會告訴 shell 執(zhí)行當前目錄中存在的文件。如果未在腳本名稱之前定義,則 shell 將在 PATH 環(huán)境變量(包含除當前目錄之外的所有目錄)中搜索腳本,并且不會在任何這些目錄中找到定義的腳本并生成錯誤。下面的終端顯示了 我們利用了變量:
./
循環(huán)
Loop,顧名思義,是重復的東西。為 例如,您有一個包含許多朋友的列表,并且您希望向他們發(fā)送 相同的消息。您可以制作一個循環(huán),而不是單獨發(fā)送它們 在你的腳本中,將你的好友列表提供給 Loop 和 Message 中,然后 它會將該消息發(fā)送給您所有的朋友。
對于循環(huán)的一般解釋,讓我們編寫一個循環(huán),它將 在屏幕上顯示從 1 到 10 開始的所有數(shù)字:
# Defining the Interpreter
#!/bin/bash
for i in {1..10};
do
echo $i
done
第一行包含將從 1 迭代到 10 的變量,并且 每次都執(zhí)行以下代碼。 指示循環(huán)的開始 code 并指示結(jié)束。在它們之間,我們想要的代碼 execute 的 intent 來寫入。for 循環(huán)將采用每個數(shù)字 ,并將其分配給每次迭代中的變量。將在每次迭代時顯示此變量的值。i
do?
done?
i?
echo $i
現(xiàn)在,讓我們在執(zhí)行腳本后執(zhí)行腳本 許可。
上述終端的輸出被剪切成數(shù)字,僅用于演示。但是,當根據(jù)腳本的邏輯執(zhí)行時,它將顯示 中的數(shù)字。
3
1 to 10
條件語句
條件語句是腳本編寫的重要組成部分。他們提供幫助 僅當滿足條件時,您才執(zhí)行特定代碼; 否則,您可以執(zhí)行另一個代碼。假設(shè)您想創(chuàng)建一個 向用戶顯示密鑰的腳本。但是,您希望它被顯示給 僅部分用戶,僅對高權(quán)限用戶。您將創(chuàng)建一個 conditional 語句,該語句將首先詢問用戶的姓名,如果 該名稱與 High Authority 用戶的名稱匹配,則會顯示 秘密。
# Defining the Interpreter
#!/bin/bash
echo "Please enter your name first:"
read name
if [ "$name" = "Stewart" ]; thenecho "Welcome Stewart! Here is the secret: THM_Script"
elseecho "Sorry! You are not authorized to access the secret."
fi
上面的腳本將用戶名作為輸入,并將其存儲到 變量(在 Variables 部分中研究)。條件語句 以 if 開頭,并將該變量的值與字符串進行比較 斯圖爾特;如果匹配,它將向用戶顯示密鑰,或者 否則它不會。fi 用于結(jié)束 for 循環(huán)。
以下是顯示用戶 name 與腳本中定義的 authorized 匹配:
但是,以下終端顯示了當 用戶名與腳本中定義的 authorized 用戶名不匹配:
評論
有時,代碼可能非常冗長。在此方案中,代碼 當您一段時間后查看它或與之分享時,可能會讓您感到困惑 有人。解決此問題的一種簡單方法是在 代碼的不同部分。評論是我們寫的一句話 我們的代碼只是為了我們的理解。它用 # sign 后跟一個空格和您需要編寫的句子。為 #示例,讓我們重寫我們在條件 statements 部分并為其添加注釋。
# Defining the Interpreter
#!/bin/bash# Asking the user to enter a value.
echo "Please enter your name first:"# Storing the user input value in a variable.
read name# Checking if the name the user entered is equal to our required name.
if [ "$name" = "Stewart" ]; then# If it equals the required name, the following line will be displayed.
echo "Welcome Stewart! Here is the secret: THM_Script"# Defining the sentence to be displayed if the condition fails.
elseecho "Sorry! You are not authorized to access the secret."
fi
了解帶有注釋的腳本看起來有多容易。注釋不會影響 任何腳本的 working 工作。一個好的腳本總是有一些注釋。這 上面顯示的示例包含每行的注釋。這只是一個 更好地解釋了它的概念。但是,最好的方式是包括 comments 是在 腳本。
注意:其他類型的變量、循環(huán)和 條件語句也可用于完成不同的任務(wù)。 此外,還可以在單個 評論。然而,這不是這個房間的范圍。
并沒有什么特別東西
任務(wù)5:The Locker Script(儲物柜腳本)
在上一個任務(wù)中,我們研究了變量、循環(huán)和條件 語句。讓我們使用這些知識創(chuàng)建一個 shell 腳本。
要求
用戶在銀行中有一個儲物柜。為了保護儲物柜,我們必須擁有 一個在打開用戶之前驗證用戶的腳本。什么時候 執(zhí)行時,腳本應詢問用戶的姓名、公司名稱、 和 PIN 碼。如果用戶輸入以下詳細信息,則應為 允許他們進入,否則應拒絕他們訪問。
- 用戶名:John
- 公司名稱:Tryhackme
- 密碼:7385
腳本
# Defining the Interpreter
#!/bin/bash # Defining the variables
username=""
companyname=""
pin=""# Defining the loop
for i in {1..3}; do
# Defining the conditional statementsif [ "$i" -eq 1 ]; thenecho "Enter your Username:"read usernameelif [ "$i" -eq 2 ]; thenecho "Enter your Company name:"read companynameelseecho "Enter your PIN:"read pinfi
done# Checking if the user entered the correct details
if [ "$username" = "John" ] && [ "$companyname" = "Tryhackme" ] && [ "$pin" = "7385" ]; thenecho "Authentication Successful. You can now access your locker, John."
elseecho "Authentication Denied!!"
fi
腳本執(zhí)行
任務(wù)6:Practical Exercise(實踐練習)
我們在附加的 Ubuntu 的默認用戶目錄中放置了一個腳本 機器。此腳本在所有文件中搜索特定關(guān)鍵字 (帶有.log擴展名)在特定目錄中。/home/user
注意:腳本內(nèi)需要進行一些更改 文件。當您按照任務(wù) #2 中的說明打開計算機時,您將能夠以普通用戶的身份獲得會話。但是,我們建議您成為 root 用戶,以便在給定目錄的所有文件中搜索該標志。?要成為其中一員,您只需鍵入以下命令并輸入用戶的密碼:
- 標志:?thm-flag01-script
- 目錄:/var/log
grep “cat”? /var/log/authentication.log