当前位置: 首页 > news >正文

⌈Linux_ 感受系统美学⌋ 剖释“Linux下一切皆文件” | 底层级操作增进Linux内功

💛 前情提要💛

本章节是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中的 “重定向&操作系统&管道&文本指令” 🍭 的知识啦~

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

感谢你们的阅读😆

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

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

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

在这里插入图片描述

相关文章:

  • 【Java知识点大全】
  • 【华为机试真题 Python实现】矩阵扩散
  • 建立对单片机/嵌入式启动、运行的整体认知
  • 猿创征文 | 什么是PHP,PHP如何创建数据库
  • Kubernetes — StatefulSet 管理与使用
  • 想学习网络安全一定要学习web
  • 【leetcode刷题】数组篇
  • 基于VUE+Echarts大屏数据展示150套 (集合)
  • 【深度学习100例】—— 基于pytorch使用LSTM进行文本情感分析 | 第7例
  • 【基础巩固】详细总结对数组的理解
  • ⌈Linux_ 感受系统美学⌋ 剖释“Linux下一切皆文件” ,底层级操作增进Linux内功
  • 哪些是模糊用语-《软件方法》自测题解析020
  • 【设计模式】-创建型模式-第2章第5讲-【对象池模式】
  • 125款浪漫七夕表白网站源码【建议收藏】HTML+CSS+JavaScript
  • 基于JAVA忻府区饭中有豆粮油销售系统计算机毕业设计源码+系统+数据库+lw文档+部署
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • Django 博客开发教程 16 - 统计文章阅读量
  • HTTP中GET与POST的区别 99%的错误认识
  • JavaScript类型识别
  • markdown编辑器简评
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • use Google search engine
  • Vue UI框架库开发介绍
  • Vue 动态创建 component
  • vue中实现单选
  • 从PHP迁移至Golang - 基础篇
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 区块链分支循环
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 王永庆:技术创新改变教育未来
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 数据可视化之下发图实践
  • # centos7下FFmpeg环境部署记录
  • ###项目技术发展史
  • #includecmath
  • #pragma pack(1)
  • (2022 CVPR) Unbiased Teacher v2
  • (27)4.8 习题课
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (9)目标检测_SSD的原理
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (转)http协议
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .Net Web项目创建比较不错的参考文章
  • .NET 常见的偏门问题
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .NET导入Excel数据
  • .NET轻量级ORM组件Dapper葵花宝典
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • /bin/rm: 参数列表过长"的解决办法
  • @我的前任是个极品 微博分析