欢迎来到 CILMY23 的博客
🏆本篇主题为:Linux重定向指南:探索输出重定向与追加重定向的奥秘!
🏆个人主页:CILMY23-CSDN博客
🏆系列专栏:Python | C++ | C语言 | 数据结构与算法 | 贪心算法 | Linux | 算法专题 | 代码训练营
🏆感谢观看,支持的可以给个一键三连,点赞收藏+评论。如果你觉得有帮助,还可以点点关注
前言:
本期是Linux的番外第二篇,主要讲述Linux中重定向的概念,我们会从输出重定向详细介绍,最后进行总结。
重定向
在了解重定向之前,我们先了解一个指令 ------ echo
echo 是一个非常基础且常用的 Linux 命令,它的作用是将文本内容输出到终端。
💫💫指令:echo
💫💫功能:将文本内容输出到终端
我们举个例子就明白了:
在终端上,我输入echo,可以将我后面的字符串打印到屏幕上。
echo 最经常使用的就是输出命令。
那我们看下面一段指令:
利用 cat 输出我们的 aaa.txt
我们可以发现 hello Ubuntu 被放到文件中了。
实际上:我们把一个指令,接内容加大于号,的这个操作叫做输出重定向
什么是重定向?
在 Linux 系统中,重定向是一种强大的工具,它允许你控制命令的输入和输出数据流,将数据从一个地方转移到另一个地方,从而实现更灵活的操作。
说白了,重定向就是改变了数据的方向。
标准输入、标准输出和标准错误:数据流的源头和目的地
在 Linux 中,每个程序都有三个默认的标准文件流:
- 标准输入 (stdin):默认情况下,程序从键盘接收输入。你可以想象它像一个打开的管道,程序通过这个管道接收用户的输入。
- 标准输出 (stdout):默认情况下,程序将输出显示到终端。它就像另一个管道,程序将处理结果通过这个管道输出到屏幕上。
- 标准错误 (stderr):默认情况下,程序将错误信息显示到终端。它是一个专门用于输出错误信息的管道,方便用户排查问题。
重定向符号:改变数据流的方向
Linux 提供了一系列重定向符号,让你可以改变数据流的方向,将数据从一个地方转移到另一个地方。
符号 | 描述 | 示例 |
---|---|---|
> | 将标准输出重定向到文件 | ls >log.txt (将 ls 命令的输出写入 file.txt 文件) |
>> | 将标准输出追加到文件 | cat myfile.txt >> file.txt (将 myfile.txt 的内容追加到 file.txt 文件) |
< | 将标准输入重定向到文件 | sort < file.txt (从 file.txt 文件读取内容作为 sort 命令的输入) |
2> | 将标准错误重定向到文件 | ls -l non-existent-file 2> error.log (将 ls 命令的错误信息写入 error.log 文件) |
2>> | 将标准错误追加到文件 | command 2>> error.log (将 command 命令的错误信息追加到 error.log 文件) |
&> | 将标准输出和标准错误重定向到同一个文件 | ls -l &> output.log (将 ls 命令的正常输出和错误信息都写入 output.log 文件) |
&>> | 将标准输出和标准错误追加到同一个文件 | command &>> output.log (将 command 命令的正常输出和错误信息都追加到 output.log 文件) |
输出重定向
我们重点先关注第一个,输出重定向
我们重新写一个例子感受一下输出重定向 > 的作用
首先我利用 pwd,查看我们当前所处目录,这里我忘记用 ls 打印当前文件了,不过这里是没有 aa.txt 的,然后我们使用了输出重定向来,把本应该输出到屏幕上的 hello world 输出到了 aa.txt 文件,接着我们可以看到目录下多了一个 aa.txt ,并且里面的内容还多了 hello world 。
然后我再重复同样操作,但是这次的字符串变成了 hello cilmy23 ,我们可以看到除了内容不一样以外,其余跟其他一样。
所以我们可以总结出输出重定向的作用
- 没有文件,创建文件
- 将本来应该输出到屏幕上的数据,输出到文件中
那它是否有清除文件内容的功能呢?
我们接着来验证一下:
这次我什么数据都没输入,发现文件中的内容清空了。因此我们可以得出下面三条结论。
- 没有文件,创建文件
- 可以清空文件内容
- 将本来应该输出到屏幕上的数据,输出到文件中
所以,我们除了可以使用 touch 来创建文件,也可以利用输出重定向 > 来创建文件。
Linux理念
再了解完输出重定向后,我们再来了解一个Linux理念:---- Linux中一切皆文件
什么叫一切皆文件呢?
一切皆文件,是Linux的核心哲学,在 Linux 中,几乎所有东西都被抽象成文件,包括:
- 硬件设备: 键盘、鼠标、硬盘、网卡、打印机等等,都被抽象成特殊类型的文件,例如 /dev/tty 代表终端设备,/dev/sda 代表第一个硬盘。
- 进程: 每个运行的程序都被视为一个文件,例如 /proc/1234 代表进程 ID 为 1234 的进程。
- 网络连接: 网络连接也被抽象成文件,例如 /dev/tcp/192.168.1.10/80 代表与 IP 地址为 192.168.1.10 的服务器建立的 80 端口连接。
- 系统信息: 系统信息,例如系统日志、系统状态、硬件信息等等,也都以文件的形式存储。
这种“一切皆文件” 的理念带来了许多优势
- 统一性:所有事物都被统一地抽象成文件,简化了操作,使用户可以以相同的方式访问和操作各种资源
- 灵活性: 通过操作文件,可以对系统或者系统文件进行灵活的配置和管理
- 可扩展性: 由于所有事物都被抽象成文件,因此可以方便地添加新的设备、进程或其他资源,而无需修改内核代码。
- 安全性: 通过文件权限控制,可以有效地管理系统资源的访问权限,提高系统安全性。
Linux也就是可以把硬件啊什么的都抽象成文件。这些是Windows系统没有的。它不想让系统变复杂,所以在这些我们大概了解一下,我们后期再补充。
那在这种理念下,显示器算不算文件呢?
答:算的,普通文件和显示器,都可以看作文件。对于任何的文件来讲,最常见的方法就是读文件和写文件。
拿键盘举例,我们的键盘,可以看作一个文件,这个文件有两种常用的方法,一个是读方法,一个是写方法,我们可以从键盘中读取我们所需要的内容,说白了就是我们可以通过键盘输入到我们的电脑上,但是我们无法写入到键盘上,所以它的读方法是有的,写方法是没的。
如图所示:
所以显示器的读方法,和写方法。也可以按照同样的方式去理解,我们无法读取显示器上的东西,但是我们可以向显示器中写入,所以,显示器的读方法视为空,写方法是有具体对应的方法。
总结:
所以上一个知识点的操作,就是把本来应该输出到显示器文件上的数据,改变到磁盘文件中去了。又因为是输出数据,所以是输出重定向。重定向就是重新改变了数据的方向,这就叫做重定向。
补充完Linux理念后,我们继续讲解输出重定向中的东西。
追加重定向
追加重定向是输出重定向的一种特殊形式,它的作用是将数据追加到现有的文件末尾,而不是覆盖原有内容。
例如:
追加重定向的符号是 >>, 每次重定向都从该文件的结尾进行写入,这种叫追加重定向,每次不断往里新增加内容。
它的作用和输出重定向差不多,但是它没有覆盖原文件的内容。
- 没有文件,创建文件
- 追加文件内容
- 将本来应该输出到屏幕上的数据,输出到文件中
这一块和C语言的文件操作有点类似,感兴趣的朋友可以回顾一下往期
【C语言】文件操作篇-----程序文件和数据文件,文件的打开和关闭,二进制文件和文本文件,fopen,fclose【图文详解】_c语言二进制打开文件-CSDN博客https://blog.csdn.net/sobercq/article/details/136579259
在文件的末尾,我还放出了一个文件操作的表格,这个输出重定向和里面的 "w" 是相似的。
🛎️感谢各位同伴的支持,本期Linux一篇总结专题就讲解到这啦,下期我们将进入文件篇的指令讲解,如果你觉得写的不错的话,可以给个一键三连,点赞,收藏+评论,可以的话还希望点点关注,若有不足,欢迎各位在评论区讨论。