天天看點

【51碼兒】【Linux學習筆記】第8章 Linux shell基礎知識

本筆記由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段。

繼續閱讀