第5周第3課:shell、命令歷史、通配符、重定向

8.1 shell介紹

Shell是一個命令解釋器,提供用戶和機器之間的交互,支持特定的語法,好比邏輯判斷、循環。每一個用戶均可以有本身特定的shell,CentOS7默認shell爲bash(Bourne Agin Shell),常見的還有zsh和ksh等。shell

8.2 命令歷史

  • 命令history

選項-c:清空內存中的命令,但不能刪除配置文件中的歷史命令。vim

Linux會記錄用戶執行過的命令。這些命令保存在用戶的家目錄的 .bash_history 文件中,預存1000條歷史命令。只有當用戶正常退出當前shell時,在當前shell中運行的命令纔會保存至 .bash_history 文件中。bash

  • 增長曆史命令的保存條數

[root@greenfinch ~]# echo $HISTSIZE 1000.net

環境變量HISTSIZE。該變量決定命令歷史保存的命令的數目。插件

用命令vim編輯 /etc/profile 文件,用/HIST關鍵詞搜出如下部分:rest

HOSTNAME=`/usr/bin/hostname 2>/dev/null`
HISTSIZE=1000

修改HISTSIZE的數值。:wq保存並退出後,系統還不能識別。用命令 source /etc/profile 重置,再 echo $HISTSIZE 查看系統反饋的數值。code

  • 更改history顯示格式 給查閱歷史命令時,列表清單顯示年-月-日,小時:分鐘:秒。
  1. 臨時顯示:直接爲‘HISTTIMEFORMAT’賦值。

HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S"內存

root@greenfinch ~]# echo $HISTTIMEFORMAT
[root@greenfinch ~]# HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S"
[root@greenfinch ~]# echo $HISTTIMEFORMAT
%Y/%m/%d %H:%M:%S
[root@greenfinch ~]# history
    1  2018/01/09 04:33:38history
    2  2018/01/09 04:33:52cat .bash_history
    3  2018/01/09 04:34:21ls -l .bash_history
    4  2018/01/09 04:37:20vi /etc/profile
    5  2018/01/09 04:39:11echo $HISTSIZE
    6  2018/01/09 04:39:39history
    7  2018/01/09 05:08:18echo $HISTSIZE
    8  2018/01/09 05:33:42echo $HISTTIMEFORMAT
    9  2018/01/09 05:34:00HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S"
   10  2018/01/09 05:34:12echo $HISTTIMEFORMAT
   11  2018/01/09 05:34:17history
  1. 永久顯示

將語句「HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S"」寫入history的配置文件 /etc/profile中。get

  • 永久保存歷史命令

給/root/.bash_history這個文件增長一個隱藏屬性a,即只能追加不能刪除:io

chattr +a /root/.bash_history

  • !!:表示執行上一條命令
  • !n:表示執行第n條命令(用history命令查看n)
  • !command:表示從最近的命令查看到以command開頭的命令並執行。

8.3 命令補全和別名

  • tab鍵:補全命令或路徑
  1. 敲一下:若是隻有一種狀況,就直接顯示補全完整命令或路徑。
  2. 敲兩下:若是有多種狀況,那麼敲兩下會把全部的可能列出來。
  • CentOS7系統支持的參數補全,須要安裝插件:yum -y install bash-completion。重啓系統後才能生效。

  • 命令alias:alias name="原命令"

  • unalias 命令別名:取消某個命令別名設置

例子:alias restartnet='systemctl restart network.service'

可是,重啓後別名就失效了,想要永久生效,操做以下:

vi ~/.bashrc 或cd /etc/profile.d/

alias別名配置文件存放在當前用戶home目錄下的.bashrc文件中和/etc/profile.d目錄下的相應文件中。

把上面的命令增長到該文件中,再 source /root/.bashrc

8.4 通配符

  • [ ] *表示不分字符,不分個數的匹配
  • [ ] ?表示匹配1個任意字符,包括數字和字母
  • [ ] [0-9]表示匹配0-9中的任意一個數字
  • [ ] [123]表示匹配1,2,3當中的任何一個數字
  • [ ] [a-zA-Z]表示匹配26個大小寫字母中的任何一個
  • [ ] {1,2,3}和[123]相似,區別在於","

8.5 輸入輸出重定向

  1. 「>」表示輸出重定向。如cat 1.txt > 2.txt,把1.txt的內容重定向到2.txt,2.txt中原來的內容會被刪除。

  2. 「>>」表示追加重定向。如cat 1.txt >> 2.txt,把1.txt的內容追加劇定向到2.txt,2.txt中原來的內容不會被刪除。

  3. 「2>」表示錯誤重定向。如 ls aaa.txt 2>err,將錯誤信息輸出到err中,也能夠用追加,如「2>>err」

[root@greenfinch ~]# lsaaa
-bash: lsaaa: 未找到命令
[root@greenfinch ~]# lsaaa 2> a.txt
[root@greenfinch ~]# cat a.txt
-bash: lsaaa: 未找到命令
[root@greenfinch ~]# lsaaa 2>> a.txt
[root@greenfinch ~]# cat a.txt
-bash: lsaaa: 未找到命令
-bash: lsaaa: 未找到命令
  1. &>1.txt 表示將正確和錯誤的信息,通通重定向輸出到1.txt中。也支持用追加的方式。
[root@greenfinch tmp]# ls [12].txt 3.txt &> a.txt
[root@greenfinch tmp]# cat a.txt
ls: 沒法訪問3.txt: 沒有那個文件或目錄
1.txt
2.txt


[root@greenfinch tmp]# ls [12].txt 3.txt &>> a.txt
[root@greenfinch tmp]# cat a.txt
ls: 沒法訪問3.txt: 沒有那個文件或目錄
1.txt
2.txt
ls: 沒法訪問3.txt: 沒有那個文件或目錄
1.txt
2.txt

e.g 組合應用「>」和「2>」

[root@greenfinch tmp]# ls [12].txt 3.txt > 1.txt 2> 31.txt
[root@greenfinch tmp]# cat 1.txt
1.txt
2.txt
[root@greenfinch tmp]# cat 31.txt
ls: 沒法訪問3.txt: 沒有那個文件或目錄

說明:使用ls命令查看 [12].txt 3.txt。1.txt和2.txt文件存在,可使用ls查看,3.txt不存在,使用ls查看會報錯。「> 1.txt 2> 31.txt」意思是將正確信息保存到1.txt,將錯誤信息保存到31.txt。

  1. 「<」表示輸入重定向。不支持文件重定向到文件,僅支持文件重定向到命令。
相關文章
相關標籤/搜索