---
# System prepended metadata

title: Linux指令
tags: [筆記]

---

# 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)
