数据流重定向
数据流重定向是将某个命令执行后应该出现在屏幕上的数据传输到其他地方。
标准输入stdin:代码为0,使用<或者<<,<表示覆盖<<表示追加
标准输出stdout:代码为1,使用>或者>>,>表示覆盖输出>>表示追加输出
标准错误输出stderr:代码为2,使用2>或者2>>,>表示覆盖输出>>表示追加输出
[phh@CentOS7-1 ~]$ find /home/ -name *profile /home/phh/.bash_profile find: ‘/home/Alice’: 权限不够 [phh@CentOS7-1 ~]$ find /home/ -name *profile >in.txt 2>err.txt [phh@CentOS7-1 ~]$ cat in.txt /home/phh/.bash_profile [phh@CentOS7-1 ~]$ cat err.txt find: ‘/home/Alice’: 权限不够
上述find /home/ -name *profile的输出结果,第一行为正确执行结果的输出、即标准输出,第二行为执行出现错误的输出、即标准错误输出。
find /home/ -name *profile >in.txt 2>err.txt是将标准输出、标准错误输出分别写到当前目录的in.txt文件、err.txt文件,执行结果不输出到屏幕。
/dev/null垃圾黑洞设备
/dev/null可以吃掉所有导向这个设备的信息、即不保存内容,是个空文件,一般用于将所有的标准错误输出输出到这个文件。
[phh@CentOS7-1 postfix]$ find / -name .bash_profile 2>/dev/null /etc/skel/.bash_profile /home/phh/.bash_profile [phh@CentOS7-1 postfix]$ cat /dev/null
如果要将标准输出和标准错误输出写入同一个文件,则需要使用特殊的语法,避免两者同时写出现混乱。
[phh@CentOS7-1 ~]$ find / -name .bash_profile &>all.txt [phh@CentOS7-1 ~]$ find / -name .bash_profile >all.txt 2>&1
标准输入可通过键盘输入,也可通过文件输入。
[root@CentOS7-1 linux]# cat >test.txt test1 #键盘输入 test2 #键盘输入 #按ctrl+d退出 [root@CentOS7-1 linux]# cat test.txt test1 test2 [root@CentOS7-1 linux]# cat >test.txt<<eof > 1 > 2 > eof [root@CentOS7-1 linux]# cat test.txt 1 2
第一种方式输入结束后需要按ctrl+d退出,第二种方式<<后面的字符串表示结束输入,成对的eof(可以任意取)之间的内容为输入。
[root@CentOS7-1 linux]# cat >test.txt < ~/.bashrc #将家目录下的.bashrc文件的内容读取并写入test.txt
管道命令
管道命令使用|,灌到后面接的第一个数据必定是命令,而且这个命令必须能够接收标准输出作为标准输入继续处理。
选取命令:cut、grep
- cut -d '分隔字符' -f fields -->>以指定的分隔字符分隔每行,选取指定的段
- cut -c m-[n] -->>输出每行第m-n个字符
[root@CentOS7-1 linux]# cat /etc/passwd |cut -d ':' -f 1,6 #以:为分隔符,输出第1个、第6个字段 …… postfix:/var/spool/postfix tcpdump:/ phh:/home/phh Alice:/home/Alice [root@CentOS7-1 linux]# echo $PATH /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin [root@CentOS7-1 linux]# echo $PATH|cut -c 10-20 #输出10-20个字符 l/sbin:/usr [root@CentOS7-1 linux]# echo $PATH|cut -c 10- #输出第10及之后的字符 l/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
grep,处理行数据,如果行中有符合grep条件的,将该行显示出来
grep [-cinv] [--color=auto] '字符串' filename
- -c:统计字符串出现次数
- -i:忽略大小写
- -n:输出行号
- -v:反向查找,即查找不包含字符串的行
[root@CentOS7-1 linux]# grep -n home /etc/passwd 43:phh:x:1000:1000:phh:/home/phh:/bin/bash 44:Alice:x:1001:1001::/home/Alice:/bin/bash [root@CentOS7-1 linux]# grep -c home /etc/passwd 2
排序命令:sort、uniq、wc
用法:sort [-fbMnrtku] [file or stdin],排序
- -f:忽略大小写
- -b:忽略最前面的空格
- -M:一月份的名字来排序,例如JAN、DEC等
- -n:使用纯数字进行排序,默认是使用字符排序
- -r:反向排序、即降序排序,默认是升序排序
- -t:分割符,默认使用tab
- -k:以该区间的字段来排序
- -u:即uniq,相同的数据仅出现一行
[root@CentOS7-1 linux]# head -5 /etc/passwd|sort adm:x:3:4:adm:/var/adm:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin root:x:0:0:root:/root:/bin/bash [root@CentOS7-1 linux]# head -5 /etc/passwd|sort -r root:x:0:0:root:/root:/bin/bash lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin #sort默认按照字符升序排序,-r则降序排序 [root@CentOS7-1 linux]# cat /etc/passwd |sort -t : -k 3 root:x:0:0:root:/root:/bin/bash phh:x:1000:1000:phh:/home/phh:/bin/bash Alice:x:1001:1001::/home/Alice:/bin/bash qemu:x:107:107:qemu user:/:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin …… [root@CentOS7-1 linux]# cat /etc/passwd |sort -t : -k 3 -n 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 #-t指定使用:分隔,-k指定使用分隔后的第3个字段字段排序,默认按字符排序,-n指定按数字排序
用法:unique [-ic],重复的数据只显示一行
- -i:忽略大小写
- -c:计数
[root@CentOS7-1 linux]# last|cut -d ' ' -f 1|sort|uniq phh reboot root wtmp [root@CentOS7-1 linux]# last|cut -d ' ' -f 1|sort|uniq -c 1 2 phh 5 reboot 16 root 1 wtmp
用法:wc [-lwm]
- -l:统计行数
- -w:统计多少字(英文单词)
- -m:统计多少字符
[root@CentOS7-1 linux]# cat a.txt hi test file Bye [root@CentOS7-1 linux]# cat a.txt|wc 3 4 17 [root@CentOS7-1 linux]# cat a.txt|wc -l 3