linux每一个打开文件都会关联一个文件描述符,需要的时候我们可以使用exec命令指定一个大于3的数字作为文件

linux默认文件描述符

每打开一个shell就会打开默认的三个文件描述符描0,1,2,分别代表标准输入,标准输出和标准错误输出。

exec命令关联文件描述符

exec 5>/tmp/a.txt 读方式

exec 5</tmp/a.txt 写方式

exec 5<>/tmp/a.txt 读写方式

exec 5<&-;exec5>&- 关闭文件描述符

应用案例:在shell脚本中重新关联标准输出,从而记录日志到指定文件

#!/bin/bash
exec 4>&1 #用4记录标准输出
exec 1>/tmp/abc #重定向标准输出
echo "123"
echo "456"
exec 1>&4 #恢复标准输出
exec 4>&- #关闭4

运行此脚本,脚本中的echo输出会输出到/tmp/abc文件中

脚本第二行用4>&1 是为了记录标准输出的文件描述符便于执行完毕后恢复标准输出,恢复标准输出也可以用exec 1>/dev/tty

注意点:

  1. echo "hello" >&4 向文件描述符中输入内容只使用 > 不能用 >> ,此时的 > 不会清空文件
  2. 是否清空文件需要在exec命令关联文件描述符到文件的时候区别使用 > 或 >>,

    例有如下脚本:
#!/bin/bash
exec 4>/tmp/abc
echo "123" >&4
echo "456" >&4
exec 4>&-

则每次执行完脚本后/tmp/abc文件内容都是123\n456

若把第二行换成exec 4>>/tmp/abc则会追加进去

  • 文件的清空操作是在exec命令的操作时进行的

linux exec操作文件描述符的更多相关文章

  1. Linux exec与文件描述符

    看到好几篇文章讲述exec都是一知半解,所以我尽量说的清楚明白一些.本文首先讲述Linux文件描述符,然后是exec,最后举例说明exec I/O重定向及其用法. 概念:exec命令用于调用并执行指令 ...

  2. linux exec和文件描述符妙用技巧(转)

    最近在看<精通unix shell脚本编程>时,看到exec<$1 exec 1>$OUTFILE,一下看的我就蒙了.网上看了大半天,终于搞定,记录如下.对于 Linux 而言 ...

  3. exec操作文件描述符

    exec命令可以用来替代当前shell:换句话说,并没有启动子shell.使用这一命令时任何环境都将被清除,并重新启动一个shell. 它的一半形式为: exec command 其中,command ...

  4. Linux中的文件描述符与打开文件之间的关系

    Linux中的文件描述符与打开文件之间的关系 导读 内核(kernel)利用文件描述符(file descriptor)来访问文件.文件描述符是非负整数.打开现存文件或新建文件时,内核会返回一个文件描 ...

  5. [svc]linux中的文件描述符(file descriptor)和文件

    linux中的文件描述符(file descriptor)和文件 linux为了实现一切皆文件的设计哲学,不仅将数据抽象成了文件,也将一切操作和资源抽象成了文件,比如说硬件设备,socket,磁盘,进 ...

  6. Linux Linux下最大文件描述符设置

    Linux下最大文件描述符设置 by:授客 QQ:1033553122 1.   系统可打开最大文件描述符设置 查看系统可打开最大文件描述符 # cat /proc/sys/fs/file-max 6 ...

  7. linux fcntl 对文件描述符控制

    linux fcntl 对文件描述符控制 linux fcntl 对文件描述符控制 linux fcntl 对文件描述符控制

  8. linux shell exec 关联文件描述符

    在写shell脚本时,如果多个命令的输入或输出都是同一个文件,而这个文件的路径和名字都很长,则需要书写很多次同样的路径会很浪费时间,我们可以使用exec命令来关联一个自定义的文件描述符到一个特定的文件 ...

  9. Linux中的文件描述符与打开文件之间的关系------------每天进步一点点系列

    http://blog.csdn.net/cywosp/article/details/38965239 1. 概述     在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件. ...

随机推荐

  1. VueJS实现一个货币结算自定义控件

    Vue.component('currency-input', { template: '\ <div>\ <label v-if="label">{{ l ...

  2. 蓝桥杯- 奇妙的数字-java

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...

  3. Spring框架基础知识

    本人博客文章网址:https://www.peretang.com/basic-knowledge-of-spring-framework/ Spring框架简介 Spring , 一个开源的框架 , ...

  4. java I/O :RandomAccessFile

  5. SSH小结

    工作有一段时间了,经常用SSH登录远程机器,但对原理一直不是很了解,所以查阅了一些资料,写个小结. 一. SSH是什么? SSH的全称是Secure Shell, 是一种"用来在不安全的网络 ...

  6. redis集群添加删除节点

    Redis3.0集群添加节点 1:首先把需要添加的节点启动 cd /usr/local/cluster/ mkdir 7006 cp /usr/local/cluster/redis.conf  /u ...

  7. php 知识点 --个人笔记

    ##2015-09-06 为防止用户看到错误信息,而出现的不友好界面.故一般性会在php.ini里设置:display_errors = Off;不过在开发的时候,我们有时候需要打开错误信息.这时候, ...

  8. 018 关联映射文件中<class>标签中的lazy(懒加载)属性

    Lazy(懒加载): 只有在正真使用该对象时,才会创建这个对象 Hibernate中的lazy(懒加载): 只有我们在正真使用时,它才会发出SQL语句,给我们去查询,如果不使用对象则不会发SQL语句进 ...

  9. python_day5--->递归函数,二分法查找

    li = [1, 5, 6, 7, 12, 22, 33, 44, 55, 66, 77, 88, 99, 111, 222, 333]def er(num,li): if len(li) ==0: ...

  10. JSONP不支持循环调用

    问题描述 在jquery或zepto下,循环调用同一个jsonp ;i<;i++){ $.ajax({ url:'https://m.suning.com/authStatus?callback ...