2024年最新Linux 第一篇——常见指令汇总【超全、超详细讲解】

ls -l 列出文件的详细信息


* 好,给大家拓展了一些文件的知识,接下来要解答的疑问是这个【ls -l】,不是说指令就一个连续的英文吗,为什么后面还有个【-l】,这个要再给大家说一下,对于前面的【ls】,确实是一个命令,但是对于后面的【-l】不叫做命令,叫做命令选项,对于ls有很多的命令选项,后续在学习的时候都会给大家一一讲到,对于这里的【-l】后面的l大家可以理解为是【list】列表的意思,也就是我们在上面说到过的以列表的形式呈现这个目录中所有的文件
* 对于这个【ls - l】,告诉你个小秘密,其实可以直接简写成【ll】



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/35d9151b2499411d8e5506440573b6c1.jpeg#pic_center)
> 
> 
> 


* 对于Linux,还支持多行输入,这个我们在C语言里应该也碰到过,就是内容没输入完成,在下一行还可以继续输入



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/8c5a2eeabc044a7cae92683a25455f11.jpeg#pic_center)
> 
> 
> 




---



ls -a 列出目录下的所有文件,包括以 . 开头的隐含文件


然后在这个【ls - l】的基础上,再给大家讲一个命令,就是【ls -l -a】,【-a】显示更多的隐藏文件(若一个文件以.开头,就是隐藏文件)



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/039bf6c20412423b979ed5dfefda32b7.jpeg#pic_center)
> 
> 
> 


* 可以看到,除了File.txt,又显示了一些隐藏文件,提前告诉你,这里【.】指的就是当前目录,【…】指的就是上一级目录
* 这里的【ls -l -a】,你也可以像【ll】一样简写成【ls -la】,效果也是一样的,而且对于后面的命令选项,循环是可以颠倒的,我们来看看



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/0c0c9934059b455582491763a5bc63e8.jpeg#pic_center)
> 
> 
> 



ls -d 将目录象文件一样显示,而不是显示其下的文件。如:ls –d 指定目录



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/098f0de1700b4553a1bbeaaffac712d2.jpeg#pic_center)
> 
> 
> 



ls -i 输出文件的 i 节点的索引信息。如 ls –ai 指定文件



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/1af483bb64744e2d8c25ddc12d3ddd97.jpeg#pic_center)
> 
> 
> 



ls -s 在l文件名后输出该文件的大小。(大小排序,如何找到目录下最大的文件)



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/b1b7702b09aa46f48f3fdcde743e7dfb.jpeg#pic_center)
> 
> 
> 



ls -k 以 k 字节的形式表示文件的大小。ls –alk 指定文件



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/fea80af84e9a47778b202020588b6abd.jpeg#pic_center)
> 
> 
> 



ls -n 用数字的 UID,GID 代替名称。(介绍 UID, GID



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/d1dbbe34f0d449299d9dfa56aa9433e7.jpeg#pic_center)
> 
> 
> 



ls -F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通文件;“/”表示目录;“@”表示符号链接;“|”表示FIFOs;“=”表示套接字(sockets)。(目录类型识别)



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/ca5c73d7e8e143258803becdb11c4461.jpeg#pic_center)
> 
> 
> 



ls -r 对目录反向排序



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/f2efc1d7e461407aad2f328885840bbd.jpeg#pic_center)
> 
> 
> 



ls -t 以时间排序



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/d5dfd4173acd4808adf439bb57e53e9a.jpeg#pic_center)
> 
> 
> 



ls -R 列出所有子目录下的文件。(递归)



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/663750b512974bdf82ec384dfb284ac5.jpeg#pic_center)
> 
> 
> 



ls -1 一行只输出一个文件



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/903bc38dc8724699afc8094d51ce1b01.jpeg#pic_center)
> 
> 
> 


* 这个【-d】的功能就是**将目录像文件一样显示**,而不是显示其下的文件


### 六、【cd】指令


好,接下来我们再来讲一个很重要的命令,就是【cd】


* 语法:cd 目录名
* **功能:改变工作目录。将当前工作目录改变到指定的目录下**


首先一开始,我要给你教你两个命令,就是


* 【 cd.】- 当前路径
* 【cd…】- 上一级路径(这里是两个点,不是三个点)


#### 1、Windows和Linux中的路径区分


* 在介绍【cd】这个指令的之前,先给大家讲讲有关Windows和Linux中的路径有什么不同,上面有给大家列出了很多的路径,我们来和Window是中做一个对照,如下图所示
* 可以看到,在**Linux**中,【路径分隔符】使用的是左斜杠,也及时键盘中问号的位置,但是在**Windows**中呢,使用的是右斜杠,也即是键盘中|的位置,这个你有注意到吗?



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/6bfaa7b5109d4bdc87c8b5bc48802644.jpeg#pic_center)
> 
> 
> 


#### 2、Linux中多目录的创建【树形结构】


* 在我们平常使用Windows中,都会在一个文件夹中再创建一个文件夹做分类,【方便进行管理】,那么在Linux中,除了【mkdir】创建一个目录外,还可以创建多个目录吗,答案是:**可以的!**
* 我们来试试。可以看到,这里我继续使用【mkdir】命令创建了两个目录



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/a87d6f88fdc5410ebd2bbfae63c57487.jpeg#pic_center)
> 
> 
> 


* 好,接下来我要很多命令一起执行了,怕你看不懂,所以解释得详细一些😍



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/5caa3888c90b417bbdab4e3ef7c8dbde.jpeg#pic_center)
> 
> 
> 


* 有关这个**tree命令**,大家可能在执行的时候会报出【command not found】,意思就是【未找到命令】,这个的话其实很简单,因为在你的服务器后面没有安装这个命令,所以它是不会有反应的,你只需要以下执行这句命令即可【**yum install -y tree**】,其他的你现在还无需知道




---


* 然后我们再来说说有关Linux下的**目录存储结构**
* Linux系统中,磁盘上的文件和目录被组织成一棵目录树,每个节点都是目录或文件。



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/7d3a83bc88d540d7a7765897d68b71dd.jpeg#pic_center)
> 
> 
> 


#### 3、路径【绝对路径和相对路径】


* 在Windows中,我们为了找到一个文件或者文件夹,通常用什么去定位这个文件呢???【**路径**】!!!,Linux下也是如此的,为什么要用路径呢?因为**路径往往具备唯一性**
* 以上面的这个【lib】文件为例,要找到它,也就是要找到【user】,那要怎么找到【user】呢,没错就是在根目录下去找



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/0e6b496599cd49f5b3491aa9674a6950.jpeg#pic_center)
> 
> 
> 


* 我在【dir1】里创建了一个【dir3】的目录,然后在里面有创建了一个‘【test.c】的文件,接着用【pwd】去查看当然所在目录,可以知晓,这其实就是绝对路径,也就是从根目录开始,定位文件的路径
* **对于绝对路径来说具有唯一性**,为什么这么说呢,从【数据结构】的角度来看,从一个叶子结点一个个往上找它的父亲,一定都是只有一个,因为父亲都是唯一的,所以它的根节点也一定唯一,**因此从根节点开始到这个叶子结点的路径必然唯一**


##### 【cd…】和【ls …】—— 快速定位


* 那什么是相对路径呢?在介绍相对路径前我要教你一个**快速定位路径的方法**,也就是要用到我们上面的【cd…】这个回到上一级目录的操作,而且对于我们可以通过【ls】配合这个【…】**去快速灵活地查看上一目录的其他子目录下还有什么子目录和文件**,我们来操作看看



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/e35eec9b2d32471da8c8fa1e2225e405.jpeg#pic_center)
> 
> 
> 


* 从上面的操作我们可以看出,通过【ls】和【…】的配合,完美地灵活定位其他目录中的子目录和文件,这样就可以通过【ls】查看的方式快速了解到其他子目录中有哪些内容
* 接下来我们通过【cd…】和【ls …】打一个配合,就可以做到**快速传送的功效**



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/a50009ac104d4cd483334bc5a003cb74.jpeg#pic_center)
> 
> 
> 


* 这个【…/…/dir2】其实指的就是相对路径,大家是不是觉得这种路径表示法很方便呢。是的,它是很方便简洁,也不需要一一再去找目录和文件了,但是它有一个缺点,就是【**当前路径可能会发生变化**】
* 此话怎讲呢?我们来看一下下面这个案例。可以看到,我一定是去进行定位的查找,然后cd进去,但是当我将当前的路径做一个变化的时候,就变得紊乱了,因为【cd …/…/】完全就没有内容,所以我们可以得出结论:**相对路径只有在特定条件下才有效**



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/02e513d89df344568a3e624377a76167.jpeg#pic_center)
> 
> 
> 




---


看完了上面这些案例,接下去我们对绝对路径和相对路径做一个总结吧⛄️


* **绝对路径**:麻烦,一般是在某些配置文件中,对某种文件进行配置的时候采用
* **相对路径**:用起来简单,后续指令操作的时候,常用的路径定位方案!



> 
> 说得通俗易懂一些就比如你叫张三,坐在教室的第三排第三列,你现在找你的同桌,他坐在第三排第四列,这个就很明确,绝对是可以找到的,指的就是【绝对路径】;然后另一种方式就是你的同桌他不就在你的隔壁嘛,也就类似于cd…的意思,那也就是【相对路径】
> 
> 
> 


#### 4、【cd ~】与【cd -】


* 接下再介绍两个有关【cd】的命令,首先介绍【cd ~】,它可以直接进入当前用户(whoami)的**家目录**
* 我现在使用的是【root】超级用户,无论在哪个目录下执行都会直接跳转到【root】用户的目录下,也就是你的家目录。当你使用自己创建的用户时,执行这个命令就会跳转到你的用户目录下。我们来看一下【root】账户的



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/17fed3f7d9274b2cbb0b9cf28a71a505.jpeg#pic_center)
> 
> 
> 


* 可以看到,**无论我在那个路径下,都可以直接跳转到当前用户的路径下**
* 在Linux里有这个当前用户,那么我们平常使用的Windws有没有呢,答案是:有的。我们来看看



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/b9bcd34e2ae04c4494963b0867c84a63.jpeg#pic_center)
> 
> 
> 




---


* 好,接下来我们再来玩一个。就是这个【cd -】,这个命令可以**回到最近上一次所处的目录**,我们来看一下



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/877c2a91b97e44bf810dc6964b2d97d7.jpeg#pic_center)
> 
> 
> 




---


### 知识补充


#### ⭐编写代码的记事本文件:nano


* 在C语言中,我们有VS2019、DevC++这样的软件可供我们编写代码,但是Linux里可以写代码吗,答案是:可以的
* 很多安装好的云服务器都是自带【nano】的,我们只需要执行【nano test.c】这个命令就可以进去了



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/b451d64d19964944a281b12956da43e5.jpeg#pic_center)
> 
> 
> 


* 接着就进入nano所创建的test.c这个文件中,可以开始编辑代码了



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/dba0e4acec914b1c91853aa873b9d4b5.jpeg#pic_center)
> 
> 
> 


* 一下就是对这个代码文件的一系列操作



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/74d6cbfd72404854829a5c3111724b34.jpeg#pic_center)
> 
> 
> 


### 七、【stat】指令


* **功能:查看文件所有的属性**



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/a67b991aa04e4457adbd3f2034b273ad.jpeg#pic_center)
> 
> 
> 


* 我们现在主要关注的一点就是这个【ACM时间】,看下面。所以简称ACM时间,不要多想,不是那个【ACM】  
 **Access:最后的访问时间  
 Modify:文件内容最后修改的时间  
 Change:文件属性最后修改的时间**
* 这指令大家了解一下即可,后面我们讲到再做说明


### 七、【rmdir && rm】指令


* 好,接下去再来说一个指令,我们上面说到【mkdir】可以创建一个目录,【touch】可以创建一个文件,但是创建完之后要是我不想要了想将其删除怎么办呢?于是我们就可以使用到这两条命令
* 首先我们来说说【rmdir】,它的作用是**删除一个空目录**。从下图可以看到,若是你要删除的目录里面有内容的话,是删不了的,会报出`[Directory not empty]`这个错误



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/057b19d1d7ea414c88b2f19b9fe7fe74.jpeg#pic_center)
> 
> 
> 


* 那有同学就问,那删不了怎么办呀?那不是就。。。
* 别怕,这不是还有一条指令嘛,【rm】就可以做到。以下是它的常用命令选项



> 
> **-f 即使文件属性为只读(即写保护),亦直接删除(强制删除)  
>  -i 删除前逐一询问确认  
>  -r 删除目录及其下所有文件(递归式删除)**
> 
> 
> 



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/c86a04d7cda84145831df426d45e045f.jpeg#pic_center)
> 
> 
> 


* 还有一个的话就是这个【-f】,f值得就是【force】暴力的意思,也就是进行一个强制删除,你可以创建一个只读文件,然后就会发现用-r是删除不了的,要使用【-f】才可以进行一个删除。
* 然后下面我通过一个普通用户的账号进行操作,在我当前账户创建一个root超级账户的写保护文件,然后当我去对【rm】删除这个文件时,系统就会给出提示,询问我是否要继续删除,因为这个相当于是root账户的;但若是我们用上面这种【-f】的暴力删除操作,系统就不会给出提示去询问,**直接会进行一个删除**



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/6a45f3d1104049da8116fd521bd5b8d9.png#pic_center)
> 
> 
> 


* 当然【-r】和【-f】还可以写在一起,表示暴力递归式地删除一个目录,这里我就不展示了,大家下去可以自己试试看




---


### 八、【man】命令


* **功能:通过查看联机手册获取帮助**
* 讲到现在,很多同学可能会有些疲倦,觉得这个Linux中的命令怎么会有这么多的参数(命令选项),记不住该怎么办呢?于是这个时候就有一种办法可以让你不需要记这些东西,只需要记住一个命令,那就是这个【man】,然后就可以通过这个【man】命令去查找一些联机手册,在这些联机手册中呢,你就可以找到你想要的一些命令的参数
* 接下来我们在Xshell中试试



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/31e97d54dfe84310b72035590b8938dd.jpeg#pic_center)
> 
> 
> 


* 比如说我要再这里查找一个C语言的【printf】有关的参数,就可以直接【man printf】。可以看到,我们这里是查找到了一些相关的信息。如果是要退出和这个手册界面的话按【q】就可以了,腾讯云上是这样,但是其他云服务器上怎样我就不知道了



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/cb56b5fa5ee1464ebdae7aaeea066e25.jpeg#pic_center)
> 
> 
> 


* 可以看到,还有一些其他的内容也是可以查询的



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/875056237b4b4f9292764ef11c960a97.jpeg#pic_center)
> 
> 
> 


* 那其实正规来说我们应该这么写【man 1 printf】和【man 2 fork】。因为这个指令手册一共是分为八章,每一章呢都有其相对应的接口章节,比如说我们的printf,它其实就是一个普通的命令,是属于第一章的
* 既然说到了这个命令,就顺便展示一下👇



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/c6f7a03431844c5fb51634c0f38a8013.jpeg#pic_center)
> 
> 
> 


* 然后下面就是刚才所说的man这个指令手册的八章,每一章都有其对应的整体内容总括说明



> 
> 1 是**普通的命令**  
>  2 是**系统调用**,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文  
>  件)  
>  3 是**库函数**,如printf,fread4是特殊文件,也就是/dev下的各种设备文件  
>  5 是指**文件的格式**,比如passwd, 就会说明这个文件中各个字段的含义  
>  6 是给**游戏**留的,由各个游戏自己定义  
>  7 是附件还有一些**变量**,比如向environ这种全局变量在这里就有说明  
>  8 是\*\*系统管理用的命令,\*\*这些命令只能由root使用,如ifconfig
> 
> 
> 


* 那有同学说,这不是又要我去记很多内容了,还是记不住怎么办呢,那这个设计者也是有考虑到,如果你连和这个【man】的命令参数都不是很确定的话,其实也是可以查的,就是通过【man man】这条指令,我们一起来看看
* 然后就可以看到,通过里面的这个指令手册指南,就可以知道哪个章节所对应哪个内容了,如果看不懂英语的小伙伴可以使用【翻译软件】哦~



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/495fdbc4f29d4b378be5a04b4aee7022.jpeg#pic_center)
> 
> 
> 


* 于是我们就可以这么去使用👇



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/ade0d7dd98254613b4a8687a928acc33.jpeg#pic_center)
> 
> 
> 


* 但是我们有的时候在查询一些接口的时候,可能会这个man手册,因为我们使用的是【云服务器】,它是一个生产环境,即一个真实的线上环境,所以云服务器上的环境内容一般是非常精简的,无法做到像正常的Linux系统那样拥有很丰富的内容,所以我们这时可以考虑自己去进行一个安装,将一些没有的手册内容安装进我们的云服务器,指令大概是下面这样



> 
> 【**yum install -y man-pages**】—— 超级用户root
> 
> 
> 



> 
> 【**sudo yum install -y man-pages**】—— 普通用户user
> 
> 
> 



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/abdfa642bb82494f85e78a056f9f97cd.jpeg#pic_center)
> 
> 
> 




---


接下去我讲讲对【文件本身】的一些操作,分别有**拷贝(复制)、移动(剪切)、重命名**


### 九、【cp】指令


**功能: 复制文件或目录(默认只能拷贝文件)**


* 在Windows中,对于一个文件的复制我们可以使用【ctrl + c】和【ctrl + v】,或者是右键单击进行复制和粘贴,但是在Linux下,可以使用【copy】和【paste】进行命令的拷贝和粘贴,但是不可以对文件进行操作
* 对文件进行操作的话要使用到【cp】指令。以下是它的语法格式


**cp (源文件/源目录) (目标文件/目标目录)**


* 我们到Xshell中来看看。这里的【…】指的是上一级目录,我们在上面有讲到过



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/bad35fcc816e431287b7c363e89eba70.jpeg#pic_center)
> 
> 
> 


* 那我们想拷目录怎么办呢?这个【-r】的话尽量是直接更加命令的后面,不要放在最后面,虽然也是允许的,但若是这样写的话在有些操作系统下是过不了的,比如说苹果的mac系统



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/6b4f29440cc34a109c494eaccdff2d3e.jpeg#pic_center)
> 
> 
> 


* 那我现在不想要拷贝完后的这个内容,想把它删掉呢,那我们就可以使用上面的【rm】指令



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/a14447d7792046968eed83d095a05eca.jpeg#pic_center)
> 
> 
> 




---


### 十、【mv】指令


* **功能:可以用来移动文件或者将文件改名**
* **语法:【mv src(文件/目录) dst(一定是一个目录)】**


#### 1、移动文件或目录


* 好,看完基本的功能和语法后,我们来实体演示一下



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/72d5586e10b044589b466e2cc3a66490.jpeg#pic_center)
> 
> 
> 


* 那移过去了之后我又想移回来呢?



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/4ef31af285ff4d1190cd02e1c6c9c320.jpeg#pic_center)
> 
> 
> 


* 好,我现在要移动一个目录,我们一起来看看



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/2bab9c88970544c0b95815d7a9ff1227.jpeg#pic_center)
> 
> 
> 


* 接下去还是一样,把它给移回来



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/281575a099954491aca34fa719c6ee80.jpeg#pic_center)
> 
> 
> 


* 可以看出,对于文件的这个拷贝和移动的操作,是非常灵活多变的,**这个一定要多练习,做到熟能生巧**


#### 2、重命名


* 好,接下去我们再来讲一个操作,既然对文件可以进行拷贝和移动,那么可不可对一个文件进行重命名呢,答案是:可以的


**语法:【mv src(文件) dst(文件)】**


* 对于重命名的话有三种形式



> 
> ①如果后面跟的只是当前的文件名【dst和src是同一文件类型】,那就只做**重命名**工作
> 
> 
> 



> 
> ②如果dst为一个路径【…上一级路径】,就是纯正的剪切
> 
> 
> 



> 
> ③如果dst为一个【路径 + 文件】,在后面又指定了一个不存在的文件名。就会【重命名 + 剪切】
> 
> 
> 


* 我来做个演示



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/3ab0e072bcea4b549f785df9a8c45e9e.jpeg#pic_center)
> 
> 
> 


* 目录操作的话也是类同,你可以自己去试一试



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/61d453d7134d4eeca797af3feb76aee1.jpeg#pic_center)
> 
> 
> 




---


* 好,以上就是对于一些文件的基本操作,我们来小结一下。通过【man】指令,可以查找对应的手册,就可以查看对应的参数;通过【cp】,可以进行文件的拷贝和复制;通过【mv】,可以进行文件的移动和剪切,而且还可以对文件进行重命名
* 接下去我们继续介绍一些文件相关的操作指令,不过接下来要讲的都是对文件内容进行的操作,而上面的那些指令则是对文件本身进行的一个操作


### 十一、【cat】指令


**功能: 查看目标文件的内容【直接打印全部】**  
 **语法:cat [选项][文件]**


* 接下去来说说【cat】指令,对于这个指令的话还是比较直观的,简单一些就是后面直接跟一个文件,然后按回车后就可以直接打印出文件里的内容。我来演示一下
* 首先给文件写点内容进去



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/864573a7859949b8829a8462cf4c0550.jpeg#pic_center)
> 
> 
> 


* 可以看到,很直观,就打印出来了



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/20bd96c292e7443bb560bab9573ee50a.jpeg#pic_center)
> 
> 
> 


* 但是这样的话太简单了,我需要你做一些拓展知识📖


#### 拓展


* 首先,对于【cat】,它不仅是可以显示文本的内容,若是你输入【cat】这个命令,那么之后内容就可以由你来输入,你输什么显示屏就给你打印什么



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/4f5ff162cea54be68485eecf7ec54212.jpeg#pic_center)
> 
> 
> 


##### echo命令


* 既然说到了这个输入输出,以及显示,就又可以涉及到一个命令:叫做【echo】,这个你使用man也是可以查找到的。用来在显示器上现实一段字符串



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/24d02febf3844affb0fcda46aa2e9703.jpeg#pic_center)
> 
> 
> 


* 也是非常简单,就像这样



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/6faf0daea6654a0fac2471dabe786017.jpeg#pic_center)
> 
> 
> 


* 然后下面讲一些和echo相关的操作


##### 输出重定向【覆盖重定向】


* 首先就是输出重定向,就是我可以将一段字符串本文内容写到一个已有的文件中去。**但是这并没有展现重定向的本质**



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/3d4ae6e948a548a0be75c1b094f80abf.jpeg#pic_center)
> 
> 
> 


* 下面我再给一个示例。这就是真正的输出重定向



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/24a10cec14a64bd98ae97b7bd6ad80af.jpeg#pic_center)
> 
> 
> 


##### 追加重定向


* 接下来再来介绍一个,叫做【追加重定向】,刚才在讲述【输出重定向】时,我们知道了使用【echo】可以使得一串文本写入一个文件中,如果目标文件**不存在,会自动创建**,把本来应该显示的内容**写到文件中**
* 那我们多写几条试试。可以看到,多写几条也没有,而且**写不一样的内容还会被覆盖**



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/25ff5543d6724b559efab7656d3c7d42.jpeg#pic_center)
> 
> 
> 


* 于是我们就可以使用【追加重定向】对本文的内容进行一个扩充



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/162420c2cb194c41aaf5380d0d8deeb8.jpeg#pic_center)
> 
> 
> 


##### 输入重定向


* 有输出重定向,一定也有输入重定向,我们来看看



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/67391d26a3734d52a4dbbedbc2cb2d47.jpeg#pic_center)
> 
> 
> 


* 下面是它们的区别



> 
> 1、cat < mylog.txt —— 通过**重定向**获得的文件内容
> 
> 
> 



> 
> 2、cat mylog.txt —— 通过**命令行参数**获得的文件内容
> 
> 
> 


* 除了这种,还有一种指令也可以做输入,叫【wc】,下面是它的一些指令操作,了解一些即可~



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/1079514401104a25bdd47180a164ec7d.jpeg#pic_center)
> 
> 
> 


##### 计算机内部文件读写原理


* 既然上面讲到了这么多文件内容的输入和输出,那么接下去我就来说说在计算机内部这个**文件的读写**到底是怎样的,首先你要知道的是,当我们程序中读取内容,从哪里读入的?这个我之前在C语言的时候有讲到过,对于程序,它是从**键盘中读取数据**的,也就是【read】,读取完后再进行一些处理,接着会**写入到显示上**,才会进行一个输出。原理图大概就想下面这样



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/0dce441456214cd68960e0f191485f42.jpeg#pic_center)
> 
> 
> 


* 而我们一开始讲的【输出重定向】呢,就是使用echo “hello bit” > change4.txt,将这个内容显示到显示器上,即写入到显示器文件,因此也可以将显示器看作为是一种“文件”,就和我们C语言的程序获取数据使用【scanf】是一个道理,都是从键盘去进行一个获取。
* 讲了这么多文件相关的内容和知识,其实就是为了让你知道


**—>【Linux下一切皆文件】<—**




---


* 好,谈了这么的补充的内容,也是希望能给到读者更多的了解,能加深对Linux其他内容的掌握,对知识【融会贯通】。接下去我们回去谈谈cat的一些命令选项,一些地方也会使用到



> 
> **-b 对非空输出行编号  
>  -n 对输出的所有行编号  
>  -s 不输出多行空行**
> 
> 
> 


* 到Xshell中来看看吧



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/348bbbc7e294450689058ae8adc52f4e.jpeg#pic_center)
> 
> 
> 




---


* 接下去说几个操作比较简单的指令,分别是【more】、【less】、【head】、【tail】


### 十二、【more】指令


**语法:more [选项][文件]**  
 **功能:more命令,功能类似 cat**


* 在讲【more】之前,我们需要先在一个文件中放入很多的内容。这个指令当做了解,现阶段不多要求



cnt=0; while [ $cnt -le 1000 ]; do echo “hello $cnt”; let cnt++; done > f3.txt


* 然后就可以看到这个文件中写入了1000条内容



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/638eaf32f72441ce8df7884c5aeb31d0.jpeg#pic_center)
> 
> 
> 


* 但是这样拖动观看文件非常不方便,于是我们有专门的指令可以进行观看,就是使用这个【more】


![在这里插入图片描述](https://img-blog.csdnimg.cn/96363ed45ef74ac39cde4be2ee93604f.jpeg#pic_center)


* 但是对于【more】指令,显示到一个屏幕满了就不显示了,而且只能下翻,不能上翻,在下翻的过程中按回车就可以了,想要退出的话按【q】
* 但是这样还是觉得比较麻烦,所以这个命令我们用得比较少一些,功能远没有下一个指令【less】来的强大。所以我们直接来讲讲【less】吧


### 十三、【less】指令


* less 工具也是对文件或其它输出进行**分页显示**的工具,应该说是linux正统查看文件内容的工具,**功能极其强大**。
* less 的用法比起 more 更加的**有弹性**。在 more 的时候,我们并没有办法向前面翻, 只能往后面看
* 但若使用了 less 时,就可以使用 **[pageup][pagedown]** 等按键的功能来往前往后翻看文件,更容易用  
 来查看一个文件的内容!  
 除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜



> 
> 看完这些你是不是很想学学【less】,让我们马上进入吧
> 
> 
> 


* 下面是我是使用上下翻页弄的,大家下去可以自己试试



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/ee54b941f02c4df1a2377ac637e3f122.jpeg#pic_center)
> 
> 
> 


* 除此之外,【less】还可以查找某一个固定的内容,只需要【/ + 搜索的内容】即可



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/1f50110cb89846a4ad25487a25b0bf0d.jpeg#pic_center)
> 
> 
> 


* 然后的话自然是它的一些命令选项



> 
> **-i 忽略搜索时的大小写  
>  -N 显示每行的行号  
>  /字符串:向下搜索“字符串”的功能  
>  ?字符串:向上搜索“字符串”的功能  
>  n:重复前一个搜索(与 / 或 ? 有关)  
>  N:反向重复前一个搜索(与 / 或 ? 有关)  
>  q:quit**
> 
> 
> 


* 稍微演示两个



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/d49694d063604bc4a8dc05695253ae63.jpeg#pic_center)
> 
> 
> 



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/fcd7099e4f554e7c991b706fde5309ed.jpeg#pic_center)
> 
> 
> 


* 怎么样,是不是觉得【less】蛮强大的,下去后可以自己试试看,研究一些相关的




---


* 然后我们再来说说【head】和【tail】这两个,在后续也是用的很频繁,也是很不错的两个指令


### 十四、【head】指令


**功能:显示开头某个数量的文字区块**


* 用法很简单,我们来玩玩



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/8070c2e4e0a84becb7170ff269bb13c3.jpeg#pic_center)
> 
> 
> 


* 还可以显示指定的行数【**-n<行数> 显示的行数**】



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/1fd7f2099ef544cfac5c7f0f3dad44f8.jpeg#pic_center)
> 
> 
> 


### 十五、【tail】指令


**功能:显示结尾某个数量的文字区块**


* 然后再来看看【tail】



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/9f8f993eb1af4fb6a39cd86c3be38a1c.jpeg#pic_center)  
>  ![在这里插入图片描述](https://img-blog.csdnimg.cn/533acc070ade4efca7857ea13434e934.jpeg#pic_center)
> 
> 
> 


### 【管道】知识拓展


* **作用:【级联多条命令,让命令和命令组合完成批量化文本处理的任务】**
* 对于【head】和【tail】我很快就讲完了,这里再给大家拓展一些有关Linux中【管道】的知识,首先来看看下面这条指令



cat f3.txt | wc -l



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/ef81c17718c44de0bbfe866f511a075a.jpeg#pic_center)
> 
> 
> 


* 接着再根据这条指令给大家讲一讲Linux中有关管道的知识:对于下面这条**复合指令**,是由我们上面所学过的指令所构成的,第一条是打印【f3.txt】中的内容;第二条指令本来在后面跟上一个文件名,用于显示这个文件中有多少行数,但是我将它们合并到了一起,中间的【|】作为连接它们的一条管道,你可以将这个管道看做为是一个文件,f3.txt中的内容本来应该直接显示到显示器上的,但是现在其中的内容都放到了一个管道里,然后就使用【wc -l】这条指令去这个管道里取数据进行相应的统计
* 这样去写的话我们就不需要将两条指令分开来了,可以写在一起



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/6d4cb14ffd9846d7b7505ddeda2d9c4c.jpeg#pic_center)
> 
> 
> 


* 一个例子还不够形象,接下去我再通过一个管道相关的指令为你做讲解。先来看一下要实现的功能要求



> 
> 要求:显示f3.txt中500行到520行的内容
> 
> 
> 


* 刚才我教了你使用【head】显示前n行,使用【tail】显示后n行,但是现在要显示中间的内容,这该怎么搞呢?
* 我们首先可以取到前520行,放到一个文件里,接着再取这520行的后20行,这样其实就可以取出这中间的内容了



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/1d4647f6c1054d22a62cbd7d4ed7312d.jpeg#pic_center)
> 
> 
> 


* 但是这样的话就需要再重新创建一个文件,需要输入两行命令,接下来教你一个很奇妙的方法💡
* 也就是利用我们上面所说的管道来执行,基本的实现思想你已经会了,接下去只要将这些命令做一个**级联**就行



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/6680bcfc4e2a4a2a8836022d2fcbb93b.jpeg#pic_center)
> 
> 
> 


* 除此之外,还可以继续添加,这些内容有多少行数。就是加一个【wc -l】



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/fb61215ce4e14bedad740b63e690d7cc.jpeg#pic_center)
> 
> 
> 


### 十六、【date】与时间相关的指令


#### 1、date显示


* 下面是直接使用date这个命令显示出的普通的日期格式



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/8f6e799741064fcfa27bfa8deef45e26.jpeg#pic_center)
> 
> 
> 


* 这样看很明显比较费力,我们对其进行一个格式化👇


#### 2、date格式化时间


* 下面是一个格式化的常用标记



> 
> **%H : 小时(00…23)  
>  %M : 分钟(00…59)  
>  %S : 秒(00…61)  
>  %X : 相当于 %H:%M:%S  
>  %d : 日 (01…31)  
>  %m : 月份 (01…12)  
>  %Y : 完整年份 (0000…9999)  
>  %F : 相当于 %Y-%m-%d**
> 
> 
> 


* 我们使用这些标记来进行一个格式化



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/574e3147bf964a85ab35dc4c14ffef7d.jpeg#pic_center)
> 
> 
> 


#### 3、date设定时间


* 除了显示当前时间,我们还可以自己来设置时间。你可以将这些命令试着打一下



> 
> **date -s //设置当前时间,只有root权限才能设置,其他只能查看。  
>  date -s 20080523 //设置成20080523,这样会把具体时间设置成空00:00:00  
>  date -s 01:01:01 //设置具体时间,不会对日期做更改  
>  date -s “01:01:01 2008-05-23″ //这样可以设置全部时间  
>  date -s “01:01:01 20080523″ //这样可以设置全部时间  
>  date -s “2008-05-23 01:01:01″ //这样可以设置全部时间  
>  date -s “20080523 01:01:01″ //这样可以设置全部时间**
> 
> 
> 


#### 4、时间戳


* 接下去我们来讲一个很重要的东西,叫做【[时间戳](https://bbs.csdn.net/topics/618542503)】,不懂的同学可以先去了解一下。然后我们来看如何将当前的时间转化为时间戳



时间->时间戳:date +%s



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/f7ac651f909d4cb6aebe22e25b505f47.jpeg#pic_center)
> 
> 
> 


* 时间戳:格林威治时间**1970年01月01日00时00分00秒**(北京时间1970年01月01日08时00分00秒)起至现在的总秒数
* 所以对于时间戳来说,是有划时代意义的,而且在一些场合下用的也是比较广泛。然后再来看看如何将一个时间戳再转化回我们现在的时间



date -d@时间戳



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/3241af16e0d84850bafb956a5ec8ac74.jpeg#pic_center)
> 
> 
> 


#### 5、为何需要看时间?


* 题外话:上面讲了看时间的很多方式,那有同学问了,既然现在都有手机、电脑、手表,那为什么还要刻意去通过指令去看时间呢?这个其实就要讲到我们一些日常的工作了,对于系统维护方面的工作,需要进入到一个公司内部封闭的机房,然后在里面进行操作,但是这个机房却是不让带手机进入的,因为管理比较严格,所以你在里面待上几天是看不到时间的,只有Linux的这种命令行可以执行,因此我们需要学会这些


### 十七、【cal】指令


**功能: 用于查看日历等时间信息,如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份**



cal



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/32cdd608c92f466bacc1d438d54599d3.jpeg#pic_center)
> 
> 
> 



cal -3 显示系统前一个月,当前月,下一个月的月历



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/ea659e1958494071a0efb9faa2cac45c.jpeg#pic_center)
> 
> 
> 



cal -j 显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数)



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/e9c8b715266e4c6ba31e5fe7cc56a1c3.jpeg#pic_center)
> 
> 
> 



cal -y 显示当前年份的日历

![](https://img-blog.csdnimg.cn/img_convert/9a8cb5f8c0ec69e6499adead0da6e95b.png)



最全的Linux教程,Linux从入门到精通

======================

1.  **linux从入门到精通(第2版)**

2.  **Linux系统移植**

3.  **Linux驱动开发入门与实战**

4.  **LINUX 系统移植 第2版**

5.  **Linux开源网络全栈详解 从DPDK到OpenFlow**



![华为18级工程师呕心沥血撰写3000页Linux学习笔记教程](https://img-blog.csdnimg.cn/img_convert/59742364bb1338737fe2d315a9e2ec54.png)



第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。



![华为18级工程师呕心沥血撰写3000页Linux学习笔记教程](https://img-blog.csdnimg.cn/img_convert/9d4aefb6a92edea27b825e59aa1f2c54.png)



**本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。**

> 需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/topics/618542503)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值