UNIX系统复习-3
这是我复习《UNIX系统》这门课程时记录的一些笔记 ,希望能对你有所帮助😊
模式匹配与处理语言awk
1. AWK 基本概念
- AWK 是一种模式匹配与处理语言,主要用于文本处理和数据提取。
- 基本使用形式:
1
2awk 'program' filename # 处理文件
command | awk 'program' # 处理管道输入 - program 结构:
1
2
3pattern1 { action1 }
pattern2 { action2 }
...pattern
:匹配条件(正则表达式、逻辑表达式)action
:匹配后执行的操作(如print
、printf
)
2. 默认行为
- 默认模式:
1
2awk '/pattern/' file # 类似 `grep`,输出匹配的行
awk '{print}' file # 类似 `cat`,输出所有行 - 示例:
1
2awk '//' file # 输出所有行
awk '/main/{print "-----"}' file # 匹配 `main` 并打印分隔线
3. 记录与字段
- 记录(Record):默认以行为单位,
NR
表示当前行号。 - 字段(Field):默认以空格/Tab分隔,
$1
、$2
… 表示第 1、2 个字段,$0
表示整行,NF
表示字段数。 - 示例:
1
2awk '{print NR, $0}' file # 显示行号 + 整行
ls -l | awk '/^d/{print $8}' # 仅输出目录名
4. 输出控制
- **
print
**:默认换行1
awk '{print NR ": " $1, $8}' file
- **
printf
**:格式化输出1
awk '{printf("%d: %s\n", NR, $0)}' file
5. 模式匹配(Pattern)
- 字段匹配:
1
2
3awk '$5 ~ /.....*/' # 第 5 字段长度 ≥ 5
awk '$5 !~ /.....*/' # 第 5 字段长度 < 5
awk '$5 == "4096"' # 第 5 字段等于 "4096" - 逻辑运算:
1
2awk 'length($5) > 3' # 第 5 字段长度 > 3
awk '!(length($5) > 3)' # 第 5 字段长度 ≤ 3 - 特殊模式:
1
2awk 'BEGIN {初始化动作}' # 程序开始前执行
awk 'END {结束动作}' # 程序结束后执行
6. 变量与运算
- 变量定义:
1
awk '{nw += NF; nc += length($0)+1} END {print NR, nw, nc}' file
- 类似
wc
命令,计算行数、单词数、字符数。
- 类似
- 算术运算:
1
awk '{sum += $1} END {print sum}' # 计算第 1 列总和
7. 流程控制
- **
if-else
**:1
2
3
4
5awk '{
if ($1 == lastword)
printf("重复单词 %s, 行号 %d:\n%s\n", $1, NR, $0);
lastword = $NF;
}' file while
循环:1
2
3
4
5
6
7awk '{
i = 1;
while (i <= NF) {
print $i;
i++;
}
}' file- 控制语句:
break
:退出循环continue
:跳过当前循环next
:处理下一条记录exit
:结束程序
8. 内部变量
变量 | 描述 |
---|---|
FILENAME | 当前输入文件名 |
RS | 输入记录分隔符(默认 \n ) |
FS | 输入字段分隔符(默认 空格/Tab ) |
NF | 当前记录的字段数 |
NR | 当前记录数(行号) |
OFS | 输出字段分隔符(默认 空格 ) |
ORS | 输出记录分隔符(默认 \n ) |
9. 常用函数
函数 | 描述 |
---|---|
length(s) | 返回字符串长度 |
substr(s, m, n) | 提取子串(从 m 开始,取 n 个字符) |
index(s1, s2) | 返回 s2 在 s1 中的位置 |
split(s, a, sep) | 按 sep 分割 s 存入数组 a |
tolower(s) / toupper(s) | 转换大小写 |
sin(x) / cos(x) / log(x) | 数学函数 |
10. 数组
- 定义与遍历:
1
2
3
4
5
6
7awk '{
line[NR] = $0 # 存储每行到数组
}
END {
for (i=1; i<=NR; i++)
print line[i] # 按顺序输出
}' file - 关联数组:
1
awk '{count[$1]++} END {for (word in count) print word, count[word]}' file
- 统计第 1 列单词出现次数(类似
uniq -c
)。
- 统计第 1 列单词出现次数(类似
11. 输入输出约定
- 输入来源:
- 指定文件名:
awk 'program' file
- 未指定:从
stdin
读取(支持管道)
- 指定文件名:
- 示例:
1
2cat file | awk '{print $1}' # 从管道读取
awk '{print $1}' file # 从文件读取
12. 典型应用场景
- 数据提取:
1
awk '{print $1, $3}' data.txt # 提取第 1、3 列
- 统计计算:
1
awk '{sum += $1} END {print sum}' numbers.txt
- 文本过滤:
1
awk '/error/{print}' logfile # 过滤含 "error" 的行
- 格式化输出:
1
awk '{printf "%-10s %5d\n", $1, $2}' data.txt
总结
- AWK 优势:
- 强大的文本处理能力
- 支持正则匹配、字段操作
- 内置变量和函数简化编程
- 适用场景:
- 日志分析
- 数据清洗
- 报表生成
- 学习建议:
- 掌握模式匹配(
/pattern/
) - 熟练使用字段操作(
$1
,$NF
) - 理解流程控制(
if
,while
,for
)
- 掌握模式匹配(
通过掌握这些核心知识,可以高效使用 AWK 处理各种文本数据任务。 🚀
图形界面-X
**X Window **
1. 历史发展
- 起源(1984年):
- 由MIT基于斯坦福大学的W视窗系统开发,首个版本命名为X1(X是W的下一个字母),正式名称为X Window。
- 1985年陆续发布X6、X9、X10版本,并开始对外授权。
- X11时代:
- 1987年发布X11(最终稳定版本),MIT退出开发。
- 1994年发布X11R6(第六次修订版),成为主流标准。
2. 体系结构
- 客户-服务器模型:
- X Client:应用程序(如浏览器、编辑器),负责生成显示请求。
- X Server:接收请求并驱动硬件显示,同时处理输入设备(键盘、鼠标)事件。
- X协议:Client与Server之间的通信协议,独立于硬件和操作系统。
3. 核心组件
- X Server:
- 功能:处理图形输出(如窗口渲染)和输入事件(如鼠标点击)。
- 特点:屏蔽硬件差异,支持跨平台(如远程桌面场景)。
- 窗口管理器(Window Manager):
- 特殊X Client,管理窗口布局、大小、叠放顺序等(如GNOME的Mutter)。
- 桌面系统(Desktop Environment):
- 依赖窗口管理器,提供完整用户界面(如KDE、XFCE)。
4. X协议的优势
- 可移植性:协议抽象化,Client无需关心底层硬件。
- 网络透明性:
- Client和Server可运行在不同机器(如本地显示远程程序)。
- 注意:本地运行X Server,远程运行X Client(与常规网络模型相反)。
5. 开发接口
- X Library(底层):
- 直接操作X协议,例如Xlib、Motif、Qt(早期版本)。
- X Toolkit(高层):
- 提供封装组件,如Xt、GTK(基于Xlib)、OpenLook。
6. 应用场景
- 远程图形化访问:通过X11转发(如SSH -X)运行远程图形程序。
- 现代衍生:Wayland(X11的替代者)仍兼容X协议。
系统管理
Ubuntu的管理
1. 激活超级用户(root)(非必须,默认禁用)
- 方法 1:修改配置文件或通过 GUI:
1
sudo vi /etc/gdm/gdm.conf # 将 "AllowRoot=false" 改为 "AllowRoot=true"
系统
→系统管理
→登录窗口
→安全
→ 勾选允许本地系统管理员登录
。 - 方法 2:设置 root 密码
1
sudo passwd root # 设置 root 密码
- 生效方式:重启系统。
2. 更改软件源(优化下载速度)
- 配置文件路径:
1
/etc/apt/sources.list # 存储软件源地址
- 修改方式:
1
sudo vi /etc/apt/sources.list # 替换为更快的镜像源(如教育网源)
- 更新软件列表:
1
sudo apt-get update # 使新软件源生效
- 查找合适源:
可搜索Ubuntu 教育网 软件源
获取优化地址
网络管理
1. 网络基础配置
(1)IP地址、子网掩码、默认网关
- 配置文件:
/etc/network/interfaces
- 静态IP配置示例:
1
2
3
4
5auto eth0
iface eth0 inet static
address 192.168.1.100 # 设置IP地址
netmask 255.255.255.0 # 子网掩码
gateway 192.168.1.1 # 默认网关 - 动态IP(DHCP)配置:
1
iface eth0 inet dhcp
- 生效方式:
1
2
3sudo /etc/init.d/networking restart # 重启网络服务
ifconfig # 查看IP配置
route -n # 查看路由表
(2)DNS服务器配置
- 配置文件:
/etc/resolv.conf
- 修改方式:
1
2nameserver 8.8.8.8 # Google DNS
nameserver 8.8.4.4 # 备用DNS - 注意:
- 该文件可能被
NetworkManager
管理,手动修改可能被覆盖。 - 长期生效可修改
/etc/resolvconf/resolv.conf.d/base
。
- 该文件可能被
2. 网络应用实例
(1)搭建 Web 服务器(Apache)
- 安装 Apache:
1
sudo apt-get install apache2
- 访问方式:
- 浏览器输入
http://<Ubuntu_IP>
(如http://192.168.1.100
)。
- 浏览器输入
(2)文件共享(Samba 网络邻居)
- 安装 Samba:
1
sudo apt-get install samba
- 共享文件夹:
- 创建共享目录并设置权限:
1
2mkdir /shared
chmod 777 /shared - 右键文件夹 → 共享选项,勾选 共享此目录。
- 配置 Samba 访问权限(可选编辑
/etc/samba/smb.conf
)。
- 创建共享目录并设置权限:
3. 关键命令总结
用途 | 命令 |
---|---|
重启网络服务 | sudo /etc/init.d/networking restart |
查看IP配置 | ifconfig 或 ip a |
查看路由表 | route -n |
测试网络连通性 | ping <IP> |
安装Apache | sudo apt-get install apache2 |
安装Samba | sudo apt-get install samba |
注:
- 修改网络配置前建议备份原文件(如
sudo cp /etc/network/interfaces ~/interfaces.bak
)。 - 使用
systemd
的较新系统可能需改用sudo systemctl restart networking
。
4.术语解释
1. 核心概念解释
术语 | 定义 | 示例 |
---|---|---|
IP地址 | 设备的网络唯一标识符,用于在互联网或局域网中通信。分为 IPv4(如 192.168.1.100 )和 IPv6。 | 192.168.1.100 |
子网掩码 | 定义IP地址中哪部分属于网络号,哪部分属于主机号,用于划分同一子网内的设备。 | 255.255.255.0 (表示前24位是网络号) |
默认网关 | 本地网络与外部网络(如互联网)通信的“出口”,通常是路由器的IP地址。 | 192.168.1.1 |
动态IP | 由DHCP服务器自动分配的IP地址,设备重启后可能变化。适合家庭网络或临时设备。 | 通过 iface eth0 inet dhcp 配置 |
DNS服务器 | 将域名(如 google.com )转换为IP地址的服务,使人类可读的网址能被计算机理解。 | 8.8.8.8 (Google DNS) |
2. 详细说明
(1)IP地址
- 作用:唯一标识网络中的设备(如电脑、手机、服务器)。
- 分类:
- IPv4:32位地址,格式如
192.168.1.100
(已濒临枯竭)。 - IPv6:128位地址,格式如
2001:0db8:85a3::8a2e:0370:7334
(解决IPv4不足问题)。
- IPv4:32位地址,格式如
- 类型:
- 公有IP:全球唯一,由ISP分配(如
203.0.113.1
)。 - 私有IP:局域网内使用(如
192.168.x.x
、10.x.x.x
)。
- 公有IP:全球唯一,由ISP分配(如
(2)子网掩码
- 作用:划分IP地址的网络部分和主机部分。
- 示例:IP
192.168.1.100
,子网掩码255.255.255.0
→ 网络号192.168.1.0
,主机号100
。
- 示例:IP
- 常见子网掩码:
255.255.255.0
(/24):支持254台主机(如家庭网络)。255.255.0.0
(/16):支持6.5万台主机(如企业网络)。
(3)默认网关
- 作用:当设备需要访问其他网络(如互联网)时,数据包会发送到网关(通常是路由器)。
- 示例:家庭路由器的IP通常是
192.168.1.1
。
- 示例:家庭路由器的IP通常是
(4)动态IP(DHCP)
- 工作原理:设备启动时向DHCP服务器(如路由器)请求IP地址,自动分配并设置子网掩码、网关等。
- 优点:无需手动配置,适合移动设备或临时网络。
(5)DNS服务器
- 作用:将域名(如
baidu.com
)解析为IP地址(如39.156.66.10
)。 - 常见DNS:
8.8.8.8
(Google Public DNS)114.114.114.114
(中国电信DNS)
3. 配置对比表(静态IP vs 动态IP)
配置项 | 静态IP | 动态IP(DHCP) |
---|---|---|
IP地址 | 手动指定(如 192.168.1.100 ) | 由DHCP服务器自动分配 |
适用场景 | 服务器、打印机等需固定IP的设备 | 手机、笔记本电脑等临时设备 |
配置复杂度 | 需手动设置IP、子网掩码、网关 | 自动获取,无需配置 |
稳定性 | IP固定,不易冲突 | IP可能变化,依赖DHCP服务器 |
4. 示例命令(Ubuntu)
查看当前IP和网关:
1
2
3ifconfig # 查看IP和子网掩码
route -n # 查看默认网关
cat /etc/resolv.conf # 查看DNS服务器测试DNS解析:
1
ping google.com # 测试DNS是否正常工作
总结:
- IP地址是设备的“门牌号”,子网掩码决定“小区范围”,网关是“小区出口”,DNS是“电话簿”。
- 静态IP适合固定设备,动态IP适合移动设备。
用户管理
- 略
磁盘管理
1. 磁盘概述
- 磁盘类型:
- 软盘:
/dev/fd[01]
(已淘汰) - 光盘:
/dev/cdrom
(通常符号链接到/dev/sr0
) - 硬盘:
- IDE硬盘:
/dev/hd[a-d]
(旧式接口,已少见) - SCSI/SATA硬盘:
/dev/sd[a-z]
(现代主流设备)
- IDE硬盘:
- 软盘:
- 分区命名规则:
- 主分区:
/dev/sda1
、/dev/sda2
(最多4个) - 扩展分区 + 逻辑分区:
/dev/sda5
、/dev/sda6
(从5开始编号)
- 主分区:
2. 硬盘分区(fdisk
)
- 分区规则:
- 一块硬盘最多分4个主分区,或 3主分区 + 1扩展分区(扩展分区可再分多个逻辑分区)。
- 操作步骤:
1
sudo fdisk /dev/sdb # 对第二块硬盘分区
- 交互命令:
n
:新建分区d
:删除分区p
:打印分区表w
:保存并退出
- 交互命令:
3. 格式化分区(mkfs
)
- 作用:创建文件系统(如ext4、NTFS)。
- 常用命令:
1
2sudo mkfs -t ext4 /dev/sdb1 # 格式化为ext4文件系统
sudo mkfs -t ntfs /dev/sdb2 # 格式化为NTFS(Windows兼容) - 常见文件系统类型:
ext4
(Linux默认)xfs
(高性能)ntfs
/fat32
(Windows兼容)
4. 挂载与卸载(mount
/umount
)
- 挂载分区:
1
sudo mount /dev/sdb1 /mnt/data # 将分区挂载到/mnt/data
- 要求:挂载点目录需为空。
- 卸载分区:
1
2sudo umount /dev/sdb1 # 通过设备名卸载
sudo umount /mnt/data # 通过挂载点卸载
5. 查看磁盘信息(df
/lsblk
)
- 查看挂载情况:
1
2df -h # 显示磁盘使用情况(人类可读)
lsblk # 查看所有块设备及挂载点 - 示例输出:
1
/dev/sdb1 20G 5.0G 15G 25% /mnt/data
6. 关键命令速查表
操作 | 命令 | 说明 |
---|---|---|
分区管理 | sudo fdisk /dev/sdb | 交互式分区工具 |
格式化分区 | sudo mkfs -t ext4 /dev/sdb1 | 创建ext4文件系统 |
挂载分区 | sudo mount /dev/sdb1 /mnt/data | 关联分区与目录 |
卸载分区 | sudo umount /mnt/data | 解除挂载 |
查看磁盘空间 | df -h | 显示已挂载分区的使用情况 |
查看块设备 | lsblk | 列出所有磁盘及分区信息 |
7. 注意事项
- 数据安全:操作分区前备份重要数据,
fdisk
和mkfs
会清除数据! - 自动挂载:编辑
/etc/fstab
可实现开机自动挂载。 - 权限问题:挂载后需确保用户对目录有读写权限(如
chmod 777 /mnt/data
)。
总结:
- 分区 → 格式化 → 挂载 是磁盘使用的三大步骤。
fdisk
用于分区,mkfs
用于格式化,mount
/umount
用于挂载和卸载。
进程管理
1. 进程概述
- 进程(Process):
- 简单来说,就是一个正在运行的程序(但严格来说,进程是程序的执行实例,包含代码、数据和系统资源)。
- 包括:
- 系统核心进程(如
systemd
、kthreadd
) - 系统服务进程(如
sshd
、nginx
) - 普通用户进程(如
bash
、vim
)
- 系统核心进程(如
- 可强制结束(通过
kill
命令发送信号)。
2. 查看进程(ps
命令)
命令 | 作用 |
---|---|
ps | 查看当前终端启动的进程(仅当前会话)。 |
ps -t 终端名 | 显示某个终端(如 pts/0 )启动的进程。 |
ps -u 用户名 | 显示某个用户(如 root )的所有进程。 |
ps -e | 显示所有进程(包括系统进程)。 |
ps -f | 显示进程的完整信息(如启动命令)。 |
ps –ef | grep 'xxx' | 过滤特定进程(如 ps -ef | grep nginx )。 |
示例:
1 |
|
3. 结束进程(kill
命令)
语法:
1
kill [-signal] PID
PID
:进程ID(通过ps
或top
获取)。-signal
:发送的信号类型(默认-15
,即SIGTERM
)。
常用信号:
信号 数值 作用 SIGINT
2
中断进程(类似 Ctrl+C
)。SIGTERM
15
优雅终止(默认信号)。 SIGKILL
9
强制杀死(无法被忽略)。 查看所有信号:
1
kill -l
示例:
1
kill -9 1234 # 强制结束PID为1234的进程
4. 关键点总结
- 进程是程序的运行实例,包含系统资源。
ps
用于查看进程,常用组合ps -ef
+grep
。kill
用于终止进程:- 优先用
-15
(SIGTERM
)尝试正常退出。 - 若无效,再用
-9
(SIGKILL
)强制结束。
- 优先用
- **慎用
kill -9
**:可能导致资源未释放(如临时文件未删除)。
5. 扩展命令
- **
top
/htop
**:动态查看进程及资源占用。 - **
pkill
**:按进程名结束(如pkill -9 nginx
)。 - **
killall
**:结束所有同名进程(如killall -u git
)。
附:进程管理流程图
1 |
|
UNIX系统复习-3
http://pzhwuhu.github.io/2025/05/31/UNIX_Review_3/