1 什麼是shell
shell是Linux系統的使用者介面,提供了使用者與核心互動的一種介面,它接收使用者輸入的命令併到送到核心去執行,因此也被稱為Linux的命令直譯器。
顯示系統當前使用的shell
echo ${SHELL}
# /bin/bash
檢視系統當前使用的所有shell
cat /etc/shells
# /bin/sh
# /bin/bash
# /usr/bin/sh
# /usr/bin/bash
# /bin/tcsh
# /bin/csh
2 設定主機名
# 臨時生效
hostname localhost
# 持久生效,支援CentOS7和Ubuntu18.04以上版本
hostnamectl set-hostname locahost
3 命令提示符
提示符格式說明:
- \e 控制符\033
- \u 當前使用者
- \h 主機名簡稱
- \H 主機名
- \w 當前工作目錄
- \W 當前工作目錄基名
- \t 24小時時間格式
- \T 12小時時間格式
- ! 命令歷史數
-
開機後命令歷史數
# 檢視提示符格式
cat $PS1
# 在CentOS系統實現持久儲存提示符格式
echo 'PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"' > /etc/profile.d/env.sh
# 實現Ubuntu系統持久儲存提示符格式
echo "PS1='\[\e[1;35m\][\u@\h \W]\\$\[\e[0m\]'" >> .bashrc
4 內部命令與外部命令
- 內部命令:由shell自帶的,而且透過某命令形式提供, ,使用者登入後自動載入並常駐記憶體中
- 外部命令:在檔案系統路徑下有對應的可執行程式檔案,當執行命令時才從磁碟載入至記憶體中,執行完畢後從記憶體中刪除
區分內部命令與外部命令
type commond
內部命令管理
help # 檢視所有內部命令
enable commond # 啟用內部命令
enable -n commond #禁用內部命令
enable -n # 檢視所有禁用的內部命令
外部命令管理
# 檢視外部命令檔案執行路徑
which -a --skip-alias ${commond}
Hash快取表
系統初始hash表為空,當外部命令執行時,預設會從PATH路徑下尋找該命令,找到後會將這條命令的路徑記錄到hash表中,當再次使用該命令時,shell直譯器首先會檢視hash表,存在將執行之,如果不存在,將會去PATH路徑下尋找,利用hash快取表可大大提高命令的呼叫速率
hash 命令常見用法
- hash 顯示hash快取
- hash -l 顯示hash快取,可作為輸入使用
- hash -p path name 將命令全路徑path起別名為name
- hash -t name 列印快取中name的路徑
- hash -d name 清除name快取
- hash -r 清除快取
5 命令別名
對於經常執行的較長的命令,可以將其定義成較短的別名,以方便執行
alias # 檢視當前定義的所有別名
alias name='commond' # 定義別名
alias name # 撤銷指定別名
unlias -a # 撤銷所有別名
注意:在命令列中定義的別名,只在當前shell程序中有效,如果想永久生效,要定義在配置檔案中
- ~/.bashrc 僅對當前使用者生效
- /etc/bashrc 對所有使用者生效
編輯配置檔案寫進的新配置不會立即生效,需要bash程序重新讀取配置檔案
source ~/.bashrc
source /etc/bashrc
6 常見命令
lscpu
cat /proc/cpuinfo
free
cat /proc/meminfo
lsblk
cat /proc/partitions
arch
uname -r
cat /etc/os-release
cat /etc/redhat-release
lsb_release -a
cat /etc/os-release
cat /etc/issue
lsb_release -a
lsb_release -is
lsb_release -cs
lsb_release -rs
halt
poweroff
reboot
shutdown -h/-r now/+n
shutdown -h/-r hh:mm
whoami
who
w
7 會話管理
screen -ls # 檢視所有會話
screen -S name # 建立會話
ctrl+a,d # 剝離會話
screen -x name # 加入會話
exit # 退出並關閉會話
screen -r name # 恢復某會話
Tmux 是一個終端複用器(terminal multiplexer),類似 screen,但是更易用,也更強大,Tmux 就是會話與視窗的"解綁"工具,將它們徹底分離,功能如下:
- 它允許在單個視窗中,同時訪問多個會話。這對於同時執行多個命令列程式很有用。
- 它可以讓新視窗"接入"已經存在的會話。
- 它允許每個會話有多個連線視窗,因此可以多人實時共享會話。
- 它還支援視窗任意的垂直和水平拆分
# 新建會話
tmux new -s session_name
# 分離會話
tmux detach
ctrl+b+d
# 接入會話
tmux attach -t <session-name>
# 殺死會話
tmux kill-session -t <session-name>
# 切換會話
tmux switch -t <session-name>
# 上下切分窗格
tmux split-window
# 左右切分窗格
tmux split-window -h
# 列出所有快捷鍵,及其對應命令
tmux list-keys
# 列出tmux所有命令及其引數
tmux list-commands
Ctrl+b %:#劃分左右兩個窗格
Ctrl+b ":#劃分上下兩個窗格"
Ctrl+b <arrow key>:游標切換到其他窗格。<arrow key>是指向要切換到的窗格的方向鍵,比如切換
到下方窗格,就按方向鍵↓
Ctrl+b ;:游標切換到上一個窗格
Ctrl+b o:游標切換到下一個窗格。
Ctrl+b {:當前窗格左移
Ctrl+b }:當前窗格右移
Ctrl+b Ctrl+o:當前窗格上移
Ctrl+b Alt+o:當前窗格下移
Ctrl+b x:關閉當前窗格
Ctrl+b !:將當前窗格拆分為一個獨立視窗
Ctrl+b z:當前窗格全屏顯示,再使用一次會變回原來大小
Ctrl+b Ctrl+<arrow key>:按箭頭方向調整窗格大小
Ctrl+b q:顯示窗格編號
tmux new-window # 新建視窗
tmux new-window -n <window-name> # 新建一個指定名的視窗
tmux select-window -t <window-number> # 切換到指定視窗
tmux select-window -t <window-name> # 切換到指定視窗
Ctrl+b c:建立一個新視窗,狀態列會顯示多個視窗的資訊。
Ctrl+b p:切換到上一個視窗(按照狀態列上的順序)。
Ctrl+b n:切換到下一個視窗。
Ctrl+b <number>:切換到指定編號的視窗,其中的<number>是狀態列上的視窗編號
Ctrl+b w:從列表中選擇視窗
Ctrl+b ,:視窗重新命名
8 echo輸出資訊
echo [-neE] [字串]
選項:
- -E (預設)不支援 \ 解釋功能
- -n 不自動換行
- -e 啟用 \ 字元的解釋功能
echo "$VAR_NAME"
啟用命令選項-e,若字串中出現以下字元,則特別加以處理,而不會將它當成一般文字輸出
- \a 發出警告聲
- \b 退格鍵
- \c 最後不加上換行符號
- \e escape,相當於\033
- \n 換行且游標移至行首
- \r 回車,即游標移至行首,但不換行
- \t 插入tab
- \ 插入\字元
- \0nnn 插入nnn(八進位制)所代表的ASCII字元
- \xHH插入HH(十六進位制)所代表的ASCII數字(man 7 ascii)
在終端中,ANSI定義了用於螢幕顯示的Escape螢幕控制碼,具有顏色的字元,其格式如下:
"\033[字元背景顏色;字型顏色m字串\033[0m"
\033[30m -- \033[37m 設定前景色
\033[40m -- \033[47m 設定背景色
#字元背景顏色範圍: 40--47
40:黑
41:紅
42:綠
43:黃
44:藍
45:紫
46:深綠
47:白色
#字型顏色: 30--37
30: 黑
31: 紅
32: 綠
33: 黃
34: 藍
35: 紫
36: 深綠
37: 白色
加顏色只是以下控制碼中的一種,下面是常見的一些ANSI控制碼:
\033[0m 關閉所有屬性
\033[1m 設定高亮度
\033[4m 下劃線
\033[5m 閃爍
\033[7m 反顯
\033[8m 消隱
\033[nA 游標上移n行
\033[nB 游標下移n行
\033[nC 游標右移n列
\033[nD 游標左移n列
\033[x;yH 設定游標位置x行y列
\033[2J 清屏
\033[K 清除從游標到行尾的內容
\033[s 儲存游標位置
\033[u 恢復游標位置
\033[?25l 隱藏游標
\033[?25h 顯示游標
\033[2J\033[0;0H 清屏且將游標置頂
9 bash快捷鍵
Ctrl + l 清屏,相當於clear命令
Ctrl + o 執行當前命令,並重新顯示本命令
Ctrl + s 阻止螢幕輸出,鎖定
Ctrl + q 允許螢幕輸出,解鎖
Ctrl + c 終止命令
Ctrl + z 掛起命令
Ctrl + a 游標移到命令列首,相當於Home
Ctrl + e 游標移到命令列尾,相當於End
Ctrl + f 游標向右移動一個字元
Ctrl + b 游標向左移動一個字元
Ctrl + xx 游標在命令列首和游標之間移動
Alt + f 游標向右移動一個單詞尾
Alt + b 游標向左移動一個單詞首
Ctrl + u 從游標處刪除至命令列首
Ctrl + k 從游標處刪除至命令列尾
Alt + r 刪除當前整行
Ctrl + w 從游標處向左刪除至單詞首
Alt + d 從游標處向右刪除至單詞尾
Alt + Backspace 刪除左邊單詞
Ctrl + d 刪除游標處的一個字元
Ctrl + h 刪除游標前的一個字元
Ctrl + y 將刪除的字元貼上至游標後
Alt + c 從游標處開始向右更改為首字母大寫的單詞
Alt + u 從游標處開始,將右邊一個單詞更改為大寫
Alt + l 從游標處開始,將右邊一個單詞更改為小寫
Ctrl + t 交換游標處和之前的字元位置
Alt + t 交換游標處和之前的單詞位置
Alt + # 提示輸入指定字元後,重複顯示該字元#次
10 檔案萬用字元
* 匹配零個或多個字元,但不匹配 "." 開頭的檔案,即隱藏檔案
? 匹配任何單個字元,一個漢字也算一個字元
~ 當前使用者家目錄
~mage 使用者mage家目錄
. 和 ~+ 當前工作目錄
~- 前一個工作目錄
[0-9] 匹配數字範圍
[a-z] 一個字母
[A-Z] 一個字母
[wang] 匹配列表中的任何的一個字元
[^wang] 匹配列表中的所有字元以外的字元
[^a-z] 匹配列表中的所有字元以外的字元
[:digit:]:任意數字,相當於0-9
[:lower:]:任意小寫字母,表示 a-z
[:upper:]: 任意大寫字母,表示 A-Z
[:alpha:]: 任意大小寫字母
[:alnum:]:任意數字或字母
[:blank:]:水平空白字元
[:space:]:水平或垂直空白字元
[:punct:]:標點符號
[:print:]:可列印字元
[:cntrl:]:控制(非列印)字元
[:graph:]:圖形字元
[:xdigit:]:十六進位制字元
11 安全刪除檔案
rm 雖然刪除了檔案,但是被刪除的檔案仍然可能被恢復,在安全要求較高的場景下,可以使用shred安全刪除檔案
- -z 最後一次覆蓋新增0,以隱藏覆蓋操作
- -v 能夠顯示操作進度
- -u 覆蓋後截斷並刪除檔案
- -n # 指定覆蓋檔案內容的次數(預設值是3次)
Tip
請,本文為筆者整理的學習筆記,僅供個人參考和梳理思路,錯漏之處請多多指導。
如,本文參考各種資源整理未,因此未申請原創宣告,如有侵權請聯絡刪除。
若,如果需要轉載請各位大佬標明出處,園子不大多多捧場。
另,本文僅做學習使用,請勿用於非法途徑。