1.重定向
(1)定义
将原本要输出到屏幕的数据信息,重新定向到某个指定的文件中。
(2)为什么要使用重定向
①当屏幕输出的信息很重要,而且希望报错重要的信息时;
②后台执行中的程序,不希望他干扰屏幕正常的输出结果时;
③系统的例行命令,例如定时任务的执行结果,希望可以存下来时;
④一些执行命令,我们已经知道他可能出现错误信息,想将他直接丢弃时;
⑤错误日志与正确日志需要分别输出至不同的文件保存时。
(3)标准输入、标准输出、错误输出
程序运行起来后,变成进程,会同时打开三个文件:标准输入、标准输出、错误输出;
| 名称 | 文件描述符 | 作用 |
|---|---|---|
| 标准输入 | 0 | 默认是键盘,也可以是文件或者其他命令的输出 |
| 标准输出 | 1 | 默认输出到屏幕 |
| 错误输出 | 2 | 默认输出到屏幕 |
| 文件名称 | 3+ |

图片.png
#持续追踪查看文件内容
[root@peachcat1 ~]# tailf /etc/passwd
#Ctrl+z转入后台
#查看运行的进程
[root@peachcat1 ~]# ps
PID TTY TIME CMD
8692 pts/0 00:00:00 bash
8730 pts/0 00:00:00 tailf
8731 pts/0 00:00:00 ps
#查看pid8730进程下的文件描述符
[root@peachcat1 ~]# ls -l /proc/8730/fd
total 0
lrwx------. 1 root root 64 Aug 9 15:08 0 -> /dev/pts/0
lrwx------. 1 root root 64 Aug 9 15:08 1 -> /dev/pts/0
lrwx------. 1 root root 64 Aug 9 15:06 2 -> /dev/pts/0
lr-x------. 1 root root 64 Aug 9 15:08 3 -> anon_inode:inotify
#Linux查看标准输入输出设备
[root@peachcat1 ~]# ls -l /dev/std*
lrwxrwxrwx. 1 root root 15 Aug 9 08:00 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx. 1 root root 15 Aug 9 08:00 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx. 1 root root 15 Aug 9 08:00 /dev/stdout -> /proc/self/fd/1
(4)输出重定向
| 符号 | 作用 |
|---|---|
| > | 标准输出重定向(覆盖) |
| >> | 标准输出重定向(追加) |
| 2> | 标准错误输出重定向(覆盖) |
| 2>> | 标准错误输出重定向(追加) |
| &> | 混合输出(覆盖) |
| &>> | 混合输出(追加) |
| < | 输入重定向 |
| ; | cmd1;cmd2,无论前者命令成功还是失败,都执行后者命令 |
| && | cmd1&&cmd2,前者命令执行成功,后者命令才会执行 |
| || | cmd1||cmd2,前者命令执行失败,后者命令才会执行 |
| & | 将程序放入后台执行(screen将程序放入后台) |
(5)输入重定向
原本从键盘等上获得的输入信息,重定向命令的输出作为输入;
[root@peachcat1 ~]# mail peach1
Subject: hello
aaaaa
bbbbb
ccccc
.
EOT
[peach1@peachcat1 ~]$ mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/peach1": 1 message 1 new
>N 1 root Fri Aug 9 15:48 20/623 "hello"
& 1
Message 1:
From root@peachcat1.localdomain Fri Aug 9 15:48:43 2019
Return-Path: <root@peachcat1.localdomain>
X-Original-To: peach1
Delivered-To: peach1@peachcat1.localdomain
Date: Fri, 09 Aug 2019 15:48:43 +0800
To: peach1@peachcat1.localdomain
Subject: hello
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: text/plain; charset=us-ascii
From: root@peachcat1.localdomain (root)
Status: R
aaaaa
bbbbb
ccccc
[root@peachcat1 ~]# grep "root"
xxx
xxx
[root@peachcat1 ~]# grep "root" < /etc/passwd
root:x:0:0:root:/root:/bin/bash
2.管道
(1)定义
管道操作符号“|”,主要用来连接两个命令,将左侧的命令的标准输出,交给右侧命令的标准输入,无法传递标准错误输出至后者命令。
(2)流程图

图片.png
(3)管道中的tee技术

图片.png
[root@peachcat1 ~]# ip addr | grep 'inet' | tee ip.txt | awk -F "/" '{print $1}' | awk '{print $2}'
127.0.0.1
10.0.0.200
[root@peachcat1 ~]# 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 ens32
(4)xargs参数传递
主要让一些不支持管道技术的命令可以使用管道技术
#which cat | xargs ls -l
#ls | xargs rm -fv