1. 计算机硬件
1.1 计算机硬件系统组成单元
- 控制器:是对输入的指令进行分析,并统一控制计算机的各个部件完成一定任务的部件
- 运算器:又称算术逻辑单元,是进行算术、逻辑运算的部件
- 存储器:是计算记忆或暂存数据的部件
- 输入设备:是是重要的人机接口,用来接受用户输入的原始数据和程序,并将它们变为计算机能识别的二进制存入到内存中
- 输出设备:是输出计算机处理结果的设备,用于将存入在内存中的由计算机处理的结果转变为人们能接受的形式输出
2. 计算机操作系统
2.1 操作系统(Operating System,OS)
- 操作系统是一组主管并控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户交互的相互关联的系统软件程序
- 程序启动必须有操作系统,操作系统本身也是程序,是如何在开机时被执行的?
操作系统的启动流程分为传统模式:基于 bios 的启动流程。还有一种是当前的主流模式:基于 UEFI 的启动流程。BIOS 或者 UEFI 是一段固化在主板上的程序,计算机启动时会默认运行这段程序,然后通过这段程序去运行主板引导项。
3. Linux 系统概览
3.1 Linux 版本
-
内核版本
是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序,它提供了一个在裸设备与应用程序间的抽象层 。
-
发行版本
是一个可以高效使用 Linux 内核的操作系统,即它涵盖了 Linux 内核,此外还包含一些 GNU 程序库和工具,命令行 shell,图形界面的 X Window 系统和相应的桌面环境,如 KDE 或 GNOME,并包含数千种从办公套件,编译器,文本编辑器到科学工具的应用软件。
Linux 内核 + 常用软件 = Linux 发行版本
3.2 查看 Linux 系统版本
-
内核版本
# 方法1 uname -a # 方法2 cat /proc/version -
系统版本
cat /etc/os-release
3.3 Linux 系统应用领域
- IT 服务器(操作系统、虚拟化和云计算)
- 嵌入式和智能设备
- 个人办公桌面
- 学术研究与软件研发
4. Linux 系统结构
4.1 基本组成
- 内核
- shell
- 文件系统
- 应用程序
体系结构:
- 内核是硬件与软件之间的中间层
- 内核是一个资源管理程序
- 内核提供一组面向系统的命令
4.2 进程管理
- 进程是正在执行的一个程序或命令
- 进程有自己的地址空间,占用一定的系统资源
- 一个 CPU 核同一时间只能运行一个进程
- 进程由它的进程 ID(PID)和它父进程的进程 ID(PPID)唯一识别
4.2.1 查看进程信息:
# 查看启动的 nginx 进程
ps -ef | grep nginx
# 查看某个进程
top -p 93822
# 关闭指定的进程
kill 93822
# 全部进程动态实时视图
top
- Linux 系统是如何实现同时运行大量程序的?
进程调度是指操作系统按某种策略或规则选择进程占用 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):退出状态,进程即将被销毁
4.2.2 进程调度原则
对于进程调度来说不能保证一个程序是连续完成的,由于CPU调度和进程切换,上下文也会出现切换情况。
- 一个 CPU 核同一时间只能运行一个进程
- 每个进程有近乎相等的执行时间
- 对于逻辑 CPU 而言进程调度使用轮询的方式执行,当轮询完成则回到第一个进程反复
- 进程执行消耗时间和进程量成正比
4.2.3 进程的系统调用
当进程运行在内核空间时就处于内核态,而进程运行在用户空间时则处于用户态。
- 内核空间(Kernal Space):系统内核运行的空间
- 用户空间(User Space):应用程序运行的空间
4.3 文件系统
Linux 中一切皆文件
-
文件系统负责管理持久化数据的子系统,负责把用户的文件存到磁盘硬件中
-
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 目录。
4.3.1 虚拟文件系统(VFS)
- Linux 是如何实现对用户提供统一调用接口的?
虚拟文件系统使得 Linux 可以存在多个“实际的文件系统”,比如分区1是 ext2,分区2是 ext3,分区3是 fat32。那么每个“实际的文件系统”的结构和操作方式是不一样的。用户如何操作:用 VFS 作为中间层,用户直接控制 VFS,然后 VFS 去控制各个文件系统。
- 对应用层提供一个标准的文件操作接口
- 对文件系统提供一个标准的文件接入接口
4.3.2 文件基本操作
-
查看文件系统类型
# df 命令报告文件系统磁盘利用率 df -T # mount 命令是挂载文件系统的,不带任何参数运行,会打印包含文件系统类型在内的磁盘分区信息 mount -
文件基本操作
# 查看文件夹下的内容 ls # 创建文件夹 mkdir demo # 移动 demo 文件夹 mv demo /home # 创建空文件 touch file.txt # 复制文件 cp file.txt file_bak.txt
4.3.3 文件读取流程
4.4 用户权限
4.4.1 用户账户
Linux 是一个多用户的系统,我们可以多个用户同时登陆 Linux
-
用户账户
- 普通用户账户:在系统中进行普通作业
- 超级用户账户:在系统中对普通用户和整个系统进行管理
-
用户组
- 标准组:可以容纳多个用户
- 私有组:只有用户自己
4.4.2 文件权限
-
用户权限关于用户组:
- 所有者:文件的所有者
- 所在组:文件的所有者所在的组
- 其他人:除文件所有者及所在组外的其他人
-
每个用户对于文件都有不同的权限,包括读(R)、写(W)、执行(X)
4.4.3 查看用户信息
# 查看当前登录用户信息
w
# 查看当前用户所属的组
groups
# 查看用户的uid信息
id xxx
4.4.4 用户权限操作
# 在根目录创建一个文件夹,查看当前用户拥有文件夹的权限
cd / && mkdir demo && ls -ld demo
# 创建一个用户,并赋予可写操作
sudo useradd ceshi
# 设置用户密码
sudo passwd ceshi
# 切换 ceshi 用户登录
su ceshi
# 进入 demo 文件夹
cd demo
# 创建 index.js 文件,提示无权限,需要给 ceshi 用户 demo 文件夹的权限
touch index.js
# demo 文件夹写权限赋予其他人
sudo chmod o+r ./demo
# 切换 ceshi 用户登录
su ceshi
# 进入 demo 文件夹
cd demo
# 创建 index.js 文件成功
touch index.js
5. Linux 系统软件包管理器
5.1 软件包
-
软件包:通常指一个应用程序,可以是一个 GUI 程序、命令行工具或(其他软件程序需要的)软件库
-
软件包管理
- 底层工具:主要用来处理安装和删除软件包等任务,如:DPKG,RPM
- 上层工具:主要用于数据的搜索任务和依赖解析任务,如APT,YUM,DNF
5.2 软件包管理工具
| 操作系统 | 格式 | 软件包管理系统 | 前端工具 |
|---|---|---|---|
| Debain | .deb | dpkg | apt,apt-get |
| Ubuntu | .deb | dpkg | apt,apt-get |
| CentOS | .rpm | rpm | yum |
| Fedora | .rpm | rpm | dnf |
| openSUSE | .rpm | rpm | zypper |
5.3 Debain 配置软件源
通常 Debain 系的 Linux 软件源配置文件:/etc/apt/sources.list
/dists:查看系统代号
/pool:查看软件分支