Linux I/O 重定向简介

简介

Linux 中内置的重定向功能为您提供了一套强大的工具,可以优化许多工作流程。软件开发的“Unix 哲学”是制作每个都能很好地完成一件事的工具,这一哲学已经延续到现代命令行工具,这些工具在单独使用时非常强大,当它们组合在一起时则更加强大。无论您是在编写复杂的软件还是在命令行上工作,了解如何操作环境中的不同 I/O 流将极大地提高您的生产力。

先决条件

要按照本指南进行操作,您需要访问 Linux 服务器。如果您需要有关首次连接到服务器的信息,可以参考我们的连接指南,了解如何使用 SSH 连接到 Linux 服务器。

Linux 环境中的输入和输出分布在三个中。这些流包括:

  • 标准输入stdin

  • 标准输出stdout

  • 标准错误stderr

这些流也被编号:

  • 标准输入0

  • 标准输出1

  • 标准错误2

在用户和终端之间的标准交互期间,标准输入来自用户的键盘。标准输出和标准错误以文本形式显示在用户的终端上。这三个流的集合被称为标准流。

标准输入

标准输入流通常将数据从用户传输到程序。期望标准输入的程序通常从设备(如键盘)接收输入。在本教程的后面部分,您将看到将一个程序的输出作为另一个程序的标准输入的示例。

标准输出

标准输出是程序生成的输出。当标准输出流没有被重定向时,它将直接将文本输出到终端。尝试输出一些任意文本,使用 echo

echo Sent to the terminal
Sent to the terminal

当没有任何额外选项时,echo 命令会输出传递给它的命令行参数。

不带任何参数运行 echo:

echo

它将返回一个空行。一些程序在没有提供参数的情况下不会执行任何操作。

标准错误

标准错误包含程序生成的错误。与标准输出一样,该流的默认目的地是终端显示。

让我们通过使用 ls 命令来看一个基本的标准错误示例。ls 用于列出目录的内容。

当没有参数运行 ls 时,它会列出当前目录中的内容。如果以目录作为参数运行 ls,则会列出所提供目录的内容。

ls %

由于 % 不是一个现有的目录,这将向标准错误发送以下文本:

ls: 无法访问 %: 没有那个文件或目录

程序不必崩溃或完成运行才能生成标准错误,某些输出是发送到标准输出或标准错误取决于程序的行为。它们在任何方面都没有技术上的不同 —— 只是一个输出流被保留用于错误消息,并且一些工具会假定标准错误为空意味着程序成功运行。一些程序甚至会在不崩溃或未能产生预期输出的情况下将次要错误输出到标准错误。这只是一种将预期输出与非预期输出分开的约定。

流重定向

Linux 包括每个流的重定向命令。这些命令可用于将标准输出或标准错误写入文件。如果写入一个不存在的文件,将在写入之前创建一个具有该名称的新文件。

带有单个括号的命令覆盖目标的现有内容。

覆盖

  • > - 标准输出

  • < - 标准输入

  • 2> - 标准错误

带有双括号的命令不会覆盖目标的现有内容。

追加

  • >> - 标准输出

  • << - 标准输入

  • 2>> - 标准错误

管道

管道用于将一个程序的流重定向到另一个程序。当一个程序的标准输出通过管道发送到另一个程序时,第一个程序的输出将被用作第二个程序的输入,而不是被打印到终端。只有第二个程序返回的数据将被显示。

Linux 的管道由竖线表示:|

以下是使用管道的命令示例:

ls | less

这将获取 ls 的输出(显示当前目录的内容)并管道less 程序。less 逐行显示发送到它的数据。

ls 通常在多行中显示目录内容。当您通过 less 运行它时,每个条目都会放在新行上。

尽管管道的功能可能看起来类似于 >>>,但区别在于管道将数据从一个命令重定向到另一个命令,而 >>> 用于将数据重定向到文件。

过滤器

过滤器 是一类通常与从另一个程序输出的管道一起使用的程序。其中许多程序也可以单独使用,但它们特别好地展示了管道行为。

  • find - 返回文件名与传递给 find 的参数匹配的文件。

  • grep - 返回与传递给 grep 的字符串模式匹配的文本。

  • tee - 将标准输入重定向到标准输出和一个或多个文件。

  • tr - 查找并替换一个字符串为另一个字符串。

  • wc - 计算字符数、行数和单词数。

示例

现在您已经了解了重定向、管道和基本过滤器,让我们来看一些常见的重定向模式和示例。

command > file 模式将命令的标准输出重定向到一个文件。

ls ~ > root_dir_contents.txt

上面的命令将您的主目录 (~) 的内容作为标准输出传递,并将输出写入名为 root_dir_contents.txt 的文件。它将删除文件中的任何先前内容,因为它是一个单括号命令。

command > /dev/null 模式将标准输出重定向到无处。/dev/null 是一个特殊文件,用于丢弃重定向到它的任何数据。它用于丢弃不需要的标准输出,否则可能会干扰命令或脚本的功能。发送到 /dev/null 的任何输出都将被丢弃。

ls > /dev/null

此命令通过将其传递到 /dev/null 来丢弃从命令 ls 返回的标准输出流。

command 2> file 模式将命令的标准错误流重定向到一个文件,覆盖现有内容。

mkdir '' 2> mkdir_log.txt

这将重定向由无效目录名称 '' 引发的错误,并将其写入 log.txt。请注意,错误仍然会发送到终端并显示为文本。

command >> file 模式将命令的标准输出重定向到一个文件,而不覆盖文件的现有内容。

echo Written to a new file > data.txt
echo Appended content to an existing file >> data.txt

这一对命令首先通过 echo 将用户输入的文本重定向到一个新文件。然后,它将第二个 echo 命令接收到的文本附加到现有文件,而不覆盖其内容。

上述 command 2>> file 模式将命令的标准错误流重定向到一个文件,而不覆盖文件的现有内容。这种模式对于为程序或服务创建错误日志很有用,因为日志文件不会在每次写入文件时擦除其先前的内容。

find '' 2> stderr_log.txt
wc '' 2>> stderr_log.txt

上述命令将由无效的 find 参数引发的错误消息重定向到名为 stderr_log.txt 的文件。然后将由无效的 wc 参数引发的错误消息附加到同一文件中。

command | command 模式将第一个命令的标准输出重定向到第二个命令的标准输入。

find /var lib | grep deb

此命令在 /var 及其子文件夹中搜索与字符串 deb 匹配的文件名和扩展名,并返回文件的文件路径,其中每个路径中匹配的部分以红色突出显示。

command | tee file 模式(包括 tee 命令)将命令的标准输出重定向到一个文件并覆盖其内容。然后,它在终端显示重定向的输出。如果文件不存在,则创建一个新文件。

在这种模式的上下文中,tee 通常用于同时查看程序的输出并将其保存到文件中。

wc /etc/magic | tee magic_count.txt

这将管道 /etc/magic 文件中的字符数、行数和单词数(Linux shell 用于确定文件类型的文件)到 tee 命令,然后将 wc 的输出分成两个方向,并将其发送到终端显示和 magic_count.txt 文件。对于 tee 命令,可以想象字母 T。字母的底部部分是初始数据,顶部部分是数据被分成两个不同方向(标准输出和终端)的部分。

可以使用多个管道将输出重定向到多个命令和/或过滤器。

结论

学习如何使用内置于 Linux 命令行中的重定向功能是一项至关重要的技能。现在您已经了解了重定向和管道的基础知识,您将能够开始进入 shell 脚本的世界,该脚本经常使用本指南中突出显示的程序和模式。

在需要使用命令行完成特定任务时,搜索特定命令或您想要在命令行中执行的任务也可能会很有帮助(例如“删除以大写字母开头的目录中的所有文件”)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/675632.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编程中“游戏心切”心态的影响及其对策探讨

在数字化社会背景下&#xff0c;程序员作为科技领域的核心力量&#xff0c;其工作效率与专注度直接影响着项目的推进速度和质量。然而&#xff0c;在实际工作中&#xff0c;不少程序员可能会受到个人兴趣&#xff0c;如对某款游戏的强烈期待和渴望&#xff0c;导致在编程过程中…

多模态对比语言图像预训练CLIP:打破语言与视觉的界限,具备零样本能力

多模态对比语言图像预训练CLIP:打破语言与视觉的界限,具备零样本能力。 一种基于多模态(图像、文本)对比训练的神经网络。它可以在给定图像的情况下,使用自然语言来预测最相关的文本片段,而无需为特定任务进行优化。CLIP的设计类似于GPT-2和GPT-3,具备出色的零射击能力…

API接口访问鉴权设计和实现的经验总结

API接口访问鉴权是保护API资源安全的重要措施。本文总结了一些常见的API接口访问鉴权设计和实现方法&#xff0c;以帮助开发人员更好地理解和应用这些技术。 1. 什么是API接口访问鉴权&#xff1f; - 解释了API接口访问鉴权的基本概念和作用&#xff0c;以及为什么需要对A…

R语言入门笔记2.0

1.创建数据框 在R语言中&#xff0c;可以使用data.frame函数来创建数据框。以下是一个简单的示例&#xff0c;这段R语言代码创建了一个名为student的数据框&#xff0c;其中包含了学生的ID、性别、姓名和出生日期&#xff0c;首先创建一个包含学生出生日期的向量&#xff0c;再…

django中自定义视图样式

在Django中&#xff0c;自定义视图样式通常涉及两个方面&#xff1a;一是通过CSS和JavaScript来定制前端页面的样式和交互&#xff0c;二是通过Django的模板系统来控制HTML的输出。以下是一些步骤和示例&#xff0c;说明如何在Django中自定义视图样式。 一&#xff1a;静态文件…

基于华为云欧拉操作系统(HCE OS)容器化部署传统应用(Redis+Postgresql+Git+SpringBoot+Nginx)

写在前面 博文内容为 华为云欧拉操作系统入门级开发者认证(HCCDA – Huawei Cloud EulerOS)实验笔记整理认证地址&#xff1a;https://edu.huaweicloud.com/certificationindex/developer/9bf91efb086a448ab4331a2f53a4d3a1博文内容涉及一个传统 Springboot 应用HCE部署&#x…

文件上传-Webshell

Webshell简介 webshell就是以aspphpjsp或者cgi等网页文件形式存在的一种命令执行环境&#xff0c;也可以将其称做为一种网页木马后门。 攻击者可通过这种网页后门获得网站服务器操作权限&#xff0c;控制网站服务器以进行上传下载文件、查看数据库、执行命令等… 什么是木马 …

洛谷 P1087 [NOIP2004 普及组] FBI 树

本文由Jzwalliser原创&#xff0c;发布在CSDN平台上&#xff0c;遵循CC 4.0 BY-SA协议。 因此&#xff0c;若需转载/引用本文&#xff0c;请注明作者并附原文链接&#xff0c;且禁止删除/修改本段文字。 违者必究&#xff0c;谢谢配合。 个人主页&#xff1a;blog.csdn.net/jzw…

【Docker】02 镜像管理

文章目录 一、Images镜像二、管理操作2.1 搜索镜像2.1.1 命令行搜索2.1.2 页面搜索2.1.3 搜索条件 2.2 下载镜像2.3 查看本地镜像2.3.1 docker images2.3.2 --help2.3.3 repository name2.3.4 --filter2.3.5 -q2.3.6 --format 2.4 给镜像打标签2.5 推送镜像2.6 删除镜像2.7 导出…

面试高频知识点:2线程 2.1.5如何自定义实现一个线程池

在Java中&#xff0c;线程池是一种用于管理线程的机制&#xff0c;它可以有效地管理多个线程并且可以重复使用它们&#xff0c;从而减少了线程创建和销毁的开销&#xff0c;提高了线程的利用率。本文将介绍如何自定义实现一个简单的线程池&#xff0c;并提供相应的Java代码示例…

IP代理在网络中解决了哪些问题?代理IP使用时效是什么意思?

随着互联网的普及和发展&#xff0c;IP代理作为一种网络工具&#xff0c;被广泛应用于各种场景。IP代理的使用可以解决很多网络中的问题&#xff0c;提高网络访问的速度和安全性。本文将详细介绍IP代理在网络中解决的问题&#xff0c;以及代理IP使用时效的含义。 一、IP代理在网…

Unity入门学习

目录 Unity环境搭建Unity引擎是什么软件下载和安装工程文件夹 Unity界面基础Scene场景和Hierarchy层级窗口Game游戏和Project工程Inspector和Console工具栏和父子关系 Unity工作原理反射机制和游戏场景预设体和资源包的导入导出 Unity脚本基础脚本基本规则生命周期函数Inspecto…

react中的diff算法

diff算法 对于React团队发现在日常开发中对于更新组件的频率&#xff0c;会比新增和删除的频率更高&#xff0c;所以在diff算法里&#xff0c;判断更新的优先级会更高。对于Vue2的diff算法使用了双指针&#xff0c;React的diff算法没有使用双指针&#xff0c;是因为更新的jsx对…

第三十天| 51. N皇后

Leetcode 51. N皇后 题目链接&#xff1a;51 N皇后 题干&#xff1a;按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整…

Windows10安装VScode + mingw64 + GSL

这里写自定义目录标题 安装VScode安装 MingW64测试C/C环境 安装msys安装GSL配置VScodelaunch.json创建tasks.json配置c_cpp_properties.json 测试验证其他可参考 安装VScode 在官网下载VScode:VScode按导引步骤安装VScode&#xff0c;并选择自己想安装的位置创建自己的工作区&…

three.js 箭头ArrowHelper的实践应用

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div></div></el-main></…

【芯片设计- RTL 数字逻辑设计入门 15 -- 函数实现数据大小端转换】

文章目录 函数实现数据大小端转换函数语法函数使用的规则Verilog and Testbench综合图VCS 仿真波形 函数实现数据大小端转换 在数字芯片设计中&#xff0c;经常把实现特定功能的模块编写成函数&#xff0c;在需要的时候再在主模块中调用&#xff0c;以提高代码的复用性和提高设…

Qt PCL学习(文章链接汇总)

Qt PCL学习&#xff08;一&#xff09;&#xff1a;环境搭建 Qt PCL学习&#xff08;二&#xff09;&#xff1a;点云读取与保存 Qt PCL学习&#xff08;三&#xff09;&#xff1a;点云滤波 持续更新中…

Unity3d Shader篇(六)— BlinnPhong高光反射着色器

文章目录 前言一、BlinnPhong高光反射着色器是什么&#xff1f;1. BlinnPhong高光反射着色器的工作原理2. BlinnPhong高光反射着色器的优缺点优点缺点 3. 公式 二、使用步骤1. Shader 属性定义2. SubShader 设置3. 渲染 Pass4. 定义结构体和顶点着色器函数5. 片元着色器函数 三…

图文并茂讲解Travelling Salesman

题目 思路 一道lca板子题&#xff0c;不会的同学可以先康康 详解最近公共祖先(LCA)-CSDN博客 我们可以发现&#xff0c;商人是从1开始&#xff0c;旅行到第一个城镇&#xff0c;再到第二个&#xff0c;第三个…… 那么我们只需要求出1~第一个城镇的距离&#xff0c;第一个城…