【linux】Linux重定向

在Linux操作系统中,命令行界面是一个强大的工具,它允许用户与系统进行高效的交互。重定向是命令行中一个非常重要的概念,它可以改变命令输入和输出的默认路径。通过重定向,用户可以将数据从一个程序传递到另一个程序,或者保存到文件中,这使得数据处理变得更加灵活和高效。

重定向是一种改变命令输入输出流的机制。默认情况下,大多数命令从标准输入(stdin,通常是键盘)读取数据,将结果输出到标准输出(stdout,通常是屏幕),并将错误消息输出到标准错误(stderr,也通常是屏幕)。重定向允许我们改变这些数据流的方向,从而可以将数据从一个文件或设备转移到另一个文件或设备。

重定向操作符允许我们改变这些通道的方向。例如,我们可以使用>操作符将命令的输出保存到一个文件中,而不是打印到屏幕上。

标准输入输出流

在深入了解重定向之前,我们需要先理解标准输入、输出和错误这三个概念。每当我们执行一个命令时,它通常会从标准输入(stdin)读取数据,将结果输出到标准输出(stdout),并将错误信息输出到标准错误(stderr)。这三个通道默认情况下都是连接到我们的终端,即我们的屏幕和键盘。

每一个进程的fd目录下都会有0、1、2这三个文件描述符:

  • 0:标准输入流
  • 1:标准输出流
  • 2:标准错误流
$ ll /proc/$$/fd
total 0
dr-x------ 2 vagrant vagrant  0 Dec 25 01:46 ./
dr-xr-xr-x 9 vagrant vagrant  0 Dec 25 01:46 ../
lrwx------ 1 vagrant vagrant 64 Dec 25 01:46 0 -> /dev/pts/0
lrwx------ 1 vagrant vagrant 64 Dec 25 01:46 1 -> /dev/pts/0
lrwx------ 1 vagrant vagrant 64 Dec 25 01:46 2 -> /dev/pts/0

$$变量用于获取当前进场的PID。

标准输入输出流的重定向

标准输出重定向(stdout)

>符号用于将命令的输出重定向到一个文件,如果文件已存在,则会被覆盖。

$ echo "Hello, World!" > output.txt

$ echo "Hello, World!" 1> output.txt

$ cat output.txt
Hello, World!

命令中的1是一个文件描述符,表示标准输出流,<左边默认文件描述符的值就是1,所以可以省略。

>>符号用于将命令的输出追加到一个文件的末尾,而不是覆盖它。

$ echo "Hello, World!" 1>> output.txt

$ echo "Hello, World!" >> output.txt

$ cat output.txt
Hello, World!
Hello, World!
Hello, World!

在使用重定向时,可能会遇到各种问题。例如,不小心使用>而不是>>可能会导致原有文件内容的丢失。为了避免这种情况,我们应该在执行命令前仔细检查所使用的重定向操作符。此外,学习如何使用Shell脚本中的条件语句来检查文件是否存在,也可以帮助我们避免数据覆盖的问题。

标准错误重定向(stderr)

2>符号用于将错误信息重定向到一个文件,如果文件已存在,则会被覆盖。

$ ls not_existing_file 2> error.txt

$ cat error.txt
ls: cannot access 'not_existing_file': No such file or directory

命令中的2是一个文件描述符,表示标准错误流。

2>>符号用于将错误信息追加到一个文件的末尾。

$ ls not_existing_file 2>> error.txt

$ cat error.txt
ls: cannot access 'not_existing_file': No such file or directory
ls: cannot access 'not_existing_file': No such file or directory

标准输入重定向(stdin)

<符号用于将文件的内容作为命令的输入。

$ read a < output.txt

$ echo $a
Hello, World!

read指令读到换行符\n就会停止,所以read a < output.txt会将output.txt文件的第一行读取到并赋值给变量a。

重定向的组合使用

stdin和stdout的组合使用

将cat的标准输入重定向为test.txt, 将其标准输出重定向为cat.out

$ cat 0< output.txt 1> cat.out

$ cat cat.out
Hello, World!
Hello, World!
Hello, World!

这样完成了将output.txt复制为cat.out文件,相当于cp命令。

stdout和stderr重定向到不同文件

stdout重定向到文件stdout.out,stderr不重定向,默认还是会显示在shell屏幕上:

$ ls ./ no_exist_file 1> stdout.out
ls: cannot access 'no_exist_file': No such file or directory

stdout重定向到文件stdout.out,stderr重定向到文件stderr.out

$ ls ./ no_exist_file 1> stdout.out 2> stderr.out

$ cat stdout.out
./:
cat.out
error.txt
ooxx.txt
output.txt
stderr.out
stdout.out

$ cat stderr.out
ls: cannot access 'no_exist_file': No such file or directory

stdint和stdout重定向到相同文件

可以同时重定向stdout和stderr到同一个文件。

&>用于同时将标准输出和标准错误重定向到同一个文件。

$ ls ./ no_exist_file &> output.txt

$ cat output.txt
ls: cannot access 'no_exist_file': No such file or directory
./:
cat.out
error.txt
ooxx.txt
output.txt
stderr.out
stdout.out

或者使用更具体的描述符组合:

$ ls ./ no_exist_file 1> output.txt 2>&1

$ ls ./ no_exist_file 2> output.txt 1>&2

注意1>s.out2>&1的顺序不能反过来,另外1前面要加&,否则会以为1是一个普通的文件,而不是文件描述符。

1>s.out2>&1的顺序伪代码解释:

// 伪代码
// 初始
fd1 = stdout
fd2 = stderr

// 1> output.txt 2>&1
fd1 = output.txt
fd2 = fd1 // fd2指向output.txt

// 2>&1 1> output.txt
fd2 = fd1 // fd2指向stdout
fd1 = output.txt

特殊的重定向情况

丢弃输出

有时候,我们可能不想要命令的输出,这时可以将输出重定向到特殊的文件/dev/null,这会丢弃所有重定向到它的数据。

$ command > /dev/null 2>&1

创建空文件

使用重定向也可以快速地创建空文件:

$ touch newfile.txt  # 常规方法
$ > newfile.txt      # 通过重定向创建空文件

Here文档(Here Documents)

Here文档是一种特殊的重定向方式,它允许你将多行输入直接在命令行中指定,而不是来自文件或键盘输入。

$ cat << EOF > output.txt
> first
> second
> EOF

$ cat output.txt
first
second

Here字符串(Here Strings)

Here字符串是Here文档的简化版,它允许你将单行输入重定向到命令。

$ cat <<< "This is a single line"

重定向是Linux中一个非常强大的特性,它让用户能够灵活地控制命令的输入和输出。通过熟练使用重定向,可以在脚本编写和日常任务中实现更加复杂和高效的数据处理。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LENOVO联想笔记本小新Pro 14 IRH8 2023款(83AL)电脑原装出厂Win11系统恢复预装OEM系统

链接&#xff1a;https://pan.baidu.com/s/1M1iSFahokiIHF3CppNpL4w?pwdzr8y 提取码&#xff1a;zr8y 联想原厂系统自带所有驱动、出厂主题壁纸、Office办公软件、联想电脑管家等自带的预装软件程序 所需要工具&#xff1a;16G或以上的U盘 文件格式&#xff1a;ISO 文件…

SpringBoot3 整合Kafka

官网&#xff1a;https://kafka.apache.org/documentation/ 消息队列-场景 1. 异步 2. 解耦 3. 削峰 4. 缓冲 消息队列-Kafka 1. 消息模式 消息发布订阅模式&#xff0c;MessageQueue中的消息不删除&#xff0c;会记录消费者的偏移量 2. Kafka工作原理 同一个消费者组里的消…

开发辅助一(网关gateway+ThreadLocal封装用户信息+远程调用+读取配置文件+统一异常处理)

网关gateway模块 ①、配置文件&#xff0c;添加各个服务模块的路由路径 gateway:routes:-id: server-cart #微服务名称uri: lb://service-cart #负责均衡predicates:- Path/api/order/cart/**ThreadLocal ①、定义一个工具类 public class AuthContextUtil{private static…

Zookeeper应用场景有哪些?

ZooKeeper是⼀个典型的发布/订阅模式的分布式数据管理与协调框架&#xff0c;我们可以使⽤它来进⾏分布式数据的发布与订阅。另⼀⽅⾯&#xff0c;通过对ZooKeeper中丰富的数据节点类型进⾏交叉使⽤&#xff0c;配合Watcher事件通知机制&#xff0c;可以⾮常⽅便地构建⼀系列分…

记一次Mac端mysql重置密码

在执行mysql命令的时候&#xff0c;报如下的错误&#xff0c;表示不支持mysql命令&#xff1a; zsh: command not found: mysql 1. 先查看mysql服务是否存在 在系统偏好设置中查看&#xff1a; 2. 发现mysql服务已经在运行&#xff0c;可能因为/usr/local/bin目录下缺失mysq…

How to Clean Text for Machine Learning with Python

NLP 在本教程中&#xff0c;您将了解如何清理和准备文本&#xff0c;以便使用机器学习进行建模。 完成本教程后&#xff0c;您将了解&#xff1a; 如何通过开发自己的非常简单的文本清理工具开始。 如何更上一层楼并使用 NLTK 库中更复杂的方法。 在使用现代文本表示方法&am…

python3遇到Can‘t connect to HTTPS URL because the SSL module is not available.

远程服务器centos7系统上有minicoda3&#xff0c;觉得太占空间&#xff0c;就把整个文件夹删了&#xff0c;原先的Python3也没了&#xff0c;都要重装。 我自己的步骤&#xff1a;进入管理员模式 1.下载Python3的源码&#xff1a; wget https://www.python.org/ftp/python/3.1…

熟悉DHCP面临的安全威胁与防护机制

一个网络如果要正常地运行&#xff0c;则网络中的主机&#xff08;Host&#xff09;必需要知道某些重要的网络参数&#xff0c;如IP地址、网络掩码、网关地址、DNS服务器地址、网络打印机地址等等。显然&#xff0c;在每台主机上都采用手工方式来配置这些参数是非常困难的、或是…

c语言结构体(初阶)

1. 结构体的声明 1.1 结构体的基础知识 结构是一些值的集合&#xff0c;这些值被称为成员变量。结构的每个成员可以是不同类型的变量。 1.2 结构的声明 struct tag {member - list; }variable-list; 例&#xff1a;描述一个人的信息&#xff1a;名字电话性别身高 //声明的…

使用python netmiko模块批量配置Cisco、华为、H3C路由器交换机(支持 telnet 和 ssh 方式)

0. 当前环境 外网电脑Python版本&#xff1a;3.8.5&#xff08;安装后不要删除安装包&#xff0c;以后卸载的时候用这个&#xff09;外网电脑安装netmiko第三方库&#xff1a;cmd中输入pip install netmiko内网电脑环境&#xff1a;无法搭建python环境&#xff0c;需外网电脑完…

怎么实现Servlet的自动加载

在实际开发时&#xff0c;有时候会希望某些Servlet程序可以在Tomcat启动时随即启动。但在默认情况下&#xff0c;第一次访问servlet的时候&#xff0c;才创建servlet对象。 如果servlet构造函数里面的代码或者init方法里面的代码比较多&#xff0c;就会导致用户第一次访问serv…

Chrome插件精选 — 前端工具

Chrome实现同一功能的插件往往有多款产品&#xff0c;逐一去安装试用耗时又费力&#xff0c;在此为某一类型插件挑选出比较好用的一款或几款&#xff0c;尽量满足界面精致、功能齐全、设置选项丰富的使用要求&#xff0c;便于节省一个个去尝试的时间和精力。 1. FeHelper(前端助…

分布式下如何实现统一日志系统?

在业务系统开发中&#xff0c;日志的收集和分析很重要&#xff0c;特别是在进行故障分析时&#xff0c;日志记录得好&#xff0c;可以帮我们快速定位问题原因。在互联网分布式系统下&#xff0c;日志变得越来越分散&#xff0c;数据规模也越来越大&#xff0c;如何更好地收集和…

现代 NLP:详细概述,第 1 部分:transformer

阿比吉特罗伊 一、说明 近五年来&#xff0c;随着 BERT 和 GPT 等思想的引入&#xff0c;我们在自然语言处理领域取得了巨大的成就。在本文中&#xff0c;我们的目标是逐步深入研究改进的细节&#xff0c;并了解它们带来的演变。 二、关注就是你所需要的 2017 年&#xff0c;来…

环保行业的物联网升级:采用钡铼技术R10

随着环境保护意识的增强和可持续发展的迫切需求&#xff0c;物联网技术在环保行业中扮演着越来越重要的角色。为了满足环保监测和数据采集的需求&#xff0c;钡铼技术R10在物联网应用中具有独特的优势。本文将探讨R10的参数和功能&#xff0c;并阐述其在环保行业中的应用前景。…

主流级显卡的新选择,Sparkle(撼与科技)Intel Arc A750兽人体验分享

▼前言 对于玩家而言&#xff0c;英特尔独显的出现不仅打破了NVIDIA与AMD双雄天下的局面&#xff0c;而且旗下的Arc A系列显卡还拥有不俗的做工性能以及颇具优势的价格&#xff0c;无论是升级或者是装新机都非常合适。如果要在Arc A系列当中选一个性能不俗&#xff0c;能够满足…

anaconda prompt进入虚拟环境 打开spyder

目录 1.查看有多少虚拟环境 2.conda create 指令创建新的虚拟环境 3.进入虚拟环境 4.spyder进入虚拟环境 5.退出虚拟环境 6.删除虚拟环境 1.查看有多少虚拟环境 打开anaconda prompt&#xff0c;输入 conda env list 2.conda create 指令创建新的虚拟环境 conda cre…

LinkedList与链表

[本节目标] 1.ArrayList的缺陷 2.链表 3.链表相关oj题 4.LinkedList的模拟实现 5.LinkedList的使用 6.ArratList和LinkedList的区别 1. ArrayList的缺陷 上篇博客已经熟悉了ArrayList的使用,并且进行了简单模拟实现,ArrayList底层使用数组来储存元素: public class Ar…

K8S 中对 Windows 节点的利用

目录 漏洞概述 漏洞详情 ​编辑 漏洞验证 补丁分析 在集群中探索 参考资料 在许多组织中&#xff0c;所运行的很大一部分服务和应用是 Windows 应用。Windows 容器提供了一种封装进程和包依赖项的方式&#xff0c;从而简化了 DevOps 实践&#xff0c;令 Windows 应用程序…

深入探究MongoDB:从基础到实战,一个全面的指南

MongoDB:海量数据库的介绍 定义与命名由来: MongoDB源自词“humongous”,意味着“巨大无比”。因此,MongoDB可译为“海量数据库”。类型: MongoDB是一种非关系型(NoSQL)数据库。与传统的关系型数据库相比,它的显著特点是不使用SQL语句。数据结构更灵活,没有固定的数据类…