【Linux】重定向与通配符

news2025/1/11 6:01:28

目录

  • 一.输入输出重定向
    • 输出重定向
      • 概念
      • 小试牛刀
    • 输入重定向
    • 一切皆文件
  • 二.命令行的通配符
    • 星号(*)
    • 问号(?)
    • 中括号[]

一.输入输出重定向

输入重定向:把文件导入到命令中。

输出重定向:指把原本要输出到屏幕的数据消息写入到指定文件中。

输出重定向

概念

在日常学习和工作中,相较于输入重定向,我们使用输出重定向的频率更高,所以又将输出重定向分为了标准输出重定向错误输出重定向两种不同的技术,以及清空写入追加写入两种模式。这些东西都不难理解,认真看完下面的简绍相信大家会有所收获。

  • 标准输出重定向(stdout,文件描述符为1):默认输出到屏幕
  • 错误输出重定向(stderr,文件描述符为2):默认输出到屏幕

接下来让我们通过一个例子,了解这两个输出重定向的区别:

当我们查看两个文件的属性信息,其中一个文件是存在的,另一个不存在,对这两个文件的操作都可以在屏幕上输出一些数据信息,但这两个操作的差异却很大:

[root@VM-16-5-centos blogs]# touch test.c
[root@VM-16-5-centos blogs]# ll test.c   //test.c为存在的文件
-rw-r--r-- 1 root root 0 Dec 16 04:29 test.c
[root@VM-16-5-centos blogs]# ll test1.c  //test1.c为不存在的文件
ls: cannot access test1.c: No such file or directory

标准输出信息:名为test.c的文件是存在的,输出的是一些关于该文件的属性信息,也称标准输出信息。
错误输出信息:名为test1.c的文件是不存在的,执行完命令后,显示的报错提示信息,也就是错误输出信息。

输出重定向是将原本输出到屏幕上的数据,输出到指定文件中,输出标准输出信息的就是标准输出重定向,输出错误输出信息的就是错误输出重定向

概念我们已经清楚了,清空写入追加写入我们将会结合着符号的使用向大家介绍,现在让我们看一下,输出重定向用到的符号及其作用。

符号作用
命令 > 文件将标准输出重定向到一个文件中(清空原有文件的数据)
命令 2> 文件将错误输出重定向到一个文件中(清空原有文件的数据)
命令 >> 文件将标准输出重定向到一个文件中(追加原有文件的数据)
命令 2>> 文件将错误输出重定向到一个文件中(追加原有文件的数据)
命令 >> 文件 2>&1 或 命令 &>> 文件将标准输出和错误输出共同写入到文件中(追加到原有内容的后面)

在这里插入图片描述

其中的2就是上文提到的文件描述符,用于告诉输出重定向输出的是什么。标准输出重定向,可以省略文件描述符1不写,但是错误输出重定向必须要加文件描述符2

清空写入:只使用一个 >
追加写入:使用 >>

小试牛刀

命令 > 文件:将标准输出重定向到一个文件中(清空原有文件的数据)

[root@VM-16-5-centos blogs]# echo "hello world1" > test.c   //echo指令:打印指令。该行意为将字符串输出到test.c文件中
[root@VM-16-5-centos blogs]# cat test.c                     //cat指令:查看文件内容
hello world1
[root@VM-16-5-centos blogs]# echo "hello world2" > test.c
[root@VM-16-5-centos blogs]# cat test.c
hello world2
[root@VM-16-5-centos blogs]# echo "hello world3" > test.c
[root@VM-16-5-centos blogs]# cat test.c
hello world3

我们共向test.c文件输出了三行字符串,而最后查看的结果却只有最后输出的内容,这就是清空写入,在向文件中输入新的字符串时,之前的内容就会被清空。

那么我们可以使用如下对文件执行清空操作:

> 文件名      //什么都没有向文件输出,却清空了之前的所以内容

具体操作:

[root@VM-16-5-centos blogs]# echo "hello world3" > test.c
[root@VM-16-5-centos blogs]# cat test.c
hello world3
[root@VM-16-5-centos blogs]# > test.c
[root@VM-16-5-centos blogs]# cat test.c
[root@VM-16-5-centos blogs]#

命令 2> 文件:将错误输出重定向到一个文件中(清空原有文件的数据)

[root@VM-16-5-centos blogs]# ll test1 > test.c    //没有使用文件描述符,发生报错
ls: cannot access test1: No such file or directory
[root@VM-16-5-centos blogs]# cat test.c
[root@VM-16-5-centos blogs]# ll test1 2 > test.c  //test1目录不存在
[root@VM-16-5-centos blogs]# cat test.c 
ls: cannot access test1: No such file or directory

该命令与上一条相似,只是执行的对象不同。

使用错误输出重定向去输出一个存在的文件:

[root@VM-16-5-centos blogs]# mkdir test1
[root@VM-16-5-centos blogs]# ll test1 2 > test.c
total 0
[root@VM-16-5-centos blogs]# cat test.c
[root@VM-16-5-centos blogs]# 

因为文件是真实存在的,依然会在屏幕上输出test1目录的内容,而test.c内却没有数据写入

命令 >> 文件 : 将标准输出重定向到一个文件中(追加原有文件的数据)

[root@VM-16-5-centos blogs]# echo "hello world1" >> test.c
[root@VM-16-5-centos blogs]# cat test.c
hello world1
[root@VM-16-5-centos blogs]# echo "hello world2" >> test.c
[root@VM-16-5-centos blogs]# cat test.c
hello world1
hello world2
[root@VM-16-5-centos blogs]# echo "hello world3" >> test.c
[root@VM-16-5-centos blogs]# cat test.c
hello world1
hello world2
hello world3

我们可以看到,原有的数据并没有被清空。

命令 2>> 文件 : 将错误输出重定向到一个文件中(追加原有文件的数据)

[root@VM-16-5-centos blogs]# > test.c              //清空文件
[root@VM-16-5-centos blogs]# ll test2 2>> test.c   //test2目录不存在
[root@VM-16-5-centos blogs]# cat test.c
ls: cannot access test2: No such file or directory
[root@VM-16-5-centos blogs]# ll test3 2>> test.c   //test3目录不存在
[root@VM-16-5-centos blogs]# cat test.c 
ls: cannot access test2: No such file or directory
ls: cannot access test3: No such file or directory

与上一条指令相似,只是执行对象不同。

命令 >> 文件 2>&1 或 命令 &>> 文件 : 将标准输出和错误输出共同写入到文件中(追加到原有内容的后面)

[root@VM-16-5-centos blogs]# > test.c                 //清空文件
[root@VM-16-5-centos blogs]# ll test3 &>> test.c      //向文件输出错误输出信息
[root@VM-16-5-centos blogs]# cat test.c
ls: cannot access test3: No such file or directory    
[root@VM-16-5-centos blogs]# ll test1 &>> test.c      //向文件输出标准输出信息
[root@VM-16-5-centos blogs]# cat test.c
ls: cannot access test3: No such file or directory
total 0

使用该指令,无需判断该消息的类型,可以直接输入到文件中,清空写入也可以使用**&**符无视文件类型,这个大家要是感兴趣或是有需要可以去尝试一下,与上面的指令格式相同。

输入重定向

输入重定向的作用是把文件导入到命令中。

输入重定向相对来说有些冷门,在工作中遇到的概率会小一点。

对于输入重定向,用到的符号及作用如下

符号作用
命令 < 文件将文件作为命令的标准输入
命令 << 分界符从标准输入中读入,直到遇见分界符才停止
命令 < 文件1 > 文件2将文件1作为命令的标准输入并将标准输出到文件2

在这里插入图片描述

输入重定向的作用是把文件直接导入到命令中。接下来使用输入重定向把文件导入wc -l命令,统计一下文件中的内容行数。

[root@VM-16-5-centos blogs]# wc test.c            //wc指令,获得文件中行数,单词数,和字符数
 1  9 52 test.c
[root@VM-16-5-centos blogs]# wc -l test.c         //wc -l指令,获得文件中的行数
1 test.c
[root@VM-16-5-centos blogs]# cat test.c | wc -l   // | 为管道符,该指令首先得出test.c的数据,在将完整的数据交给wc -l指令获得该数据的行数
1
[root@VM-16-5-centos blogs]# wc -l < test.c       //直接将文件中的数据输入到指令wc -l,获得该数据的行数
1

一切皆文件

显示数据到显示器上,就是向显示器传输数据,向显示器写入,所以我们可以把显示器看作一种文件
对比:指令 输入重定向 文件(显示器):将显示器中的信息输入到命令

C语言中的,scanf、gets等,都是从键盘上获得数据,由键盘写入,所以我们可以把键盘看作一种文件
对比:文件(键盘) 输出重定向 文件 :将键盘上的信息输入到文件

内存从键盘获得数据的过程,也就是read,对应着input(输入)到程序;
内存显示数据到显示器的过程,也就是write,对应output(输出)到显示器上。这一过程就是IO。
在这里插入图片描述
既然键盘和显示器都可以看作文件,那其他一些抽象的硬件可以吗? 可以

这就是Linux下的基本哲理之一:Linux下一切皆文件。

Linux的一切皆文件是指,Linux中一切东西都可以通过文件的方式访问、管理,任何东西都挂在文件系统之上,即使它们不是文件,也以文件的形式来呈现。

比如我们经常会讲的进程、设备、Socket,实际上都不是文件,但是你可以以文件系统的规范来访问它,修改属主和属性。

二.命令行的通配符

星号(*)

表示匹配零个或多个字符

[root@VM-16-5-centos blogs]# ll test*
-rw-r--r-- 1 root root   76 Dec 17 01:17 test1.c
-rw-r--r-- 1 root root    0 Dec 20 03:33 test2.c
-rw-r--r-- 1 root root   45 Dec 19 03:17 test.c
-rw-r--r-- 1 root root 9901 Dec 18 23:59 test.txt

test:
total 4
drwxr-xr-x 2 root root 4096 Dec 15 16:50 test1
-rw-r--r-- 1 root root    0 Dec 15 15:37 test1.c
-rw-r--r-- 1 root root    0 Dec 15 16:26 test.c

test1:
total 0

问号(?)

表示匹配单个字符

[root@VM-16-5-centos blogs]# ll test?
total 0
[root@VM-16-5-centos blogs]# ll test??
-rw-r--r-- 1 root root 45 Dec 19 03:17 test.c

中括号[]

[0-9] :表示匹配0~9之间的单个数字的字符

[abc] :表示匹配a、b、c三个字符中的一个

[root@VM-16-5-centos blogs]# ll test[0-9].[abc]
-rw-r--r-- 1 root root 76 Dec 17 01:17 test1.c
-rw-r--r-- 1 root root  0 Dec 20 03:33 test2.c

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

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

相关文章

步进电机堵转、丢步、失步

1、测试背景&#xff1a;同样电压下&#xff0c;步进电机转速越快&#xff0c;速度到一定之后&#xff0c;出现不转&#xff0c;或者加大驱动器的运行电流&#xff0c;电机也出现不转。 2、步进电机转速与力矩的关系&#xff1a;转速越快&#xff0c;力矩越小 3、测试&#xf…

NR HARQ(三) semi-static HARQ-ACK codebook

微信同步更新&#xff0c;欢迎关注同名modem协议笔记UE在一个PUCCH&#xff08;或PUSCH&#xff09;上发送HARQ-ACK信息时&#xff0c;信息bit很可能是多个bits位数&#xff0c;这个多bits位数的HARQ-ACK信息&#xff0c;也称为HARQ-ACK codebook码本UE物理层在以下几种情况下&…

使用 CNN 检测一个人是否戴了口罩

在本文中&#xff0c;我们将使用 CNN &#xff08;卷积神经网络&#xff09;和机器学习分类器创建一个检测一个人是否戴着口罩的分类器。它将检测一个人是否戴着口罩。 我们将从头开始学习&#xff0c;我将对每一步进行解释。我需要你对机器学习和数据科学有基本的了解。我已经…

Bootstrap5 表单

在本章中&#xff0c;我们将学习如何使用 Bootstrap 创建表单。Bootstrap 通过一些简单的 HTML 标签和扩展的类即可创建出不同样式的表单。 表单元素 <input>, <textarea>, 和 <select> elements 在使用 .form-control 类的情况下&#xff0c;宽度都是设置为…

【HAL库】STM32CubeMX开发----delay延时实验----NOP空指令

STM32CubeMX 下载和安装 详细教程 【HAL库】STM32CubeMX开发----STM32F103/F207/F407----目录 前言 HAL库有自带的 ms级 延时函数&#xff1a; HAL_Delay(); 缺点1&#xff1a; 无法实现 us级延时 缺点2&#xff1a; 此延时函数是由SysTick滴答定时器中断产生的&#xff0…

【性能篇】28 # Canvas、SVG与WebGL在性能上的优势与劣势

说明 【跟月影学可视化】学习笔记。 可视化渲染的性能问题有哪些&#xff1f; 渲染效率问题&#xff1a;指的是图形系统在绘图部分所花费的时间计算问题&#xff1a;指绘图之外的其他处理所花费的时间&#xff0c;包括图形数据的计算、正常的程序逻辑处理等等。 在浏览器上…

Leetcode 1760. 袋子里最少数目的球

给你一个整数数组 nums &#xff0c;其中 nums[i] 表示第 i 个袋子里球的数目。同时给你一个整数 maxOperations 。你可以进行如下操作至多 maxOperations 次&#xff1a;选择任意一个袋子&#xff0c;并将袋子里的球分到 2 个新的袋子中&#xff0c;每个袋子里都有 正整数 个球…

深圳电巢携手东华理工大学“电巢相伴 研职引航” 线上讲座圆满结束

前 言 2022年12月13日下午2时&#xff0c;电巢十日谈——“电巢相伴 研职引航”在电巢app直播间开讲&#xff0c;本次活动由电巢科技与东华理工大学共同举办&#xff0c;为机械与电子工程学院的大一到大四的学生带来了不少启发。 「电巢十日谈」这一系列活动正是受到薄伽丘《…

如何实现冷库冷链远程监控

本解决方案是通过智能物联网技术&#xff0c;实现对冷库温湿度的远程监控管理。 根据冷库内的温湿度数据可以及时掌握冷库内的环境状况&#xff0c;并及时采取相应的措施。 该系统通过实时监测与显示不同冷库的温湿度&#xff0c;将温度数据上传到服务器&#xff0c;并可根据实…

Fully Convolutional Adaptation Networks for Semantic Segmentation

参考 论文解析之《Fully Convolutional Adaptation Networks for Semantic Segmentation》 - 云社区 - 腾讯云 论文网址&#xff1a;Fully Convolutional Adaptation Networks for Semantic Segmentation 摘要 深度神经网络的最新进展令人信服地证明了在大数据集上学习视觉模…

基于MediatR管道的公共业务校验

基于MediatR的管道模式&#xff0c;我们可以在处理业务之前&#xff0c;进行统一验证&#xff0c;记录日志等。 所有命令&#xff08;Command&#xff09;再被处理(Handle)之前&#xff0c;都要经过IRequestPreProcessor处理&#xff0c;我们注入自己的拦截器&#xff0c;执行…

chrome拓展插件开发中使用chrome.storage本地存储

一、描述 在扩展程序中本地存储数据可以通过 chrome.storage API 实现&#xff0c;和 web 中的 localstorage 在某些方面是有区别的&#xff0c;chrome.storage 已经做了优化。 与 localStorage 的区别&#xff1a; 用户数据可以与 chrome 自动同步&#xff08;通过 storage…

【推荐】智能制造工业4.0与MES资料合集

智能制造&#xff0c;源于人工智能的研究&#xff0c;一般认为智能是知识和智力的总和&#xff0c;前者是智能的基础&#xff0c;后者是指获取和运用知识求解的能力。 智能制造应当包含智能制造技术和智能制造系统&#xff0c;智能制造系统不仅能够在实践中不断地充实知识库&a…

请上车MySQL面试必备点:从常见的存储引擎到混淆的锁分类

我们之前的文章InnoDB解决幻读的方案中提到了记录锁&#xff08;行锁&#xff09;、间隙锁和临键锁&#xff0c;后台有小伙伴催我更新一下其他的锁。拖延症又犯了&#xff0c;趁周末&#xff0c;今天我们来总结一下MyISAM和InnoDB引擎下锁的种类及使用方法。 MySQL的四大常见存…

面试题:Linux是如何避免内存碎片的

Linux是如何避免内存碎片的&#xff1f; 在网上看到这个面试题&#xff0c;参考答案是这样的&#xff1a; 伙伴算法&#xff0c;用于管理物理内存&#xff0c;避免内存碎片;高速缓存Slab层用于管理内核分配内存&#xff0c;避免碎片。 故继而去深入了解了一波&#xff0c;做了…

牛客之基础单片机知识_1

✅作者简介&#xff1a;大家好我是 xxx&#xff0c;是一名嵌入式工程师&#xff0c;希望一起努力&#xff0c;一起进步&#xff01; &#x1f4c3;参照主页&#xff1a;嵌入式基地 &#x1f525;系列专栏&#xff1a;硬件基础知识——单片机 习题专栏 &#x1f4ac;网上关于嵌入…

软件测试不常用但是一定要会的测试技术与用例设计

一、认识基本术语 术语一&#xff1a; ◆动态测试&#xff08;dynamic testing&#xff09; 通过运行软件的组件或系统来测试软件(实际运行被测软件/系统)【需要进行操作】 ◆静态测试&#xff08;static testing) 对组件的规格说明书进行评审&#xff0c;对静态代码进行走…

【推荐】700套高端简历模板合集

简历&#xff08;英语&#xff1a;resume&#xff09;&#xff0c;顾名思义&#xff0c;就是对个人学历、经历、特长、爱好及其它有关情况所作的简明扼要的书面介绍。简历是有针对性的自我介绍的一种规范化、逻辑化的书面表达。对应聘者来说&#xff0c;简历是求职的“敲门砖”…

JSP学生宿舍网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 模块划分&#xff1a;通知类型模块、通知信息模块、院系信息、班级信息、宿舍 楼信息、宿舍信息、宿管信息、学生信息、…

three.js之多线条组合

文章目录多线条组合例子专栏目录请点击 多线条组合 我们可以通过CurvePath把多个曲线、直线等合并成一个曲线 例子 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><style>body {margin: 0;overflow: hidde…