文章目录

  • 一、man指令
  • 二、重定向
  • 三、cp指令
  • 四、mv指令
  • 五、cat指令
  • 六、more指令
  • 七、less指令
  • 八、head指令
  • 九、tail指令
  • 十、管道

一、man指令     

           1.Linux指令是非常多的,我们不太可能把每一条指令的作用都记住,那么如果此时我们

           忘记了某一条指令的作用,那么就可以使用man指令查找该指令的作用,如果此时我们需要

           完成一个目的,而我们连指令本身都忘记了,那么就只能通过AI大模型去搜所完成该目的需

           要的指令

           2.man的作用:man是一个查询手册,可以查Linux指令的作用/系统调用/C语言库函数...

           3.man的语法格式:man 选项 命令/函数

           4.man手册一共分为9章,如果没有指定,man手册会默认去第一章中进行查找,如果第一

           章没有,那么就去第二章中进行查找...逐渐进行,如果在其中一章找到了,那么就会直接

           显示该章节中对应的内容即使后面有重名(不指定章节man会逐章节进行查找,第一次找

           到就会返回,无论后面是否有重名)

           例如:此时man scanf 没有指定章节,会从第一章中进行查找,发现没有再去第二章中进

           行查找,发现第二章没有,再去第三章进行查找,找到了,那么就直接返回scanf函数内容

           即使后面有同名的scanf也不会进行查找

           此时man a没有指定章节,会从第一章中进行查找,发现没有再去第二章中进行查找,发

           现第二章也没有,再去第三章...结果查找最后也没有就会输出显示找不到a

           5.man手册9章对应的内容

         (1)是普通的命令

         (2)系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数需要

           加什么头文件)

         (3)是库函数,如printf,fread4是特殊文件,也就是/dev下的各种设备文件

         (4)略 

         (5)是指文件的格式,比如passwd,就会说明这个文件中各个字段的含义

         (6)是给游戏留的,由各个游戏自己定义

         (7)是附件还有一些变量,比如像environ这种全局变量在这里就有说明

         (8)是系统管理用的命令,这些命令只能由root使用,如ifconfig

         (9)略

           其实我们只需要使用1 -- 3章的内容,其余的不用管

           6.man的选项

         (1)num:man 数字(1、2、3...9) 命令 表示要在第几章中进行查找

         (2)-a : man -a 命名将所有章节的都显示出来,比如man printf它从第⼀章开始搜索,找

           到就停止,用a选项,当按下q退出,他会继续往后面搜索,直到所有章节都搜索完毕

二、重定向

       1.理论:Linux下一切皆文件,也就是说在Linux操作系统中无论是什么都当作是一个文件来

           进行处理,通过统一的"文件"接口来访问和管理各种资源

           理解:世界上有成千上万种不同的设备(硬盘,键盘,显示器)、通信方式、进程间通信方式

           等。如果每个设备都需要一套独特的、复杂的命令方式来交互,系统会变的无比复杂

           而面对这种情况Linux给出的解决方案是:将所有这些东西都抽象成"文件"

           这意味着,无论要操作的是什么,都可以使用同一套简单、统一的、用于操作普通文件的基

           本命令来与之交互

           其实本质上底层不同的硬件还是不同的操作指令,只是上层将其封装成了文件,对不同类型

           的文件进行操作时,底层就会转换为对应的操作指令然后进行操作硬件

           2.既然Linux下一切皆文件,那么显示器也会被认为是一个文件,我们称作显示器文件,

           键盘也会被认为被认为是一个文件我们称作为键盘文件

           3.向显示器打印 == 向显示器文件进行写入

              从键盘中读取数据 == 从键盘文件中读取数据

           4.输出重定向和追加重定向

              4.1介绍一个指令,echo,

              语法形式 echo 内容 

              作用:将内容打印到屏幕上,也就是将内容输出到屏幕文件中

              echo输出内容后会自动在内容的结尾添加一个换行符

              4.2echo既然是将内容输出写入到屏幕文件上,那么屏幕是文件,我普通文件也是文件

              啊,那么echo也应该可以将内容输出写入到普通文件当中啊

              4.3echo本来是要将内容输出写入到屏幕文件当中的,但是此时我们却想让echo输出写入

              到普通文件中,原本echo的输出方向是屏幕文件,此时我们却想更改它的输出方向更改

              为输出到普通文件中,我们就需要更改echo的输出方向,那么更改输出方向,我们称作

              输出重定向(重新规定输出的文件方向,重新规定输出到哪一个文件当中)

              实现输出重定向的操作规定使用 >

              >输出重定向(无论搭配什么命令),都会先清空原有文件的内容,再写入新的内容

              和是否使用echo无关,这是输出重定向的核心特征

              4.4此时需要将echo进行输出重定向,即将原本输出到屏幕文件的内容输出到普通文件当

              中,语法格式:echo 内容 > 文件名/文件的路径

              提前使用一条指令cat,cat 文件名,读取文件的内容并输出到屏幕

              4.5>输出重定向会先将文件中的内容清除,然后再输出新的内容

              4.6>输出重定向会先将文件中的内容清除,然后输出新的内容,那么如果我们不想让文件

              中的内容被清除,我们就可以使用追加重定向>>,这样就不会将文件中的原本内容清除

              而是在原本内容的基础上写入新的内容

                4.7>输出重定向会先将文件中的内容清除,然后输出新的内容,那么如果我们想要清除

                文件中的内容就可以直接>文件名/文件路径此时就可以将文件中的内容进行清除,然后

                什么也不写入

           5.输入重定向

              5.1Linux下的默认输入源是键盘,也就是从键盘文件中提取输入的内容

              如果此时我们不想从键盘文件中提取输入的内容,想要从其他文件/目录中提取输入

              的内容,就可以使用输入重定向,重新定位获取输入内容的方向(文件)

              5.2输入重定向:将提取输入内容的方向进行转换,将提取输入内容的文件进行转换

              重新定位所需要提取输入内容的方向/文件,规定使用<

              5.3例子:cat后面不跟文件名,默认是从键盘文件中提取数据然后输出到屏幕文件中

              不过输出的内容不会保存到屏幕文件中

              单纯输出到屏幕的内容也就是输入到屏幕文件的内容,不会自动保存,关掉终端就没有

              输完就消失了

              输出到屏幕文件只是临时显示,不是写入文件

              键盘输入的内容不会自动保存

              cat后面不跟文件名然后按回车,就可以从键盘文件中读取数据然后在输出到屏幕中

              后续按回车进行换行,Ctrl+D退出

              此时我们不想让cat从键盘文件中提取输入内容,想让cat从其他文件中提取输入的内容

              就可以使用输入重定向 cat < 文件名/文件路径

              此时cat < 输入重定向和cat 文件名的效果是一致的,但是执行逻辑是不一致的0

              cat 文件名:cat主动识别参数为"文件路径",直接打开并读取该文件内容,输出到屏幕

              特征:命令主动读取指定文件

              cat < 文件名:系统先把"文件名"对应的文件作为cat命令的"标准输入源",再让cat从这

              个输入源读取内容,输出到屏幕上

              特征:系统指定输入源,命令被动读取

三、cp指令

           1.cp作用:用来拷贝目录和普通文件

           2.cp语法:

        (1)cp 被拷贝的文件名/指定文件路径  拷贝形成的新文件名(当前路径)/目标路径+新

          文件名

          如果此时已经有了该目标文件,那么会直接将该目标文件的内容覆盖掉

        (2)由于目录的递归定义的,所以我们在拷贝目录时简单的使用cp去拷贝是不可以的,必须

          添加-r选项,进行递归的拷贝,才可以拷贝目录

          语法:cp 目录名(当前目录下的子目录名) / 目标路径

          新的目录名(拷贝到当前目录下形成新的目录) / 目标路径(后面跟上新的目录名)    

          目录拷贝时分三种情况:(假设被拷贝的目录称作src,所产生的新的目录称作des)

          cp -r src des:

          a.如果当前路径下没有des目录,那么直接将src整体进行拷贝形成des目录,并且src目录下

          的子目录和文件在des目录中是不变的

          b.如果当前路径下有des目录并且des目录为空,那么就会将dira整体进行拷贝到des中,

          将 dira 目录整体拷贝到 des 目录下,作为 des 的子目录即最终结构为 des/dira/

   (包含 dira 原有的所有内容)

          c.如果当前路径下有dest目录并且des目录不为空,将 src 目录下的所有内容(子目录、文

          件)直接拷贝到 des 目录中,如果src的子目录和des的子目录同名,那么会对两个目录

          进行合并,如果src的文件和des的文件同名,那么则会使用src的文件内容去覆盖des的

          文件内容

四、mv指令

           1.mv指令作用:修改文件名或者时移动文件/目录到指定路径下(剪切)

           2.语法:

         (1):修改文件/目录名

           mv src文件名(...路径下) des文件名(...路径下没有des) -- 将文件名从src改为des(相同路径)

           mv src目录名(...路径下) des目录名(...路径下没有des) -- 将目录名从src改为des(相同路径)

           若src是文件(如test.txt),命令为 mv test.txt new_test.txt,效果一致(仅文件名改变)

        (2):移动文件/目录到指定路径下,剪切(仅移动位置,不改变名称)

          mv src文件名(...路径) des目录名(......路径,且该路径下已经有了des目录) --

          将src文件剪切到des目录下(路径是否一致都可以)

          mv src目录名(...路径) des目录名(.....路径,且该路径下已经有了des目录) --

          将src目录剪切到des目录下(路径是否一致都可以)

          若 src 是文件test.txt,命令 mv test.txt docs/ 执行后,docs/ 下会新增 test.txt

   (原文件从当前路径消失)

        (3):剪切+重命名 文件/目录(移动位置 + 改变名称)

          mv src文件名(...路径) des文件名(....路径,且该路径下已经有了des文件) --

          将des文件中的内容进行覆盖成src的内容,再将src删除掉(路径可以不相同)

          mv src文件名(...路径) des文件名(...路径,且该路径下没有des文件) --

          将src剪切到该路径下并且将src文件的名字变为des,(此时路径不相同)

          mv src目录名(...路径) des目录名(...路径,且该路径下没有des目录) --

          将src目录剪切到该路径下并且将src目录名变为des(路径不相同)

          若 src 是文件 test.txt,命令 mv test.txt docs/new_test.txt 执行后,docs/ 下会新

          增 new_test.txt(原文件消失,位置 + 名称均改变)

          3.总结

          mv看des「是否存在」+「是否为目录」:不存在则重命名(含跨路径剪切),

                                                                            存在且是目录则剪切,存在且是文件则覆盖

          当dest不存在时:将源文件 / 目录重命名为dest(dest包含不同路径,则相当于跨路径切)

          当dest存在且是目录时:将源文件 / 目录剪切到该目录下(保持源名称)

          当dest存在且是文件时:直接覆盖目标文件(无需确认,默认覆盖)        

五、cat指令

           1.cat功能:查看目标文件内容

           2.语法:cat 选项 文件名          

           3.选项:

         (1)-b对非空行输出行编号,空行不做编号 

         (2)-n对输出的所有行编号

         (3)-s不输出多行空行

六、more指令

           1.cat可以帮我们将文件中的内容打印到屏幕上,但是当文件中的内容很多很多时,cat命令

           就会一直刷屏,直到全部将文件的内容打印到屏幕上才停止,这样就很难让我们观察到文件

           内容,假如说此时文件内容1000行,想要看第400行,那么一直刷屏,刷完之后再一直往

           进行翻阅就很麻烦,所以就有了more指令

           2.more作用:输出文件的内容到屏幕,不过输出满屏幕之后就会停止输出,只有按回车它

           接下来才会继续根据按回车键的次数来继续显示剩余的文件内容

           3.more缺点:只能使用回车键输出文件剩余的内容,想回头查看之前的无法做到

           所以在实践中基本不使用该指令,接下来的less就可以很好解决这个问题

           4.选项:

            -n指定输出的行数,从第一行开始算,一共输出多少行

            q进行退出

七、less指令

          1.less作用:输出文件内容到屏幕,不过输满屏幕之后会停止输出,可以按回车来继续显示

          剩下的文件内容,也支持使用上下键来上翻、下翻文件内容

          2.less语法:less 选项 文件名

          3.选项:

          -i 忽略搜索时的大小写

          -N显示每行的行号

          /字符串:向下搜索“字符串”的功能

          ?字符串:向上搜索“字符串”的功能

          q:quit

八、head指令

           1.在查看文件内容时,我们很多时候不需要查看文件的内容只需要查看前多少行的内容

           但是less是查看全部内容,这个行为太重了,所以就可以使用head指令,查看文件前n

           行的内容

           2.head语法:head 选项 文件路径

           3.head作用:head用来显示档案的开头至标准输出中,默认head命令打印其相应文件的

           开头10行

           4.head选项:-n行数 显示的行数

九、tail指令

           1.在查看文件内容时,我们很多时候可能需要查看文件的末尾,那么已经有了head去查看

           文件的开头,那么与之对应的有tail来查看文件的末尾

           2.tail语法:tail 选项 文件路径

           3.tail作用:用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理,常用查

           看日志文件,指定文件时不输入行号默认之查看最后10行

           4.tail命令从指定点开始将文件写到标准输出使用tail命令的-f选项可以方便的查阅正在改变

           的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不断刷新使看

           到最新的文件内容.

           5.选项:

           -f:循环读取

          -n行数:读取文件末尾一共的行数

十、管道

          1.此时我们拥有了head指令和tail指令可以读取文件的前n行和后n行,但是如果此时我们需

          要读取中间部分怎么办?首先可以想到的是先提取出前n行输出重定向输出到一个文件当中

          然后再使用tail指令读取文件的后n行,此时就做到了读取中间部分

          2.但是上述方式不仅仅写起来是很麻烦的,而且是先将读取到的内容输出到一个文件当中,

          需要进行拷贝到磁盘中,效率低,然后再提取出前n行实现读取中间部分,那么有没有其他

          方式去读取中间部分呢?--- 管道

          3.管道:在生活中我们的管道主要有两个功能(1)连接两个不同的地方(2)传输资源

          Linux中的管道的设计原理也是如此,在Linux中资源就是数据

          将不同的指令连接起来,上一条指令的输出作为下一条指令的输入,这就就可以将指令的

          功能联结起来,像流水线一样,完成我们的目的

          流水线:在工厂中一个产品的生产就是流水线的工作,例如汽车工厂

          车辆流水线:车轮廓 -> 喷漆 -> 组装轮胎 -> 组装车内用具 -> 完整车辆出厂

          此时根据车辆流水线我们就可以发现,是一步一步完成最终的车辆组装的,上一次的输出

          是下一个的输出

          管道也是如此:

          head -2011 hello.txt | tail -10

          |称作管道,此时首先使用head提取出前2011行,然后将head的输出作为tail的输入,然后

          tail再输出最后10行,最终实现我们的目的

          我们大多数情况下,为了实现一个目的,第一步需要做什么然后输出的结果作为第二步的

          输入然后第二步的输出再作为第三步的输入,这里的管道的逻辑也是一模一样的,每一步

          对应一个指令,上一个指令的输出是当前指令的输入,当前指令的输出是下一个指令的输入

          4.管道为什么会提效?

         管道其实就是将上一条指令的输出存储到内存的临时区域,然后下一条指令直接去对应的

         内存中读取数据,内存是比磁盘快很多的,那么向内存中输出数据然后再去内存中读取数据

         是比向磁盘中输出数据和读取数据快很多,就类似于两个人传水,不用先把水倒进杯子中

         (磁盘文件),而是直接用手传递(缓冲区/内存)

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐