Linux基础
大纲:
1、学习Linux的价值
2、了解计算机硬件
3、计算机操作系统
4、Linux系统概览
5、Linux系统结构
6、Linux系统软件包管理
一、学习Linux的价值
linux是现今主流的开源的操作系统,对于学计算机的人来说,是一门必修课程。 其具有很高的学习价值,例如下:
1、Linux是现代化应用程序交付的首选平台,无论是部署在裸机、虚拟化还是容器化环境。(程序的部署上线都需要用到linux)
2、公司内部服务(TCE、FaaS、SCM)统一使用Debian Linux系统。(学习掌握Linux可以更好的使用这些服务)
3、熟悉Linux基础指令,熟练运维前端常用服务。(Nginx,Node.js)
4、加深对操作系统概念和实现的理解,夯实基础知识。
二、了解计算机硬件
1、计算机五大基本单元
1、控制器:协调和指挥计算机中其他部件工作
2、运算器:算数和逻辑运算(常规意义上可以认为:控制器+运算器=cpu)
3、存储器单元:分为内存、外存(磁盘、光驱)
4、输入单元:控制输入信息(鼠标、键盘)
5、输出单元:控制输出信息(显示器、音响)
2、五大基本单元的工作流程如下图所示:
简单流程:用户通过输入设备向操作系统输入一些指令,操作系统通过调用运算器、存储器、控制器三者配合会得到一个结果,最后通过输出设备,把这个结果反馈给用户。
三、计算机操作系统
计算机最大的软件--计算机操作系统。
1、操作系统
操作系统是管理和控制计算机系统中的硬件和软件资源,用于在用户与系统硬件之间传递信息。
操作系统主要提供了两个方面的的能力:
1、管理计算机资源
2、提供用户接口
如下图:
如今主流的操作系统有:
苹果、Linux、windows、安卓、鸿蒙OS
思考:
程序启动必须由操作系统来执行,操作系统本身也是一个程序,是如何在开机时被执行的?
个人认为:计算机在执行的时候使用的是机器指令,程序是被编译成为机器指令后被计算机执行的,操作系统也是一个程序,在开机时操作系统这个程序应该会在计算机内存中被编译成为机器指令让后被计算机执行。
正确答案参考操作系统启动流程的笔记
2、操作系统启动流程
操作系统启动流程参照下图:
说明:
Bios或UEFI是一段固化在主板上的程序,在计算机启动时会默认运行这段程序,然后通过这段程序去运行主板引导项。
可以简单认为UEFI是BIOS流程的升级版本,解决优化了BIOS启动Bootloader也就是操作系统引导程序,然后通过引导程序初始化操作系统。
UEFI优化了BIOS自检流程,BIOS启动会配合MBR分区,无法引导启动超过2.2T的硬盘。而UEFI一般配合GPT分区,支持超过2.2T的硬盘启动。
四、Linux系统概览
1、了解Linux的发展简史
发展简史如下图所示:(了解即可,不多赘述)
2、Liunx版本
如下图,Liunx分为内核版本、发行版本两大类。发行版本+Linux内核+常用软件。目前Linux的发行具有多分子版本,如Debian、Red Hat...
3、命令查看Linux系统内核版本
可以使用如下两种方法查看linux 的内核版本信息:(以Ubuntu为例)
uname -a、
cat /proc/version。
4、查看Linux系统版本
命令如下:(以Ubuntu为例)
cat /etc/os-release。
效果展示:
5、Linux系统应用领域
1、IT服务器(操作系统、虚拟化、云计算)
2、嵌入式和智能设备
3、个人办公桌面
4、学术研究与软件研发
五、Linux系统结构
1、Linux基本组成
linux一般有4个主要部分
-
内核:
提供操作系统的底层能力。如:内存管理、进程管理文件系统管理...
-
shell:
命令解释器,通过shell输入指令达成和linux系统进行交互达到管理/使用linux资源...
-
文件系统:
负责管理持久数据的一个子系统,负责把用户文件存入到磁盘文件中...
-
应用系统:
在linux上运行的一些程序。如:vim、gcc...
2、Linux体系结构
linux体系结构大致上分为两部分:用户空间、内核空间 用户空间包含:应用程序、C Library 内核空间包含:系统调用、内核平台架构相关代码。
内核空间和用户空间分离,安全性高;内核空间控制linux资源,权限高
内核总结:
1、内核是硬件与软件之间的中间件
2、内核是一个资源管理程序
3、内核提供一组面向系统的命令
3、内核漫画
下图漫画介绍了linux的运行(以进程来描述)
4、进程管理
进程的特点:
1、进程是正在执行的一个程序或命令
2、进程有自己的地址空间,占用一定的系统资源
3、一个CPU核同一时间只能运行一个进程
4、进程由它的ID(PID)和它父进程的进程ID(ppid)唯一标识
子进程是依据父进程的模板创建而来的----进程结构为一个树形结构
查看进程信息指令
# 查看启动的postgres(pg数据库)进程
ps -ef | grep pg-test_db_1(进程名)
# 查看某个进程
top -p (进程id)
#关闭指定进程
kill (进程id)
#全部进程动态实时试图
top
思考:
系统中运行的程序远远大于CPU的核数,那Linux系统是如何实现同时运行这么多程序的?
个人认为:
我觉得这应该和java的多线程相似,实际来说是不可能同时运行这么多程序的,应该是有个执行顺序的,系统执行的速度很快,导致我们认为程序是同时进行的。
正确答案参考操作进程调度的笔记
5、进程调度
进程调度是指操作系统按某种策略或规则选择进程占用CPU进行运行的过程。
参考下图掌握进程的生命周期(右侧表示进程的状态):
解答同时运行多程序:
实际上linux在运行进程的时候,采用进程调度规则,依旧是排序完成进程,只不过在执行的时候会同时进行即当上一个进程还在运行中时进行下一个进程。
就好像是在烧开水的时候同时烧饭,水烧开了通知去倒水。
6、进程调度原则
1、一个CPU同一时间只能运行一个进程
2、每个进程有乎相等的执行时间
3、对于逻辑CPU而言进程调度使用轮询的方式执行,每轮询完成则回到第一个进程反复
4、进程执行消耗时间和进程量成正比
7、进程的系统调用
进程的系统调用是用户态和内核态双执行的。
用户态的用户进程会发起系统调用,系统调用会,同时内核态会根据用户态的系统调用同样执行系统调用,最总返回到用户态完成系统调用返回。
8、文件系统
linux文件系统是操作系统中负责管理持久数据的子系统,负责把用户的文件存到磁盘硬件中,持久化的保存文件。
在linux中一切皆文件。
文件系统应该和数据库系统相似,把用户操作的关系表格写入到磁盘中
Linux文件系统采用树状的目录结构,最上层的根目录 /
思考
linux中多个文件系统,如何实现对用户提供统一调用接口?
解答
linux通过虚拟文件系统(VFS对应用层提供一个标准的文件操作接口,对文件系统提供一个标准的文件接入接口。
下面是对文件的一些基本炒作
#df命令报告文件系统磁盘空间利用率
`df -T`
#mount命令是挂载文件系统用的,不带任何参数运行,会打印包含文件系统在内的磁盘分区信息
`mount`
#ls 查看文件夹下内容
`ls`
#创建名为test的文件夹
mkdir test
#移动test文件夹到/home目录
mv test /home
# 删除test文件夹
rm -r test
#创建空文件
touch kong.txt
#复制文件,改名为kong1.txt
cp kong.txt kong1.txt
下图是文件的读取流程:
其中DMA可以直接和磁盘交互,将数据写入到磁盘中。
9、用户权限
用户对系统操作存在权限控制,有点文件为只读文件,一般用户只能读文件不能操作文件;有些文件为只写文件,一般用户只能写文件...
用户分为普通用户、超级用户
用户组分为标准组、私有组
#查看当前登录用户
w
#查看当前用户所属的组
groups
#查看用户的uid信息
id (用户名)
10、文件权限
文件权限关于用户的三个概念:
所有者:文件的所有者
所在组:文件的所有者所在组
其他人:除上两点以外
每个用户对于文件都有不同权限,读r、写w、执行x
文件权限由10个连接字母组成,第一个为文件的类型,2-4所有者权限,5-7所在组权限,8-10其他人权限
#在根目录创建一个文件夹,查看当前用户拥有文件夹的权限
cd / && mkdir demo && ls -ld demo
#创建一个用户,并赋予可写操作
useradd ceshi
#设置用户密码
password ceshi
#切换ceshi用户登录
su ceshi
#进入demo文件夹
cd demo
#创建index.js文件,如果提示无权限,需要给ceshi用户demo文件夹的权限
touch index.js
# 给ceshi用户demo文件夹权限
chown -R ceshi:ceshi ./demo
六、Linux系统软件包管理器
1、软件包
通常指的是一个应用程序,它可以是一个GUI应用程序、命令行工具或(其他软件程序需要的)软件库
软件包管理:
底层工具:用来处理安装和删除软件包文件等任务,dpkg(Debian)、rpm(red hat)
上层工具:用于数据的搜索任务和依赖解析任务,art、yum、dnf
2、Debian APT常用命令
参考下图:
总结
本篇笔记记录linux基础。
从linux的价值--》计算机硬件--》计算机操作系统(最大软件)--》linux系统--》Linux系统结构--》linux软件包管理。
中间穿插了查看版本信息指令、用户权限指令、文件权限指令、文件管理指令、软件安装删除指令...
目前已经能正常的使用linux系统了,但是对于更多的linux资源使用还不懂。如:vi/vim编辑器、docker、tree...
后续会常使用linux系统,会继续跟进linux进度,期望达到熟练使用linux的程度。