Linux基本用法(一)重定向和管道

本文介绍了Linux命令行中的重定向、文件描述符、BashShell和POSIXshell与TCshell的区别,以及管道的使用方法。重点讲解了重定向的顺序、不覆盖文件的重定向选项、管道的内存实现和在命令组中的应用,以及tee工具在管道中的使用。
摘要由CSDN通过智能技术生成

        最近经常与linux打交道,刚开始使用时不太熟悉,要频繁查阅资料,且容易遗忘命令的用法,因此做个记录方便自己日后翻看。

合并输入、输出重定向

cat <src > dst

这里src内容将会放入dst中,若dst原本存在内容,则会被从头截断。

和cp不同,cp是复制,且会将src的inode属性复制到dst上。

文件描述符:标准输入0、标准输出1、标准出错2

Bash Shell和POSIX shell允许用户将文件描述符关联到文件上(TC shell不行)

如cat 0< file,将file关联到标准输入

command 2> error-file,将标准出错关联到error-file上。

注:TC shell中符号>&将标准输出和标准出错重定向到文件中

如果想要拆分标准输出和标准出错,可结合子shell使用。子shell只有在整个命令被处理后才建立起来。

如(command > output) >& error,此时先将子shell的输出被重定向至output,而错误信息则因为父shell的重定向关系送到error中。

命令行解析中,文件重定向顺序从左到右,若想将标准输出和标准出错同时重定向到同一个文件中,需要先将标准输出/错误重定向到指定文件,然后使标准错误/输出的文件描述符成为标准输出/错误的文件描述符

如:cat content 1>output.error 2>&1,效果等于cat content 2>output.error 1>&2,此时不能先2>&1 或 1>&2,这样标准错误或输出仍是显示屏。

由于重定向操作从左到右执行,以 command 1>out 0<input 2>error为例,输入文件Input找不到时,由于未执行到2>error,错误信息仍然会送到显示器中。

不覆盖文件内容的重定向

,>-->>,TCshell中相应有>>&

相反,强制覆盖符为>|,使用前可能需要set -o noclobber或set -c noclobber

管道

管道允许用户将一条命令的标准输出作为另一条命令的标准输入,用管道连接的命令叫做过滤器,管道用|构建

例:ls -l | more,ls-l输出作为more的输入

TC Shell中相应地使用|&,是将标准输出和标准出错同时重定向到下一条命令

管道在内存中实现,并没有使用到磁盘。如果使用文件作为辅助,则可能要用到辅助存储设备,降低效率。

在shell命令层中只能实现命令(进程)的单向通信,双向通信需要在C/C++等编程中实现双向通信。

区别:

用;隔开不同的命令时,不同命令之间独立顺序执行

用&连接命令时,不同命令之间独立并行执行,注意后面跟了&的命令是在后台执行的,两个&之间的所有命令用同一个进程执行

命令组:在同一个进程中顺序执行的一组命令

若有嵌套命令组,则命令组的执行顺序可能会和进程调度相关,不一定按命令输入顺序执行。用()套起来的嵌套命令在子shell下执行。

在管道中使用重定向

管道中若想将标准输出重定向到文件后,便不能再作为后一条命令的标准输入了。若想将重定向后的文件连接到后续命令的标准输入中,可结合tee工具使用。

use. tee [options] file-list

parameter

-a 追加

-i 忽略中断

此时,command1 | tee file1 ... file N | command2

便实现了将command1的标准输出送入到file1-fileN中,并将其作为command2的标准输入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值