【Linux】重定向与通配符

article/2025/9/23 21:59:27

目录

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

一.输入输出重定向

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

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

输出重定向

概念

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

  • 标准输出重定向(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.txttest:
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.ctest1:
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三个字符中的一个

[!list] 或 [^list]:匹配除了list外的其他元素,可以是其他字母或数字,但只能有一个。

[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

大括号{}

{string1,string2,string3…}:匹配string1 或 string2 (或其他)其中一个字符串

[root@VM-16-5-centos blogs]# ll t{es,123,.ou}t
ls: cannot access t123t: No such file or directory
ls: cannot access t.out: No such file or directory
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

http://chatgpt.dhexx.cn/article/bFxOgHmi.shtml

相关文章

linux命令中的通配符

本小节将介绍一些Linux一个非常实用且出现频率较高的功能&#xff0c;linux通配符&#xff0c;并简述通配符和正则的区别&#xff0c;作为我的CSDN专栏《系统学习Linux命令》的一篇。 前面的章节提到&#xff0c;如果想要一次性删除很多的文件&#xff0c;这个时候就需要使用到…

shell中通配符的使用

shell中的通配符与正则表达式是不同的两种功能。 正则表达式一般不会在bash直接应用&#xff0c;需要使用sed、grep、awk来解释正则表达式。 通配符则可以通过bash直接解释&#xff0c;一般用作名称展开。 bash中可以使用的通配符符号包括&#xff1a;*、?、{}、[]、^ 这些…

linux—通配符详解及总结

本博客主要详解关于linux中常使用的通配符的知识点&#xff0c;主要分为三个步骤&#xff1a; 通配符 *&#xff0c;&#xff1f;和【】【^】的详细解释举例截图说明个人的总结理解 一&#xff1a;通配符 *&#xff0c;&#xff1f;和【】【^】的详细解释 ps&#xff1a;因为…

Linux之通配符、引号的使用

目录 Linux之通配符、引号的使用 通配符 定义 范围 用法及含义 案例 引号使用 案例 Linux之通配符、引号的使用 通配符 定义 通配符是一种特殊语句&#xff0c;主要有星号(*)、问号(?)等表示&#xff0c;用来模糊搜索文件&#xff0c;当查找目录或文件时&#xff0c;…

bash之通配符

为什么要写这篇文章 我相信很多人和我一样&#xff0c;天天在使用linux的shell命令&#xff0c;也大概知道有通配符这么个概念&#xff0c;不过比较模糊。平时也会使用简单的通配符&#xff0c;也许还知道有正则表达式的存在&#xff0c;甚至不清楚两者的区别&#xff0c;往往…

10.linux通配符

一&#xff0c;linux通配符及正则表达式 通配符&#xff1a;用于文件名匹配&#xff0c;是由shell解析&#xff0c;如find&#xff0c;ls&#xff0c;cp&#xff0c;mv。 *&#xff1a;匹配任意长度的任意字符 &#xff1f;匹配任意单个字符 [ ]匹配指定范围内任意单个字符 […

Linux之通配符

一 Linux命令的共通知识点 1.通配符的使用 通配符&#xff1a;又叫文件名替换符号&#xff0c;符号具备特殊含义&#xff0c;例如&#xff1a;文件名&#xff1a;test&#xff0c;通配符可以写成???或者* *&#xff1a;代表可以匹配任意长度的文件名&#xff08;all所有&am…

Linux详解:通配符

Linux是一款开源操作系统&#xff0c;其灵活性和可定制性一直受到开发者的喜爱和追捧。而且&#xff0c;Linux在文件管理方面提供了丰富的功能&#xff0c;例如通配符&#xff0c;它是一种用于匹配文件名的特殊字符。通配符在Linux中可以帮助我们更加方便和快捷地查找和操作文件…

linux通配符和正则表达式

1、 通配符 通配符是shell在做PathnameExpansion时用到的。说白了一般只用于文件名匹配&#xff0c;它是由shell解析的&#xff0c;比如find&#xff0c;ls&#xff0c;cp&#xff0c;mv等。 1、1 Shell常见通配符&#xff1a; 通配符含义实例*匹配 0 或多个字符a*b a与b之间…

黑客都怎么制作外挂?C++黑客编程收集的源码集合

VC黑客编程收集的代码&#xff1a; 打开远程telnet服务代码 浏览器 屏幕精灵 探测Windows主机的NetBIOS信息 获取asp代码的程序 聊天系统的列子 邮件发送代码 远程控制程序 sqlworm蠕虫 tini2后门代码 这些代码有的配有测试单元 &#xff0c;有的没有&#xff0c;仅…

制作外挂需要多高的编程技术?

游戏外挂和游戏开发出游戏诞生之初注定是一对生死冤家&#xff0c;正常来讲制作外挂思路比较散&#xff0c;不一定要非常高的编程技术&#xff0c;而且外挂的制作也不是一劳永逸的&#xff0c;因为游戏公司也在不停的更新修改防御规则&#xff0c;只要游戏存在外挂也会层出不穷…

利用Python制作微信跳一跳外挂,微信好友装逼神器!

导语 前几天在GitHub上看到有人利用Python玩一款名为“跳一跳”的微信小程序,于是打算自己也来试一试,进群:711944363 获取微信跳一跳源码! 演示工具 电脑系统:Win10 Python版本:2.7.13(64位) 环境配置 Step1:安装Python 安装Python2.7并添加到环境变量中。 S…

CE+OD外挂制作实战 [提高篇]

人造指针&基址 实验目标:通过向游戏注入一段特殊汇编代码,实现自动获取动态地址.省略找基址的麻烦 为什么会出现人造指针 ? 1.基址偏移层数太多,很难找 2.有些游戏根本找不到基址 人造指针有什么优缺点? 1.人造指针就算游戏更新也无需去重复找基址 2.缺点是,需要注入代…

C/C++编程日记:制作一个简单的内存外挂

简单外挂 通过 C 语言编写一个简单的外挂&#xff0c;通过api函数修改游戏数据&#xff0c;从而实现作弊功能 对象分析 要用的 API 函数简单介绍 编写测试效果 本次游戏对象为 Super Mario XP 没有更新所以可用任意版本 试玩发现人物血量最大为 10&#xff0c;心最大为 99&…

外挂基础知识入门教学

{threadNotes} 外挂制作必备工具下载. 工具下载: peid 0.94 用于查壳,知道什么壳就可以脱壳拉. http://www.pediy.com/tools/unpack/File_analysers/peid/peid.rar OllyDbg调试器 调试游戏.http://www.pediy.com/tools/Debuggers/ollydbg/OllyICE.rarOD脱壳脚本 用…

C#简易外挂制作

【外挂修改器简单介绍】 游戏外挂分为很多种类型&#xff0c;例如本地客户端的内存修改、远程服务器的封包破解。 一般的网游由于服务器的机能限制&#xff0c;并不会将游戏产生的所有数据、计算都提供给服务器来承担。经常的&#xff0c;服务器只会将玩家人物的属性、血量、加…

旧手机改电脑外挂,文本补充

时间&#xff1a;2022/11/18 作者&#xff1a;二本双非小白 该文章主要针对小白 事情开始&#xff1a; 2022-06-02 某位华为大佬发布视频-----------旧手机改电脑外挂 视频链接:旧手机改电脑外挂-效率或将“提升300%&#xff1f;”_哔哩哔哩_bilibili 随着时间推移&…

利用Python做绝地科学家(外挂篇)

前言 玩吃鸡时间长的小盆友&#xff0c;应该晓得这游戏的体验非常差&#xff0c;特别是高端局&#xff0c;神仙满天飞。 所有今天我也要用Python写一个外挂&#xff0c;开始我的报复科学实验。 但是&#xff0c;要是。。。。。。要是被封号了&#xff0c;那就&#xff0c;那就…

外挂制作必备工具下载.

外挂制作必备工具下载. 工具下载: peid 0.94 用于查壳,知道什么壳就可以脱壳拉. http://www.pediy.com/tools/unpack/File_analysers/peid/peid.rar OllyDbg调试器 调试游戏. http://www.pediy.com/tools/Debuggers/ollydbg/OllyICE.rar OD脱壳脚本 用于脱壳. http:/…

游戏反外挂技术原理讲解

永远在路上 没有破解不了的反外挂系统&#xff0c;反外挂是一个对抗过程&#xff0c;需要不断升级。我们反外挂小组会采取对抗方式提升防御&#xff0c;也会研究竞品来获取灵感。反外挂也是非常有意思的&#xff0c;可以学到很多很多底层知识。 善战者无赫赫之功 反外挂&#x…