Shell输入输出重定向

Linux Shell 重定向分为两种,一种输入重定向,一种是输出重定向。其实输入输出方向就是数据的流动方向:

  • 输入方向:就是数据从哪里流向程序。数据默认从键盘流向程序,如果改变了它的方向,数据就从其它地方流入,这就是输入重定向。
  • 输出方向:就是数据从程序流向哪里。数据默认从程序流向显示器,如果改变了它的方向,数据就流向其它地方,这就是输出重定向。

在 Linux 中,标准输入设备指的是键盘,标准输出设备指的是显示器。

文件描述符

Linux 中一切皆文件,包括标准输入设备(键盘)和标准输出设备(显示器)在内的所有计算机硬件都是文件。

为了表示和区分已经打开的文件,Linux 会给每个文件分配一个 ID,这个 ID 就是一个整数,被称为文件描述符(File Descriptor)。

在这里插入图片描述
stdin、stdout、stderr 默认都是打开的,在重定向的过程中,0、1、2 这三个文件描述符可以直接使用。

一、Shell输出重定向

输出重定向是指命令的结果不再输出到显示器上,而是输出到其它地方,一般是文件中。

这样做的最大好处就是把命令的结果保存起来,当我们需要的时候可以随时查询。

Bash 支持的输出重定向符号如下:

在这里插入图片描述

在输出重定向中,>代表的是覆盖,>>代表的是追加。

注意:

  • 输出重定向的完整写法其实是 fd>file或者 fd>>file,其中 fd 表示文件描述符,如果不写,默认为 1(一般都省略不写),也就是标准输出文件。
  • fd和>之间不能有空格,否则 Shell 会解析失败;>和file之间的空格可有可无。为了保持一致,我习惯在>两边都不加空格。

1、输出重定向

示例1:将 echo 命令的输出结果以追加的方式写入到 demo.txt 文件中。

[root@centos7 tmp]# cat test.sh
#!/bin/bash

for str in "百度一下" "http://www.baidu.com/" "shell 重定向"
do
    echo $str >>demo.txt  #将输入结果以追加的方式重定向到文件
done
[root@centos7 tmp]# . ./test.sh
[root@centos7 tmp]# cat demo.txt
百度一下
http://www.baidu.com/
shell 重定向

示例2:将ls -l命令的输出结果以覆盖的方式重定向到 demo.txt 文件中。

[root@centos7 tmp]# ls -al > demo.txt
[root@centos7 tmp]# cat demo.txt
总用量 8
drwxrwxrwt. 16 root root 4096 33 12:28 .
dr-xr-xr-x. 18 root root  277 113 2020 ..
-rw-r--r--   1 root root    0 33 12:29 demo.txt
drwxrwxrwt.  2 root root    6 121 2019 .font-unix
drwxrwxrwt.  2 root root    6 121 2019 .ICE-unix
drwx------   3 root root   17 227 19:57 systemd-private-01c0359be41942aab784912371f5fcb3-chronyd.service-pRrdTO
drwx------   3 root root   17 221 21:02 systemd-private-2d952048e02047f29f26d09bae616d88-chronyd.service-h5EZOo
drwx------   3 root root   17 225 14:17 systemd-private-7ddedc75621a4db691dac9a29649e990-chronyd.service-jWYilL
drwx------   3 root root   17 33 12:21 systemd-private-dc9b832f5db048d5bccf835dd334075e-chronyd.service-kqZuRO
drwx------   3 root root   17 223 20:47 systemd-private-e2f2da87a7e945868423581f4b4e575a-chronyd.service-OebGxC
-rw-r--r--   1 root root  168 33 12:27 test.sh
drwxrwxrwt.  2 root root    6 121 2019 .Test-unix
drwx------   2 root root    6 227 19:57 vmware-root_8419-1688474274
drwx------   2 root root    6 33 12:21 vmware-root_8605-1948525539
drwx------   2 root root    6 225 14:17 vmware-root_8710-2857962208
drwx------   2 root root    6 223 20:47 vmware-root_8739-3844444291
drwxrwxrwt.  2 root root    6 121 2019 .X11-unix
drwxrwxrwt.  2 root root    6 121 2019 .XIM-unix
[root@centos7 tmp]#

2、错误输出重定向

示例:错误输出重定向举例

命令正确执行是没有错误信息的,我们必须刻意地让命令执行出错,如下所示:

[root@centos7 tmp]# ls java 2> err.log
[root@centos7 tmp]# cat err.log
ls: 无法访问java: 没有那个文件或目录
[root@centos7 tmp]# ls java 2>> err.log
[root@centos7 tmp]# cat err.log
ls: 无法访问java: 没有那个文件或目录
ls: 无法访问java: 没有那个文件或目录

3、正确输出和错误信息同时保存

示例:把正确结果和错误信息都保存到不同文件中。

[root@centos7 tmp]# ls -l >>info.log 2>>error.log
[root@centos7 tmp]# ls java >>info.log 2>>error.log
[root@centos7 tmp]# cat info.log
总用量 12
-rw-r--r-- 1 root root 1362 33 12:29 demo.txt
-rw-r--r-- 1 root root  100 33 12:30 err.log
-rw-r--r-- 1 root root    0 33 12:33 error.log
-rw-r--r-- 1 root root    0 33 12:33 info.log
drwx------ 3 root root   17 227 19:57 systemd-private-01c0359be41942aab784912371f5fcb3-chronyd.service-pRrdTO
drwx------ 3 root root   17 221 21:02 systemd-private-2d952048e02047f29f26d09bae616d88-chronyd.service-h5EZOo
drwx------ 3 root root   17 225 14:17 systemd-private-7ddedc75621a4db691dac9a29649e990-chronyd.service-jWYilL
drwx------ 3 root root   17 33 12:21 systemd-private-dc9b832f5db048d5bccf835dd334075e-chronyd.service-kqZuRO
drwx------ 3 root root   17 223 20:47 systemd-private-e2f2da87a7e945868423581f4b4e575a-chronyd.service-OebGxC
-rw-r--r-- 1 root root  168 33 12:27 test.sh
drwx------ 2 root root    6 227 19:57 vmware-root_8419-1688474274
drwx------ 2 root root    6 33 12:21 vmware-root_8605-1948525539
drwx------ 2 root root    6 225 14:17 vmware-root_8710-2857962208
drwx------ 2 root root    6 223 20:47 vmware-root_8739-3844444291
[root@centos7 tmp]# cat error.log
ls: 无法访问java: 没有那个文件或目录

4、/dev/null文件

如果希望执行某个命令,你既不想把命令的输出结果保存到文件,又不想输出在屏幕上显示,干扰命令的执行,那么你把命令的所有结果重定向到 /dev/null 文件中。

command > /dev/null

可以把 /dev/null 当成 Linux 系统的垃圾箱,任何放入垃圾箱的数据都会被丢弃,不能恢复。

示例:

[root@centos7 tmp]# ls -l &>/dev/null
[root@centos7 tmp]#

二、Shell输入重定向

输入重定向就是改变输入的方向,不再使用键盘作为命令输入的来源,而是使用文件作为命令的输入。

Bash 支持的输出重定向符号如下:

在这里插入图片描述

和输出重定向类似,输入重定向的完整写法是fd<file,其中 fd 表示文件描述符,如果不写,默认为 0(一般都省略不写),也就是标准输入文件。

1、输入重定向

示例:逐行读取文件内容。

[root@centos7 tmp]# cat test2.sh
#!/bin/bash

while read str; do
    echo $str
done <demo.txt
[root@centos7 tmp]# . ./test2.sh
百度一下
http://www.baidu.com/
shell 重定向
[root@centos7 tmp]#

2、分界符作为命令输入的结束标志

分界符可以自由定义,只要再碰到相同的分界符,两个分界符之间的内容将作为命令的输入(不包括分界符本身)。

此处我们使用输入重定向符号<<,这个符号的作用是使用特定的分界符作为命令输入的结束标志,而不使用 Ctrl+D 键。

示例:统计用户在终端输入的文本的行数。

[root@centos7 tmp]# wc -l <<END
> 1234
> asdf
> www
> baidu
> sss
> END
5
[root@centos7 tmp]#

wc 命令会一直等待用输入,直到遇见分界符 END 才结束读取。

– 求知若饥,虚心若愚。

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

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

相关文章

LLM 系列——BERT——论文解读

一、概述 1、是什么 是单模态“小”语言模型&#xff0c;是一个“Bidirectional Encoder Representations fromTransformers”的缩写&#xff0c;是一个语言预训练模型&#xff0c;通过随机掩盖一些词&#xff0c;然后预测这些被遮盖的词来训练双向语言模型&#xff08;编码器…

最新 Node 初始化 vue 项目报错(npm init vue@latest)以及配置淘宝镜像(cnpm)

最新 Node 初始化 vue 项目报错&#xff08;npm init vuelatest&#xff09;以及配置淘宝镜像&#xff08;cnpm&#xff09; PS E:\SpringBootBase\ProjectOne\big-event-vue> cnpm init vuelatest cnpm : The term ‘cnpm’ is not recognized as the name of a cmdlet, fu…

加密隧道技术

在现在的互联网上传输数据&#xff0c;首要考虑的就是安全。这关乎到你的隐私&#xff0c;个人信息&#xff0c;财产安全等等重大问题。如果你的程序本身传输的信息没有加密&#xff0c;也可以通过其他辅助方式让你的通信加密。一些工具的就是为了解决这样的场景的&#xff0c;…

文心一言 VS 讯飞星火 VS chatgpt (206)-- 算法导论15.4 3题

三、设计 LCS-LENGTH的带备忘的版本&#xff0c;运行时间为O(mn)。需要写代码的时候&#xff0c;请用go语言。 文心一言&#xff0c;代码正常运行&#xff1a; LCS-LENGTH&#xff08;Longest Common Subsequence Length&#xff09;问题的带备忘的版本通常指的是使用动态规划…

springboot+vue学生网上请假系统

学生网上请假系统 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了学生网上请假系统的开发全过程。通过分析学生网上请假系统管理的不足&#xff0c;创建了一个计算机管理学生网上请假系统的方案。文章介绍了…

社区店经营全攻略:为何成为创业者的首选?

在当今的创业环境中&#xff0c;社区店越来越受到创业者的关注和青睐。 作为一名开鲜奶吧5年的创业者&#xff0c;我见证了无数的实体项目&#xff0c;这篇文章&#xff0c;为大家深入解析社区店的优势&#xff0c;以及为何它成为了众多创业者的首选。 社区店的主要优势在于以…

自注意力机制(Self-Attention)

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站&#xff08;【http://www.aideeplearning.cn】&#xff09; Transformer模型中最关键部分就是自注意力&#xff08;Self-Attention&#xff09;机制&#xff0c;正如 Transformer 的论文的标题是“…

ConcurrentHashMap的演进:从Java 8之前到Java 17的实现原理深度剖析

目录 一、引言二、Java 8之前的ConcurrentHashMap1、内部结构与初始化2、Segment类3、并发控制4、扩容与重哈希5、总结 三、Java 8中的ConcurrentHashMap1、数据结构2、并发控制2.1. CAS操作2.2. synchronized同步块 3、哈希计算与定位4、扩容与重哈希5、总结 四、Java 17中的C…

Docker知识点总结

二、Docker基本命令&#xff1a; Docker支持CentOs 6 及以后的版本; CentOs7系统可以直接通过yum进行安装&#xff0c;安装前可以 1、查看一下系统是否已经安装了Docker: yum list installed | grep docker 2、安装docker&#xff1a; yum install docker -y -y 表示自动确认…

安装Realtek Audio Driver失败[Error Code:-0001]

安装Realtek Audio Driver失败[Error Code&#xff1a;-0001] 首先来看一下我们遇到的问题GPT4的推荐解决方法&#xff08;流水账&#xff09;笔者自己真实有效的解决办法 首先来看一下我们遇到的问题 描述&#xff1a;在笔记本更新完电脑之后&#xff0c;没有自带声音驱动。然…

【LeetCode】升级打怪之路 Day 11:栈的应用、单调栈

今日题目&#xff1a; Problem 1: 栈的应用 155. 最小栈 | LeetCode20. 有效的括号 | LeetCode150. 逆波兰表达式求值 | LeetCode Problem 2: 单调栈 496. 下一个更大元素 I739. 每日温度503. 下一个更大元素 II 目录 Problem 1&#xff1a;栈 - “先进后出”的应用LC 155. 最…

2024龙年特别篇 -- 魔法指针 之 指针变量

目录 ​编辑 字符指针变量 字符指针 字符数组 关于字符数组的试题 数组指针变量 数组指针 利用指针数组打印数组 打印二维数组 数组作为形参 当形参为指针时&#xff08;指针数组&#xff09; 函数指针变量 利用函数实现加法输出的多种方式 字符指针变量 字符指针 char …

[NSSCTF 2nd] web复现

1.php签到 <?phpfunction waf($filename){$black_list array("ph", "htaccess", "ini");$ext pathinfo($filename, PATHINFO_EXTENSION);foreach ($black_list as $value) {if (stristr($ext, $value)){return false;}}return true; }if(i…

CKA考生注意:这些Deployment要点能助你一臂之力!

往期精彩文章 : 提升CKA考试胜算&#xff1a;一文带你全面了解RBAC权限控制&#xff01;揭秘高效运维&#xff1a;如何用kubectl top命令实时监控K8s资源使用情况&#xff1f;CKA认证必备&#xff1a;掌握k8s网络策略的关键要点提高CKA认证成功率&#xff0c;CKA真题中的节点维…

蓝桥杯集训·每日一题2024 (前缀和)

笔记&#xff1a; 例题&#xff1a; #include<bits/stdc.h> using namespace std; const int N 5000010; char str[N]; int s[N]; int main(){int t;cin>>t;for(int a1;a<t;a){int n;cin>>n;scanf("%s",str1);for(int i1;i<n;i){s[i]s[i-1]…

重磅!交通领域顶级会议TRB会议将进行重大改革

美国交通研究委员会年会&#xff08;Transportation Research Board annual meeting,以下简称TRB会议&#xff09;是由美国交通研究委员会举办的交通领域的国际顶级会议。该会议每年举办一次&#xff0c;在华盛顿特区召开。TRB会议是交通研究领域知名度最高的学术会议之一&…

AI又进化了

B站&#xff1a;啥都会一点的研究生公众号&#xff1a;啥都会一点的研究生 一直想做但没做的板块&#xff0c;整理一段时间内AI领域的前沿动态&#xff08;符合大多粉丝研究领域/感兴趣方向&#xff09;&#xff0c;了解了解外面世界发展成啥样了&#xff0c;一起看看吧~ 谷歌…

跟 AI 学 StarRocks:简介

因为要支持公司的 BI 建设&#xff0c;团队引入了 StarRocks 数据库&#xff0c;此前我没有了解过此项技术&#xff0c;不过因为有架构师引入了此项技术栈&#xff0c;就顺便学习一下。 一、什么是 MPP 数据库&#xff1f; MPP 数据库指的是大规模并行处理&#xff08;Massiv…

Hololens 2应用开发系列(2)——MRTK基础知识及配置文件配置(上)

Hololens 2应用开发系列&#xff08;2&#xff09;——MRTK基础知识及配置文件配置 一、前言二、MRTK基础知识2.1 MRTK概述2.2 MRTK运行逻辑2.3 MRTK配置文件介绍2.4 MRTK服务 三、配置文件使用3.1 总配置文件3.2 相机配置3.3 其他配置 参考文献 一、前言 在前面的文章中&…

DDR5 新特性概述

主页&#xff1a; 元存储博客 文章目录 前言1. SDR 与 DDR2. DDR5 的新特点总结 前言 DDR5 带来更快的处理速度和更大的存储空间&#xff0c;为云计算、大数据等领域的发展提供了强有力的支持。 1. SDR 与 DDR single data rate&#xff0c; 1 个时钟周期做一次数据传输 do…