day12-重定向和管道技术

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容