Linux -- 重定向与管道

标准输入和输出

  • 程序:指令+数据
    读入数据:Input
    输出数据:Output
    打开的文件都有一个fd: file descriptor (文件描述符)
  • Linux给程序提供三种I/O设备
    标准输入(STDIN)-0 默认接受来自键盘的输入
    标准输出(STDOUT)-1 默认输出到终端窗口
    标准错误(STDERR)-2 默认输出到终端窗口

I/O重定向:改变默认位置

  • 把输出和错误重新定向到文件

  • STDOUT和STDERR可以被重定向到文件
    命令 操作符号 文件名
    支持的操作符号包括:
  • > 把STDOUT重定向到文件
  • 2> 把STDERR重定向到文件
  • &> 把所有输出重定向到文件
  • > 文件内容会被覆盖
  • >> 原有内容基础上,追加内容
  1. 使用 > 将标准输出的内容指定到某个文件,不直接在屏幕上显示,但是指定的文件内容会被覆盖。
[root@CentOS7 ~]# hostname
CentOS7.localdomain
[root@CentOS7 ~]# hostname > /data/log
[root@CentOS7 ~]# cat /data/log
CentOS7.localdomain
  1. 使用 >> 将标准输出的内容指定到某个文件,不直接在屏幕上显示,原有内容不会被覆盖,追加指定内容。
  • null 空设备,可以把所有不需要存放的信息存放进去。路径为 /dev/null
[root@CentOS7 ~]# hostname > /dev/null
  1. 使用 2>将标准输出重定向 ,且覆盖原文件。
    使用>与2>结合,可以将错的和对的分别放入不同的文件里。
[root@CentOS7 ~]# ls /data/log >f1 2>f2
  1. 使用&>把所有输出重定向到文件,且覆盖原文件,&>>为追加内容。
  2. <的使用,事先将需要输出的命令写入文件里,然后输入的命令 < 文件名。即为标准输入的重定向
[root@CentOS7 ~]# bc < bc.log
18
5

     注:bc为计算器,事先将3*6与2+3写入bc.log文件里。直接利用上述公式即可做到批量运算。

管道符

  • 管道(使用符号“|”表示)用来连接命令
    命令1 | 命令2 | 命令3 | …
  • 将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN
  • STDERR默认不能通过管道转发,可利用2>&1 或 |& 实现
  • 最后一个命令会在当前shell进程的子shell进程中执行用来
  • 组合多种工具的功能
    ls | tr ‘a-z’ ‘A-Z’
    注:管道符只用处理标准输出,及左边命令必须为标准输出命令,错误命令不可使用
[root@CentOS7 ~]# echo 2*3
2*3
[root@CentOS7 ~]# echo 2*3 | bc
6

tr 命令

  • tr 转换和删除字符
  • tr [OPTION]… SET1 [SET2]
  • 选项:
  1. -c –C --complement:取字符集的补集
  2. -d --delete:删除所有属于第一字符集的字符
  3. -s --squeeze-repeats:把连续重复的字符以单独一个字符表示
  4. -t --truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符
[root@CentOS7 ~]# who
lqx      :0           2019-03-23 08:50 (:0)
lqx      pts/0        2019-03-23 08:51 (:0)
root     pts/1        2019-03-23 08:52 (192.168.152.1)
root     pts/2        2019-03-23 13:57 (192.168.152.1)
[root@CentOS7 ~]# who | tr 'a-z' 'A-Z'
LQX      :0           2019-03-23 08:50 (:0)
LQX      PTS/0        2019-03-23 08:51 (:0)
ROOT     PTS/1        2019-03-23 08:52 (192.168.152.1)
ROOT     PTS/2        2019-03-23 13:57 (192.168.152.1)
bash: ty: command not found...
[root@CentOS7 ~]# who | tr 'a-z' 'A-Z'| tr -d '0-9'
LQX      :           -- : (:)
LQX      PTS/        -- : (:)
ROOT     PTS/        -- : (...)
ROOT     PTS/        -- : (...)

单行与多行重定向

  • > 为单行重定向
[root@CentOS7 ~]# cat > f3.log
333
444
^C
[root@CentOS7 ~]# cat f3.log
333
444
  • <<为多行重定向,命令的终止词必须与输入结果最后一行的终止词一致。
[root@CentOS7 ~]# cat >f4.log <<EOF
> ddd
> aaa
> EOF
[root@CentOS7 ~]# cat f4.log
ddd
aaa

注:EOF为end of file,经常被用来当多行重定向的标识符。

tee 重定向到多个目标

  • 命令1 | tee [-a ] 文件名 | 命令2
    把命令1的STDOUT保存在文件中,做为命令2的输入
    tee -a ,不会覆盖文件内容。
  • 使用:
  1. 保存不同阶段的输出
  2. 复杂管道的故障排除
  3. 同时查看和记录输出
[root@CentOS7 ~]# hostname | tee tee.lg
CentOS7.localdomain
[root@CentOS7 ~]# cat tee.lg
CentOS7.localdomain
[root@CentOS7 ~]# hostname | tee tee.lg | tr 'a-z' 'A-Z'
CENTOS7.LOCALDOMAIN

     以上内容仅供参考,如有不足之处,欢迎批评指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值