Linux基本指令(二)
1.Linux指令是非常多的,我们不太可能把每一条指令的作用都记住,那么如果此时我们忘记了某一条指令的作用,那么就可以使用man指令查找该指令的作用,如果此时我们需要完成一个目的,而我们连指令本身都忘记了,那么就只能通过AI大模型去搜所完成该目的需要的指令2.man的作用:man是一个查询手册,可以查Linux指令的作用/系统调用/C语言库函数...3.man的语法格式:man 选项 命令/函数
文章目录
- 一、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.管道为什么会提效?

管道其实就是将上一条指令的输出存储到内存的临时区域,然后下一条指令直接去对应的
内存中读取数据,内存是比磁盘快很多的,那么向内存中输出数据然后再去内存中读取数据
是比向磁盘中输出数据和读取数据快很多,就类似于两个人传水,不用先把水倒进杯子中
(磁盘文件),而是直接用手传递(缓冲区/内存)
更多推荐



所有评论(0)