1. 程式人生 > >2018.4.20 五周第三次課

2018.4.20 五周第三次課

shell介紹 命令歷史 命令補全和別名 alias 輸入輸出重定向

shell介紹
shell腳本在日常的Linux系統管理中是必不可少的;
shell是系統跟計算機硬件交互時使用的中間介質。
shell是一個命令解釋器,提供用戶和機器之間的交互;
支持特定語法,比如邏輯判斷、循環;
每個用戶都可以由自己特定的shell;
centOS7默認shell為bash(Bourne Agin shell)
還有zhs、ksh等。

shell記錄命令歷史,默認保存至 .bash_history 文件中

概念:我們執行過的命令Linux都會記錄,預設可以記錄1000條命令歷史,
這些命令保存在用戶的家目錄 .bash_history文件中。
# 只有當用戶正常退出當前shell時,在當前shell中運行的命令才會保存至 .bash_history
  • 查看預設命令條數顯示

    [root@localhost apache2]# echo $HISTSIZE
    1000 #默認1000條

  • 清空當前命令歷史 history -c

    [root@localhost apache2]# history -c
    #不會刪除存命令裏面的東西

  • 預設值的配置文件,

    [root@localhost apache2]# vi /etc/profile
    46 HISTSIZE=1000 #46行在這裏更改。

  • 需要重啟後才生效,要麽source一下就可以生效。

    [root@localhost apache2]# echo $HISTSIZE
    1000
    [root@localhost apache2]# soure /etc/profile

    -bash: soure: 未找到命令
    [root@localhost apache2]# source /etc/profile
    [root@localhost apache2]# !echo
    echo $HISTSIZE
    5000 #修改成功

  • 怎麽樣修改命令歷史顯示時間,修改變量

    [root@localhost /]# HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "
    [root@localhost /]# echo $HISTTIMEFORMAT #echo查看環境變量
    %Y/%m/%d %H:%M:%S
    [root@localhost /]# history #查看當前命令歷史記錄

    1 2018/04/17 21:00:15 vi /etc/profile
    2 2018/04/17 21:01:24 echo $HISTSIZE
    3 2018/04/17 21:01:56 soure /etc/profile
    4 2018/04/17 21:02:11 source /etc/profile
    5 2018/04/17 21:02:17 echo $HISTSIZE
    6 2018/04/17 21:07:20 cd /etc/yum.repos.d
    7 2018/04/17 21:07:22 ls
    8 2018/04/17 21:07:36 vi dvd.repo
    9 2018/04/17 21:09:35 cd ..
    10 2018/04/17 21:10:47 HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "
    11 2018/04/17 21:11:18 echo HISTTIMEFORMAT
    12 2018/04/17 21:11:24 echo $HISTTIMEFORMAT
    13 2018/04/17 21:11:51 history

  • 想要永久生效,編輯配置文件/etc/profile,添加環境變量進去

    找到46行,在46行下添加環境變量
    HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "
    技術分享圖片

  • 重啟或者source一下。

    [root@localhost /]# source /etc/profile

  • 永久生效,chattr +a ~/.bash_history 添加權限只能追加,不能修改刪除

    [root@localhost /]# chattr +a ~/.bash_history

  • !!:連續兩個!表示執行上一條命令,示例如下:

    技術分享圖片

  • !n:這裏的n是數字,表示執行命令歷史中的第n條命令,例如 !17 表示執行命令歷史的第17個命令,示例如下:

    技術分享圖片

  • !字符串:例如!w 表示執行命令歷史中最近一次以 w 開頭命令,示例如下:

    技術分享圖片

命令補全和別名

按tab鍵可以幫我們補全一個指令、一個路徑或者一個文件名。
連續按兩次tab鍵,系統則會把所有的命令或者文件都列出來。
  • 安裝一個yum包,bash-completion,安裝完後,需要重啟一下才管用 reboot。

    [root@localhost ~]# systemctl res
    rescue reset-failed restart
    [root@localhost ~]# systemctl restart

  • 別名alias,自定義別名

    [root@localhost ~]# alias restartnet=‘systemctl restart network.service‘
    [root@localhost ~]# alias #查看別名是否設置成功,restartnet

  • alias目前系統預設的別名在:.bashrc 下

    技術分享圖片

    - 其他alias自定義別名,存放於 /etc/profile.d/下
    
    - 如何取消自定義別名:unalias restartnet

通配符

        在bash下,可以使用*來匹配零個或多個字符,用?匹配一個字符

.
示例,查找所有以.txt結尾的文件

[root@localhost do]# ls *.txt
1.txt 2.txt 3.txt

  • [] 的通配使用

    [root@localhost do]# ls [23].txt
    2.txt 3.txt

輸入輸出重定向

概念:輸入重定向用於改變命令的輸入,輸出重定向用於改變命令的輸入。
輸出重定向更為常用,它經常用於將命令的結果輸入到文件中,而不是屏幕上。
輸入重定向的命令是 <
輸出重定向的命令是 >
還有錯誤重定向命令2>以及之u家重定向命令 >>
  • 輸出重定向> ,把前面的命令追加到後面的文件裏去,原內容刪除,格式如下:

    [root@localhost do]# cat 1.txt
    [root@localhost do]# echo "123123" >1.txt
    [root@localhost do]# cat 1.txt
    123123
    [root@localhost do]# echo "123" >1.txt
    [root@localhost do]# cat 1.txt
    123

  • 追加文字 >>,把前面的命令 追加到後面的文件去。

    [root@localhost do]# echo "123" >>1.txt
    [root@localhost do]# cat 1.txt
    123
    123

  • 假如說運行一個錯誤的命令,如果報錯的話 指向到一個文件裏。 2>

    [root@localhost do]# lsaaaa 2> a.txt #在這裏,如果沒有報錯的話,不會保存進去。
    [root@localhost do]# cat a.txt
    -bash: lsaaaa: 未找到命令
    [root@localhost do]# ls 2> a.txt
    1.txt 2.txt 3.txt a.txt

  • 2>追加重定向到某個文件裏。

    [root@localhost do]# lsaaaa 2>> a.txt
    [root@localhost do]# cat a.txt
    -bash: lssad: 未找到命令
    -bash: lsaaaa: 未找到命令

  • 輸入,左邊必須是命令 ,不可以文件到文件 <
    [root@localhost do]# wc -l < 1.txt #正確用法
    2
    [root@localhost do]# 2.txt < 1.txt #錯誤用法
    -bash: 2.txt: 未找到命令

2018.4.20 五周第三次課