位置: 编程技术 - 正文

玩转Linux文件描述符和重定向(linux怎么操作文件)

编辑:rootadmin

推荐整理分享玩转Linux文件描述符和重定向(linux怎么操作文件),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:linux怎么写文件内容,linux s文件,linux文件详解,linux 文件,linux文件基础知识,linux怎么写文件内容,linux怎么操作文件,linux 文件,内容如对您有帮助,希望把文章链接给更多的朋友!

linux下的文件描述符是与文件输入、输出相关联的整数。它们用来跟踪已打开的文件。最常见的文件描述符是stdin、stdout和stderr.我们可以将某个文件描述符的内容重定向到另一个文件描述符中。

下面给出一些对文件描述符进行操作和重定向的例子。

1.5.1 预备知识

我们在编写脚本时会频繁使用标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。

通过内容过滤将输出重定向到文件是我们从事的基础任务之一。

当命令输出文本时,这些输出文本有可能是错误信息,也可能是正常的(非错误的)输出信息。单靠查看输出的文本本身, 我们无法区分哪些是正常的输出文本,哪些是错误文本。不过,我们可以通过文件描述符来解决这个问题,将那些与特定描述符关联的文本提取出来。文件描述符是与一个打开的文件或数据流相关联的整数。文件描述符0、1以及2是系统预留的。0——stdin(标准输入)1——stdout(标准输出)2——stderr(标准错误)

1.5.2 实战演练

将输出文本重定向或保存到一个文件中:

复制代码代码如下:$echo"This is a sample text 1">temp.txt

这种方法通过截取文件的方式,将输出文本存储到文件temp.txt中,也就是说在把echo命令的输出写入文件之前,temp.txt中的内容首先会被清空。接下来,再看另一个例子: 复制代码代码如下:$echo "this is sample text 2" >>temp.txt

这种方法会将文本追加到目标文件中。>和>>并不相同。尽管这两个操作符都可以将文本重定向到文件,但是前者会先清空文件,再写入内容;而后者会将内容追加到现有文件的尾部。可以用下面的方法查看文件内容:

复制代码代码如下:$cat temp.txtthis is sample text 1this is sample text 2

在linux操作系统中,当使用重定向操作符时,重定向的内容不会出现在终端,而是直接被导入文件。重定向操作符默认使用标准输出。如果想使用特定的文件描述符,你必须将描述符置于操作符之前。

>等同于1>;对于>>来说,情况也类似(即>>等同于1>>)。来看看什么是标准错误以及如何对它重定向。当命令输出错误信息时,stderr信息就会被打印出来。考虑下面的例子: 复制代码代码如下:$ Is + Is:cannot access +:No such file or directory

这里,+是一个非法参数,因些将返回错误信息。[ 成功和不成功的命令 当一个命令发生错误并退回时,它会返回一个非0的退出状态;而当命令成功完成后,它会返回数字0。退出状态可以从特殊变量$? 中获得(在命令执行语句之后立刻运行echo$?,就可以打印出退出状态)。]

将stderr文本打印到屏幕上,而不是文件中。

复制代码代码如下:$ Is+>out.txtIs:cannot access+:No such file or directory

然而在下面的命令中,stdout没有任何输出,因为错误已经重定向到out.txt中去了。

复制代码代码如下:$ Is +2> out.txt # 正常运行

你可以将stderr单独重定向到一个文件,将stdout重定向到另一个文件:

复制代码代码如下:$ cmd 2>stderr.txt 1>stdout.txt

还可以利用下面的方法将stderr转换成stdout,使得stderr和stdout都被重定向到同一个文件中:

复制代码代码如下:$ cmd 2>&1 output.txt

或者采用下列方法:

复制代码代码如下:$ cmd&> output.txt

有时候,在输出中可能包含一些不必要的信息(比如除错信息)。如果你不想让终端中充斥着有关stderr的繁枝末节,那么你可以将stderr的输出重定向到/dev/null, 保证一切都会被清除得干干净净。假设我们有三个文件,分别是a1、a2、a3。但是普通用户对a1没有“读一写一执行”权限。如果你需要打印文件名以a起始的所有文件的内容,你可以使用cat命令。设置一些测试文件:

复制代码代码如下:$ echo a1 >a1$ cp a1 a2;cp a2 a3;$ chmod a1 #清除所有权限

尽管可以使用通配符(a*)显示所有的文件内容,但是系统会显示一个出错信息,因为对文件a1没有可读权限。

复制代码代码如下:$ cat a* cat:a1 permission denieda1a1

玩转Linux文件描述符和重定向(linux怎么操作文件)

其中,cat:a1:permission denied 属于stderr。我们可以将stderr信息重定向到一个文件中,而stdout 仍然保持不变。考虑如下代码:

复制代码代码如下:$ cat a* 2>err.txt #stderr被重定向到err.txta1a1$ cat err.txtcat:a1:permission denied

观察下面的代码:

复制代码代码如下:$ some_command 2>/dev/null

本节是 玩转Linux文件描述符和重定向 第二页的内容,欢迎大家继续阅读。

在这个示例中,来自stderr的输出被丢到文件/dev/null中。/dev/null是一个特殊的设备文件,这个文件接收到的任何数据都会被丢弃。

因此,null设备通常也被为位桶(bit bucket)或黑洞。当对stderr或stdout进行重定向时,重定向的文本将传入文件。

因为文本已经被重定向到文件中,也就没剩下什么东西可以通过管道(|)传给接下来的命令,而这些命令是通过stdin来接收文本的。但是有一个巧妙的方法可以一方面将数据重定向到文件,另一方面还可以提供一些重定向数据的副本作为后续命令的stdin。

这一切都可以使用tee来实现。

举个例子:要在终端中打印stdout,同时将它重定向到一个文件中,那么可以这样使用tee:

复制代码代码如下:command | tee FILE1 FILE2

在下面的代码中,tee命令接收到来自stdin的数据。它将stdout的一份副写入文件out.txt,同时将别一份副本作为后续命令的stdin。命令cat -n将从stdin中接收到的每一行数据前加上行号并写入stdout:

复制代码代码如下:$ cat a*| tee out.txt| cat -ncat: a1: permission denied 1 a a1

查看out.txt 的内容:

复制代码代码如下:$ cat out.txta1a1

注意,cat:a1:permission denied并没有在任何文件内容中出现。这是因为这些信息属于stderr,而tee只能从stdin中进行读取。默认情况下,tee命令会将文件覆盖,但是提供了一个-a选项,可以用于追加内容。例如:

复制代码代码如下:$ cat a*| tee -a out.txt| cat -n.

带有参数的命令可以写成:command FILE1 FILE2依次类推,或者简简单单地用command FILE。我们可以使用stdin作为命令参数。只需要将-作为命令的文件名参数即可:

复制代码代码如下:$ cmd1 |cmd2 |cmd -

例如:

复制代码代码如下:$ echo who is this | tee-who is thiswho is this

或者我们也可以将/dev/stdin作为输出文件名来使用stdin。类似的,使用/dev/stderr代表标准错误,/dev/stdout代表标准输出。这些特殊的设备文件分别对应stdin、stderr和stdout。

补充内容:从stdin读取输入的命令能以多种方式接收数据。另外,还可以用cat和管道来制定我们自己的文件描述符,例如:

复制代码代码如下:$ cat file | cmd$ cmd1 | cmd2

1.将文件重定向到命令借助重定向,我们可以像使用stdin那样从文件中读取数据:

复制代码代码如下:$ cmd <file

2.重定向脚本内部的文本块有时候,需要对文本块(多行文本)像标准输入一样进行重定向。考虑一个特殊情况:源文本就位于shell脚本中。

来看下面这段shell脚本吧,向log文件中写入头部数据,可以按照下面的方法完成:

复制代码代码如下:#!/bin/bashcat <<EOF>log.txtLOG FILE HEADERThis is a test log fileFunction:System statisticsEOF

在cat <<EOF>log.txt与下一个EOF行之间的所有文本行都会被当做stdin数据。log.txt文件的内容打印如下:

复制代码代码如下:$ cat log.txtLOG FILE HEADERThis is a test log fileFunction:System statistics

如何远程登录linux主机并更换IP地址 问题分析:根据开发组同事反应,通过VCenter对RHEL6.0以下版本的系统进行克隆的时候,无法使用高级选项进行IP的指定操作,从而通过CloudStack对新的实例

Linux系统中个最危险的命令详解 我们大多数的朋友都是一辈子都用的windows系统,基本用鼠标就可以完成所有的操作,但是在Linux系统中那么基本上就是键盘+命令操作电脑的,Linux命令

linux比较两个文件是否一样(linux命令md5sum使用方法) 1、简介MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改。MD5全称是报文摘要算法(Message-DigestAlgorithm5),此算法对任意长度的信息逐

标签: linux怎么操作文件

本文链接地址:https://www.jiuchutong.com/biancheng/359061.html 转载请保留说明!

上一篇:图片缩略图生成工具GraphicsMagick介绍及安装方法(图片缩略图是什么意思)

下一篇:如何远程登录linux主机并更换IP地址(如何远程登录路由器)

  • 增值税发票查询网络异常
  • 增值税专用发票有效期是多长时间
  • 公户网上转账怎么撤回
  • 过路费按照什么缴纳增值税
  • 预提工资与计提工资的区别
  • 单位之间调动
  • 营业执照经营范围劳务怎么写
  • 冲红票需要给购方吗
  • 利润表中的其他综合收益
  • 法人把自己的车租给公司交什么税
  • 人力资源服务费发票可以抵扣吗
  • 旅游开发公司有什么职位
  • 企业房产税怎么申报缴纳
  • 公司收到转账支票怎么盖章
  • 资产评估收益法的前提条件
  • 主营业务成本属于
  • 出口退税当期不得免征和抵扣的税额
  • 总公司委托分公司开票的委托书
  • 收到报废车款要交什么税
  • 增值税缴纳地方怎么填
  • 营改增后建筑服务包括内容
  • 减免附加税还要计提吗
  • 餐饮业是否可以开专用发票
  • 物业管理的差额怎么算
  • 发票冲红还需要作废吗
  • 所得税预缴资产怎么算
  • 抵扣发票勾选到哪个科目
  • 接管财务要对接哪些内容?
  • 连续亏损二年怎么处理
  • windos10不显示桌面
  • switpa.exe - switpa是什么进程
  • 在建工程工程款优先受偿权
  • 银行保证金账务处理流程
  • 增值税进项如何取得更多
  • win10回滚系统
  • 显示器有必要买240hz吗
  • php imagestring
  • 退回银行本票会计分录
  • php如何实现
  • 可变现净值属于资产计量属性吗
  • 税款滞纳金会计处理
  • 报表上如何把账号删除
  • 比斯蒂荒野上的“外星孵化场”,新墨西哥州 (© Ian Shive/Tandem Stills + Motion)
  • php抓取
  • 一键部署源码
  • 机器学习:基于逻辑回归对优惠券使用情况预测分析
  • 装修公司开的劳务发票
  • 房地产销售折扣
  • 装饰公司的开票范围
  • 供应商退款需要冲库存商品吗
  • centos上安装vscode
  • 红字发票开错了是可以作废的吗?
  • 代扣代缴个人所得税账务处理
  • 车船税交不交印花税
  • 当月预交增值税时所属期选了上期怎么办
  • 对公账户是不是哪个银行都可以
  • 提交印花税会计分录
  • mysql检索语句
  • xp系统为什么不能用了
  • linux 解析
  • win8怎么设置ip地址
  • linux 杀掉指定用户的进程
  • win7 64位系统使用百度影音播放视频没声音没画面的故障原因及解决方法
  • win8.1 升级
  • windows8.1更新windows10
  • win10系统预览版
  • win8语言设置
  • c/s模式的例子
  • unity平移场景视图怎样操作?
  • js实现组件功能
  • 使用scp获取远程linux服务器上的文件 linux远程拷贝文件
  • 断开网络联结的手机
  • javascript运用
  • No active compatible AVD's or devices found. Relaunch this configuration after connecting a device o
  • 国家税务局服务宗旨是什么
  • 四川志愿服务注册入口
  • 南京地税局上班时间
  • 北京车过户到廊坊标准
  • 我国税收征收机关包括
  • 城镇土地使用税税率
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设