• 幕客老师召集小伙伴
  • 运维高手36项修炼
  • python自动化运维项目实战
  • nginx从入门到实战
  • 阿里云与Centos7实战

管道、重定向

 
 知识点:

一、输出重定向 (覆盖,追加)

二、输入重定向

三、管道

 


内容摘要:
输入输出重定向

管道

 

 

==文件描述符0、1、2 (对于控制终端而言y)

[root@jeson ~]# ls /proc/$( pgrep  sshd)/fd01234

一、输出重定向 (覆盖,追加)


正确输出: 1> 1>> 等价于 > >>
错误输出: 2> 2>>

&>
对比错误输出,默认是显示在终端,加了2>后,错误输入到了文件。

[root@Jeson tmp]# top -jjkjkk 1 -n 2 >/tmp/toprec.txt
top: unknown argument 'j'
usage:	top -hv |-abcHimMsS -d delay -n iterations [-u user |-U user]-p pid [,pid ...]
[root@Jeson tmp]# cat /tmp/toprec.txt 
[root@Jeson tmp]# top -jkjkj 1 -n 2 2>/tmp/toprec.txt
[root@Jeson tmp]# cat /tmp/toprec.txt 
top: unknown argument 'j'
usage:	top -hv |-abcHimMsS -d delay -n iterations [-u user |-U user]-p pid [,pid ...]
[root@jeson ~]# date 1> date.txt 
[root@jeson ~]# date 2> date.txt 
[root@jeson ~]# ls /home/  /aaaaaaaaa 1>list.txt 2>error.txt	//重定向到不同的位置
[root@Jeson tmp]# ls -d /home /proc /testtest /test22 1>./exist.txt 2>./notexist.txt

正确和错误都输入到相同位置:

[root@jeson ~]# ls /home/  /aaaaaaaaa 1>list.txt 2>&1	//重定向到相同的位置
ls -d /home /proc /testtest /test22 >alloutput.txt 2>&1//把错误输出和正确输出重定向输出到/dev/null设备下。
[root@Jeson test]# ping -c3 172.16.20.21 >/dev/null 2>&1
[root@Jeson test]# echo $?0
[root@jeson ~]# ls /home/  /aaaaaaaaa &>list.txt	//混合输出
[root@jeson ~]# ls /home/  /aaaaaaaaa &>/dev/null //空设备,即将产生的输出丢掉

二、输入重定向


例1:

[root@jeson ~]# mail -s "ssss" alice	//没有改变输入的方向,默认键盘111222333^D
[root@jeson ~]# su - alice
[alice@jeson ~]$ mail
Mail version 8.16/6/93.Type?for help."/var/spool/mail/alice":1 message 1 new
>N  1 root@jeson.localMonOct2914:0918/657"ssss"&
[root@jeson ~]# mail -s "test01" alice < /etc/hosts	//输入重定向,来自于文件

例2:

[root@jeson ~]# grep 'root'	//没有改变输入的方向,默认键盘,此时等待输入...
yang sss
sssrootssss..
sssrootssss..
[root@jeson ~]# grep 'root' < /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

例3:

[root@jeson ~]# dd if=/dev/zero of=/file1.txt bs=1M count=2
[root@jeson ~]# dd </dev/zero >/file2.txt bs=1M count=20

例4:mysql课程中用到
[root@jeson ~]# mysql -uroot -p123 < bbs.sql

====================================================
重定向练习:

[root@jeson ~]# cat1111111111112222222222^C

[root@jeson ~]# cat </etc/hosts
[root@jeson ~]# cat </etc/hosts > 1.txt
[root@jeson ~]# cat > file1	//仅改变了输出的方向,输入依然来自键盘111222^D

[root@jeson ~]# cat >file2 <<EOF>555>666>777>EOF
[root@jeson ~]# cat file2 555666777

例1:使用脚本创建文件

[root@jeson ~]# vim b.sh 
#!/bin/bash
#...
cat >/etc/a.conf <<EOF
111222333444
EOF
[root@jeson ~]# ./b.sh

例2:通过脚本输入内容

[root@jeson ~]# vim a.sh //建立脚本
#!/bin/bash#test
cat <<YANG
+-------------------------------+|||该脚本的作用是.....||...................|||+-------------------------------+请选择相应的编号:1.分区2.格式3.创建用户
YANG
[root@jeson ~]# sh a.sh	//执行脚本

====================================================

三、管道


作用:实现进程间通信
Linux程序小,功能单一
用法:command1 | command2 |command3 |…

[root@jeson ~]# ll /dev/ |less
[root@jeson ~]# ps aux |grep 'sshd'
[root@jeson ~]# rpm -qa  |grep 'httpd' //查询所有安装的软件包,过滤包含httpd的包
[root@jeson ~]# yum list  |grep 'httpd'

sort排序
例1:将/etc/passwd中的用户按UID大小排序

[root@jeson ~]# sort -t":" -k3 -n /etc/passwd	//以: 分隔,将第三列按字数升序
[root@jeson ~]# sort -t":" -k3 -n /etc/passwd -r   //逆序
[root@jeson ~]# sort -t":" -k3 -n /etc/passwd |head

-t 指定字段分隔符–field-separator
-k 指定列
-n 按数值

例2:统计当前/etc/passwd中用户使用的shell类型
思路:取出第七列(shell) | 排序(把相同归类)| 去重

[root@jeson ~]# awk -F: '{print $7}' /etc/passwd
[root@jeson ~]# awk -F: '{print $7}' /etc/passwd |sort
[root@jeson ~]# awk -F: '{print $7}' /etc/passwd |sort |uniq 
[root@jeson ~]# awk -F: '{print $7}' /etc/passwd |sort |uniq -c
131/bin/bash
      1/bin/sync
      1/sbin/halt
     63/sbin/nologin
      1/sbin/shutdown

-F: 指定字段分隔符
$7: 第七个字段

例3: 统计网站的访问情况
思路: 打印所有访问的连接 | 过滤访问网站的连接 | 打印用户的IP | 排序 | 去重

[root@jeson ~]# netstat -an |grep :80 |awk -F":" '{print $8}'|sort |uniq -c
4334192.168.0.661338192.168.10.111482192.168.10.12544192.168.10.1833035192.168.10.213375192.168.10.35362192.168.10.39

例4: 打印当前所有IP

[root@jeson ~]# ip addr |grep 'inet ' |awk '{print $2}' |awk -F"/" '{print $1}'
www.iaskjob.com
192.168.2.115

例5:打印根分区已用空间的百分比(仅打印数字)

[root@jeson ~]# df -P|grep '/$' |awk '{print $5}'|awk -F"%" '{print $1}'
[root@Jeson shell_script]# ifconfig eth0|grep 'inet addr'|awk '{print $2}'|awk -F ':' '{print $2}'

练习:统计系统每个用户共用多少进程。
ps -aux|awk ‘{print $1}’|sort |uniq -c|sort -rn
ps -axo user|uniq -c
练习:按cpu的使用由大到小进行排序。
ps -aux|sort -k 3 -r|more
ps -axo %C|sort -rn|grep -v CPU|more
练习:统计日志的访问量。

管道、重定向

Pingbacks已打开。

引用地址

暂无评论

发表评论