LINUX 系统分析与高级编程技术 PDF 文档
应该说,Linux 起源于 Internet,虽然最初的 Linux 核心程序是由一名芬兰赫尔辛基的大学生 Linus Torvalds 编写的。1990 年,他还在读大学本科计算机专业的时候,因为不满学校的服务器一次只能接待 16 个人连网,于是一气之下,我干脆自己掏钱买了一台 PC,Linus 回忆说。
Linus 在自己的 Intel 386 PC 上,利用 Tanenbaum 教授自行设计的微型 UNIX 操作系统 Minix 为开发平台,开发了属于他自己的第一个程序。这个程序包括两个进程,都是向屏幕上写字母,然后用一个定时器来切换这两个进程。他回忆说,一个进程写 A,另一个进程写 B,所以我就在屏幕上看到了 AAAA、BBBB 如此循环重复输出结果。
到第二年,他完成了如今令他誉满全球的操作系统 Linux 的最初内核,第三年,Linus 把这一软件奉献给自由软件基金会( Free Software Foundation,简称 FSF)的 GNU 计划,并公布了全部源代码,使得任何人都可以从网上下载、分析、修改、添加新功能,甚至出售赢利。现在,通过 Internet,遍及世界各地的计算机高手把一个随时都有可能被遗弃的萌芽,扶植成了一个计算机领域中任何人都无法忽视的力量。不少专业人员认为 Linux 最安全、最稳定,对硬件系统最不敏感。Linux 目前装机总数已超过 600 万台,分布于全世界。在当今金钱至上的商业社会,一个自由软件得到如此多的人的关心,不能不说是一个奇迹。
第一篇 Linux 系统介绍
第 1 章 Linux 简介
1.1 Linux 的起源
1.2 自由软件基金会的 GNU 计划
1.3 Linux 的发音
1.4 Linux 的特点
1.5 基本硬件要求
1.6 如何获得 Linux
1.6.1 从网上下载 Linux
1.6.2 从光盘获得 Linux
1.7 涉及 Linux 的 Web 网址和新闻讨论组
1.8 Linux 的不足之处
第 2 章外壳及常用命令
2.1 登录和退出
2.2 Linux 系统的外壳
2.3 外壳的常用命令
2.3.1 更改帐号密码
2.3.2 联机帮助
2.3.3 远程登录
2.3.4 文件或目录处理
2.3.5 改变工作目录
2.3.6 复制文件
2.3.7 移动或更改文件、目录名称
2.3.8 建立新目录
2.3.9 删除目录
2.3.10 删除文件
2.3.11 列出当前所在的目录位置
2.3.12 查看文件内容
2.3.13 分页查看文件内容
2.3.14 查看目录所占磁盘容量
2.3.15 文件传输
2.3.16 文件权限的设定
2.3.17 检查自己所属的工作组名称
2.3.18 改变文件或目录工作组所有权
2.3.19 改变文件或目录的最后修改时间
2.3.20 文件的链接
2.3.21 文件中字符串的查寻
2.3.22 查寻文件或命令的路径
2.3.23 比较文件或目录的内容
2.3.24 文件打印输出
2.3.25 一般文件的打印
2.3.26 troff 文件的打印
2.3.27 打印机控制命令
2.3.28 进程控制
2.3.29 外壳变量
2.3.30 环境变量
2.3.31 别名
2.3.32 历史命令
2.3.33 文件的压缩
2.3.34 管道命令的使用
2.3.35 输入/输出控制
2.3.36 查看系统中的用户
2.3.37 改变用户名
2.3.38 查看用户名
2.3.39 查看当前系统上所有工作站的用户
2.3.40 与某工作站上的用户交谈
2.3.41 检查远程系统是否正常
2.3.42 电子邮件的使用简介
第 3 章 Linux 系统的网络功能
3.1 Linux 支持的网络协议
3.1.1 TCP/IP
3.1.2 TCP/IP 版本 6
3.1.3 IPX/SPX
3.1.4 AppleTalk 协议集
3.1.5 广域网
3.1.6 ISDN
3.1.7 PPP 、SLIP 及 PLIP
3.1.8 业余无线电
3.1.9 ATM
3.2 Linux 系统下的文件共享和打印共享
3.2.1 Machintosh 环境
3.2.2 Windows 环境
3.2.3 Novell 环境
3.2.4 UNIX 环境
3.3 Linux 系统中的 Internet/Intranet 功能
3.3.1 邮件
3.3.2 Web 服务器
3.3.3 Web 浏览器
3.3.4 FTP 服务器和客户机
3.3.5 新闻服务
3.3.6 域名系统
3.3.7 DHCP 和 bootp
3.3.8 NIS
3.4 Linux 系统下应用程序的远程执行
3.4.1 Telnet
3.4.2 远程命令
3.4.3 X Window
3.5 Linux 系统的网络互连功能
3.5.1 路由器
3.5.2 网桥
3.5.3 IP 伪装
3.5.4 IP 统计
3.5.5 IP 别名
3.5.6 流量限制器
3.5.7 防火墙
3.5.8 端口下传
3.5.9 负载平衡
3.5.10 EQL
3.5.11 代理服务器
3.5.12 按需拨号
3.5.13 管道、移动 IP 和虚拟个人网络
3.6 Linux 系统中的网络管理
3.6.1 Linux 系统下的网络管理应用程序
3.6.2 SNMP
3.7 企业级 Linux 网络
3.7.1 高可用性
3.7.2 RAID
3.7.3 冗余网络
第 4 章 Linux 系统管理简介
4.1 root 帐号
4.2 启动和关闭系统
4.2.1 从软盘启动
4.2.2 使用 LILO 启动
4.2.3 关闭 Linux 系统
4.3 挂接文件系统
4.3.1 挂接软盘
4.3.2 创建新的文件系统
4.3.3 卸载文件系统
4.4 检查文件系统
4.5 使用文件作为交换区
4.6 系统和文件的备份
4.7 设置系统
4.7.1 设置系统名
4.7.2 使用维护磁盘
4.7.3 重新设置 root 帐号口令
4.7.4 设置登录信息
第二篇 L i n u x 高级语言及管理编程
第 5 章外壳编程
5.1 创建和运行外壳程序
5.1.1 创建外壳程序
5.1.2 运行外壳程序
5.2 使用外壳变量
5.2.1 给变量赋值
5.2.2 读取变量的值
5.2.3 位置变量和其他系统变量
5.2.4 引号的作用
5.3 数值运算命令
5.4 条件表达式
5.4.1 if 表达式
5.4.2 case 表达式
5.5 循环语句
5.5.1 for 语句
5.5.2 while 语句
5.5.3 until 语句
5.6 shift 命令
5.7 select 语句
5.8 repeat 语句
5.9 子函数
第 6 章 gawk 语言编程
6.1 gawk 的主要功能
6.2 如何执行 gawk 程序
6.3 文件、记录和字段
6.4 模式和动作
6.5 比较运算和数值运算
6.6 内部函数
6.6.1 随机数和数学函数
6.6.2 字符串的内部函数
6.6.3 输入输出的内部函数
6.7 字符串和数字
6.8 格式化输出
6.9 改变字段分隔符
6.10 元字符
6.11 调用 gawk 程序
6.12 BEGIN 和 END
6.13 变量
6.14 内置变量
6.15 控制结构
6.15.1 if 表达式
6.15.2 while 循环
6.15.3 for 循环
6.15.4 next 和 exit
6.16 数组
6.17 用户自定义函数
6.18 几个实例
第 7 章 Perl 语言编程
7.1 什么是 Perl
7.2 Perl 的现状
7.3 初试 Perl
7.4 Perl 变量
7.4.1 标量
7.4.2 数组
7.4.3 相关数组
7.5 文件句柄和文件操作
7.6 循环结构
7.6.1 foreach 循环
7.6.2 判断运算
7.6.3 for 循环
7.6.4 while 和 until 循环
7.7 条件结构
7.8 字符匹配
7.9 替换和翻译
7.9.1 替换
7.9.2 翻译
7.10 子过程
7.10.1 子过程的定义
7.10.2 参数
7.10.3 返回值
7.11 Perl 程序的完整例子
第三篇 L i n u x 系统内核分析
第 8 章 Linux 内核简介
8.1 系统初始化
8.2 系统运行
8.3 内核提供的各种系统调用
8.3.1 进程的基本概念和系统的基本数据结构
8.3.2 创建和撤消进程
8.3.3 执行程序
8.4 存取文件系统
第 9 章系统进程
9.1 什么是进程
9.2 进程的结构
9.3 进程调度
9.4 进程使用的文件
9.5 进程使用的虚拟内存
9.6 创建进程
9.7 进程的时间和计时器
9.7.1 实时时钟
9.7.2 虚拟时钟
9.7.3 形象时钟
9.8 程序的执行
9.8.1 ELF 文件
9.8.2 脚本文件
第四篇 L i n u x 系统高级编程
第 10 章内存管理
10.1 内存管理的作用
10.2 虚拟内存的抽象模型
10.3 按需装入页面
10.4 交换
10.5 共享虚拟内存
10.6 存取控制
10.7 高速缓存
10.7.1 缓冲区高速缓存
10.7.2 页面高速缓存
10.7.3 交换高速缓存
10.7.4 硬件高速缓存
10.8 系统页面表
10.9 页面的分配和释放
10.9.1 页面的分配
10.9.2 页面的释放
10.10 内存映射
10.11 请求调页
10.12 页面高速缓存
10.13 内核交换守护进程
第 11 章进程间通信
11.1 信号机制
11.2 System V IPC 机制
11.2.1 信息队列
第 12 章 PCI 12.2 PCI 地址空间 PCI-ISA 桥 I/O 控制器 SCSI 以太网
12.1 PCI 系统
12.2 PCI 地址空间
12.3 PCI 设置头
12.4 PCI I/O 和 PCI 内存地址
12.5 PCI-ISA 桥
12.6 PCI-PCI 桥
12.7 PCI 初始化
12.7.1 Linux 系统内核有关 PCI 的数据结构
12.7.2 PCI 设备驱动程序
12.7.3 PCI BIOS 函数
12.7.4 PCI Fixup
第 13 章中断和中断处理
13.1 中断
13.2 可编程中断控制器
13.3 初始化中断处理的数据结构
13.4 中断处理
第 14 章设备驱动程序
14.1 硬件设备的管理
14.2 轮询和中断
14.3 直接内存存取
14.4 内存
14.5 设备驱动程序和内核之间的接口
14.5.1 字符设备
14.5.2 块设备
14.6 硬盘
14.6.1 IDE 硬盘
14.6.2 初始化 IDE 硬盘子系统
14.6.3 SCSI 硬盘
14.6.4 初始化 SCSI 磁盘子系统
14.6.5 传递块设备请求
14.7 网络设备
14.7.1 网络设备文件名
14.7.2 总线信息
14.7.3 网络接口标记
14.7.4 协议信息
14.7.5 初始化网络设备
第 15 章文件系统
15.1 Linux 文件系统概述
15.2 ext2 文件系统
15.2.1 ext2 的索引节点
15.2.2 ext2 超级块
15.2.3 ext2 数据块组描述符
15.2.4 ext2 中的目录
15.2.5 在 ext2 文件系统中查找文件
15.2.6 改变 ext2 文件系统中文件的大小
15.3 VFS
15.3.1 VFS 超级块
15.3.2 VFS 索引节点
15.3.3 登记文件系统
15.3.4 挂接文件系统
15.3.5 在 VFS 中查找文件
15.3.6 撤消文件系统
15.3.7 VFS 索引节点缓存
15.3.8 VFS 目录缓存
15.4 缓冲区缓存
15.5 /proc 文件系统
第 16 章网络系统
16.1 TCP/IP 网络简介
16.2 TCP/IP 网络的分层
16.3 BSD 套接口
16.4 INET 套接口层
16.4.1 创建 BSD 套接口
16.4.2 给 INET BSD 套接口指定地址
16.4.3 在 INET BSD 套接口上创建连接
16.4.4 监听 INET BSD 套接口
16.4.5 接收连接请求
16.5 IP 层
16.5.1 套接口缓冲区
16.5.2 接收 IP 数据包
16.5.3 发送 IP 数据包
16.5.4 数据碎片
16.6 地址解析协议
第 17 章系统内核机制
17.1 Bottom Half 处理
17.2 任务队列
17.3 计时器
17.4 等待队列
17.5 信号量
第 18 章 Linux 内核模块编程
18.1 一个简单程序 Hello World
18.2 设备文件
18.3 /proc 文件系统
18.4 使用/proc 输入
18.5 与设备文件通信
18.6 启动参数
18.7 系统调用
18.8 阻塞进程
18.9 替换 printk
18.10 调度任务
第 19 章有关进程通信的编程
19.1 进程间通信简介
19.2 半双工 UNIX 管道
19.2.1 基本概念
19.2.2 使用 C 语言创建管道
19.2.3 创建管道的简单方法
19.2.4 使用管道的自动操作
19.2.5 使用半双工管道时的注意事项
19.3 命名管道
19.3.1 基本概念
19.3.2 创建 FIFO
19.3.3 FIFO 操作
19.3.4 FIFO 的阻塞
19.3.5 SIGPIPE 信号
19.4 System V IPC
19.4.1 基本概念
19.4.2 消息队列基本概念
19.4.3 系统调用 msgget()
19.4.4 系统调用 msgsnd()
19.4.5 系统调用 msgctl()
19.4.6 一个 msgtool 的实例
19.5 使用信号量编程
19.5.1 基本概念
19.5.2 系统调用 semget()
19.5.3 系统调用 semop()
19.5.4 系统调用 semctl()
19.5.5 使用信号量集的实例:semtool
19.6 共享内存
19.6.1 基本概念
19.6.2 系统内部用户数据结构 shmid_ds
19.6.3 系统调用 shmget()
19.6.4 系统调用 shmat()
19.6.5 系统调用 shmctl()
19.6.6 系统调用 shmdt()
19.6.7 使用共享内存的实例:shmtool
第 20 章高级线程编程
20.1 线程的概念和用途
20.2 一个简单的例子
20.3 线程同步
20.4 使用信号量协调程序
20.5 信号量的实现
20.5.1 Semaphore.h
20.5.2 Semaphore.c
第 21 章 Linux 系统网络编程
21.1 什么是套接口
21.2 两种类型的 Internet 套接口
21.3 网络协议分层
21.4 数据结构
21.5 IP 地址和如何使用 IP 地址
21.5.1 socket()
21.5.2 bind()
21.5.3 connect()
21.5.4 listen()
21.5.5 accept()
21.5.6 send() 和 recv()
21.5.7 sendto() 和 recvfrom()
21.5.8 close() 和 shutdown()
21.5.9 getpeername()
21.5.10 gethostname()
21.6 DNS
21.7 客户机/服务器模式
21.8 简单的数据流服务器程序
21.9 简单的数据流客户机程序
21.10 数据报套接口
21.11 阻塞
第 22 章 Linux I/O 端口编程
22.1 如何在 C 语言下使用 I/O 端口
22.1.1 一般的方法
22.1.2 另一个替代方法: /dev/port
22.2 硬件中断与 DMA 存取
22.3 高精确的时间
22.3.1 延迟时间
22.3.2 时间的量测
22.4 使用其他程序语言
22.5 一些有用的 I/O 端口
22.5.1 并行端口
22.5.2 游戏端口
22.5.3 串行端口
第五篇 L i n u x 系统安全分析
第 23 章系统管理员安全
23.1 安全管理
23.2 超级用户
23.3 文件系统安全
23.3.1 Linux 文件系统概述
23.3.2 设备文件
23.3.3 /etc/mknod 命令
23.3.4 安全考虑
23.3.5 find 命令
23.3.6 secure 程序
23.3.7 ncheck 命令
23.3.8 安装和拆卸文件系统
23.3.9 系统目录和文件
23.4 作为 root 运行的程序
23.4.1 启动系统
23.4.2 init 进程
23.4.3 进入多用户
23.4.4 shutdown 命令
23.4.5 系统 V 的 cron 程序
23.4.6 系统 V 版本 2 之后的 cron 程序
23.4.7 /etc/profile
23.5 /etc/passwd 文件
23.5.1 口令时效
23.5.2 UID 和 GID
23.6 /etc/group 文件
23.7 增加、删除和移走用户
23.7.1 增加用户
23.7.2 删除用户
23.7.3 将用户移到另一个系统
23.8 安全检查
23.8.1 记帐
23.8.2 其他检查命令
23.8.3 安全检查程序的问题
23.8.4 系统泄密后怎么办
23.9 加限制的环境
23.9.1 加限制的外壳
23.9.2 用 chroot ()限制用户
23.10 小系统安全
23.11 物理安全
23.12 用户意识
23.13 系统管理员意识
23.13.1 保持系统管理员个人的登录安全
23.13.2 保持系统安全
第 24 章系统程序员安全
24.1 系统子程序
24.1.1 I/O 子程序
24.1.2 进程控制
24.1.3 文件属性
24.1.4 UID 和 GID 的处理
24.2 标准 C 程序库
24.2.1 标准 I/O
24.2.2 /etc/passwd 的处理
24.2.3 /etc/group 的处理
24.2.4 加密子程序
24.2.5 运行外壳
24.3 编写安全的 C 程序
24.3.1 需要考虑的安全问题
24.3.2 SUID/SGID 程序指导准则
24.3.3 编译、安装 SUID/SGID 程序的方法
24.4 root 用户程序的设计
第 25 章 Linux 系统的网络安全
25.1 UUCP 系统概述
25.1.1 UUCP 命令
25.1.2 uux 命令
25.1.3 uucico 程序
25.1.4 uuxqt 程序
25.2 UUCP 的安全问题
25.2.1 USERFILE 文件
25.2.2 L.cmds 文件
25.2.3 uucp 登录
25.2.4 uucp 使用的文件和目录
25.3 HONEYDANBER UUCP
25.3.1 HONEYDANBER UUCP 与老 UUCP 的差别
25.3.2 登录名规则
25.3.3 MACHINE 规则
25.3.4 组合 MACHINE 和 LOGNAME 规则
25.3.5 uucheck 命令
25.3.6 网关
25.3.7 登录文件检查
25.4 其他网络
25.4.1 远程作业登录
25.4.2 NSC 网络系统
25.5 通信安全
25.5.1 物理安全
25.5.2 加密
25.5.3 用户身份鉴别
25.6 SUN OS 系统的网络安全
25.6.1 确保 NFS 的安全
25.6.2 NFS 安全性方面的缺陷
25.6.3 远程过程调用鉴别
25.6.4 Linux 鉴别机制
25.6.5 DES 鉴别系统
25.6.6 公共关键字的编码
25.6.7 网络实体的命名
25.6.8 DES 鉴别系统的应用
25.6.9 遗留的安全问题
25.6.10 性能
25.6.11 启动和 setuid 程序引起的问题
25.6.12 小结
第 26 章 Linux 系统的用户安全性
26.1 口令安全
26.2 文件许可权
26.3 目录许可
26.4 umask 命令
26.5 设置用户 ID 和同组用户 ID 许可
26.6 cp mv ln 和 cpio 命令
26.7 su 和 newgrp 命令
26.7.1 su 命令
26.7.2 newgrp 命令
26.8 文件加密
26.9 其他安全问题
26.9.1 用户的.profile 文件
26.9.2 ls -a
26.9.3 . exrc 文件
26.9.4 暂存文件和目录
26.9.5 UUCP 和其他网络
26.9.6 特洛伊木马
26.9.7 诱骗
26.9.8 计算机病毒
26.9.9 要离开自己已登录的终端
26.9.10 智能终端
26.9.11 断开与系统的连接
26.9.12 cu 命令
26.10 保持帐户安全的要点
第六篇 X Wi n d o w 系统的 内部结构和使用
第 27 章 X Window 系统的基本知识
27.1 X Window 系统介绍
27.1.1 X 的特点
27.1.2 什么是窗口系统
27.1.3 X 发展的历史
27.1.4 X 的产品
27.1.5 MIT 发行的 X
27.2 X 的基本结构
27.2.1 X 的基本元素
27.2.2 服务程序和客户程序如何交互通信
27.2.3 X 的网络概况
27.3 从用户界面的角度概观 X
27.3.1 管理界面:窗口管理器
27.3.2 应用程序界面和工具箱
27.3.3 其他系统角度
27.4 术语和符号
27.4.1 术语
27.4.2 符号
27.5 启动和关闭 X
27.5.1 启动 X
27.5.2 执行 X 程序的方式
27.5.3 关闭 X
27.6 窗口管理器基础—uwm
27.6.1 什么是窗口管理器
27.6.2 启动 uwm
27.6.3 基本窗口操作—uwm 的菜单
27.6.4 移动窗口
27.6.5 重定窗口大小
27.6.6 建立新窗口
27.6.7 管理屏幕空间
27.6.8 中止应用程序窗口
27.6.9 激活 uwm 菜单的其他方式
27.7 使用 X 的网络设备
27.7.1 指定远程终端机—display 选项
27.7.2 实际使用远程的显示器
27.7.3 控制存取显示器—xhost
27.8 终端机模拟器—详细介绍 xterm
27.8.1 选择 xterm 功能—菜单与命令行选项
27.8.2 滚动 xterm 屏幕
27.8.3 记录与终端机的交互过程—写记录
27.8.4 剪贴文本
27.8.5 使用 Tektronix 模拟功能
27.8.6 使用不同的字体
27.8.7 使用颜色
27.8.8 其他 xterm 选项
27.8.9 设定终端机键盘
第 28 章实用程序和工具
28.1 实用程序
28.2 保存、显示和打印屏幕图像
28.3 使用 X 的应用程序
28.3.1 文字编辑器—Xedit
28.3.2 邮件/信息处理系统—xmh
28.4 示例和游戏程序
28.4.1 找出通过随机迷宫的路径—maze
28.4.2 担任鼠标指针的大眼睛—xeyes
28.4.3 智慧盘游戏—puzzle
28.4.4 打印一个大 X 标志—xlogo
28.4.5 跳动的多面体—ico
28.4.6 动态几何图案—muncher 与 plaid
28.7 显示信息和状态的程序
28.7.1 列出 X 服务程序的特征—xdpyinfo
28.7.2 获取有关窗口的信息
28.7.3 观察 X 的事件—xev
第 29 章定制 X Window 系统
29.1 使用 X 的字体和颜色
29.1.1 字体初步
29.1.2 字体命名
29.1.3 观察特定字体的内容—xfd
29.1.4 保存字体和位置
29.1.5 例子:在你的服务程序中增加新字体
29.1.6 使用 X 的颜色
29.2 定义和使用图形
29.2.1 系统图形程序库
29.2.2 交互编辑图形—bitmap
29.2.3 编辑图形的其他方法
29.2.4 定制根窗口—xsetroot
29.3 定义应用程序的缺省选项—Resources
29.3.1 什么是资源
29.3.2 XToolkit
29.3.3 管理资源—资源管理器
29.3.4 资源的类型—如何指定值
29.4 实际使用资源
29.4.1 在何处保存资源的缺省值
29.4.2 在服务程序上保存缺省值—xrdb
29.4.3 常见的错误和修正
29.5 定制键盘和鼠标
29.5.1 实际使用转换
29.5.2 转换—格式和规则
29.5.3 转换规范中常见的问题
29.6 键盘和鼠标—对应和参数
29.6.1 键盘和鼠标映射—xmodmap
29.6.2 键盘和鼠标参数设定—xset
29.7 进一步介绍和定制 uwm
29.7.1 uwm 的新特征
29.7.2 定制 uwm
29.8 显示器管理器—xdm
29.8.1 需要做些什么
29.8.2 xdm
29.8.3 xdm 的更多信息
29.8.4 uwm 配置
附录 A GCC 使用介绍
A.1 获得 GCC 的方法
A.2 C 程序库与头文件
A.3 一些有用的工具(as 、ld 、ar 、strings 等)
A.4 GCC 的安装与 GCC 的设置
A.4.1 GCC 的版本
A.4.2 Gcc 的安装目录
A.4.3 头文件
A.5 建立交叉编译器
A.6 移植程序与编译程序
A.6.1 gcc 自行定义的符号
A.6.2 调用编译程序
A.6.3 和特定的微处理器相关
A.6.4 Internal compiler error: cc1 got fatal signal 11
A.6.5 移植能力
A.7 除错与监管
A.7.1 预防
A.7.2 除错
A.7.3 监管
A.8 链接
A.8.1 共享程序库和静态程序库
A.8.2 sin() 在哪个程序库里
A.8.3 X 文件
A.8.4 建立自己的程序库
A.9 动态加载
A.9.1 基本概念
A.9.2 控制动态加载器的运作
A.9.3 以动态加载编写程序
附录 B 安装 X Window 窗口系统
B.1 安装 X Window 的提示
B.2 建立此版本
B.3 安装摘要
B.4 操作系统需求
B.5 使用符号链接
B.6 配置本发行版
B.7 编译本发行版
B.8 安装发行版
B.9 内核与特殊文件的注意事项
B.10 测试本发行版
B.11 建立额外的虚拟终端机
B.12 从/etc/rc 启动 X
下载地址:https://www.wenjiangs.com/wp-content/uploads/2024/05/cGw2uVtW8LswFU9B.zip
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论