2019-08-09

day14-重定向

1、重定向概念

1、什么是重定向

将原本要输出到屏幕的数据信息,重定向到某个指定的文件中。

2、为何要使用重定向

1、当屏幕输出的信息很重要,而且希望保存重要的信息时;
2、后台执行中的程序,不希望它干扰屏幕正常的输出结果时;
3、系统的例行命令,例如定时任务的执行结果,希望可以不存下来时;
4、一些执行命令,我们已经知道他可能出现错误信息,想将它直接丢弃时;
5、错误日志与正常日志要分别输出至不同的文件保存时;
< 输入重定向
; cmd1 ; cmd2 无论前者命令成功还是失败,都执行后者命令
&& cmd1 && cmd2 前者命令执行成功,后者命令才会执行
|| cmd1 || cmd2 前者命令执行失败,后者命令才会执行
& 将程序放入后台执行 ( screen 将程序放入后台 )

3、学习重定向的预备知识,标准输入与输出

当运行一个程序时通常会自动打开三个标准文件,分别是标准输入、标准输出、错误输出
1565333294026.png
进程将从标准输入中得到数据,将正常输出打印至屏幕终端,将错误的信息也打印至屏幕终端
ps:进程是使用文件描述(file descriptors)来管理打开的文件
以cat命令为例,cat命令的功能是从命令行给出的文件中读取数据,并将这些数据直接送到标准输出。
#会把文件/etc/passwd的内容输出显示到屏幕上
[root@wzz ~]# cat /etc/passwd

如果使用cat命令没有跟上输入的文件名,那么cat命令则会通过命令行标准输入中读取数据,并将其送到标准输出。

[root@wzz ~]# cat
hello
hello
^C
#用户输入的每一行都立刻cat命令输出到屏幕上。

下面了解一下标准输入输出过程

#持续追踪查看文件内容
[root@wzz ~]# tail -f /etc/passwd
#查看运行的进程
[root@wzz ~]# ps
 PID TTY          TIME CMD
 6655 pts/0    00:00:00 bash
 6812 pts/0    00:00:00 ps
 #查看tail命令的pid,6655进程下的文件描述
[root@wzz ~]# ls -l /proc/6655/fd
total 0
lrwx------. 1 root root 64 Aug  9 12:02 0 -> /dev/pts/0
lrwx------. 1 root root 64 Aug  9 12:02 1 -> /dev/pts/0
lrwx------. 1 root root 64 Aug  9 12:02 2 -> /dev/pts/0
lrwx------. 1 root root 64 Aug  9 15:10 255 -> /dev/pts/0
#Linux查看标准输入输出设备
[root@wzz ~]# ls -l /dev/std*
lrwxrwxrwx. 1 root root 15 Aug  9 12:00 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx. 1 root root 15 Aug  9 12:00 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx. 1 root root 15 Aug  9 12:00 /dev/stdout -> /proc/self/fd/1

2、输出重定向

输出重定向,改变输出内容的位置。输出从定向有几种方式,如表格所示
1565334908397.png
案例1:标准输出从定向(每次都会覆盖文件)
#标准输出重定向,先清空,后写入,如果文件不存在则创建
[root@wzz ~]# ifconfig eth0 >abc
[root@wzz ~]# cat abc
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
 inet 10.0.0.200  netmask 255.255.255.0  broadcast 10.0.0.255
 inet6 fe80::5174:534f:631a:8a37  prefixlen 64  scopeid 0x20<link>
 ether 00:0c:29:08:f0:17  txqueuelen 1000  (Ethernet)
 RX packets 1639  bytes 142658 (139.3 KiB)
 RX errors 0  dropped 0  overruns 0  frame 0
 TX packets 1304  bytes 144602 (141.2 KiB)
 TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0</pre>
 案例2:标准输出重定向(会往文件的尾部添加内容)
#标准追加输出重定向,向配置文件末尾追加内容
[root@wzz ~]# echo "This is network conf" >>abc
[root@wzz ~]# cat abc
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
 inet 10.0.0.200  netmask 255.255.255.0  broadcast 10.0.0.255
 inet6 fe80::5174:534f:631a:8a37  prefixlen 64  scopeid 0x20<link>
 ether 00:0c:29:08:f0:17  txqueuelen 1000  (Ethernet)
 RX packets 1639  bytes 142658 (139.3 KiB)
 RX errors 0  dropped 0  overruns 0  frame 0
 TX packets 1304  bytes 144602 (141.2 KiB)
 TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
​
This is network conf</pre>
 案例3:错误输出重定向
#正确输出以及错误输出重定向至一个文件
[root@wzz ~]# ls abc
abc
[root@wzz ~]# lls abc
-bash: lls: command not found
[root@wzz ~]# 
#将标准输出和标准错误输出重定向到不通文件
[root@wzz ~]# ls abc,lls abc 1>a 2>
案例4:正确和错误都输入到相同位置
#将标准输出和标准错误输出重定向到同一个文件,混合输出
[root@wzz ~]# ls abc,lls abc >&ab
#合并两个文件内容至一个文件
[root@wzz ~]# cat a b >c</pre>
 案例5:正确和错误都输入到相同位置
#重定向到相同的位置
[root@wzz ~]# ls abc,lls abc >ab 2>&1</pre>
案例6:重定向到空设备
#产生的任何数据放入黑洞设备,则视为丢弃。
[root@wzz ~]# ls abc,lls abc >ab 2>/dev/null
[root@wzz ~]# ls abc,lls abc >ab &>/dev/null</pre>
案例7:脚本中使用重定向
[root@wzz ~]# vim ping.sh 
ping -c 10.0.0.100 &>/dev/null
​if [ $? -eq  0 ];then
 echo "10.0.0.100 up."
else
 echo "10.0.0.100 down."
fi
案例8:脚本中使用重定向
[root@wzz ~]# vim ping2.sh 
ping 10.0.0.100 -c 1 -W 1 &>/dev/null
​if [ $? -eq  0 ];then
 echo "10.0.0.100 up" >> up.txt
else
 echo "10.0.0.100 down" >> down.txt
fi
[root@wzz ~]# chmod +x ping2.sh
[root@wzz ~]# ./ping2.sh</pre>

3、输入重定向

输入重定向,即原本从键盘上获得的输入信息,重定向由命令的输出作为输入。<等价0<
案例1:从文件中读入输出的操作
#没有改变输入的方向,默认键盘
[root@wzz ~]# mail alice
Subject: hello
1111111111
2222222222
3333333333
.
EOT
#检查是否收到邮件
[root@wzz ~]#su - alice
[root@wzz ~]#mail
#输入重定向,来自于文件
[root@wzz ~]#mail -s "test01" alice < /etc/hosts</pre>
案例2:脚本中打印菜单的一种使用方法
[root@wzz ~]#vim vm.sh
cat <<-EOF
+------------------------------------+ ||
| ============================= |
| 虚拟机基本管理 v5.0 |
| by wzz |
| ===================== |
| 1.安装KVM |
| 2.安装或重置 centos-6.9 |
| 3.安装或重置 centos-7.4 |
| 4.删除所有虚拟机 |
| q. 退出管理程序 |
+-------------------------------------+
EOF

subshell

[root@wzz ~]# cd /boot; ls
#如果不希望某些命令的执行对当前 shell 环境生产影响,请在subshell中执行

3、进程管道技术

1.什么是管道

管道操作符号 “|”,主要用来连接左右两个命令,将左边的命令的标准输出,交给右侧命令的标准输入

2.管道格式:cmd1 | cmd2 [..../cmdn]

案例1:将/etc/passwd 中的用户按UID大小写排列
[root@wzz ~]# cat /etc/passwd | awk -F ":" '{print $3}'| sort -rn</pre>

3.管道中的tee技术

选项: -a追加
[root@wzz ~]# ip addr | grep 'inet ' | tee ip.txt | awk -F "/" '{print $1}' | awk '{print $2}'
127.0.0.1
10.0.0.200
[root@wzz ~]# cat ip.txt
 inet 127.0.0.1/8 scope host lo
 inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0</pre>

4、xargs参数传递

# which cat | xargs ls -l
#ls | xargs rm -fv
#ls | xargs cp -rvt /tmp
#ls | xargs -I {} /tmp</pre>

4、小结

1.什么是重定向:将原本要输出到屏幕的数据信息,重新定向到某个指定的文件中。
2.重定向使用场景?
3.标准输入\ 标准输出 错误输出?
程序运行起来后,变为进程, 会同时打开三个文件 标准输入 标准输出 错误输出.
标准输入 0 标准输出 1 错误输出 2 3+
4.标准输入输出 错误\ 与重定向之间有什么关系?
重定向就是用来改变标准输出 或者标准错误输出的一个指向.
1> 标准输出重定向 (覆盖)
1>> 标准输出重定向 (追加)2> 标准错误输出重定向 (覆盖)
2>> 标准错误输出重定向 (追加)
&>/dev/null 混合输出 (覆盖)
&>>/tmp/t.log 混合输出 (追加)
5.输入重定向?
从文件中获取内容. <
6.进程管道技术 |
将左边命令的标准输出 ---传递---> 右边命令的标准输入 --->标准输出| 错误输出
tee 将左边命令的标准输出保存至文件或打印至终端, 但不影响管道数据的一个传递
xargs 用于将不支持管道的命令 支持管道 左边命令的输出作为参数进行传递
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容

  • 咋日回顾 1.特殊权限 SUID 功能:任何用户执行带有suid的命令,都是用该命令的属主权限 用此命令非...
    5不忘初心0阅读 333评论 0 0
  • 1.什么是重定向? 将原本要输出到屏幕的数据信息,重新定向到某个指定的文件中。 2.为什么要使用重定向? 1.当屏...
    张小鱼哦阅读 590评论 0 0
  • 1.重定向概述 1.什么是重定向 将原本要输出到屏幕的数据信息,重新定向到某个指定的文件中。比如:每天凌晨定时备份...
    康酱呦阅读 269评论 0 0
  • 重定向 '>':输出重定向--将原本要输出到屏幕上的正确的内容输入到指定的文件中,并覆盖文件原内容。'1>':标准...
    闫梦超阅读 122评论 0 0
  • 深度学习:莫烦python: torch&numpy很像,不过后者一开始要import里面会多出一个as np。除...
    芜青子阅读 566评论 0 0