Linux基础 | 青训营笔记
课程介绍
为什么要学习Linux?
- Linux是现代化应用程序交付的首选呕吐,无论是部署在裸机、虚拟化还是容器化环境
- 字节内部服务(TCE、FaaS、SCM)统一使用Debian Linux系统
- 熟悉Linux基础指令有助于熟悉运维前端常用服务(Nginx,Node.js)
- 加深对操作系统概念和实现的理解,夯实基础知识
计算机硬件
计算机的五大功能部件:输入设备、输出设备、存储器、运算器、控制器
冯诺依曼结构特点:
- 计算机由如图5部分组成
- 以运算器为中心
- 指令和数据以同等地位存储在存储器,可按址寻访,CPU通过指令周期的不同阶段区分指令和数据
- 指令和数据以二进制表示
- 指令由地址码[ Ad(IR) ]和操作码[ Op(IR) ]组成
- 首次提出“存储程序”的概念,基本工作方式是控制流驱动方式
- 运算器成为“瓶颈”
- 不具有层次结构
现代计算机
随着微电子技术的进步,同时计算机需要处理的信息也越来越多,大量I/O设备的速度和CPU的速度差距悬殊,因此需要更新换代计算机的组织结构以适应新的需求。计算机发展为了以存储器为中心,使I/O设备尽可能的绕过CPU,直接在I/O设备与存储器之间完成操作,以提高整体效率。其结构如下图所示:
计算机操作系统
操作系统功能:管理和控制计算机系统中的硬件与软件资源,用于用户与系统硬件之间传递信息
操作系统启动流程
BIOS和UEFI都是计算机的固件,也就是硬件上的软件。它们的作用是在计算机启动时初始化硬件,检测设备是否正常,然后启动操作系统。
BIOS(Basic Input/Output System,基本输入输出系统)是一种早期的固件,它在计算机启动时负责执行POST(Power On Self Test,自检程序),检测硬件设备是否正常,然后加载引导程序,启动操作系统。BIOS存储在主板上的闪存芯片中,由于其限制比较多,如容量小、功能简单、启动速度慢等,已逐渐被新一代的UEFI所取代。
UEFI(Unified Extensible Firmware Interface,统一可扩展固件接口)是BIOS的后继者,是一种新型的计算机固件,提供比BIOS更多的功能和扩展性。UEFI支持更大的启动盘和更多的文件系统,也支持更高级的安全和启动选项,同时启动速度更快。UEFI通常存储在主板上的闪存芯片中,并由厂商提供升级固件的方式,使其支持新的硬件和功能。
Linux操作系统概览
Linux版本
Linux内核 + 常用软件 = Linux发行版本
相关命令
查看Linux系统内核版本:uname -a / cat /proc/version
查看Linux系统版本: cat /etc/os-release
Linux系统应用领域
- IT服务器(操作系统、虚拟化和云计算)
- 嵌入式和智能设备
- 个人办公桌面
- 学术研究与软件研发
Linux系统结构
Linux基本组成
- Linux内核: Linux操作系统的核心代码,是Linux系统的最底层,提供了系统的核心功能并允许进程以一种有序的方式访问硬件。
- Shell命令:Shell是一个命令行解释器,它使得用户能够与操作系统进行交互,负责接收用户命令,然后调用相应的应用程序,并根据用户输入的指令来反馈给用户指定的信息。
- 文件系统:通常指称管理磁盘数据的系统,可将数据以目录或文件的型式存储。每个文件系统都有自己的特殊格式与功能。
- 应用软件:包含桌面系统和基础的软件操作工具等。
Linux体系结构
Linux 的体系结构是一个多层次的体系结构,包括硬件层、内核层、应用程序层和用户层。
内核是硬件与软件之间的中间层,是一个资源管理重新,提供一组面向系统的命令
进程管理
进程:一个正在执行的程序或命令,有中间的地址空间且占用一定的系统资源。一个CPU核同一时间只能运行一个进程。进程由其进程ID(PID)和其父进程的进程ID(PPID)唯一识别
进程相关命令:
- 查看启动的nginx进程:ps -ef | grep nginx
- 查看某个进程:top -p 93824(PID)
- 关闭指定进程:kill 93824(PID)
- 全部进程动态实时试图 top
进程调度
进程调度是指操作系统按照某种策略或规则选择进程占用CPU进行运行的过程。
- 创建阶段:进程在创建时,会分配资源并初始化进程控制块(Process Control Block,PCB),包括进程标识、程序计数器、CPU寄存器、内存分配情况等。
- 就绪阶段:进程在获得了运行所需的资源后,会被放置在就绪队列中等待CPU的分配。此时进程已经准备好运行了,只是还没有得到CPU的资源。
- 运行阶段:当进程被调度到CPU上运行时,进程的代码被加载到CPU中执行,这时进程进入运行状态。
- 阻塞阶段:在运行过程中,如果进程需要等待某些事件(如等待I/O操作完成),就会进入阻塞状态,此时进程会释放CPU资源,直到等待的事件完成。
- 结束阶段:当进程完成了它的任务或发生错误时,就会进入终止(僵死)状态。此时系统会回收该进程所占用的资源,并从进程表中删除该进程,也说明了这个进程结束了
进程状态
- R(TASK_RUNNING):可执行状态
- S(TASK_INTERRUPTIBLE):可中断的睡眠状态
- D(TASK_UNINTERRUPTIBLE):不可中断的睡眠状态
- T(TASK_STOPPED/TASK_TRACED):暂停状态或跟踪状态
- Z(TASK_DEAD-EXIT_ZOMBIE):退出状态,进程成为僵尸进程
- X(TASK_DEAD-EXIT_DEAD):退出状态,进程即将被销毁
调度原则
- 一个CPU核同一时间只能运行一个进程
- 每个进程执行时间近乎相等
- 对于逻辑CPU而言,进程调度使用轮询方式进行
- 进程执行消耗时间和进程量成正比
进程的系统调用
内核空间(Kernal Space):系统内核运行的空间 用户空间(User Space):应用程序运行的空间
进程的系统调用是用户程序(用户态)与内核之间的一个接口,可以让用户程序获得内核提供的服务和功能。下面是进程的系统调用的基本流程:
- 用户程序发起系统调用。
- 程序经过用户态内核态切换后,进入内核态执行系统调用。
- 内核执行系统调用,并返回结果给用户程序。
- 程序再次经过内核态用户态切换后,回到用户态执行后续代码。
Linux文件系统
Linux一切皆文件,文件系统负责管理持久化数据的子系统,负责吧用户的文件存到磁盘硬件中。 Liux文件系统是采用树状的目录结构,最上层是 /(根)目录
虚拟文件系统VFS
功能:为应用层提供一个标准的文件操作接口,为文件系统提供一个标准的文件接入接口
文件系统相关命令:
- 报告文件系统磁盘空间利用率:df -T
- 挂载文件系统,不带任何参数运行会打印包含文件系统类型在内的磁盘分区信息:mount
- 查看文件夹下内容:ls
- 创建文件夹:mkdir demo
- 移动demo文件到/home下:mv demo /home
- 删除demo文件夹:rm -r demo
- 创建空文件:touch file.txt
- 复制文件:cp file.txt file_bak.txt
文件读取流程
用户权限
用户账号
- 用户账号
普通用户账户:在系统中进行普通作业
超级用户账户:在系统中对普通用户和整个系统进行管理
- 组账户
标准组:可以容纳多个用户
私有组:只有用户自己
文件权限
文件权限关于用户有三个概念:
- 所有者:文件的所有者
- 所在组:文件的所有者所在的组
- 其他人:除文件所有者及所在组外的其他人
每个用户对于文件都有不同权限,包括读(R)、写(W)、执行(X)
用户权限相关命令:
- 查看当前登录用户信息:w
- 查看当前用户所属组:groups
- 查看用户的uid信息:id XXX
Liunx软件包管理
-
软件包:通常指的是一个应用程序,它可以是一个GUI应用程序、命令行工具或(其他软件程序需要的)软件库
-
软件包管理
- 底层工具:主要用来处理安装和删除软件包文件等任务
- 上层工具:主要用于数据的搜索任务和依赖解析任务