UNIX系统复习-3

这是我复习《UNIX系统》这门课程时记录的一些笔记 ,希望能对你有所帮助😊

模式匹配与处理语言awk

1. AWK 基本概念

  • AWK 是一种模式匹配与处理语言,主要用于文本处理数据提取
  • 基本使用形式
    1
    2
    awk 'program' filename          # 处理文件
    command | awk 'program' # 处理管道输入
  • program 结构
    1
    2
    3
    pattern1 { action1 }
    pattern2 { action2 }
    ...
    • pattern:匹配条件(正则表达式、逻辑表达式)
    • action:匹配后执行的操作(如 printprintf

2. 默认行为

  • 默认模式
    1
    2
    awk '/pattern/' file    # 类似 `grep`,输出匹配的行
    awk '{print}' file # 类似 `cat`,输出所有行
  • 示例
    1
    2
    awk '//' file           # 输出所有行
    awk '/main/{print "-----"}' file # 匹配 `main` 并打印分隔线

3. 记录与字段

  • 记录(Record):默认以为单位,NR 表示当前行号。
  • 字段(Field):默认以空格/Tab分隔,$1$2… 表示第 1、2 个字段,$0 表示整行,NF 表示字段数。
  • 示例
    1
    2
    awk '{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
    3
    awk '$5 ~ /.....*/'        # 第 5 字段长度 ≥ 5
    awk '$5 !~ /.....*/' # 第 5 字段长度 < 5
    awk '$5 == "4096"' # 第 5 字段等于 "4096"
  • 逻辑运算
    1
    2
    awk 'length($5) > 3'       # 第 5 字段长度 > 3
    awk '!(length($5) > 3)' # 第 5 字段长度 ≤ 3
  • 特殊模式
    1
    2
    awk '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
    5
    awk '{
    if ($1 == lastword)
    printf("重复单词 %s, 行号 %d:\n%s\n", $1, NR, $0);
    lastword = $NF;
    }' file
  • while 循环
    1
    2
    3
    4
    5
    6
    7
    awk '{
    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)返回 s2s1 中的位置
split(s, a, sep)sep 分割 s 存入数组 a
tolower(s) / toupper(s)转换大小写
sin(x) / cos(x) / log(x)数学函数

10. 数组

  • 定义与遍历
    1
    2
    3
    4
    5
    6
    7
    awk '{
    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)。

11. 输入输出约定

  • 输入来源
    • 指定文件名:awk 'program' file
    • 未指定:从 stdin 读取(支持管道)
  • 示例
    1
    2
    cat file | awk '{print $1}'   # 从管道读取
    awk '{print $1}' file # 从文件读取

12. 典型应用场景

  1. 数据提取
    1
    awk '{print $1, $3}' data.txt  # 提取第 1、3 列
  2. 统计计算
    1
    awk '{sum += $1} END {print sum}' numbers.txt
  3. 文本过滤
    1
    awk '/error/{print}' logfile  # 过滤含 "error" 的行
  4. 格式化输出
    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协议,例如XlibMotifQt(早期版本)。
  • X Toolkit(高层):
    • 提供封装组件,如XtGTK(基于Xlib)、OpenLook

6. 应用场景

  • 远程图形化访问:通过X11转发(如SSH -X)运行远程图形程序。
  • 现代衍生:Wayland(X11的替代者)仍兼容X协议。

系统管理

Ubuntu的管理

1. 激活超级用户(root)(非必须,默认禁用)

  • 方法 1:修改配置文件
    1
    sudo vi /etc/gdm/gdm.conf  # 将 "AllowRoot=false" 改为 "AllowRoot=true"
    或通过 GUI:
    系统系统管理登录窗口安全 → 勾选 允许本地系统管理员登录
  • 方法 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
    5
    auto 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
    3
    sudo /etc/init.d/networking restart  # 重启网络服务
    ifconfig # 查看IP配置
    route -n # 查看路由表

(2)DNS服务器配置

  • 配置文件/etc/resolv.conf
  • 修改方式
    1
    2
    nameserver 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. 创建共享目录并设置权限:
      1
      2
      mkdir /shared
      chmod 777 /shared
    2. 右键文件夹 → 共享选项,勾选 共享此目录
    3. 配置 Samba 访问权限(可选编辑 /etc/samba/smb.conf)。

3. 关键命令总结

用途命令
重启网络服务sudo /etc/init.d/networking restart
查看IP配置ifconfigip a
查看路由表route -n
测试网络连通性ping <IP>
安装Apachesudo apt-get install apache2
安装Sambasudo apt-get install samba

  • 修改网络配置前建议备份原文件(如 sudo cp /etc/network/interfaces ~/interfaces.bak)。
  • 使用 systemd 的较新系统可能需改用 sudo systemctl restart networking

4.术语解释

1. 核心概念解释

术语定义示例
IP地址设备的网络唯一标识符,用于在互联网或局域网中通信。分为 IPv4(如 192.168.1.100)和 IPv6192.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不足问题)。
  • 类型
    • 公有IP:全球唯一,由ISP分配(如 203.0.113.1)。
    • 私有IP:局域网内使用(如 192.168.x.x10.x.x.x)。
(2)子网掩码
  • 作用:划分IP地址的网络部分主机部分
    • 示例:IP 192.168.1.100,子网掩码 255.255.255.0 → 网络号 192.168.1.0,主机号 100
  • 常见子网掩码
    • 255.255.255.0(/24):支持254台主机(如家庭网络)。
    • 255.255.0.0(/16):支持6.5万台主机(如企业网络)。
(3)默认网关
  • 作用:当设备需要访问其他网络(如互联网)时,数据包会发送到网关(通常是路由器)。
    • 示例:家庭路由器的IP通常是 192.168.1.1
(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
    3
    ifconfig      # 查看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](现代主流设备)
  • 分区命名规则
    • 主分区:/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
    2
    sudo 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
    2
    sudo umount /dev/sdb1   # 通过设备名卸载
    sudo umount /mnt/data # 通过挂载点卸载

5. 查看磁盘信息(df/lsblk

  • 查看挂载情况
    1
    2
    df -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. 注意事项

  1. 数据安全:操作分区前备份重要数据,fdiskmkfs 会清除数据!
  2. 自动挂载:编辑 /etc/fstab 可实现开机自动挂载。
  3. 权限问题:挂载后需确保用户对目录有读写权限(如 chmod 777 /mnt/data)。

总结

  • 分区格式化挂载 是磁盘使用的三大步骤。
  • fdisk 用于分区,mkfs 用于格式化,mount/umount 用于挂载和卸载。

进程管理

1. 进程概述

  • 进程(Process)
    • 简单来说,就是一个正在运行的程序(但严格来说,进程是程序的执行实例,包含代码、数据和系统资源)。
    • 包括:
      • 系统核心进程(如 systemdkthreadd
      • 系统服务进程(如 sshdnginx
      • 普通用户进程(如 bashvim
    • 可强制结束(通过 kill 命令发送信号)。

2. 查看进程(ps 命令)

命令作用
ps查看当前终端启动的进程(仅当前会话)。
ps -t 终端名显示某个终端(如 pts/0)启动的进程。
ps -u 用户名显示某个用户(如 root)的所有进程。
ps -e显示所有进程(包括系统进程)。
ps -f显示进程的完整信息(如启动命令)。
ps –ef | grep 'xxx'过滤特定进程(如 ps -ef | grep nginx)。

示例

1
ps -ef | grep sshd  # 查找所有SSH服务进程

3. 结束进程(kill 命令)

  • 语法

    1
    kill [-signal] PID
    • PID:进程ID(通过 pstop 获取)。
    • -signal:发送的信号类型(默认 -15,即 SIGTERM)。
  • 常用信号

    信号数值作用
    SIGINT2中断进程(类似 Ctrl+C)。
    SIGTERM15优雅终止(默认信号)。
    SIGKILL9强制杀死(无法被忽略)。
  • 查看所有信号

    1
    kill -l
  • 示例

    1
    kill -9 1234   # 强制结束PID为1234的进程

4. 关键点总结

  1. 进程是程序的运行实例,包含系统资源。
  2. ps 用于查看进程,常用组合 ps -ef + grep
  3. kill 用于终止进程
    • 优先用 -15SIGTERM)尝试正常退出。
    • 若无效,再用 -9SIGKILL)强制结束。
  4. **慎用 kill -9**:可能导致资源未释放(如临时文件未删除)。

5. 扩展命令

  • **top/htop**:动态查看进程及资源占用。
  • **pkill**:按进程名结束(如 pkill -9 nginx)。
  • **killall**:结束所有同名进程(如 killall -u git)。

附:进程管理流程图

1
查看进程 → ps -ef | grep [进程名] → 获取PID → kill -15 [PID] → 检查是否结束 → 若未结束 → kill -9 [PID]

UNIX系统复习-3
http://pzhwuhu.github.io/2025/05/31/UNIX_Review_3/
本文作者
pzhwuhu
发布于
2025年5月31日
更新于
2025年5月31日
许可协议