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是需要安装的,安装指令:

c 复制代码
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)是什么,内核版本是什么,那么我们就需要进行查询:

16.知识补充

16.1知识补充1

链接: Linux2.6* 内核默认支持的文件系统





相关推荐
写点什么啦几秒前
[debug]不同的window连接ubuntu的vscode后无法正常加载kernel
linux·vscode·ubuntu·debug
wellnw7 分钟前
[ubuntu]编译共享内存读取出现read.c:(.text+0x1a): undefined reference to `shm_open‘问题解决方案
linux·ubuntu
不爱学习的YY酱9 分钟前
【操作系统不挂科】<CPU调度(13)>选择题(带答案与解析)
java·linux·前端·算法·操作系统
DC_BLOG10 分钟前
Linux-Nginx虚拟主机
linux·运维·nginx
坐公交也用券13 分钟前
使用Python3实现Gitee码云自动化发布
运维·gitee·自动化
XY.散人44 分钟前
初识Linux · 信号处理 · 续
linux·信号处理
1900431 小时前
linux复习5:C prog
linux·运维·服务器
猫猫的小茶馆1 小时前
【C语言】指针常量和常量指针
linux·c语言·开发语言·嵌入式软件
朝九晚五ฺ1 小时前
【Linux探索学习】第十五弹——环境变量:深入解析操作系统中的进程环境变量
linux·运维·学习
ernesto_ji2 小时前
Jenkins下载安装、构建部署到linux远程启动运行
linux·servlet·jenkins