RHEL输入输出重定向

简介: 标准输入重定向、标准输出重定向、错误输出重定向

输入重定向是指把文件导入到命令中,而输出重定向则是指把原本要输出到屏幕 的数据信息写入到指定文件中。

输出重定向分为了标准输出重定向和错误输出重定向两种不同的技术, 以及覆盖写入与追加写入两种模式。

➢ 标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可从其他文件或 命令中输入。

➢ 标准输出重定向(STDOUT,文件描述符为1):默认输出到屏幕。

➢ 错误输出重定向(STDERR,文件描述符为2):默认输出到屏幕。

比如分别查看两个文件的属性信息,我们先创建出第一个文件,而第二个文件是不存在 的。所以,虽然针对这两个文件的操作都分别会在屏幕上输出一些信息,但这两个操作的差 异其实很大:

[root@rhel-8 ~]# touch test[root@rhel-8 ~]# ls -l test-rw-r--r--. 1 root root 0 Nov 1418:42 test
[root@rhel-8 ~]# ls -l xxxxxxls: cannot access 'xxxxxx': No such file or directory

在上述命令中,名为 test 的文件是真实存在的,输出信息是该文件的一些相关权限、所 有者、所属组、文件大小及修改时间等信息,这也是该命令的标准输出信息。而名为 xxxxxx 的第 二个文件是不存在的,因此在执行完 ls 命令之后显示的报错提示信息也是该命令的错误输出信息。

那么,要想把原本输出到屏幕上的数据转而写入到文件当中,就要区别对待这两种输出信息。

image.png

image.png

对于重定向中的标准输出模式,可以省略文件描述符 1 不写,而错误输出模式的文件描 述符 2 是必须要写的。

通过标准输出重定向将 man bash 命令原本要输出到屏 幕的信息写入到文件 readme.txt 中,然后显示 readme.txt 文件中的内容。具体命令如下:

[root@rhel-8 ~]# man bash > readme.txt[root@rhel-8 ~]# cat readme.txtBASH(1)                                        General Commands Manual                                        BASH(1)
NAME
bash- GNU Bourne-Again SHell

通过覆盖写入模式向 readme.txt 文件写入多行数据(该文件中已包含 上一个实验的 man 命令信息)。需要注意的是,在通过覆盖写入模式向文件中写入数据时,每 一次都会覆盖掉上一次写入的内容,所以最终文件中只有最后一次的写入结果:

[root@rhel-8 ~]# echo "Hello World" > readme.txt[root@rhel-8 ~]# echo "Hello World" > readme.txt[root@rhel-8 ~]# cat readme.txtHello World

通过追加写入模式向 readme.txt 文件写入一次数据,然后在执行 cat 命令之后,可以看 到如下所示的文件内容:

[root@rhel-8 ~]# echo "Hello RHEL" >> readme.txt[root@rhel-8 ~]# cat readme.txtHello World
Hello RHEL

虽然都是输出重定向技术,但是命令的标准输出和错误输出还是有区别的。例如查看当 前目录中某个文件的信息,这里以 test 文件为例。由于这个文件是真实存在的,因此 使用标准输出即可将原本要输出到屏幕的信息写入到文件中,而错误的输出重定向则依然把 信息输出到了屏幕上。

[root@rhel-8 ~]# ls -l test > /root/readme.txt[root@rhel-8 ~]# ls -l test 2> /root/readme.txt-rw-r--r--. 1 root root 0 Nov 1418:42 test

如果想把命令的报错信息写入到文件,该怎么操作呢?当用户在执行一个自动化的 Shell 脚本时,这个操作会特别有用,而且特别实用,因为它可以把整个脚本执行过程中的报错信 息都记录到文件中,便于安装后的排错工作。

接下来以一个不存在的文件进行实验演示:

[root@rhel-8 ~]# ls -l xxxxxx > /root/test.txtls: cannot access 'xxxxxx': No such file or directory
[root@rhel-8 ~]# ls -l xxxxxx 2>  /root/test.txt[root@rhel-8 ~]# cat test.txtls: cannot access 'xxxxxx': No such file or directory

还有一种常见情况,就是我们想不区分标准输出和错误输出,只要命令有输出信息则全 部追加写入到文件中。这就要用到&>>操作符了:

[root@rhel-8 ~]# ls -l test &>> readme.txt[root@rhel-8 ~]# ls -l xxxxxx &>> readme.txt[root@rhel-8 ~]# cat readme.txt-rw-r--r--. 1 root root 0 Nov 1418:42 test
ls: cannot access 'xxxxxx': No such file or directory

输入重定向相对来说有些冷门,在工作中遇到的概率会小一点。输入重定向的作用是把 文件直接导入到命令中。接下来使用输入重定向把 readme.txt 文件导入给 wc -l 命令,统计一 下文件中的内容行数:

[root@rhel-8 ~]# wc -l < readme.txt2

这次的输出结果没有了文件名称。

[root@rhel-8 ~]# wc -l /etc/passwd46 /etc/passwd

因为此前使用的“wc -l /etc/passwd”是一种非常标准的“命令+参数+对象”的执行 格式,而这次的“wc -l < readme.txt”则是将 readme.txt 文件中的内容通过操作符导入到命令 中,没有被当作命令对象进行执行,因此 wc 命令只能读到信息流数据,而没有文件名称的信息。

相关文章
|
存储 SQL 关系型数据库
数据库mysql项目实战 一
数据库mysql项目实战 一
|
12月前
|
XML Java 数据库
安卓项目:app注册/登录界面设计
本文介绍了如何设计一个Android应用的注册/登录界面,包括布局文件的创建、登录和注册逻辑的实现,以及运行效果的展示。
689 1
安卓项目:app注册/登录界面设计
|
JavaScript 前端开发 索引
js的循环中foreach、for in和for of的区别
js的循环中foreach、for in和for of的区别
469 0
|
开发者 图形学 iOS开发
掌握Unity的跨平台部署与发布秘籍,让你的游戏作品在多个平台上大放异彩——从基础设置到高级优化,深入解析一站式游戏开发解决方案的每一个细节,带你领略高效发布流程的魅力所在
【8月更文挑战第31天】跨平台游戏开发是当今游戏产业的热点,尤其在移动设备普及的背景下更为重要。作为领先的游戏开发引擎,Unity以其卓越的跨平台支持能力脱颖而出,能够将游戏轻松部署至iOS、Android、PC、Mac、Web及游戏主机等多个平台。本文通过杂文形式探讨Unity在各平台的部署与发布策略,并提供具体实例,涵盖项目设置、性能优化、打包流程及发布前准备等关键环节,助力开发者充分利用Unity的强大功能,实现多平台游戏开发。
627 0
|
Kubernetes API Perl
在K8S中,如何让Pod运行一次?如何解决一次性任务?
在K8S中,如何让Pod运行一次?如何解决一次性任务?
|
存储 安全 算法
密码学原理及其在网络安全中的应用
【7月更文挑战第27天】密码学作为保护信息安全的基石,在网络安全中发挥着不可或缺的作用。通过加密、解密、身份验证、数字签名和哈希函数等技术手段,密码学确保了数据的机密性、完整性和认证性。随着计算能力的不断提升和密码分析技术的不断进步,密码学需要不断创新和发展,以应对新的安全挑战。未来,随着量子计算技术的兴起和后量子密码学的研究深入,密码学将在网络安全领域发挥更加重要的作用。
|
存储 缓存 Kubernetes
带你读《云原生应用开发 Operator原理与实践》第三章 Kubebuilder 原理3.3 Controller-runtime 模块分析(四)
带你读《云原生应用开发 Operator原理与实践》第三章 Kubebuilder 原理3.3 Controller-runtime 模块分析
|
API 数据格式 UED
BizIllegalException 和BadRequestException的适用场景
在软件开发过程中,异常处理是一个重要的方面,能够提高系统的稳定性和可靠性。BizIllegalException(业务非法异常)和BadRequestException(错误的请求异常)是两种常见的异常类型,它们在不同的场景下使用。本文将详细介绍这两种异常的适用场景。
672 0
|
存储 缓存 NoSQL
深入理解分布式缓存在现代后端系统中的应用与挑战
随着互联网技术的飞速发展,分布式缓存已成为提升后端系统性能的关键技术之一。本文将从数据导向和科学严谨的角度出发,探讨分布式缓存技术的原理、应用场景以及面临的主要挑战。通过对具体案例的分析和数据统计,我们旨在为读者提供一个全面而深入的理解框架,帮助开发者更好地设计和优化后端系统。 【7月更文挑战第20天】
237 0
|
存储 数据采集 边缘计算
Link Edge 介绍| 学习笔记
快速学习 Link Edge 介绍
1044 0