Linux CheatSheet
整理一些常用到的Linux 指令/語法以及目錄,一邊學習一邊補充,希望可以讓自己更熟悉Linux,
也希望可以幫助到剛開始接觸Linux的人,不要太慌張,以下正文。
Linux 重要的系統目錄
| 路徑 | 說明 | 其他 |
|---|---|---|
| / | Linux 檔案系統根目錄 | |
| /home | 依使用者帳號建立子目錄,做為此帳號的家目錄 | /home/student |
| /root | root 帳號的家目錄 | |
| /bin | 存放系統中最常用的基本使用者指令(二進位) | binary |
| /sbin | 基本的系統管理者指令 | 如 fdisk(權限存取) |
| /lib | 存放基本的函式庫及核心模組(modules) | library |
| /usr | 包含系統的主要程序、圖形介面所需的檔案、自行安裝的軟體 | |
| /tmp | 暫存檔 | temporary/temp |
| /dev | 存放裝置檔案,包含鍵盤滑鼠、硬碟、USB | device file |
| /etc | 存放系統的設定檔案,如使用者帳戶資訊、主機名稱等 | |
| /var | 存放長度可變的檔案 | |
| /sys | 目錄下用的檔案用來提供及設定硬體資訊 | |
| /proc | 目錄下的檔案可取得process與系統的狀態 | process |
| /mnt | 軟碟與光碟預設掛載點的地方 | mount |
| /opt | 作為optional檔案和程式的存放目錄 | optional |
| /lost+found | 擺放系統不正常產生錯誤時遺失的片段 |
絕對路徑 vs 相對路徑
絕對路徑,也就是從某個目錄開始寫起,直到指定目錄
在windows 裡最常看到的會是: C:/Users/User/Desktop (桌面)
在Linux 較常存放專案的路徑會是: /var/www/html/project相對路徑,以當前的工作目錄寫起,可指定上一層或下一層
../ 表示上一層,例如: ../../test1.txt
./ 表示當層,例如: ./test2.txt
常用組合鍵
| 組合按鍵 | 說明 | 效果 |
| —– |:—————————————— |
| ctrl + c| 中斷當前指令,因為與windows 的複製相同,很常誤按 |
| ctrl + d |送出EOF(End Of File)字元給正在執行中的指令。通常用來終止控制台的輸入|
| ctrl + m | 輸入enter |
| ctrl + s | 將螢幕的輸出畫面暫停 |
| ctrl + q | 將螢幕的輸出畫面恢復 |
| ctrl + u | 在指令列的整列刪除,可被ctrl + c取代 |
| ctrl + y | 回復前一次被刪除的項目 |
| ctrl + z | 暫停正在被執行的程式 |
| ctrl + r | 搜尋歷史紀錄 |
常用指令
cd
切換至指定目錄: cd /var/www/html/ls
列出當前目錄的檔案,也可以指定目錄。
常用參數:- -a 列出所有檔案,包含隱藏檔案(.開頭的檔案) –all
- -l 以詳細資訊列出
- -h 轉成human可閱讀的方式顯示檔案大小 –human-readable
- -r 反向排序
- -S 依檔案大小排序
- -t 依修改時間排序
方向鍵↑↓
叫出指令操作紀錄中的上一筆/下一筆tab按鍵
自動補齊正在輸入的單字man
操作手冊,可察看指令的用法man lshistory [N]
列出最近N筆的歷史指令
history -c 刪除所有紀錄history -d 2 刪除編號2的指令紀錄!! 執行上一個指令,相當於按方向鍵上 + enter!wh 執行上一個wh 開頭的歷史指令!5 執行編號5的指令!-6 執行倒數第6個歷史指令
mkdir
建立目錄rmdir
刪除空目錄,非空目錄就不會被刪除rmdir dir1 dir2同時刪除兩個空目錄rmdir -p a/b/c當c 被刪除,使得b變成空目錄時,同時刪除b;同理a也是touch
新增檔案rm 刪除檔案或目錄
rm test.txt刪除當前目錄下的test.txt檔案rm -r dir3遞迴刪除當前目錄下dir3目錄rm -rf dir4強制刪除當前目錄下dir4內所有內容cp
複製檔案,copycp file1 /home/student/file2複製當前目錄下的file1 到 /home/student並命名為file2mv
搬移檔案或重新命名mv file1 ./dir3/file1將file1 搬遷到 dir3底下mv file1 file2將file1 更名為file2pwd
顯示當前目錄cat
顯示檔案內容tac
反向顯示nl
顯示行號tail
查看最後幾筆
1 | tail -f "檔名" |
會進入追蹤模式,常用在看log的時候,需要知道執行程式會寫什麼樣的資訊。
tail -行數 檔名
則會列出最後n行的資訊
head
與tail 相反,顯示前面行數more / less
分頁顯示檔案
enter 向下翻一行
空白鍵 向下翻一頁
b 往回翻一頁
:f 顯示出檔名及當前行數file
查看檔案類型du
查看檔案/目錄的磁碟用量(disk usage)find-
find [搜尋路徑][選項]字串
- 翻硬碟搜尋檔案,速度較慢
- 搜尋路徑可為多個目錄,以空白分隔
- 若無指定路徑則預設是搜尋當前目錄(及子目錄)
| 根據 | 用法 | 說明 |
|---|---|---|
| 名稱 | -name fileName | 檔名若是萬用字元則需使用引號 |
| 使用者 | -user 帳號 | 也可以用 -uid |
| 使用者 | -groupt 群組 | 也可以用 -gid |
| 檔案類型 | -type f | f表示為檔案 |
| 檔案類型 | -type d | d表示為目錄 |
| 時間 | -mtime 4 | 4天前當天被更動過 |
| 時間 | -mtime +4 | 4天前(不含第4天)內被更動過 |
| 時間 | -mtime -4 | 4天內被更動過 |
| 時間 | -newer file1 | 比file1還要新的 |
| 檔案大小 | -size [+/-]SIZE | c:byte / k:KB / M:MB/ G:GB |
| 檔案大小 | -empty | 空的檔案或目錄 |
| 搜尋深度 | -maxdepth N | 進入指定目錄下層目錄時,不超過N層 |
Unix/Linux 的 find 指令使用教學、技巧與範例整理
透過more find -type f查找檔案差異在哪
clear 清除螢幕
也常使用ctrl + l 來代替,將目前畫面上的資料清除。grep 搜尋
grep [選項] 比對字串[檔案] # 預設列出字串所在整行
| 選項 | 作用 |
|---|---|
| -o | 只印出相符的字串 |
| -n | 印出行數 |
| -H | 印出檔名 |
| -r | 也搜尋子目錄 |
| -i | 不分大小寫 |
| -l | 列出檔案內容符合指定樣式的檔案名稱 |
| -L | 列出檔案內容不符合指定樣式的檔案名稱 |
| -w | 需全字符合 |
| -s | 不顯示錯誤資訊 |
| -m N | 只列出前N個 |
| -A 顯示行數 | 找到字串的後幾行也會顯示出來 |
| -B 顯示行數 | 找到字串的前幾行也會顯示出來 |
1 | grep -ir "\<word\>" |
-i 不分大小寫
-r 遞迴
< > 精準搜尋 => keyword這種含有word的別的字不會顯示出來
wc 計算字數
1
wc file # 印出 行數、字數、字元數
tar 壓縮
1 | # 打包:tar cvf FileName.tar DirName |
crontab 系統排程
直接sudo vi /etc/crontab,或者輸入 sudo crontab -e
1 | SHELL=/bin/sh |
vi 編輯器
預設編輯器為vi,也可以安裝其他編輯器,如vim nano 等。vi test.txt 編輯teset.txt,該檔案不存在則會在儲存的時候新增檔案。
進入檔案時會是瀏覽模式,按下i 進入編輯模式(insert),或是a指向文件末端並進入編輯模式(append)。
進入編輯模式後可編輯文件,按下Esc 離開編輯模式回到瀏覽模式。
一般模式常用快捷指令(快速編輯指令)
| 功能 | 指令 | 描述 |
|---|---|---|
| delete | x | 刪除游標所在位置的字元(as delete) |
| X | 倒退建(as Backspace) | |
| dw | 從游標位置開始刪除,一直到下個單字(delete word) | |
| D | 從游標位置開始刪除,直到行末 | |
| dd | 刪除游標所在的一整行 | |
| 5dd | 刪除游標開始的5行 | |
| 6,9d | 刪除6-9行 | |
| 複製 | yy | 複製游標所在的一整行 |
| 3yy | 複製從游標開始的3行 | |
| yw | 複製目前單字(yank word) | |
| 放置(put) | p | 將複製或刪除的內容插入游標位置的後面 |
| P | 將複製或刪除的內容插入游標位置的前面 |
一般模式常用快捷指令(搜尋及其他)
| 功能 | 指令 | 描述 |
|---|---|---|
| 搜尋 | /字串 | 搜尋符合字串,n 下一筆;N 前一筆 |
| ?字串 | 往前搜尋字串 | |
| 其他 | J | 將目前行與下一行合併為一行(join) |
| D | 從游標位置開始刪除,直到行末 | |
| u | undo | |
| U | 恢復游標該行的所有改變 | |
| ctrl-r | 重複上次動作 | |
| shift-g | 跳到檔案最後一行 | |
| shift + g, shift + 4 | 跳到檔案最後一行的最後一個字符 | |
| gg | 跳到第一行的第一個字符 | |
| 0 | 跳到該行的第一個字符 | |
| : + X(shift + x) 輸入密碼 | 檔案加密 |
- 檔案加密
- : + X(shift + x)
- 輸入密碼
瀏覽模式常用快截指令
- 跳到指定行數
- : + 行數
- 查詢關鍵字,此時按下n 會跳下一筆
- / + {keyword}
- 儲存
- :w
- 返回
- u
- 退出vi
- :q
- 常合併 :wq 儲存並退出
(2022/08 補充)
這邊我歸類為偶爾會用到,需要的時候可以來查找,
不過因為每個人的工作內容不同,也許對其他人來說是很頻繁使用的指令。
link
- 硬連結 (hard link)
- 多個檔名對應到同一個檔案實體,不會增加inode 數量
- 只能用在同一個檔案系統中,且只能用於檔案
- 若實際檔案被刪除,仍能透過實際連結存取檔案
不能在家目錄內連結至USB中的檔案
1 | ln file_name link_name |
ln file1 hlink1 # 建立硬連結 hlink1
rm file1 # 刪除file1 仍可透過hlink1 存取檔案內容
rm hlink1 # 刪除硬連結 hlink1
- 軟連結(soft link)
- -s 表示soft link aka. symbolic link
- 可連結目錄,且可跨檔案系統
- 若實際檔案或目錄被刪除,則連結失效
1
ln -s target_name link_name
ln -s file2 slink2 # 建立軟連結 slink2
rm file2 # 刪除file2 後 slink2 就失效了
rm slink1 # 刪除軟連結 slink1
linux 資料流
| handle 代號 | 名稱 | 描述 | 預設裝置 | 用途 |
|---|---|---|---|---|
| 0 | stdin | 標準輸入 | 鍵盤/檔案 | 大多數指令可從stdin 讀取輸入,並將輸入寫到stdout |
| 1 | stdout | 標準輸出 | 終端機螢幕 | 大多數指令可從stdin 讀取輸入,並將輸入寫到stdout |
| 2 | stderr | 標準錯誤輸出 | 終端機螢幕 | 專供用來輸出錯誤訊息 |
可將 stdout 與 stderr 的資料流重新導向,分開處理
例如將 stdout 紀錄於檔案內,而stderr 顯示在螢幕
或是將stderr 導向至 /dev/null ,可丟棄錯誤訊息
資料流導出
- > # 重導 stdout,覆蓋掉原始檔案內容
- 2> # 重導stderr,覆蓋掉原始檔案內容
- &> # 重導stderr & stdout,覆蓋掉原始檔案內容
- >> # 重導stdout,”附加”在原始檔案內容之後
- 2>> # 重導stderr,”附加”在原始檔案內容之後
- &>> # 重導stderr & stdout,”附加”掉原始檔案內容
較常見的導出2>&1 將stderr 先導入到stdout
範例
1 | ls -l > list.txt # 將結果寫入list.txt中(檔案不存在會自動新增) |
資料流導入
- < file # 由file 取代鍵盤當作資料輸入的來源
- wc < /etc/passwd
- <<text # 讀取stdin,直到符合text字樣的行出現為止,最後還會加上EOF字元
- wc << quit
- >1234567890
- >quit
- 結果: 1 1 11
管線(pipe)
指令1 | 指令2
將指令1的標準輸出當作指令2的輸入
1 | ls -la | more # 把ls 的結果分頁顯示 |
pipe 後面接的指令必須可以接收stdin
- less、more、head、tail、grep、gzip 等就可以
- ls、cp、mv 這類則不行
只能處理stdout,會忽略stderr
- 但可以使用 2>&1 將stderr 先導入stdout
排序(sort)
- 將檔案中的資料排序,並呈現在螢幕上(不影響原檔案)
- 預設視為字串型態,比較字元的ASCII碼順序
| 選項 | 作用 |
|---|---|
| -r | 反向排序(大到小) |
| -n | 以數值由小到大排序 |
| -M | 以月分排序,如 Aug, DEC等等的排序方法 |
| -f | 忽略大小寫 |
| -u | 排序並忽略過濾重複的資料 |
| -t 分隔字元 | 指定排序時所用的欄位元分隔字元 |
| -k 數字 | 以第幾個欄位來排序 |
範例
| file1 | |
|---|---|
| Curry | 94 |
| Lin | 74 |
| Paul | 93 |
| Kobe | 84 |
| Jordan | 100 |
sort file1 # 字典順序: 100 會在94 前面
sort -n file1 # 數值順序: 94會排在100 前面
sort -n -k 2 file1 # 以第2筆欄位數值排序
文字處理工具(sed)
- sed 可進行多中文字處理,如字串搜索取代、新增刪除整行等
- 預設只顯示修改的結果,不會變更檔案
- 若使用 sed -i 則可以直接修改檔案內容
- 以行為單位的新增刪除功能
- nl /etc/passwd | sed ‘2,5d’ # 將第2~5行刪除
- nl /etc/passwd | sed ‘2,$d’ # 將第2~最後一行刪除
- nl /etc/passwd | sed ‘2a new line’ # 第2行的下一行加上”new line”
- 搜尋檔案內的字串,並以新字串取代
sed ‘s/要被取代的字串/新的字串/g’ 檔案
- sed ‘s/root/ROOT/g’ /etc/passwd # 將root 改成ROOT
- sed ‘s/root//g’ etc/passwd # 將root 字串以空字串代替,可以理解為將root 字串刪除
- 預設只顯示修改的結果,不會變更檔案