5周第3次課 shell介紹 命令歷史 命令補全和別名 通配符 輸入輸出重定向
1.shell介紹
shell 是一個命令解釋器,提供用戶和機器之間的交互。它支持特定語法,邏輯判斷、循環。比如,我們登陸的終端,它其實就是一個 shell,供我們和機器交互。
Linux 下面有很多 shell,每個用戶都可以有自己特定的 shell。
CentOS7默認shell是bash(Bourne Agin Shell),還有 zsh ksh 等 shell。
2.命令歷史
history 記錄命令歷史
2.1 具體存放位置:
/root/.bash_history
默認1000條
2.2 查看當前 history 支持存儲的數量:
echo $HISTSIZE
2.3 history記錄的數量
vim /etc/profile
source /etc/profile
更新系統變量或者重進終端2.4 清空內存中的命令歷史
內存中的歷史命令只在退出終端時保存到.bash_history 中去history -c
2.5 設置命令歷史中加入運行時間
[root@centos701 ~]#HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S" ##設置 history 的格式變量[root@centos701 ~]#echo $HISTTIMEFORMAT ##查看變量是否生效%Y/%m/%d %H:%M:%S [root@centos701 ~]history ##再次運行命令,發現多了時間信息,設置成功 1001 2017/11/15 20:14:38HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S" 1002 2017/11/15 20:14:57echo $HISTTIMEFORMAT
永久生效:將HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S"
這條加入/etc/profile
文件,最好和HISTSIZE
放在一起,然後退出終端重進即可。
2.6 設置 history 記錄防刪除
通過設置隱藏權限(a權限),能讓命令歷史不被其他人刪除,以便於以後排錯和查找事件
[root@centos701 ~]# chattr +a ~/.bash_history
這樣設置後,所有用戶的命令歷史都會記錄,其他用戶只能追加,不能刪除。
非正常退出終端,命令歷史記錄會不全
2.7 關於命令歷史的技巧
命令 | 作用 |
---|---|
!! | 執行命令歷史中最後一條命令(即上一次的命令) |
!n | 執行命令歷史中指定條目的命令 |
!word 如:!echo | 執行命令歷史中離當前時間最近的,以 echo 開頭的命令。 |
3.命令補全和別名
Liunx 系統中可以利用 tab 鍵來進行命令補全,也可以進行路徑的補全。同時,在 CentOS7中可以做到參數的補全,比較實用!
3.1 命令和參數補全
命令補全
次數 | 場景與效果 |
---|---|
1 | 不存在相同開頭命令/文件,按1下就可以補齊 |
2 | 存在開頭相同命令/文件,且大於2個時,需要按2下,才能出現待選例表, |
參數補全
從 CentOS7開始,tab 鍵支持命令和參數雙重補全,在補全參數時,用法和補全命令一樣,但前提需要安裝一個軟件
bash-completion
[root@centos701 ~]# yum install -y bash-completion [root@centos701 ~]# init 6 或者 reboot
重啟完成後,就可以體驗參數的補全了!
3.2 別名
Linux中支持將一組命令+參數的組合通過
alias
設置成特定字符組合,通過執行組合字符來達到輸入對應正常命令和參數的目的,提高使用人員的效率。
3.2.1 當前用戶已有別名查看
alias
[root@centos701 ~]# 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‘...................... ......................
3.2.2 設置alias的幾個常見位置
每個用戶家目錄的
.bashrc
文件目錄
/etc/porfile.d/
中也有很多特定 alias 的定義文件
3.2.3 設置和取消別名 alias
以重啟網絡
systemctl restart network.service
這條命令和參數來舉例
設置別名
alias [自定義別名]=`正常執行命令+參數` [root@centos701 ~]#alias sysrenet=`systemctl restart network.service` [root@centos701 ~]#sysrenet ##別名同樣支持補全
取消別名
unalias [自定義別名] [root@centos701 ~]# unalias sysrenet[root@centos701 ~]# sysrenet-bash: sysrenet: 未找到命令
4. 通配符
符號 | 作用 | 舉例 | 說明 |
---|---|---|---|
* | 表示任意多個字符(0-多個) | ls test* | *表示後面不論接幾個字符都接受(沒有字符也匹配) |
? | 表示任意單個字符 | ls test?;ls test??? | ?表示後面當且僅當接1個字符時才匹配;???表示一定要接3個字符 |
[ ] | 中間為範圍和組合字符 | cp test[1~5] /tmp | test1, test2, test3, test4, test5若存在,則復制到/tmp目錄下 |
{ } | 中間表示一個或多個字符,多個時用“,”隔開 | ll {*.log,*.txt } | 查詢以.log和.txt結尾的文件。 |
5.輸入輸出重定向
說明:預先在當前目錄創建1.txt文件,並在其中輸入兩行隨機字符。
命令在左 文件在右
符號 | 作用 | 特點 | 舉例 | 說明 |
---|---|---|---|---|
輸入重定向 | ||||
< | 右側內容輸入到左邊 | wc -l < 1.txt | 將右側1.txt的內容輸入到左邊供命令調用,即計算1.txt文本內容的行數 | |
單個輸出重定向 | ||||
> | 正確輸出重定向 | 覆蓋原有內容 | cat 1.txt>2.txt | 將左側正確的結果以覆蓋的方式輸出到2.txt中 |
>> | 正確輸出追加重定向 | 保留原有內容 | cat 1.txt>>2.txt | 將左側正確的結果以追加的方式輸出到2.txt 中 |
2> | 錯誤輸出重定向 | 覆蓋原有內容 | lsaaa 2>2.txt | 將左側錯誤的結果以覆蓋的方式輸出到2.txt 中 |
2>> | 錯誤輸出追加重定向 | 保留原有內容 | lsaaa 2>>2.txt | 將左側錯誤的結果以追加的方式輸出到2.txt 中 |
合並輸出重定向 | ||||
&>=>+2> | 正確和錯誤輸出重定向 | 覆蓋原有內容 | ls [12].txt kkk.txt &>c.txt | 將左側正確和錯誤的結果都輸出到 c.txt 文件 |
&>>=>>+2>> | 正確和錯誤輸出追加重定向 | 保留原有內容 | ls [12].txt kkk.txt &>>c.txt | 將左側正確和錯誤的結果都追加輸出到 c.txt 文件 |
拆分輸出重定向 | ||||
> 2> | 正確和錯誤輸出重定向 | 覆蓋原有內容 | ls [12].txt sasasa.txt>ab.txt 2>cd.txt | 將左側正確的結果重定向輸出到 ab.txt 中,將錯誤的結果重定向輸出到 cd.txt 中 |
>> 2>> | 正確和錯誤輸出追加重定向 | 保留原有內容 | ls [12].txt sasasa.txt>>ab.txt 2>>cd.txt | 將左側正確的結果以追加的方式輸出到 ab.txt 中,將錯誤的結果以追加的方式輸出到 cd.txt 中 |
5周第3次課 shell介紹 命令歷史 命令補全和別名 通配符 輸入輸出重定向