bash基礎特性(二)之命令別名,IO重定向,管道

命令別名alias

別名通俗地說,叫花名,當我們常用的命令,要是輸入太長,或經常要進入的目錄,可以用一個別名來定義它們,定義別名時盡量不要和已有命令名相同。這樣可以提高輸入速度和工作效率。
定義別名格式:alias 別名=’原命令 參數’ (要是沒空格,可以不用引號)
例如 :

alias vi=vim
[root@dxlcentOS ~]# alias eth='vim /etc/sysconfig/network-scripts/ifcfg-ens33'
[root@dxlcentOS ~]# alias 
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias eth='vim /etc/sysconfig/network-scripts/ifcfg-ens33'
alias fgrep='fgrep --color=auto'

我把一個很長的網卡文件路徑起個名為eth,下次我要對它編輯直接輸入eth回車,就可以打開了。
這樣的定義方法之對當前shell進程有效,要是退出系統再登入就沒有,要讓定義的別名永久生效可以這樣做。更改配置文件~/.bashrc或/etc/bashrc,把定義好的別名追加進入文件里面即可。兩者的區別,前者是針對單用戶,后者針對全局用戶
撤銷別名:~]# unalias NAME

globbing文件名通配(整體文件名匹配,而非部分)

1.星號 “*”匹配任意長度的任意字符

例如

[root@dxlcentOS tmp]# ls ma*     匹配以ma開頭后面跟任意字符的文件名,包括ma自身
ma  mas
[root@dxlcentOS tmp]# ls *ma*      匹配ma前后跟任意字符的文件名,包括ma自身
ddmasd  lma  Lma  LmasdD  ma  mas  ssdLmasdPdd
[root@dxlcentOS tmp]# ls *ma    匹配ma前面跟任意字符的文件名,包括ma自身
lma  Lma  ma
[root@dxlcentOS tmp]# ls *m*a*   匹配m和a之間,前后跟任意字符的文件名,包括ma自身
ddmasd  LmasdD  ssdLmasdPdd
lma     ma      yum_save_tx.2017-09-15.14-35.OZmN20.yumtx
Lma     mas

systemd-private-36c34876eff044749c3732208352206c-vmtoolsd.service-gZv7fh:
tmp
[root@dxlcentOS tmp]# 

2. ?:匹配任意單個字符

例如

[root@dxlcentOS tmp]# ls lm?
lma
[root@dxlcentOS tmp]# ls ?as
mas
[root@dxlcentOS tmp]# ls L?a?
ls: 無法訪問L?a?: 沒有那個文件或目錄
總結:只能匹配指定字符長度文件名,如L?a?匹配4個字符長度的文件名。

3. 中括號 []:匹配指定范圍內的任意單個字符

有幾種特殊格式:
[a-z], [A-Z], [0-9], [a-z0-9]
[[:upper:]]:所有大寫字母
[[:lower:]]:所有小寫字母
[[:alpha:]]:所有字母
[[:digit:]]:所有數字
[[:alnum:]]:所有的字母和數字
[[:space:]]:所有空白字符
[[:punct:]]:所有標點符號

pa[0-9][0-9], 2[0-9][0-9]

4. [^]:匹配指定范圍外的任意單個字符

[^[:upper:]]
[^0-9]

綜合實例

顯示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間出現一位任意字符的文件或目錄;
[root@dxlcentOS ~]# ls -d /var/l?[[:lower:]]    方法一
/var/lib  /var/log  
[root@dxlcentOS ~]# ls -d /var/l?[a-z]  方法二
/var/lib  /var/log 
顯示/etc目錄下,以任意一位數字開頭,且以非數字結尾的文件或目錄;
[root@dxlcentOS ~]# ls -d  /etc/[0-9]*[^0-9] 
/etc/2dsf
顯示/etc目錄下,以非字母開頭,后面跟一個字母及其它任意長度任意字符的文件或目錄;
[root@dxlcentOS etc]# ls -d  /etc/[^a-z][a-z]*
/etc/2dsf  /etc/%dxd55  /etc/_DXLjj
[root@dxlcentOS etc]# ls -d  /etc/[^a-zA-Z][a-z]*
/etc/2dsf  /etc/%dxd55  /etc/_DXLjj
[root@dxlcentOS etc]# ls -d  /etc/[^[:alpha:]][a-z]*
/etc/2dsf  /etc/%dxd55  /etc/_DXLjj
復制/etc目錄下,所有以m開頭,以非數字結尾的文件或目錄至/tmp/magedu.com目錄;
[root@dxlcentOS etc]# ls -d  /etc/m*[^0-9]
/etc/machine-id                /etc/modprobe.d
/etc/magic                     /etc/modules-load.d
/etc/mailcap                   /etc/motd  ......省略很多

[root@dxlcentOS etc]# cp -r /etc/m*[^0-9] /tmp/magedu.com/
[root@dxlcentOS etc]# ls /tmp/magedu.com/
machine-id                mime.types      mtab
magic                     mke2fs.conf     my.cnf
mailcap                   modprobe.d      my.cnf.d   ......省略很多
復制/usr/share/man目錄下,所有以man開頭,后跟一個數字結尾的文件或目錄至/tmp/man/
[root@dxlcentOS etc]# ls -d /usr/share/man/man[0-9]
/usr/share/man/man1  /usr/share/man/man6
......省略很多

[root@dxlcentOS etc]# cp -r /usr/share/man/man[0-9] /tmp/man
[root@dxlcentOS etc]# ls /tmp/man
man1  man2  man3  man4  man5  man6  man7  man8  man9
復制/etc目錄下,所有以.conf結尾,且以m,n,r,p開頭的文件或目錄至/tmp/conf.d/目錄下;
[root@dxlcentOS etc]# ls -d /etc/[mnrp]*.conf
/etc/man_db.conf  /etc/nsswitch.conf  /etc/rsyncd.conf
/etc/mke2fs.conf  /etc/resolv.conf    /etc/rsyslog.conf
[root@dxlcentOS etc]# mkdir /tmp/conf.d
[root@dxlcentOS etc]# cp -r /etc/[mnrp]*.conf /tmp/conf.d/
[root@dxlcentOS etc]# ls /tmp/conf.d/
man_db.conf  nsswitch.conf  rsyncd.conf
mke2fs.conf  resolv.conf    rsyslog.conf    

IO重定向及管道

我們都知道在計算機領域里面程序由 指令+數據 組成,一個程序不會從頭到尾運行了一次就結束,它會產生IO。什么是IO呢?它在計算機領域指的是信息輸入Input和輸出Output。
IO重定向的意思:就是將系統原本默認的輸入輸出的路徑重新定向到其他文件。
在linux中可用于輸入的設備:文件(linux一切皆文件)
鍵盤設備、文件系統上的常規文件、網卡等;
可用于輸出的設備:文件(linux一切皆文件)
顯示器、文件系統上的常規文件、網卡等;

程序的數據流有三種
1.輸入的數據流;<– 標準輸入(stdin),鍵盤;
2.輸出的數據流:–> 標準輸出(stdout),顯示器;
3.錯誤輸出流: –> 錯誤輸出(stderr),顯示器;
什么是數據流呢?通俗地說就是動態的信息,我們常說的信息本質就是數據。
輸入流可從鍵盤或文件中獲得數據,輸出流可向顯示器、打印機或文件中傳輸數據。
對應的標準輸入設備,標準輸出設備,錯誤輸出設備都有其對應的fd: file descriptor,文件描述符
標準輸入:0
標準輸出:1
錯誤輸出:2

IO重定向:

輸出重定向:>    特性:覆蓋輸出
追加輸出重定向:>>    特性:追加輸出
例如:
[root@dxlcentOS tmp]# echo $(date) > t1
[root@dxlcentOS tmp]# cat t1
2017年 09月 22日 星期五 19:24:33 CST
覆蓋輸出動作比較危險,用# set -C禁止覆蓋輸出重定向至已存在的文件;
如果明確被覆蓋文件可以進行覆蓋操作,此時可使用強制覆蓋輸出:>|
關閉上述特性:# set +C

錯誤輸出流重定向:2>, 2>>

[root@dxlcentOS tmp]# eehco abc > t2
-bash: eehco: 未找到命令
[root@dxlcentOS tmp]# eehco abc 2 >> t2
[root@dxlcentOS tmp]# cat t2
-bash: eehco: 未找到命令

合并正常輸出流和錯誤輸出流:
(1) &>, &>> 不管命令對錯都想記錄那么可以使用這格式實現。

[root@dxlcentOS tmp]# echo ddd &> /tmp/t2  
[root@dxlcentOS tmp]# cat t2
ddd
[root@dxlcentOS tmp]# decho ddd &> /tmp/t2
[root@dxlcentOS tmp]# cat t2
-bash: decho: 未找到命令
[root@dxlcentOS tmp]# decho ddd &>> /tmp/t2
[root@dxlcentOS tmp]# cat t2
-bash: decho: 未找到命令
-bash: decho: 未找到命令
[root@dxlcentOS tmp]# echo ddd &>> /tmp/t2 
[root@dxlcentOS tmp]# cat t2
-bash: decho: 未找到命令
-bash: decho: 未找到命令
ddd

不管前面是追加還是覆蓋后面均為2>&1。
(2) COMMAND > /path/to/somefile 2>&1
COMMAND >> /path/to/somefile 2>&1

例如
[root@dxlcentOS tmp]# ehh lll > /tmp/t2 2>&1
[root@dxlcentOS tmp]# cat t2
-bash: ehh: 未找到命令
[root@dxlcentOS tmp]# echo right >> /tmp/t2 2>&1        
[root@dxlcentOS tmp]# cat t2
-bash: ehh: 未找到命令
right

特殊設備:/dev/null?也叫空設備,通常用于丟棄不需要的輸出流。用于丟棄一切寫入其中的數據。
輸出重定向的對象可以是各種文件,但不能將其定向至命令的輸入

輸入重定向:<

tr命令: 轉換字符。tr 命令從標準輸入刪除或替換字符,并將結果寫到標準輸出。

tr [OPTION]… SET1 [SET2]
把輸入的數據當中的字符,凡是在SET1定義范圍內出現的,通通對位轉換為SET2出現的字符

1:
tr SET1 SET2 < /PATH/FROM/SOMEFILE

# tr 'a-z' 'A-Z' < /tmp/functions > ttt1     (functions 里面所有字母轉換成大寫后
輸出到tt1文件里面。)

2:
tr -d SET1 < /PATH/FROM/SOMEFILE

[root@dxlcentOS tmp]# tr  -d 'a-z'  < /tmp/functions  (刪除functions 里面所有小寫字母 )

注意:不修改原文件
3:
Here Document:<<
cat << EOF

[root@dxlcentOS tmp]# cat  stdin 
test
[root@dxlcentOS tmp]# cat <<eof>stdin  覆蓋了stdin里面的內容
> mylinux 
> whatis
> man
> eof
[root@dxlcentOS tmp]# cat stdin 
mylinux 
whatis
man
[root@dxlcentOS tmp]# 

cat > /PATH/TO/SOMEFILE << EOF

[root@dxlcentOS tmp]# cat > /tmp/stdin <<eof
> hello
> okkk
> eof
[root@dxlcentOS tmp]# cat stdin 
hello
okkk
[root@dxlcentOS tmp]# cat > /tmp/stdin <<eof 覆蓋了stdin里面的內容
hello
okkk
eof
^C
[root@dxlcentOS tmp]# cat >> /tmp/stdin <<eof 追加
> apple
> wang
> eof
[root@dxlcentOS tmp]# cat stdin 
hello
okkk
apple
wang

管道:連接程序,實現將前一個命令的輸出直接定向后一個程序當作輸入數據流,數據經過幾道命令加工后得到我們想要的輸出格式。
COMMAND1 | COMMAND2 | COMMAND3 | …
例如:

[root@dxlcentOS tmp]# ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.196  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::33f3:91fa:b942:6983  prefixlen 64  scopeid 0x20<link>
     ......省略很多
[root@dxlcentOS tmp]# ifconfig | sed -n 2p | cut -d ' ' -f 10    
192.168.0.196    說明:這取IP地址方法在centos7.2可以,centos6有區別,要把冒號轉空格,命令要修改。
把/etc/passwd文件的前6行的信息轉換為大寫字符后輸出;
[root@dxlcentOS tmp]# head -6 /etc/passwd | tr 'a-z' 'A-Z'
ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN
DAEMON:X:2:2:DAEMON:/SBIN:/SBIN/NOLOGIN
ADM:X:3:4:ADM:/VAR/ADM:/SBIN/NOLOGIN
LP:X:4:7:LP:/VAR/SPOOL/LPD:/SBIN/NOLOGIN
SYNC:X:5:0:SYNC:/SBIN:/BIN/SYNC
[root@dxlcentOS tmp]# 

tee命令:tee的功能通常是用管道,讓它不但能在屏幕輸出,而且也能夠將它儲存在檔案中。簡單的說就是把數據重定向到給定文件和屏幕上。
選項
-a:追加到目標文件,不覆蓋
-i:忽略中斷

COMMAND | tee /PATH/TO/SOMEFILE
例如

[root@dxlcentOS ~]# ll | tee -a /tmp/t2  執行ll命令后在屏幕輸出并把結果保存在/tmp/t2中
總用量 8
-rw-------. 1 root root 1528 9月  12 16:58 anaconda-ks.cfg
-rw-r--r--. 1 root root    0 9月  19 13:19 newfile
-rw-r--r--. 1 root root    4 9月  23 14:27 t2
[root@dxlcentOS ~]# cat /tmp/t2
how areyou
how do you do 

總用量 8
-rw-------. 1 root root 1528 9月  12 16:58 anaconda-ks.cfg
-rw-r--r--. 1 root root    0 9月  19 13:19 newfile
-rw-r--r--. 1 root root    4 9月  23 14:27 t2

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/87548

(1)
N27_dxldengN27_dxldeng
上一篇 2017-09-23
下一篇 2017-09-24

相關推薦

  • 計算機的組成及功能

    計算機的組成有中央處理器(包含邏輯運算器和控制器)、內存、輸入設備、輸出設備    邏輯運算器主要負責程序的運算和邏輯的判斷、控制器是協調各組件與各單元的工作。 內存是與CPU進行溝通的橋梁,其作用是用于暫時存放CPU中的運算數據,以及與硬盤等外部存儲器交換的數據。 輸入設備是用戶和計算機系統之間進行信息交換的主要裝置之一。 輸出設備是外…

    Linux干貨 2017-07-02
  • 基于NFS實現WordPress

    實驗內容: (1)主機IP nfs server IP :192.168.29.120 nfs server IP: 192.168.29.110 (2)要求 nfs server共享/data/web/ 、/data/mysql 兩個目錄 nfs client掛載nfs server共享的/data/web/的文件系統至/var/www/html;部署wo…

    2017-06-13
  • CentOS6.7上編譯安裝php

    環境:CentOS6.7,minimal安裝。 前提條件:安裝了編譯環境,安裝了Apache/Nginx,安裝了MySQL/MariaDB。具體安裝見:http://www.www58058.com/16583    http://www.www58058.com/17497  1、解決依賴關系: 請配置好yum源(系統安裝源及…

    Linux干貨 2016-06-03
  • 對虛擬機鍵入Ctrl+Alt+Delete的詳細說明

            日常中我們用Windows系統時經常使用Ctrl+Alt+Delete來換出任務管理的菜單,進行任務管理,linux中也有這樣的鍵入命令,但不是管理任務,而是重啟系統?。?!那么我們就應該注意了,不要誤操作重啟服務器。       &n…

    2017-03-28
  • Linux-第一周作業

    1.計算機組成及其功能 計算機主要分為三部分: A、輸入單元:包括鍵盤、鼠標、掃描儀、手寫板、觸摸屏等。 B、中央處理器(CPU):含有算術邏輯、控制、記憶等單元。 C、輸出單元:例如屏幕、打印機等。 我們通過輸入設備(如鼠標與鍵盤)來將一些數據輸入到PC里面,然后再由PC的功能處理成為圖表或文章等信息后,將結果傳輸到輸出設備,如屏幕或打印機上面,這是計算機…

    Linux干貨 2016-07-07
  • 8月20日程序包管理

    程序包管理 概述    API:Application Program Interface應用編程接口    ABI:Application Binary Interface應用二進制接口    Unix-like,  …

    Linux干貨 2016-08-21

評論列表(1條)

  • 馬哥教育
    馬哥教育 2017-10-12 19:18

    思路清晰,繼續加油。

欧美性久久久久