02-Linux 基础 | 青训营笔记

186 阅读11分钟

本文为参加前端青训营活动基础课程——Linux基础的笔记。

Linux 基础 - 掘金 (juejin.cn)

字节前端训练营 - Linux 基础.pptx - 飞书云文档 (feishu.cn)

00 课程介绍

  • 学习Linux的价值-还需要问么?
  • Linux图标-企鹅-表示开源公有

01 计算机硬件

  • 计算机硬件包含
    • 控制器
    • 运算器
    • 存储器单元
    • 输入单元
    • 输出单元
  • 补充:
    • 只是经典的冯诺依曼结构是这样——典型的控制流结构
    • 现代趋势有:
      • CPU集成多个部件
      • 数据流计算机
      • 量子、生物计算机

02 计算机操作系统

OS 概念

操作系统:OS 管理和控制计算机系统中的硬件与软件资源,用于在yoghurt与系统硬件之间传递信息

flowchart LR
	subgraph 管理
		f1[管理计算机资源]--> 处理器管理 & 存储器管理 & 设备管理 & 文件管理
	end;
	subgraph 提供
		f2[提供用户接口]--> 命令接口 & 图新用户接口 & 程序接口
	end;

	OS --> f1 & f2

操作系统启动流程

flowchart LR

s["Power up"]--> BIOS --> n["BIOS 自检"]--> c[BootLoader]-->OS;
s-->UEFI-->c;
  • 传统模式:基于BIOS,基于16位实模式工作
  • 主流模型:基于UEFI,基于64位保护模式工作
  • BIOS与UEFI都是主板上烧固的一段程序,在加电时优先运行,引导OS启动
  • UEFI 的好处
    • 不需要自检和初始化过程
    • 支持更大的启动驱动器
    • 处理更大的硬盘容量
    • GUI配置
    • 网络启动与安全启动

03 Linux 系统概览

Linux 发展简史

  • UNIX诞生
  • UNIX商业化
  • Minix诞生
  • FSF 自由软件 、GNU、GPL 通用公共许可
  • Linux 内核
  • Linux v1.0发布

Linux 版本

  • Linux 内核+常用软件=Linux发行版本
flowchart TD
Linux--- f1[Debian系列] & f2[RedHat系列] & f3[StackWare系列] & f4[国产系列];
f1---Debian & Ubuntu;
f2--- CentOS & &Fedora & RHEL;
f3 --- SUSE
f4--- 龙芯 & 鲲鹏 & 飞腾

查看 Linux 内核版本

# 1
uname -a
# 2
cat /proc/version

查看 Linux 系统版本

cat /etc/os-release

Linux 应用领域

  • 运维
  • 嵌入式 人工智能
  • balabala

04 Linux 系统结构

Linux 基本组成

  • 内核 提供最基础的管理与操作
  • shell 本质上是一个命令解释器
  • 文件系统 管理文件的子系统
  • 应用程序

Linux 体系结构

Pasted image 20230414202219.png

为什么使用隔离?

  • 安全
  • 权限
    • 内核程序拥有最高级别的权限
    • 应用程序较低

应用程序如何与硬件通信?

  • Trap in /out 内核
  • 系统调用

Pasted image 20230414205817.png

内核

  • 内核是硬件与软件之间的中间层
  • 内核是一个资源管理程序
  • 内核提供面向系统的命令

补充

据我比较浅薄的认知,Linux貌似不区分线程与进程,只在较近的版本中,使用组代替了进程概念。

进程管理

  • 进程
    • 进程是正在执行的一个程序/命令
    • 进程有自己的地址空间,占用一定的系统资源
    • 一个CPU核同一时间只能运行一个进程
    • 进程由自己的进程ID-PID,核父进程的进程ID PPID 唯一识别
      • Linux启动时,创世进程pid=0,其他程序由此进程fork而来
      • fork vfork clone
  • 进程相关的指令
# 查看进程
ps -ef | grep <name> # 过滤
# 查看进程
top -p %pid
# 关闭进程
kill %pid
# 全部进程动态实时视图
top
  • nginx
Nginx是一款高性能的HTTP和反向代理服务器,也可以作为邮件代理服务器使用。它是由Igor Sysoev开发的,最初发布于2004年。Nginx是一款轻量级的服务器,与其他服务器相比,它的内存占用率小,性能更加出色。

Nginx最初是为了解决C10k问题而开发的,即如何处理大量并发请求。它采用了事件驱动的方式处理请求,能够高效地处理大量并发请求。Nginx还支持动态模块化和静态编译,可以根据需要进行灵活配置和扩展。

Nginx广泛应用于Web服务器、反向代理、负载均衡器、HTTP缓存、API网关等场景。它以其高性能、高可靠性和高可扩展性而著名,深受Web开发者和系统管理员的喜爱。

进程调度

基本概念及生命周期

Pasted image 20230414204512.png

  • 注意区分上图中的 可中断的睡眠 与不可中断的睡眠
  • 注意僵尸进程需要父进程退出信号
  • 不知道上面的图中为什么没有孤儿进程?

进程调度策略

  • 一个CPU核同一时间只能运行一个进程
  • 每个几次呢很难过有几乎相等的执行时间
  • 轮询机制,按照队列顺序不断反复(POSIX的消息传递机制是支持按照优先级调度的,但是POSIX的消息传递机制是在用户态实现的)
轮询机制是一种常用的调度算法,也称为循环或者轮询调度。它是指在若干个任务之间按照轮流使用的方式进行分配处理器时间片的一种算法。当多个程序同时需要访问某个资源时,轮询机制可以按照一定的规则为它们分配资源。

在计算机网络中,轮询机制是指服务器对多个客户端的请求进行处理时,按照先后顺序依次处理每个请求的一种方式。轮询机制的中心思想是公平性,每个请求都有相等的机会得到处理。

轮询机制的优点是实现简单,公平性较好,缺点是处理时间不确定,可能会出现某个请求等待时间过长的情况。为了解决这个问题,还可以使用其他的调度算法,例如优先级调度和最短作业优先调度。
  • 进程执行消耗时间和进埕量成正比(?感觉这句话有点糙,进程计时方法都很模糊,还有CPU资源的情况也说不定)

Linux 文件系统

  • Linux中一切皆文件
  • 文件系统是操作系统中负责管理持久数据的子系统,负责将用户的文件存在磁盘硬件中,持久化保存文件
  • Linux 文件系统采用树状形式,最上层是 / 根目录
关于/根目录下的各个文件夹的含义
1.  /bin:该目录包含一些基本的命令和工具,例如ls、cp、rm等。  
2.  /boot:该目录包含启动系统所需的文件,例如Linux内核和引导加载程序。 
3.  /dev:该目录包含设备文件,例如磁盘驱动器、键盘、鼠标等。
4.  /etc:该目录包含系统和应用程序的配置文件,例如网络配置、用户账号等。全称是“Editable Text Configuration”的缩写,意思是可编辑的文本配置文件。
5.  /home:该目录包含所有用户的主目录,每个用户在该目录下都有一个独立的文件夹。
6.  /lib:该目录包含共享库文件,这些文件是应用程序运行所必需的。
7.  /mnt:该目录用于挂载临时文件系统,例如光盘、U盘等。
8.  /opt:该目录包含第三方软件包,例如Oracle数据库、Google Chrome等。
9.  /proc:该目录包含运行中的进程信息和系统状态信息,以文件形式呈现。
10.  /root:该目录为root用户的主目录。
11.  /run:该目录为运行时文件系统,包含系统启动后运行时需要的各种信息。 
12.  /sbin:该目录包含只有管理员才可以执行的系统命令和工具。
13.  /srv:该目录包含服务文件,例如Web服务器、FTP服务器等。
14.  /sys:该目录为内核文件系统,包含与内核相关的各种信息。
15.  /tmp:该目录为临时文件夹,存储程序运行时生成的临时文件。
16.  /usr:该目录包含系统软件、文档、库文件以及其他共享资源。
17.  /var:该目录包含系统日志文件、邮件、缓存、数据库等动态数据。

虚拟文件系统

Q: 问题:Linux如何采用一种方式统一操作不同物理文件系统 A: 采用虚拟文件系统(VFS)

  • 对应用层提供一个标准的文件操作接口
  • 对文件系统提供一个标准的文件接入接口

Pasted image 20230414210723.png

VFS是Virtual File System的缩写,它是操作系统内核中的一个抽象层,用于为应用程序提供一致的文件系统接口,屏蔽了各种物理文件系统的差异性,使得应用程序可以使用相同的方法访问各种不同的文件系统,例如Ext4、NTFS等。

在Linux系统中,VFS是文件系统的核心部分,它负责管理文件系统中的所有对象,包括文件、目录、设备等,并且提供了常规文件系统所需的基本操作接口,例如打开、关闭、读取、写入等。

VFS将文件系统抽象为一个树形结构,根节点为虚拟根节点,每个节点都可以表示一个文件、目录或设备。在VFS中,对于不同类型的节点,有不同的VFS对象对其进行管理,例如inode对象对文件进行管理,dentry对象对目录进行管理。

VFS的设计思想是将文件系统的具体实现与应用程序隔离开来,使得应用程序可以独立于底层文件系统的实现,从而增加了文件系统的可移植性和灵活性。同时,VFS还提供了一些高级特性,例如文件系统缓存、文件系统挂载、用户和组权限管理等,使得文件系统更加可靠和安全。

总之,VFS是操作系统内核中的一个抽象层,为应用程序提供一致的文件系统接口,屏蔽了各种物理文件系统的差异性,使得应用程序可以使用相同的方法访问各种不同的文件系统,并提供了常规文件系统所需的基本操作接口和高级特性,使得文件系统更加可靠和安全。

查看文件系统

# df 报告文件系统磁盘空间利用率
df -T

# Mount 知名原本用于挂载,不加参数时,打印包含文件系统类型在内的磁盘分区信息
mount

文件基本操作

ls
mkdir
mv
rm
touch
cp

文件读取流程

Pasted image 20230414211136.png

读取流程

  1. 用户进程首先在用户缓冲区中查找之前是否命中过
  2. 没有的话进行系统调用陷入内核态
  3. 内核态查看内核缓冲区之前是否命中过
  4. 没有的话通过DMA与磁盘进行数据交互
  5. 内核copy到自身缓冲区后trap out到用户态,将数据返回 ningx写入流程
  6. 如上图中通过CPU copy到 Socket缓冲区
  7. 通过DMA发送到网卡

用户权限

  • Linux为了安全起见,在文件系统上对用户做了区分
  • 具体分类
    • 用户账户
      • 普通用户账户:在系统中进行普通作业
      • 超级用户账户: 在系统中对普通用户核整个系统进行管理
    • 组账户
      • 标准组:可以容纳多个用户
      • 私有组:只有用户自己

查看用户信息

w # 查看当前登录用户信息
groups # 查看当前用户组
id xxxx # 查看当前用户的uid等的信息
su <username> # 切换登录用户

文件权限

  • 关于文件类型与权限的解释:
    • 第一位表示:文件类型:d表示文件目录,-表示普通文件
    • 后面九位分为三组,表示 read(r) write(w) exec(x),三组先后是 拥有者权限,所属用户组权限,其他用户权限

修改文件所有者

  • (访问不能当前用户不能操作的文件/夹)
sudo chown -R ceshi:ceshi ./demo
# 将当前目录下的demo文件夹以及demo文件夹下的所有文件和子文件夹的所有者和所属组都修改为ceshi用户和ceshi用户组。
  • 所以说,Linux 通过文件权限+ 用户权限构成了整个文件安全系统。

05 Linux 系统软件包管理器

软件包与包管理

  • 软件包:· 通常指的是一个应用程序 , 它可以是一个 GIJI 应用程序、命令行工具或 ( 其他软件程序需要的 ) 软件库
  • 软件包管理
    • 底层工具:主要用来处理安全核删除软件包文件等等任务,DPKG RPM
    • 上层工具,主要用于数据搜索和依赖解析,APT、YUM、DNF(下一代YUM)
  • Pasted image 20230414213425.png

命令

apt install <>
apt update 
apt upgrade [<>]
apt remove <>
apt search <keyword>
apt list --installed
  • 注:这里课件中应该第四行写错了

Debian 配置软件源

Pasted image 20230414213839.png

  • 可以直接从镜像官网copy指令,然后指令vim文件

小结