shell、tab、通配符、輸出輸入重定向

shell 基礎

shell

shell是一個命令解析器,提供用戶和機器之間的交互,相似於DOS下的command.com和後來的cmd.exe。它接收用戶命令,而後調用相應的應用程序。 支持特定語法,好比邏輯判斷,循環等。CentOS 默認的shell是bash ,若是有須要使用zsh,ksh能夠使用yum install zsh/ksh 安裝shell

命令歷史history

  • 存放命令歷史的文件叫.bash_history 這個文件在用戶的家目錄下,默認最多記錄1000條,當正常退出終端時,當前敲的命令歷史纔會從內存寫到該文件中。命令歷史的最大記錄量由$HISTSIZE變量控制,而定義關於history的變量的文件是/etc/frofile。
[root@localhost ~]# echo $HISTSIZE
1000
[root@localhost ~]# vim /etc/profile
HOSTNAME=`/usr/bin/hostname 2>/dev/null`
HISTSIZE=5000
if [ "$HISTCONTROL" = "ignorespace" ] ; then
    export HISTCONTROL=ignoreboth
else
    export HISTCONTROL=ignoredups
fi

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
  • vim /etc/profile的內容有不少,上面只是選取了與history有關的內容 能夠經過修改HISTSIZE=1000這個選項的數值來更改最大記錄量。不過更改完了以後須要運行source /etc/profile 來使配置生效。
[root@localhost ~]# vim /etc/profile
[root@localhost ~]# !echo
echo $HISTSIZE
1000
[root@localhost ~]# source /etc/profile
[root@localhost ~]# !echo
echo $HISTSIZE
5000
  • 若是不想將本次操做的命令歷史寫入到.bash_history下能夠使用history -c 來清除本次操做的命令記錄(已寫入文件的不會受影響)。若是想查看命令歷史也想知道命令是何時執行的,能夠在/etc/profile中寫入一行HISTTIMEFORMAT="%Y/%m/%d%H:%M:%S"
[root@localhost ~]# history 
    1  2018/06/29  02:03:21ifconfig\
    2  2018/06/29  02:03:21ifconfig
    3  2018/06/29  02:03:21yum install -y tree
    4  2018/06/29  02:03:21tree
    5  2018/06/29  02:03:21clear
    6  2018/06/29  02:03:21cd 
    7  2018/06/29  02:03:21cd
    8  2018/06/29  02:03:21pwd
    9  2018/06/29  02:03:21cd /etc/sysconfig

顯示的內容就是如上所示的了。vim

  • 若是想記錄全部的歷史命令,能夠給.bash_history 加一個a權限(只能追加內容) chattr +a ~/.bash_history 就能夠了。
  • !!兩個歎號表示上一條命令
  • !n(n是數字)第n條命令
  • !command 從命令歷史中尋找最近一次運行的以command開頭的命令

###別名 alias 命令能夠查看系統中全部的作過別名的命令bash

[root@localhost ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

也能夠使用這個命令作別名,舉個例子,重啓網絡服務systemctl restart network.service ,能夠給他作一個簡單的別名 ,alias restartnet='systemctl restart network.service'網絡

[root@localhost ~]# alias restartnet='systemctl restart network.service'
[root@localhost ~]# alias restartnet
alias restartnet='systemctl restart network.service'

命令補全

tab鍵 ,在咱們使用命令或者敲路徑的時候用tab鍵會有兩種狀況出現:spa

  • 命令或路徑的前幾個字母(咱們敲擊出來的)是惟一的,系統會自動幫助補全
  • 命令或路徑的前幾個字母(咱們敲擊出來的)不是惟一的,須要按tab鍵兩下,會列出跟敲擊出的字母匹配的選項。
  • 默認狀況下tab鍵不會補全參數,若是須要能夠安裝如下: yum install bash-complation ,重啓系統後,tab鍵就能夠補全參數了(仍是得遵照上面兩條的規則)。

通配符

以前咱們使用過命令#ls *.txt#來列出當前目錄下以.txt結尾的全部的文件,其中的星號就是通配符。rest

  • *.txt 表示全部的以.txt結尾的文件code

  • txt.*表示全部的以txt.開頭的文件內存

  • *.txt*表示全部的中間帶有.txt的文件cmd

  • ?.txt 中的問好也是通配符,表示1個任意的字符(僅僅是一個)io

  • [0-3].txt 這個[]也是通配符,表示符合0-3這四個字符的文件(也能夠表示成[0123]),例如:1.txt就符合,5.txt就不符合。[]中的內容能夠使0-9,a-z ,A-Z 之間的閾值。

  • {1,2}.txt其中{}也是通配符,跟[]相似,可是它們的數字之間有,間隔。這個也比較嚴謹。

輸入輸出重定向

  • 輸出重定向符號>,例如顯示1.txt的內容並輸出到2.txt文件中 cat 1.txt >2.txt這個用法會把原先2.txt文件的內容刪除,並把1.txt的內容寫入到2.txt中。
  • 追加劇定向符號>>,例如把1.txt的內容顯示並追加到2.txt文件中 cat 1.txt >2.txt這個用法不會刪除2.txt的內容,只會把1.txt的內容追加到2.txt中
[root@localhost tmp]# vi 1.txt 
[root@localhost tmp]# vi 2.txt
[root@localhost tmp]# cat 1.txt 
lilililililili
[root@localhost tmp]# cat 2.txt
chaochaochaochaochaochaochao
[root@localhost tmp]# cat 1.txt >2.txt
[root@localhost tmp]# cat 2.txt 
lilililililili
[root@localhost tmp]# cat 1.txt >>2.txt 
[root@localhost tmp]# cat 2.txt 
lilililililili
lilililililili
  • 錯誤輸出重定向2>,好比咱們執行一條命令時,命令報錯,會把錯誤信息輸出到指定的文件中(會把指定的文件中的內容刪除)。
  • 錯誤追加劇定向2>>,好比咱們執行一條命令式,命令報錯,會把錯誤信息追加到指定的文件中(不會刪掉指定文件中的內容)
[root@localhost tmp]# cat 3.txt
cat: 3.txt: 沒有那個文件或目錄
[root@localhost tmp]# cat 3.txt 2>1.txt 
[root@localhost `
tmp]# cat 1.txt 
cat: 3.txt: 沒有那個文件或目錄
[root@localhost tmp]# cat 4.txt 2>>1.txt 
[root@localhost tmp]# cat 1.txt 
cat: 3.txt: 沒有那個文件或目錄
cat: 4.txt: 沒有那個文件或目錄

上面代碼顯示,當咱們cat不存在的3.txt時會提示錯誤,但咱們在命令中加上了2>1.txt錯誤輸出重定向符號,發現,錯誤信息把1.txt文件中原先的內容替換掉了。而後咱們在cat不存在的4.txt時加上了2>>1.txt參數,發現新的報錯信息被追加到了1.txt中。

  • 有一個將正確信息和錯誤信息(仍是上面那個例子)輸出/追加到一個文件中的參數 cat 2.txt 3.txt &>1.txt
[root@localhost tmp]# cat 2.txt 3.txt &>1.txt 
[root@localhost tmp]# cat 1.txt 
lilililililili
lilililililili
cat: 3.txt: 沒有那個文件或目錄
[root@localhost tmp]# cat 2.txt 3.txt &>>1.txt 
[root@localhost tmp]# cat 1.txt 
lilililililili
lilililililili
cat: 3.txt: 沒有那個文件或目錄
lilililililili
lilililililili
cat: 3.txt: 沒有那個文件或目錄
  • 上面這個能夠將正確的信息和錯誤信息分開輸入到不一樣的文件中
[root@localhost tmp]# cat 1.txt 4.txt>3.txt 2>2.txt 
[root@localhost tmp]# cat 3.txt 
lilililililili
lilililililili
cat: 3.txt: 沒有那個文件或目錄
lilililililili
lilililililili
cat: 3.txt: 沒有那個文件或目錄        這些內容是1.txt中的內容不要搞迷糊了
[root@localhost tmp]# cat 2.txt 
cat: 4.txt: 沒有那個文件或目錄        這個是錯誤信息輸出到了2.txt中

追加跟上面用法同樣,不過是把>換成了>>

輸入重定向 <

這個符號不經常使用 是把後面的內容輸出給前面的命令來執行,瞭解一下就好

相關文章
相關標籤/搜索