# Linux課程學習筆記 ## 常用目錄簡介 ### 根目錄(root):「/」 其他所有目錄皆從此衍生,如其命名所示。 若要找到某個位置未知的檔案,即可以「/」為尋找檔案的起點。 其他路徑則直接連接在其後,如要到「home」目錄中的「Download」目錄,則輸入:cd /home/Download 即可。 ### 存放指令的目錄:「/bin」 存放著所有使用者皆可使用的指令。 ### 家目錄:「/home」 類似各個使用者的私人資料夾,如名為「kali」的使用者的家即位於「/home/kali」,可簡寫為「~」。 ### 剩餘功能 「.」代表當前目錄。 「. .」代表回上一頁。 ### 目錄顯示格式 #### 使用「ls -al」顯示的目錄格式 使用「-l」可顯示詳細訊息,「-a」可顯示隱藏檔案。 顯示依項目的格式如下: 「drwxr-xr-x 1 kali kali 16784 Oct 14 08:09 a.out」 「[drwxr-xr-x] [1] [kali] [kali] [16784] [Oct 14 08:09] [a.out]」 「 [權限] [連接數][擁有者][群組][檔案大小][修改日期][檔名(不一定有附檔名)]」 #### 權限表示 「drwxr-xr-x」 [d]:代表檔案類型。[d]:目錄/[-]:檔案/[l]:連結 [rwx]:[r]:可讀(read)/[w]:可修改(write)/[x]:可執行(execute)/[-]:無此權限 第一組[rwx]:代表擁有者的權限,代號為u(user)。 第二組[r-x]:代表同群組成員的權限,代號為g(group)。 第三組[r-x]:代表其他人的權限,代號為o(others)。 ## 解題常用指令 ### 指令使用手冊 「<指令> --help」、「<指令> -h」可列出使用說明。 「man <指令>」可輸出使用手冊。 以上兩者可提示指令內容,防止忘記指令。 在特殊的題目會使用到,如「MANual」這題。 ### 目錄操作相關 #### 「ls」列出當前目錄內容 「ls [參數]」 [參數]項目常用包含[-a]與[-l]。 [-a]可列出隱藏的檔案。 [-l]可顯示詳細的檔案資訊,若為隱藏檔案,則檔名前會有「.」,如「.flag」。 是對所有題型均適用的指令,方便觀察檔案的變化。 #### 「cd」變更當前工作目錄 「cd [目錄路徑]」 也就是移動現在螢幕顯示的所在目錄到指定目錄中,如「cd /home/kali/test」代表移動到使用者家目錄中的test目錄。 #### 「mkdir」建立子目錄 「mkdir [子目錄名]」 在當前目錄建立新的子目錄,如「mkdir test」 有些線上檔案需要建立子目錄後才能下載,使用「wget」下載檔案時須注意。 #### 「pwd」顯示當前工作路徑 「pwd」 其實目前解題上不常用,但在kali內開啟檔案需要得到完整的路徑,故紀錄之。 ### 檔案操作相關 #### 檔案內容相關 「cat [檔案]」:直接以文字形式輸出文件內容,如為.py檔案則會輸出程式碼,.txt檔案則會輸出內容。 「grep [參數] "[目標字串]" [檔案]」可在檔案中找到符合的特定片段,如要在特定文件中尋找flag中特定字串即可以利用此指令查找或縮小搜尋範圍。 常用參數: [-i]不分大小寫進行搜尋 範例: grep -i "flag" test.txt 「strings [檔案]」可將檔案二進位的可印字元印出。即是強制以文字形式印出檔案內容,會出現亂碼,但在部分題目會將flag藏在其中,即可利用此方法印出,如crypto的第二題hit_the_core就需要使用此指令印出密文再行解密。 #### 檔案本體操作 「file [檔案]」輸出檔案類型,可以判斷要針對檔案進行何種操作。如為執行檔則執行之,為文字檔則cat查看之。 範例:「file test」 「cp [檔案] [目錄]」複製檔案到某目錄。 範例:「cp test /home/kali/Download」 「rm [檔案或目錄]」刪除檔案或目錄。 範例:「rm test」 「mv [檔案] [新目錄]」移動檔案到某目錄。 範例:「mv test /home/kali/Desktop」 「mv [檔案] [新檔名]」更改檔名。 範例:「mv test testtest」 「find [目錄(路徑)] [條件參數] [條件]」找到符合條件的檔案,可以用以尋找特定的檔案,目前解題多用以尋找特定檔名。 範例:「find / -type f -name "test"」從根目錄開始尋找檔案類型為檔案,檔名包含test的檔案。 #### 檔案權限調整 「chmod ([參數]) [權限變動] [檔案]」更改檔案的權限。 權限變動部分有兩種寫法: **第一種**:二進位數字修改法。rwx可看作三位數二進位的數字,有權限為1,無權限則為0,如r-x可表示為0b101即是十進位的5,依此類推,將得出來十進位的值依照「使用者-群組-其他人」的順序輸入即可。 範例: 「chmod 546 test.py」代表將檔案權限改為「r-x(101)r--(100)rw-(110)」代表擁有者只能讀和執行、群組成員只能讀、其他人只能讀和修改而不可執行。 **第二種**:字母表示法。使用先前所提及之u、g、o作為指示符號,權限內容則使用r、w、x表示,可直觀的修改單一使用者類型的權限,。 範例: 「chmod u+x test.py」替test.py檔案的所有者增加執行的權限。 「chmod u=rwx test.py」將test.py檔案的所有者權限設為rwx。 本指令常常用於在解題時打開本不能打開的檔案,可先「ls -al」查看權限後再「chmod u=rwx [file]」使自己取得檔案的全部權限。 目前的解題中多不須輸入參數,需要時再用「man chmod」查看即可。 「chown [擁有者]:[群組] [檔案]」改變檔案所有者或所在群組。 範例:「chown bin test.txt」將test.txt的所有者改為bin。 「chown :testgrp test.txt」將test.txt的群組改為testgrp。 #### 檔案打包與壓縮 順序:先打包後壓縮。 打包是將多個檔案整併成一個,壓縮則可以降低「單一檔案」的儲容。 **打包指令** 「tar [參數] [打包後檔名] [打包檔案(可複數)]」 參數組成: [-c]:打包 [-x]:解包 [-v]:顯示過程 [-f]:指定打包檔名 [-z]:支援gzip壓縮檔案(打包順便壓縮),副檔名為「.tar.gz」 範例: 「tar -cvf testpack.tar test1 test2」代表將test1及test2打包成testpack.tar 「tar -xvf testpack.tar」代表解開testpack.tar的打包。 「tar -zxvf testpack.tar.gz」代表解壓縮並解包testpack.tar.gz,類似windows的解壓縮至此。 **壓縮指令** 「gzip [參數] [壓縮檔案]」可壓縮與解壓縮(需輸入參數-d)檔案。若壓縮對象為目錄則須輸入路徑。 範例:「gzip test.out」壓縮test.out為test.out.gz,原檔案會被取代。 「gzip -d test.out.gz」會解壓縮test.out.gz。 「zip [壓縮後檔名] [檔名]」檔案不會被取代的壓縮指令。 「unzip [壓縮檔]」解壓縮檔案。 #### 編譯與執行 「gedit [檔案].cpp」是文字編輯器,也可用於程式編寫,副檔名為「.py」則為python,「.cpp」則是c++。 「gcc [檔案]」c語言編譯器 「g++ [參數] [檔案]」c++編譯器,參數輸入-S可看到低階的程式運行,可判斷程式語言類型。 「python3 [檔案]」執行python檔案。 #### 資料流相關運算子 「>」重新導向運算子:可處理指令、程式與檔案間的資料流。 常用有三種: 「>」(STDOUT)導出資料至箭頭端的指令、程式或檔案。 「<」(STDIN)功能同上,只有方向不同。 「2>」(STDERR)導出錯誤訊息至箭頭端的指令、程式或檔案。 範例: 「./sum < input.txt >output.txt」會先處理「./sum < input.txt」,於sum內執行完成後再輸入output.txt中。 「|」管道運算子:可處理指令與指令間的資料流。 範例: 「strings JustOpenIt | grep -i "flag"」將JustOpenIt中的內容strings列出後轉交給grep抓出含有"flag"字串的內容。 #### 本機資訊相關 「hostname」查看本機名稱與IP。 「netstat」查看網路連線資訊,會顯示及時的資料傳輸過程,包含協定、本機位置、外部位置與狀態。 「nestat -an」:[-a]查看現在本機的所有連線接口[-n]並以ip地址的方式呈現。 「ip [參數]」查看本機網路介面設定,和「ifconfig」有同樣的功能。 「ip -a」可查看本機現在所有的網路接口的ip位置。 「ip -r」可印出路由表。 ![螢幕擷取畫面 2023-12-31 000005](https://hackmd.io/_uploads/B1_aC2ava.png) (附圖:使用cmd列出,cmd的指令為route PRINT。) ** localhost = 127.0.0.1 ## 遠端主機相關 「ping [DNS]」確認遠方主機連線是否暢通,通常會輸入8.8.8.8(www.google.com)(因為google的網路很穩定)來確認自己的主機連線狀態。 「ssh [使用者名稱]@[IP] -p [port]」與遠端主機建立安全連線。 「nc [IP] [port]」與遠端主機建立一次明文連線。 「socat」可建立多次連線,在本課程中未被使用。 「curl [參數] [網址]」連結到網頁,取得網頁資訊(文字版)。[-v]可顯示連線全部過程。 範例: 「curl -v https://www.google.com」 ![螢幕擷取畫面 2023-12-31 000155](https://hackmd.io/_uploads/Hk8ZJ6awa.png) (難以閱讀,但在某些特殊的題目會藏有flag) 「wget [網址]」從特定網址下載檔案,非常常用的指令。 範例: 「wget https://i.imgur.com/a9DEiKP.jpg 」如此就會下載到一張圖片,用於圖片隱寫術的圖片下載或文件的下載。 #### 本機行程管理相關 「ps [參數]」查看本機行程資訊(process status),可以觀察到有哪些連線在本機上運行,適合用於觀察是否有駭客入侵電腦。 參數: [-a] :所有使用者的行程(all user) [-u] :使用者中心的介面(比較好讀?)(user-oriented format) [-x] :(process without controlling ttys) ![螢幕擷取畫面 2023-12-31 002025](https://hackmd.io/_uploads/B1NwQTawp.png) (cmd的指令是tasklist /V) #### 編輯器 「gedit [檔名]」單純的文字編輯器,隨檔名變更也有coding的功能。 「vim」 「vi」 ![螢幕擷取畫面 2023-12-31 001744](https://hackmd.io/_uploads/SkC3GTpw6.png)