`
zsjg13
  • 浏览: 144760 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

文件描述符和重定向

 
阅读更多

    文件描述符是和文件输入与输出关联的整数。它们跟踪打开的文件。最熟知的文件描述符就是 stdin、stdout以及stderr。我们甚至可以将某个文件描述符的内容重定向到另一个描述符。

    在编写脚本时,常常要用到stdin、stdout 以及 stderr。通过过滤内容将一个输出重定向到一个文件是我们需要执行的一个基本事务。

    文件描述符就是和一个打开的文件或数据流相关联的整数值。

0: stdin (standard input)

1: stdout (standard output)

2: stderr (standard error)

    

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

$ echo "This is a sample text 1" > temp.txt    在写入之前,内容将被清空。

    附加内容:

$ echo "This is sample text 2" >> temp.txt

 

【成功和失败命令:当一个命令出错了,它会返回一个 非0 退出码,而0代表正常完成执行。可以从特殊的变量 $? 来读取该状态值。紧接在命令执行语句的后面运行 echo $? 就可以打印退出状态】

 

    下面的命令将 stderr 文本打印到屏幕上,而不是输出到文件中。并且因为没有 stdout 输出,所以 out.txt 是空的:

$ ls + > out.txt

    下面的命令将 stderr 重定向到 out.txt 中:

$ ls + 2> out.txt

    你可以重定向 stderr 到一个文件中,重定向 stdout 到另一个文件中,如:

$ cmd 2>stderr.txt 1>stdout.txt

    也能够将 stderr与stdout 都重定向到同一个文件中去,就是通过将 stderr 转成 stdout,例如:

$ cmd 2>&1 out.txt

或者

$ cmd &> out.txt

    有时候,输出可能包含一些不必要的信息(例如调试信息)。如果你不想输出终端背负stderr详细信息,你应当重定向 stderr 输出到 /dev/null,这会完全移除这些信息。$ cmd 2>/dev/null。

    重定向数据到一个文件后,再将该数据的一个副本传给后续的命令。就是通过 tee 命令。下面的代码中,stdin 数据是通过 tee 命令来接收的。它将stdout的一个副本写入到out.txt中,并发送另一个副本作为stdin给下一个命令。cat -n 命令会在从 stdin 接收到的每一行前面加一个行号,并将其写入到 stdout:

$ cat a* | tee out.txt | cat -n

。。。。。。。。。。。。。。。。。。未完

 

分享到:
评论

相关推荐

    linux中的重定向.pdf

    11. 当需要执行更复杂的I/O重定向时,可以结合使用管道("|")、重定向和文件描述符。例如,"cmd1 | cmd2 | cmd3 > file"这条命令会先将cmd1的输出传递给cmd2,再将cmd2的输出传递给cmd3,并将最终的输出结果重定向...

    文件描述符本质1

    标题中的“文件描述符本质1”指的是在操作系统中,文件描述符是访问文件或设备的基本方式,它是进程间通信和I/O操作的核心概念。在这个话题下,我们将深入探讨文件描述符的概念、工作原理以及在实际编程中的应用。 ...

    从以重定向的文件描述符中恢复.sh

    从以重定向的文件描述符中恢复

    Linux系统进程与磁盘管理详解

    其次介绍文件描述符和重定向操作,再探讨了分区管理方法以及 RAID 技术,并讨论了几种典型的 RAID 配置优缺点和应用场景;最后讲述了Linux系统中的文件系统的几种类型特点及其实战配置。 适用人群:适合具有一定...

    Linux管道符与重定向.pdf

    使用管道进行通信时,两端的进程向管道读写数据是通过创建管道时,系统设置的文件描述符进行的。从本质上说,管道也是一种文件,但它又和一般的文件有所不同,可以克服使用文件进行通信的两个问题,这个文件只存在...

    Shell 学习

    文件描述符和重定向是Shell的特色功能。文件描述符用于标识打开的文件或进程,而重定向则允许你改变程序的输入输出流,例如将命令输出重定向到文件,或者从文件读取输入。 Shell脚本中,管道`|`是连接命令的重要...

    LINUX与UNIX SHELL编程指南

    1. 文件描述符和重定向:Shell支持多种文件描述符,用于控制标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。重定向是将这些描述符关联到文件或设备的过程,例如使用">"将输出重定向到文件。 2. 正则...

    Linux 与 unix shell 编程指南

    - 文件描述符是系统为每个打开的文件分配的数字标识。 - `>`和`分别用于输出重定向和输入重定向。 - `>>`用于追加输出到文件,避免覆盖原有内容。 7. **函数和别名** - Shell脚本中可以定义函数,封装常用操作...

    Linux下重定向详解

    - **I/O重定向**:通常与文件描述符(File Descriptor, FD)有关,shell中通常包含10个文件描述符,编号为0至9。 - **常用文件描述符**: - 0 (stdin, 标准输入):默认与键盘关联,用于接收用户的输入。 - 1 (stdout...

    UNIX.Shell编程24学时教程

    9. **文件描述符和重定向**:学习文件描述符的使用,以及如何使用重定向改变输入、输出和错误流。 10. **脚本调试**:掌握set命令和bash的调试选项,学会如何找出和修复脚本中的错误。 11. **脚本权限与执行**:...

    学习Bash(第二版)中文版.pdf

    10. 文件描述符和重定向:了解文件描述符的概念,学习如何使用重定向和管道。 11. 高级Bash脚本编程:包括信号处理、算术运算、文件锁定、守护进程的创建等。 12. 编写健壮的脚本:介绍编写容错性、安全性和易维护...

    shell编程文档30天

    我们可以通过`、`>`、`>>`操作重定向输入和输出,甚至利用文件描述符0(标准输入)、1(标准输出)和2(标准错误)进行高级重定向。 别忘了错误处理和调试技巧,如使用`set -e`使脚本在遇到错误时立即退出,`set -x...

    linux 编程知识讲座.zip_UNIX_linux_linux 编程

    这一讲可能涵盖了文件的打开、读写、关闭,以及标准输入/输出、文件描述符和重定向。 4. **Lecture-4**:网络编程是Linux环境中的一大重点,可能会讲解TCP/IP协议,套接字API,以及如何编写客户端和服务器端应用...

    LinuxBash脚本编程大全

    文件操作则涉及读取、写入、重命名和删除文件,以及对文件描述符和重定向的运用,这些能力使得Bash脚本能有效管理系统资源。 此外,书中还会详细介绍Bash的内置命令,如`cd`用于切换目录,`echo`用于输出文本,`...

    Bash中文件描述符的详细介绍

    在实际应用中,文件描述符的重定向功能非常强大,例如,可以将命令的输出和错误分别输出到不同的文件,或者合并输出。例如,`cmd > output.log 2>&1`会将命令的所有输出(包括错误)都写入`output.log`。 下面是...

    Linux Shell命令行及脚本编程实例详解PPT

    可能还涉及到了文件描述符和重定向输入输出。 **第11章 Shell重定向.pptx** 深入讲解了重定向,包括如何将命令的输出重定向到文件,或者从文件读取命令的输入,还有如何追加而不是覆盖文件内容(`>>`符号)。 **第...

    第11章-重定向和文件的查找1

    2. **输入输出标准**:在Linux中,有三个标准输入输出流,即STDIN(标准输入,文件描述符0)、STDOUT(标准输出,文件描述符1)和STDERR(标准错误,文件描述符2)。这些流可以被重定向到不同的文件或设备,以改变...

    文件描述符的复制:dup()和dup2()示例代码

    通过这两个函数,开发者可以灵活地管理进程的文件描述符,实现如文件重定向、管道通信等功能。理解并熟练运用`dup()`和`dup2()`对于进行Linux系统编程至关重要,它们是多进程和多线程环境下共享资源、同步数据的关键...

    bash+shell+入门+第三版

    文件描述符和重定向是Bash的另一个关键特性,它们允许你改变程序的标准输入、输出和错误流。通过重定向,你可以将命令输出写入文件,或者从文件读取输入,甚至可以实现管道连接多个命令,形成强大的数据处理流水线。...

    重定向和管道、信号1

    在Linux操作系统中,重定向和管道是两种非常重要的I/O操作,它们允许用户或程序将标准输入、输出和错误流导向不同的位置,如文件、设备或者另一个程序的输入。同时,信号是进程间通信的一种机制,用于通知进程发生了...

Global site tag (gtag.js) - Google Analytics