* shell是一個命令解釋器,提供用戶和機器之間的交互。 * 支持特定語法,好比邏輯判斷、循環。 * 每一個用戶均可以有本身特定的shell。 * Centos7默認shell爲bash。 * 還有zsh、ksh
咱們在終端上敲過的命令,都有它的歷史記錄,好比此時按下向上鍵就會看到你以前最後輸入的一條命令,再按就再往前翻,這裏就開始學習認識命令歷史shell
使用history命令查看歷史命令;vim
[root@Ask-02 ~]# historycentos
這裏能夠看到我已經輸入過429條命令。bash
歷史命令是有個文件保存的,在root用戶的家目錄下,名爲.bash_history,它是一個隱藏文件因此別忘記小點;less
[root@Ask-02 ~]# ls /root/.bash_history
/root/.bash_history
[root@Ask-02 ~]# cat /root/.bash_historyide
該命令歷史環境變量系統設定最大保存1000條命令,能夠經過如下命令查看;學習
[root@Ask-02 ~]# echo $HISTSIZE
1000測試
在目前中輸入的命令還只是存在內存中,併爲已經寫入到命令歷史文件中,經過如下命令,能夠將當前輸入過(內存記憶)的命令記錄刪除;3d
[root@Ask-02 ~]# history -crest
這個時候再按向上的方向鍵,你就發現看不到你前面輸入過的命令了,而這個操做是不會刪除掉你命令歷史中的內容。
若是你以爲最大保存一千條命令不夠,能夠在如下路徑中的配置文件裏進行修改;
[root@Ask-02 ~]# vi /etc/profile
找到如下圖中這行將數量修改,這裏我將數值改成:5000
想要這個數值生效還須要從新進入終端,或者執行如下命令;
[root@Ask-02 ~]# source /etc/profile
[root@Ask-02 ~]# echo $HISTSIZE
5000
能夠看到數值已經變爲5000 。
目前當咱們輸入history命令的時候,顯示的僅僅是行號和命令,若是想要知道它操做的詳細時間,咱們能夠更改如下環境變量便可;
[root@Ask-02 ~]# HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "
[root@Ask-02 ~]# history
1 2018/01/10 18:07:50 vi /etc/profile
2 2018/01/10 18:12:13 cat /etc/profile
3 2018/01/10 18:13:55 source /etc/profile
4 2018/01/10 18:14:49 echo $HISTSIZE
5 2018/01/10 18:21:19 HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "
6 2018/01/10 18:21:28 history****
可是這樣的操做僅限於當前,只要退出重進後又恢復原來的樣子,想讓它永久生效,進入到profile配置文件中,在HISTSIZE數量值下面添加上剛纔那段參數便可。修改完別忘執行source命令。
[root@Ask-02 ~]# vim /etc/profile
[root@Ask-02 ~]# source /etc/profile
若是想要永久保存命令歷史記錄,那麼你能夠給文件加上隱藏權限,比如加上a權限,這樣就只能增長不能刪除,這時就算不設置最大數值它也不會被刪除;
[root@Ask-02 ~]# chattr +a ~/.bash_history
若是沒有正常的關閉終端,或者重啓終端,那以前登陸時使用過的命令將不被記錄到命令歷史文件裏。
!!:兩個歎號爲快速執行最後一條命令。
!n:n=(數字),該命令用於執行命令歷史中的第幾個命令,好比!400就是執行命令歷史中第400條的命令
!echo:歎號後更一個命令你個,會在命令歷史中重複執行一次距離歷史最近的一次(也是該命令最後執行的一次)這裏咱們拿echo命令打比方。
tab鍵:敲如下補全命令,敲兩下顯示包含當前輸入的字符的多個命令,好比ls敲兩下顯示出含有ls的多個命令,當我輸入lsb按一下tab鍵會補全lsblk這個命令;
[root@Ask-02 ~]# ls
ls lscgroup lsipc lsmcli lsns lsscsi lsusb.py
lsattr lscpu lslocks lsmd lsof lssubsys
lsblk lsinitrd lslogins lsmod lspci lsusb
[root@Ask-02 ~]# lsblk
tab補全用法不只能夠補全命令,還能夠補全文件路徑,在centos6的時候系統是不支持補全命令參數的,須要安裝了bash_completion包後,而Centos7是系統支持不全參數;
[root@Ask-02 ~]# yum install -y bash_completion //安裝完後須要重啓如下系統後纔會生效。
當你輸入一條命令時你以爲命令很長使用起來下降了效率,那麼你可使用自定義該命令使用alias命令;
[root@Ask-02 ~]# alias restartnet='systemctl restart network.service' //比咱們將systemctl restart network.service這條命令重命名爲restartnet
alias的自定義配置文件在etc下的profile.d裏,還有一個地方在root用戶的家目錄下;
[root@Ask-02 ~]# cd /etc/profile.d/
[root@Ask-02 profile.d]# ls
256term.csh colorgrep.csh flatpak.sh less.sh vte.sh
256term.sh colorgrep.sh lang.csh PackageKit.sh which2.csh
abrt-console-notification.sh colorls.csh lang.sh vim.csh which2.sh
bash_completion.sh colorls.sh less.csh vim.sh
[root@Ask-02 profile.d]# ls /root/.bashrc
/root/.bashrc
unalias:須要自定義的別名
[root@Ask-02 ~]# unalias restartnet
[*****:]當你使用星號的時候來查看的時候,你會獲得含有星號前或後的有關文件,好比;
[root@Ask-02 文檔]# ls ****.txt
1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 測試.txt
或者是
[root@Ask-02 文檔]# ls 測試
測試1.txt 測試2.txt 測試3.txt 測試4.txt 測試.txt
[?:]使用問號查看任意以一個字符爲名稱的文件
[root@Ask-02 文檔]# ls ?.txt
1.txt 2.txt 3.txt 4.txt 5.txt 6.txt
[0-9]:使用方括號,能夠列出一個範圍內的文件,好比1-3;
[root@Ask-02 文檔]# ls [1-3].txt
1.txt 2.txt 3.txt
{1,2}:使用花括號和方括號的用法類似,只是操做略有不一樣他是使用「,」來區分開的;
[root@Ask-02 文檔]# ls {1,2}.txt
1.txt 2.txt
輸入輸出重定
[>:]大於號,表示輸出將前者顯示的內容輸出寫入到後面的文件中去(注意寫入到後者的文件中原文件內容將被替換);
[root@Ask-02 文檔]# cat 1.txt
hello world
[root@Ask-02 文檔]# cat 1.txt >2.txt
[root@Ask-02 文檔]# cat 2.txt
hello world
[>>:]兩個大於號,表示追加,即將前者顯示的內容追加到後者文件中去且不會替換掉原文件的內容;
[root@Ask-02 文檔]# cat 1.txt >>2.txt
[root@Ask-02 文檔]# cat 2.txt
hello world
hello world
[2>:]大於號前面加個2表示錯誤輸出,即將前者執行的錯誤結果輸出到後者文件中去;
[root@Ask-02 文檔]# car 1.txt
bash: car: 未找到命令...
類似命令是: 'sar'
[root@Ask-02 文檔]# car 1.txt 2>3.txt
[root@Ask-02 文檔]# cat 3.txt
bash: car: 未找到命令...
類似命令是: 'sar'
[2>>:]表示追加輸出,即將前者執行的錯誤結果追加輸出到後者文件中去;
[root@Ask-02 文檔]# car 4.txt 2>>3.txt
[root@Ask-02 文檔]# cat 3.txt
bash: car: 未找到命令...
類似命令是: 'sar'
bash: car: 未找到命令...
類似命令是: 'sar'
[&>:]結合了正確和錯誤輸出的結果,寫入到後者文件中
[root@Ask-02 文檔]# cat 1.txt 8.txt &>5.txt
[root@Ask-02 文檔]# cat 5.txt
hello world
cat: 8.txt: 沒有那個文件或目錄
[>+2>:]能夠同時將一條命令的執行結果正確和錯誤輸出寫入不一樣的文件當中;
[root@Ask-02 文檔]# cat 1.txt 8.txt >2.txt 2>3.txt
[root@Ask-02 文檔]# cat 2.txt
hello world
[root@Ask-02 文檔]# cat 3.txt
cat: 8.txt: 沒有那個文件或目錄
[<:]將後邊的文件輸出到前面的命令中;
[root@Ask-02 文檔]# wc -l <5.txt2