8.1 shell介紹
8.2 命令歷史
8.3 命令補全和別名
8.4 通配符
8.5 輸入輸出重定向
8.6 管道符和做業控制
8.7/8.8 shell變量
8.9 環境變量配置文件
擴展
bashrc和bash_profile的區別 http://ask.apelearn.com/question/7719html
shell腳本中echo顯示內容帶顏色 http://www.cnblogs.com/lr-ting/archive/2013/02/28/2936792.htmllinux
exec的場景用來記錄日誌shell
source 腳本 -> 就是執行這個腳本.vim
cat 2.sh
#!/bin/bash
echo "children script PID is $$"
echo "now to children script."
export a=2
echo "in children, a=$a"
cat 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"
cat 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"centos
yum provides "/*/*bin/vim"bash
1、 shell介紹ide
Shell是一個命令解釋器,提供用戶和機器之間的交互
Shell支持特定語法,好比邏輯判斷、循環
每一個用戶均可以有本身特定的shell
CentOS7默認shell爲bash (Bourne Agin Shell)
還有zsh、ksh等centos7
2、命令歷史spa
咱們使用過的命令,就是命令歷史,會存放在用戶家目錄下 /root/.bash_history,能夠經過history,查看使用過的命令歷史, 這個命令歷史數量限制爲1000條.net
echo $HISTSIZE 系統內置的環境變量爲1000,最大保存1000條
history -c 能夠將當前內存中的命令歷史清空,可是不會清空/root/.bash_history裏面的命令
敲過的命令會在用戶正常退出終端時,保存到.bash_history文件中
vi /etc/profile 環境變量HISTSIZE 在/etc/profile 定義,找到HISTSIZE 並修改,執行source /etc/profile命令立刻生效
HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S" 定義環境變量,使history顯示時間日期
echo $HISTTIMEFORMAT 查看格式
該格式只適用於當前終端,若想環境變量生效,須要把HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S",在配置文件中vi/etc/profile添加 ,保存退出,而後執行source /etc/profile
想命令歷史永久保存並不被別人刪除,運行chattr +a ~/.bash_history (只能追加,不能刪除)
!! 表示執行最後一條命令
!n 表示運行第幾條命令(n表明數字)
!echo表示會在歷史命令中,從下向上找最近一次的以echo開頭的命令執行
3、命令補全和別名
按一次tab能夠補全一個命令、一個路徑或者是一個文件名,連續按兩次tab鍵,則把全部的命令或者文件名都列出來。在 centos7裏支持參數自動補全,須要安裝安裝包bash-completion;而後重啓系統(reboot)生效
yum install -y bash-completion
alias restartnet='systemctl restart network.service' 給systemctl restart network.service起個別名叫restartnet
能夠經過alias把一個經常使用且很長的命令取一個別名,若是不想用了,也可使用unalias取消別名,直 接執行alias命令,則會看到系統中全部的別名
alias存放:
第一個在用戶家目錄下.vi .bashrc 文件下
第二個在/etc/profile.d目錄下的colorgrep.sh、colorls.sh這些腳本中定義的
使用unalias能夠取消自定義別名,命令格式:unalias 別名
4、通配符
通配符 *,表示0個或多個字符
通配符?,表示任意一個字符
中括號[], [0-9a-zA-Z].txt表示0-9a-zA-Z範圍內的任意.txt文件
花括號{}, ls {1,2,3,a}.txt表示括號內任意.txt文件
5、輸入輸出重定向
> 輸出
< 輸入
cat 1.txt > 2.txt,大於號 > 表示將前面的命令輸出,直接輸入到後面的文件裏面去,這裏是指將1.txt的內容重定向到2.txt 裏面去,以前2.txt的內容會被刪除
cat 2.txt >> 3.txt,兩個大於號>>表示追加,不會刪除3.txt的內容,將2.txt的內容追加到3.txt裏面去。
lsad 2>a.txt 錯誤輸出, 2大於號表示將命令產生的錯誤信息輸入到一個文件裏去
lsaaa 2>> a.txt 表示把錯誤信息追加劇定向到a.txt
ls [12].txt adads.txt &>a.txt &> 把正確的和錯誤的信息輸入到a.txt中
ls wee.txt [12].txt &>>a.txt &>>把正確的和錯誤的信息追加到a.txt中
ls [12].txt tyr.txt > 2.txt 2>a.txt 表示將正確的信息輸入到2.txt 錯誤的輸入到a.txt
wc -l < 1.txt,表示把1.txt文件內容輸入重定向到命令wc -l中去,(左邊必須是命令,不能由文件到文件,不多用,瞭解便可)
6、管道符和做業控制
管道符|,把前面的命令輸出的結果交給後面的命令
cat 1.txt |wc -l
cat 1.txt |grep 'd'
命令wc -l :統計文件數量
命令grep: 用來過濾指定關鍵詞的命令,只要文件中含有關鍵詞,就會把這一行過濾出來
做業控制:
ctrl + z 臨時暫停一個正在執行的任務
可使用fg (foreground)命令恢復
若是暫停了多個任務,用jobs查看在後臺運行的任務
若是想從新調回,須要輸入fg [id],也可使用bg (background)命令放到後臺運行去,用法bg [id]
bg[id] = background把任務調到後臺運行
fg[id] =foreground把任務調至前臺運行
sleep 1000 sleep命令 讓機器休眠1000秒
sleep 100 & 後面加& 直接把任務放到後臺運行
ps aux | grep sleep 查看sleep進程
7、shell變量
env命令能夠查看經常使用的環境變量
set 命令不只能夠查看系統內置的環境變量,還能夠查看用戶自定義的變量
自定義變量
a=111
變量名規則
變量名能夠是字母、數字、下劃線,開頭不能是數字
變量的值有特殊符號時要用單引號括起來
變量的累加
用雙引號括起來
全局變量
使用echo $SSH_TTY查看當前所在終端
在終端1中定義一個變量,終端2是看不到的
’
bash是shell的一個子bash,經過pstree查看,若是沒有命令使用 : yum install -y psmisc 安裝
在第二個bash下,第一個bash設置的環境變量在第二個bash不生效
全局變量在子shell中生效,運行bash打開子shell
設置全局變量,使用 export a=linux 可讓變量在子shell中也生效
取消變量: unset a
8、環境變量配置文件
環境變量配置文件可分爲:系統層次配置文件和用戶層次配置文件
系統層次配置文件,全局生效(/etc下的文件):
一、/etc/profile用戶環境變量,交互,登陸才執行
二、/etc/bashrc用戶不用登陸,執行shell就生效
用戶層次配置文件(用戶家目錄下的文件):
一、~/.bashrc
二、~/.bash_profile
—般咱們不要編輯系統層次的配置文件,在有須要時,能夠編輯用戶層次的配置文件.bash_profile
source .bash_profile和 . .bash_profile做用同樣,加載配置文件裏的配置
~/.bash_history,用來記錄命令歷史
~/.bash_logout,用來定義用戶退出的時候須要作的一些操做
更改完成後使用 source .bash_profile 加載配置文件中的配置
PS1是在/etc/bashrc裏面定義的,用於定義命令左邊的字符串顯示
echo $PS1
W修改成w,會變成絕對路徑,PS1='\u@\h \w\$' 去掉[ ] ,PS1='<\u@\h \w> \$' [ ]換成< >,修改[ ]方括號普通用戶顯示$,root用戶顯示#
帶顏色顯示PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$'