1. 程式人生 > >了解追加重定向及別名

了解追加重定向及別名

保護 rtu egrep info pro 終端 %s restart network

shell介紹

shell是一個命令解釋器,提供用戶與機器之間交互
支持特定語法,比如邏輯判斷、循環(for in和while)等
每個用戶有自己特定的shell,centos7默認shell為bash(Bourne Agin Shell)
其他shell環境還有zsh、ksh等

命令歷史 history

history在系統中是一個內置環境變量,默認設置的值是最大記錄1000條命令歷史,使用echo $HISTSIZE查看默認記錄的條數
history -c 清除命令歷史,這個記錄是只保存到內存當中的,不會實時的保存到文件當中,只有退出當前bash終端,才能夠保存命令歷史
修改history的命令歷史記錄條數

[root@localhost ~]# vim /etc/profile       修改系統啟動配置文件
# /etc/profile

# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
HOSTNAME=`/usr/bin/hostname 2>/dev/null`
HISTSIZE=1000                                 修改HISTSIZE為記錄的數量,這裏記錄2000條歷史命令
[root@localhost ~]# source /etc/profile
[root@localhost ~]# echo $HISTSIZE
2000
修改完成後使用source重新加載一下系統配置文件

讓history記錄命令操作時間
HISTTIMEFORMAT="%Y/%m%d %H:%M:%S"

[root@localhost ~]# HISTTIMEFORMAT="%Y/%m%d %H:%M:%S"
[root@localhost ~]# echo $HISTTIMEFORMAT
%Y/%m%d %H:%M:%S
[root@localhost ~]# history 
    1 2018/0628 11:09:20ip a
    2 2018/0628 11:09:20/etc/init.d/network restart
    3 2018/0628 11:09:20ip a

HISTTIMEFORMAT這個變量只是在這個終端裏生效,如果打開新的終端則不生效了,需要寫入/etc/profile/系統環境變量文件中
[root@localhost ~]# vim /etc/profile       修改系統啟動配置文件
# /etc/profile

# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
HOSTNAME=`/usr/bin/hostname 2>/dev/null`
HISTSIZE=1000           
HISTTIMEFORMAT="%Y/%m%d %H:%M:%S"              添加HISTTMEFORMAT的歷史命令的記錄格式,保存後使用source生效配置
[root@localhost ~]# source /etc/profile

[root@localhost ~]# HISTTIMEFORMAT="%Y/%m%d %H:%M:%S"
[root@localhost ~]# echo $HISTTIMEFORMAT
%Y/%m%d %H:%M:%S
[root@localhost ~]# history 
    1 2018/0628 11:09:20ip a
    2 2018/0628 11:09:20/etc/init.d/network restart
    3 2018/0628 11:09:20ip a

HISTTIMEFORMAT這個變量只是在這個終端裏生效,如果打開新的終端則不生效了,需要寫入/etc/profile/系統環境變量文件中
[root@localhost ~]# vim /etc/profile       修改系統啟動配置文件
# /etc/profile

# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
HOSTNAME=`/usr/bin/hostname 2>/dev/null`
HISTSIZE=1000           
HISTTIMEFORMAT="%Y/%m%d %H:%M:%S"              添加HISTTMEFORMAT的歷史命令的記錄格式,保存後使用source生效配置
[root@localhost ~]# source /etc/profile

保護history歷史命令,讓命令歷史只能追加,不能被刪除,修改

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

命令歷史快捷操作
!! 執行上條命令
!n n表示一個數字,代表運行命令歷史中第N條歷史的命令
!echo echo代表以echo開頭的最近一次執行的命令,順序是從最近命令中去找以echo開頭的歷史命令

命令補全及別名

命令補全:
輸入一個路徑或命令時在只有一個結果匹配下按一下即可補全,命令或目錄名稱相同的有多個的話按兩下Tab鍵會出現多個相近的命令和路徑以供參考

安裝bash-completion支持系統服務命令補全

[root@localhost ~]# yum install -y bash-completion
已加載插件:fastestmirror
base | 3.6 kB 00:00:00     
epel/x86_64/metalink | 7.8 kB 00:00:00     
epel | 3.2 kB 00:00:00     
extras | 3.4 kB 00:00:00     
updates | 3.4 kB 00:00:00     
(1/2): epel/x86_64/updateinfo | 924 kB 00:00:00     
(2/2): epel/x86_64/primary | 3.5 MB 00:00:02     
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * epel: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.tuna.tsinghua.edu.cn
epel 12602/12602
軟件包 1:bash-completion-2.1-6.el7.noarch 已安裝並且是最新版本
無須任何處理
[root@localhost ~]# systemctl res 
rescue        reset-failed  restart                    服務管理命令補全示例
[root@localhost ~]# systemctl restart network.service

定義命令別名
alias 自定義命令名稱 = ‘可執行的命令‘,如定義網絡重啟命令別名,alias是查看所有的別名

[root@localhost ~]# alias restartnet=‘systemctl restart network.service‘
[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 restartnet=‘systemctl restart network.service‘
alias rm=‘rm -i‘
alias which=‘alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde‘

查看別名存儲的位置,別名分別存在於用戶家目錄下的.bashrc文件、/etc/profile.d/目錄下的color命名的文件並以sh結尾的腳本文件中,如下:
[root@localhost ~]# cat .bashrc 
# .bashrc

# User specific aliases and functions

alias rm=‘rm -i‘
alias cp=‘cp -i‘
alias mv=‘mv -i‘

# Source global definitions
if [ -f /etc/bashrc ]; then
 . /etc/bashrc
fi
[root@localhost ~]# cat /etc/profile.d/colorls.sh |grep alias
  alias ll=‘ls -l‘ 2>/dev/null
  alias l.=‘ls -d .*‘ 2>/dev/null
alias ll=‘ls -l --color=auto‘ 2>/dev/null
alias l.=‘ls -d .* --color=auto‘ 2>/dev/null
alias ls=‘ls --color=auto‘ 2>/dev/null
[root@localhost ~]# cat /etc/profile.d/colorgrep.sh |grep alias
alias grep=‘grep --color=auto‘ 2>/dev/null
alias egrep=‘egrep --color=auto‘ 2>/dev/null
alias fgrep=‘fgrep --color=auto‘ 2>/dev/null

取消一個命令別名

[root@localhost ~]# unalias restartnet

命令行中定義的為臨時的,退出終端後不會被保存
永久定義是保存到用戶家目錄的bashrc或/etc/profile.d/目錄下的文件當中去

統配符、輸入輸出重定向

  • 統配一個或N個字符前面的字符,列出所有的txt文件,不論命名字符長度,如:
[root@localhost tmp]# ls *.txt
1.txt 3.txt 4.txt 5.txt 722.txt 72.txt 7.txt abc.txt a.txt c.txt

? 表示只匹配一個任意的字符,如列出一個字符命名的.txt文件

[root@localhost tmp]# ls ?.txt
1.txt 3.txt 4.txt 5.txt 7.txt a.txt c.txt

[0-9] 表示匹配0-9範圍內的字符命名的文件

[root@localhost tmp]# ls [0-9].txt
1.txt 3.txt 4.txt 5.txt 7.txt

{1,abc,4,a,722} 表示列出條件內符合的字符命名的文件

[root@localhost tmp]# ls {1,abc,4,a,722}.txt
1.txt 4.txt 722.txt abc.txt a.txt

追加重定向

>輸出重定向,會覆蓋之前或文件中已存在的內容
[root@localhost tmp]# echo "abcd" >1.txt 
[root@localhost tmp]# cat 1.txt 
abcd

>>追加輸出重定向,會在文件或內容最後保存新的輸出內容,追加上次輸出內容
[root@localhost tmp]# echo "abcdefg" >>1.txt 
[root@localhost tmp]# cat 1.txt 
abcd
abcdefg

2> 指定錯誤的輸出重定向輸出
[root@localhost tmp]# ls aaaa.txt 2>3.txt 
[root@localhost tmp]# cat 3.txt 
ls: 無法訪問aaaa.txt: 沒有那個文件或目錄

2>>  錯誤追加重定向輸出,追加上次輸出內容
[root@localhost tmp]# ls aaaa.txt 2>3.txt 
[root@localhost tmp]# cat 3.txt 
ls: 無法訪問aaaa.txt: 沒有那個文件或目錄
ls: 無法訪問aaaa.txt: 沒有那個文件或目錄

&>錯誤和正確的統一輸出顯示或保存
[root@localhost tmp]# ls 1.txt 222.txt &>4.txt 
[root@localhost tmp]# cat 4.txt 
ls: 無法訪問222.txt: 沒有那個文件或目錄
1.txt

&>> 錯誤和正確追加重定向輸出,追加上次輸出內容
[root@localhost tmp]# ls 722.txt abcdef.txt &>>4.txt 
[root@localhost tmp]# cat 4.txt 
ls: 無法訪問222.txt: 沒有那個文件或目錄
1.txt
ls: 無法訪問abcdef.txt: 沒有那個文件或目錄
722.txt

<輸入重定向,如分屏查看用戶配置文件:less </etc/passwd
[root@localhost tmp]# less </etc/passwd

了解追加重定向及別名