重定向和管道

  • 1、重定向
  • 1.1、标准输入、标准输出、标准错误
  • 1.2、重定向案例
  • 1.2.1、输出重定向及综合案例
  • 2、管道
  • 2.1、管道 (|)
  • 2.1.1、进程管道 Piping
  • 2.1.2、tee 管道
  • 2.2、参数传递 Xargs


1、重定向

🅰️ 时间命令:date

  • 敲一次命令只能查看一次时间信息
  • 如果我们想把此段内容保存,就得把内容写入文件
  • 我们可以直接编辑文本写入文件,或者用重定向命令(date > date.txt
[root@localhost ~]# date
2021年 04月 12日 星期一 00:17:35 CST

[root@localhost ~]# date > date.txt 
[root@localhost ~]# vim date.txt

1.1、标准输入、标准输出、标准错误

FD 简介:file descriptors 文件描述符(进程使用文件描述符来管理打开的文件)

centos7重定向到串口 centos重定向命令_linux


centos7重定向到串口 centos重定向命令_python_02


FD是访问文件的标识,即链接文件

  • 0 是键盘只读
  • 1,2 是终端(可以理解是屏幕)
  • 3+ 是文件,可读可写

😃 具体实例

  • 通过一个终端,打开一个文本
[root@localhost ~]# tty
/dev/pts/1
[root@localhost ~]# vim 1.txt
  • 通过另一个终端,查询文本程序的进程号(3289)
[root@localhost ~]# tty
/dev/pts/2
[root@localhost ~]# ps  aux| grep vim
root       3289  0.3  0.1 149804  5420 pts/1    S+   00:39   0:00 vim 1.txt
root       3293  0.0  0.0 112824   976 pts/2    R+   00:39   0:00 grep --color=auto vim
  • 在 /proc 目录中查看文本程序的 FD(/proc/进程号/fd)
  • 看到的 0123 就是FD,程序通过描述符访问文件,可以是常规文件,也可以是设备文件。
[root@localhost ~]# ls /proc/3289/fd
0  1  2  3
[root@localhost ~]# ll /proc/3289/fd
总用量 0
lrwx------. 1 root root 64 4月  12 00:41 0 -> /dev/pts/1
lrwx------. 1 root root 64 4月  12 00:41 1 -> /dev/pts/1
lrwx------. 1 root root 64 4月  12 00:39 2 -> /dev/pts/1
lrwx------. 1 root root 64 4月  12 00:41 3 -> /root/.1.txt.swp

1.2、重定向案例

1.2.1、输出重定向及综合案例

🅰️ 输出重定向

  • 正确输出(1> 等价于 > )(1>> 等价于 >>)
  • 错误输出(2>)(2>>)

😃 正确输出重定向

  • date 1> date.txt (date >> date.txt )(之前已经介绍)
  • mkdir -v dir >> dir.txt(把创建目录过程可视化并且写入文件)
[root@localhost ~]# mkdir -v dir >> dir.txt
[root@localhost ~]# ls | grep dir
dir
dir.txt
[root@localhost ~]# vim dir.txt
# output:mkdir: 已创建目录 "dir"

centos7重定向到串口 centos重定向命令_linux_03

😒 错误输出重定向

  • ls /home/ 2> list.txt (存在 /home/)
[root@localhost ~]# ls /home/    2>    list.txt 
keke  love  sushuohan  susu  xiaohan  xiaoke
[root@localhost ~]# vim list.txt 
# output:空
# 因为此过程没有产生错误信息, 所以文本内没有内容
  • ls /aaaaaaaaa 2> list.txt (不存在 /aaaaaaaaa)
[root@localhost ~]# ls  /aaaaaaaaa 2>  list.txt 
[root@localhost ~]# cat list.txt 
ls: 无法访问/aaaaaaaaa: 没有那个文件或目录

centos7重定向到串口 centos重定向命令_centos7重定向到串口_04


😗 错误和正确输出重定向

  • ls /home/ /aaaaaaaaa &> list.txt
[root@localhost ~]# ls /home/ /aaaaaaaaa &> list.txt
[root@localhost ~]# cat list.txt 
ls: 无法访问/aaaaaaaaa: 没有那个文件或目录
/home/:
keke
love
sushuohan
susu
xiaohan
xiaoke

2、管道

2.1、管道 (|)

2.1.1、进程管道 Piping

❌ 简介:管道命令可以将多条命令组合起来,一次性完成复杂的处理任务

❌ 语法:command1 | command2 |command3 |...

[xiaohan@localhost root]$ cat   /etc/passwd   | tail -3
love:x:2002:2003::/home/love:/bin/bash
xiaohan:x:2003:2004::/home/xiaohan:/bin/bash
xiaoke:x:2004:2005::/home/xiaoke:/bin/bash

2.1.2、tee 管道

❌ 简介:三通管道,即在交给另一个程序处理的同时又保存一份副本

centos7重定向到串口 centos重定向命令_python_05


具体实例

  • 将第一个命令(cat /etc/passwd)交给第三个命令(tail -1)处理
  • 保留第一个命令(cat /etc/passwd)至第二个命令中(tee 88.txt
[root@localhost ~]# cat /etc/passwd |tee 88.txt | tail -1
xiaoke:x:2004:2005::/home/xiaoke:/bin/bash

2.2、参数传递 Xargs

自定义场景

  • 准备文件(touch file{1,2,3,4,5}
[root@localhost /]# touch file{1,2,3,4,5}
  • 需要删除文件(file1,file3,file5
  • 新建文件(files.txt
[root@localhost /]# touch files.txt
[root@localhost /]# vim files.txt 

# files.txt 写入内容
/file1
/file3
/file5
  • 使用管道删除文件(cat files.txt |rm -rvf删除失败
[root@localhost /]# cat files.txt | rm -rvf
[root@localhost /]# ls | grep file1
file1
  • 传递参数 xargs 再次进行删除
[root@localhost /]# cat files.txt | xargs rm -rvf
已删除"/file1"
已删除"/file3"
已删除"/file5"