重定向和管道
- 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 文件描述符(进程使用文件描述符来管理打开的文件)
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"
😒 错误输出重定向
-
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: 没有那个文件或目录
😗 错误和正确输出重定向
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 管道
❌ 简介:三通管道,即在交给另一个程序处理的同时又保存一份副本
具体实例
- 将第一个命令(
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"