前情提要

本章节是Linux操作系统的重定向&Linux操作系统&管道操作&文本指令的相关知识~

接下来我们即将进入一个全新的空间,对操作系统(系统层面)等相关知识有一个全新的视角~

以下的内容一定会让你对Linux有一个颠覆性的认识哦!!!

以下内容干货满满,跟上步伐吧~


作者介绍:

作者: 热爱编程不起眼的小人物
作者的Gitee:代码仓库
系列文章&专栏推荐: 《刷题特辑》、 《C语言学习专栏》、《数据结构_初阶》 、《C++轻松学_深度剖析_由0至1》

我和大家一样都是初次踏入这个美妙的“元”宇宙 希望在输出知识的同时,也能与大家共同进步、无限进步
这里为大家推荐一款很好用的刷题网站呀点击跳转


导航小助手

  • 本章重点
  • 一.重定向
    • Ⅰ.输出重定向
    • Ⅱ.输入重定向
      • cat指令
      • 文件的备份
  • 二.Linux操作系统
  • 三.文本指令
    • Ⅰ.more指令
    • Ⅱ.less指令
    • Ⅲ.head指令
    • Ⅳ.tail指令
      • 获取某行内容
    • Ⅴ.管道
    • Ⅵ.date指令
    • Ⅶ.find指令
    • Ⅷ.grep指令
  • 结尾

本章重点

  • 了解输入(输出)重定向的概念&本质

  • 理解Linux操作系统“一切皆文件”的概念

  • 基本认识管道及其操作

  • 了解Linux系统下的文本基本操作指令


一.重定向

重定向:

  • 从字面意思我们便可知:改变原本的执行方向,重新定义方向

  • 而在Linux中,有两种重定向:

    • 输出重定向: 重新指定设备来代替 显示器 作为 新的输出设备

    • 输入重定向: 重新指定设备来代替 键盘 作为 新的输入设备

接下来我们深入了解重定向的知识吧~


Ⅰ.输出重定向

输出重定向:

  • 简单来说:原本直接输出到屏幕上的,而经过 >(输出重定向符号) 后,会直接输出为文本

  • 而输出重定向又分为两种:

    • 1️⃣若原本输出到显示器上的内容,被重定向输出到一个还没被创建的文件的话,就会自动创建此文件

    • 若原本输出到显示器上的内容,被重定向输出到文件中:

      • 2️⃣>:输出重定向,会直接覆盖原文件内的内容进行输出

      • 3️⃣>>:追加重定向,会在原本文件的内容结尾处,追加重定向后的内容

1️⃣创建没有的文件:

2️⃣输出重定向(覆盖式)

3️⃣追加重定向:

以上就是重定向搭配echo指令可以完成的相关操作啦~


Ⅱ.输入重定向

输入重定向:

  • <:输入重定向符号

  • 简单来说:本应该是从键盘中读取的内容,变成从文件中读取

➡️在详细介绍输入重定向前,我们先介绍一个指令:cat


cat指令

1️⃣基本语法: cat ➕ [选项] ➕ [文件]

2️⃣指令功能: 查看文件的内容

3️⃣简单来说: 先读取文件中的内容,再对此打印出来

❗当我们只单独输入cat命令时,就会出现如下场景:

  • 我们输入什么,就会打印什么

  • 这是因为:cat命令会先读取 标准输入设备(键盘) 的输入,然后再打印到控制台


我们在了解cat指令原理后,继续深入输入重定向吧~

❓如上可以发现,以上指令输出的内容与cat file.txt指令输出内容一致,这是为什么呢

这是因为:

  • 执行结果虽然相同,但cat file.txt还是以键盘为输入设备,只是它会类似于执行c语言中的fopen先打开文件,然后调用fread读取文件内容,最后才打印出来

  • cat < file.txt是经过重定向后,用文件代替键盘作为输入设备,即以指定的文件作为输入设备,并将文件中的内容读取并显示到控制台

  • 简单来说:就是cat指令原本是指向键盘缓冲区的指针【这也是为什么说cat是以键盘为输入设备】,而经过重定向后,相当于指针就直接指向的是文件内容,从而直接读取

总结: 输入重定向,我们可以理解为改变了底层指针的指向,所以获取内容的方式被改变了


文件的备份

➡️通过学习了如上的输入/输出重定向,我们便可以借此操作去执行文件备份的操作

  • cat [新文件]

  • 即将我们想要执行备份的文件,先执行输入重定向,让cat指令获取到文件的内容

  • cat指令获取内容后,原本是直接输出到屏幕上的,经过输出重定向后,将内容都拷贝到一个新建的文件中

示例:


二.Linux操作系统

Linux操作系统:

  • 在Linux中,有一个概念:Linux下一切皆文件

  • 即在经过一层软件封装的管理下,Linux操作系统可以像操作文件一样去操作任何东西

  • 即在Linux系统下看来:输入设备(键盘、磁盘……)、输出设备(显示器、磁盘……)、普通文件都是可以像文件一切去操纵,这是为什么呢?

➡️我们就深入了解一下吧:

  • 前提:Linux是采用C语言和少量汇编进行编写的

  • 首先,对于文件,都是具备读方法写方法的,即对于输入设备输出设备也当然具备上述的两种方法,只不过输入设备的写方法和输出设备的读方法是没有具体实现的【即相当于直接return NULL

  • 它们具体的读写方法实现是不一样的,Linux又是如何将它们统一看作文件的呢?

  • 这是因为Linux操作系统并不是直接操作它们【即它们底层的实现方法】,而是操作经过一层软件封装管理过后的它们

  • 经过这层封装后,在Linux操作系统看来,即使是不同的硬件,也被封装成文件一样,所以操作系统就可以直接像操作文件一样,从而可以利用函数指针去指向不同文件(硬件)下的的具体实现方法,达到功能的实现

总结:

  • 这也就是为什么说:Linux下一切皆文件

  • 正是通过操作系统,屏蔽了底层的差异,达到统一管理的效果【即同一个上层的结构体,去看待不同的底层实现方法】


三.文本指令

文本阅读的指令:

  • 在面对长文本阅读情景的时候,如果我们直接利用cat指令去获取内容,就会出现如下的刷屏现象:

  • 那我们如何在如上的情景中,获取我们真正想阅读的内容呢?

以上就需要利用到如下我们将要介绍的指令啦~


Ⅰ.more指令

1️⃣基本语法: more ➕ [选项] ➕ [文件]

2️⃣指令功能: more命令,功能类似 cat

3️⃣ 简单来说: 就是跟cat指令一样去打印文本内容,只不过它不像cat指令一次性将文件中的内容全部打印出来,而是先打印到满屏为止,只有按下Enter才会继续往后打印

4️⃣ 常用选项:

  • -数字more会根据我们加的选项数目去一次性展示若干行,即可以控制每一次打印的行数

  • q:在执行more指令的时候,如果想退出交互模式,直接按q即可退出

特别注意:

  • more指令只支持下翻(即继续向下打印),但不支持上下往回查看

Ⅱ.less指令

1️⃣基本语法: less ➕ [选项] ➕ [文件]

2️⃣指令功能: less与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前不会加载整个文件

3️⃣ 简单来说: 也是先把屏幕页面打印满,但相较于more,less指令支持 [pageup][pagedown] 等按键的功能来往前往后翻看文件

4️⃣常用功能:

  • -N:打印时显示每行的行号

  • / + 要查询的关键字:在交互模式下,输入此命令,即可查询并跳转到文本内容从前到后第一个符合要查询的关键字的内容处

    • 在此基础上,如果继续输入n:就会重复前一个搜索


特别注意:

  • less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大

  • less 的用法比起 more 更加的有弹性,所以在查看长文本内容时,推荐使用less指令


Ⅲ.head指令

1️⃣基本语法: head ➕ [选项] ➕ [文件]

2️⃣指令功能: head 用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行

3️⃣常用选项:

  • -数字:即可更改为一次性打印数字行,而非10行

Ⅳ.tail指令

1️⃣基本语法: tail ➕ [选项] ➕ [文件]

2️⃣指令功能: 用于显示指定文件末尾内容,默认打印10行

3️⃣常用选项:

  • -数字:即可更改为一次性打印数字行,而非10行

获取某行内容

实际应用:

  • 在学习了如上的文本行相关操作,我们就来实际应用一下吧~

  • 如果我们想获取文件中某行的内容的话,我们该如何操作呢?

➡️如果我们想获取第5000~5010行间的内容:

  • 方法一:

    1️⃣先利用head指令找到我们想要获取的文件的整个范围

    2️⃣将第一步获取的内容进行重定向保存起来

    3️⃣对保存起来的内容再进行tail指令往回搜查,确定获取的是我们想要的范围内的内容


    ❗当方法一有一个缺陷:在我们想要获取的文件内容范围超级大的情况下,即浪费时间,也浪费空间

  • 方法二: 利用|(管道)

    1️⃣即我们可以将方法一的两行操作指令合为一步:head -1011 file | tail -11 > tmp

    【简单来说:|(管道)就是将前面指令操作得出的数据本来应该是输出到屏幕上的,被转换为塞进了管道里,进而数据通过管道传给了后面的指令,从而后面的指令再在传输过来的数据的基础上进行进一步操作】

让我们进一步深入了解管道吧~


Ⅴ.管道

管道:

  • 因为在Linux下一切皆文件,所以管道也称作管道文件

  • 但此文件并非是存储在磁盘上的文件,而是内存级文件

  • 这也就是为什么说利用管道,可以有效减少空间和时间上的消耗

  • 因为避免了数据从内存向磁盘中写入,而是数据先暂时存储在内存中,使得访问的效率更快

综上:

  • 管道的作用:用来传输资源的

  • 即可以达到链接多条命令,进行批量化、流水化处理的效果


Ⅵ.date指令

1️⃣基本语法: date ➕ [+标记列表]

2️⃣指令功能: 打印显示格式的标记【在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记】

3️⃣ 标记列表:

标记效果
%H小时
%M分钟
%S
%X相当于 %H:%M:%S
%d
%m月份
%Y完整年份
%F相当于 %Y-%m-%d

4️⃣示例:

  • 第一种写法:

  • 第二中写法:

补充:

  • 时间戳:date +%s

  • 时间戳:该数据是单调递增的,所以具有唯一性


Ⅶ.find指令

1️⃣基本语法: find ➕[路径] ➕ [选项]

2️⃣指令功能: 在目录结构下从我们输入的路径开始查找某个文件,并执行指定的操作

3️⃣ 常用选项:

  • -name:使得find指令按照文件名查找文件

  • 意思是:从当前用户的根目录下,搜寻名字为file的文件并打印此文件的路径


Ⅷ.grep指令

1️⃣基本语法: grep ➕ [选项] ➕[搜寻字符串] ➕ [文件]

2️⃣指令功能: 在文件中搜索带有要搜寻的字符串关键字的内容,将找到的行打印出来

3️⃣ 简单来说: 一个可以进行文本按行搜索的工具

4️⃣常用选项:

  • -n:在把带有要搜寻的关键字眼的文本行输出时,进行带有行号的输出

  • -v:反向选择,亦即输出出不带关键字眼的文本行

  • -i:忽略大小写的不同,即将大小写视为相同,会连带搜寻

    • 因为本身对于grep指令来说提取关键字时,对于关键字的大小写是敏感的,即它会严格按照大小写去搜寻

    • 而如果加上此选项,就会忽略英文的大小写进行搜寻


结尾

综上,我们基本了解了Linux中的 “重定向&操作系统&管道&文本指令” 的知识啦~

恭喜你的内功又双叒叕得到了提高!!!

感谢你们的阅读

后续还会继续更新,欢迎持续关注哟~

如果有错误❌,欢迎指正呀

✨如果觉得收获满满,可以点点赞支持一下哟~✨