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 ls
history [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 字串刪除
- 預設只顯示修改的結果,不會變更檔案