【Linux】打破Linux神秘的面纱


个人主页~

在开始学习的时候我们一定会对Linux产生抵触心理,我也是这样的,通过一点一点的学习,到初步会使用阶段,我们就可以打破这种心理,开始逐渐掌握,所以我们这篇文章将在一个宏观的角度上看待Linux,解释Linux,打破它神秘的面纱,同时也会提到学习初期比较重要的概念和内容


打破Linux神秘的面纱

一、从数据结构角度解释Linux结构

1、Linux是一个多叉树结构

我们在学习了 cd . . 指令之后,我们在自己操作的过程中会发现最多退到 / 再向上一级回退就不行了,也就说说 / 是Linux的根部节点

并且我们在安装了tree之后,我们可以通过使用tree . 的 方式来观察整个Linux中目录和文件的关系和结构,这样我们会发现Linux是一个多叉树的结构,当我们在 / 处进行展示树结构时我们会发现文件量特别大,显示在屏幕上超级多(下图为暂停后随意截图)

所以综合以上我们观察到的结果,我们可以判断出Linux的结构就是一个多叉树,其中 / 为所有节点的祖宗节点,其下有home节点,用来存放普通用户的信息(下图为我的root账号下的两个普通用户,其中一个是刚开始不会搞搞错了的用户,有一个错误报告),我们在使用的时候一般使用普通用户来进行操作,因为root权限太大了,有错误不容易被发现,并且在初学的时候容易把东西给搞坏

所以我们对文件和目录进行操作,本质上就是对这颗多叉树进行增删查改

2、绝对路径和相对路径

我们在前面所说的cd指令会用到绝对路径和相对路径,多叉树结构的Linux为cd指令定位绝对路径和相对路径提供了条件,因为在一个多叉树结构的某个节点位置上看来,由它到根节点的路径只有一条那就是绝对路径,相对路径查找也只在父节点的兄弟节点中,非常的高效和准确

二、如何看待Linux指令

1、指令可以被看做可执行程序

依照我们现在所掌握的知识来看,Linux当中的文件可以被分为两类,一类是目录,一类是非目录文件,非目录文件又可以分为可执行程序和其他类似于txt文件或c文件这样的文件,我们可以看到,可执行程序是可被执行的,指令也是可被执行的,它们之间有什么关系呢?其实绝大部分的指令都可以被看做是可执行程序,跟我们自己写的没有任何区别

2、指令被存放在一个地方

指令被存放在usr/bin/ 中,我特意找了ls的位置,当然我们可以看到所有的指令都在这里,在Linux中,看到最前面的这个-rwxr-xr-x这一列,以-开头的都是可执行程序,所以我们说指令是可执行程序

3、我们自己可以写指令

看到这里我们会有一些想法,如果我们把自己写的可执行程序放到这个目录下,那么它不也成指令了吗~其实事实确实是这样的,我们可以把自己写的可执行程序设置为指令,当然这个是需要root权限才可以移动到指令目录下的,使用普通账户就会像下图一样没有权限

我们用nano写了一个C语言文件,这里的nano的作用就是写文件,以后会详细介绍

通过gcc编译一下就会出现可执行文件a.out

我们来执行一下这个文件可以看到我们的程序是没有错误的,打印出了hello world

我们把a.out移动到bin中然后直接输入a.out,该可执行程序就可以作为一个指令的形式来执行了

这个给过程也叫做安装,再将这个可执行程序从bin中移除就叫做卸载,跟我们使用的电脑上的卸载安装本质上是一样的

三、Linux下的一切都是文件

对于Linux来说,包括电脑屏幕以及键盘输入都被看做是文件,这是一个抽象的概念,我有一个好的理解方法,对于电脑屏幕来说,它一般是用来显示,假如我是一个高超的电脑玩家,我对电脑的一切都很熟悉,甚至可以不看显示器来使用Linux显示一串字符,那我关闭屏幕然后输入

echo "hello world"

此时信息是没有打印到屏幕上的,那它在哪,答案就是在一个目录中,当我打开屏幕,屏幕解码该信息然后打印到屏幕上,当然这只是个便于理解的例子,其内部有许多可待考究的细节,但这对于电脑屏幕也是一个文件来说就可见一斑了

对于电脑屏幕这个文件来说,它只可以写,不可以读

对于键盘这个文件来说,他只可以读,不可以写

对于普通文件来说,即可读又可写

虽然电脑屏幕、键盘与普通文件有很大的差别,但他们都是通过同样的读写方式来进行交互的,所以它们在本质上是相同的,所以Linux下的所有的一切都可以被抽象为文件这个概念

四、Linux与用户的交互

1、交互的结构

Linux操作系统的内核非常复杂,所以我们不能直接去跟内核进行交互,用户通过命令行解释器与操作系统进行交互,命令行解释器起到一个桥梁的作用,我们之前学过C语言,在进行C编程的时候,我们会选择一个编译器,可能是vscode、vs这种新的、不断更新的编译器以及vc6.0这种老的,可能一辈子只能在学校里见的老的编译器,不管是哪一种,编译器的工作就是将C代码转化为机器可以读懂的汇编代码,这个过程中,编译器起到的就是命令行解释器的作用--桥梁

2、结构存在的意义

像我们刚才举的例子,我们在学习C语言的时候多多少少会查看一些汇编代码,这些代码是非常复杂的,如果是我们来学习的话,成本会非常大,编译器的存在就是将汇编代码组合成特定的功能,然后用一个C字符来代替,降低我们学习和使用的成本,命令行解释器 也是这个道理,它存在的意义是对命令行进行解释 ,因为Linux内核的复杂可能更甚于汇编代码,所以,它的作用是将使用者的命令翻译给核心进行处理,同时将核心的处理结果翻译给使用者

对于用户的非法请求,它可以进行直接拦截,用于保护操作系统,操作系统中的文件如果被人为随意更改一处,可能会导致整个操作系统的瘫痪,所以命令行解释器的另一个作用就是保护操作系统,防止用户非法操作

3、总结

我们所使用的shell就是命令行解释器,我们经常举Windows和Linux的例子来比较,就是因为Windows我们接触的更多,更容易我们理解,我们操作Windows打开一个文件或者打开某个游戏,不是直接操作Windows内核,而是通过操作图形化界面的接口从而达到我们打开文件或打开游戏的目的,而Linux没有图形化界面,shell对于Linux就起到图形化界面接口对于Windows的作用,解析我们的指令,反馈结果再通过它返还给用户

五、重定向

1、输出重定向

(1)覆盖重定向 >

上面的echo "hello world"默认是打印在屏幕上的,这时我们可以通过输出重定向来将该信息打印到文件中,如下图所示,test是个空文本文件,在我们使用输出重定向将文本打印到文件后,我们再使用cat打印文件内容发现该文件已有内容,这就是输出重定向

同时,使用 > 进行重定向的时候,我们通常认为它会进行两步,第一步为清除该文件中所有数据,第二步为打印信息,所以 > 进行重定向是覆盖重定向

(2)追加重定向 >>

追加重定向顾名思义跟上面那位肯定是不一样了,使用它会将信息打印在上一次打印的下一行

2、输入重定向 <

cat原本可以打印我们输入的内容

从上面我们可以总结出来,数据从边端流向尖端 ,也就是从大于号的左边流到右边,所以也从小于号的右边流到左边,我们可以也就是从文件流到cat,代替了键盘流到cat,虽然cat能直接读,但是我们是为了学习这个符号,所以不必感到鸡肋,它的主要用处也不是在这

六、管道

管道的作用就是在左边的工作做完之后的这个结果我先不操作,然后给到管道右边进行右边的工作,等右边的工作做完了再继续操作

这里就是取出text文件前50行然后交给右边的取出文件后30行,这里就可以看到前50行的后30行21-50行

| 符号被称为管道符号,文件在它左边的指令效果结束后生成的文件叫做管道文件,管道文件实际上是不存在的,不会像备份一样实际的存储在内存当中,而是继续等待管道后面的指令处理,处理完成后该文件也就不复存在

管道是可以存在多个的,比如:a | b | c | d,效果同上,我们可以认为一个文件在经过abcd四个指令后产生的结果就是这个总指令的结果


今日分享就到这里了~

相关推荐
正小安22 分钟前
汇编语言:基于x86处理器考前笔记 | 第七章 整数运算
笔记
小华同学ai36 分钟前
Rnote:Star 8.6k,github上的宝藏项目,手绘与手写画图笔记,用它画图做笔记超丝滑,值得尝试!
笔记·github
fanged43 分钟前
LDD3学习7--硬件接口I/O端口(以short为例)
linux
学而知不足~43 分钟前
Linux测试处理fps为30、1920*1080、一分钟的视频性能
linux·音视频
宋小米的csdn1 小时前
Docker基本操作命令
运维·docker·容器
难以怀瑾1 小时前
测试工程师的linux 命令学习(持续更新中)
linux·运维·服务器
dal118网工任子仪1 小时前
58,【8】BUUCTF [PwnThyBytes 2019]Baby_SQL1
数据库·笔记·sql·学习·mysql
m0_748252601 小时前
【万字详细教程】Linux to go——装在移动硬盘里的Linux系统(Ubuntu22.04)制作流程;一口气解决系统安装引导文件迁移显卡驱动安装等问题
linux·运维·golang
兮动人2 小时前
Linux 下配置 Golang 环境
linux·运维·golang
青椒大仙KI112 小时前
25/1/17 嵌入式笔记 STM32F103
笔记