ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

计算机三级Linux应用与开发技术知识地图与易错点复习

计算机三级Linux应用与开发技术知识地图与易错点复习

简介:面向备考全国计算机三级Linux应用与开发技术的考生,这份知识点整理围绕计算机体系结构与操作系统基础展开,适合冲刺阶段梳理概念、对照教材查漏补缺。内容涵盖冯诺依曼体系结构、计算机系统层次、指令集与CISC/RISC、Cache-主存-辅存三级存储、地址映射与替换算法、MESI缓存一致性协议,并延伸到操作系统特征、五大资源管理功能、处理器管理及内核态与用户态等考点。压缩包共1个docx文件,约231KB,便于打印标注和按章节复习。已有1126人学习下载,可作为理解硬件基础与操作系统原理的轻量提纲,帮助考生把零散知识串成复习框架。

1. 知识地图:这门考试到底在考什么

计算机三级考试 Linux 应用与开发技术,很多人第一反应是“背命令”,真翻开知识点会发现完全不是这么回事。它其实是两条线并排走:一条是计算机体系结构与操作系统原理,另一条是 Linux 的实际操作能力。前一条线考的是冯诺依曼五大部件、七层系统结构、Cache 三种映射、进程三态转换这类“看不见摸不着”的东西,几乎每次都以选择题形式出现;后一条线才是命令、shell 脚本、用户与文件管理。真正拉开分差的往往不是ls会不会用,而是原理题那几分有没有稳稳拿到。

整份知识点的骨架很规整:体系结构给地基,操作系统原理讲资源怎么被管起来,Linux 命令和 shell 脚本把原理落到具体操作,用户管理和文件管理再把前面所有东西串成一条线。适合已经上手过 Linux、但知识点是碎的、需要一次性串成地图的人。

2. 体系结构与操作系统原理:从冯诺依曼到进程三态

2.1 冯诺依曼结构与七层系统结构

冯诺依曼体系有三个绕不开的要点:数制采用二进制,程序指令和数据统一存储,计算机按程序顺序执行。按照这个结构设计出来的机器由五部分组成——控制器、运算器、存储器、输入设备、输出设备。其中控制器和运算器合起来就是现代通用计算机的中央处理器,也就是传统意义上的单核 CPU。主存储器里存放要执行的程序和要处理的数据,运行时 CPU 自动、按顺序从主存里一条一条取指令执行。

这里有个很好记的对应关系:冯诺依曼结构把现实世界的时空观映射进了机器,存储体系对应空间域,指令顺序执行过程对应时间域。理解了这一层,后面讲存储层次、讲程序局部性都能接上。

计算机系统按功能可以切成多级层次结构,从下往上是:

层次名称说明
第 0 层数字逻辑层最底层硬件逻辑
第 1 层微体系结构层硬件实现细节
第 2 层传统机器层机器语言视角
第 3 层操作系统层资源管理
第 4 层汇编语言层汇编程序员视角
第 5 层高级语言层高级语言程序员视角
第 6 层应用程序层最终用户视角

系统结构设计者关心的是机器语言或汇编语言程序员所看到的计算机结构,也就是第 2 层往上这一段的接口形态。这个“关心哪一层”的表述在选择题里出现过,容易和“操作系统设计者关心哪层”混淆,记的时候把主语和层号绑在一起背。

2.2 指令集、CISC 与 RISC 的分野

指令集是一个计算机系统支持的所有机器指令的集合,它常被看作软硬件之间的分界面。最普通的指令格式是“操作码 + 操作数(地址)”,用二进制数据表示。按操作数数量不同,指令格式分成零地址、一地址、二地址、三地址和多地址指令;按寻址空间分,寻址方式有立即数寻址、寄存器寻址、主存寻址和堆栈寻址四种。

从功能角度看,常见指令类型包括数据传输指令、算术运算指令、逻辑运算指令、程序控制指令、输入输出指令、处理器控制和调试指令。因为指令集本身有很强的系统性和复杂性,它也被称为指令集体系结构 ISA(Instruction Set Architecture)。

按指令系统的复杂程度,ISA 分成两大阵营,这个对比表建议直接背下来:

对比项CISC(复杂指令系统计算机)RISC(精简指令系统计算机)
追求目标强化指令功能,减少程序指令条数提高处理器性能与并行度
指令种类多,功能复杂少,功能单一
指令格式不规整规范统一
寻址方式丰富简化
性能思路靠减少指令条数提效靠简化结构、方便流水与并行、提高超大规模集成电路使用效率

梳理下来会发现,这两个阵营不是“谁更先进”的关系,而是两种设计哲学。CISC 的思路是让每条指令干更多事,程序短一点;RISC 的思路是把指令做小做整齐,让处理器内部可以并行处理。考试里经常反过来问“减少指令种类、规范指令格式、简化寻址方式是为了什么”,答案指向 RISC 的性能路径。

2.3 存储层次、Cache 映射与一致性

现代通用计算机的存储系统是五层结构,从上到下依次是寄存器组、高速缓冲存储器 Cache、主存储器、辅助存储器、脱机存储器。规律很直白:越往上速度越快、价格越高;越往下容量越大。这个“速度—价格—容量”的三角关系是存储层次存在的根本原因,也是后面所有 Cache 话题的出发点。

存储层次能成立,理论依据是程序访问的局部性,它包含两方面:

  • 时间局部性:最近访问过的内容很可能在短期内被再次访问。典型例子是程序中的循环,循环体的指令要被反复执行。
  • 空间局部性:某个存储单元被访问,短时间内它附近的存储单元也会被访问。

“Cache—主存—辅存”是存储体系里最重要的三级层次,通常拆成两个两级系统来讨论。“Cache—主存”层次的理论依据就是程序局部性;“主存—辅存”两级存储系统也叫虚拟存储系统,它被提出来是为了满足应用程序对高速大容量主存的需求、扩大存储系统容量。把这两组对应关系弄反,是这一节最经典的失误。

Cache 与主存之间最基本的地址映射方式有三种:

映射方式特点是否需要替换算法
全相联映射主存任意块可放入 Cache 任意行需要
直接映射主存块只能放到唯一确定的行不需要
组相联映射组间直接、组内全相联需要

在采用全相联映射和组相联映射的系统中,主存向 Cache 传送新块而 Cache 已满时,就要用替换算法换出某一块。常用的是随机法 RAND、先进先出 FIFO、最近最少使用 LRU。LRU 命中率通常最好,代价是维护成本高。

Cache 读写过程会引出数据一致性问题。一致性体现在两个方面:一是 Cache 和主存之间的数据一致性,通过特定的写操作方式来保证,即写直达 write through 和写回 write back;二是各个处理器内核私有 Cache 之间的数据一致性,在多核处理器中靠缓存一致性协议维护,最经典的是 MESI 协议。MESI 把 Cache Line 的状态分成四种:

状态英文含义
MModified已修改,与主存不一致,本核独占
EExclusive独占,与主存一致,仅本核持有
SShared共享,多个核持有,与主存一致
IInvalid失效,不可用

提示:写直达和写回解决的是“Cache 与主存”这一对的一致性,MESI 解决的是“核与核”这一对的一致性,两个问题的层级不同,不要混答。

2.4 四大特征与五大功能

操作系统的资源按作用大致分四类:处理器、存储器、I/O 设备和文件。对这四类资源的管理构成操作系统内核的主要功能。

现代通用操作系统一般具有四个基本特征:并发、共享、虚拟、异步。并发是指两个或多个事件在同一时间间隔内发生;共享是指系统中的软硬件资源可被多个并发执行的进程共同使用,而不是被某个进程独占;虚拟是把一个物理实体变为一个或多个逻辑上的对应物;异步又称随机性或不确定性,指相同环境和初始条件下、同一数据集上运行的同一程序,每次执行的顺序和所需时间都不一定相同。

最容易错的是并发和并行。并行是指两个或多个事件在同一时刻发生,并发是同一时间间隔内发生,一个是“时刻”,一个是“时间段”,这个区别几乎每年都会被拿来出题。

从资源管理角度看,操作系统具备五大基本功能:处理器管理、存储管理、设备管理、文件管理和作业管理。

  • 处理器管理:核心是中断处理和进程管理。
  • 存储管理:主要功能是内存空间的分配与回收、地址转换、内存空间的扩充和存储保护。用户源程序变成可在内存中执行的程序,要经过编译、链接、装入三步。
  • 设备管理:负责处理器内核与外部设备间的数据交互,包括把设备分配给请求使用它的进程、处理 CPU 与设备间的 I/O 通信、响应设备中断请求、维护和回收设备。
  • 文件管理:负责文件管理的部分称为文件系统,涉及文件的逻辑组织和物理组织、目录结构和管理。常用文件物理结构有顺序结构、链表结构、索引结构。
  • 作业管理:作业是用户在一次计算过程或事务处理中要求计算机系统所做工作的总和,也是用户向系统提交任务的基本单位,包括作业的输入输出以及调度和控制。

2.5 中断机制与进程三态

处理器上运行的指令按权限分两种:特权指令只能被操作系统内核使用,涉及改变机器状态、修改寄存器内容、启动设备等敏感操作;非特权指令所有程序都能使用。处理器运行状态相应分为内核态和用户态,内核态能执行所有指令,用户态只能执行非特权指令。

用户态切换到内核态有三种方式:系统调用、异常、外围设备的中断。三种方式都通过中断机制发生。中断是指 CPU 对系统发生的某个事件做出的一种反应,它使 CPU 暂停正在执行的程序,保留现场后自动执行相应的处理程序,处理完该事件后,若被中断进程优先级最高,则返回断点继续执行被“打断”的程序。引起中断的事件或发出中断请求的来源叫中断源,中断源向 CPU 提出的处理请求叫中断请求,被打断程序的暂停点叫断点。中断概念还有一个发展,就是访管指令(访问管理指令,即系统调用)的使用。

按功能划分,中断源分为五类:机器故障中断、I/O 中断、外部中断、程序性中断、访管中断。其中访管中断是执行“访问管理程序”指令产生的,作用是让 CPU 从用户态转入管理态,由操作系统根据不同编号引进不同处理,从而为用户态程序提供对系统资源使用请求的服务。

注意:在配置了通道的计算机系统中,用户程序需要输入/输出时引起的中断属于访管中断,不是 I/O 中断。这个点翻车率极高,判断依据是“谁发起的”——用户程序主动请求走的是访管。

进程是计算机中的程序在某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。进程和程序的区别可以做成一张对照表:

对比项进程程序
动态性动态概念静态概念
并发性具有并发特征没有
生命周期有生命期,仅在运行期间存在可在外存长期保存
对应关系一个程序在不同数据集上运行即不同进程与进程不总是一一对应
组成程序、数据和控制块指令与数据

为了描述进程的动态变化过程,系统引入进程控制块 PCB,并根据它感知进程的存在。PCB 是进程存在的唯一标志。线程则是被处理器调度运行的最小单位,线程被包含在进程之中,一条线程就是进程中一个单一顺序的控制流,一个进程可以并发多个线程。

进程有三种基本状态:运行态 running、就绪态 ready、等待态 wait(又称阻塞态 blocked 或睡眠态 sleep)。实际系统中还会增加新建态 new 和终止态 exit。这里有一句必须记牢的定义:已经获得除 CPU 以外的所有运行所需资源的进程处于就绪状态。反过来说,缺资源的是等待态,只缺 CPU 的是就绪态。

作业的运行轨迹与之类似,一个作业从交给计算机系统到执行结束退出,一般经历提交、后备、执行、完成四个状态。

3. Linux 命令与软件包管理:从提示符到 RPM 全流程

3.1 命令格式、提示符与家目录

打开终端后看到的那一行提示符,本身就是一道小题:

[root@localhost ~]# # root 当前登录用户 # localhost 当前系统简写主机名(完整名为 localhost.localdomain) # ~ 用户当前所在目录 # # 命令提示符,超级用户为 #,普通用户为 $

提示符里四段信息各有含义,考试常问“#和$分别代表什么”。家目录又称主目录,是用户登录后的初始位置。超级用户的家目录是/root,普通用户的家目录是/home/用户名。初始登录状态下,用户创建的文件都放在家目录里。切换目录用cd。

Linux 命令的基本格式是命令 [选项] [参数]。选项分短格式和长格式:短格式如-l,是英文简写;长格式如--all,是完整英文单词。选项用于调整命令的执行方式,参数则是命令的操作对象。这个“选项调方式、参数是对象”的区分看着简单,实际做题时经常把包名当选项、把选项当参数。

3.2 终端查询与输出类命令

w和who都能查看服务器上目前已登录的用户信息,区别在于w除了知道登录用户信息,还能看到每个用户执行任务的情况。w的基本格式是w [选项] [用户名],后面只跟用户名表示只显示该用户信息;-h不显示输出信息的标题,-l用详细格式输出,-s用简洁格式输出。who的基本格式是who [选项] [file],不指定文件时默认通过/var/run/utmp获取登录用户信息;-a列出所有信息,-b列出系统最近启动时间,-l列出所有可登录的终端信息,-m仅列出当前终端信息(相当于who am I),-u显示名称、线路和时间字段。

echo把命令行参数显示到标准输出。-n取消输出后行末的换行符号,-e支持反斜线控制的字符转换。-e支持的常用控制字符包括\\输出反斜线本身、\a警告音、\b退格、\c取消行末换行、\f换页、\n换行、\r回车、\t制表符、\v垂直制表符、\0nnn按八进制 ASCII 码输出、\xhh按十六进制 ASCII 码输出。

# 输出不换行 echo -n "loading" # 用制表符分隔两段内容,并在末尾加换行 echo -e "name\tage\n" # 按十六进制 ASCII 码输出字符 A echo -e "\x41"

第一条命令的-n让光标停在输出末尾;第二条用-e打开转义,\t变成制表符、\n变成换行;第三条\x41是十六进制写法,对应字符 A。这一组参数在选择题里常以“哪个选项支持转义字符”的形式出现,答案就是-e。

date显示或设定系统日期与时间,date -s可以设定当前时间,但只有 root 权限才能设置。passwd是密码配置命令,格式为passwd [选项] 用户名。普通用户仅能修改自己的密码,root 可以修改自己和普通用户的密码;普通用户修改自己的密码需要先输入旧密码,root 不用。

3.3 用户与用户组:/etc/passwd 与 useradd 全流程

用户名和 UID 的对应关系存储在/etc/passwd文件中,用户密码信息存放在/etc/shadow。两个文件的权限差别很大,这也是常考点:/etc/passwd权限是rw-r--r--,所有用户都可读;/etc/shadow权限是rw-------,只有 root 能读写。

/etc/passwd每行用户信息划分为 7 个字段:

字段含义要点
用户名用户名字符串登录标识
密码占位x真正密码在/etc/shadow
UID用户标识号取值 0—65535,允许不同用户名共用同一 UID
GID初始组标识号初始组只能一个,附加组可以多个
描述性信息备注字段常见为全名或说明
主目录登录后的访问目录root 为/root,普通用户为/home/用户名
默认 shell登录解释器通常为/bin/bash

UID 的分配区间要记住:1—499 供系统程序使用,普通用户 UID 从 500 开始。

useradd的创建过程是一条完整的链路:系统先读取/etc/login.defs和/etc/default/useradd两个配置文件,按其中定义的规则添加用户;然后在/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow四个文件中写入用户数据;接着在/etc/default/useradd设定的目录下建立用户主目录;最后把/etc/skel目录中的所有文件复制到该主目录中,一个新用户才算创建完成。

用户信息的其他维护命令:

# 修改用户信息,-L 临时锁定用户,-U 解锁 usermod -L 用户名 # 修改用户密码状态(密码有效期等) chage [选项] 用户名 # 删除用户,-r 表示同时删除用户家目录 userdel -r 用户名 # 用户间切换,带 - 表示连同环境变量一起切换 su - 用户名 # 组管理 groupadd [选项] 组名 groupmod [选项] 组名 groupdel 组名 # 把用户加入组 / 从组中移除 gpasswd -a 用户名 组名 gpasswd -d 用户名 组名

userdel只有 root 能用,-r会一并删掉主目录和邮箱/var/spool/mail/用户名。su的-选项是关键:带-时不仅切换身份,还把当前使用的环境变量(PATH、MAIL 等)切换成目标用户的;不带-只是临时切换身份,环境变量没跟着换,很多命令会莫名其妙报错。groupdel仅适用于删除那些不是任何用户初始组的组,删初始组会留下无主用户。gpasswd选项为空时表示给组设置密码,仅 root 可用。

3.4 软件包分类与 RPM 全流程

Linux 的软件包细分为两种:源码包和二进制包。Linux 常用打包压缩格式是tar.gz,因此源码包又被称为 Tarball,Tarball 是一款打包工具。两大主流的二进制包管理系统是 RPM 包管理系统和 DPKG 包管理系统。

RPM 包有默认安装路径,最好不要手动指定:

路径存放内容
/etc/配置文件
/usr/bin/可执行命令
/usr/lib/函数库
/usr/share/doc/文档
/usr/share/man/手册页

安装命令是rpm -ivh 包全名,三个参数分别是-i安装(install)、-v显示更详细信息(verbose)、-h打印安装进度(hash)。涉及包全名的命令一定要注意路径,可以一次装多个包,用空格隔开。安装完成后可以尝试启动服务service 服务名 start|stop|restart|status,四个动作对应启动、停止、重启、查看状态。

升级有两条命令,区别在于“没装过怎么办”:

# 若该软件没安装过则直接安装,已安装则升级至最新版本 rpm -Uvh 包全名 # 若该软件没有安装,则不会安装;必须已装较低版本才能升级 rpm -Fvh 包全名

卸载用rpm -e 包名,-e即 erase。卸载必须考虑包之间的依赖性:先装httpd,后装它的功能模块mod_ssl,卸载时就必须先卸mod_ssl再卸httpd,否则报错。命令支持--nodeps不检测依赖直接卸载,但不推荐。

查询是 RPM 里分支最多的一块,把选项和对象对上就不会乱:

命令作用记忆点
rpm -q 包名查询是否安装query
rpm -qa查询所有已安装软件包常配合grep过滤
rpm -qi 包名查询软件包详细信息i 即 information
rpm -qip 包全名查询未安装包的信息p 即 package,需绝对路径加包全名
rpm -ql 包名查询已安装包包含的所有文件及安装位置l 即 list
rpm -qlp 包全名查询未安装包包含的文件及打算安装的路径l + p
rpm -qf 系统文件名反向查询文件属于哪个包f 即 file

最后一条有几个限定条件:只有使用 RPM 安装的文件才能用-qf查询,手动方式建立的文件查不到。rpm -qa常和管道配合,比如rpm -qa | grep httpd,可以找出所有含包名的软件包。

4. Shell 脚本与文件管理:通配符、重定向与文本三剑客

4.1 shell 脚本与三种运行方式

shell 本身是一个用 C 语言编写的程序,是连接用户和内核的桥梁。脚本第一行的#!/bin/bash中,#!用来声明该脚本使用哪种 shell 编写,从而调用相应的解释程序执行;#则是当行注释符,用来说明程序功能、结构、算法和变量作用,提高可读性。

Linux 中创建文件默认是不可执行文件,必须修改权限、为文件增加可执行权限,之后才能在命令行模式下直接输入相对路径./文件名运行。

# 创建脚本文件 touch hello.sh # 写入内容(第一行声明解释器) cat > hello.sh << 'EOF' #!/bin/bash # 输出一行提示 echo "hello linux" EOF # 增加可执行权限 chmod +x hello.sh # 用相对路径运行 ./hello.sh # 查看系统支持的 shell 种类 cat /etc/shells

chmod +x给文件加上执行位,./表示在当前目录查找,两者缺一不可。脚本能否执行还与环境变量 PATH 有关:PATH 的值决定了 shell 到哪些目录中寻找命令或可执行程序,用户运行命令时会在这些目录下按顺序依次搜寻。

脚本运行有三种方式:把脚本权限设置为可执行后在提示符下直接运行;把脚本名作为参数传递给 shell 程序;把脚本以输入重定向的方式传递给 bash。三种方式都能跑通,区别在于是否依赖执行权限、是否新开子 shell。

4.2 通配符与三种引号

文件名的扩展称为通配 Globbing,五个符号覆盖了绝大多数场景:

通配符含义
*匹配任意字符的 0 次或多次出现
?匹配任意单个字符
[ ]匹配该字符组所限定的任何一个字符
[^ ]或[! ]匹配不在该字符组中的任何一个字符
{string1,string2,…}匹配其中一个指定的字符串

转义字符\的作用方向要记准:按下转义字符前,遇特殊字符按特殊含义执行;加上转义字符后,按普通含义执行。

shell 中的引用字符有三种,差别全在“保留什么”上:

引号效果
单引号' '引用一串字符,所有字符都当普通字符,不做任何解释
双引号" "引用一串字符,但保留$、\和倒引号的特殊含义
倒引号` `被 shell 解释为命令行,先执行该命令,用输出结果取代整个倒引号部分

双引号里$代表引用变量的值,倒引号代表引用命令。三者的差异用一段对比最直观:

name=linux # 单引号:原样输出,$name 不展开 echo '$name' # 双引号:$name 展开为 linux echo "$name" # 倒引号:先执行 date 命令,用其输出替换整个部分 echo "now is `date`"

第一条输出字面量$name,第二条输出linux,第三条把date的执行结果嵌进了字符串。注意到$、反斜线和倒引号在双引号中依然保留特殊含义,这是双引号与单引号唯一但关键的差别。

4.3 输入输出重定向与命令连接符

输入输出方向就是数据的流动方向。标准输入重定向有两种写法:command<file把文件作为命令的输入,如wc -l<file统计文件行数;command<<分界符从标准输入中读入,直到遇见分界符才停止,用特定分界符代替默认的 Ctrl+D 结束输入。

标准输出重定向有两种:command>file以覆盖方式把正确输出写到文件,文件不存在会自动创建、存在则原内容被覆盖;command>>file以追加方式写出。

输出重定向的完整写法是fd>file或fd>>file,fd 表示文件描述符,不写默认为 1。三个描述符必须记住:

描述符名称说明
0stdin标准输入
1stdout标准输出
2stderr错误输出

如果要把正确信息和错误信息都保存到同一个文件,写法是:

# 正确输出写入 file1,错误输出重定向到标准输出后一并写入 grep li si file >file1 2>&1 # 正确与错误输出都丢弃,/dev/null 相当于系统垃圾箱,数据不可恢复 grep li si file >/dev/null 2>&1

第一条里2>&1表示让文件描述符 2 指向文件描述符 1 当前的位置,于是两类输出进了同一个文件。这里有个硬性要求:2>&1之间不允许有空格,fd>之间也不允许有空格。另外grep li si file会把si和file都当成文件名,因为grep的模式后面跟的是文件列表。

命令连接符决定多条命令之间的逻辑关系:

连接符执行规则
;顺序执行,依次跑完
&&逻辑与,前一条正确执行后一条才执行
||逻辑或,前一条执行错误后一条才执行

小括号()和大括号{}都能把若干命令括起来,逻辑上视为一条命令。启动 shell 时这个 shell 是交互的,执行完一条命令接着显示下一个提示符,始终在前台等待用户;在交互 shell 中运行外部命令或执行脚本时,交互 shell 会创建一个子 shell,运行结束后子 shell 进程结束。后台进程在运行过程中与用户无交互,无交互指的是不响应用户的输入和终端控制信号,但后台命令一样会把结果输出到显示器上。

4.4 文件与目录操作命令

Linux 中所有文件和目录都被组织成从根节点/开始的倒置树状结构,文件系统按名访问文件。文件是文件系统中存储数据的一个命名对象,是用户最小的逻辑存储单元,由数据项和文件控制块两部分组成,文件控制块被称为索引节点。按数据项是否有结构,文件分为无结构文件(字符流文件)和有结构文件(如目录文件);通常 Linux 的文件类型划分为普通文件、目录文件、链接文件及设备文件。说明目录或文件名位置有绝对路径和相对路径两种,前者从根目录/写起,后者相对于当前路径。

文件操作命令里,查看类的一组:

# 显示文件内容,-n 对所有行编号,-b 只对非空行编号 cat -n file # 合并文件,file3 原内容会被覆盖,不存在则自动创建 cat file1 file2 > file3 # 分页显示 more file # 显示前 k 行,不指定行数默认显示 10 行 head -n 5 file # 显示后 k 行,-f 监听文件新增内容,Ctrl+C 中止 tail -f file # 只修改文件访问时间 touch -a file

复制、删除、移动三个命令的常用选项要分清:

命令常用选项作用
cp-a相当于-d、-p、-r的集合;-d源为软链接时目标也为软链接;-i覆盖前询问;-l建立硬链接;-s建立软链接;-p保留原属性;-r递归复制目录复制文件或目录
rm-f强制删除;-i删除前询问;-r递归删除目录及内容永久性删除
mv-f强制覆盖;-i交互移动,目标存在时询问;-n目标存在则不覆盖也不询问;-v显示移动过程;-u源文件更新时才升级目标移动或重命名

cp的-r用于复制目录,此时目标必须是目录;不改名复制到/tmp/下写作cp file /tmp/,改名复制写作cp file /tmp/text,加-i会在覆盖前询问。

目录操作命令:

# -p 递归创建所有目录,-m 手动指定权限而不用默认权限 mkdir -p /data/a/b # 递归删除空目录 rmdir -p /data/a/b # 切换目录,~ 代表当前用户主目录,- 代表上次所在目录,. 当前目录,.. 上级目录 cd ~ # 显示当前所在目录 pwd # 显示全部文件,包括以 . 开头的隐藏文件 ls -a

排序和统计两个命令常组合使用:sort按 ASCII 码值比较升序输出,-r反向排序;wc的-l只统计行数、-w只统计单词数、-m只统计字符数。

链接命令ln是容易被忽略的一节,硬链接和软链接的区别必须搞清楚:

对比项硬链接软链接
创建命令ln 源文件 目标文件ln -s 源文件 目标文件
数据同步修改任一方,另一方数据都改变通过指向源文件访问
跨文件系统不能跨分区建立可以
链接目录不能链接目录可以

4.5 grep、sed、awk 的分工

grep全称 global regular expressions print,在一个或多个文件中搜索特定字符模式,这个模式可以是单一字符、字符串、单词或句子。正则表达式是描述一组字符串的模式,可以是纯文本,也可以是产生模式的特殊字符,与通配符的含义并不相同:

正则符号含义
c*匹配 0 个或多个字符 c
.匹配任何一个字符,且只能是一个字符
[xyz]匹配方括号中任意一个字符
[^xyz]匹配方括号外字符的所有字符
^行首定位符
$行尾定位符

grep -n 模式 文件名会在每一行最前面列出行号。注意c*和通配符*不是一回事:正则里的*修饰的是它前面的那个字符,通配符里的*匹配任意字符串。

sed主要用来自动编辑一个或多个文件,简化对文件的反复操作。选项-n只显示匹配处理的行,-e执行多个编辑命令(一般用;代替),-i直接在文件中修改而不是输出到屏幕,-f从脚本文件读取内容并执行。常用编辑命令包括p打印匹配行、d删除指定行、a在匹配行后追加、i在匹配行前插入、c整行替换、r读取文件内容、w写入文件、s字符串替换。

# 打印第 2 行,-n 抑制默认输出,只留匹配行 sed -n '2p' file # 把全文中的 old 替换为 new,-i 直接写回文件 sed -i 's/old/new/g' file

第一条不加-n的话会把整份文件连同重复行一起打出来,-n加上p才是“只打印第 2 行”。第二条的s/old/new/g是替换语法,末尾g表示一行内全部替换,不加只替换每行第一个。

awk更适合格式化文本、做较复杂的格式处理。它的主要特性之一是处理文本数据的能力强,会自动给一行中的每个数据元素分配变量:$0代表整个文本行,$1代表第 1 个数据字段,$2代表第 2 个,依此类推。默认字段分隔符是任意空白字符(空格或制表符),要指定其他分隔符用-F选项。

# 输出每行第一个字段,-F 指定冒号为分隔符 awk -F: '{print $1}' /etc/passwd # BEGIN 在处理前执行,END 在处理后执行 awk 'BEGIN {print "The File Contents: "} {print $0} END {print "End of File"}' file

第一条把/etc/passwd按冒号切开取第一列,正好取出所有用户名;第二条演示三段式结构,BEGIN块在读取文件前执行一次,主体块对每行执行,END块在处理完后执行一次。

5. 易漏点与易错点:五处最容易翻车的地方

5.1 原理部分的三处易漏

易漏点一:Cache—主存与主存—辅存的理论依据被对调。为什么会漏:两个两级系统长得很像,都涉及“上一级 + 下一级”,复习时只看结构图不看依据。怎么补:把“Cache—主存靠程序局部性”“主存—辅存即虚拟存储、目的是扩大容量”这两句话连起来背,虚拟存储的关键词是“扩大”,局部性的关键词是“访问规律”,两套词互不重叠,混不起来。

易漏点二:并发与并行的定义互换。为什么会漏:日常说话里两个词几乎同义,教材上的区别只差“时间间隔”和“时刻”几个字。怎么补:记成“并发看时段、并行看时刻”,再加一个具体画面——单核上多个进程轮流跑是并发,多核上多个进程同时跑是并行。

易漏点三:就绪态与等待态的判定条件。为什么会漏:两个状态的描述都带“等待”,题干稍作改写就分不清。怎么补:只抓一句硬标准——已获得除 CPU 以外所有运行所需资源的是就绪态。凡题干里出现“缺少某资源(I/O、信号量等)”,一律落到等待态;只差 CPU 的,就是就绪态。

5.2 命令部分的两处易错

易错点一:su带不带-当成一回事。为什么错:两条命令都能切换用户,表面看不出差别,直到发现某些命令找不到、环境变量还是旧用户的,才知道踩了坑。怎么补:把-理解成“连环境一起搬过去”,带-才是完整切换身份与环境,不带只是临时换人。凡是题目问“切换用户后环境变量是否改变”,答案就锁定在-上。

易错点二:rpm的查询选项和对象配错。为什么错:-q、-qa、-qi、-ql、-qf长得太像,-p又是叠加在后面的修饰,复习时容易整块吞下去不拆开看。怎么补:把选项拆成“动作 + 对象”两层来记,q是查询动作,i是信息、l是文件列表、f是反查文件所属包;p只是把对象从“已安装”换成“未安装的包文件”,所以带p的命令后面必须跟绝对路径加包全名。另外记住一个边界:-qf只能查 RPM 装出来的文件,手工创建的文件查不到。

6. 复习清单与查漏补缺:一张自测表收尾

复习到后期,最容易犯的错是“什么都看过一遍,但不知道自己哪儿没记住”。比较有效的做法是拿一张表逐项自测,能合上书用自己的话讲出来就划掉,讲不出来的当天补。下面这张清单按知识块排列,可以直接照着过:

知识块自测问题是否过关
冯诺依曼五大部件是哪五个?哪两个合起来是 CPU?
层次结构七层从 0 到 6 分别叫什么?设计者关心哪一层?
指令集指令格式由什么组成?四种寻址方式?
CISC/RISC两者的目标、指令种类、寻址方式差异?
存储层次五层顺序?局部性分哪两种?各举一例
Cache三种映射?三种替换算法?写直达与写回
MESI四个状态全称与含义
操作系统特征并发、共享、虚拟、异步;并发与并行的区别
五大功能处理器、存储、设备、文件、作业各自管什么
中断用户态到内核态三条路?五类中断?
进程进程与程序的区别?PCB 的地位?三态转换条件?
命令格式提示符四段含义?短选项与长选项写法?
用户管理/etc/passwd七个字段?两个文件权限?
RPM安装、升级、卸载、查询各写一条命令
shell三种运行方式?三种引号区别?
重定向0/1/2 是什么?2>&1怎么写才对?
文本处理grep、sed、awk各擅长什么?

表格里最该反复过的是后面四行,也就是命令与 shell 部分。原理题背熟了就稳,命令题却是“看一遍会、隔三天忘”,只能靠手敲。建议把每条命令都在终端里跑一遍,尤其是rpm -qip、rpm -qf、sed -i、awk -F:这几条带参数的,光看文字根本记不住参数位置。

查漏补缺还有一个笨但管用的办法:把错题按“原理类”和“命令类”分开记。原理类的错题回头翻对应的定义原文,命令类的错题直接抄到一张便签上,每天开机先在终端敲一遍。我当初就是吃了这个亏,觉得su和su -反正都能切用户,没当回事,结果考试里一道问环境变量的题直接把我卡住。从那以后我每次复习这类“长得像”的命令,都强制走一遍“写出差异表 + 在终端各跑一次”的流程,再没在同类题上翻过车。

这份整理覆盖了从体系结构到文件管理的六个模块,按上面的顺序过一遍,再拿最后这张表自测,比自己从头刷命令效率高得多。需要完整版 docx 的,按平时找资料的渠道搜文件名就行。希望帮到你。

本文还有配套的精品资源,点击获取

返回列表