计算机硬件
计算机操作系统
操作系统能力
操作系统启动流程
可以简单理解为UEFI是BIOS流程的升级版本,解决优化了BIOS启动Bootloader也就是操作系统引导程序,然后通过引导程初始化操作系统程序运行中的一些问题。比如优化了BIOS 自检流程,BIOS启动会配合MBR分区,无法引导启动超过2.2T的磁盘,而UEFI配合GPT分区,支持引导超过2.2T的磁盘
Linux系统概览
Linux发展简史
1.1969年,Unix诞生于贝尔实验室
2.1984年,贝尔实验室将Unix商业化
3.1984年,Tanenbaum开发Minix操作系统用于教学并开放源码
4.1984年,RichardM.Stallman发起自由软件(FSF)与GNU项目,起草GPL(通用公共许可协议
5.1991年,LinusTorvalds受Minix影响实现初版的Linux内核
6.1992年,Linux内核以GPL协议发行V1.0
Linux版本
内核版本
Linux内核版本,由Linus本人维护。Linux内核提供了内存管理、进程管理、文件系统管理、硬件资源管理等一系列底层能力。
发行版本
Linux内核+常用软件=Linux发行版本
查看Linux系统内核版本
#方法1
uname-a
#方法2
cat/proc/version
#查询结果:
Linux xxxxx-84496b6849-7nzg6 4.14.81.bm.30-amd64 #1 SMP Debian 4.14.81.bm.30 Thu May 6 03:23:40 UTC 2021 x86 64
查看Linux系统版本
cat/etc/os-release
#查询结果:
PRETTY NAME="Debian GNU/Linux 10 (buster)'
NAME="Debian GNU/Linux"
VERSION ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=Debian
HOME_URL=“<https://www.debian.org/>”
SUPPORT_URL="https://www.debian.org/support”
BUG _REPORT_URL=“<https://bugs.debian.org/>”
Linux系统应用领域
-
IT 服务器(操作系统、虚拟化和云计算)
-
嵌入式和智能设备
-
个人办公桌面
-
学术研究与软件研发
Linux系统结构
Linux系统一般有四个主要部分:
-
内核
-
Shell
-
文件系统
-
应用程序
-
内核是硬件与软件之间的中间层
-
内核是一个资源管理程序
-
内核提供一组面向系统的命令
用户空间和内核空间
-
用户空间是指应用程序运行的空间,包括用户应用程序、库、各种进程、服务等。用户空间的特点是受限制的权限,应用程序只能访问自己所拥有的资源,如自己的进程空间、自己的内存、自己的磁盘空间等。同时,用户空间还包括了各种 shell,用户可以通过 shell 进行命令行操作,从而控制整个系统
-
内核空间是指操作系统内核运行的空间,包括各种驱动程序、系统调用等。内核空间的特点是拥有系统级的权限,可以访问所有资源,包括 CPU、内存、磁盘、网络等。内核空间的代码通常运行在特权级别最高的模式下,可以直接操作硬件,因此内核空间的代码很少出错,一旦出错会导致整个系统崩溃
-
用户空间和内核空间之间通过系统调用进行通信。应用程序可以通过系统调用请求内核提供服务,如读写文件、网络通信、进程管理等。内核收到系统调用后会根据请求提供相应的服务,并返回结果给应用程序
进程管理
-
进程是正在执行的一个程序或命令
-
进程有自己的地址空间,占用一定的系统资源
-
一个CPU核同一时间只能运行一个进程
-
进程由它的进程ID(PID)和它父进程的进程ID(PPID)唯一识别
查看进程信息
#查看启动的nginx进程
ps -ef | grep nginx
#查看某个进程
top -p 93824
# 关闭指定的进程
kill 93824
# 全部进程动态实时视图
top
进程调度
进程调度是指操作系统按某种策略或规则选择进程占用CPU进行运行的过程
R(TASK_RUNNING),可执行状态
S(TASK_INTERRUPTIBLE),可中断的睡眠状态
D(TASK_UNINTERRUPTIBLE),不可中断的睡眠状态
T(TASK_STOPPED or TASK_TRACED),暂停状态或跟踪状态
Z(TASK_DEAD – EXIT_ZOMBIE),退出状态,进程成为僵尸进程
X(TASK_DEAD – EXIT_DEAD),退出状态,进程即将被销毁
进程调度原则
-
一个CPU核同一时间只能运行一个进程
-
每个进程有近乎相等的执行时间
-
对于逻辑CPU而言进程调度使用轮询的方式执行,当轮询完成则回到第一个进程反复进程执行消耗时间和进程量成正比
进程的系统调用
内核空间 (Kernal Space): 系统内核运行的空间
用户空间 (User Space): 应用程序运行的空间
文件系统
文件系统负责管理持久化数据的子系统,负责把用户的文件存到磁盘硬件中
Linux中一切皆文件
这样做最明显的好处是开发者仅需要使用一套 API 和开发工具即可调取 Linux 系统中绝大部分的资源。举简单的例子,Linux 中几乎所有读(读文件,读系统状态,读 socket,读PIPE) 的操作都可以用read函数来进行,几乎所有更改(更改文件,更改系统参数,写 socket,写 PIPE) 的操作都可以用write函数来进行。
使用任何硬件设备都必须与根目录下某一目录执行挂载操作
Linux 文件系统是采用树状的目录结构
最上层是/(根)目录
- /bin:
bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。
- /boot:
这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。
- /dev :
dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。
- /etc:
etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。
- /home:
用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
- /lib:
lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。
- /mnt:
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。
- /opt:
opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
- /proc:
proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
- /root:
该目录为系统管理员,也称作超级权限者的用户主目录。
- /sbin:
s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。
- /usr:
usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。
虚拟文件系统(VFS)
对应用层提供一个标准的文件操作接口
对文件系统提供一个标准的文件接入接口
查看文件系统类型
# df 命令报告文件系统磁盘空间利用率
df _T
# mount 命令是挂载文件系统用的,不带任何参数运行,会打印包含文件系统类型在内的磁盘分区的信息
mount
文件基本操作
ls # 查看文件夹下内容
mkdir demo # 创建文件夹
mv demo /home # 移动 demo 文件夹到 /home
rm -r demo # 删除 demo 文件夹
touch file.txt # 创建空文件
cp file.txt file_bak.txt # 复制文件
文件读取流程
用户权限
- 用户账户
普通用户账户:在系统中进行普通作业
超级用户账户:在系统中对普通用户和整个系统进行管理
- 用户组
标准组:可以容纳多个用户
私有组:只有用户自己
文件权限
所有者:文件的所有者
所在组: 文件的所有者所在的组
其他人: 除文件所有者及所在组外的其他人
每个用户对于文件都有不同权限,包括读 (R)、写 (W) 、执行 (X)
查看用户信息
# 查看当前登录用户信息
USER
# 查看当前用户所属的组
groups
# 查看用户的uid信息
id xxxx
用户权限操作
#在根目录创建一个文件夹,查看当前用户拥有文件夹的权限
Cd / && mkdir demo && Is -ld demo
sudo useradd ceshi # 创建一个用户,并赋予可写操作
sudo passwd ceshi # 设置用户密码
su ceshi # 切换 ceshi 用户登录
cd demo # 进入 demo 文件夹
touch index,js # 创建 index.js 文件,提示无权限,需要给 ceshi 用户 demo 文件夹的权限
sudo chmod o+r ./demo # demo 文件夹写权限赋予其他人
su ceshi # 切换 ceshi 用户登录
cd demo # 进入 demo 文件夹
touch index.js # 创建 index.js 文件成功
Linux软件包管理
软件包
软件包
通常指的是一个应用程序,它可以是一个 GUI 应用程序、命令行工具或(其他软件程序需要的)软件库
软件包管理
底层工具: 主要用来处理安装和删除软件包文件等任务,DPKG,RPM上层工具: 主要用于数据的搜索任务和依赖解析任务,APT,YUM,DNF
软件包管理工具
RPM (Red Hat Package Manager) ,为 Red hat 操作系统的包管理系统。
DPKG (Debian package) ,为 Debian 操作系统的包管理系统
Debian APT 常用命令
列出所有可更新的软件清单命令: apt update
安装指定的软件命令: apt install <package name>
安装多个软件包: apt install <package 1> <package 2> <package 3>
更新指定的软件命令: apt update <package name>
删除软件包命令: apt remove <package name>
查找软件包命令: apt search <keyword>
列出所有已安装的包: apt list --installed
总结
Linux是当今服务器端最流行的系统。作为一个前端人,Linux的基础操作是每一个人都所必须掌握的。而学习Linux基础有助于帮助我们进一步认识和理解计算机系统,掌握底层能力,提升工程素养。