Linux学习:管道和重定向
扫描二维码
随时随地手机看文章
---- 在Linux系统当中,大多数命令都很简单,很少有复杂功能的命令。每个命令往往只实现一个或几个很简单的功能。
---- 我们可以通过将不同功能的命令组合在一起使用,以达到完成某个复杂功能的目的。
---- Linux中,几乎所有命令的返回数据都是纯文本的(因为命令都是运行在CLI - Command line Interface命令行界面下),而纯文本
形式的数据又是绝大多数命令的输入格式,这就让多命令协作称为可能。
---- Linux的命令行为我们提供了管道和重定向机制,多命令协作就是通过管道和重定向完成的。
---- 命令行Shell的数据流有以下定义:
名称
说明
编号
默认
STDIN
标准输入
0
键盘
STDOUT
标准输出
1
终端
STDERR
标准错误
2
终端
命令通过 STDIN 接收参数或数据,通过 STDOUT 输出结果或通过 STDERR 输出错误。
通过管道和重定向,我们可以控制CLI的数据流。
---- 重定向
关键字
定义
>(1>)
将STDOUT重定向到文件(覆盖)
>>
将STDOUT重定向到文件(追加)
2>
将STDERR重定向到文件(覆盖)
2>&1
将STDERR与STDOUT结合
(标准错误重定向到标准输出)
<
重定向STDIN
在csh环境下:
> 和 2>: 如果目标文件不存在,则创建文件。如果存在,则覆盖。
将/etc/passwd的内容作为输入给grep命令,来查找root所在的行。
---- 管道
关键字
定义
|
将一个命令的STDOUT作为另一个命令的STDIN
[yanxia.dong@eslruntime07 exercise]$ ls file out outfile [yanxia.dong@eslruntime07 exercise]$ ls -l | grep out -rw-r--r-- 1 yanxia.dong users 29 Apr 15 15:12 out -rw-r--r-- 1 yanxia.dong users 6 Apr 15 15:22 outfile [yanxia.dong@eslruntime07 exercise]$ find . -user yanxia.dong | grep file ./file ./outfile [yanxia.dong@eslruntime07 exercise]$ find . -user yanxia.dong > myout | grep file [yanxia.dong@eslruntime07 exercise]$ cat myout . ./out ./file ./outfile ./myout [yanxia.dong@eslruntime07 exercise]$ find . -user yanxia.dong | grep file > myout [yanxia.dong@eslruntime07 exercise]$ cat myout ./file ./outfile
管道通常用来组合不同的命令,以实现一个复杂的功能。
重定向通常用来保存某命令的输出信息或错误信息。可以用来记录执行结果或保存错误信息到一个指定的文件。(保存log等)
---- script 多个命令的输出都需要记录,可以用script
[yanxia.dong@eslruntime07 ~]$ script Script started, file is typescript.
我们在启动 script 时没有指定文件名,它会自动记录到当前目录下一个名为 typescript 的文件中。也可以用 -a 参数指定文件名
[yanxia.dong@selruntime07 ~]$ script -a my.txt Script started, file is my.txt
此时终端的输出内容被记录到 my.txt 这个文件中。
退出 script 时,用 exit 命令。