二十三、shell介紹、命令歷史、命令補全和別名、通配符、輸入輸出重定向
一、shell介紹
shell是系統跟計算機硬件交互使用的中間介質,它只是系統的一個工具。shell和計算機硬件之間還有一層東西——系統內核。若把計算機硬件比作人的軀體,那系統內核就是大腦,shell就是五官。用戶直接面對的不是計算機硬件而是shell,用戶把指令告訴shell,然後shell再傳輸給系統內核,接著內核再去支配計算機硬件去執行各種操作。
shell是一個命令解釋器,提供用戶和機器之間的交互。
每個用戶都可以有自己特定的shell。
centos7默認的shell為bash(Bourne Agin Shell)
系統裏還有zsh、ksh的shell,有細節差異。
shell還有自己特定的語法,比如邏輯判斷、循環。
二、命令歷史
history命令 查看命令歷史
/root/.bash_history 所在路徑
可以使用該命令查看存了多少條,該文件最大存一千條。
該命令由一個環境變量給它配置:HISTSIZE。可以echo $HISTSIZE查看到為1000,代表最大存1000條命令,這是系統內置的環境變量。出來的第1000條以後的命令,沒有存入命令歷史,暫時存在了內存中。
# history -c 把內存裏命令歷史清空,不能把配置文件給清空
只有退出當前終端的時候,命令才會存到配置文件裏面去,在終端裏的時候就是存在了內存的命令歷史裏。
定義環境變量HISTSIZE的配置文件:/etc/profile
進入後可以直接查找HISTSIZE即可,將數據可以更改為自己想定義的量。
更改保存後,必須執行# source /etc/profile命令,否則該變量不會生效,或者重新進終端也行。
# HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S " 使命令歷史有時間顯示。只在當前終端生效。Y:年份;m:月份;d:日期;H:小時;M:分鐘;S:秒鐘。
若想永久生效,將它寫入到配置文件/etc/profile中,放到HISTSIZE=1000下面一行。寫到配置文件後,保存退出,再重新進終端就可以驗證命令歷史是不是有時間顯示。
# chattr +a ~/.bash_history
永久保存,使命令歷史的配置文件直接追加不能刪除。若不正常退出,那命令就不會正常的保存到命令歷史裏面。
# !!命令歷史裏的最後一條命令
# !n n後跟數字,可以再執行一遍命令歷史裏的第n條命令。
# !echo 從後往前在命令歷史裏找以echo開頭的命令再執行一次,如!tree,等。
三、命令補全和別名
命令補全 tab鍵,敲一下補全,敲兩下搜索出以該命令開頭的2個以上的選項。可以補全命令和文件路徑。
命令參數補全:centos7支持,需要# yum install -y bash-completion。安裝這個包。centos6僅僅支持命令本身的補全,安裝完後還需要重啟系統才行。
命令參數如systemctl restart network.service。
# alias restartnet="systemctl restart network.service"
將這條長命令做一個別名。再使用時敲別名即可。
unalias解除別名。
別名位置:用戶家目錄下的.bashrc下和/etc/profile.d/下。自定義的別名在.bashrc下。
四、通配符
* 表示通配,不分字符,不分幾個
? 表示匹配一個字符,如ls ?.txt,會將.txt的文件全部列出來。
[ ] 示例:ls [0-3].txt或ls [123456].txt。寫一個範圍。
{ } 和[ ]類似,但是這個{ }裏要加逗號,如{1,2,3,4}
五、輸入輸出重定向
> 輸出重定向
> 把前面命令的輸出輸入到後面的文件裏面去。一個大於號會把後面的文件刪除掉將前面的輸出覆蓋後面的文件。所以一般用兩個>>,追加的意思,不會把原來的文件刪除。
2>,把命令產生的錯誤信息指定的輸入到一個文件去。2>>,錯誤信息追加重定向。
>+2>=&>,將正確和錯誤的信息輸出到後面的文件裏去。用&>表示即可。
< 輸入重定向,>的反向用法。左邊必須是命令,不能是文件反向輸入到文件。
二十三、shell介紹、命令歷史、命令補全和別名、通配符、輸入輸出重定向