shell介紹/命令歷史/命令補(bǔ)全/通配符/輸出輸入重定向

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è)文件或目錄

[<:]將后邊的文件輸出到前面的命令中;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容