命令别名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.178linux.com/87548
评论列表(1条)
思路清晰,继续加油。