本筆記由51碼兒(www.51mar.com)提供
8.1shell介紹
shell是一個指令解釋器,提供人機互動。
支援特定文法。
每個使用者都可以有自己特定的shell(bash)。
CentOS7預設bash(Bourne Agin Shell)。
其他還有zsh、ksh等。
8.2指令曆史
指令曆史存放于~/.bash_history檔案下。
history 檢視之前用過的指令,預設儲存最近1000條,由變量HISTSIZE設定條數,HISTSIZE可以到配置檔案/etc/profile中去配置,配置後需要source才會生效。
history -c 清空目前記憶體中的指令曆史,不能清除~/.bash_history中的指令。
目前的指令,存放于記憶體中,在退出終端的時候,才會儲存到.bash_history檔案中。
HISTTIMEFORMAT=”%Y/%m/%d %H:%M:%S” 設定顯示時間格式,可在/etc/profile中配置永久生效。配置後,history将顯示指令執行的時間。
chattr +a ~/.bashhistory 加a權限,隻能追加,不能删除,使指令曆史永久儲存。
若不正常退出終端,指令曆史儲存将存在差錯。
!! 執行上一條指令。
!n n為數字,執行指令曆史中的第n條指令。
!word 執行最近的以word開頭的指令。
8.3指令補全和别名
Tab鍵,敲一下(唯一自動補全),敲兩下(多個列出清單)。
CentOS7支援自動補全指令參數。需安裝相關包:yum install -y bash-completion,然後reboot重新開機系統才生效。
指令别名alias command=’comand blablabla’
alias 可檢視系統中的指令别名。
~/.bashrc和/etc/profile.d/目錄下的檔案中,可以配置指令别名。
unalias command 取消自定義的command指令别名。
8.4通配符
-
比對任意多個任意字元。
? 比對一個任意字元。
[0-3]或[0123] 比對方括号中的任意一個字元。[0-9a-zA-Z]
{1,2,3,a} 比對花括号中的任意一個。
8.5輸入輸出重定向
\> 輸出重定向。
command >FILE 将command的正确輸出,寫到FILE中。
command >>FILE 将command的正确輸出,追加到FILE中。
command 2>FILE 将command運作輸出的錯誤資訊,寫到FILE中。
command 2>>FILE 将command運作輸出的錯誤資訊,追加到FILE中。
正确+錯誤:>+2>用&>表示。
command &>FILE 将command運作輸出的正确和錯誤資訊,寫到FILE中,同樣支援追加command &>>FILE。
command >FILE1 2>FILE2 可将正确和錯誤的資訊分開儲存,多用于寫Shell腳本中。如:
ls 1.txt 2.txt >t.txt 2>e.txt
< 輸入重定向(幾乎用不到)。
command <FILE 将FILE檔案内容,輸入到command指令中。如:
wc -l <1.txt 檢視1.txt中内容的行數。
wc -l >1.txt 是把wc -l得到的正确輸出,寫到1.txt中。
8.6管道符和作業控制
| 管道符。
command1 |command2 将command1輸出的内容,交給command2。
作業控制:
Ctrl+Z 暫停一個任務。
fg 将背景的任務調到前台。如果背景有多個任務,可用跟編号fg 1,fg 2……來将相應任務調到前台,若多個背景任務,不加編号時,調出最後一個。
bg 将前台任務調到背景。
對于fg,bg指令,一個終端查不到另一個終端的任務,但是可以ps aux查到程序,如:ps aux |grep sleep 檢視sleep任務的程序。
jobs 列出所有停止的任務,可檢視到指令編号。
vmstate t(間隔時間) n(重新整理次數) 監控系統狀态。
sleep N 系統暫停N秒,什麼也不做。
指令後加&符号,直接将指令丢到背景執行。如:sleep 100 &。
8.7shell變量(上)
env 檢視系統變量。變量名通常為大寫。
set 檢視變量,包括使用者自定義變量。
自定義變量:
變量名=變量值 設定變量。
echo $變量名 顯示變量。
變量名規則:字母、數字、下劃線,首位不能為數字。
變量值有特殊符号時需要用單引号括起來,單引号可以對特殊符号脫義。雙引号不能脫義。
8.8shell變量(下)
全局變量(向下生效,pstree可檢視):
export 變量名=變量值 設定全局變量。
unset 變量名 取消變量。
8.9環境變量配置檔案
系統層次:/etc/profile、/etc/bashrc 一般不更改其内容。
使用者層次:~/.bashrc、~/.bash_profile、~/.bash_history、~/.bash_logout(定義退出系統時的操作)
profile在使用者登入時自動加載;bashrc不需要登入,在執行shell的時候自動調用。
變量PS1可設定指令前的顯示。PS2設定進入另一個指令中的顯示。
8.10shell特殊符_cut指令
* 比對任意個任意字元。
? 比對任意一個字元。
# 注釋字元。
\ 脫義字元(設定變量時,對特殊字元,可用\取代單引号)。
cut 分割内容。
-d 指定分割符。
-f 指定段号。
-c 指定第幾個字元。
應用示例:cat /etc/passwd |head -5 |cut -d “:” -f 1,2 讀取/etc/passwd,顯示前5行,以“:”為分割符,截取1,2段。