常用 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 编程概述

  1. Shell 的本质
    Shell 是用 C 语言编写的程序,是连接用户和 UNIX/Linux 内核的桥梁。

  2. Shebang 行
    #!/bin/bash 说明脚本使用的 Shell 类型,通常放在脚本第一行,用于调用相应的解释程序。

  3. 注释符
    # 是单行注释符,用来说明程序的功能、结构、算法和变量的作用,增加程序可读性。

  4. 文件权限和执行
    Linux 中创建的文件默认不可执行,需要修改权限添加可执行权限后,才能通过 ./文件名 直接运行。
    创建文件:touch 文件名

  5. 查看 Shell 种类
    使用命令 cat /etc/shells 查看系统支持的 Shell 类型。

  6. 环境变量 PATH
    脚本文件是否能够执行与环境变量 PATH 有关。PATH 的值决定了 Shell 在哪些目录中寻找命令或可执行程序,当用户运行命令时在这些目录下按顺序依次搜寻。

  7. 脚本运行方式(3 种)

    • 直接运行:脚本权限设置为可执行,在提示符下直接运行
    • 作为参数:将脚本名作为参数传递给 Shell 程序
    • 重定向输入:以输入重定向方式传递给 bash

1.2 Shell 基础

1.2.1 通配符

文件名的扩展称为通配(Globbing),常见通配符:

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

1.2.2 引号和转义

转义字符 </code>:将特殊字符按普通含义执行。

Shell 中有 3 种引用字符:

  1. 单引号 ' '
    引用一串字符,所有字符都作为普通字符对待。

  2. 双引号 " "
    引用一串字符,但保留 $</code> 和倒引号 ` 的特殊含义:

    • $ 代表引用变量的值
    • ` 代表引用命令
  3. 倒引号 ` `
    被 Shell 解释为命令行,Shell 会先执行该命令,并以其输出结果取代整个倒引号部分。

1.2.3 输入/输出重定向

1. 标准输入重定向

语法 说明
command < file 将文件作为命令的输入
command << 分界符 从标准输入读入,直到遇见分界符才停止

示例:wc -l < file 统计 file 文件的行数

2. 标准输出重定向

语法 说明
command > file 覆盖方式,输出到文件(不存在则创建,存在则覆盖)
command >> file 追加方式,输出到文件

示例:cat file1 file2 > file3

3. 文件描述符

输出重定向的完整写法是 fd>filefd>>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 用户与用户组管理

  1. 用户信息存储
    用户名和 ID 的对应关系存储在 /etc/passwd 文件中。

  2. 用户主目录
    管理员创建用户时,默认在 /home 目录下创建用户主目录。

  3. 密码信息
    存放用户密码信息的目录是 /etc

2.2 用户和用户组管理相关的文件

文件 权限 说明
/etc/passwd rw-r--r-- 用户基本信息
/etc/shadow rw------- 用户密码信息

第 3 章 网络配置

3.1 管理网络接口

计算机的基本网络参数

参数 说明
IP 地址 标识一块网卡接口,由网络号和主机号组成
子网掩码 确定网络部分的位数,IP 地址中对应子网掩码为 1 的位为网络部分
网关 用于跨区域通信
DNS 将域名和 IP 进行映射

Linux 联网配置步骤

  1. 为每个网络接口分配 IP 地址和子网掩码(Netmask)
  2. 配置默认网关(Gateway)
  3. 配置一个或多个 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 个字段)

以太网硬件地址

  • 每个以太网接口有两个地址:IP 地址和硬件(MAC)地址
  • IP 地址用于两台主机间的通信
  • MAC 地址用于同一 IP 网络中不同主机间的通信

本地网络通信过程

  1. 确认通向同一网络地址的路径
  2. 确定目的机器的硬件地址
  3. 使用 ARP 协议(Address Resolution Protocol)进行地址解析

ARP 地址解析

命令 说明
arp -a 检测 ARP 缓存
arp -n 查看 IP 地址与 MAC 地址的映射表

3.3 配置 DNS 客户机

域名系统 DNS 概述

  1. 静态查询方式/etc/hosts 文件存储 IP 地址与主机名的对应关系
  2. DNS 定义:域名系统(Domain Name System)是分布式数据库,用于将 IP 地址转换为易记的域名
  3. 功能:实现主机名与 IP 地址的转换,在 TCP/IP 网络中有重要地位

名称解析顺序

resolve 库解析主机名时的顺序:

  1. 首先执行静态查询(/etc/hosts
  2. 然后查询 /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 所有文本步骤:

  1. 将光标移到文件开头(1G
  2. 在命令模式下输入 3yy(复制 3 行)
  3. 最后一行显示 "3 lines yanked" 表示复制成功

5.9 缓冲区管理

数字编号缓冲区

  • VI 使用 9 个临时缓冲区,编号从 1 到 9
  • 每次删除或复制操作,新内容存到缓冲区 1,旧内容依次后移
  • 使用 np 命令恢复缓冲区内容(如 9p 表示粘贴缓冲区 9 的内容)

命名缓冲区

  • 26 个命名缓冲区,用小写字母 a 到 z 命名
  • 命名缓冲区内容保持不变,直到用户指定该缓冲区进行新的删除或复制操作
  • 命名缓冲区格式:缓冲区名+命令
    • wdd:删除当前行到缓冲区 w
    • z3yy:复制 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+SCtrl+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 进入替换模式:

  1. 输入要搜索的字符串,按 Enter
  2. 输入要替换的字符串,按 Enter
按键 说明
SpaceY 替换当前匹配并进入下一匹配
DeleteN 忽略此次匹配进入下一匹配
,(逗号) 显示替换结果
EnterQ 直接退出
.(句号) 替换当前匹配并退出
! 直接替换剩下的所有匹配
^ 回到前一匹配处

大小写转换

快捷键 说明
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

编辑和编译程序步骤

  1. 打开文件:Ctrl+X Ctrl+F,选择 test.c
  2. 保存文件:Ctrl+X Ctrl+S
  3. 进入终端:Alt+X(M-x),输入 eshell 命令
  4. 编译程序:输入 gcc test.c -o test
  5. 运行程序:输入 ./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

执行流程:

  1. 在当前目录下寻找 makefileMakefile 文件
  2. 读取文件中的规则
  3. 根据依赖关系编译源文件

第 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 计算科学与计算机系统

  1. 冯诺依曼体系结构要点:采用二进制;程序指令与数据统一存储;计算机按照程序(一般为顺序)执行。典型冯诺依曼结构由控制器、运算器、存储器、输入设备、输出设备五部分组成。
  2. 控制器与运算器是 CPU 的核心组成部分;现代 CPU 还包含寄存器组、缓存等,并不等同于“传统单核 CPU”。
  3. 程序与数据存入主存后,运行时 CPU 会从主存中取指、译码并执行(通常按顺序流推进)。冯诺依曼结构可从“时间(指令流)/空间(存储层次)”的角度理解:存储体系对应空间域,指令执行过程对应时间域。

1.2 计算机体系结构的基本概念

1.2.2 计算机系统的层次结构

  1. 计算机系统由硬件与软件组成,是一个复杂的有机整体。
  2. 计算机系统可按功能分为多级层次结构:第 0 层数字逻辑层、第 1 层微体系结构层、第 2 层传统机器层、第 3 层操作系统层、第 4 层汇编语言层、第 5 层高级语言层、第 6 层应用程序层。
  3. 计算机系统结构设计者通常关注(机器语言或汇编语言程序员)所看到的计算机结构。

1.2.3 指令集

  1. 指令集是一个计算机系统支持的所有机器指令的集合,常被视为软硬件之间的分界面。
  2. 常见指令格式:操作码(Opcode)+ 操作数(Operands/地址),以二进制编码表示。
  3. 按操作数数量不同,可分为:零地址指令、一地址指令、二地址指令、三地址指令和多地址指令。
  4. 寻址方式按寻址空间可分为:立即数寻址、寄存器寻址、主存寻址、堆栈寻址等。
  5. 指令常见功能分类:数据传输指令、算术运算指令、逻辑运算指令、程序控制指令、输入/输出指令、处理器控制与调试指令。
  6. 指令集也常称为指令集体系结构 ISA(Instruction Set Architecture)。
  7. 按 ISA 复杂程度,可分为 CISC 和 RISC 两大阵营:CISC(Complex Instruction Set Computer),RISC(Reduced Instruction Set Computer)。
  8. CISC 追求强化指令功能、减少指令条数;RISC 倾向减少指令种类、规范指令格式、简化寻址方式,以便处理器内部并行与流水化实现,提高 VLSI 时代的设计效率与整体性能。

1.2.4 存储系统

  1. 现代通用计算机的存储层次结构:寄存器组、Cache、高速主存(主存储器)、辅助存储器、脱机存储器。越靠上速度越快、容量越小、价格越高;越靠下容量越大、速度越慢、价格越低。
  2. 程序访问的局部性包含时间局部性与空间局部性:
    • 时间局部性:最近访问过的内容在短期内可能再次访问(如循环体指令反复执行)。
    • 空间局部性:访问某个存储单元后,其附近单元短时间内也可能被访问。
  3. “Cache-主存-辅存”是存储体系里最重要的三级层次,常将其划分为“Cache-主存”和“主存-辅存”两个两级存储系统讨论;其中“主存-辅存”两级系统也称为虚拟存储系统。
  4. “Cache-主存”层次的理论依据是程序局部性。
  5. Cache 与主存之间常见的地址映射方式:全相联映射、直接映射、组相联映射。
  6. 采用全相联映射或组相联映射时,Cache 满且需要装入新块,会触发替换算法。常见替换算法有随机(RAND)、先进先出(FIFO)、最近最少使用(LRU)等。
  7. Cache 读写需要考虑数据一致性:同一份数据在不同存储位置的多个拷贝应保持一致。一致性体现在两方面:
    • Cache 与主存之间的数据一致性
    • 多核/多处理器场景下,各处理器私有 Cache 之间的数据一致性
  8. Cache 与主存之间的一致性通常通过写策略保证:写直达(write-through)、写回(write-back)。
  9. 多核处理器中,核间缓存一致性由缓存一致性协议维护;MESI(Modified/Exclusive/Shared/Invalid)是经典协议之一。
  10. MESI 协议将 Cache Line 状态分为:修改(Modified)、独占(Exclusive)、共享(Shared)、失效(Invalid)。
  11. 虚拟存储系统用于在有限主存条件下,为程序提供“更大、近似连续”的地址空间与内存使用假象;代价是发生缺页等情况时访问延迟显著增加。

1.3 微处理器体系结构

  1. 微处理器(CPU)是计算机系统中最重要的核心部件之一。
  2. 单核处理器的基本逻辑结构可概括为控制器、运算器与寄存器/存储单元等,通过 CPU 内部总线互连。
  3. 目前通用处理器芯片多采用多核处理器(Chip Multi-Processor,CMP)架构。按计算核心是否对等,CMP 可分为同构多核与异构多核:核心相同且地位对等为同构多核;核心不同且地位不对等为异构多核,常采用“主处理核 + 协处理核”的设计。(P19)
  4. CPU 指令执行过程通常可抽象为 5 个阶段:取指令、指令译码、执行、访存、结果写回。

1.4 操作系统的基本概念

  1. 操作系统是通用计算机系统中不可或缺的系统软件。
  2. 计算机系统资源可大致分为四类:处理器、存储器、I/O 设备和文件。
  3. 对上述资源的管理是操作系统内核的主要功能。

1.4.2 操作系统的基本特征

现代通用操作系统一般具有并发、共享、虚拟和异步四个基本特征:并发是指两个或多个事件在同一时间间隔内发生;共享是指软硬件资源可被多个并发执行的进程共同使用;虚拟是指把一个物理实体抽象为一个或多个逻辑上的对应物;异步(随机性/不确定性)是指在相同环境与初始条件下,同一程序的执行顺序与耗时可能不同。(避免混淆:并行是指两个或多个事件在同一时刻发生)

1.5 操作系统的基本功能和原理

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

1.5.1 处理器管理

处理器管理主要包括:中断处理与进程管理。

1.5.1.1 中断处理
  1. 在处理器上运行的指令按权限可分为两类:
    • 特权指令:只能由操作系统内核执行,通常涉及改变机器状态、修改关键寄存器、启动设备等敏感操作。
    • 非特权指令:应用程序也可执行的指令。
  2. 处理器运行状态一般分为内核态与用户态:内核态可执行所有指令;用户态只能执行非特权指令。
  3. 用户态切换到内核态的三种典型方式:系统调用、异常(陷入/Trap)、外设中断。三者通常都通过中断/异常机制完成。
  4. 中断:CPU 对系统发生的某个事件做出响应,使其暂停当前程序,保存现场并转去执行相应处理程序;处理完成后按规则返回继续执行。
  5. 概念:引起中断的事件或发出中断请求的来源称为中断源;中断源向 CPU 提出的处理请求称为中断请求;发生中断时被打断程序的暂停点称为断点。
  6. 访管(Trap/SVC)指令/系统调用:一种使 CPU 状态从用户态转入内核态的机制,由操作系统根据不同编号执行对应服务。
  7. 中断类型按功能可分为(类似 IBM 360/370 的分类法):
    1. 机器故障中断:硬件故障触发(如电源故障、内存校验错误等),进入诊断与处理。
    2. I/O 中断:来自通道或外设,用于反映设备工作情况(如磁盘传输完成、打印结束等)。
    3. 外部中断:来自系统外部装置(如计时器到时、控制台操作、多机系统信号等)。
    4. 程序性中断:指令/数据使用异常(如非法操作码、无效地址、算术溢出等)。
    5. 访管中断:执行访管/Trap 指令产生,使 CPU 从用户态进入内核态以获得操作系统服务。
  8. 相关拓展:https://blog.csdn.net/weixin_36278982/article/details/113411238
1.5.1.2 进程管理
  1. 进程:程序在某数据集合上的一次运行活动,是系统进行资源分配与调度的基本单位。
  2. 进程与程序:进程是动态概念,程序是静态概念。进程具有并发特征与生命周期;程序可长期保存在外存。一个程序在不同数据集上运行可形成不同进程;进程实体由程序、数据与进程控制块(PCB)组成。
  3. PCB(进程控制块)用于描述进程的动态变化,是进程存在的唯一标志。
  4. 线程:处理器调度的最小单位。线程包含于进程中,是进程内一条顺序控制流;一个进程可包含多个线程并发执行(是否并行取决于硬件与调度)。
  5. 进程状态及转换:三种基本状态为运行态(running)、就绪态(ready)、等待态(wait/blocked/sleep)。实际系统中常增加新建态(new)与终止态(exit)。
  6. 已经获得除 CPU 以外的所有运行所需资源、只差 CPU 的进程处于就绪态。(P30)

1.5.2 存储管理

  1. 将用户源程序变为可在内存中执行的程序通常经历:编译、链接、装入。
  2. 存储管理主要功能:内存空间分配与回收、地址转换、内存空间扩充、存储保护。

1.5.3 设备管理

设备管理负责处理器与外部设备之间的数据交互,包括把设备分配给请求设备的进程、处理 CPU 与设备之间的 I/O 通信、响应设备中断请求、维护与回收设备等。

1.5.4 文件管理

负责文件管理的部分称为文件系统,涉及文件的逻辑组织与物理组织、目录结构与管理等。常见文件物理结构有顺序结构、链表结构、索引结构等。(P41)

1.5.5 作业管理

作业是用户在一次计算过程或事务处理中要求计算机系统完成工作的总和,也是用户向计算机系统提交任务的基本单位。包括作业输入/输出、作业调度与控制。作业从提交到执行结束退出系统,一般经历提交、后备、执行、完成四个状态。

Linux 系统概述(补充)

  1. Linus Torvalds 负责开发的 Linux 只是一个内核。内核提供设备驱动、文件系统、进程管理、网络通信等功能;操作系统通常还包含用户态工具、库与应用等。
  2. 常见 Linux 发行版:Red Hat、Debian、Fedora、CentOS、Ubuntu、SUSE、Gentoo、Slackware 等。
  3. Linux 在服务器、云计算、移动端(Android 基于 Linux 内核)等领域应用广泛。

Linux 系统使用基础(补充)

常用 Linux 命令:命令格式

终端中的提示符示例:

[root@localhost ~]#
  • root:当前登录用户
  • localhost:主机名简写(完整主机名通常为 localhost.localdomain
  • ~:当前目录(家目录/主目录)
  • #:提示符(# 通常表示超级用户,$ 通常表示普通用户)

家目录又称主目录:超级用户的家目录通常为 /root,普通用户为 /home/用户名。初始登录状态下,用户创建的文件一般位于家目录。切换目录命令为 cd

Linux 命令基本格式:

[root@localhost ~]# 命令 [选项] [参数]
  • 短选项:如 -l
  • 长选项:如 --all
  • 选项用于调整命令行为,参数通常是命令的操作对象

Ciallo~(∠・ω< )⌒★