1. 程式人生 > >shell介紹,命令歷史,命令補全和別名,通配符,輸入輸出重定向

shell介紹,命令歷史,命令補全和別名,通配符,輸入輸出重定向

重定向 輸入輸出 history

筆記內容:

l 8.1 shell介紹

l 8.2 命令歷史

l 8.3 命令補全和別名

l 8.4 通配符

l 8.5 輸入輸出重定向

筆記日期:2017.8.11

8.1 shell介紹

技術分享

Shell俗稱殼(用來區別於核),是指“提供使用者使用界面”的軟件(命令解析器)

shell類似於DOS下的command和後來的cmd.exe。它接收用戶命令,然後調用相應的應用程序。Linux下的shell有很多種,CentOS7默認shell為bash。

如果想安裝zsh、ksh可以使用命令搜索,然後選擇合適的版本安裝:

技術分享


同時shell又是一種程序設計語言。作為命令語言,它交互式解釋和執行用戶輸入的命令或者自動地解釋和執行預先設定好的一連串的命令;作為程序設計語言,它定義了各種變量和參數,並提供了許多在高級語言中才具有的控制結構,包括循環和分支。在排序算法中,shell是希爾排序的名稱。




8.2 命令歷史

技術分享


眾所周知CentOS中使用鍵盤向上方向鍵可以查看歷史使用過的命令,實際上這些歷史命令是在用戶家目錄下的一個叫.bash_history的文件中存放著,可以使用cat命令查看一下:

技術分享


使用history命令可以查看到這個文件存放了多少條歷史命令:

技術分享


這個文件最大可以存一千條歷史命令,這個數量是由一個HISTSIZE環境變量決定的:

技術分享


history -c命令可以把當前內存的歷史命令清空,這條命令僅清空內存中的歷史命令,.bash_history文件立的歷史命令不會被清空:

技術分享


只有當退出終端的時候,內存中的歷史命令才會保存到.bash_history文件裏。


etc目錄下的profile文件中可以定義HESTSIZE環境變量:

技術分享

修改完後可以使用source /etc/profile 命令讓文件生效。


如果想要記錄歷史命令的時候還能記錄這些命令的執行時間的話,可以重新賦值一下環境變量:

具體操作如下:

HISTTIMEFORMAT=“%Y/%m%d %H:%M:%S ”

技術分享

技術分享


因為以上定義環境變量方式只在當前終端下有效,如果打開新的終端就不存在此環境變量了,如果想要在所有的終端都生效的話,需要把這個環境變量配置進etc目錄下的profile文件中:

技術分享

修改完後,重新登錄終端就可以生效了。


想要永久保存.bash_history文件中的內容,只需要授予a權限即可:

技術分享


註意:如果不是正常退出終端的話,內存中的歷史命令會保存不全,或者不會被保存。

!!可以執行上一條執行的命令,例如我先執行一條ls命令然後再執行!!

技術分享


!+數字可以指定運行某條命令,例如我指定運行第10條命令:

技術分享


!+命令字符串的話,會倒序往上找到那個命令並執行:

技術分享




8.3 命令補全和別名

技術分享



敲一下Tab鍵可以補全命令或者文件目錄的名稱,當一個命令或文件目錄的名稱有一個以上時,按兩下Tab鍵可以列出這些命令的名稱和文件目錄的名稱:

技術分享


CentOS7可以自動補全命令的參數,但是默認是不支持的,需要安裝一個工具:

技術分享


安裝完這個包後,需要重啟操作系統後才能生效。

技術分享

技術分享


當一個命令太長的時候,可以給這條命令起一個簡化的別名,以方便使用:

技術分享


輸入alias可以查看系統裏的命令別名:

技術分享


用戶家目錄下的.bashrc文件裏只存放了最基本幾個命令別名:

技術分享


剩下的大部分別名相關文件都在etc目錄下的profile.d目錄裏放著:

技術分享


取消自定義的別名:

技術分享




8.4 通配符

技術分享



*表示通配,也就是任意字符都可以的意思:

技術分享

技術分享


?表示任意一個字符,僅限單個字符,一個以上的字符則不包括,*則是包括多個字符的:

技術分享


方括號裏可以指定一個範圍:

技術分享

技術分享

技術分享


大括號裏也可以指定一個範圍,類似於方括號的第二種用法,只不過大括號裏需要加逗號,相對於方括號看起來要直觀一些:

技術分享




8.5 輸入輸出重定向

> 就是把前面命令的輸出的內容輸入到後面這個文件中,會覆蓋後面那個文件本身的內容:

技術分享


>> 則不會覆蓋後面那個文件的內容,也就是追加的意思:

技術分享


2> 會把命令產生的錯誤信息輸出到指定的文件裏去,會覆蓋指定的文件的內容:

技術分享


2>> 則不會覆蓋指定的文件的內容,也就是追加的意思:

技術分享


&> 是結合了>2>,也就是錯誤信息和正確信息都會輸出到指定內容,並且會覆蓋指定文件本身的內容:

技術分享


&>> 就能追加內容:

技術分享


還有以下這種用法:

技術分享


< 輸入重定向,可以把右邊文件的內容輸入到左邊的命令裏面去:

技術分享


使用 < 輸入重定向時左邊必須是命令,如果是文件的話是不行的:

技術分享


本文出自 “12831981” 博客,請務必保留此出處http://12841981.blog.51cto.com/12831981/1972521

shell介紹,命令歷史,命令補全和別名,通配符,輸入輸出重定向