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
把/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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,511评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,495评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,595评论 0 225
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,558评论 0 190
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,715评论 3 270
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,672评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,112评论 2 291
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,837评论 0 181
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,417评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,928评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,316评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,773评论 2 234
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,253评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,827评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,440评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,523评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,583评论 2 249

推荐阅读更多精彩内容