Linux 系统构成
从功能维度划分
-
系统调用接口:为上层应用程序准备好的一系列可调用的接口
-
内核:负责具体控制硬件的运行
应用程序本身是无法操作硬件的,但凡想操作硬件都要给系统发请求
操作系统的两种工作状态:
- 用户态: 运行的系统接口代码在与应用程序打交道
- 内核态:运行的是系统的内核代码在与硬件打交道
从文件维度划分
操作系统源自 iso 镜像文件,镜像文件本质就是一个压缩包,压缩里放着一系列的系统的文件 这些文件分为两大类:bootfs+rootfs
- Bootfs(系统启动前) 包含启动文件(bootloader 程序,不是以文件的形式存在,是直接写入硬盘的第一个扇区/mbr)、内核文件 (/boot/vm…)
- Rootfs(系统启动后) 本质就是一堆文件夹/文件
Linux 系统的启动顺序
程序与进程 程序:就是一个或者一系列代码文件—》静态 进程:就是一个程序的运行过程——–》动态
进程代表的是程序的运行过程,而负责运行整个过程是操作系统,所以进程是操作系统的最核心的概念没有之一
- 加电,先启动 bios
- Bios 负责找到启动盘
- Bios 读取启动盘第一块扇区 mbr 主引导记录(放着的是 bootloder 程序)放入内存,让 cpu 来执行,bootloader 成功启动
- Bootloader 启动之后,负责从硬盘中找到内核文件读入内存,并启动,此时操作系统就启动起来
操作系统启动起来负责管理一系列进程,这些进程可以分为两大类 内核先启动一个老祖宗程序,pid 为 0
0号进程负责运行两个顶级程序,产生两个顶级的进程 运行 init 程序,pid 号为 1:是所有用户态进程的祖宗 运行 kthreadd 程序,pid 2:是所有内核态进程的祖宗
Linux 系统启动级别
- 0: 关机 poweroff. target
- 1:单用户模式 rescue.target
- 2:多用户模式(没有文件系统,没有网络) multi-user.target
- 3:多用户模式(命令行) multi-user.target
- 4:没有被使用 multi-user.target
- 5:图形化界面 graphical.target
- 6:重启 reboot.target init 0 关机
Shell 解释器介绍
在默认启动级别为3的情况下,linux系统启动之后默认会启动一个 命令解释器铺满全屏幕给你去(称之为字符终端),只能在里面敲命令
Linux系统中的命令解释器称之为shell,翻译为壳,表达了对系统接口封装的思想
具体来说shell解释器分为很多种类,默认用的bash这种
Shell 交互式环境
|
|
Shell 脚本
脚本就是一个简单的程序(整个程序就是一个文件) 把你执行某个任务需要的 10 条命令扔到一个文件里,该文件就是一个 shell 脚本
Shell 命令基本语法
ls -l /boot
三大组成部分:
- ls 命令,代表要做什么事
- -l 选项,控制命令具体怎么做(可选)
- /boot 参数,命令具体操作的目标(可选)
bash 解释器交互式环境的一些特性/快捷方式
|
|
Shell 命令的种类和优先级
Shell 解析命令的顺序:
带路径 > 别名 > 复合命令 > 函数 > 内置命令 > Hash 缓存 > PATH 查找
带路径的命令
- 绝对路径: 从根目录开始,例如 /bin/ls
- 相对路径: 相对于当前目录,例如 ./ls 或 b/c/1.txt
- . 表示当前目录,例如 ./b/c/1.txt 等同于 b/c/1.txt
- .. 表示上一级目录
别名 alias
通过 alias 命令定义的快捷命令,优先级高于后续类型
- 定义:
alias xxx="ls /etc/sysconfig/network-scripts;echo 123;echo 456"
- 取消:
unalias xxx
复合命令 Compound Commands
-
包含循环或条件语句的结构化命令。
示例:
- for((i=0;i<3;i++)); do echo 66666; done
- if 语句
函数 Function
|
|
内置命令 Built-in Commands
- Shell 解释器内置的命令,例如 cd、pwd
- 查看类型: type cd(返回 cd is a shell builtin)
hash 缓存
-
Shell 会缓存最近使用的命令路径到内存,提升下次执行效率。
示例:
- 查看: hash
- 清空: hash -r
环境变量 PATH
-
环境变量:在系统任意位置都能访问到,是全局有效的变量
-
当命令不带路径时,Shell 在 PATH 中的目录依次查找 (负责兜底)
-
PATH 是一组用冒号分隔的目录,例如 /usr/bin:/bin
示例:
- 查看: echo $PATH
- 定义全局变量: export name=“egon”
想要不加前缀去调用自定义脚本 xxx 的方法
- 方法一:把该脚本移动到 PATH 的某个文件夹下面
- 方法二:把该脚本所在的文件夹添加到PATH里
一些简单的常用命令
设置主机名
|
|
设置默认启动级别
|
|
查看ip地址(设置ip地址会在网络配置章节里详细介绍)
|
|
用date命令操作时间
|
|
两种时间
1、系统时间:我们刚刚用 date -s 设置的是系统时间
2、硬件时间:存在 CMOS 中,开机时会读入内存作为系统的初始时间
如果刚 date -s
设置完时系统立即崩溃,系统还没来得及将刚改的时间写入 CMOS 中,则本次设置无效为了解决了改问题,可以在 date -s
之后理解执行 hwclock –w
这个命令强制把系统时间写入 CMOS。