第三章 文件的描述符和重定向

第三章 文件的描述符和重定向

大家好,又见面了,我是你们的朋友全栈君。

第三章 文件的描述符和重定向

解释

文件描述符是和文件的输入、输出相关联的非负整数,Linux内核(kernel)利用文件描述符(file descriptor)来访问文件。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。常见的文件描述符是stdin、stdout和stderr。

系统预留文件描述符

  • 0 stdin(标准输入)

  • 1 stdout(标准输出)

  • 2 stderr(标准错误)

重定向

重定向将输入文本通过截取模式保存到文件(清空文件):

[root@ceshi ~]# echo "this is a test file" > test.txt
[root@ceshi ~]# more test.txt 
this is a test file

注意:写入文件之前,test.txt会被清空

重定向将输入文本通过追加模式保存到文件(文件不被清空):

[root@ceshi ~]# echo "this is a test file222" >> test.txt
[root@ceshi ~]# more test.txt
this is a test file
this is a test file222

标准错误输出

标准错误输出:

[root@ceshi ceshi]# ls
a  aaaa.sql  b  bb.bak  bb.io  catalog  e.ior  r.doc
[root@ceshi ceshi]# cat aaa.txt
cat: aaa.txt: No such file or directory
# 因为当前目录没有aaa.txt 所以报错没有这个文件或者目录

标准错误输出重定向

方法一:
[root@ceshi ceshi]# cat aaa.txt 2> a.txt
[root@ceshi ceshi]# cat a.txt 
cat: aaa.txt: No such file or directory

方法二:
[root@ceshi ceshi]# cat aaa.txt &> aa.txt 
[root@ceshi ceshi]# cat aa.txt 
cat: aaa.txt: No such file or directory

#这样就不会有报错提示,而报错提示被重定向到了别的文件中。

标准错误重定向到/dev/null

/dev/null 是一个特殊的设备文件,接收的所有内容都会被丢弃,通常被称为位桶、黑洞。

[root@ceshi ceshi]# cat aaa.txt 2> /dev/null

tee命令

tee命令可以将数据重定向到文件,同时还可以提供一份重定向数据的副本作为后续命令的stdin。

[root@ceshi ceshi]# ip addr| grep inet | tee out.txt | cat -n
     1      inet 127.0.0.1/8 scope host lo
     2      inet6 ::1/128 scope host 
     3      inet 103.57.56.11/29 brd 103.57.56.15 scope global ens160
     4      inet6 fe80::8747:c951:a2cf:efb0/64 scope link 
[root@ceshi ceshi]# more out.txt 
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
    inet 103.57.56.11/29 brd 103.57.56.15 scope global ens160
    inet6 fe80::8747:c951:a2cf:efb0/64 scope link 

重定向脚本内的文本片段到文件

[root@ceshi ceshi]# vi s.sh
#!/bin/bash
cat <<EOF>text.log
first line
second line 
three line
EOF

[root@ceshi ceshi]# /bin/bash s.sh 
[root@ceshi ceshi]# more text.log 
first line
second line 
three line

在 <<EOF>text.log与下一个EOF行之间的所有文本都会当作stdin保存到text.log文件里。

自定义文件描述符

除了0/1/2对应的stdin、stdout、stderr是系统预留描述符,还可以用exec命令创建自定义文件描述符,文件的打开模式有只读模式、截断模式、追加模式。

“<” 操作符用于从文件中读取到stdin

[root@ceshi ceshi]# exec 3<text.log  # 自定义文件描述符3打开并读取文件

手动使用描述符
[root@ceshi ceshi]# cat <&3
first line
second line 
three line

注意:这里只能读取一次自定义的描述符,如果再次使用需要重新创建文件描述符。

“>” 操作符用于截断模式的文件写入(数字在文件内容被截断之后写入)

[root@ceshi ceshi]# exec 4>output.txt   # 定义文件描述符为4,截断模式,输入文件名是output.txt
[root@ceshi ceshi]# echo this is a new test line >&4    # 截断内容
[root@ceshi ceshi]# cat output.txt  # 查看截断后的文件内容
this is a new test line

截断模式 可以多次截断吗?
[root@ceshi ceshi]# cat output.txt 
111111111111111111111
222222222222222222222
[root@ceshi ceshi]# exec 4>output.txt
[root@ceshi ceshi]# echo this is a new test line >&4
[root@ceshi ceshi]# echo "截断模式能多次截断吗?" >&4             
[root@ceshi ceshi]# cat output.txt 
this is a new test line
截断模式能多次截断吗?

总结:
1、截断模式会清空文件,在写入文件
2、截断模式,可以多次截断内容,写入文件

“>>” 操作符用于追加模式的文件写入(添加数据到文件中,原有数据不会丢失)

[root@ceshi ceshi]# exec 5>>output.txt
[root@ceshi ceshi]# echo "追加模式的内容" >&5 
[root@ceshi ceshi]# cat output.txt 
this is a new test line
截断模式能多次截断吗?
追加模式的内容

转载于:https://blog.51cto.com/506554897/2114410

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/107525.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • javascript typescript_typescript python

    javascript typescript_typescript python前言:无论在学习什么语言的时候,我们都需要明白其该怎么样去定义一个变量或者Function,那么今天我们来看看TypeScript的数据类型。文章目录:一.Ts与Js的区别二.Ts的数据![在这里插入图片描述](https://img-blog.csdnimg.cn/8904446afa764db282b731721429ebda.png)三.数据类型应用1.any类型:2.number类型:3.string类型:4.Array类型:(1).[]:(2).数组泛型:一.Ts与Js的区别众所周知:Jav

  • c语言 goto 跳出循环,goto语句可以跳出循环.ppt

    c语言 goto 跳出循环,goto语句可以跳出循环.pptgoto语句可以跳出循环.ppt循环结构顺序、分支、循环是结构化程序设计的三种基本结构,本章主要任务是学习如何使用循环结构解决问题。主要内容for循环do循环while循环循环的中断任务1任务功能:计算1~100之间的奇数和及偶数和学习目的:利用for循环解决简单问题;程序代码privatevoidbutton1_Click(obj…

  • Redis 雪崩、穿透、击穿「建议收藏」

    Redis 雪崩、穿透、击穿「建议收藏」一、缓存雪崩:概念:缓存雪崩是指缓存中key大批量到过期时间,而这时大量请求同时打过来,引起数据库压力过大甚至down机实际生产中举例:以秒杀活动为例,QPS达到5000,这时,如果这5000个请求同时访问过来,在redis的缓存没有失效时,这个量级的qps,redis是可以承受住的。但是如果这时,所有的key都在某一个时间点失效了,而后台还没来得及重新刷缓存(缓存一般是定时任务主动刷新或修改时才刷新),那么这时,所有的请求就将会都直接打入MySQL数据库。可以想象,MySQL

  • linux如何查看nginx是否启动

    linux如何查看nginx是否启动

    2021年10月19日
  • placeholder 与variable

    placeholder 与variableplaceholder,译为占位符,官方说法:”TensorFlowprovidesaplaceholderoperationthatmustbefedwithdataonexecution.”即必须在执行时feed值。placeholder实例通常用来为算法的实际输入值作占位符。例如,在MNIST例子中,定义输入和输出:x=tf.placeholder(tf…

  • JQuery的安装与下载教程

    JQuery的安装与下载教程网页中添加jQuery可以通过多种方法在网页中添加jQuery。您可以使用以下方法:从jquery.com下载jQuery库 从CDN中载入jQuery,如从Google中加载jQuery下载jQuery有两个版本的jQuery可供下载:Productionversion-用于实际的网站中,已被精简和压缩。 Developmentversion-用于测试和开发(未压缩,是可读的代码)以上两个版本都可以从jquery.com中下载。…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号