常用 Linux 命令
| 命令 | 说明 | 常用参数 | 参数说明 |
|---|---|---|---|
w |
显示当前登录用户的信息 | -h -l -s |
-h 不显示标题行;-l 显示完整登录名;-s 简洁模式 |
who |
显示当前登录用户的信息 | -a -b -l -m -r -s -u |
-a 显示所有;-b 启动时间;-l 登录进程;-m 当前终端用户;-r 运行级别;-u 空闲时间 |
echo |
在终端显示文本 | -e 字符串 |
-e 启用反斜杠转义(如 \n 换行、\b 退格;不同实现可能默认不启用) |
date |
显示或设置系统日期和时间 | +格式 |
格式如 %Y-%m-%d %H:%M:%S |
passwd |
修改用户密码 | [用户名] | 省略用户名则修改当前用户密码 |
rpm |
Red Hat 包管理器 | -i -e -q -U -V |
-i 安装;-e 卸载;-q 查询;-U 升级;-V 验证 |
service |
管理系统服务 | 服务名 [操作] |
start 启动;stop 停止;restart 重启;status 状态;reload 重载 |
usermod |
修改用户信息 | -L -U |
-L 锁定账户;-U 解锁账户 |
chage |
修改用户密码状态 | -l -M -m -E |
-l 查看;-M 最大有效天数;-m 最小间隔天数;-E 过期日期 |
su |
切换用户身份 | [用户名] |
省略用户名则切换到 root 用户 |
groupadd |
添加新用户组 | 组名 |
- |
groupdel |
删除用户组 | 组名 |
- |
groupmod |
修改用户组信息 | -n 新组名 旧组名 |
- |
gpasswd |
管理用户组密码和成员 | -a 用户 组名 |
-a 添加用户到组 |
cat |
查看文件内容 | 文件名 |
- |
more |
分页显示文件内容 | 文件名 |
- |
head |
显示文件开头部分内容 | -n 行数 文件名 |
-n 指定行数,默认 10 行 |
tail |
显示文件结尾部分内容 | -n 行数 文件名 |
-n 指定行数,默认 10 行 |
touch |
创建空文件或更新文件时间戳 | 文件名 |
- |
grep |
文本搜索工具 | -i -v -c -n -l -r |
-i 忽略大小写;-v 反向匹配;-c 计数;-n 显示行号;-l 列出文件名;-r 递归搜索 |
sed |
流编辑器,用于文本替换 | -i 's/旧字符串/新字符串/g' 文件名 |
-i 直接修改文件;s 替换命令;g 全局替换 |
awk |
文本处理工具 | '条件 {动作}' 文件名 |
条件和动作可自定义,如打印特定列 |
cp |
复制文件或目录 | -r -i -u |
-r 递归复制目录;-i 交互式复制;-u 仅复制更新的文件 |
mv |
移动或重命名文件或目录 | -i |
-i 交互式移动 |
rm |
删除文件或目录 | -r -f -i |
-r 递归删除目录;-f 强制删除;-i 交互式删除 |
sort |
排序文件内容 | -n -r -u |
-n 数值排序;-r 逆序;-u 去重 |
wc |
统计文件的行数、字数和字符数 | -l -w -c |
-l 行数;-w 字数;-c 字符数 |
mkdir |
创建目录 | -p 目录名 |
-p 创建多级目录 |
rmdir |
删除空目录 | 目录名 |
- |
pwd |
显示当前工作目录 | - | - |
ln |
创建链接文件 | -s 目标文件 链接名 |
-s 创建软链接,不加则创建硬链接 |
chmod |
修改文件或目录权限 | 模式 文件名 |
模式可用数字或符号表示权限(r-4, w-2, x-1)。不考虑 umask 时,新建普通文件的最大权限为 666(不会默认带执行位),目录的最大权限为 777 |
umask |
设置文件创建权限掩码 | umask 值 |
值为三位八进制数,表示新建文件或目录时默认权限的屏蔽值 |
chown |
修改文件或目录所有者 | 用户:组 文件名(-R) |
-R 递归修改所有子文件及目录 |
chgrp |
修改文件或目录所属组 | 组名 文件名(-R) |
-R 递归修改所有子文件及目录 |
ps |
显示当前进程信息 | -e -f -u 用户名 |
-e 显示所有进程;-f 完整格式;-u 指定用户进程 |
top |
实时显示系统进程和资源使用情况 | - | - |
pstree |
以树状结构显示进程关系 | -p PID |
-p 指定进程 ID |
kill |
终止进程 | -9 PID |
-9 强制终止进程 |
lsof |
列出打开的文件 | -i -u 用户名 |
-i 显示网络文件;-u 指定用户文件 |
nice |
设置进程优先级 | -n 值 命令 |
-n 优先级值,范围 -20(最高)到 19(最低) |
renice |
修改运行中进程的优先级 | -n 值 -p PID |
-n 优先级值,-p 进程 ID |
mount |
挂载文件系统 | -t 类型 设备 目录 |
-t 指定文件系统类型 |
umount |
卸载文件系统 | 目录或设备 |
- |
fdisk |
磁盘分区工具 | -l 设备 |
-l 列出分区表 |
parted |
磁盘分区工具,支持 GPT 分区表 | 设备 |
- |
df |
显示文件系统磁盘空间使用情况 | -h -T |
-h 以人类可读格式显示;-T 显示文件系统类型 |
du |
显示文件或目录的磁盘使用情况 | -h -s 目录 |
-h 以人类可读格式显示;-s 仅显示总计 |
fsck |
检查和修复文件系统 | -y 设备 |
-y 自动修复错误 |
free |
显示内存使用情况 | -h |
-h 以人类可读格式显示 |
vmstat |
显示虚拟内存统计信息 | - | - |
dmesg |
显示系统启动和内核消息 | \| less |
使用管道分页查看 |
lsblk |
列出块设备信息(常见的块设备有硬盘、磁盘、光盘驱动器等) | -f |
-f 显示文件系统信息 |
quota |
管理磁盘配额 | -u 用户 -g 组 |
-u 用户配额;-g 组配额 |
quotacheck |
检查磁盘配额 | -avug |
-a 检查所有文件系统;-v 详细信息;-u 用户配额;-g 组配额 |
quotaon |
启用或禁用磁盘配额 | -u -g 设备 |
-u 用户配额;-g 组配额 |
quotaoff |
禁用磁盘配额 | -u -g 设备 |
-u 用户配额;-g 组配额 |
ifconfig |
配置网络接口 | 接口名 up/down |
up 启用接口;down 禁用接口 |
ping |
测试网络连通性 | -c 次数 目标地址 |
-c 指定发送数据包的次数 |
host |
域名解析工具 | 域名 |
- |
traceroute |
跟踪数据包经过的路由路径 | 目标地址 |
- |
第 1 章 Shell 编程
1.1 Shell 编程概述
-
Shell 的本质
Shell 是用 C 语言编写的程序,是连接用户和 UNIX/Linux 内核的桥梁。 -
Shebang 行
#!/bin/bash说明脚本使用的 Shell 类型,通常放在脚本第一行,用于调用相应的解释程序。 -
注释符
#是单行注释符,用来说明程序的功能、结构、算法和变量的作用,增加程序可读性。 -
文件权限和执行
Linux 中创建的文件默认不可执行,需要修改权限添加可执行权限后,才能通过./文件名直接运行。
创建文件:touch 文件名 -
查看 Shell 种类
使用命令cat /etc/shells查看系统支持的 Shell 类型。 -
环境变量 PATH
脚本文件是否能够执行与环境变量 PATH 有关。PATH 的值决定了 Shell 在哪些目录中寻找命令或可执行程序,当用户运行命令时在这些目录下按顺序依次搜寻。 -
脚本运行方式(3 种)
- 直接运行:脚本权限设置为可执行,在提示符下直接运行
- 作为参数:将脚本名作为参数传递给 Shell 程序
- 重定向输入:以输入重定向方式传递给 bash
1.2 Shell 基础
1.2.1 通配符
文件名的扩展称为通配(Globbing),常见通配符:
| 通配符 | 说明 |
|---|---|
* |
匹配任意字符的 0 次或多次出现 |
? |
匹配任意单个字符 |
[ ] |
匹配该字符组所限定的任何一个字符 |
[^ ] 或 [! ] |
匹配不在该字符组中的任何一个字符 |
{ } |
匹配其中一个指定的字符串(如 {string1,string2,…} ) |
1.2.2 引号和转义
转义字符 </code>:将特殊字符按普通含义执行。
Shell 中有 3 种引用字符:
-
单引号
' '
引用一串字符,所有字符都作为普通字符对待。 -
双引号
" "
引用一串字符,但保留$、</code> 和倒引号`的特殊含义:$代表引用变量的值`代表引用命令
-
倒引号
` `
被 Shell 解释为命令行,Shell 会先执行该命令,并以其输出结果取代整个倒引号部分。
1.2.3 输入/输出重定向
1. 标准输入重定向
| 语法 | 说明 |
|---|---|
command < file |
将文件作为命令的输入 |
command << 分界符 |
从标准输入读入,直到遇见分界符才停止 |
示例:wc -l < file 统计 file 文件的行数
2. 标准输出重定向
| 语法 | 说明 |
|---|---|
command > file |
覆盖方式,输出到文件(不存在则创建,存在则覆盖) |
command >> file |
追加方式,输出到文件 |
示例:cat file1 file2 > file3
3. 文件描述符
输出重定向的完整写法是 fd>file 或 fd>>file,fd 表示文件描述符。不指定时默认为 1。
| 描述符 | 名称 | 说明 |
|---|---|---|
| 0 | stdin | 标准输入 |
| 1 | stdout | 标准输出 |
| 2 | stderr | 标准错误输出 |
4. 重定向组合
-
同时重定向正确和错误信息:
command > file 2>&1
注意:2>&之间不允许有空格 -
将结果丢弃:
command > /dev/null 2>&1
/dev/null是 Linux 系统的垃圾箱,数据被丢弃且无法恢复
1.2.4 命令执行操作符
| 操作符 | 说明 | 示例 |
|---|---|---|
; |
顺序执行:依次执行多条命令 | cmd1 ; cmd2 ; cmd3 |
&& |
逻辑与:前一条成功才执行下一条 | cmd1 && cmd2 |
|| |
逻辑或:前一条失败才执行下一条 | cmd1 || cmd2 |
1.2.5 小括号和大括号
Shell 的两种模式:
- 交互 Shell:用户输入命令后,Shell 显示结果和提示符,始终在前台等待用户
- 非交互 Shell:在交互 Shell 中运行外部命令或脚本时,会创建子 Shell,运行结束后子 Shell 进程结束
小括号 ( ) 和大括号 { }:
- 都可以将若干命令括起来,组合在一起,逻辑上视为一条命令
- 可用于创建子 Shell 或组合命令
后台进程:
- 后台进程在运行过程中与用户无交互,无交互是指不响应用户的输入和终端控制信号
- 后台命令的结果仍会输出到显示器上
第 2 章 用户管理
2.1 用户与用户组管理
-
用户信息存储
用户名和 ID 的对应关系存储在/etc/passwd文件中。 -
用户主目录
管理员创建用户时,默认在/home目录下创建用户主目录。 -
密码信息
存放用户密码信息的目录是/etc。
2.2 用户和用户组管理相关的文件
| 文件 | 权限 | 说明 |
|---|---|---|
/etc/passwd |
rw-r--r-- |
用户基本信息 |
/etc/shadow |
rw------- |
用户密码信息 |
第 3 章 网络配置
3.1 管理网络接口
计算机的基本网络参数
| 参数 | 说明 |
|---|---|
| IP 地址 | 标识一块网卡接口,由网络号和主机号组成 |
| 子网掩码 | 确定网络部分的位数,IP 地址中对应子网掩码为 1 的位为网络部分 |
| 网关 | 用于跨区域通信 |
| DNS | 将域名和 IP 进行映射 |
Linux 联网配置步骤
- 为每个网络接口分配 IP 地址和子网掩码(Netmask)
- 配置默认网关(Gateway)
- 配置一个或多个 DNS 服务器
网络接口卡(NIC)与内核检测
- NIC 通过机器上的 PCI(Peripheral Component Interconnect)设备实现联网操作
- Linux 内核可自动检测所有连接的 PCI 设备
- 使用
lspci命令验证 PCI 设备是否被内核检测到
常用网络接口名称
| 接口名 | 类型 |
|---|---|
eth0 |
以太网 |
lo |
虚拟回环设备 |
ppp0 |
使用 PPP 协议的串口设备(调制解调器) |
tr0 |
令牌环(Token Ring) |
fddi0 |
光纤 |
网络接口相关命令
| 命令 | 说明 |
|---|---|
ifconfig -a |
检测所有已识别的网络接口信息 |
ifconfig |
仅报告活跃的网络接口或查看网卡信息 |
接口配置文件
- 接口激活脚本:
/etc/init.d/network - 接口配置文件目录:
/etc/sysconfig/network-scripts/ - 接口配置文件格式:`ifcfg- `(如 `ifcfg-eth0`)
回环接口默认配置
习惯上分配给回环接口的 IP 地址和子网掩码是 127.0.0.1/255.0.0.0
3.2 基本 IP 路由和网关
IP 网络地址分类
- 每个 IP 地址包括两个部分:网络部分和主机部分
- 子网掩码根据网络类型定义:
- A 类网络:
255.0.0.0(第 1 个 IP 字段) - B 类网络:
255.255.0.0(前 2 个字段) - C 类网络:
255.255.255.0(前 3 个字段)
- A 类网络:
以太网硬件地址
- 每个以太网接口有两个地址:IP 地址和硬件(MAC)地址
- IP 地址用于两台主机间的通信
- MAC 地址用于同一 IP 网络中不同主机间的通信
本地网络通信过程
- 确认通向同一网络地址的路径
- 确定目的机器的硬件地址
- 使用 ARP 协议(Address Resolution Protocol)进行地址解析
ARP 地址解析
| 命令 | 说明 |
|---|---|
arp -a |
检测 ARP 缓存 |
arp -n |
查看 IP 地址与 MAC 地址的映射表 |
3.3 配置 DNS 客户机
域名系统 DNS 概述
- 静态查询方式:
/etc/hosts文件存储 IP 地址与主机名的对应关系 - DNS 定义:域名系统(Domain Name System)是分布式数据库,用于将 IP 地址转换为易记的域名
- 功能:实现主机名与 IP 地址的转换,在 TCP/IP 网络中有重要地位
名称解析顺序
resolve 库解析主机名时的顺序:
- 首先执行静态查询(
/etc/hosts) - 然后查询
/etc/resolv.conf中列出的域名服务器
| 文件 | 说明 |
|---|---|
/etc/hosts |
静态主机名查询 |
/etc/resolv.conf |
动态 DNS 查询配置 |
3.4 DHCP 配置
DHCP 协议
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一种网络管理协议。
DHCP 的特点
- 通过 DHCP 获得信息的机器没有固定 IP 地址
- 每次连接接口时(用
ifup命令)动态获得 IP 地址 - 每次断开接口时(用
ifdown命令)释放 IP 地址
DHCP 客户端配置
- 在接口配置文件中将
BOOTPROTO变量设为dhcp dhclient守护进程自动管理 DHCP 通信- dhclient 接收的信息会立即应用:
- 默认网关添加到路由表
- 域名服务器写入
/etc/resolv.conf - NIS 域自动设定
3.5 配置 Web 服务器
HTTP 协议
- HTTP(Hyper Text Transfer Protocol,超文本传输协议)
- 用于客户端和服务器之间的通信
- 属于 TCP/IP 协议族
Apache Web 服务器
Apache 是实现 WWW 服务器功能的应用程序,为用户提供 Web 服务浏览功能。
3.6 配置 Telnet
Telnet 是常用的远程控制 Web 服务器的方法。
3.7 其他网络设置
主机名配置
| 命令 | 说明 |
|---|---|
hostname |
检验机器的主机名,可动态分配主机名 |
系统网络配置文件
/etc/sysconfig/network:记录通用联网配置信息,定义整合到启动过程中的 shell 变量
网络服务管理
网络配置可用 service 服务来管理:
service network stop # 停止网络
service network start # 启动网络
3.8 网络诊断工具
网络连通性测试
| 命令 | 说明 |
|---|---|
ping |
测试本机与远程主机的连通性,检测底层 IP 连接性 |
host |
直接执行 DNS 查询,使用 /etc/resolv.conf 中的域名服务器 |
traceroute |
显示数据包在路由器间的传递路径 |
网络活动监视
| 命令 | 说明 |
|---|---|
tcpdump |
监视网络,显示独立数据包的信息概要。按 Ctrl+C 停止 |
网络问题诊断
用 ifconfig 检测所有活跃的网络接口,诊断网络配置问题。
3.9 网络配置知识点总结
常见问题与答案
| 知识点 | 答案/说明 |
|---|---|
| 回环接口 IP/掩码 | 127.0.0.1/255.0.0.0 |
| 定义主机名与 IP 转换 | /etc/hosts |
| 设置内核主机名 | hostname station.example.com |
| 启用路由功能的配置文件 | /etc/sysctl.conf |
| 启用路由的参数 | net.ipv4.ip_forward = 1 |
| DNS 查询工具 | host(或 dig / nslookup) |
| ifconfig 与配置文件区别 | ifconfig 临时改变参数,重启后失效;配置文件永久有效 |
| 网络接口配置文件前缀 | ifcfg |
| 配置文件中的接口定义变量 | DEVICE 变量定义接口配置信息 |
网络抓包示例
只在端口 80 抓取 HTTP 协议数据包:
tcpdump -i any port 80 -w http.pcap
路由转发配置
编辑 /etc/sysctl.conf 文件:
# 关闭路由转发
net.ipv4.ip_forward = 0
# 开启路由转发
net.ipv4.ip_forward = 1
第 4 章 系统服务与日志
4.1 Linux 系统服务
系统服务定义
系统服务,有时也称为守护程序,具有以下特点:
- 在 Linux 系统启动时自动加载
- 在 Linux 系统退出时自动停止
- 在后台持续运行,不占用终端
4.2 启动和关闭服务
服务分类
根据守护程序的启动与管理方式,可分为两大类:
| 服务类型 | 说明 | 特点 |
|---|---|---|
| 可独立启动的服务 | Stand Alone 服务 | 独立运行,启动快速 |
| 通过总管程序管理的服务 | Super Daemon 服务 | 由 inetd 或 xinetd 统一管理 |
独立服务启动方式
| 启动方式 | 说明 |
|---|---|
| 启动脚本方式 | 使用 /etc/init.d/ 目录中的启动脚本启动服务 |
| service 命令方式 | 使用 service 命令启动独立的服务 |
常用服务管理命令
service 服务名 start # 启动服务
service 服务名 stop # 停止服务
service 服务名 restart # 重启服务
service 服务名 status # 查看服务状态
service 服务名 reload # 重新加载配置
4.3 查看日志
日志文件管理
| 组件 | 说明 |
|---|---|
| rsyslogd 服务 | 系统中绝大多数日志文件由此服务统一管理 |
| Apache 日志 | Apache 服务日志由 Apache 软件自己产生并记录 |
| 日志格式 | Apache 日志文件格式与系统默认日志格式一致 |
日志文件位置
/var/目录:用来保存系统动态数据的目录/var/log/目录:系统日志文件的保存位置
常见日志文件
| 日志文件 | 说明 |
|---|---|
/var/log/messages |
系统启动消息、内核消息等 |
/var/log/secure |
安全相关的日志信息(登录、sudo 等) |
/var/log/cron |
定时任务执行的日志 |
/var/log/audit/ |
审计日志 |
/var/log/httpd/ |
Apache Web 服务器日志 |
4.4 管理日志
日志配置管理
rsyslogd 服务依赖其配置文件 /etc/rsyslog.conf 来确定各个服务不同等级的日志信息被记录的位置。
rsyslog 配置概述
| 项目 | 说明 |
|---|---|
| 配置文件 | /etc/rsyslog.conf |
| 作用 | 定义不同服务和日志级别的日志去向 |
| 管理对象 | 系统日志的统一管理和分类 |
日志级别
系统日志通常有以下级别(从低到高):
| 级别 | 值 | 说明 |
|---|---|---|
| DEBUG | 0 | 调试信息 |
| INFO | 1 | 一般信息 |
| NOTICE | 2 | 通知信息 |
| WARNING | 3 | 警告信息 |
| ERR | 4 | 错误信息 |
| CRIT | 5 | 严重错误 |
| ALERT | 6 | 告警信息 |
| EMERG | 7 | 紧急情况 |
日志配置示例
在 /etc/rsyslog.conf 中指定日志目的地:
# 格式:facility.level action
mail.* /var/log/maillog
cron.* /var/log/cron
auth,authpriv.* /var/log/secure
第 5 章 VI 编辑器
5.1 VI 编辑器概述
VI 是 Linux 中最基础、最常用的文本编辑器,具有强大的功能和高效的编辑能力。
5.2 VI 工作模式
VI 编辑器有 3 种工作模式:
| 模式 | 说明 | 切换方式 |
|---|---|---|
| 命令模式 | 默认进入模式,用于执行各类操作命令 | 按 Esc 键 |
| 文本编辑模式 | 用于输入和编辑文本内容 | 在命令模式下按 i、a、o 等键 |
| 末行模式 | 用于执行保存、搜索、替换等高级操作 | 在命令模式下按 : 键 |
5.3 进入和退出 VI
进入 VI
| 命令 | 说明 |
|---|---|
vi |
启动 VI 编辑器 |
vi 文件名 |
打开指定文件,不存在则创建 |
vi+ 文件名 |
进入 VI,光标停在文件最后一行 |
vi+n 文件名 |
进入 VI,光标停在文件第 n 行 |
vi+/字符串 文件名 |
进入 VI,光标停在字符串第一次出现处 |
退出 VI
| 命令 | 说明 |
|---|---|
ZZ |
在命令模式下按两次 Z 键,保存并退出 |
:w |
在末行模式下,保存文件但不退出 |
:q |
在末行模式下,不保存直接退出(有改动会报错) |
:q! |
在末行模式下,强制退出,放弃所有改动 |
:wq |
在末行模式下,保存并退出 |
5.4 文本编辑操作
文本插入
在命令模式下输入以下命令进入文本编辑模式:
| 命令 | 说明 |
|---|---|
i |
在光标处插入文本 |
a |
在光标后插入文本 |
o |
在下一行插入一个空行,光标移到行首 |
5.5 光标移动
基本移动
| 命令 | 说明 |
|---|---|
$ |
光标移到当前行的行尾 |
nw |
光标右移 n 个字(或单词) |
w |
光标右移 1 个字(或单词) |
nb |
光标左移 n 个字(或单词) |
b |
光标左移 1 个字(或单词) |
按句或段移动
| 命令 | 说明 |
|---|---|
( |
光标移到本句句首,若已在句首则移到前一句句首 |
) |
光标移到下一句句首 |
{ |
光标移到本段段首,若已在段首则移到前一段段首 |
} |
光标移到下一段段首 |
文件内移动
| 命令 | 说明 |
|---|---|
1G |
光标移到文件首行 |
G |
光标移到文件末行 |
nG |
光标移到文件第 n 行 |
Ctrl+G |
报告光标当前位置信息 |
5.6 删除操作
单个字符删除
| 命令 | 说明 |
|---|---|
x |
删除光标位置的一个字符 |
nx |
删除从光标开始的 n 个字符 |
字词删除
| 命令 | 说明 |
|---|---|
dw |
删除从光标开始的一个字 |
ndw |
删除从光标开始向右的 n 个字 |
db |
删除光标左边的一个字符 |
ndb |
删除从光标开始向左的 n 个字符 |
行内删除
| 命令 | 说明 |
|---|---|
d0 |
删除从光标前的字符到行首的所有字符 |
d$ |
删除从光标到行尾的所有字符 |
行删除
| 命令 | 说明 |
|---|---|
dd |
删除光标所在的行 |
ndd |
删除从当前行开始的 n 行 |
句段删除
| 命令 | 说明 |
|---|---|
d( |
删除从当前字符到句首的所有字符 |
d) |
删除从当前字符到句尾的所有字符 |
d{ |
删除从当前字符到段首的所有字符 |
d} |
删除从当前字符到段尾的所有字符 |
撤销操作
| 命令 | 说明 |
|---|---|
u |
撤销前一次的操作 |
5.7 查找与替换
查找文本
在命令模式下:
| 命令 | 说明 |
|---|---|
?字符串 |
查找与字符串对应的内容(区分大小写) |
n |
查找下一个匹配项 |
N |
查找上一个匹配项 |
替换文本
在末行模式下:
| 命令 | 说明 |
|---|---|
s/查找/替换 |
在当前行替换第一个匹配的字符串 |
s/查找/替换/g |
在当前行替换所有匹配的字符串 |
1,m s/查找/替换/g |
在第 1 行到第 m 行替换所有匹配的字符串 |
1,$ s/查找/替换/g |
在整个文件中替换所有匹配的字符串 |
5.8 复制与粘贴
复制操作
| 命令 | 说明 |
|---|---|
yw |
复制光标所在位置到字尾的字 |
nyw |
复制光标开始的 n 个字 |
yb |
从光标向左复制一个字符 |
nyb |
从光标向左复制 n 个字符 |
y0 |
复制从光标前的字符到行首的所有字符 |
y$ |
复制从光标到行末的所有字符 |
yy |
复制当前行 |
nyy |
复制从当前行开始的 n 行 |
粘贴操作
| 命令 | 说明 |
|---|---|
p |
在光标后插入复制的文本 |
P |
在光标前插入复制的文本(大写 P) |
np |
在光标后插入复制的文本,复制 n 次 |
nP |
在光标前插入复制的文本,复制 n 次 |
复制示例
复制 example.txt 所有文本步骤:
- 将光标移到文件开头(
1G) - 在命令模式下输入
3yy(复制 3 行) - 最后一行显示 "3 lines yanked" 表示复制成功
5.9 缓冲区管理
数字编号缓冲区
- VI 使用 9 个临时缓冲区,编号从 1 到 9
- 每次删除或复制操作,新内容存到缓冲区 1,旧内容依次后移
- 使用
np命令恢复缓冲区内容(如9p表示粘贴缓冲区 9 的内容)
命名缓冲区
- 26 个命名缓冲区,用小写字母 a 到 z 命名
- 命名缓冲区内容保持不变,直到用户指定该缓冲区进行新的删除或复制操作
- 命名缓冲区格式:
缓冲区名+命令wdd:删除当前行到缓冲区 wz3yy:复制 3 行到缓冲区 z
5.10 编辑多个文件
多文件编辑
- 启动 VI 时可指定多个文件名:
vi file1 file2 file3 - 使用
n命令切换到下一个文件 - 若当前文件已修改,显示提示 "No write since last change"
- 使用
n!命令忽略提示强制切换 - 使用
ar命令查看文件名列表
5.11 VI 编辑器的设置
set 命令概述
set 命令用来设置 VI 的选项,选项分为 3 类:
| 选项类型 | 说明 | 示例 |
|---|---|---|
| 布尔触发器 | 可打开或关闭,像开关 | set ai 打开,set noai 关闭 |
| 数字式选项 | 接受数字值 | set C=1 |
| 串选项 | 接受字符串值 | set C=yes |
set 命令基本用法
| 命令 | 说明 |
|---|---|
set all |
显示所有选项 |
set |
只显示修改过的选项 |
set C? |
显示选项 C 的值 |
常用 VI 参数选项
| 选项 | 缩写 | 说明 |
|---|---|---|
autoindent |
ai |
新行与前一行行首对齐 |
ignorecase |
ic |
搜索时忽略大小写 |
magic |
- | 允许搜索时使用特殊字符 |
number |
nu |
显示行号 |
report |
- | 通知用户上一个命令影响的行号 |
scroll |
- | 设定 Ctrl+D 键翻动的行数 |
shiftwidth |
sw |
设置缩进空格数 |
showmode |
smd |
屏幕右下角显示编辑模式 |
terse |
- | 显示简短的错误信息 |
第 6 章 Emacs 编辑器
6.1 Emacs 编辑器概述
Emacs 是另一个功能强大的文本编辑器,具有完整的编程环境和扩展能力。
安装 Emacs
在 Ubuntu 系统中安装:
sudo apt-get install emacs
6.2 Emacs 的启动
启动命令
| 命令 | 说明 |
|---|---|
emacs |
启动 Emacs 编辑器 |
emacs 文件名 |
启动 Emacs 并打开指定文件 |
Emacs 界面组成
- 标题栏:显示文件名和 Emacs 版本信息
- 菜单栏:提供各类操作菜单
- 窗口区域:文本编辑主区域
- 模式行:显示状态信息(倒数第二行)
- 回显行:显示命令执行结果和用户输入
模式行说明
模式行格式:-:--- buf pos L# (Pattern)
| 字段 | 说明 |
|---|---|
| 冒号后 2 个字符 | 缓冲区文本状态:--(未编辑)、**(已修改)、%%(只读未修改)、%*(只读已修改) |
buf |
缓冲区名称,一般为文件名 |
pos |
位置指示:All(显示整个文件)、Top(文件开始)、Bot(文件末尾)、NN%(百分比) |
L# |
字母 L 后跟当前行号 |
(Pattern) |
有效的缓冲区模式(Fundamental、Text、Lisp、C 等) |
6.3 文件与缓冲区操作
文件操作
| 快捷键 | 说明 |
|---|---|
Ctrl+X Ctrl+S |
保存文件(保存当前缓冲区) |
Ctrl+X Ctrl+C |
退出 Emacs(若有修改会提示是否保存) |
Ctrl+X Ctrl+W |
另存为文件 |
Ctrl+X Ctrl+F |
搜索并打开文件 |
Ctrl+X Ctrl+V |
打开另一个文件以替换当前打开的文件 |
Ctrl+X Ctrl+I |
在光标所在处插入文件 |
缓冲区操作
| 快捷键 | 说明 |
|---|---|
Alt+X |
执行扩展命令(M-x),例如 M-x recover-file 恢复自动保存内容 |
Ctrl+X Ctrl+B |
切换缓冲区 |
Ctrl+X Ctrl+S |
保存当前缓冲区 |
Ctrl+/ |
撤销(undo) |
Ctrl+G |
取消当前命令(Quit) |
6.4 Emacs 的退出
退出方式
| 操作 | 说明 |
|---|---|
Ctrl+X Ctrl+S 后 Ctrl+X Ctrl+C |
保存文件并退出 Emacs |
直接 Ctrl+X Ctrl+C |
退出 Emacs(若有修改会提示是否保存) |
Ctrl+X Ctrl+W |
另存为文件后退出 |
6.5 Emacs 的基本操作
光标移动
| 快捷键 | 说明 |
|---|---|
Ctrl+F |
将光标向前移动一个字符 |
Ctrl+B |
将光标向后移动一个字符 |
Ctrl+P |
将光标移到上一行 |
Ctrl+N |
将光标移到下一行 |
Ctrl+A |
将光标移到当前行行首 |
Ctrl+E |
将光标移到当前行行尾 |
Ctrl+V |
将光标向前移动一屏 |
Alt+V |
将光标向后移动一屏 |
Alt+F |
将光标向前移动一个单词 |
Alt+B |
将光标向后移动一个单词 |
Alt+< |
将光标移到文本开头 |
Alt+> |
将光标移到文本末尾 |
删除操作
| 快捷键 | 说明 |
|---|---|
Backspace |
删除光标前的一个字符 |
Ctrl+D |
删除光标处的字符 |
Ctrl+X Ctrl+U |
撤销上次修改 |
Alt+D |
删除光标后的一个单词 |
Ctrl+K |
删除从光标到该行行尾的所有字符 |
Ctrl+X Backspace |
删除前一句 |
Ctrl+W |
删除两个位置间的所有文本 |
选区和重排
| 快捷键 | 说明 |
|---|---|
Ctrl+Space |
在当前点位置设置标记 |
Ctrl+X Ctrl+X |
互换光标点和标记的位置 |
Ctrl+Y |
在光标位置插入被删除的文本 |
搜索操作
| 快捷键 | 说明 |
|---|---|
Ctrl+S |
向前递增搜索 |
Ctrl+R |
向后递增搜索 |
替换操作
使用 Alt+Shift+5 进入替换模式:
- 输入要搜索的字符串,按 Enter
- 输入要替换的字符串,按 Enter
| 按键 | 说明 |
|---|---|
Space 或 Y |
替换当前匹配并进入下一匹配 |
Delete 或 N |
忽略此次匹配进入下一匹配 |
,(逗号) |
显示替换结果 |
Enter 或 Q |
直接退出 |
.(句号) |
替换当前匹配并退出 |
! |
直接替换剩下的所有匹配 |
^ |
回到前一匹配处 |
大小写转换
| 快捷键 | 说明 |
|---|---|
Alt+U |
将整个单词转为大写 |
Alt+L |
将整个单词转为小写 |
Alt+C |
将首字母改为大写 |
Ctrl+X Ctrl+U |
将指定区域改为大写 |
Ctrl+X Ctrl+L |
将指定区域改为小写 |
其他操作
| 快捷键 | 说明 |
|---|---|
Ctrl+H |
调用 Emacs 帮助 |
Ctrl+X 2 |
将当前窗口水平分割为两个 |
Ctrl+X 3 |
将当前窗口垂直分割为两个 |
Ctrl+X > |
向右滚动当前窗口 |
Ctrl+X < |
向左滚动当前窗口 |
Ctrl+X 0 |
删除当前窗口 |
Ctrl+X O |
将光标放在其他窗口 |
Ctrl+X 1 |
删除当前窗口外的所有窗口 |
6.6 Emacs 编译并运行 C/C++ 程序
启动 Emacs
emacs -nw
编辑和编译程序步骤
- 打开文件:
Ctrl+X Ctrl+F,选择test.c - 保存文件:
Ctrl+X Ctrl+S - 进入终端:
Alt+X(M-x),输入eshell命令 - 编译程序:输入
gcc test.c -o test - 运行程序:输入
./test
第 7 章 OpenSSH
7.1 OpenSSH 概述
OpenSSH 定义
OpenSSH 是安全 Shell 协议(Secure Shell,简称 SSH)的免费开源实现。
OpenSSH 的用途
- 远程控制和管理系统
- 在计算机之间安全传送文件
- 所有传输的数据都使用非对称加密技术(RSA)加密
OpenSSH 组成
- 服务端后台程序:sshd
- 客户端工具:ssh、scp、sftp 等
7.2 安装 OpenSSH
检查安装状态
rpm -qa openssh*
启动服务
service sshd start
开启防火墙端口
sudo firewall-cmd --zone=public --add-port=22/tcp --permanent
7.3 配置 OpenSSH
主配置文件
- 位置:
/etc/ssh/sshd_config - 默认 SSH 端口:
Port 22
常见配置选项
| 选项 | 说明 | 示例 |
|---|---|---|
Port |
SSH 服务监听的端口 | Port 22 |
7.4 OpenSSH 使用
SSH 文件传输协议
| 协议 | 说明 |
|---|---|
| SFTP | 安全文件传送协议,为文件传输提供安全加密方法 |
| SCP | 远程文件复制协议,复制过程是加密的 |
第 8 章 系统程序开发
8.1 GCC 编译器
8.1.1 C 语言程序的编译过程
GCC 编译过程分为 4 个阶段:
| 阶段 | 命令 | 说明 |
|---|---|---|
| 预处理 | gcc -E test.c -o test.i |
处理预处理指令 |
| 编译 | gcc -S test.i -o test.s |
生成汇编代码 |
| 汇编 | gcc -c test.s -o test.o |
生成目标文件 |
| 链接 | gcc test.o -o test |
生成可执行文件 |
简化编译命令
gcc test.c -o test
8.1.2 GCC 基本用法
命令格式
gcc [选项] [文件名]
常用选项
| 选项 | 说明 |
|---|---|
-c |
仅编译,不链接 |
-o |
指定输出文件名 |
-g |
生成调试信息 |
-L |
指定库文件搜索目录(优先级高于系统默认路径) |
-I |
指定头文件搜索目录 |
-D |
定义宏 |
头文件包含说明
| 语法 | 说明 |
|---|---|
#include<my.h> |
<> 表示在系统头文件目录下搜索 |
#include"my.h" |
"" 表示先在当前目录搜索,再在系统目录搜索 |
8.2 GDB 调试器
8.2.1 GDB 的启动和退出
启动 GDB
gdb 程序名
# 或
gdb
file 程序名
退出 GDB
quit # 或 q
8.2.2 调试前的准备
编译时添加调试信息
gcc -g test.c -o test
查看命令帮助
help 命令名
help all
8.2.3 显示和查找源代码
list 命令
| 命令 | 说明 |
|---|---|
list |
每次显示 10 行代码 |
list m,n |
显示第 m 行到第 n 行的代码 |
list 源文件:m,n |
显示源文件中第 m 行到第 n 行的代码 |
list 函数名 |
显示函数周围的代码 |
list 源文件:函数名 |
显示源文件中指定函数周围的代码 |
search 命令
| 命令 | 说明 |
|---|---|
search 字符串 |
向后查找字符串 |
forward 字符串 |
向前查找字符串 |
reverse-search 字符串 |
向后查找字符串 |
8.2.4 执行程序
运行程序
run # 或 r
8.2.5 设置断点
基本断点设置
| 命令 | 说明 |
|---|---|
break 行号 |
在指定行设置断点 |
break 函数名 |
在函数入口设置断点 |
break 行号 if 条件 |
条件断点 |
查看断点
info breakpoints
| 字段 | 说明 |
|---|---|
| Num | 断点编号 |
| Type | 断点类型 |
| Disp | 生效一次后是否失效(dis/keep) |
| Enb | 断点是否有效(y/n) |
| Address | 断点内存地址 |
| What | 发生位置(文件和行号) |
断点管理
| 命令 | 说明 |
|---|---|
disable 编号 |
使断点失效 |
enable 编号 |
使断点生效 |
clear |
删除所有断点 |
clear 行号 |
删除此行的断点 |
clear 函数名 |
删除函数的断点 |
8.2.6 查看和设置变量
查看变量值
print 变量名
查看变量类型
whatis 变量名
设置变量值
set variable 变量=值
print 变量=值
8.2.7 调试控制
调试命令
| 命令 | 说明 |
|---|---|
kill |
结束当前程序调试 |
continue |
让程序运行到下一断点(或完成) |
next |
执行下一条语句,不进入函数内部 |
step |
执行下一条语句,进入函数内部 |
nexti |
单步执行一条指令 |
stepi |
单步执行一条指令,进入函数内部 |
常用 GDB 命令表
| 命令 | 缩写 | 说明 |
|---|---|---|
list |
l |
显示源代码 |
break |
b |
设置断点 |
info |
i |
描述程序状态 |
run |
r |
开始运行程序 |
display |
disp |
跟踪查看变量 |
step |
s |
执行下一语句,进入函数 |
next |
n |
执行下一语句,不进入函数 |
print |
p |
打印变量值 |
continue |
c |
继续运行到下一断点 |
start |
st |
开始执行,停在 main 函数第一行 |
file |
- | 装入调试程序 |
kill |
k |
终止调试程序 |
watch |
- | 监视变量值变化 |
backtrace |
bt |
查看函数调用信息 |
frame |
f |
查看栈帧 |
quit |
q |
退出 GDB |
8.3 make 工程化编译
make 工具概述
make 是 GNU 工程化编译工具,用于编译大量互相关联的源代码。
make 的功能
- 维护程序模块关系
- 生成可执行程序
- 实现项目工程化管理
- 提高开发效率
工作原理
- 编译指令放在
makefile(或Makefile)文件中 - 定义项目的编译规则、模块依赖关系和编译顺序
- 运行
make命令自动编译项目
8.3.1 Makefile 文件的构成
规则格式
目标文件列表: 依赖文件列表
[命令]
[命令]
[]代表该项可选- 冒号(
:)是分隔符 - 缩进必须使用 Tab 键
8.3.2 执行 make
命令执行
make
执行流程:
- 在当前目录下寻找
makefile或Makefile文件 - 读取文件中的规则
- 根据依赖关系编译源文件
第 9 章 Web 服务器搭建
9.1 Web 服务器搭建的准备
9.1.1 配置 Java
检查 Java 版本
java -version
查找已安装的 JDK
rpm -qa | grep java
配置环境变量
编辑 ~/.bashrc 文件,配置以下环境变量:
| 变量 | 说明 |
|---|---|
JAVA_HOME |
Java 安装目录 |
JRE_HOME |
JRE 安装目录 |
PATH |
可执行文件搜索路径 |
CLASSPATH |
类文件搜索路径 |
使配置生效
source ~/.bashrc
9.1.2 配置 MySQL
MySQL 配置文件
- 位置:
my.cnf - 重要配置选项:
basedir:MySQL 安装目录datadir:数据库数据存放目录
9.2 Web 服务器搭建
9.2.1 安装配置 Tomcat
启动 Tomcat
/usr/local/tomcat8/bin/startup.sh
停止 Tomcat
/usr/local/tomcat8/bin/shutdown.sh
9.2.2 配置 DNS、DHCP、FTP 服务
DNS 服务
| 项目 | 说明 |
|---|---|
| 实现模块 | BIND |
| 使用端口 | 53 |
| 正向解析文件 | named.bob.com |
| 反向解析文件 | named.172.16.5 |
DHCP 服务
动态主机配置协议,用于局域网自动分配 IP 地址。
FTP 服务
文件传输协议,用于文件的上传下载。
9.3 网站设计开发与部署
9.3.1 MVC 架构
MVC 组成
| 组件 | 说明 |
|---|---|
| Model(模型) | 数据层,处理数据逻辑 |
| View(视图) | 表现层,呈现用户界面 |
| Controller(控制器) | 业务逻辑层,处理用户请求 |
MVC 优点
- 分离关注点
- 提高代码可维护性
- 便于多人协作开发
9.3.2 常见开发框架
Struts 2
- 基于 MVC 设计模式的应用框架
- 提供了许多默认配置
Spring
- 轻量级控制反转(IoC)框架
- 支持面向切面(AOP)编程
- 提供了容器管理功能
MyBatis
- 优秀的持久层框架
- 支持定制化 SQL
- 支持存储过程和高级映射
附录:计算机系统与操作系统基础(补充笔记)
1.1 计算科学与计算机系统
- 冯诺依曼体系结构要点:采用二进制;程序指令与数据统一存储;计算机按照程序(一般为顺序)执行。典型冯诺依曼结构由控制器、运算器、存储器、输入设备、输出设备五部分组成。
- 控制器与运算器是 CPU 的核心组成部分;现代 CPU 还包含寄存器组、缓存等,并不等同于“传统单核 CPU”。
- 程序与数据存入主存后,运行时 CPU 会从主存中取指、译码并执行(通常按顺序流推进)。冯诺依曼结构可从“时间(指令流)/空间(存储层次)”的角度理解:存储体系对应空间域,指令执行过程对应时间域。
1.2 计算机体系结构的基本概念
1.2.2 计算机系统的层次结构
- 计算机系统由硬件与软件组成,是一个复杂的有机整体。
- 计算机系统可按功能分为多级层次结构:第 0 层数字逻辑层、第 1 层微体系结构层、第 2 层传统机器层、第 3 层操作系统层、第 4 层汇编语言层、第 5 层高级语言层、第 6 层应用程序层。
- 计算机系统结构设计者通常关注(机器语言或汇编语言程序员)所看到的计算机结构。
1.2.3 指令集
- 指令集是一个计算机系统支持的所有机器指令的集合,常被视为软硬件之间的分界面。
- 常见指令格式:操作码(Opcode)+ 操作数(Operands/地址),以二进制编码表示。
- 按操作数数量不同,可分为:零地址指令、一地址指令、二地址指令、三地址指令和多地址指令。
- 寻址方式按寻址空间可分为:立即数寻址、寄存器寻址、主存寻址、堆栈寻址等。
- 指令常见功能分类:数据传输指令、算术运算指令、逻辑运算指令、程序控制指令、输入/输出指令、处理器控制与调试指令。
- 指令集也常称为指令集体系结构 ISA(Instruction Set Architecture)。
- 按 ISA 复杂程度,可分为 CISC 和 RISC 两大阵营:CISC(Complex Instruction Set Computer),RISC(Reduced Instruction Set Computer)。
- CISC 追求强化指令功能、减少指令条数;RISC 倾向减少指令种类、规范指令格式、简化寻址方式,以便处理器内部并行与流水化实现,提高 VLSI 时代的设计效率与整体性能。
1.2.4 存储系统
- 现代通用计算机的存储层次结构:寄存器组、Cache、高速主存(主存储器)、辅助存储器、脱机存储器。越靠上速度越快、容量越小、价格越高;越靠下容量越大、速度越慢、价格越低。
- 程序访问的局部性包含时间局部性与空间局部性:
- 时间局部性:最近访问过的内容在短期内可能再次访问(如循环体指令反复执行)。
- 空间局部性:访问某个存储单元后,其附近单元短时间内也可能被访问。
- “Cache-主存-辅存”是存储体系里最重要的三级层次,常将其划分为“Cache-主存”和“主存-辅存”两个两级存储系统讨论;其中“主存-辅存”两级系统也称为虚拟存储系统。
- “Cache-主存”层次的理论依据是程序局部性。
- Cache 与主存之间常见的地址映射方式:全相联映射、直接映射、组相联映射。
- 采用全相联映射或组相联映射时,Cache 满且需要装入新块,会触发替换算法。常见替换算法有随机(RAND)、先进先出(FIFO)、最近最少使用(LRU)等。
- Cache 读写需要考虑数据一致性:同一份数据在不同存储位置的多个拷贝应保持一致。一致性体现在两方面:
- Cache 与主存之间的数据一致性
- 多核/多处理器场景下,各处理器私有 Cache 之间的数据一致性
- Cache 与主存之间的一致性通常通过写策略保证:写直达(write-through)、写回(write-back)。
- 多核处理器中,核间缓存一致性由缓存一致性协议维护;MESI(Modified/Exclusive/Shared/Invalid)是经典协议之一。
- MESI 协议将 Cache Line 状态分为:修改(Modified)、独占(Exclusive)、共享(Shared)、失效(Invalid)。
- 虚拟存储系统用于在有限主存条件下,为程序提供“更大、近似连续”的地址空间与内存使用假象;代价是发生缺页等情况时访问延迟显著增加。
1.3 微处理器体系结构
- 微处理器(CPU)是计算机系统中最重要的核心部件之一。
- 单核处理器的基本逻辑结构可概括为控制器、运算器与寄存器/存储单元等,通过 CPU 内部总线互连。
- 目前通用处理器芯片多采用多核处理器(Chip Multi-Processor,CMP)架构。按计算核心是否对等,CMP 可分为同构多核与异构多核:核心相同且地位对等为同构多核;核心不同且地位不对等为异构多核,常采用“主处理核 + 协处理核”的设计。(P19)
- CPU 指令执行过程通常可抽象为 5 个阶段:取指令、指令译码、执行、访存、结果写回。
1.4 操作系统的基本概念
- 操作系统是通用计算机系统中不可或缺的系统软件。
- 计算机系统资源可大致分为四类:处理器、存储器、I/O 设备和文件。
- 对上述资源的管理是操作系统内核的主要功能。
1.4.2 操作系统的基本特征
现代通用操作系统一般具有并发、共享、虚拟和异步四个基本特征:并发是指两个或多个事件在同一时间间隔内发生;共享是指软硬件资源可被多个并发执行的进程共同使用;虚拟是指把一个物理实体抽象为一个或多个逻辑上的对应物;异步(随机性/不确定性)是指在相同环境与初始条件下,同一程序的执行顺序与耗时可能不同。(避免混淆:并行是指两个或多个事件在同一时刻发生)
1.5 操作系统的基本功能和原理
从资源管理角度,操作系统具备五大基本功能:处理器管理、存储管理、设备管理、文件管理和作业管理。
1.5.1 处理器管理
处理器管理主要包括:中断处理与进程管理。
1.5.1.1 中断处理
- 在处理器上运行的指令按权限可分为两类:
- 特权指令:只能由操作系统内核执行,通常涉及改变机器状态、修改关键寄存器、启动设备等敏感操作。
- 非特权指令:应用程序也可执行的指令。
- 处理器运行状态一般分为内核态与用户态:内核态可执行所有指令;用户态只能执行非特权指令。
- 用户态切换到内核态的三种典型方式:系统调用、异常(陷入/Trap)、外设中断。三者通常都通过中断/异常机制完成。
- 中断:CPU 对系统发生的某个事件做出响应,使其暂停当前程序,保存现场并转去执行相应处理程序;处理完成后按规则返回继续执行。
- 概念:引起中断的事件或发出中断请求的来源称为中断源;中断源向 CPU 提出的处理请求称为中断请求;发生中断时被打断程序的暂停点称为断点。
- 访管(Trap/SVC)指令/系统调用:一种使 CPU 状态从用户态转入内核态的机制,由操作系统根据不同编号执行对应服务。
- 中断类型按功能可分为(类似 IBM 360/370 的分类法):
- 机器故障中断:硬件故障触发(如电源故障、内存校验错误等),进入诊断与处理。
- I/O 中断:来自通道或外设,用于反映设备工作情况(如磁盘传输完成、打印结束等)。
- 外部中断:来自系统外部装置(如计时器到时、控制台操作、多机系统信号等)。
- 程序性中断:指令/数据使用异常(如非法操作码、无效地址、算术溢出等)。
- 访管中断:执行访管/Trap 指令产生,使 CPU 从用户态进入内核态以获得操作系统服务。
- 相关拓展:https://blog.csdn.net/weixin_36278982/article/details/113411238
1.5.1.2 进程管理
- 进程:程序在某数据集合上的一次运行活动,是系统进行资源分配与调度的基本单位。
- 进程与程序:进程是动态概念,程序是静态概念。进程具有并发特征与生命周期;程序可长期保存在外存。一个程序在不同数据集上运行可形成不同进程;进程实体由程序、数据与进程控制块(PCB)组成。
- PCB(进程控制块)用于描述进程的动态变化,是进程存在的唯一标志。
- 线程:处理器调度的最小单位。线程包含于进程中,是进程内一条顺序控制流;一个进程可包含多个线程并发执行(是否并行取决于硬件与调度)。
- 进程状态及转换:三种基本状态为运行态(running)、就绪态(ready)、等待态(wait/blocked/sleep)。实际系统中常增加新建态(new)与终止态(exit)。
- 已经获得除 CPU 以外的所有运行所需资源、只差 CPU 的进程处于就绪态。(P30)
1.5.2 存储管理
- 将用户源程序变为可在内存中执行的程序通常经历:编译、链接、装入。
- 存储管理主要功能:内存空间分配与回收、地址转换、内存空间扩充、存储保护。
1.5.3 设备管理
设备管理负责处理器与外部设备之间的数据交互,包括把设备分配给请求设备的进程、处理 CPU 与设备之间的 I/O 通信、响应设备中断请求、维护与回收设备等。
1.5.4 文件管理
负责文件管理的部分称为文件系统,涉及文件的逻辑组织与物理组织、目录结构与管理等。常见文件物理结构有顺序结构、链表结构、索引结构等。(P41)
1.5.5 作业管理
作业是用户在一次计算过程或事务处理中要求计算机系统完成工作的总和,也是用户向计算机系统提交任务的基本单位。包括作业输入/输出、作业调度与控制。作业从提交到执行结束退出系统,一般经历提交、后备、执行、完成四个状态。
Linux 系统概述(补充)
- Linus Torvalds 负责开发的 Linux 只是一个内核。内核提供设备驱动、文件系统、进程管理、网络通信等功能;操作系统通常还包含用户态工具、库与应用等。
- 常见 Linux 发行版:Red Hat、Debian、Fedora、CentOS、Ubuntu、SUSE、Gentoo、Slackware 等。
- Linux 在服务器、云计算、移动端(Android 基于 Linux 内核)等领域应用广泛。
Linux 系统使用基础(补充)
常用 Linux 命令:命令格式
终端中的提示符示例:
[root@localhost ~]#
root:当前登录用户localhost:主机名简写(完整主机名通常为localhost.localdomain)~:当前目录(家目录/主目录)#:提示符(#通常表示超级用户,$通常表示普通用户)
家目录又称主目录:超级用户的家目录通常为 /root,普通用户为 /home/用户名。初始登录状态下,用户创建的文件一般位于家目录。切换目录命令为 cd。
Linux 命令基本格式:
[root@localhost ~]# 命令 [选项] [参数]
- 短选项:如
-l - 长选项:如
--all - 选项用于调整命令行为,参数通常是命令的操作对象



Comments | NOTHING