shell介紹
* shell是一個(gè)命令解釋器,提供用戶和機(jī)器之間的交互。* 支持特定語(yǔ)法,比如邏輯判斷、循環(huán)。* 每個(gè)用戶都可以有自己特定的shell。* Centos7默認(rèn)shell為bash。* 還有zsh、ksh
命令歷史
我們?cè)诮K端上敲過的命令,都有它的歷史記錄,比如此時(shí)按下向上鍵就會(huì)看到你之前最后輸入的一條命令,再按就再往前翻,這里就開始學(xué)習(xí)認(rèn)識(shí)命令歷史
使用history命令查看歷史命令;
[root@localhost vhost]# history
歷史命令是有個(gè)文件保存的,在root用戶的家目錄下,名為.bash_history
[root@localhost vhost]# ls /root/.bash_history
/root/.bash_history
[root@localhost vhost]#? cat /root/.bash_history
該命令歷史環(huán)境變量系統(tǒng)設(shè)定最大保存1000條命令,可以通過以下命令查看;
[root@localhost vhost]# echo $HISTSIZE
1000
在目前中輸入的命令還只是存在內(nèi)存中,并為已經(jīng)寫入到命令歷史文件中,通過以下命令,可以將當(dāng)前輸入過(內(nèi)存記憶)的命令記錄刪除;
[root@localhost vhost]# history -c
這個(gè)時(shí)候再按向上的方向鍵,你就發(fā)現(xiàn)看不到你前面輸入過的命令了,而這個(gè)操作是不會(huì)刪除掉你命令歷史中的內(nèi)容。
如果你覺得最大保存一千條命令不夠,可以在以下路徑中的配置文件里進(jìn)行修改;
HOSTNAME=`/usr/bin/hostname 2>/dev/null`
HISTSIZE=1000
想要這個(gè)數(shù)值生效還需要重新進(jìn)入終端,或者執(zhí)行以下命令;
[root@localhost vhost]# source /etc/profile
目前當(dāng)我們輸入history命令的時(shí)候,顯示的僅僅是行號(hào)和命令,如果想要知道它操作的詳細(xì)時(shí)間,我們可以更改以下環(huán)境變量即可;
[root@localhost vhost]# HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "
[root@localhost vhost]# history
但是這樣的操作僅限于當(dāng)前,只要退出重進(jìn)后又恢復(fù)原來(lái)的樣子,想讓它永久生效,進(jìn)入到profile配置文件中,在HISTSIZE數(shù)量值下面添加上剛才那段參數(shù)即可。修改完別忘執(zhí)行source命令。
[root@localhost ~]# vim /etc/profile
[root@localhost ~]# source /etc/profile
[root@localhost ~]#? history
如果想要永久保存命令歷史記錄,那么你可以給文件加上隱藏權(quán)限,好比加上a權(quán)限,這樣就只能增加不能刪除,這時(shí)就算不設(shè)置最大數(shù)值它也不會(huì)被刪除;
[root@localhost ~]# chattr +a ~/.bash_history
如果沒有正常的關(guān)閉終端,或者重啟終端,那之前登錄時(shí)使用過的命令將不被記錄到命令歷史文件里。
!!:兩個(gè)嘆號(hào)為快速執(zhí)行最后一條命令。
!n:n=(數(shù)字),該命令用于執(zhí)行命令歷史中的第幾個(gè)命令,比如!400就是執(zhí)行命令歷史中第400條的命令
!echo:嘆號(hào)后更一個(gè)命令你個(gè),會(huì)在命令歷史中重復(fù)執(zhí)行一次距離歷史最近的一次(也是該命令最后執(zhí)行的一次)這里我們拿echo命令打比方。
命令補(bǔ)全和別名
tab鍵:敲以下補(bǔ)全命令,敲兩下顯示包含當(dāng)前輸入的字符的多個(gè)命令,比如ls敲兩下顯示出含有ls的多個(gè)命令,當(dāng)我輸入lsb按一下tab鍵會(huì)補(bǔ)全lsblk這個(gè)命令;
[root@localhost ~]# ls
ls? ? ? ? lsattr? ? lsblk? ? lscpu? ? lsinitrd? lsipc? ? lslocks? lslogins? lsmod? ? lsns? ? ? lspci? ? lsscsi
[root@localhost ~]# lsblk
tab補(bǔ)全用法不僅可以補(bǔ)全命令,還可以補(bǔ)全文件路徑,在centos6的時(shí)候系統(tǒng)是不支持補(bǔ)全命令參數(shù)的,需要安裝了bash_completion包后,而Centos7是系統(tǒng)支持補(bǔ)全參數(shù);
[root@localhost ~]# yum install -y bash_completion //安裝完后需要重啟以下系統(tǒng)后才會(huì)生效。
當(dāng)你輸入一條命令時(shí)你覺得命令很長(zhǎng)使用起來(lái)降低了效率,那么你可以使用自定義該命令使用alias命令;
[root@localhost ~]#?alias restartnet='systemctl restart network.service' //比我們將systemctl restart network.service這條命令重命名為restartnet
alias的自定義配置文件在etc下的profile.d里,還有一個(gè)地方在root用戶的家目錄下;
[root@localhost ~]# ls /etc/profile.d/
unalias:刪除自定義的別名
[root@localhost ~]#? unalias restartnet
通配符
[*****:]當(dāng)你使用星號(hào)的時(shí)候來(lái)查看的時(shí)候,你會(huì)得到含有星號(hào)前或后的有關(guān)文件,比如;
[root@localhost hch]# ls *.txt
14.txt? 1.txt? 2.txt? 3.txt? 4.txt
[?:]使用問號(hào)查看任意以一個(gè)字符為名稱的文件
[root@localhost hch]# ls ?.txt
1.txt? 2.txt? 3.txt? 4.txt
[root@localhost hch]# ls ??.txt
14.txt
[0-9]:使用方括號(hào),可以列出一個(gè)范圍內(nèi)的文件,比如1-3;
[root@localhost hch]# ls [1-3].txt
1.txt? 2.txt? 3.txt
{1,2}:使用花括號(hào)和方括號(hào)的用法相似,只是操作略有不同他是使用“,”來(lái)區(qū)分開的;
[root@localhost hch]# ls {1,2}.txt
1.txt? 2.txt
輸入輸出重定
[>:]大于號(hào),表示輸出將前者顯示的內(nèi)容輸出寫入到后面的文件中去(注意寫入到后者的文件中原文件內(nèi)容將被替換);
[root@localhost hch]# cat 1.txt
hello world!
[root@localhost hch]# cat 1.txt >2.txt
[root@localhost hch]# cat 2.txt
hello world!
[>>:]兩個(gè)大于號(hào),表示追加,即將前者顯示的內(nèi)容追加到后者文件中去且不會(huì)替換掉原文件的內(nèi)容;
[root@localhost hch]# cat 1.txt >> 2.txt
[root@localhost hch]# cat 2.txt
hello world!
hello world!
[2>:]大于號(hào)前面加個(gè)2表示錯(cuò)誤輸出,即將前者執(zhí)行的錯(cuò)誤結(jié)果輸出到后者文件中去;
[root@localhost hch]# car 1.txt
-bash: car: 未找到命令
[root@localhost hch]# car 1.txt 2> 3.txt
[root@localhost hch]# cat 3.txt
-bash: car: 未找到命令
[2>>:]表示追加輸出,即將前者執(zhí)行的錯(cuò)誤結(jié)果追加輸出到后者文件中去;
[root@localhost hch]# car 4.txt 2>>3.txt
[root@localhost hch]# cat 3.txt
-bash: car: 未找到命令
-bash: car: 未找到命令
[&>:]結(jié)合了正確和錯(cuò)誤輸出的結(jié)果,寫入到后者文件中
[root@localhost hch]# cat 1.txt 8.txt &>5.txt
[root@localhost hch]# cat 5.txt
cat: 8.txt: 沒有那個(gè)文件或目錄
[>+2>:]可以同時(shí)將一條命令的執(zhí)行結(jié)果正確和錯(cuò)誤輸出寫入不同的文件當(dāng)中;
[root@localhost hch]# cat 1.txt 8.txt >2.txt 2>3.txt
[root@localhost hch]# cat 2.txt
hello world!
[root@localhost hch]# cat 3.txt
cat: 8.txt: 沒有那個(gè)文件或目錄
[<:]將后邊的文件輸出到前面的命令中;