shell是一個命令解釋器,它在操做系統的最外層,負責直接與用戶對話,把用戶的輸入解釋給操做系統,並處理各類各樣的操做系統的輸出結果,輸出到屏幕返回給用戶。這種對話方式能夠是交互的方式(從鍵盤輸入命令,能夠當即獲得shell的迴應),或非交互(腳本)的方式。換句話說,Shell是一個命令行解釋器,它爲用戶提供一個像Linux內核發送請求以便運行程序的界面系統級程序,用戶能夠用Shell來啓動,掛起,中止甚至是編寫一些程序。 Shell仍是一個功能至關請打的編程語言,易編寫,易調試,靈活性較強。Shell是解釋執行的腳本語言,在Shell中能夠直接調用Linux系統命令。html
每一個用戶均可以有本身特定的shellshell
CentOS7默認shell爲bash(Bourne Agin Shell)編程
還有zsh、ksh等,這shell默認是不安裝的,使用須要進行安裝centos
shell支持特定語法,好比邏輯判斷、循環(if for whell)bash
命令歷史查查看編程語言
使用過的命令歷史存放在用戶家目錄下的.bash_history文件中,能夠經過history命令查看命令使用歷史測試
歷史命令存儲centos7
1.能夠經過:echo $HISTSIZE 查看多能夠存儲多少條歷史命令,默認爲:1000條。操作系統
2.history -c 能夠清除歷史命令,可是不能清除.bash_history文件中的歷史命令.net
3.歷史記錄只有退出終端的時候纔會保存到.bash_history文件中,非正常關閉終端使用過的命令不會保存。
4.環境變量HISTSIZE的大小能夠在/etc/profile中修改HISTSIZE參數,改完source或者退出終端從新登陸生效
命令歷史格式修改
一、修改前
二、臨時修改
HISTTIMEFORMAT="%Y/%m/%d %H:%M"
三、永久修改
/etc/profile中加入:
HISTTIMEFORMAT="%Y/%m/%d %H:%M "
命令永久保存
若是想把命令永久保存,不想別人刪除,那能夠把.bash_history文件加上a權限,使文件只能添加不能刪除。
chattr -a ~/.bash_history
命令歷史快捷鍵
!!: 執行最後一次執行的命令
!+ 數字: 執行命令歷史中對應數字的命令
!+xx: 執行以xx開頭的最後一條命令
centos7中參數補全
centos6中只能tab進行命令補全,centos7中能夠支持參數補全。
默然是不支持的須要安裝bash-completion,ctrl+d退出,從新登陸後生效。
安裝: yum -y install bash-completion
重啓:reboot
完成後測試:
命令別名
若是以爲有些命令比較長和繁瑣,可使用給這些命令起一個別名,起別名的命令:alias
用法:alias 別名='具體命令'
查看已有的別名
命令:alias
取消自定義的別名
命令:unalias 別名
"*" :表示0或者多個任意字符
如:*.txt 列出全部以.txt結尾文件
? : 一個任意字符
如:?.txt 列出一個任意字符的.txt文件
如:[123].txt 會列出1.txt 2.txt 3.txt
它也能夠支持字母
示例:
列出:1-9
列出:1-9 和a-z
{} :列出花括號裏面開頭
如:{}.txt: 列出花括號內開頭帶有.txt
示例:
輸出重定向:
1.> :左邊輸出重定向到右邊
如:cat 1.txt > 2.txt 會把1.txt的內容重定向到2.txt中
2.>>:左邊輸出追加到右邊
如:at 1.txt >> 2.txt 會把1.txt的內容追加到2.txt中
3.2> :錯誤重定向
如:輸入一個錯誤的命令,加上2> 它會把錯誤信息重定向到2.txt中。
4.2>>: 錯誤追加劇定向
5.&> 是 > 和 2> 結合 ,會把正確和錯誤信息所有重定向。
輸入重定向
把右邊的文件輸入到左邊的命令中
如:把2.txt的內容輸入到wc -l命令中進行統計行數
管道符
就是把前一個命令輸出結果傳到後面的命令
示例:把cat的輸出結果傳給wc進行統計
做業控制
做業控制:ctrl + z 能夠暫停一個任務
好比說正在vi編輯一個文件,能夠ctrl + z暫停vi編輯,這時能夠在控制檯繼續使用其它操做:
若是想繼續進行vi編輯可使用fg命令從新調用回來繼續執行:
有多個任務在暫停中,可使用jobs命令查看:
多個暫停的任務時,指定任務恢復:
fg id號 ,若是不指定id號那就是恢復最後一次運行的。
暫停任務放到後臺繼續運行:
以下圖sleep 300 任務是暫停狀態,咱們使用bg 命令把它丟到後臺繼續運行,再查看它的狀態已經變爲運行中
在命令後面加入&也可使命令直接在後臺執行
列出系統環境變量
env命令:列出系統預設的所有系統變量
set命令:set不只能夠顯示系統預設的環境變量,還能夠顯示用戶自定義的變量
自定義變量
自定義變量命名規則
a=b,a爲變量名,b爲值,等號兩邊不能有空格。
變量名只能由字母,數字以及下劃線組成,並且不能以數字開頭。
當變量值帶有特殊字符時,須要加上單引號。
變量內容自己就帶有單引號,這個時候須要加上雙引號。
示例:
當變量值有特殊符號時須要使用單引號(''):
變量累加:
全局變量
當打開多個終端,在其中一個終端中設置一個環境變量,在另一個終端中是查看不到的。
echo $SHH_TTY:能夠經過此命令查看當前在哪一個終端下。
終端1:
終端2:
pstree查看當前所在位置
若是當前shell中運行bash命令,則會進入一個新的shell中,這個shell是原來shell的子shell
咱們能夠用pstree命令來查看當前所在的位置(若是沒安裝則先安裝:yum install -y psmisc)
exprot命令
以上這種狀況是本地環境變量,只在當前終端下生效,若是想要變爲全局變量則須要使用:exprot命令
示例:
另一個終端查看:
再從新打開一個終端:
取消環境變量
unset 變量名
環境變量配置文件兩個維度
系統環境變量配置文件分兩個維度:系統層次和用戶層次
系統層
/etc/profile 用戶登陸的時候會加載到
/etc/bashrc 用戶或系統執行shell腳本時候,會用調用這個文件裏的一些配置
通常不要編輯,若是須要全部用戶使用的全局變量則修改/etc/profile
用戶層
~/.bashrc
~/.bash_profile
~/.bash_history 記錄歷史命令
~/.bash_logout 用戶退出時作的一些操做,如:想退出時刪除歷史命令,把刪除命令放入這個文件中便可。
是環境變量生效
source 配置文件
或者 . 配置文件
PS1環境變量
PS1是來定義系統提示符的系統變量,通常系統默認的形式是:[username@host 工做目錄]$.
root用戶顯示:
普通用戶:
root是以#結尾,普通用戶是$結尾。
echo $PS1查看:
修改:
修改顯示的絕對路徑
修改顯示顏色
PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$'
ps2模式
查看PS2模式:
profile只用用戶登陸纔會生效
bashrc用戶不登陸也會生效
source命令
source 命令的另外一種寫法是點符號,用法和 source 相同
功能:使Shell讀入指定的Shell程序文件並依次執行文件中的全部語句
source命令和exec的區別
經過三個腳本測試:
2.sh
#!/bin/bash echo "children script PID is $$" echo "now to children script." export a=2 echo "in children, a=$a"
source.sh
#!/bin/bash echo "fater script PID is $$" echo "fater script, set a is 1" export a=1 echo "it will source ./2.sh" source ./2.sh echo "now to father script." echo "fater script, a is $a"
exec.sh
#!/bin/bash echo "fater script PID is $$" echo "fater script, set a is 1" export a=1 echo "it will exec ./2.sh" exec ./2.sh echo "fater script, a is $a"
使用s是不會產生新的pid,souce腳本中的變量跟着進入到父腳本中。會把子腳本中的變量帶出來
exec場景:記錄日誌