Linux第一讲:Linux基本指令 Linux第一讲:Linux基本指令
Linux第一讲:Linux基本指令
1.Linux发展历史
Linux是一个操作系统,是一个开源的项目,对于它的发展历史我们看另一位大佬的博客,但是只需要看目录前两个内容即可:
链接: Linux发展历史
2.先快速了解一些指令
我们要先了解一些指令,然后我会再详细一一解析一个一个的指令:
下面我们详细来学习一下指令
3.指令 – ls
在详细学习指令的过程中,会出现一个一个的知识点,这些知识点是更加重要的,因为指令在我们一遍一遍地操作之后,会慢慢变得简单,而知识点的理解才是重点
3.1知识点1 – 文件属性
文件是在磁盘上进行存储的,但是如果我们创建了一个文件,但是并不在这个文件中写任何内容,那么这个文件是否还需要占用空间呢?肯定是需要占用空间的!因为文件 != 文件内容,文件 = 文件属性 + 文件内容:
3.1.1详细解析ls指令
3.1.1.1 ls
ls的作用为,显示当前目录下的文件名称,但是我们注意到,不同的文件,在Linux下显示的颜色也不一样,这到底有什么说法呢?其实,文件分为两种:普通文件和目录,因为一个目录中可以存储文件,也可以包含其它的目录,所以我们就要重新定义ls的作用了:
3.1.1.2 ls -l 、ls -a
3.1.1.2.1 ls -l
当我们输入ls -l时,可以看到:
除了文件名,还显示了其它的一串东西,我们可以大致猜出:这些应该是文件的属性,有时间、字节数等,所以说ls -l的作用是显示当前目录下,详细的文件属性信息:
3.1.1.2.2 ls -a
下面我们来看ls -a的用法:
可以看出,ls -a除了显示出文件和目录,还显示了. 和 …,既然是蓝色,那么就是两个目录,对于它们两个的描述详细看知识点2,竟然将所有的文件都显示出来了,那么ls -a的作用就是显示当前路径下的所有文件,a就是all
3.1.1.2.3 ls -la
其实两个指令之间能够合并,得到更加了厉害的指令:
3.1.1.3其它指令
ls家族中还有其它的指令,这些指令不一一列举了,后边会用到的:
3.2知识点2 – 什么是.和…
在Linux中,以.和…开头的文件或者目录,称为隐藏文件,我们来验证一下:
其实windows中也有着隐藏文件:
在我们的文件夹中就能够查看隐藏的项目,而一些游戏中的重要数据其实就放在隐藏的项目中,这是为了防止用户误操作,删除游戏重要的数据
3.3知识点3 – 前缀- 和 前缀d
所以说.和…其实是两个目录,其实.表示当前路径,…表示上级路径,下面会提
4.指令 – pwd
从一开始得知,pwd是打印当前路径的:
那么我们就详细分析一下路径的细节:
4.1知识点4 – 路径分隔符和多叉树结构引入
4.1.1路径分隔符
4.1.2多叉树结构
我们当前的路径为:/root/LinuxClass,那么最前边的/是什么呢?其实是根目录
而Linux的所有文件都必须从一个根位置开始,而根也是一个目录,我们在根目录中创建另外的目录或文件,从另外的目录中再创建另外的目录或文件,这其实是一个多叉树的结构:
而对于这么庞大的一棵树,我们怎样才能找到我们想要的文件呢?
4.2知识点5 – .和…的终极理解
对于任何一个目录,都存在.和…:
所以它们肯定很重要,其实.表示当前路径,…表示上级路径:
它们的作用为:
…:可以从当前结点找到自己的父节点
. :可以找到当前路径,当我们写一个C语言代码需要编译时,直接out会发生找不到代码的报错,这时我们就要用:./a.out,来指定当前路径
当我们到达根目录之后,再想要向上查找,使用…,就无法再向上查找了,所以根目录的.和…都指向自己:
5.指令 – cd
5.1 cd ~
对于home的解释看知识点6
5.2 cd -
cd -的作用为切换回最近的一次路径:
5.3知识点6 – 家目录
Linux是一个多用户操作系统,有着家目录的概念,顾名思义,多用户操作系统指能够支持多个用户使用的操作系统,而用户分为两种:超级管理员和普通用户,超级管理员(root用户)有着所有的计算机权限,而普通用户则有着一部分权限
如果将所有用户创建的文件都保存再同一个目录下,肯定会出现问题,所以就为每一位用户分配了一个目录,这个目录称为家目录,当一个用户打开操作系统时,会默认处于其家目录中
超级管理员,默认的家目录为:/root
普通用户,默认的家目录为:/home/xxx
windows操作系统也有着家目录的概念,我们来看:
从自己的文件夹桌面栏中,我们就可以看到自己桌面上的所有信息了,所以说,桌面的本质其实也是一个目录,只不过使用图形化界面的形式表现出来了而已
6.指令 – stat、file、mkdir、rm
6.1 stat
stat:显示文件的状态信息,stat命令的输出信息比ls命令的输出信息要更加详细:
6.1.1 知识扩展 – ACM时间
ACM时间指的就是上面的三个时间的简称:
access time:指文件最后一次被访问的时间,当读取一个文件的内容时,这个时间会被更新
modify time:指文件内容最后一次被修改的时间
change time:指文件的元数据(也被称为i结点信息,其实就是文件属性)最后一次被修改的时间
文件的元数据是指描述文件属性的数据,包含了关于文件的详细信息,但不包含文件的实际内容,如文件名、文件大小、创建时间、修改时间、访问时间、权限等,而i结点是一个数据结构,存储着关于文件的元数据,但不包括文件的实际内容和文件名
我们可以通过touch -a filename来改变其access time,通过touch -m filemname来改变其modify time:
6.2 file
file:检查一个文件的类型(目录、二进制文件、文本文件):
6.3 mkdir
mkdir:创建一个新的目录:
但是当我们想要创建一连串的目录时:
直接使用mkdir不行,我们要这样写:
6.4 rm
我们知道了怎么创建文件,那么如何删除文件呢?使用rm指令:
但是当我们要删除目录时:
报错了,因为目录是一个子树,要删除目录需要递归(recursion)删除,所以要这样删除:
但是这样又会显示很多提示信息,如果不想要这么些交互,直接删除需要这样:
但是这里也会有风险:
当我们删除时,跟着所有的东西都会被删除,那么如果我们删除/根目录时,也会直接被删除,所以这还是有很大的风险的,但是如果我们误删除了,需要重新安装,可以看教程
6.5知识点7 – 后缀问题
在Linux中,文件类型和后缀无关,文件后缀通常用于表示文件的类型,用来方便用户和程序来识别,文件的实际类型是由其类型来决定的,而不是文件名或后缀
比如,我们有一个名为example的文件,使用file指令时,仍然可以识别它的类型
但是如果我们有一个.txt文件,里面装入的是C语言代码,使用g++编译时为什么会出现报错呢?因为Linux系统 != g++,g++对于文件后缀有要求,而Linux系统没有,所以还是建议在创建文件时要加上后缀!
6.6知识点7 – tree
既然目录其实是多叉树结构,那么我们就可以使用tree指令来打印出这个多叉树结构:
报错了!因为tree是需要安装的,安装指令:
yum install -y tree
等待一会就完成了,再次打印结构,可以看到:
我们再尝试打印根目录:
可以发现它会一直打印,因为根目录包括的内容很多!这时候我们就要使用ctrl,ctrl+c,可以直接将打印暂停:
7.指令 – man
7.1man指令的使用
Linux中有很多的指令,这些指令我们不可能都记着,所以Linux提供了一个man命令,该命令允许访问Linux中的手册页的命令:
但是由于云服务器一般是一个生产环境,上边的功能一般是残缺的,因为它会默认项目已经实现,所以就不会提供完整的手册:
所以我们要先进行安装:
然后我们就可以使用它的全部功能了:
我们会发现,为什么printf有两个,而且一个printf前面还要加上一个3呢?
因为手册一共分为8章,而man的所有指令作用如下:
7.2知识点 – 一切皆文件
虽然对于一切皆文件这个说法之后还会详细阐述,但是我们现在也可以对于这句话进行一个初步的认识:
8.指令 – cp
8.1cp指令的使用
cp其实就是copy的缩写,也就是拷贝指令
8.2知识点:指令其实就是程序
我们桌面上的所有东西,其实是一个一个的快捷操作,如果我们双击文件,就会打开文件对应的exe文件,也就是可执行程序,与之对应的,我们平常所用的ls等指令,其实也是一个一个的程序,使用which可以看出它们被保存在哪个文件中:
8.3知识点 – alias
上一个知识点,我们看出来了,alias ls=……其实就是起别名,那么我们可以直接定义一个变量来起别名:
9.命令 – mv 和 cat
9.1 mv
假设我们现在对于自己刚刚创建的文件名称不满意,想要改变名称,那么我们可以这样写:
对于目录,也是如此:
9.2 cat
9.3知识点:日志
我们平常不会使用到日志,但是如果是一些高端的项目,就会使用到日志,日志就是对于一些异常情况做出记录,并且记录出异常情况出现的时间,以及异常情况的详细信息
我们这里举一个例子:如果一个大型软件,比如一个小游戏,如果一天晚上突然发生了bug,如果我们没有日志的话,不知道bug出现的时间,以及bug的具体信息,那么就很难进行更新,所以日志是很重要的
但是一些日志很大很大,那么对于这些大型文件的读取就是相当重要的,cat读取数据时,会将全部数据进行读取,这对于我们观看是很不方便的,下面引入两个指令
10.指令 – more和less、head和less
10.1more
但是more相对与less还是有很多缺点的,我们建议使用less:
10.2less
10.3head和tail
我们先创建10000个数字:
10.3.1head
10.3.2tail
取任意区域的数据
假设我们要取[2000,2020]的数据:
但是这个方法不好,因为要再创建一个文件,我们需要这样做:
而 | 其实是管道,下面我们来看一下管道的概念:
10.4知识点:管道
11.指令 – date、cal
11.1date
如果我们在公司中,需要深入底层进入电脑房时,公司要求不能够带手机和电脑,我们就可以这样进行时间的查询
11.2知识点:时间戳
而date一个很重要的指令为:
但是这个输出的数据到底是什么意思呢?
我们举个例子:对于我们跨境买商品时,如果买了一个别国的商品,要查找这一件商品时,到底是按照我们的中国时间查,还是按照别国的时间查找呢,所以说大佬们呢就在格林威治开了一个会议,设置时间戳为从1970年1月1日0点起至现在的秒数
但是这个究竟有什么实质性的作用呢?当我们查找系统上次更新的时间时、查找某个时间段之内的数据时都需要用到时间戳
那么可不可以将时间戳转换为我们现在的时间呢?:
这样就实现了
但是为什么我们将时间戳设为0时,时间不是0点0分呢?因为北京时间和格林尼治时间相差了8个小时
11.3cal
12.指令 – find和grep
12.1find
之前我们学了which,那么find和which有什么区别呢
12.1.1whereis指令补充
12.2grep
grep的使用如下:
grep可以帮助我们看那些大型文档等,也可以用来观看进程:
13.指令 – zip、unzip、tar
这两个指令都是针对于文件的解压缩的文件,我们先来了解一下什么是解压缩:
13.1什么是解压缩
那么我们如何对文件进行解压缩呢:
13.2zip、unzip
13.2.1windows和linux之间进行文件互传
既然我们将文件压缩成一个zip文件包了,那么怎么将这个文件包传到我们的windows上呢
13.3tar
13.3.1Linux之间的互传
我们之前讲了windows和Linux之间的文件传输,那么Linux之间的传输是怎么传的呢:
14.指令 – bc
15.指令 – uname -r
如果我们想要查找Linux下的体系结构(一般指芯片)、架构(x86)是什么,内核版本是什么,那么我们就需要进行查询: