# Linux指令 影片:[SCIST S5 資安week1](https://youtu.be/1oV5tCH5raY?si=hcunJB0Ba4kD2puk) 學習資源:[Kazma-Linux-Course](https://github.com/kazmatw/Kazma-Linux-Course?tab=readme-ov-file) ## 各種指令 ### man 顯示任何可以在終端機執行的指令的使用手冊 用法: `man 指令` ### ls 顯示出當前目錄下的所有內容 `-a` 可以列出開頭是(.)的檔案或資料夾 `-l` 將內容更多資訊列出來 `-R` 將當前目錄下所有子目錄用 Recursively的方式列出來 ### cd 切換目錄 `cd ..` 切換回上一層目錄 `cd ~` 回到家目錄 `cd 絕對路徑` 後面也可以接絕對位址 ### cat 顯示檔案內容 用法:`cat 檔名` ### echo 顯示一段文字 `-n` 不在最後輸出換行符。 `-E` 明確表示不要解析轉義序列(預設) `-e` 參數啟用了轉義序列解析 🌰 `echo -e "Hello\tWorld\n"` 輸出->`Hello World` ### mkdir 建立資料夾 用法:`mkdir 資料夾名稱` ### rm 刪除檔案或資料夾 `-i` 刪除前詢問是否刪除 `-r` 刪除整個資料夾 ### cp 複製檔案或目錄 `cp file file1` 將file複製一份叫做file1 `cp -r ./dir1 ./dir2` 將dir內容複製一份到dir2 ### mv 移動檔案或是變更檔案名稱 `mv 123.txt 456.txt` 將123更改名稱為456 `mv 456.txt dir/ `將456.txt移動到dir內 ### strings 從檔案(通常是二進位檔案)中提取可讀文字,也可以用於其他類型的檔案 `-n` 指定顯示最小長度為 n 的字符串 ex:`strings -n 4 檔名` `-t` 可以顯示每個字符串的偏移量(描述資料在檔案中的位置) 🌰某個字符串的偏移量是 0x10,則表示這個字符串在檔案中從第 16 個字節開始 ### chmod 更改檔案權限 使用ls -l可以看到每個檔案前會有-rwxrwxrwx從第2個格子開始每三個一組分別代表 owner/group/others 對此檔案的權限 `r` 代表讀取 `w` 代表寫入 `x` 代表執行 `s(Setuid)` 允許使用該檔案的用戶以檔案擁有者的身份執行 `u` 擁有者(User) `g` 群組(Group) `o` 其他使用者(Others) `a` 所有使用者(All) 🌰增加執行權限給擁有者:`chmod u+x filename` 🌰移除寫入權限給群組:`chmod g-w filename` 🌰設定所有人只有讀取權限:`chmod a=r filename` 數字法: 7 = 4 ( r ) + 2 ( w ) + 1 ( x )(讀取、寫入、執行) 6 = 4 ( r ) + 2 ( w )(讀取、寫入) 5 = 4 ( r ) + 1 ( x )(讀取、執行) ![image](https://hackmd.io/_uploads/rJ7vphhw1e.png) 🌰給予擁有者 rwx,群組和其他使用者 r-x:`chmod 755 filename` `-R` 遞歸地更改目錄及其內部所有檔案的權限 🌰`chmod -R 755 directory` `+x` 將執行權限加到檔案或目錄 ### grep 在檔案中搜尋符合條件的文字模式,並輸出包含該模式的行 也可以與其他命令結合使用,用於篩選或處理文字資料 用法:`grep [選項] "文字" 檔案` `-i` 忽略大小寫 `-r或-R` 遞歸搜尋目錄中的檔案 `-v` 反向搜尋,只顯示不匹配的行 `-l` 顯示匹配模式的檔案名稱,而不是具體的匹配行 `-n` 顯示匹配行的行號 `-c` 顯示匹配模式的行數 `-w` 僅匹配完整的單詞,而不是部分匹配。🌰搜尋 cat 不會匹配 catalog:`grep -w "cat" filename` `-o` 只顯示匹配的部分,而不是整行 `-A <數字>` 顯示匹配行及其後面 n 行。🌰顯示匹配行及其後 3 行:`grep -A 3 "pattern" filename` `-B <數字>` 顯示匹配行及其前面 n 行 `-C <數字>` 顯示匹配行及其前後 n 行 `-E` 啟用擴展正則表達式🌰搜尋以 apple 開頭並以 .txt 結尾的行:`grep -E "^apple.*\.txt$" file.txt` 基本正則表達式:🌰搜尋 a 或 b:`grep "a\|b" filename` ### nc 在TCP或UDP協議上開啟連線,並且在本地或遠端主機之間發送和接收數據 用法:`nc <主機> <端口>` ### ssh 在網路上遠端登錄到另一台主機的工具 用法:`ssh [選項] <使用者>@<主機>` `-p` 選項指定端口號 `ssh -p <端口號> username@hostname` ### pipe 將一個命令的輸出傳遞給另一個命令的機制 符號是`|` `命令1 | 命令2` 命令1的輸出會作為命令2的輸入 ### wget 從網絡上下載檔案的命令行工具 `wget [選項] <URL>` `-O` 選項指定檔案名稱🌰`wget -O myfile.zip https://example.com/file.zip` `-c` 選項繼續下載未完成的部分 `-b` 背景下載 `--no-check-certificate` 跳過憑證檢查 ### find 在指定目錄及其子目錄中搜尋檔案或目錄 `find [起始目錄] [搜尋條件] [操作]` `-name` 搜尋名稱符合特定模式的檔案🌰`find . -name "example.txt"` `-iname` 可以忽略大小寫進行搜尋 `-type` 來指定搜尋類型 `f`:檔案、`d`:目錄🌰`find . -type d ` `-perm`搜尋特定權限的檔案🌰`find . -perm 644` `-exec` 執行命令🌰`find . -name "*.txt" -exec ls -l {} \;` `-delete` 刪除檔案🌰`find . -name "*.tmp" -delete` ### touch 創造新的空檔案或更新現有檔案的時間戳 `touch [選項] <檔案名>` 創建新檔案 `touch newfile.txt` `-t` 選項來指定一個具體的時間戳🌰`touch -t 202301011234 example.txt` `-r`將某個檔案的時間戳設為與另一個檔案相同🌰將file2.txt的時間戳設為與 file1.txt 相同`touch -r file1.txt file2.txt` `-c`更新時間戳而不創建新檔案,如果檔案不存在,則什麼都不做 `-d` 選項可以指定一個具體的日期時間格式🌰`touch -d "2022-12-31 23:59" example.txt` ### git `git log` 查看提交歷史 `git show <commit_hash>` 查看文件在歷史中的變化 `git checkout <commit_hash> <file_path>` 還原過去的檔案 `git branch`查看有沒有其他分支 `git switch branch_name`切換到那個分支 ## 其他資料來源 [我搶到旗子了!30天CTF入門系列](https://ithelp.ithome.com.tw/users/20114768/ironman/2749) [一起資安入門 -- picoCTF 探索與解題](https://ithelp.ithome.com.tw/m/users/20111429/ironman/4852)