Linux命令行与shell脚本编程大全第3版.pdf
http://www.100md.com
2020年1月17日
![]() |
| 第1页 |
![]() |
| 第10页 |
![]() |
| 第20页 |
![]() |
| 第21页 |
![]() |
| 第49页 |
![]() |
| 第236页 |
参见附件(5545KB,1556页)。
Linux命令行与shell脚本编程大全,这是一本帮助你完全掌握Linux命令行和shell脚本编程的,全书一共分为四大部分,带你全面解读和了解Linux系统编程。

介绍
这是一本关于Linux命令行与shell脚本编程的全方位教程,主要包括四大部分:Linux命令行,shell脚本编程基础,高级shell脚本编程,如何创建实用的shell脚本。本书针对Linux系统的新特性进行了全面更新,不仅涵盖了详尽的动手教程和现实世界中的实用信息,还提供了与所学内容相关的参考信息和背景资料。通过本书的学习,你将轻松写出自己的shell脚本。
作者
Ricahard Blum,已在IT行业打拼20余年,担任过UNIX、Linux、Novell和Windows Server的系统及网络管理员,在Linux和开源软件领域著作颇丰。他还是一名网络课程讲师,美国多所大学和学院都采用他的Linux基础课程。
Christine Bresnahan,系统管理员,已经在IT行业工作了30余年,通过CompTIA Linux+、LPIC-1、Linux Essentials认证。目前在印第安纳波利斯市常春藤技术社区学院担任兼职教授,讲授Linux系统管理、Linux安全和Windows安全、Python编程等课程。
目录
第一部分 Linux 命令行
第1章 初识Linux shell
第2章 走进shell
第3章 基本的bash shell 命令
第4章 更多的bash shell 命令
第5章 理解shell
第6章 使用Linux 环境变量
第7章 理解Linux 文件权限
第8章 管理文件系统
第9章 安装软件程序
第10章 使用编辑器
第二部分 shell 脚本编程基础
第11章 构建基本脚本
第12章 使用结构化命令
第13章 更多的结构化命令
第14章 处理用户输入
第15章 呈现数据
第16章 控制脚本
第三部分 高级shell 脚本编程
第17章 创建函数
第18章 图形化桌面环境中的脚本编程
第19章 初识sed 和gawk
第20章 正则表达式
第21章 sed 进阶
第22章 gawk 进阶
第23章 使用其他shell
第四部分 创建实用的脚本
第24章 编写简单的脚本实用工具
第25章 创建与数据库、Web及电子邮件相关的脚本
第26章 一些小有意思的脚本
要点
使用简单的shel脚本工具实现任务自动化
创建shel脚本,全面理解shell的用途
管理文件系统与软件包
使用nano、KDE及GNOME等编辑器
学习结构化命令、文本处理及正则表达式
创建与电子邮件、数据库及Web相关的实用脚本
优化环境、微调脚本
Linux命令行与shell脚本编程大全截图


版权声明
Original edition, entitled Linux Command Line and
Shell Scripting Bible, Third Edition , by Richard
Blum, Christine Bresnahan, ISBN 978-1-118-98384-
3, published by John Wiley Sons, Inc.
Copyright ? 2015 by John Wiley Sons, Inc. All
rights reserved.This translation published under
License.
Simplified Chinese translation edition published by
POSTS TELECOM PRESS Copyright ?2016.
Copies of this book sold without a Wiley sticker on
the cover are unauthorized and illegal.
本书简体中文版由John Wiley Sons, Inc.授权人
民邮电出版社独家出版。
本书封底贴有John Wiley Sons, Inc.激光防伪标
签,无标签者不得销售。
版权所有,侵权必究。
您购买的图灵电子书仅供您个人使用,未经授
权,不得以任何方式复制和传播本书内容。
版。版权所有,侵权必究。
本书由北京图灵文化发展有限公司发行数字
ISBN:978-7-115-42967-4
译者:门佳 武海峰
作者:[美] Richard Blum Christine Bresnahan
版)
书名:Linux命令行与shell脚本编程大全(第3
址:
小编自己做了一个电子书下载网站, 网我们愿意相信读者具有这样的良知和觉悟,与我
们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施
包括但不限于关闭该帐号等维权措施,并可能追
究法律责任。
图灵社区会员 瘦西湖的鱼
(853794320@qq.com) 专享 尊重版权
版权声明
引言
读者对象
本书结构
警告、窍门与说明
代码下载
最低需求
下一步做什么
致谢
第一部分 Linux 命令行
第 1 章 初识Linux shell
1.1 什么是Linux
1.1.1 深入探究Linux内核
1.1.2 GNU工具
1.1.3 Linux桌面环境
1.2 Linux发行版
1.2.1 核心Linux发行版
1.2.2 特定用途的Linux发行版
1.2.3 Linux LiveCD
1.3 小结
第 2 章 走进shell
2.1 进入命令行
2.1.1 控制台终端
2.1.2 图形化终端
2.2 通过Linux控制台终端访问CLI2.3 通过图形化终端仿真访问CLI
2.4 使用GNOME Terminal仿真器
2.4.1 访问GNOME Terminal
2.4.2 菜单栏
2.5 使用Konsole Terminal仿真器
2.5.1 访问Konsole Terminal
2.5.2 菜单栏
2.6 使用xterm终端仿真器
2.6.1 访问xterm
2.6.2 命令行参数
2.7 小结
第 3 章 基本的bash shell命令
3.1 启动shell
3.2 shell提示符
3.3 bash手册
3.4 浏览文件系统
3.4.1 Linux文件系统
3.4.2 遍历目录
3.5 文件和目录列表
3.5.1 基本列表功能
3.5.2 显示长列表
3.5.3 过滤输出列表
3.6 处理文件
3.6.1 创建文件
3.6.2 复制文件3.6.3 制表键自动补全
3.6.4 链接文件
3.6.5 重命名文件
3.6.6 删除文件
3.7 处理目录
3.7.1 创建目录
3.7.2 删除目录
3.8 查看文件内容
3.8.1 查看文件类型
3.8.2 查看整个文件
3.8.3 查看部分文件
3.9 小结
第 4 章 更多的bash shell命令
4.1 监测程序
4.1.1 探查进程
4.1.2 实时监测进程
4.1.3 结束进程
4.2 监测磁盘空间
4.2.1 挂载存储媒体
4.2.2 使用df命令
4.2.3 使用du命令
4.3 处理数据文件
4.3.1 排序数据
4.3.2 搜索数据
4.3.3 压缩数据4.3.4 归档数据
4.4 小结
第 5 章 理解shell
5.1 shell的类型
5.2 shell的父子关系
5.2.1 进程列表
5.2.2 别出心裁的子shell用法
5.3 理解shell的内建命令
5.3.1 外部命令
5.3.2 内建命令
5.4 小结
第 6 章 使用Linux环境变量
6.1 什么是环境变量
6.1.1 全局环境变量
6.1.2 局部环境变量
6.2 设置用户定义变量
6.2.1 设置局部用户定义变量
6.2.2 设置全局环境变量
6.3 删除环境变量
6.4 默认的shell环境变量
6.5 设置PATH环境变量
6.6 定位系统环境变量
6.6.1 登录shell
6.6.2 交互式shell进程
6.6.3 非交互式shell6.6.4 环境变量持久化
6.7 数组变量
6.8 小结
第 7 章 理解Linux文件权限
7.1 Linux的安全性
7.1.1 etcpasswd文件
7.1.2 etcshadow文件
7.1.3 添加新用户
7.1.4 删除用户
7.1.5 修改用户
7.2 使用Linux组
7.2.1 etcgroup文件
7.2.2 创建新组
7.2.3 修改组
7.3 理解文件权限
7.3.1 使用文件权限符
7.3.2 默认文件权限
7.4 改变安全性设置
7.4.1 改变权限
7.4.2 改变所属关系
7.5 共享文件
7.6 小结
第 8 章 管理文件系统
8.1 探索Linux文件系统
8.1.1 基本的Linux文件系统8.1.2 日志文件系统
8.1.3 写时复制文件系统
8.2 操作文件系统
8.2.1 创建分区
8.2.2 创建文件系统
8.2.3 文件系统的检查与修复
8.3 逻辑卷管理
8.3.1 逻辑卷管理布局
8.3.2 Linux中的LVM
8.3.3 使用Linux LVM
8.4 小结
第 9 章 安装软件程序
9.1 包管理基础
9.2 基于Debian的系统
9.2.1 用aptitude管理软件包
9.2.2 用aptitude安装软件包
9.2.3 用aptitude更新软件
9.2.4 用aptitude卸载软件
9.2.5 aptitude仓库
9.3 基于Red Hat的系统
9.3.1 列出已安装包
9.3.2 用yum安装软件
9.3.3 用yum更新软件
9.3.4 用yum卸载软件
9.3.5 处理损坏的包依赖关系9.3.6 yum软件仓库
9.4 从源码安装
9.5 小结
第 10 章 使用编辑器
10.1 vim编辑器
10.1.1 检查vim软件包
10.1.2 vim基础
10.1.3 编辑数据
10.1.4 复制和粘贴
10.1.5 查找和替换
10.2 nano编辑器
10.3 emacs编辑器
10.3.1 检查emacs软件包
10.3.2 在控制台中使用emacs
10.3.3 在GUI环境中使用emacs
10.4 KDE系编辑器
10.4.1 KWrite编辑器
10.4.2 Kate编辑器
10.5 GNOME编辑器
10.5.1 启动gedit
10.5.2 基本的gedit功能
10.5.3 设定偏好设置
10.6 小结
第二部分 shell 脚本编程基础
第 11 章 构建基本脚本11.1 使用多个命令
11.2 创建shell脚本文件
11.3 显示消息
11.4 使用变量
11.4.1 环境变量
11.4.2 用户变量
11.4.3 命令替换
11.5 重定向输入和输出
11.5.1 输出重定向
11.5.2 输入重定向
11.6 管道
11.7 执行数学运算
11.7.1 expr命令
11.7.2 使用方括号
11.7.3 浮点解决方案
11.8 退出脚本
11.8.1 查看退出状态码
11.8.2 exit命令
11.9 小结
第 12 章 使用结构化命令
12.1 使用if-then语句
12.2 if-then-else语句
12.3 嵌套if
12.4 test命令
12.4.1 数值比较12.4.2 字符串比较
12.4.3 文件比较
12.5 复合条件测试
12.6 if-then的高级特性
12.6.1 使用双括号
12.6.2 使用双方括号
12.7 case命令
12.8 小结
第 13 章 更多的结构化命令
13.1 for命令
13.1.1 读取列表中的值
13.1.2 读取列表中的复杂值
13.1.3 从变量读取列表
13.1.4 从命令读取值
13.1.5 更改字段分隔符
13.1.6 用通配符读取目录
13.2 C语言风格的for命令
13.2.1 C语言的for命令
13.2.2 使用多个变量
13.3 while命令
13.3.1 while的基本格式
13.3.2 使用多个测试命令
13.4 until命令
13.5 嵌套循环
13.6 循环处理文件数据13.7 控制循环
13.7.1 break命令
13.7.2 continue命令
13.8 处理循环的输出
13.9 实例
13.9.1 查找可执行文件
13.9.2 创建多个用户账户
13.10 小结
第 14 章 处理用户输入
14.1 命令行参数
14.1.1 读取参数
14.1.2 读取脚本名
14.1.3 测试参数
14.2 特殊参数变量
14.2.1 参数统计
14.2.2 抓取所有的数据
14.3 移动变量
14.4 处理选项
14.4.1 查找选项
14.4.2 使用getopt命令
14.4.3 使用更高级的getopts
14.5 将选项标准化
14.6 获得用户输入
14.6.1 基本的读取
14.6.2 超时14.6.3 隐藏方式读取
14.6.4 从文件中读取
14.7 小结
第 15 章 呈现数据
15.1 理解输入和输出
15.1.1 标准文件描述符
15.1.2 重定向错误
15.2 在脚本中重定向输出
15.2.1 临时重定向
15.2.2 永久重定向
15.3 在脚本中重定向输入
15.4 创建自己的重定向
15.4.1 创建输出文件描述符
15.4.2 重定向文件描述符
15.4.3 创建输入文件描述符
15.4.4 创建读写文件描述符
15.4.5 关闭文件描述符
15.5 列出打开的文件描述符
15.6 阻止命令输出
15.7 创建临时文件
15.7.1 创建本地临时文件
15.7.2 在tmp目录创建临时文件
15.7.3 创建临时目录
15.8 记录消息
15.9 实例15.10 小结
第 16 章 控制脚本
16.1 处理信号
16.1.1 重温Linux信号
16.1.2 生成信号
16.1.3 捕获信号
16.1.4 捕获脚本退出
16.1.5 修改或移除捕获
16.2 以后台模式运行脚本
16.2.1 后台运行脚本
16.2.2 运行多个后台作业
16.3 在非控制台下运行脚本
16.4 作业控制
16.4.1 查看作业
16.4.2 重启停止的作业
16.5 调整谦让度
16.5.1 nice命令
16.5.2 renice命令
16.6 定时运行作业
16.6.1 用at命令来计划执行作业
16.6.2 安排需要定期执行的脚本
16.6.3 使用新shell启动脚本
16.7 小结
第三部分 高级 shell 脚本编程
第 17 章 创建函数17.1 基本的脚本函数
17.1.1 创建函数
17.1.2 使用函数
17.2 返回值
17.2.1 默认退出状态码
17.2.2 使用return命令
17.2.3 使用函数输出
17.3 在函数中使用变量
17.3.1 向函数传递参数
17.3.2 在函数中处理变量
17.4 数组变量和函数
17.4.1 向函数传数组参数
17.4.2 从函数返回数组
17.5 函数递归
17.6 创建库
17.7 在命令行上使用函数
17.7.1 在命令行上创建函数
17.7.2 在.bashrc文件中定义函数
17.8 实例
17.8.1 下载及安装
17.8.2 构建库
17.8.3 shtool库函数
17.8.4 使用库
17.9 小结
第 18 章 图形化桌面环境中的脚本编程18.1 创建文本菜单
18.1.1 创建菜单布局
18.1.2 创建菜单函数
18.1.3 添加菜单逻辑
18.1.4 整合shell脚本菜单
18.1.5 使用select命令
18.2 制作窗口
18.2.1 dialog包
18.2.2 dialog选项
18.2.3 在脚本中使用dialog命令
18.3 使用图形
18.3.1 KDE环境
18.3.2 GNOME环境
18.4 小结
第 19 章 初识sed和gawk
19.1 文本处理
19.1.1 sed编辑器
19.1.2 gawk程序
19.2 sed编辑器基础
19.2.1 更多的替换选项
19.2.2 使用地址
19.2.3 删除行
19.2.4 插入和附加文本
19.2.5 修改行
19.2.6 转换命令19.2.7 回顾打印
19.2.8 使用sed处理文件
19.3 小结
第 20 章 正则表达式
20.1 什么是正则表达式
20.1.1 定义
20.1.2 正则表达式的类型
20.2 定义BRE模式
20.2.1 纯文本
20.2.2 特殊字符
20.2.3 锚字符
20.2.4 点号字符
20.2.5 字符组
20.2.6 排除型字符组
20.2.7 区间
20.2.8 特殊的字符组
20.2.9 星号
20.3 扩展正则表达式
20.3.1 问号
20.3.2 加号
20.3.3 使用花括号
20.3.4 管道符号
20.3.5 表达式分组
20.4 正则表达式实战
20.4.1 目录文件计数20.4.2 验证电话号码
20.4.3 解析邮件地址
20.5 小结
第 21 章 sed进阶
21.1 多行命令
21.1.1 next命令
21.1.2 多行删除命令
21.1.3 多行打印命令
21.2 保持空间
21.3 排除命令
21.4 改变流
21.4.1 分支
21.4.2 测试
21.5 模式替代
21.5.1 符号
21.5.2 替代单独的单词
21.6 在脚本中使用sed
21.6.1 使用包装脚本
21.6.2 重定向sed的输出
21.7 创建sed实用工具
21.7.1 加倍行间距
21.7.2 对可能含有空白行的文件加倍
行间距
21.7.3 给文件中的行编号
21.7.4 打印末尾行21.7.5 删除行
21.7.6 删除HTML标签
21.8 小结
第 22 章 gawk进阶
22.1 使用变量
22.1.1 内建变量
22.1.2 自定义变量
22.2 处理数组
22.2.1 定义数组变量
22.2.2 遍历数组变量
22.2.3 删除数组变量
22.3 使用模式
22.3.1 正则表达式
22.3.2 匹配操作符
22.3.3 数学表达式
22.4 结构化命令
22.4.1 if语句
22.4.2 while语句
22.4.3 do-while语句
22.4.4 for语句
22.5 格式化打印
22.6 内建函数
22.6.1 数学函数
22.6.2 字符串函数
22.6.3 时间函数22.7 自定义函数
22.7.1 定义函数
22.7.2 使用自定义函数
22.7.3 创建函数库
22.8 实例
22.9 小结
第 23 章 使用其他shell
23.1 什么是dash shell
23.2 dash shell的特性
23.2.1 dash命令行参数
23.2.2 dash环境变量
23.2.3 dash内建命令
23.3 dash脚本编程
23.3.1 创建dash脚本
23.3.2 不能使用的功能
23.4 zsh shell
23.5 zsh shell的组成
23.5.1 shell选项
23.5.2 内建命令
23.6 zsh脚本编程
23.6.1 数学运算
23.6.2 结构化命令
23.6.3 函数
23.7 小结
第四部分 创建实用的脚本第 24 章 编写简单的脚本实用工具
24.1 归档
归档数据文件
24.2 管理用户账户
24.2.1 需要的功能
24.2.2 创建脚本
24.2.3 运行脚本
24.3 监测磁盘空间
24.3.1 需要的功能
24.3.2 创建脚本
24.3.3 运行脚本
24.4 小结
第 25 章 创建与数据库、Web及电子邮件相关的
脚本
25.1 MySQL数据库
25.1.1 使用MySQL
25.1.2 在脚本中使用数据库
25.2 使用Web
25.2.1 安装Lynx
25.2.2 lynx命令行
25.2.3 Lynx配置文件
25.2.4 从Lynx中获取数据
25.3 使用电子邮件
25.4 小结
第 26 章 一些小有意思的脚本26.1 发送消息
26.1.1 功能分析
26.1.2 创建脚本
26.2 获取格言
26.2.1 功能分析
26.2.2 创建脚本
26.3 编造借口
26.3.1 功能分析
26.3.2 创建脚本
26.4 小结
附录 A bash命令快速指南
A.1 内建命令
A.2 常见的bash命令
A.3 环境变量
附录 B sed和gawk快速指南
B.1 sed编辑器
B.1.1 启动sed编辑器
B.1.2 sed命令
B.2 gawk程序
B.2.1 gawk命令格式
B.2.2 使用gawk
B.2.3 gawk变量
B.2.4 gawk程序的特性
引言
欢迎阅读《Linux命令行与shell脚本编程大全(第
3版)》。和所有“大全”系列图书一样,本书涵
盖了详尽的动手教程和实践信息,还提供了与所
学内容相关的参考信息和背景资料。本书是关于
Linux命令行和shell命令的相当全面的资源。读完
之后,你将可以轻松写出自己的shell脚本来实现
Linux系统任务自动化处理。读者对象
如果你是Linux环境下的系统管理员,那么学会编
写shell脚本将让你受益匪浅。本书并未细述安装
Linux系统的每个步骤,但只要系统已安装好
Linux并能运行起来,你就可以开始考虑如何让一
些日常的系统管理任务实现自动化。这时shell脚
本编程就能发挥作用了,这也正是本书的作用所
在。本书将演示如何使用shell脚本来自动处理系
统管理任务,包括从监测系统统计数据和数据文
件到为你的老板生成报表。
如果你是家用Linux爱好者,同样能从本书中获
益。现今,用户很容易在诸多部件堆积而成的图
形环境中迷失。大多数桌面Linux发行版都尽量向
一般用户隐藏系统的内部细节。但有时你确实需
要知道内部发生了什么。本书将告诉你如何启动
Linux命令行以及接下来要做什么。通常,如果是
执行一些简单任务(比如文件管理),在命令行
下操作要比在华丽的图形界面下方便得多。在命
令行下有大量的命令可供使用,本书将会展示如
何使用它们。本书结构
本书将会引领你从认识Linux命令行基础开始,一
直到写出自己的shell脚本。全书分成四大部分,每部分都基于前面的内容。
第一部分假定你已经有个能运行的Linux系统,或
者正在设法获取Linux系统。第1章“初识Linux
shell”,描述了构成整个Linux系统的各个部分,并且说明了shell是如何融入Linux的。在介绍了
Linux系统的基础知识之后,接着继续探讨以下内
容:
使用终端仿真包来访问shell(第2章);
介绍基本的shell命令(第3章);
使用更高级的shell命令来窥探系统信息(第
4章);
理解shell的用途(第5章);
使用shell变量来操作数据(第6章);
理解Linux文件系统和安全(第7章);在命令行上使用Linux文件系统(第8章);
在命令行上安装和更新软件(第9章);
使用Linux编辑器编写shell脚本(第10章)。
第二部分将从编写shell脚本开始,具体内容如
下:
学习如何创建和运行shell脚本(第11章);
改变shell脚本中程序的流程(第12章);
迭代代码片段(第13章);
在脚本中处理用户输入的数据(第14章);
了解在脚本中存储和显示数据的不同方法
(第15章);
控制脚本在系统中运行的方式和时机(第16
章)。
第三部分深入探讨了shell脚本编程的更高级话
题,其中包括:
在脚本中创建自己的函数(第17章);
利用Linux图形化桌面来和脚本用户交互(第
18章);
使用高级Linux命令过滤和解析数据文件(第
19章);
使用正则表达式来定义数据(第20章);
学习在脚本中操作数据的高级方法(第21
章);
从原始数据生成报表(第22章);
修改shell脚本,使其能在其他Linux shell中运
行(第23章)。
本书的第四部分演示了如何在现实环境中使用
shell脚本。在这部分,你将:
学习如何将各种脚本特性融入自己的脚本中
(第24章);
学习如何使用数据库保存、检索数据,如何
访问互联网上的数据以及发送电子邮件(第25章);
编写与Linux系统交互的高级脚本(第26
章)。警告、窍门与说明
为帮助读者更好地理解本书内容,全书进行了很
多不同的组织和排版上的处理。
警告 这部分信息很重要,所以放在单独的
段落里,并采用了特殊的排版。“警告”部分
介绍了要特别注意的信息,不管是不便之
处,还是对数据和系统潜在的危害,都囊括
在内。
窍门 这部分提供了有益的建议,能够简化
你的操作,提升工作效率。“窍门”部分也会
提出可行的问题解决方案或某项任务更好的
处理方法。
说明 这部分提供了有用的补充或辅助信
息,不过有些偏离当前讲述的主题。代码下载
可以从http:www.wiley.comgolinuxcommandline
下载本书的代码文件。最低需求
本书并不局限于某种特定的Linux发行版,你可以
使用任何可用的Linux系统来跟着书中的进度学
习。书中大部分内容都采用了bash shell,这是多
数Linux系统的默认shell。下一步做什么
读完本书之后,你就已经可以在日常工作中得心
应手地运用Linux命令了。在不断变化的Linux世
界,我们最好能不断了解Linux的最新发展。
Linux发行版会有变动,增加新的功能,移除过时
的功能。经常关注Linux方面的资讯,不断更新你
的Linux知识体系。找一个不错的Linux论坛,关
注一下Linux世界的最新动态。有很多流行的
Linux新闻站点都能提供有关Linux新进展的及时
资讯,比如Slashdot和Distrowatch。
致谢
首先,所有的荣誉和赞美都献给上帝。是他通过
他的儿子耶稣,让这一切成为可能,并赐予我们
永生。
非常感谢John Wiley Sons出版团队的诸位为本
书作出的突出贡献。感谢前组稿编辑Mary James
为我们提供写作本书的机会。感谢策划编辑Brian
Herrmann保证本书的写作顺利进行,并将内容更
好地呈现给读者。感谢Marty的努力和勤勉。本书
的技术编辑Kevin E. Ryan为保证本书的内容正确
作出了卓越贡献,并对本书内容提出了若干改进
建议。感谢本书的文字编辑Gwenette Gaddis,她
的耐心和努力使得本书的可读性更强。还要感谢
Waterside Productions公司的Carole McClendon为
我们安排本书的写作事务,并在写作道路上给予
了我们很大的帮助。
在此,Christine还想感谢她的先生Timothy,感谢
他的鼓励、耐心和倾听,即使他并不理解她说的
是什么,也能全心支持她。
第一部分 Linux 命令行
本部分内容
第 1 章 初识 Linux shell
第 2 章 走进 shell
第 3 章 基本的 bash shell 命令
第 4 章 更多的 bash shell 命令
第 5 章 理解 shell
第 6 章 使用 Linux 环境变量
第 7 章 理解 Linux 文件权限
第 8 章 管理文件系统
第 9 章 安装软件程序
第 10 章 使用编辑器
第 1 章 初识Linux shell
本章内容
什么是Linux
Linux内核的组成
探索Linux桌面
了解Linux发行版
在深入研究如何使用Linux命令行和shell之前,最
好先了解一下什么是Linux、它的历史及运作方
式。本章将带你逐步了解什么是Linux,并介绍命
令行和shell在Linux整体架构中的位置。1.1 什么是Linux
如果你以前从未接触过Linux,可能就不清楚为什
么会有这么多不同的Linux发行版。在查看Linux
软件包时,你肯定被发行版、LiveCD和GNU之类
的术语搞晕过。初次进入Linux世界会让人觉得不
那么得心应手。在开始学习命令和脚本之前,本
章将为你稍稍揭开Linux系统的神秘面纱。
首先,Linux可划分为以下四部分:
Linux内核
GNU工具
图形化桌面环境
应用软件
每一部分在Linux系统中各司其职。但就单个部分
而言,其作用并不大。图1-1是一个基本结构框
图,展示了各部分是如何协作起来构成整个Linux
系统的。
本节将详细介绍这四部分,然后概述它们如何通过协作构成一个完整的Linux系统。
图 1-1 Linux系统
1.1.1 深入探究Linux内核
Linux系统的核心是内核 。内核控制着计算机系统上的所有硬件和软件,在必要时分配硬件,并
根据需要执行软件。
如果你一直都在关注Linux世界,肯定听说过Linus
Torvalds。Linus还在赫尔辛基大学上学时就开发
了第一版Linux内核。起初他只是想仿造一款Unix
系统而已,因为当时Unix操作系统在很多大学都
很流行。
Linus完成了开发工作后,将Linux内核发布到了互
联网社区,并征求改进意见。这个简单的举动引
发了计算机操作系统领域内的一场革命。很快,Linus就收到了来自世界各地的学生和专业程序员
的各种建议。
如果谁都可以修改内核程序代码,那么随之而来
的将是彻底的混乱。为了简单起见,Linus担当起
了所有改进建议的把关员。能否将建议代码并入
内核完全取决于Linus。时至今日,这种概念依然
在Linux内核代码开发过程中沿用,不同的是,现
在是由一组开发人员来做这件事,而不再是Linus
一个人。
内核主要负责以下四种功能:
系统内存管理
软件程序管理
硬件设备管理
文件系统管理
后面几节将会进一步探究以上每一种功能。
1. 系统内存管理
操作系统内核的主要功能之一就是内存管理。内
核不仅管理服务器上的可用物理内存,还可以创
建和管理虚拟内存(即实际并不存在的内存)。
内核通过硬盘上的存储空间来实现虚拟内存,这
块区域称为交换空间 (swap space)。内核不断
地在交换空间和实际的物理内存之间反复交换虚
拟内存中的内容。这使得系统以为它拥有比物理
内存更多的可用内存(如图1-2所示)。图 1-2 Linux系统内存映射
内存存储单元按组划分成很多块,这些块称作页
面 (page)。内核将每个内存页面放在物理内存
或交换空间。然后,内核会维护一个内存页面
表,指明哪些页面位于物理内存内,哪些页面被
换到了磁盘上。内核会记录哪些内存页面正在使用中,并自动把
一段时间未访问的内存页面复制到交换空间区域
(称为换出 ,swapping out)——即使还有可用
内存。当程序要访问一个已被换出的内存页面
时,内核必须从物理内存换出另外一个内存页面
给它让出空间,然后从交换空间换入请求的内存
页面。显然,这个过程要花费时间,拖慢运行中
的进程。只要Linux系统在运行,为运行中的程序
换出内存页面的过程就不会停歇。
2. 软件程序管理
Linux操作系统将运行中的程序称为进程 。进程
可以在前台运行,将输出显示在屏幕上,也可以
在后台运行,隐藏到幕后。内核控制着Linux系统
如何管理运行在系统上的所有进程。
内核创建了第一个进程(称为init进程 )来启动
系统上所有其他进程。当内核启动时,它会将init
进程加载到虚拟内存中。内核在启动任何其他进
程时,都会在虚拟内存中给新进程分配一块专有
区域来存储该进程用到的数据和代码。
一些Linux发行版使用一个表来管理在系统开机时
要自动启动的进程。在Linux系统上,这个表通常
位于专门文件etcinittab中。另外一些系统(比如现在流行的Ubuntu Linux发行
版)则采用etcinit.d目录,将开机时启动或停止
某个应用的脚本放在这个目录下。这些脚本通
过etcrcX.d目录下的入口(entry)1 启动,这里
的X代表运行级 (run level)。
1 这些入口实际上是到etcini t.d目录中启动脚本的符号链
接。——译者注(后文若无特殊说明,脚注均为“译者
注”。)
Linux操作系统的init系统采用了运行级。运行级
决定了init进程运行etcinittab文件或etcrcX.d目
录中定义好的某些特定类型的进程。Linux操作系
统有5个启动运行级。
运行级为1时,只启动基本的系统进程以及一个
控制台终端进程。我们称之为单用户 模式。单
用户模式通常用来在系统有问题时进行紧急的文
件系统维护。显然,在这种模式下,仅有一个人
(通常是系统管理员)能登录到系统上操作数
据。
标准的启动运行级是3。在这个运行级上,大多
数应用软件,比如网络支持程序,都会启动。另
一个Linux中常见的运行级是5。在这个运行级上
系统会启动图形化的X Window系统,允许用户通过图形化桌面窗口登录系统。
Linux系统可以通过调整启动运行级来控制整个系
统的功能。通过将运行级从3调整成5,系统就可
以从基于控制台的系统变成更先进的图形化X
Window系统。
在第4章,你将会学习如何使用ps 命令查看当前
运行在Linux系统上的进程。
3. 硬件设备管理
内核的另一职责是管理硬件设备。任何Linux系统
需要与之通信的设备,都需要在内核代码中加入
其驱动程序代码。驱动程序代码相当于应用程序
和硬件设备的中间人,允许内核与设备之间交换
数据。在Linux内核中有两种方法用于插入设备驱
动代码:
编译进内核的设备驱动代码
可插入内核的设备驱动模块
以前,插入设备驱动代码的唯一途径是重新编译
内核。每次给系统添加新设备,都要重新编译一
遍内核代码。随着Linux内核支持的硬件设备越来越多,这个过程变得越来越低效。不过好在Linux
开发人员设计出了一种更好的将驱动代码插入运
行中的内核的方法。
开发人员提出了内核模块的概念。它允许将驱动
代码插入到运行中的内核而无需重新编译内核。
同时,当设备不再使用时也可将内核模块从内核
中移走。这种方式极大地简化和扩展了硬件设备
在Linux上的使用。
Linux系统将硬件设备当成特殊的文件,称为设备
文件 。设备文件有3种分类:
字符型设备文件
块设备文件
网络设备文件
字符型设备文件是指处理数据时每次只能处理一
个字符的设备。大多数类型的调制解调器和终端
都是作为字符型设备文件创建的。块设备文件是
指处理数据时每次能处理大块数据的设备,比如
硬盘。
网络设备文件是指采用数据包发送和接收数据的设备,包括各种网卡和一个特殊的回环设备。这
个回环设备允许Linux系统使用常见的网络编程协
议同自身通信。
Linux为系统上的每个设备都创建一种称为节点
的特殊文件。与设备的所有通信都通过设备节点
完成。每个节点都有唯一的数值对供Linux内核标
识它。数值对包括一个主设备号和一个次设备
号。类似的设备被划分到同样的主设备号下。次
设备号用于标识主设备组下的某个特定设备。
4. 文件系统管理
不同于其他一些操作系统,Linux内核支持通过不
同类型的文件系统从硬盘中读写数据。除了自有
的诸多文件系统外,Linux还支持从其他操作系统
(比如Microsoft Windows)采用的文件系统中读
写数据。内核必须在编译时就加入对所有可能用
到的文件系统的支持。表1-1列出了Linux系统用
来读写数据的标准文件系统。
表 1-1 Linux文件系统
文件系
统
描述
ext
Linux扩展文件系统,最早的Linux文件系统
ext2
第二扩展文件系统,在ext的基础上提供了更多的功
能
ext3
第三扩展文件系统,支持日志功能
ext4
第四扩展文件系统,支持高级日志功能
hpfs
OS2高性能文件系统
jfs
IBM日志文件系统
iso9660
ISO 9660文件系统(CD-ROM)
minix
MINIX文件系统
msdos
微软的FAT16
ncp
Netware文件系统
nfs
网络文件系统
ntfs
支持Microsoft NT文件系统
proc
访问系统信息
ReiserFS
高级Linux文件系统,能提供更好的性能和硬盘恢复
功能
smb
支持网络访问的Samba SMB文件系统
sysv
较早期的Unix文件系统
ufs
BSD文件系统
umsdos
建立在msdos上的类Unix文件系统
vfat
Windows 95文件系统(FAT32)
XFS
高性能64位日志文件系统
Linux服务器所访问的所有硬盘都必须格式化成表
1-1所列文件系统类型中的一种。
Linux内核采用虚拟文件系统(Virtual FileSystem,VFS)作为和每个文件系统交互的接
口。这为Linux内核同任何类型文件系统通信提供
了一个标准接口。当每个文件系统都被挂载和使
用时,VFS将信息都缓存在内存中。
1.1.2 GNU工具
除了由内核控制硬件设备外,操作系统还需要工
具来执行一些标准功能,比如控制文件和程序。
Linus在创建Linux系统内核时,并没有可用的系统
工具。然而他很幸运,就在开发Linux内核的同
时,有一群人正在互联网上共同努力,模仿Unix
操作系统开发一系列标准的计算机系统工具。
GNU组织(GNU是GNU's Not Unix的缩写)开发
了一套完整的Unix工具,但没有可以运行它们的
内核系统。这些工具是在名为开源软件(open
source software,OSS)的软件理念下开发的。
开源软件理念允许程序员开发软件,并将其免费
发布。任何人都可以使用、修改该软件,或将该
软件集成进自己的系统,无需支付任何授权费
用。将Linus的Linux内核和GNU操作系统工具整
合起来,就产生了一款完整的、功能丰富的免费
操作系统。尽管通常将Linux内核和GNU工具的结合体称为
Linux,但你也会在互联网上看到一些Linux纯粹
主义者将其称为GNULinux系统,藉此向GNU组
织所作的贡献致意。
1. 核心GNU工具
GNU项目的主旨在于为Unix系统管理员设计出一
套类似于Unix的环境。这个目标促使该项目移植
了很多常见的Unix系统命令行工具。供Linux系统
使用的这组核心工具被称为coreutils(core
utilities)软件包。
GNU coreutils软件包由三部分构成:
用以处理文件的工具
用以操作文本的工具
用以管理进程的工具
这三组主要工具中的每一组都包含一些对Linux系
统管理员和程序员至关重要的工具。本书将详细
介绍GNU coreutils软件包中包含的所有工具。
2. shellGNULinux shell是一种特殊的交互式工具。它为
用户提供了启动程序、管理文件系统中的文件以
及运行在Linux系统上的进程的途径。shell的核心
是命令行提示符。命令行提示符是shell负责交互
的部分。它允许你输入文本命令,然后解释命
令,并在内核中执行。
shell包含了一组内部命令,用这些命令可以完成
诸如复制文件、移动文件、重命名文件、显示和
终止系统中正运行的程序等操作。shell也允许你
在命令行提示符中输入程序的名称,它会将程序
名传递给内核以启动它。
你也可以将多个shell命令放入文件中作为程序执
行。这些文件被称作shell脚本 。你在命令行上执
行的任何命令都可放进一个shell脚本中作为一组
命令执行。这为创建那种需要把几个命令放在一
起来工作的工具提供了便利。
在Linux系统上,通常有好几种Linux shell可用。
不同的shell有不同的特性,有些更利于创建脚
本,有些则更利于管理进程。所有Linux发行版默
认的shell都是bash shell。bash shell由GNU项目开
发,被当作标准Unix shell——Bourne shell(以创
建者的名字命名)的替代品。bash shell的名称就
是针对Bourne shell的拼写所玩的一个文字游戏,称为Bourne again shell。
除了bash shell,本书还将介绍其他几种常见的
shell。表1-2列出了Linux中常见的几种不同shell。
表 1-2 Linux shell
shell
描述
ash
一种运行在内存受限环境中简单的轻量级shel l,但与bash
shel l完全兼容
korn
一种与Bourne shel l兼容的编程shel l,但支持如关联数组和
浮点运算等一些高级的编程特性
tcsh
一种将C语言中的一些元素引入到shel l脚本中的shel l
zsh
一种结合了bash、tcsh和korn的特性,同时提供高级编程
特性、共享历史文件和主题化提示符的高级shel l
大多数Linux发行版包含多个shell,但它们通常会
采用其中一个作为默认shell。如果你的Linux发行
版包含多个shell,就请尽情尝试不同的shell,看
看哪个能满足你的需要。1.1.3 Linux桌面环境
在Linux的早期(20世纪90年代初期),能用的只
有一个简单的Linux操作系统文本界面。这个文本
界面允许系统管理员运行程序,控制程序的执
行,以及在系统中移动文件。
随着Microsoft Windows的普及,电脑用户已经不
再满足于对着老式的文本界面工作了。这推动了
OSS社区的更多开发活动,Linux图形化桌面环境
应运而生。
完成工作的方式不止一种,Linux一直以来都以此
而闻名。在图形化桌面上更是如此。Linux有各种
图形化桌面可供选择。后面几节将会介绍其中一
些比较流行的桌面。
1. X Window系统
有两个基本要素决定了视频环境:显卡和显示
器。要在电脑上显示绚丽的画面,Linux软件就得
知道如何与这两者互通。X Window软件是图形显
示的核心部分。
X Window软件是直接和PC上的显卡及显示器打
交道的底层程序。它控制着Linux程序如何在电脑上显示出漂亮的窗口和图形。
Linux并非唯一使用X Window的操作系统,它有
针对不同操作系统的版本。在Linux世界里,能够
实现X Window的软件包可不止一种。
其中最流行的软件包是X.org。它提供了X
Window系统的开源实现,支持当前市面上的很多
新显卡。
另外两个X Window软件包也日渐流行。Fedora
Linux发行版采用了试验性的Wayland软件;Ubuntu
Linux发行版开发出了Mir显示服务器,用于其桌
面环境。
在首次安装Linux发行版时,它会检测显卡和显示
器,然后创建一个含有必要信息的X Window配置
文件。在安装过程中,你可能会注意到安装程序
会检测一次显示器,以此来确定所支持的视频模
式。有时这会造成显示器黑屏几秒。由于现在有
多种不同类型的显卡和显示器,这个过程可能会
需要一段时间来完成。
核心的X Window软件可以产生图形化显示环境,但仅此而已。虽然对于运行独立应用这已经足
够,但在日常PC使用中却并不是那么有用。它没有桌面环境供用户操作文件或是开启程序。为
此,你需要一个建立在X Window系统软件之上的
桌面环境。
2. KDE桌面
KDE(K Desktop Environment,K桌面环境)最初
于1996年作为开源项目发布。它会生成一个类似
于Microsoft Windows的图形化桌面环境。如果你
是Windows用户,KDE就集成了所有你熟悉的功
能。图1-3展示了运行在openSuSE Linux发行版上
的KDE 4桌面。图 1-3 openSuSE Linux系统上的KDE 4桌面
KDE桌面允许你把应用程序图标和文件图标放置
在桌面的特定位置上。单击应用程序图标,Linux
系统就会运行该应用程序。单击文件图标,KDE
桌面就会确定使用哪种应用程序来处理该文件。
桌面底部的横条称为面板,由以下四部分构成。
KDE菜单 :和Windows的开始菜单非常类
似,KDE菜单包含了启动已安装程序的链
接。
程序快捷方式 :在面板上有直接从面板启
动程序的快速链接。
任务栏 :任务栏显示着当前桌面正运行的
程序的图标。
小应用程序 :面板上还有一些特殊小应用
程序的图标,这些图标常常会根据小应用程
序的状态发生变化。
所有的面板功能都和你在Windows上看到的类
似。除了桌面功能,KDE项目还开发了大量的可
运行在KDE环境中的应用程序。3. GNOME桌面
GNOME(the GNU Network Object Model
Environment,GNU网络对象模型环境)是另一个
流行的Linux桌面环境。GNOME于1999年首次发
布,现已成为许多Linux发行版默认的桌面环境
(不过用得最多的是Red Hat Linux)。
尽管GNOME决定不再沿用Microsoft Windows的
标准观感(look-and-feel),但它还是集成了许多
Windows用户习惯的功能:
一块放置图标的桌面区域
两个面板区域
拖放功能
图1-4展示了CentOS Linux发行版采用的标准
GNOME桌面。图 1-4 CentOS Linux系统上的GNOME桌面
GNOME开发人员不甘示弱于KDE,也开发了一
批集成进GNOME桌面的图形化程序。
4. Unity桌面
如果你用的是Ubuntu Linux发行版,你会注意到它
与KDE和GNOME桌面环境有些不一样。准确来
说,这是因为负责开发Ubuntu的公司决定采用自
己的一套叫作Unity的Linux桌面环境。
Unity桌面得名于该项目的目标——为工作站、平
板电脑以及移动设备提供一致的桌面体验。不管
你是在工作站还是在手机上使用Ubuntu,Unity桌
面的使用方式都是一样的。图1-5展示了Ubuntu
14.04 L TS中的Unity桌面。图 1-5 Ubuntu Linux系统上的Unity桌面
5. 其他桌面图形化桌面环境的弊端在于它们要占用相当一部
分的系统资源来保证正常运行。在Linux发展之
初,Linux的标志和卖点之一就是它可以运行在处
理能力较弱的老旧PC上,这些PC无力运行较新
的微软桌面。然而随着KDE和GNOME桌面环境
的普及,情况发生了变化。运行KDE或GNOME
桌面要占用的内存资源和微软的最新桌面环境旗
鼓相当。
如果你的PC已经有些年代了,也不要泄气。
Linux开发人员已经联手让Linux返璞归真。他们
开发了一些低内存开销的图形化桌面应用,提供
了能够在老旧PC上完美运行的基本功能。尽管这
些图形化桌面环境并没有大量专为其设计的应
用,但它们仍然能运行许多基本的图形化程序,支持如文字处理、电子表格、数据库、绘图以及
多媒体等功能。
表1-3列出了一些可在配置较低的PC和笔记本电
脑上运行的轻量级Linux图形化桌面环境。
表 1-3 其他Linux图形化桌面
桌面
描述
Fluxbox 一个没有面板的轻型桌面,仅有一个可用来启动程序
的弹出式菜单
Xfce
和KDE很像的一个桌面,但少了很多图像以适应低内
存环境
JWM
Joe的窗口管理器(Joe's Window Manager),非常适用
于低内存低硬盘空间环境的超轻型桌面
Fvwm
支持如虚拟桌面和面板等高级桌面功能,但能够在低
内存环境中运行
fvwm95
从fvwm衍生而来,但看起来更像是Windows 95桌面
这些图形化桌面环境并不如KDE或GNOME桌面
一样绚丽,但却提供了恰到好处的基本图形化功
能。图1-6展示了Puppy Linux antiX发行版所采用
的JWM桌面的外观。图 1-6 Puppy Linux发行版所采用的JWM桌面
如果你用的是老旧PC,尝试一下基于上述某个桌
面环境的Linux发行版,看看怎么样,可能会有惊
喜哦。1.2 Linux发行版
到此为止,你已经了解了构成完整Linux系统所需
要的4个关键部件,那你可能在考虑要怎样才能
把它们组成一个Linux系统。幸运的是,已经有人
为你做好这些了。
我们将完整的Linux系统包称为发行版 。有很多
不同的Linux发行版来满足可能存在的各种运算需
求。大多数发行版是为某个特定用户群定制的,比如商业用户、多媒体爱好者、软件开发人员或
者普通家庭用户。每个定制的发行版都包含了支
持特定功能所需的各种软件包,比如为多媒体爱
好者准备的音频和视频编辑软件,为软件开发人
员准备的编译器和集成开发环境(IDE)。
不同的Linux发行版通常归类为3种:
完整的核心Linux发行版
特定用途的发行版
LiveCD测试发行版
后面几节将会探讨这些不同类型的Linux发行版,然后展示每种类型中一些Linux发行版示例。
1.2.1 核心Linux发行版
核心Linux发行版含有内核、一个或多个图形化桌
面环境以及预编译好的几乎所有能见到的Linux应
用。它提供了一站式的完整Linux安装。表1-4列
出了一些较流行的核心Linux发行版。
表 1-4 核心Linux发行版
发行版
描 述
Slackware
最早的Linux发行版中的一员,在Linux极客中比较流
行
Red Hat
主要用于Internet服务器的商业发行版
Fedora
从Red Hat分离出的家用发行版
Gentoo
为高级Linux用户设计的发行版,仅包含Linux源代码
openSUSE
用于商用和家用的发行版
Debian 在Linux专家和商用Linux产品中流行的发行版
在Linux的早期,发行版是作为一叠软盘发布的。
你必须下载多组文件,然后将其复制到软盘上。
通常要用20张或更多的软盘来创建一个完整的发
行版!毋庸多言,这是个痛苦的过程。
现今,家用电脑基本都有内置的CD和DVD光
驱,Linux发行版也就用一组CD光盘或单张DVD
光盘来发布。这大大简化了Linux的安装过程。
然而当新手在安装核心Linux发行版时,仍然经常
遇到各种各样的问题。为了照顾到Linux用户的所
有使用情景,单个发行版必须包含很多应用软
件。从高端的Internet数据库服务器到常见的游
戏,可谓应用尽有。鉴于Linux上可用应用程序的
数量,一个完整的发行版通常至少要4张CD。
尽管发行版中的大量可选配置对Linux极客来说是
好事,但对新手来说就是一场噩梦。多数发行版
会在安装过程中询问一系列问题,以决定哪些应
用要默认加载、PC上连接了哪些硬件以及怎样配
置硬件设备。新手经常会被这些问题困扰,因
此,他们经常是要么加载了过多的程序,要么没
有加载够,到后来才发现计算机并没有按照他们
预想的方式工作。对新手来说,幸运的是,安装Linux还有更简便的
方法。
1.2.2 特定用途的Linux发行版
Linux发行版的一个新子群已经出现了。它们通常
基于某个主流发行版,但仅包含主流发行版中一
小部分用于某种特定用途的应用程序。
除了提供特定软件外(比如仅为商业用户提供的
办公应用),定制化发行版还尝试通过自动检测
和自动配置常见硬件来帮助新手安装Linux。这使
得Linux的安装过程轻松愉悦了许多。
表1-5列出了一些特定用途的Linux发行版以及它
们的专长。
这只是特定用途的Linux发行版中的一小部分而
已。像这样的发行版足有上百款,而且在互联网
上还不断有新的成员加入。不管你的专长是什
么,你都能找到一款为你量身定做的Linux发行
版。
表 1-5 特定用途的Linux发行版
发行版 描述
CentOS
一款基于Red Hat企业版Linux源代码构建的免费发
行版
Ubuntu
一款用于学校和家庭的免费发行版
PCLinuxOS
一款用于家庭和办公的免费发行版
Mint
一款用于家庭娱乐的免费发行版
dyne:bol ic
一款用于音频和MIDI应用的免费发行版
Puppy
Linux
一款适用于老旧PC的小型免费发行版
许多特定用途的Linux发行版都是基于Debian
Linux。它们使用和Debian一样的安装文件,但仅
打包了完整Debian系统中的一小部分。
1.2.3 Linux LiveCD
Linux世界中一个相对较新的现象是可引导的
Linux CD发行版的出现。它无需安装就可以看到
Linux系统是什么样的。多数现代PC都能从CD启动,而不是必须从标准硬盘启动。基于这点,一
些Linux发行版创建了含有Linux样本系统(称为
Linux LiveCD)的可引导CD。由于单张CD容量的
限制,这个样本并非完整的Linux系统,不过令人
惊喜的是,你可以自己加入各种软件。结果就
是,你可以通过CD来启动PC,并且无需在硬盘
安装任何东西就能运行Linux发行版。
这是一个不弄乱PC就体验各种Linux发行版的绝
妙方法。只需插入CD就能引导了!所有的Linux
软件都将直接从CD上运行。你可以从互联网上下
载各种Linux LiveCD,刻录,然后体验。
表1-6列出了一些可用的流行Linux LiveCD。
表 1-6 Linux LiveCD发行版
发行版
描述
Knoppix
来自德国的一款Linux发行版,也是最早的LiveCD
Linux
PCLinuxOS
一款成熟的LiveCD形式的Linux发行版
Ubuntu 为多种语言设计的世界级Linux项目
Slax
基于Slackware Linux的一款LiveCD Linux
Puppy
Linux
为老旧PC设计的一款全功能Linux
你能在这张表中看到熟悉的面孔。许多特定用途
的Linux发行版都有对应的Linux LiveCD版本。一
些Linux LiveCD发行版,比如Ubuntu,允许直接从
LiveCD安装整个发行版。这使你可以从CD引导
启动,先体验一下此Linux发行版,如果喜欢的
话,再把它安装到硬盘上。这个功能极其方便易
用。
就像所有美好的事物一样,Linux LiveCD也有一
些不足之处。由于要从CD上访问所有东西,应用
程序会运行得更慢,而如果再搭配上陈旧缓慢的
PC和光驱,那更是慢上加慢。还有,由于无法向
CD写入数据,对Linux系统作的任何修改都会在
重启后失效。
不过,有一些Linux LiveCD的改进帮助解决了上
述一些问题。这些改进包括:
能将CD上的Linux系统文件复制到内存中;
能将系统文件复制到硬盘上;
能在U盘上存储系统设置;
能在U盘上存储用户设置。
一些Linux LiveCD,如Puppy Linux,只包含最少
数量的Linux系统文件。当CD引导启动时,LiveCD的启动脚本直接把它们复制到内存中。这
允许在Linux启动后立即把CD从光驱中取走。这
不仅提高了程序运行速度(因为程序从内存中运
行时更快),而且还空出了CD光驱,供你用
Puppy Linux自带的软件转录音频CD或播放视频
DVD。
其他Linux LiveCD用另外的方法,同样允许你在
启动后将CD从光驱中拿走。这种方法是将核心
Linux文件作为一个文件复制到Windows硬盘上。
待CD启动后,系统会寻找那个文件,并从中读取
系统文件。dyne:bolic Linux LiveCD采用的就是这
种技术,我们称之为对接 。当然,你必须在从
CD引导启动之前把系统文件复制到硬盘里。
一种非常流行的技术就是用常见的U盘(也称为闪存或闪盘)来存储Linux LiveCD会话数据。几
乎每个Linux LiveCD都能识别插入的U盘(即使是
在Windows下格式化的)并从U盘上读写文件。
这允许你启动Linux LiveCD,使用Linux应用来创
建文件,再将这些文件存储在U盘上,然后用
Windows应用(或者在另外一台电脑上)访问这
些文件。这该有多酷!1.3 小结
本章探讨了Linux系统及其基本工作原理。Linux
内核是系统的核心,控制着内存、程序和硬件之
间的交互。GNU工具也是Linux系统中的一个重要
部分。本书关注的焦点Linux shell是GNU核心工
具集中的一部分。本章还讨论了Linux系统中的最
后一个组件:Linux桌面环境。随着时间推移,一
切都发生了改变。现今的Linux可以支持多种图形
化桌面环境。
本章还探讨了各种Linux发行版。Linux发行版就
是把Linux系统的各个不同部分汇集起来组成一个
易于安装的包。Linux发行版有囊括各种软件的成
熟的Linux发行版,也有只包含针对某种特定功能
软件包的特定用途发行版。Linux LiveCD则是一
种无需将Linux安装到硬盘就能体验Linux的发行
版。
下一章将开始了解启动命令行和shell脚本编程体
验所需的基本知识。你将了解如何从绚丽的图形
化桌面环境获得Linux shell工具。就目前而言,这
绝非易事。
第 2 章 走进shell
本章内容
访问命令行
通过Linux控制台终端访问CLI
通过图形化终端仿真器访问CLI
使用GNOME终端仿真器
使用Konsole终端仿真器
使用xterm终端仿真器
在Linux早期,可以用来工作的只有shell。那时,系统管理员、程序员和系统用户都端坐在Linux控
制台终端前,输入shell命令,查看文本输出。如
今,伴随着图形化桌面环境的应用,想在系统中
找到shell提示符来输入命令都变得困难起来。本
章讨论了如何进入命令行环境,带你逐步了解可
能会在各种Linux发行版中碰到的终端仿真软件
包。2.1 进入命令行
在图形化桌面出现之前,与Unix系统进行交互的
唯一方式就是借助由shell所提供的文本命令行界
面 (command line interface,CLI)。CLI只能接
受文本输入,也只能显示出文本和基本的图形输
出。
由于这些限制,输出设备并不需要多华丽。通常
只需要一个简单的哑终端就可以使用Unix系统。
所谓的哑终端无非就是利用通信电缆(一般是一
条多线束的串行电缆)连接到Unix系统上的一台
显示器和一个键盘。这种简单的组合可以轻松地
向Unix系统中输入文本数据,并查看文本输出结
果。
如你所知,如今的Linux环境相较以前已经发生了
巨大变化。所有的Linux发行版都配备了某种类型
的图形化桌面环境。但是,如果想输入shell命
令,仍旧需要使用文本显示来访问shell的CLI。
于是现在的问题就归结为一点:有时还真是不容
易在Linux发行版上找到进入CLI的方法。
2.1.1 控制台终端进入CLI的一种方法是让Linux系统退出图形化桌
面模式,进入文本模式。这样在显示器上就只有
一个简单的shell CLI,跟图形化桌面出现以前一
样。这种模式称作Linux控制台 ,因为它仿真了
早期的硬接线控制台终端,而且是一种同Linux系
统交互的直接接口。
Linux系统启动后,它会自动创建出一些虚拟控制
台。虚拟控制台是运行在Linux系统内存中的终端
会话。无需在计算机上连接多个哑终端,大多数
Linux发行版会启动5~6个(有时会更多)虚拟控
制台,你在一台计算机的显示器和键盘上就可以
访问它们。
2.1.2 图形化终端
除了虚拟化终端控制台,还可以使用Linux图形化
桌面环境中的终端仿真包 。终端仿真包会在一
个桌面图形化窗口中模拟控制台终端的使用。图
2-1展示了一个运行在Linux图形化桌面环境中的
终端仿真器。图 2-1 运行在Linux桌面上的终端仿真器
图形化终端仿真只负责Linux图形化体验的一部分。完整的体验效果需要借助多个组件来实现,其中就包括图形化终端仿真软件(称为客户端)。表2-1展示了Linux图形化桌面环境的不同组
成部分。
表 2-1 图形界面的组成
名称
例子
描述
客户
端
图形化终端仿真器,桌
面环境,网络浏览器
请求图形化服务的应用
显示
服务
器
Mir,Wayland
Composi tor,Xserver
负责管理显示(屏幕)和输入设
备(键盘、鼠标、触摸屏)
窗口
管理
器
Compiz,Metaci ty,Kwin
为窗口加入边框,提供窗口移动
和管理功能
部件
库
Athenal(Xaw),X
Intrinsics
为桌面环境中的客户端添加菜单
以及外观项
要想在桌面中使用命令行,关键在于图形化终端
仿真器。可以把图形化终端仿真器看作GUI中(in the GUI)的CLI终端,将虚拟控制台终端看
作GUI以外(outside the GUI)的CLI终端。理解各
种终端及其特性能够提高你的命令行体验。2.2 通过Linux控制台终端访问CLI
在Linux的早期,在启动系统时你只会在显示器上
看到一个登录提示符,除此之外就没别的了。之
前说过,这就是Linux控制台。它是唯一可以为系
统输入命令的地方。
尽管在启动时会创建多个虚拟控制台,但很多
Linux发行版在完成启动过程之后会切换到图形化
环境。这为用户提供了图形化登录以及桌面体
验。这样一来,就只能通过手动方式来访问虚拟
控制台了。
在大多数Linux发行版中,你可以使用简单的按键
组合来访问某个Linux虚拟控制台。通常必须按下
Ctrl+Alt组合键,然后按功能键(F1~F7)进入要
使用的虚拟控制台。功能键F1生成虚拟控制台
1,F2键生成虚拟控制台2,F3键生成虚拟控制台
3,F4键生成虚拟控制台4,依次类推。
说明 Linux发行版通常使用Ctrl+Alt组合键
配合F1或F7来进入图形界面。Ubuntu使用
F7,而RHEL则使用F1。最好还是测试一下
自己所使用的发行版是如何进入图形界面
的。文本模式的虚拟控制台采用全屏的方式显示文本
登录界面。图2-2展示了一个虚拟控制台的文本登
录界面。
图 2-2 Linux虚拟控制台登录界面
注意,在图2-2中第一行文本的最后有一个词tty2。这个词中的2表明这是虚拟控制台2,可以通过
Ctrl+Alt+F2组合键进入。tty 代表电传打字机
(teletypewriter)。这是一个古老的名词,指的
是一台用于发送消息的机器。
说明 不是所有的Linux发行版都会在登录界面上显示虚拟控制台的tty号。
在login: 提示符后输入用户ID,然后再
在Password: 提示符后输入密码,就可以进入控
制台终端了。如果你之前从来没有用过这种方式
登录,那要注意在这里输入密码和在图形环境中
输入不太一样。在图形环境中,输入密码的时候
会看到点号或星号,但是在虚拟控制台中,输入
密码的时候什么都不会显示。
登入虚拟控制台之后,你就进入了Linux CLI。记
住,在Linux虚拟控制台中是无法运行任何图形化
程序的。
一旦登录完成,你可以保持此次登录的活动状
态,然后在不中断活动会话的同时切换到另一个
虚拟控制台。你可以在所有虚拟控制台之间切
换,拥有多个活动会话。在使用CLI时,这个特
性为你提供了巨大的灵活性。
还有一些灵活性涉及虚拟控制台的外观。尽管虚
拟控制台只是文本模式的控制台终端,但你可以
修改文字和背景色。
比如可将终端的背景色设置成白色、文本设置成
黑色,这样可让眼睛轻松些。登录之后,有好几种方法可实现这样的修改。其中一种方法是输入
命令setterm -inversescreen on ,然后按回车
键,如图2-3所示。注意,在途中我们使用选项on
启用了inversescreen 特性。也可以使用选项off
关闭该特性。图 2-3 启用了inversescreen 的Linux虚拟控制
台
另一种方法是连着输入两条命令。输入setterm
-background white ,然后按回车键,接着输
入setterm -foreground black ,再按回车键。
要注意,因为先修改的是终端的背景色,所以可
能会很难看清接下来输入的命令。
在上面的命令中,你不用像inversescreen 那样
去启用或关闭什么特性。共有8种颜色可供选
择,分别是black 、red 、green 、yellow
、blue 、magenta 、cyan 和white (这种颜色在
有些发行版中看起来像灰色)。你可以赋予纯文
本模式的控制台终端富有创意的外观效果。表2-2
展示了setterm 命令的一些选项,可以用于增进
控制台终端的可读性,或改善外观。
表 2-2 用于设置前景色和背景色的setterm 选
项
选项
参数
描述
black 、red
、green 、yellow
将终端的背景色改为指定颜 -background 、blue 、magenta
、cyan 或white
色
-foreground
black 、red
、green 、yellow
、blue 、magenta
、cyan 或white
将终端的前景色改为指定颜
色
-
inversescreen
on 或off
交换背景色和前景色
-reset
无
将终端外观恢复成默认设置并
清屏
-store
无
将终端当前的前景色和背景色
设置成 -reset 选项的值
如果不涉及GUI,虚拟控制台终端访问CLI自然是
不错的选择。但有时候需要一边访问CLI,一边
运行图形化程序。使用终端仿真软件包可以解决
这个问题,这也是在GUI中访问shell CLI的一种流
行的方式。接下来的部分将介绍能够提供图形化
终端仿真的常见软件包。2.3 通过图形化终端仿真访问CLI
相较于虚拟化控制台终端,图形化桌面环境提供
了更多访问CLI的方式。在图形化环境下,有大
量可用的图形化终端仿真器。每个软件包都有各
自独特的特性及选项。表2-3列举出了一些流行的
图形化终端仿真器软件包及其网址。
表 2-3 流行的图形化终端仿真器软件包
名称
网址
Eterm
http: www.eterm.org
Final Term
http: final term.org
GNOME
Terminal
https: help.gnome.orgusersgnome-terminal stable
Guake
https: gi thub.comGuakeguake
Konsole
Terminal
http: konsole.kde.org
Li l lyTerm
http: l i lyterm.luna.com.twindex.html
LXTerminal
http: wiki .lxde.orgenLXTerminal
mrxvt
https: code.google.compmrxvt
ROXTerm
http: roxterm.sourceforge.net
rxvt
http: sourceforge.netprojectsrxvt
rxvt-
unicode
http: software.schmorp.depkgrxvt-unicode
Sakura
https: launchpad.netsakura
st
http: st.suckless.org
Terminator
https: launchpad.netterminator
Terminology
http: www.enl ightenment.orgp.php?p=aboutterminology
ti lda
http: ti lda.sourceforge.netti ldaabout.php
UXterm
http: manpages.ubuntu.commanpagesgutsyman1uxterm.1.html
Wterm
http: sourceforge.netprojectswterm
xterm
http: invisible-island.netxterm
Xfce4
Terminal
http: docs.xfce.orgappsterminal start
Yakuake
http: extragear.kde.orgappsyakuake
尽管可用的图形化终端仿真器软件包不少,但本
章只重点关注其中常用的三个。它们分别是
GNOME Terminal、Konsole Terminal和xterm,通
常都会默认安装在Linux发行版中。2.4 使用GNOME Terminal仿真器
GNOME Terminal是GNOME桌面环境的默认终端
仿真器。很多发行版,如RHEL、Fedora和
CentOS,默认采用的都是GNOME桌面环境,因
此GNOME Terminal自然也就是默认配备了。不过
其他一些桌面环境,比如Ubuntu Unity,也采用
GNOME Terminal作为默认的终端仿真软件包。它
使用起来非常简单,是Linux新手的不错选择。这
部分将带你学习如何访问、配置和使用GNOME
终端仿真器。
2.4.1 访问GNOME Terminal
每个图形化桌面环境都有不同的方式访问
GNOME终端仿真器。本节讲述了如何在
GNOME、Unity和KDE桌面环境中访问GNOME
Terminal。
说明 如果你使用的桌面环境并没有在表2-
3中列出,那你就得逐个查看桌面环境中的
各种菜单来找到GNOME终端仿真器。它在
菜单中通常叫作Terminal。
在GNOME桌面环境中,访问GNOME Terminal非常直截了当。找到左上角的菜单,点击
Applications,从下拉菜单中选择System Tools,点
击Terminal。如果写成简写法的话,这一系列操
作就像这样:Applications ? System Tools ?
Terminal。
图2-1就是一张GNOME Terminal的图片。它展示
了在CentOS发行版的GNOME桌面环境中访问
GNOME Terminal。
在Unity桌面环境中,访问GNOME终端得费点
事。最简单的方法是Dash ? Search,然后输入
Terminal。GNOME终端会作为一个名为Terminal
的应用程序显示在Dash区域。点击对应的图标就
可以打开GNOME终端仿真器了。
窍门 在一些Linux发行版的桌面环境中,例如Ubuntu的Unity,可以使用快捷键
Ctrl+Alt+T快速访问GNOME终端。
在KDE桌面环境中,默认的仿真器是Konsole终端
仿真器。必须通过菜单才能访问。找到屏幕左下
角名为Kickoff Application Launcher的图标,然后
依次点击Application ? Utilities ? Terminal。
在大多数桌面环境中,可以创建一个启动器(launcher)访问GNOME Terminal。启动器是桌
面上的一个图标,可以利用它启动一个选定的应
用程序。这是个很棒的特性,可以让你在桌面环
境中快速访问终端仿真器。如果不想使用快捷键
或是你的桌面环境中无法使用快捷键,这个特性
就尤为有用。
例如,在GNOME桌面环境中,要创建一个启动
器的话,可以在桌面中间单击右键,在出现的下
拉菜单中选择Select Create Launcher...,然后会打
开一个名为Create Launcher的窗口。在Type字段中
选择Application。在Name字段中输入图标的名
称。在Command字段中输入gnome-terminal 。点
击Ok,保存为新的启动器。一个带有指定名称图
标的启动器就出现在了桌面上。双击就可以打开
GNOME终端仿真器了。
说明 在Command字段中输入gnome-
terminal 时,输入的实际上是用来启动
GNOME终端仿真器的shell命令。在第3章中
会学到如何为gnome-terminal 这类命令加入
特定的命令行选项来获得特殊的配置,以及
如何查看可用的选项。
在GNOME终端仿真器应用中,菜单提供了多种
配置选项,应用本身也包含了很多可用的快捷键。了解这些选项能够增进GNOME Terminal CLI
的使用体验。
2.4.2 菜单栏
GNOME Terminal的菜单栏包含了配置选项和定制
选项,可以通过它们使你的GNOME Terminal符合
自己的使用习惯。接下来的几张表格简要地描述
了菜单栏中各种配置选项以及对应的快捷键。
说明 在阅读书中所描述的这些GNOME
Terminal菜单选项时,要注意的是,这和你
所使用的Linux发行版的GNOME Terminal的
菜单选项可能会略有不同。因为一些Linux发
行版采用的GNOME Terminal的版本比较旧。
表2-4展示了GNOME Terminal的File菜单下的配置
选项。File菜单中包含了可用于创建和管理所有
CLI终端会话的菜单项。
表 2-4 File菜单
名称
快捷键
描述
Open
Shift+Ctrl+N
在新的GNOME Terminal窗口中启动一个Terminal 新的shel l会话
Open
Tab
Shift+Ctrl+T
在现有的GNOME Terminal窗口的新标签
中启动一个新的shel l会话
New
Profi le
无
定制会话并将其保存为配置文件
(profi le),以备随后再次使用
Save
Contents
无
将回滚缓冲区(scrol lback buffer)中的
内容保存到文本文件中
Close
Tab
Shift+Ctrl+W
关闭当前标签中的会话
Close
Window
Shift+Ctrl+Q
关闭当前的GNOME Terminal会话
注意,和在网络浏览器中一样,你可以在
GNOME Terminal会话中打开新的标签来启动一个
全新的CLI会话。每个标签中的会话均被视为独
立的CLI会话。
窍门 并不是非得点击菜单项才能进入File
菜单中的选项。大多数选项可以通过在会话
区域中点击右键找到。表2-5所展示的Edit菜单中的菜单项用于处理标签
内的文本内容。可以使用鼠标在会话窗口中的任
意位置复制、粘贴文本。
表 2-5 Edit菜单
名称
快捷键
描述
Copy
Shift+Ctrl+C
将所选的文本复制到GNOME的剪贴
板中
Paste
Shift+Ctrl+V
将GNOME剪贴板中的文本粘贴到会
话中
Paste
Fi lenames
粘贴已复制的文件名和对应的路径
Select Al l
无
选中回滚缓冲区中的全部输出
Profi les
无
添加、删除或修改GNOME Terminal
的配置文件
Keyboard
Shortcuts
无
创建快捷键来快速访问GNOME
Terminal的各种特性
Profi le
Preferences
无
编辑当前会话的配置文件
Paste Filenames菜单项只有在最新版的GNOME
Terminal中才能找到,因此在你的系统中可能会
看不到。
表2-6所展示的View菜单中包含用于控制CLI会话
窗口外观的菜单项。这些选项能够为视力有缺陷
的用户带来帮助。
表 2-6 View菜单
名称
快捷键
描述
Show Menubar
无
打开关闭菜单栏
Ful l Screen
F11
打开关闭终端窗口全桌面显示模式
Zoom In
Ctrl++
逐步增大窗口显示字号
Zoom Out
Ctrl+-
逐步减小窗口显示字号
Normal Size Ctrl+0 恢复默认字号
要注意的是,如果关闭了菜单栏显示,会话的菜
单栏就会消失。不过你可以在任何一个终端会话
窗口中点击右键,然后选择Show Menubar,轻而
易举地找回菜单栏。
表2-7所展示的Search菜单中的菜单项用于在终端
会话中进行简单的搜索。这些搜索类似于在网络
浏览器或字处理软件中进行的操作。
表 2-7 Search菜单
名称
快捷键
描述
Find
Shift+Ctrl+F
打开Find窗口,提供待搜索文本的搜索
选项
Find Next
Shift+Ctrl+H
从终端会话的当前位置开始向前搜索
指定文本
Find
Previous
Shift+Ctrl+G
从终端会话的当前位置开始向后搜索
指定文本
表2-8所展示的Terminal菜单中的菜单项用于控制终端仿真会话的特性。这些菜单项并没有对应的
快捷键。
表 2-8 Terminal菜单
名称
描述
Change Profi le
切换到新的配置文件
Set Ti tle
修改标签会话的标题
Set Character
Encoding
选择用于发送和显示字符的字符集
Reset
发送终端会话重置控制码
Reset and Clear
发送终端会话重置控制码并清除终端会话
显示
Window Size List
列出可用于调整当前终端窗口大小的列表
Reset选项非常有用。某天,你可能不小心让终端
会话显示了一堆杂乱无章的字符和符号。这时候根本识别不出什么文本信息。这通常是因为在屏
幕上显示了非文本文件。可以通过选择Reset或
Reset and Clear让屏幕恢复正常。
表2-9所展示的Tabs菜单中的菜单项用于控制标签
的位置以及活动标签的选择。这个菜单只有在打
开多个标签会话时才会出现。
表 2-9 Tabs菜单
名称
快捷键
描述
Next
Tab
Ctrl+PageDown
使下一个标签成为活动标签
Previous
Tab
Ctrl+PageUp
使上一个标签成为活动标签
Move
Tab
Left
Shift+Ctrl+PageUp
将当前标签移动到前一个标签的
前面
Move
Tab
Right
Shift+Ctrl+PageDown
将当前标签移动到下一个标签的
后面
Detach
Tab
无
删除该标签并使用该标签会话启
动一个新的GNOME Terminal窗口
Tab
List
无
列出当前正在运行的标签(选择
一个标签,转入对应的会话)
Terminal
List
无
列出当前正在运行的终端(选择
一个终端,转入对应的会话。当
打开多个窗口会话的时候才会出
现该菜单项)
最后,Help菜单包含了两个菜单项。Contents提供
了一份完整的GNOME Terminal手册,可供你研究
GNOME Terminal的各个菜单项和特性。About菜
单项可以告诉你当前运行的GNOME Terminal的版
本。
除了GNOME终端仿真软件包,另一个常用的软
件包是Konsole Terminal。两者在很多方面类似。
不过两者间存在的差异还是让我们很有必要单独
开辟一节来讲解的。2.5 使用Konsole Terminal仿真器
KDE桌面项目拥有自己的终端仿真软件包:
Konsole Terminal。Konsole软件包具备基本的终端
仿真特性,另外还包含了一些更高级的图形应用
程序功能。本节描述了Konsole Terminal的特性及
其用法。
2.5.1 访问Konsole Terminal
Konsole Terminal是KDE桌面环境的默认终端仿真
器,可以通过KDE环境的菜单系统轻而易举地访
问到。在其他桌面环境中,访问Konsole Terminal
就要麻烦一点了。
在KDE桌面环境中,可以通过点击屏幕左下角名
为Kickoff Application Launcher的图标来访问
Konsole Terminal。然后点击Applications ?
System ? Terminal (Konsole)。
说明 你可能会在KDE菜单环境中看到两个
终端菜单项。如果是这样的话,下方包含文
字Konsole的Terminal菜单项就是Konsole终
端。在GNOME桌面环境中,通常并没有默认安装
Konsole终端。如果已经安装过的话,你可以通过
GNOME的菜单系统进行访问。在屏幕左上角点
击Applications ? System Tools ? Konsole。
说明 你的系统中可能并没有安装Konsole
终端仿真软件包。如果想安装的话,请阅读
第9章来学习如何在命令行中安装软件。
如果在Unity桌面环境中安装了Konsole,可以通
过Dash ? Search,然后输入Konsole 进行访问。
Konsole Terminal会作为一个名为Konsole的应用程
序显示在Dash区域。点击对应的图标打开Konsole
终端仿真器。
图2-4展示了在CentOS Linux发行版的KDE桌面环
境中访问Konsole Terminal。图 2-4 Konsole Terminal
记住,在大多数桌面环境中,可以创建一个启动
器来访问如Konsole Terminal这样的应用程序。需
要用于启动器启动Konsole终端仿真器的命令
是konsole 。另外,如果已经安装过Konsole
Terminal的话,可以在其他的终端模拟器中输
入konsole ,然后按回车键来启动。和GNOME Terminal类似,Konsole Terminal也通过
菜单提供了一些配置选项和快捷键。接下来将会
逐一讲述这些选项。
2.5.2 菜单栏
Konsole Terminal的菜单栏包含了查看和更改终端
仿真会话特性所需的配置及定制化选项。下面的
几张表格简要描述了菜单选项及其快捷键。
窍门 在活动会话区域中点击右键时,Konsole Terminal会弹出一个简单的菜单。一
些菜单项可以在这个非常方便的菜单中找
到。
表2-10中所展示的File菜单提供了可用于在当前
窗口或新窗口中打开新标签的选项。
表 2-10 File菜单
名称
快捷键
描述
New Tab
Ctrl+Shift+N
在现有的Konsole Terminal窗口的新标
签中启动一个新的shel l会话
New
Window
Ctrl+Shift+M
在新的Konsole Terminal窗口中启动一
个新的shel l会话
shel l
无
打开采用默认配置文件的shel l
Open
Browser
Here
无
打开默认的文件浏览器应用
Close Tab
Ctrl+Shift+W
关闭当前标签中的会话
Qui t
Ctrl+Shift+Q
退出Konsole Terminal仿真应用
在首次启动Konsole Terminal时,菜单中唯一列出
的配置文件就是shell。随着越来越多的配置文件
被创建及保存,它们的名字都会出现在菜单中。
说明 在阅读书中所描述的Konsole
Terminal菜单项时,要注意的是,这可能会
和你使用的Linux发行版中的Konsole Terminal
有所不同。因为一些Linux发行版中采用的
Konsole Terminal仿真软件包的版本比较旧。
表2-11中所展示的Edit菜单提供了可用于处理会
话中的文本内容的选项。除此之外,可以管理标签名称的选项也在此列。
表 2-11 Edit菜单
名称
快捷键
描述
Copy
Ctrl+Shift+C
将选择的文本复制到Konsole的剪贴板
中
Paste
Ctrl+Shift+V
将Konsole剪贴板中的文本粘贴到会话
中
Rename
Tab
Ctrl+Al t+S
修改标签会话的标题
Copy Input
To
无
开始停止将会话输入复制到所选的其
他会话中
Clear
Display
无
清除终端会话中的内容
Clear
Reset
无
清除终端会话中的内容并发送终端会
话重置控制码 Konsole有一种很好的方法来跟踪每个标签会话中
正在进行的活动。你可以使用Rename Tab菜单项
对标签进行命名,使其符合当前执行的任务。这
可以帮助我们知道那些打开的标签究竟是干什么
的。
表2-12所展示的View菜单中的菜单项用于控制
Konsole Terminal窗口中单个会话的视图。除此之
外,可监视终端会话活动的选项也在此列。
表 2-12 View菜单
名称
快捷键
描述
Spl i t View
无
控制显示在Konsole Terminal窗口中的
多个标签会话
Detach
View
Ctrl+Shift+H
删除一个标签会话并使用该标签中的
会话启动一个新的Konsole Terminal窗
口
Show
Menu Bar
无
打开关闭菜单栏
Ful l Screen
Mode Ctrl+Shift+F11 打开关闭终端窗口的全屏模式
Moni tor for
Si lence
Ctrl+Shift+I
打开关闭无活动标签(tab si lence)的
特殊消息
Moni tor for
Activi ty
Ctrl+Shift+A
打开关闭活动标签(tab activi ty)的
特殊消息
Character
Encoding
无
选择用于发送和显示字符的字符集
Increase
Text Size
Ctrl++
逐步增大窗口显示字号
Decrease
Text Size
Ctrl+-
逐步减小窗口显示字号
菜单项Monitor for Silence用于指明无活动标签。
如果在当前标签会话内超过10秒钟没有出现新的
文本内容,那该标签就成了无活动标签。这允许
你在等待应用程序输出时切换到另一个标签。
由菜单项Monitor for Activity所打开的活动标签功
能会在标签会话中出现新的文本内容时发出一条
消息。这一选项能让你注意到应用程序产生了新的输出。
Konsole为每个标签保存了一个叫作回滚缓冲区
的历史记录。这个历史记录中包含了已经不在当
前终端可视区域中的文本内容。默认的是在回滚
缓冲区内保存最近的1000行文本。表2-13所展示
的Scrollback菜单中的菜单项可用于查看该缓冲
区。
表 2-13 Scrollback菜单
名称
快捷键
描述
Search Output
Ctrl+Shift+F
打开Konsole Terminal窗口底部的Find
窗口,提供回滚文本搜索选项
Find Next
F3
在回滚缓冲区历史记录中查找下一
个匹配的文本
Find Previous
Shift+F3
在回滚缓冲区历史记录中查找上一
个匹配的文本
Save Output
无
将回滚缓冲区中的内容保存在一个
文本文件或HTML文件中
Scrol lback
Options
无
打开Scrol lback Options窗口来配置回
滚缓冲区选项
Clear
Scrol lback
无
删除回滚缓冲区中的内容
Clear
Scrol lback
Reset
Ctrl+Shift+X
删除回滚缓冲区中的内容并重置终
端窗口
你也可以使用窗口可视区域中的滚动条向后翻看
回滚缓冲区中的内容。另外,也可以使用
Shift+UpArrow逐行向后翻看,或是使用
Shift+PageUp逐页(24行)向后翻看。
表2-14中所展示的Bookmarks菜单中的菜单项可用
于管理Konsole Terminal窗口中的书签。书签能够
保存活动会话的目录位置,让你随后可以在相同
会话或新的会话中轻松返回之前的位置。
表 2-14 Bookmark菜单
名称
快捷键
描述
Add Bookmark Ctrl+Shift+B 在当前目录位置上创建新的书
签
Bookmark Tabs as
Folder
无
为当前所有的终端标签会话创建
一个新的书签
New Bookmark
Folder
无
创建新的书签文件夹
Edi t Bookmarks
无
编辑已有的书签
表2-15所展示的Settings菜单中的菜单项可用于定
制和管理配置文件。另外,你还可以为当前的标
签会话再添加些许功能。这些菜单项并没有对应
的快捷键。
表 2-15 Settings菜单
名称
描述
Change Profi le
将所选的配置文件应用于当前标签
Edi t Current Profi le
打开Edi t Profi le窗口,提供配置文件配置选
项
Manage Profi les
打开Manage Profi le窗口,提供配置文件管理
选项
Configure Shortcuts
创建Konsole Terminal命令快捷键
Configure
Notifications
创建定制化的Konsole Terminal方案及会话
Configure Notifications项允许将会话中发生的特定
事件与不同的行为关联起来。当出现某个事件
时,就会触发指定的行为(或一系列行为)。
表2-16中所展示的Help菜单中的菜单项给出了完
整的Konsole手册(如果你的Linux发行版中已经
安装了KDE手册)以及标准的About Konsole对话
框。
表 2-16 Help菜单
名称
快捷键
描述
Konsole
Handbook
无
包含了完整的Konsole手册
What's This? Shift+F1 包含了终端部件的帮助信息
Report Bug
无
打开Submi t Bug Report(提交bug报
告)表单
Swi tch Appl ication
Language
无
打开Swi tch Appl ication's
Language(切换应用程序语言)表
单
About Konsole
无
显示当前Konsole Terminal的版本
About KDE
显示当前KDE桌面环境的版本
有一份相当全面的文档可以帮助你使用Konsole终
端仿真器软件包。除此之外,在你碰到程序故障
的时候,还可以使用Bug Report表单向Konsole
Terminal开发人员提交问题。
相较于另一个流行的软件包xterm,Konsole终端
仿真器软件包算是年轻一代了。在下一节中,我
们将探望一下“老古董”xterm。2.6 使用xterm终端仿真器
最古老也是最基础的终端仿真软件包是xterm。
xterm软件包在X Window出现之前就有了,通常
默认包含在发行版中。
尽管xterm是功能完善的仿真软件包,但是它并不
需要太多的资源(如内存)来运行。正因为如
此,在专门为老旧硬件设计的Linux发行版中,xterm非常流行。有些图形化桌面环境就用它作为
默认终端仿真器软件包。
xterm软件包尽管没有提供太多炫目的特性,但是
却把一件事做到了极致:它能够仿真旧式终端,如DEC公司的VT102、VT220以及Tektronix 4014
终端。对于VT102和VT220终端,xterm甚至能够
仿真VT序列色彩控制码,让你可以在脚本中使用
色彩。
说明 DEC VT102及VT220盛行于20世纪80
年代和90年代初期,用于连接Unix系统的哑
文本终端。VT102VT220不仅能显示文本,还能够使用块模式图形显示基本的图形结
构。由于在很多商业环境中这种终端访问方
式仍在使用,因而使得VT102VT220仿真依然流行。
图2-5展示了运行在图形化Linux桌面中的xterm。
可以看出,它非常朴素。
图 2-5 xterm终端
如今得花点心思才能把xterm终端仿真器找出来。
它常常并没有被包含在桌面环境的菜单中。2.6.1 访问xterm
在Ubuntu的Unity桌面中,xterm是默认安装的。可
以通过Dash ? Search,然后输入xterm进行访
问。xterm会作为一个名为XTerm的应用出现在
Dash区域。点击对应的图标就可以打开xterm终端
仿真器。
说明 在Ubuntu中搜索xterm时,你可能会看
到另一个叫作UXTerm的终端。这只不过是加
入了Unicode支持的xterm仿真器软件包而
已。
GNOME和KDE桌面环境中并没有默认安装
xterm。你得先安装它(可以参阅第9章安装软件
包)。安装完成之后,你必须从另一个终端仿真
器中启动xterm。打开一个终端仿真器进入CLI,输入xterm并按回车键。记住,也可以创建桌面启
动器来启动xterm。
xterm包让你可以使用命令行参数设置自己的特
性。下面的内容将讨论这些特性以及如何进行修
改。
2.6.2 命令行参数xterm的命令行参数非常多。你可以控制大量的特
性来对终端仿真实施定制,例如允许或禁止某种
VT仿真。
说明 xterm包含数量众多的配置选项,在
此无法一一列举。在bash手册中有大量的文
档可供参考。第3章中会讲到如何阅读bash手
册。另外,xterm开发团队也在其网站上提供
了很好的帮助:http:invisible-
island.netxterm 。
可以通过向xterm 命令加入参数来调用某些配置
选项。例如,要想让xterm仿真DEC VT100终端,可以输入命令xterm -ti vt100 ,然后按回车
键。表2-17给出了一些可以配合xterm终端仿真器
使用的参数。
表 2-17 xterm命令行参数
参数
描述
-bg color
指定终端背景色
-fb font
指定粗体文本所使用的字体
-fg color
指定文本颜色
-fn font
指定文本字体
-fw font
指定宽文本字体
-lf filename
指定用于屏幕日志的文件名
-ms color
指定文本光标颜色
-name name
指定标题栏中的应用程序名称
-ti terminal
指定要仿真的终端类型
一些xterm命令行参数使用加号(+ )或减号(-)来指明如何设置某种特性。加号表示启用某种
特性,减号表示关闭某种特性。不过反过来也
行。加号可以表示禁止某种特性,减号可以表示
允许某种特性,例如在使用bc 参数的时候。表2-
18中列出了可以使用+- 命令行参数设置的一些
常用特性。
表 2-18 xterm +-命令行参数
参数
描述
ah
启用禁止文本光标高亮
aw
启用禁止文本行自动环绕
bc
启用禁止文本光标闪烁
cm
启用禁止识别ANSI色彩更改控制码
fullscreen
启用禁止全屏模式
j
启用禁止跳跃式滚动
l
启用禁止将屏幕数据记录进日志文件
mb
启用禁止边缘响铃
rv
启用禁止图像反转
t
启用禁止Tektronix模式 要注意,不是所有的xterm实现都支持这些命令行
参数。你可以在xterm启动后,使用-help 参数来
确定你所使用的xterm实现支持哪些参数。
现在你已经了解了三种终端仿真器软件包,重要
的问题是:哪个是最好的终端仿真器。对于这个
问题,并没有权威的答案。要使用哪个仿真器软
件包取决于你的个人需求。不过,能有这么多选
择总是好事。2.7 小结
为了着手学习Linux命令行命令,得先能访问命令
行。在图形化界面的世界里,有时会费点周折。
本章讨论了能够获得Linux命令行的一些不同的界
面。
首先,我们讲解了通过虚拟控制台终端(不涉及
GUI的终端)和通过图形化终端仿真软件包(GUI
中的终端)访问CLI时的不同。简要对比了两种
访问方式之间的差别。
接下来,我们详细探究了通过虚拟控制台终端访
问CLI,包括像更改背景色这类控制台终端配置
选项。
在学习了虚拟控制台终端之后,本章还讲述了利
用图形化终端仿真器访问CLI,其中主要涉及三
种终端仿真器:GNOME Terminal、Konsole
Terminal以及xterm。
本章还讨论了GNOME桌面项目的GNOME终端仿
真软件包。GNOME Terminal通常默认安装在
GNOME桌面环境中。藉由菜单以及快捷键,它
可以很方便地设置多种终端特性。然后讨论了KDE桌面项目的Konsole终端仿真软件
包。Konsole Terminal通常默认安装在KDE桌面环
境中。它提供了诸多漂亮的特性,例如能够监测
到空闲的终端。
最后讲到的是xterm终端仿真器软件包。xterm是
Linux中第一个可用的终端仿真器。它能够仿真旧
式终端硬件,如VT和Tektronix终端。
下一章将开始接触Linux命令行。你将从中学习到
Linux文件系统导航以及创建、删除、处理文件所
需的命令。
第 3 章 基本的bash shell命令
本章内容
使用shell
bash手册
浏览文件系统
文件和目录列表
管理文件和目录
查看文件内容
大多数Linux发行版的默认shell都是GNU bash
shell1 。本章将介绍bash shell的一些基本特性,例如bash手册、tab键自动补全以及显示文件内
容,带你逐步了解怎样用bash shell提供的基本命
令来操作Linux文件和目录。如果你已经熟悉了
Linux环境中的这些基本操作,可以直接跳过本
章,从第4章开始了解更多的高级命令。
1 在6.10之后的大部分Ubuntu版本上,默认的shel l是dash。3.1 启动shell
GNU bash shell能提供对Linux系统的交互式访
问。它是作为普通程序运行的,通常是在用户登
录终端时启动。登录时系统启动的shell依赖于用
户账户的配置。
etcpasswd文件包含了所有系统用户账户列表以
及每个用户的基本配置信息。以下是
从etcpasswd文件中取出的样例条目:
christine:x:501:501:Christine Bresnahan:homechristine:binbash
每个条目有七个字段,字段之间用冒号分隔。系
统使用字段中的数据来赋予用户账户某些特定特
性。其中的大多数条目将在第7章有更加详细的
介绍。现在先将注意力放在最后一个字段上,该
字段指定了用户使用的shell程序。
说明 尽管本书的重点放在了GNU bash
shell,但是也会谈及其他一些shell。第23章中讲解了如何使用如dash和tcsh之类的shell。
在前面的etcpasswd样例条目中,用户christine使
用binbash作为自己的默认shell程序。这意味着
当christine登录Linux系统后,bash shell会自动启
动。
尽管bash shell会在登录时自动启动,但是,是否
会出现shell命令行界面(CLI)则依赖于所使用
的登录方式。如果采用虚拟控制台终端登录,CLI提示符会自动出现,你可以输入shell命令。
但如果是通过图形化桌面环境登录Linux系统,你
就需要启动一个图形化终端仿真器来访问shell
CLI提示符。3.2 shell提示符
一旦启动了终端仿真软件包或者登录Linux虚拟控
制台,你就会看到shell CLI提示符。提示符就是
进入shell世界的大门,是你输入shell命令的地
方。
默认bash shell提示符是美元符号( ),这个符
号表明shell在等待用户输入。不同的Linux发行版
采用不同格式的提示符。在Ubuntu Linux系统上,shell提示符看起来是这样的:
christine@server01:~
在CentOS系统上是这样的:
[christine@server01 ~]
除了作为shell的入口,提示符还能够提供其他的
辅助信息。在上面的两个例子中,提示符中显示了当前用户ID名christine。另外还包括系统名
server01。在本章的后续部分,你会学习到更多
可以在提示符中显示的内容。
窍门 如果你还是CLI新手,请记住,在输
入shell命令之后,需要按回车键才能让shell
执行你输入的命令。
shell提示符并非一成不变。你可根据自己的需要
改变它。第6章讲到了如何修改shell CLI提示符。
可以把shell CLI提示符想象成一名助手,它帮助
你使用Linux系统,给你有益的提示,告诉你什么
时候shell可以接受新的命令。shell中另一个大有
帮助的东西是bash手册。3.3 bash手册
大多数Linux发行版自带用以查找shell命令及其他
GNU工具信息的在线手册。熟悉手册对使用各种
Linux工具大有裨益,尤其是在你要弄清各种命令
行参数的时候。
man 命令用来访问存储在Linux系统上的手册页
面。在想要查找的工具的名称前面输入man 命
令,就可以找到那个工具相应的手册条目。图3-1
展示了查找xterm 命令的手册页面的例子。输入
命令man xterm 就可以进入该页面。图 3-1 xterm 命令的手册页面
注意图3-1中xterm 命令的DESCRIPTION 段落。这些段落排列的并不紧密,字里行间全是技术行
话。bash手册并不是按部就班的学习指南,而是
作为快速参考来使用的。
窍门 如果你是新接触bash shell,可能一开
始会觉得手册页并不太有用。但是,如果养
成了阅读手册的习惯,尤其是阅读第一段或
是DESCRIPTION 部分的前两段,最终你会学
到各种技术行话,手册页也会变得越来越有
用。
当使用man 命令查看命令手册页的时候,这些手
册页是由分页程序 (pager)来显示的。分页程
序是一种实用工具,能够逐页显示文本。可以通
过点击空格键进行翻页,或是使用回车键逐行查
看。另外还可以使用箭头键向前向后滚动手册页
的内容(假设你用的终端仿真软件包支持箭头键
功能)。
读完了手册页,可以点击q键退出。退出手册页
之后,你会重新获得shell CLI提示符,这表示
shell正在等待接受下一条命令。
窍门 bash手册甚至包含了一份有关其自身
的参考信息。输入man man 来查看与手册页
相关的手册页。手册页将与命令相关的信息分成了不同的节。每
一节惯用的命名标准如表3-1所示。
表 3-1 Linux手册页惯用的节名
节
描述
Name
显示命令名和一段简短的描述
Synopsis
命令的语法
Confi guration
命令配置信息
Description
命令的一般性描述
Options
命令选项描述
Exi t Status
命令的退出状态指示
Return Value
命令的返回值
Errors
命令的错误消息
Environment
描述所使用的环境变量
Fi les
命令用到的文件
Versions
命令的版本信息
Conforming To
命名所遵从的标准
Notes
其他有帮助的资料
Bugs
提供提交bug的途径
Example
展示命令的用法
Authors
命令开发人员的信息
Copyright
命令源代码的版权状况
See Also
与该命令类型的其他命令
并不是每一个命令的手册页都包含表3-1中列出的
所有节。还有一些命令的节名并没有在上面的节名惯用标准中列出。
窍门 如果不记得命令名怎么办?可以使用
关键字搜索手册页。语法是:man -k 关键
字。例如,要查找与终端相关的命令,可以
输入man -k terminal 。
除了对节按照惯例进行命名,手册页还有对应的
内容区域。每个内容区域都分配了一个数字,从
1开始,一直到9,如表3-2所示。
表 3-2 Linux手册页的内容区域
区域号
所涵盖的内容
1
可执行程序或shel l命令
2
系统调用
3
库调用
4
特殊文件
5
文件格式与约定
6
游戏
7
概览、约定及杂项
8
超级用户和系统管理员命令
9
内核例程
man工具通常提供的是命令所对应的最低编号的
内容。例如,在图3-1中,我们输入的是命令man
xterm ,请注意,在现实内容的左上角和右上
角,单词XTERM后的括号中有一个数字:(1)。
这表示所显示的手册页来自内容区域1(可执行
程序或shell命令)。
一个命令偶尔会在多个内容区域都有对应的手册
页。比如说,有个叫作hostname 的命令。手册页
中既包括该命令的相关信息,也包括对系统主机
名的概述。要想查看所需要的页面,可以输
入man section topic 。对手册页中的第1部分
而言,就是输入man 1 hostname 。对于手册页中
的第7部分,就是输入man 7 hostname 。
你也可以只看各部分内容的简介:输入man 1intro 阅读第1部分,输入man 2 intro 阅读第2
部分,输入man 3 intro 阅读第3部分,等等。
手册页不是唯一的参考资料。还有另一种叫作
info页面的信息。可以输入info info 来了解info
页面的相关内容。
另外,大多数命令都可以接受-help 或--help 选
项。例如你可以输入hostname -help 来查看帮
助。关于帮助的更多信息,可以输入help help。(看出这里面的门道没?)
显然有不少有用的资源可供参考。不过,很多基
本的shell概念还是需要详细的解释。在下一节
中,我们要讲讲如何浏览Linux文件系统。3.4 浏览文件系统
当登录系统并获得shell命令提示符后,你通常位
于自己的主目录中。一般情况下,你会想去逛逛
主目录之外的其他地方。本节将告诉你如何使用
shell命令来实现这个目标。在开始前,先了解一
下Linux文件系统,为下一步作铺垫。
3.4.1 Linux文件系统
如果你刚接触Linux系统,可能就很难弄清楚
Linux如何引用文件和目录,对已经习惯Microsoft
Windows操作系统方式的人来说更是如此。在继
续探索Linux系统之前,先了解一下它的布局是有
好处的。
你将注意到的第一个不同点是,Linux在路径名中
不使用驱动器盘符。在Windows中,PC上安装的
物理驱动器决定了文件的路径名。Windows会为
每个物理磁盘驱动器分配一个盘符,每个驱动器
都会有自己的目录结构,以便访问存储其中的文
件。
举个例子,在Windows中经常看到这样的文件路
径:c:\Users\Rich\Documents\test.doc
这种Windows文件路径表明了文件test.doc究竟位
于哪个磁盘分区中。如果你将test.doc保存在闪存
上,该闪存由J来标识,那么文件的路径就是
J:\test.doc。该路径表明文件位于J盘的根目录
下。
Linux则采用了一种不同的方式。Linux将文件存
储在单个目录结构中,这个目录被称为虚拟目录
(virtual directory)。虚拟目录将安装在PC上的
所有存储设备的文件路径纳入单个目录结构中。
Linux虚拟目录结构只包含一个称为根 (root)目
录的基础目录。根目录下的目录和文件会按照访
问它们的目录路径一一列出,这点跟Windows类
似。
窍门 你将会发现Linux使用正斜线()而
不是反斜线(\)在文件路径中划分目录。在
Linux中,反斜线用来标识转义字符,要是用
在文件路径中的话会导致各种各样的问题。
如果你之前用的是Windows环境,就需要一点时间来适应。
在Linux中,你会看到下面这种路径:
homeRichDocumentstest.doc
这表明文件test.doc位于Documents目录,Documents又位于rich目录中,rich则在home目录
中。要注意的是,路径本身并没有提供任何有关
文件究竟存放在哪个物理磁盘上的信息。
Linux虚拟目录中比较复杂的部分是它如何协调管
理各个存储设备。在Linux PC上安装的第一块硬
盘称为根驱动器 。根驱动器包含了虚拟目录的
核心,其他目录都是从那里开始构建的。
Linux会在根驱动器上创建一些特别的目录,我们
称之为挂载点 (mount point)。挂载点是虚拟目
录中用于分配额外存储设备的目录。虚拟目录会
让文件和目录出现在这些挂载点目录中,然而实
际上它们却存储在另外一个驱动器中。
通常系统文件会存储在根驱动器中,而用户文件
则存储在另一驱动器中,如图3-2所示。图 3-2 Linux文件结构图3-2展示了计算机中的两块硬盘。一块硬盘和虚
拟目录的根目录(由正斜线表示)关联起来。剩
下的硬盘就可以挂载到虚拟目录结构中的任何地
方。在这个例子中,第二块硬盘被挂载到
了home位置,用户目录都位于这个位置。
Linux文件系统结构是从Unix文件结构演进过来
的。在Linux文件系统中,通用的目录名用于表示
一些常见的功能。表3-3列出了一些较常见的
Linux顶层虚拟目录名及其内容。
表 3-3 常见Linux目录名称
目录
用途
虚拟目录的根目录。通常不会在这里存储文件
bin
二进制目录,存放许多用户级的GNU工具
boot
启动目录,存放启动文件
dev
设备目录,Linux在这里创建设备节点
etc 系统配置文件目录
home
主目录,Linux在这里创建用户目录
l ib
库目录,存放系统和应用程序的库文件
media
媒体目录,可移动媒体设备的常用挂载点
mnt
挂载目录,另一个可移动媒体设备的常用挂载点
opt
可选目录,常用于存放第三方软件包和数据文件
proc
进程目录,存放现有硬件及当前进程的相关信息
root
root用户的主目录
sbin
系统二进制目录,存放许多GNU管理员级工具
run
运行目录,存放系统运作时的运行时数据
srv
服务目录,存放本地服务的相关文件
sys
系统目录,存放系统硬件信息的相关文件
tmp
临时目录,可以在该目录中创建和删除临时工作文件
usr
用户二进制目录,大量用户级的GNU工具和数据文件都
存储在这里
var
可变目录,用以存放经常变化的文件,比如日志文件
常见的目录名均基于文件系统层级标准
(filesystem hierarchy standard,FHS)。很多
Linux发行版都遵循了FHS。这样一来,你就能够
在任何兼容FHS的Linux系统中轻而易举地查找文
件。
说明 FHS偶尔会进行更新。你可能会发现
有些Linux发行版仍在使用旧的FHS标准,而
另外一些则只实现了部分当前标准。要想保
持与FHS标准同步,请访问其官方主
页:http:www.pathname.comfhs 。
在登录系统并获得一个shell CLI提示符后,会话
将从主目录开始。主目录是分配给用户账户的一
个特有目录。用户账户在创建之后,系统通常会
为其分配一个特有的目录(参见第7章)。可以使用图形界面在虚拟目录中跳转。要想在
CLI提示符下切换虚拟目录,需要使用cd 命令。
3.4.2 遍历目录
在Linux文件系统上,可以使用切换目录命令cd
将shell会话切换到另一个目录。cd 命令的格式非
常简单:
cd destination
cd 命令可接受单个参数 destination ,用以指定
想切换到的目录名。如果没有为cd 命令指定目标
路径,它将切换到用户主目录。
destination 参数可以用两种方式表示:一种是
使用绝对文件路径,另一种是使用相对文件路
径。
接下来将分别阐述这两种方法。这两者之间的不
同对于理解文件系统遍历非常重要。
1. 绝对文件路径用户可在虚拟目录中采用绝对文件路径 引用目
录名。绝对文件路径定义了在虚拟目录结构中该
目录的确切位置,以虚拟目录的根目录开始,相
当于目录的全名。
绝对文件路径总是以正斜线()作为起始,指明
虚拟文件系统的根目录。因此,如果要指向usr目
录所包含的bin目录下的用户二进制文件,可以使
用如下绝对文件路径:
usrbin
使用绝对文件路径可以清晰表明用户想切换到的
确切位置。要用绝对文件路径来切换到文件系统
中的某个特定位置,只需在cd 命令后指定全路径
名:
christine@server01:~ cd usrbin
christine@server01:usrbin
注意,在上面的例子中,提示符中一开始有一个波浪号(~)。在切换到另一个目录之后,这个
波浪号被usrbin替代了。CLI提示符正是用它来
帮助你跟踪当前所在虚拟目录结构中的位置。波
浪号表明shell会话位于你的主目录中。在切换出
主目录之后,如果提示符已经进行了相关配置的
话,绝对文件路径就会显示在提示符中。
说明 如果你的shell CLI提示符中并没有显
示shell会话的当前位置,那是因为它并没有
进行相关的配置。如果你希望修改CLI提示
符的话,第6章会告诉你如何更改配置。
如果没有配置好提示符来显示当前shell会话的绝
对文件路径,也可以使用shell命令来显示所处的
位置。pwd 命令可以显示出shell会话的当前目
录,这个目录被称为当前工作目录 。pwd 命令的
用法如下:
christine@server01:usrbin pwd
usrbin
christine@server01:usrbin
窍门 在切换到新的当前工作目录时使
用pwd 命令,是很好的习惯。因为很多shell命令都是在当前工作目录中操作的,在发出
命令之前,你应该始终确保自己处在正确的
目录之中。
可以使用绝对文件路径切换到Linux虚拟目录结构
中的任何一级:
christine@server01:usrbin cd varlog
christine@server01:varlog
christine@server01:varlog pwd
varlog
christine@server01:varlog
还可以从Linux虚拟目录中的任何一级跳回主目
录:
christine@server01:varlog cd
christine@server01:~
christine@server01:~ pwd
homechristine
christine@server01:~
但是,如果你只是在自己的主目录中工作,经常
使用绝对文件路径的话未免太过冗长。例如,若已经位于目录homechristine,再输入下面这样的
命令切换到Documents目录就有些繁琐了:
cd homechristineDocuments
幸好还有一种简单的解决方法。
2. 相对文件路径
相对文件路径 允许用户指定一个基于当前位置
的目标文件路径。相对文件路径不以代表根目录
的正斜线()开头,而是以目录名(如果用户准
备切换到当前工作目录下的一个目录)或是一个
特殊字符开始。假如你位于home目录中,并希望
切换到Documents子目录,那你可以使用cd 命令
加上一个相对文件路径:
christine@server01:~ pwd
homechristine
christine@server01:~
christine@server01:~ cd Documents
christine@server01:~Documents pwd
homechristineDocuments
christine@server01:~Documents上面的例子并没有使用正斜线(),而是采用了
相对文件路径将当前工作目录从homechristine改
为homechristineDocuments,大大减少了输入内
容。
另外,此例中还要注意的是,如果提示符经过配
置可以显示出当前工作目录,它就会一直显示波
浪号。这表明当前工作目录位于用户home目录之
下。
窍门 如果你刚接触命令行和Linux目录结
构,建议暂时先坚持使用绝对文件路径。等
熟悉了目录布局之后,再使用相对文件路
径。
可以在任何包含子目录的目录中使用带有相对文
件路径的cd 命令。也可以使用一个特殊字符来表
示相对目录位置。
有两个特殊字符可用于相对文件路径中:
单点符(.),表示当前目录;
双点符(..),表示当前目录的父目录。
你可以使用单点符,不过对cd 命令来说,这没有什么意义。在本章后面你会看到另一个命令如何
有效地在相对文件路径中使用单点符。
双点符在目录层级中移动时非常便利。如果你处
在在主目录下的Documents目录中,需要切换到主
目录下的Downloads目录,可以这么做:
christine@server01:~Documents pwd
homechristineDocuments
christine@server01:~Documents cd ..Downloads
christine@server01:~Downloads pwd
homechristineDownloads
christine@server01:~Downloads
双点符先将用户带到上一级目录,也就是用户的
主目录,然后Downloads这部分再将用户带到下
一级目录,即Downloads目录。必要时用户也可
用多个双点符来向上切换目录。假如现在位于主
目录中(homechristine),想切换到etc目录,可以输入如下命令:
christine@server01:~ cd ....etc
christine@server01:etc pwd
etc
christine@server01:etc当然,在上面这种情况下,采用相对路径其实比
采用绝对路径输入的字符更多,用绝对路径的
话,用户只需输入etc。因此,只在必要的时候
才使用相对文件路径。
说明 在shell CLI提示符中加入足够的信息
非常方便,本节正是这么做的。不过出于清
晰性的考虑,在书中余下的例子里,我们只
使用一个简单的提示符。
既然你已经知道如何遍历文件系统和验证当前工
作目录,那就可以开始探索各种目录中究竟都有
些什么东西了。下一节将学习如何查看目录中的
文件。3.5 文件和目录列表
要想知道系统中有哪些文件,可以使用列表命令
(ls )。本节将描述ls 命令和可用来格式化其
输出信息的选项。
3.5.1 基本列表功能
ls 命令最基本的形式会显示当前目录下的文件和
目录:
ls
Desktop Downloads Music Pictures Templates Videos
Documents examples.desktop my_script Public test_file
注意,ls 命令输出的列表是按字母排序的(按列
排序而不是按行排序)。如果用户用的是支持彩
色的终端仿真器,ls 命令还可以用不同的颜色来
区分不同类型的文件。LS_COLORS 环境变量控制
着这个功能。(第6章中会讲到环境变量。)不
同的Linux发行版根据各自终端仿真器的能力设置
这个环境变量。如果没安装彩色终端仿真器,可用带-F 参数的ls
命令轻松区分文件和目录。使用-F 参数可以得到
如下输出:
ls -F
Desktop Downloads Music Pictures Templates Videos
Documents examples.desktop my_script Public test_file
-F 参数在目录名后加了正斜线(),以方便用
户在输出中分辨它们。类似地,它会在可执行文
件(比如上面的my_script文件)的后面加个星
号,以便用户找出可在系统上运行的文件。
基本的ls 命令在某种意义上有点容易让人误解。
它显示了当前目录下的文件和目录,但并没有将
全部都显示出来。Linux经常采用隐藏文件 来保
存配置信息。在Linux上,隐藏文件通常是文件名
以点号开始的文件。这些文件并没有在默认的ls
命令输出中显示出来,因此我们称其为隐藏文
件。
要把隐藏文件和普通文件及目录一起显示出来,就得用到-a 参数。下面是一个带有-a 参数的ls
命令的例子: ls -a
. .compiz examples.desktop Music test_file.. .config .gconf my_script Videos
.bash_history Desktop .gstreamer-
0.10 Pictures .Xauthority
.bash_logout .dmrc .ICEauthority .profile .xsession-
errors
.bashrc Documents .local Public .xsession-
errors.old
.cache Downloads .mozilla Templates
所有以点号开头的隐藏文件现在都显示出来了。
注意,有三个以.bash开始的文件。它们是bash
shell环境所使用的隐藏文件,在第6章会对其进
行详细的讲解。
-R 参数是ls 命令可用的另一个参数,叫作递归
选项。它列出了当前目录下包含的子目录中的文
件。如果目录很多,这个输出就会很长。以下
是-R 参数输出的简单例子:
ls -F -R
.:
Desktop Downloads Music Pictures Templates Videos
Documents examples.desktop my_script Public test_file
.Desktop:.Documents:
.Downloads:
.Music:
ILoveLinux.mp3
.Pictures:
.Public:
.Templates:
.Videos:
注意,首先-R 参数显示了当前目录下的内容,也
就是之前例子中用户home目录下的那些文件。另
外,它还显示出了用户home目录下所有子目录及
其内容。只有Music子目录中包含了一个可执行
文件ILoveLinux.mp3。
窍门 选项不一定要像例子中那样分开输
入:ls -F -R 。它们可以进行如下合并:ls
-FR 。
在上一个例子中,子目录中没再包含子目录。如
果有更多的子目录,-R 参数会继续进行遍历。正
如你所看到的,如果目录结构很庞大,输出内容会变得很长。
3.5.2 显示长列表
在基本的输出列表中,ls 命令并未输出太多每个
文件的相关信息。要显示附加信息,另一个常用
的参数是-l 。-l 参数会产生长列表格式的输
出,包含了目录中每个文件的更多相关信息。
ls -l
total 48
drwxr-xr-
x 2 christine christine 4096 Apr 22 20:37 Desktop
drwxr-xr-
x 2 christine christine 4096 Apr 22 20:37 Documents
drwxr-xr-
x 2 christine christine 4096 Apr 22 20:37 Downloads
-rw-r--r-
- 1 christine christine 8980 Apr 22 13:36 examples.desktop
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fall
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fell
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fill
-rw-rw-r-- 1 christine christine 0 May 21 13:44 full
drwxr-xr-
x 2 christine christine 4096 May 21 11:39 Music
-rw-rw-r-
- 1 christine christine 0 May 21 13:25 my_file
-rw-rw-r-
- 1 christine christine 0 May 21 13:25 my_scrapt
-rwxrw-r-
- 1 christine christine 54 May 21 11:26 my_script
-rw-rw-r-
- 1 christine christine 0 May 21 13:42 new_file
drwxr-xr-
x 2 christine christine 4096 Apr 22 20:37 Pictures
drwxr-xr-
x 2 christine christine 4096 Apr 22 20:37 Publicdrwxr-xr-
x 2 christine christine 4096 Apr 22 20:37 Templates
-rw-rw-r-
- 1 christine christine 0 May 21 11:28 test_file
drwxr-xr-
x 2 christine christine 4096 Apr 22 20:37 Videos
这种长列表格式的输出在每一行中列出了单个文
件或目录。除了文件名,输出中还有其他有用信
息。输出的第一行显示了在目录中包含的总块
数。在此之后,每一行都包含了关于文件(或目
录)的下述信息:
文件类型,比如目录(d )、文件(- )、字符型文件(c )或块设备(b );
文件的权限(参见第6章);
文件的硬链接总数;
文件属主的用户名;
文件属组的组名;
文件的大小(以字节为单位);文件的上次修改时间;
文件名或目录名。
-l 参数是一个强大的工具。有了它,你几乎可以
看到系统上任何文件或目录的大部分信息。
在进行文件管理时,ls 命令的很多参数都能派上
用场。如果在shell提示符中输入man ls ,就能看
到可用来修改ls 命令输出的参数有好几页。
别忘了可以将多个参数结合起来使用。你不时地
会发现一些参数组合不仅能够显示出所需的内
容,而且还容易记忆,例如ls -alF 。
3.5.3 过滤输出列表
由前面的例子可知,默认情况下,ls 命令会输出
目录下的所有非隐藏文件。有时这个输出会显得
过多,当你只需要查看单个少数文件信息时更是
如此。
幸而ls 命 ......
Original edition, entitled Linux Command Line and
Shell Scripting Bible, Third Edition , by Richard
Blum, Christine Bresnahan, ISBN 978-1-118-98384-
3, published by John Wiley Sons, Inc.
Copyright ? 2015 by John Wiley Sons, Inc. All
rights reserved.This translation published under
License.
Simplified Chinese translation edition published by
POSTS TELECOM PRESS Copyright ?2016.
Copies of this book sold without a Wiley sticker on
the cover are unauthorized and illegal.
本书简体中文版由John Wiley Sons, Inc.授权人
民邮电出版社独家出版。
本书封底贴有John Wiley Sons, Inc.激光防伪标
签,无标签者不得销售。
版权所有,侵权必究。
您购买的图灵电子书仅供您个人使用,未经授
权,不得以任何方式复制和传播本书内容。
版。版权所有,侵权必究。
本书由北京图灵文化发展有限公司发行数字
ISBN:978-7-115-42967-4
译者:门佳 武海峰
作者:[美] Richard Blum Christine Bresnahan
版)
书名:Linux命令行与shell脚本编程大全(第3
址:
小编自己做了一个电子书下载网站, 网我们愿意相信读者具有这样的良知和觉悟,与我
们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施
包括但不限于关闭该帐号等维权措施,并可能追
究法律责任。
图灵社区会员 瘦西湖的鱼
(853794320@qq.com) 专享 尊重版权
版权声明
引言
读者对象
本书结构
警告、窍门与说明
代码下载
最低需求
下一步做什么
致谢
第一部分 Linux 命令行
第 1 章 初识Linux shell
1.1 什么是Linux
1.1.1 深入探究Linux内核
1.1.2 GNU工具
1.1.3 Linux桌面环境
1.2 Linux发行版
1.2.1 核心Linux发行版
1.2.2 特定用途的Linux发行版
1.2.3 Linux LiveCD
1.3 小结
第 2 章 走进shell
2.1 进入命令行
2.1.1 控制台终端
2.1.2 图形化终端
2.2 通过Linux控制台终端访问CLI2.3 通过图形化终端仿真访问CLI
2.4 使用GNOME Terminal仿真器
2.4.1 访问GNOME Terminal
2.4.2 菜单栏
2.5 使用Konsole Terminal仿真器
2.5.1 访问Konsole Terminal
2.5.2 菜单栏
2.6 使用xterm终端仿真器
2.6.1 访问xterm
2.6.2 命令行参数
2.7 小结
第 3 章 基本的bash shell命令
3.1 启动shell
3.2 shell提示符
3.3 bash手册
3.4 浏览文件系统
3.4.1 Linux文件系统
3.4.2 遍历目录
3.5 文件和目录列表
3.5.1 基本列表功能
3.5.2 显示长列表
3.5.3 过滤输出列表
3.6 处理文件
3.6.1 创建文件
3.6.2 复制文件3.6.3 制表键自动补全
3.6.4 链接文件
3.6.5 重命名文件
3.6.6 删除文件
3.7 处理目录
3.7.1 创建目录
3.7.2 删除目录
3.8 查看文件内容
3.8.1 查看文件类型
3.8.2 查看整个文件
3.8.3 查看部分文件
3.9 小结
第 4 章 更多的bash shell命令
4.1 监测程序
4.1.1 探查进程
4.1.2 实时监测进程
4.1.3 结束进程
4.2 监测磁盘空间
4.2.1 挂载存储媒体
4.2.2 使用df命令
4.2.3 使用du命令
4.3 处理数据文件
4.3.1 排序数据
4.3.2 搜索数据
4.3.3 压缩数据4.3.4 归档数据
4.4 小结
第 5 章 理解shell
5.1 shell的类型
5.2 shell的父子关系
5.2.1 进程列表
5.2.2 别出心裁的子shell用法
5.3 理解shell的内建命令
5.3.1 外部命令
5.3.2 内建命令
5.4 小结
第 6 章 使用Linux环境变量
6.1 什么是环境变量
6.1.1 全局环境变量
6.1.2 局部环境变量
6.2 设置用户定义变量
6.2.1 设置局部用户定义变量
6.2.2 设置全局环境变量
6.3 删除环境变量
6.4 默认的shell环境变量
6.5 设置PATH环境变量
6.6 定位系统环境变量
6.6.1 登录shell
6.6.2 交互式shell进程
6.6.3 非交互式shell6.6.4 环境变量持久化
6.7 数组变量
6.8 小结
第 7 章 理解Linux文件权限
7.1 Linux的安全性
7.1.1 etcpasswd文件
7.1.2 etcshadow文件
7.1.3 添加新用户
7.1.4 删除用户
7.1.5 修改用户
7.2 使用Linux组
7.2.1 etcgroup文件
7.2.2 创建新组
7.2.3 修改组
7.3 理解文件权限
7.3.1 使用文件权限符
7.3.2 默认文件权限
7.4 改变安全性设置
7.4.1 改变权限
7.4.2 改变所属关系
7.5 共享文件
7.6 小结
第 8 章 管理文件系统
8.1 探索Linux文件系统
8.1.1 基本的Linux文件系统8.1.2 日志文件系统
8.1.3 写时复制文件系统
8.2 操作文件系统
8.2.1 创建分区
8.2.2 创建文件系统
8.2.3 文件系统的检查与修复
8.3 逻辑卷管理
8.3.1 逻辑卷管理布局
8.3.2 Linux中的LVM
8.3.3 使用Linux LVM
8.4 小结
第 9 章 安装软件程序
9.1 包管理基础
9.2 基于Debian的系统
9.2.1 用aptitude管理软件包
9.2.2 用aptitude安装软件包
9.2.3 用aptitude更新软件
9.2.4 用aptitude卸载软件
9.2.5 aptitude仓库
9.3 基于Red Hat的系统
9.3.1 列出已安装包
9.3.2 用yum安装软件
9.3.3 用yum更新软件
9.3.4 用yum卸载软件
9.3.5 处理损坏的包依赖关系9.3.6 yum软件仓库
9.4 从源码安装
9.5 小结
第 10 章 使用编辑器
10.1 vim编辑器
10.1.1 检查vim软件包
10.1.2 vim基础
10.1.3 编辑数据
10.1.4 复制和粘贴
10.1.5 查找和替换
10.2 nano编辑器
10.3 emacs编辑器
10.3.1 检查emacs软件包
10.3.2 在控制台中使用emacs
10.3.3 在GUI环境中使用emacs
10.4 KDE系编辑器
10.4.1 KWrite编辑器
10.4.2 Kate编辑器
10.5 GNOME编辑器
10.5.1 启动gedit
10.5.2 基本的gedit功能
10.5.3 设定偏好设置
10.6 小结
第二部分 shell 脚本编程基础
第 11 章 构建基本脚本11.1 使用多个命令
11.2 创建shell脚本文件
11.3 显示消息
11.4 使用变量
11.4.1 环境变量
11.4.2 用户变量
11.4.3 命令替换
11.5 重定向输入和输出
11.5.1 输出重定向
11.5.2 输入重定向
11.6 管道
11.7 执行数学运算
11.7.1 expr命令
11.7.2 使用方括号
11.7.3 浮点解决方案
11.8 退出脚本
11.8.1 查看退出状态码
11.8.2 exit命令
11.9 小结
第 12 章 使用结构化命令
12.1 使用if-then语句
12.2 if-then-else语句
12.3 嵌套if
12.4 test命令
12.4.1 数值比较12.4.2 字符串比较
12.4.3 文件比较
12.5 复合条件测试
12.6 if-then的高级特性
12.6.1 使用双括号
12.6.2 使用双方括号
12.7 case命令
12.8 小结
第 13 章 更多的结构化命令
13.1 for命令
13.1.1 读取列表中的值
13.1.2 读取列表中的复杂值
13.1.3 从变量读取列表
13.1.4 从命令读取值
13.1.5 更改字段分隔符
13.1.6 用通配符读取目录
13.2 C语言风格的for命令
13.2.1 C语言的for命令
13.2.2 使用多个变量
13.3 while命令
13.3.1 while的基本格式
13.3.2 使用多个测试命令
13.4 until命令
13.5 嵌套循环
13.6 循环处理文件数据13.7 控制循环
13.7.1 break命令
13.7.2 continue命令
13.8 处理循环的输出
13.9 实例
13.9.1 查找可执行文件
13.9.2 创建多个用户账户
13.10 小结
第 14 章 处理用户输入
14.1 命令行参数
14.1.1 读取参数
14.1.2 读取脚本名
14.1.3 测试参数
14.2 特殊参数变量
14.2.1 参数统计
14.2.2 抓取所有的数据
14.3 移动变量
14.4 处理选项
14.4.1 查找选项
14.4.2 使用getopt命令
14.4.3 使用更高级的getopts
14.5 将选项标准化
14.6 获得用户输入
14.6.1 基本的读取
14.6.2 超时14.6.3 隐藏方式读取
14.6.4 从文件中读取
14.7 小结
第 15 章 呈现数据
15.1 理解输入和输出
15.1.1 标准文件描述符
15.1.2 重定向错误
15.2 在脚本中重定向输出
15.2.1 临时重定向
15.2.2 永久重定向
15.3 在脚本中重定向输入
15.4 创建自己的重定向
15.4.1 创建输出文件描述符
15.4.2 重定向文件描述符
15.4.3 创建输入文件描述符
15.4.4 创建读写文件描述符
15.4.5 关闭文件描述符
15.5 列出打开的文件描述符
15.6 阻止命令输出
15.7 创建临时文件
15.7.1 创建本地临时文件
15.7.2 在tmp目录创建临时文件
15.7.3 创建临时目录
15.8 记录消息
15.9 实例15.10 小结
第 16 章 控制脚本
16.1 处理信号
16.1.1 重温Linux信号
16.1.2 生成信号
16.1.3 捕获信号
16.1.4 捕获脚本退出
16.1.5 修改或移除捕获
16.2 以后台模式运行脚本
16.2.1 后台运行脚本
16.2.2 运行多个后台作业
16.3 在非控制台下运行脚本
16.4 作业控制
16.4.1 查看作业
16.4.2 重启停止的作业
16.5 调整谦让度
16.5.1 nice命令
16.5.2 renice命令
16.6 定时运行作业
16.6.1 用at命令来计划执行作业
16.6.2 安排需要定期执行的脚本
16.6.3 使用新shell启动脚本
16.7 小结
第三部分 高级 shell 脚本编程
第 17 章 创建函数17.1 基本的脚本函数
17.1.1 创建函数
17.1.2 使用函数
17.2 返回值
17.2.1 默认退出状态码
17.2.2 使用return命令
17.2.3 使用函数输出
17.3 在函数中使用变量
17.3.1 向函数传递参数
17.3.2 在函数中处理变量
17.4 数组变量和函数
17.4.1 向函数传数组参数
17.4.2 从函数返回数组
17.5 函数递归
17.6 创建库
17.7 在命令行上使用函数
17.7.1 在命令行上创建函数
17.7.2 在.bashrc文件中定义函数
17.8 实例
17.8.1 下载及安装
17.8.2 构建库
17.8.3 shtool库函数
17.8.4 使用库
17.9 小结
第 18 章 图形化桌面环境中的脚本编程18.1 创建文本菜单
18.1.1 创建菜单布局
18.1.2 创建菜单函数
18.1.3 添加菜单逻辑
18.1.4 整合shell脚本菜单
18.1.5 使用select命令
18.2 制作窗口
18.2.1 dialog包
18.2.2 dialog选项
18.2.3 在脚本中使用dialog命令
18.3 使用图形
18.3.1 KDE环境
18.3.2 GNOME环境
18.4 小结
第 19 章 初识sed和gawk
19.1 文本处理
19.1.1 sed编辑器
19.1.2 gawk程序
19.2 sed编辑器基础
19.2.1 更多的替换选项
19.2.2 使用地址
19.2.3 删除行
19.2.4 插入和附加文本
19.2.5 修改行
19.2.6 转换命令19.2.7 回顾打印
19.2.8 使用sed处理文件
19.3 小结
第 20 章 正则表达式
20.1 什么是正则表达式
20.1.1 定义
20.1.2 正则表达式的类型
20.2 定义BRE模式
20.2.1 纯文本
20.2.2 特殊字符
20.2.3 锚字符
20.2.4 点号字符
20.2.5 字符组
20.2.6 排除型字符组
20.2.7 区间
20.2.8 特殊的字符组
20.2.9 星号
20.3 扩展正则表达式
20.3.1 问号
20.3.2 加号
20.3.3 使用花括号
20.3.4 管道符号
20.3.5 表达式分组
20.4 正则表达式实战
20.4.1 目录文件计数20.4.2 验证电话号码
20.4.3 解析邮件地址
20.5 小结
第 21 章 sed进阶
21.1 多行命令
21.1.1 next命令
21.1.2 多行删除命令
21.1.3 多行打印命令
21.2 保持空间
21.3 排除命令
21.4 改变流
21.4.1 分支
21.4.2 测试
21.5 模式替代
21.5.1 符号
21.5.2 替代单独的单词
21.6 在脚本中使用sed
21.6.1 使用包装脚本
21.6.2 重定向sed的输出
21.7 创建sed实用工具
21.7.1 加倍行间距
21.7.2 对可能含有空白行的文件加倍
行间距
21.7.3 给文件中的行编号
21.7.4 打印末尾行21.7.5 删除行
21.7.6 删除HTML标签
21.8 小结
第 22 章 gawk进阶
22.1 使用变量
22.1.1 内建变量
22.1.2 自定义变量
22.2 处理数组
22.2.1 定义数组变量
22.2.2 遍历数组变量
22.2.3 删除数组变量
22.3 使用模式
22.3.1 正则表达式
22.3.2 匹配操作符
22.3.3 数学表达式
22.4 结构化命令
22.4.1 if语句
22.4.2 while语句
22.4.3 do-while语句
22.4.4 for语句
22.5 格式化打印
22.6 内建函数
22.6.1 数学函数
22.6.2 字符串函数
22.6.3 时间函数22.7 自定义函数
22.7.1 定义函数
22.7.2 使用自定义函数
22.7.3 创建函数库
22.8 实例
22.9 小结
第 23 章 使用其他shell
23.1 什么是dash shell
23.2 dash shell的特性
23.2.1 dash命令行参数
23.2.2 dash环境变量
23.2.3 dash内建命令
23.3 dash脚本编程
23.3.1 创建dash脚本
23.3.2 不能使用的功能
23.4 zsh shell
23.5 zsh shell的组成
23.5.1 shell选项
23.5.2 内建命令
23.6 zsh脚本编程
23.6.1 数学运算
23.6.2 结构化命令
23.6.3 函数
23.7 小结
第四部分 创建实用的脚本第 24 章 编写简单的脚本实用工具
24.1 归档
归档数据文件
24.2 管理用户账户
24.2.1 需要的功能
24.2.2 创建脚本
24.2.3 运行脚本
24.3 监测磁盘空间
24.3.1 需要的功能
24.3.2 创建脚本
24.3.3 运行脚本
24.4 小结
第 25 章 创建与数据库、Web及电子邮件相关的
脚本
25.1 MySQL数据库
25.1.1 使用MySQL
25.1.2 在脚本中使用数据库
25.2 使用Web
25.2.1 安装Lynx
25.2.2 lynx命令行
25.2.3 Lynx配置文件
25.2.4 从Lynx中获取数据
25.3 使用电子邮件
25.4 小结
第 26 章 一些小有意思的脚本26.1 发送消息
26.1.1 功能分析
26.1.2 创建脚本
26.2 获取格言
26.2.1 功能分析
26.2.2 创建脚本
26.3 编造借口
26.3.1 功能分析
26.3.2 创建脚本
26.4 小结
附录 A bash命令快速指南
A.1 内建命令
A.2 常见的bash命令
A.3 环境变量
附录 B sed和gawk快速指南
B.1 sed编辑器
B.1.1 启动sed编辑器
B.1.2 sed命令
B.2 gawk程序
B.2.1 gawk命令格式
B.2.2 使用gawk
B.2.3 gawk变量
B.2.4 gawk程序的特性
引言
欢迎阅读《Linux命令行与shell脚本编程大全(第
3版)》。和所有“大全”系列图书一样,本书涵
盖了详尽的动手教程和实践信息,还提供了与所
学内容相关的参考信息和背景资料。本书是关于
Linux命令行和shell命令的相当全面的资源。读完
之后,你将可以轻松写出自己的shell脚本来实现
Linux系统任务自动化处理。读者对象
如果你是Linux环境下的系统管理员,那么学会编
写shell脚本将让你受益匪浅。本书并未细述安装
Linux系统的每个步骤,但只要系统已安装好
Linux并能运行起来,你就可以开始考虑如何让一
些日常的系统管理任务实现自动化。这时shell脚
本编程就能发挥作用了,这也正是本书的作用所
在。本书将演示如何使用shell脚本来自动处理系
统管理任务,包括从监测系统统计数据和数据文
件到为你的老板生成报表。
如果你是家用Linux爱好者,同样能从本书中获
益。现今,用户很容易在诸多部件堆积而成的图
形环境中迷失。大多数桌面Linux发行版都尽量向
一般用户隐藏系统的内部细节。但有时你确实需
要知道内部发生了什么。本书将告诉你如何启动
Linux命令行以及接下来要做什么。通常,如果是
执行一些简单任务(比如文件管理),在命令行
下操作要比在华丽的图形界面下方便得多。在命
令行下有大量的命令可供使用,本书将会展示如
何使用它们。本书结构
本书将会引领你从认识Linux命令行基础开始,一
直到写出自己的shell脚本。全书分成四大部分,每部分都基于前面的内容。
第一部分假定你已经有个能运行的Linux系统,或
者正在设法获取Linux系统。第1章“初识Linux
shell”,描述了构成整个Linux系统的各个部分,并且说明了shell是如何融入Linux的。在介绍了
Linux系统的基础知识之后,接着继续探讨以下内
容:
使用终端仿真包来访问shell(第2章);
介绍基本的shell命令(第3章);
使用更高级的shell命令来窥探系统信息(第
4章);
理解shell的用途(第5章);
使用shell变量来操作数据(第6章);
理解Linux文件系统和安全(第7章);在命令行上使用Linux文件系统(第8章);
在命令行上安装和更新软件(第9章);
使用Linux编辑器编写shell脚本(第10章)。
第二部分将从编写shell脚本开始,具体内容如
下:
学习如何创建和运行shell脚本(第11章);
改变shell脚本中程序的流程(第12章);
迭代代码片段(第13章);
在脚本中处理用户输入的数据(第14章);
了解在脚本中存储和显示数据的不同方法
(第15章);
控制脚本在系统中运行的方式和时机(第16
章)。
第三部分深入探讨了shell脚本编程的更高级话
题,其中包括:
在脚本中创建自己的函数(第17章);
利用Linux图形化桌面来和脚本用户交互(第
18章);
使用高级Linux命令过滤和解析数据文件(第
19章);
使用正则表达式来定义数据(第20章);
学习在脚本中操作数据的高级方法(第21
章);
从原始数据生成报表(第22章);
修改shell脚本,使其能在其他Linux shell中运
行(第23章)。
本书的第四部分演示了如何在现实环境中使用
shell脚本。在这部分,你将:
学习如何将各种脚本特性融入自己的脚本中
(第24章);
学习如何使用数据库保存、检索数据,如何
访问互联网上的数据以及发送电子邮件(第25章);
编写与Linux系统交互的高级脚本(第26
章)。警告、窍门与说明
为帮助读者更好地理解本书内容,全书进行了很
多不同的组织和排版上的处理。
警告 这部分信息很重要,所以放在单独的
段落里,并采用了特殊的排版。“警告”部分
介绍了要特别注意的信息,不管是不便之
处,还是对数据和系统潜在的危害,都囊括
在内。
窍门 这部分提供了有益的建议,能够简化
你的操作,提升工作效率。“窍门”部分也会
提出可行的问题解决方案或某项任务更好的
处理方法。
说明 这部分提供了有用的补充或辅助信
息,不过有些偏离当前讲述的主题。代码下载
可以从http:www.wiley.comgolinuxcommandline
下载本书的代码文件。最低需求
本书并不局限于某种特定的Linux发行版,你可以
使用任何可用的Linux系统来跟着书中的进度学
习。书中大部分内容都采用了bash shell,这是多
数Linux系统的默认shell。下一步做什么
读完本书之后,你就已经可以在日常工作中得心
应手地运用Linux命令了。在不断变化的Linux世
界,我们最好能不断了解Linux的最新发展。
Linux发行版会有变动,增加新的功能,移除过时
的功能。经常关注Linux方面的资讯,不断更新你
的Linux知识体系。找一个不错的Linux论坛,关
注一下Linux世界的最新动态。有很多流行的
Linux新闻站点都能提供有关Linux新进展的及时
资讯,比如Slashdot和Distrowatch。
致谢
首先,所有的荣誉和赞美都献给上帝。是他通过
他的儿子耶稣,让这一切成为可能,并赐予我们
永生。
非常感谢John Wiley Sons出版团队的诸位为本
书作出的突出贡献。感谢前组稿编辑Mary James
为我们提供写作本书的机会。感谢策划编辑Brian
Herrmann保证本书的写作顺利进行,并将内容更
好地呈现给读者。感谢Marty的努力和勤勉。本书
的技术编辑Kevin E. Ryan为保证本书的内容正确
作出了卓越贡献,并对本书内容提出了若干改进
建议。感谢本书的文字编辑Gwenette Gaddis,她
的耐心和努力使得本书的可读性更强。还要感谢
Waterside Productions公司的Carole McClendon为
我们安排本书的写作事务,并在写作道路上给予
了我们很大的帮助。
在此,Christine还想感谢她的先生Timothy,感谢
他的鼓励、耐心和倾听,即使他并不理解她说的
是什么,也能全心支持她。
第一部分 Linux 命令行
本部分内容
第 1 章 初识 Linux shell
第 2 章 走进 shell
第 3 章 基本的 bash shell 命令
第 4 章 更多的 bash shell 命令
第 5 章 理解 shell
第 6 章 使用 Linux 环境变量
第 7 章 理解 Linux 文件权限
第 8 章 管理文件系统
第 9 章 安装软件程序
第 10 章 使用编辑器
第 1 章 初识Linux shell
本章内容
什么是Linux
Linux内核的组成
探索Linux桌面
了解Linux发行版
在深入研究如何使用Linux命令行和shell之前,最
好先了解一下什么是Linux、它的历史及运作方
式。本章将带你逐步了解什么是Linux,并介绍命
令行和shell在Linux整体架构中的位置。1.1 什么是Linux
如果你以前从未接触过Linux,可能就不清楚为什
么会有这么多不同的Linux发行版。在查看Linux
软件包时,你肯定被发行版、LiveCD和GNU之类
的术语搞晕过。初次进入Linux世界会让人觉得不
那么得心应手。在开始学习命令和脚本之前,本
章将为你稍稍揭开Linux系统的神秘面纱。
首先,Linux可划分为以下四部分:
Linux内核
GNU工具
图形化桌面环境
应用软件
每一部分在Linux系统中各司其职。但就单个部分
而言,其作用并不大。图1-1是一个基本结构框
图,展示了各部分是如何协作起来构成整个Linux
系统的。
本节将详细介绍这四部分,然后概述它们如何通过协作构成一个完整的Linux系统。
图 1-1 Linux系统
1.1.1 深入探究Linux内核
Linux系统的核心是内核 。内核控制着计算机系统上的所有硬件和软件,在必要时分配硬件,并
根据需要执行软件。
如果你一直都在关注Linux世界,肯定听说过Linus
Torvalds。Linus还在赫尔辛基大学上学时就开发
了第一版Linux内核。起初他只是想仿造一款Unix
系统而已,因为当时Unix操作系统在很多大学都
很流行。
Linus完成了开发工作后,将Linux内核发布到了互
联网社区,并征求改进意见。这个简单的举动引
发了计算机操作系统领域内的一场革命。很快,Linus就收到了来自世界各地的学生和专业程序员
的各种建议。
如果谁都可以修改内核程序代码,那么随之而来
的将是彻底的混乱。为了简单起见,Linus担当起
了所有改进建议的把关员。能否将建议代码并入
内核完全取决于Linus。时至今日,这种概念依然
在Linux内核代码开发过程中沿用,不同的是,现
在是由一组开发人员来做这件事,而不再是Linus
一个人。
内核主要负责以下四种功能:
系统内存管理
软件程序管理
硬件设备管理
文件系统管理
后面几节将会进一步探究以上每一种功能。
1. 系统内存管理
操作系统内核的主要功能之一就是内存管理。内
核不仅管理服务器上的可用物理内存,还可以创
建和管理虚拟内存(即实际并不存在的内存)。
内核通过硬盘上的存储空间来实现虚拟内存,这
块区域称为交换空间 (swap space)。内核不断
地在交换空间和实际的物理内存之间反复交换虚
拟内存中的内容。这使得系统以为它拥有比物理
内存更多的可用内存(如图1-2所示)。图 1-2 Linux系统内存映射
内存存储单元按组划分成很多块,这些块称作页
面 (page)。内核将每个内存页面放在物理内存
或交换空间。然后,内核会维护一个内存页面
表,指明哪些页面位于物理内存内,哪些页面被
换到了磁盘上。内核会记录哪些内存页面正在使用中,并自动把
一段时间未访问的内存页面复制到交换空间区域
(称为换出 ,swapping out)——即使还有可用
内存。当程序要访问一个已被换出的内存页面
时,内核必须从物理内存换出另外一个内存页面
给它让出空间,然后从交换空间换入请求的内存
页面。显然,这个过程要花费时间,拖慢运行中
的进程。只要Linux系统在运行,为运行中的程序
换出内存页面的过程就不会停歇。
2. 软件程序管理
Linux操作系统将运行中的程序称为进程 。进程
可以在前台运行,将输出显示在屏幕上,也可以
在后台运行,隐藏到幕后。内核控制着Linux系统
如何管理运行在系统上的所有进程。
内核创建了第一个进程(称为init进程 )来启动
系统上所有其他进程。当内核启动时,它会将init
进程加载到虚拟内存中。内核在启动任何其他进
程时,都会在虚拟内存中给新进程分配一块专有
区域来存储该进程用到的数据和代码。
一些Linux发行版使用一个表来管理在系统开机时
要自动启动的进程。在Linux系统上,这个表通常
位于专门文件etcinittab中。另外一些系统(比如现在流行的Ubuntu Linux发行
版)则采用etcinit.d目录,将开机时启动或停止
某个应用的脚本放在这个目录下。这些脚本通
过etcrcX.d目录下的入口(entry)1 启动,这里
的X代表运行级 (run level)。
1 这些入口实际上是到etcini t.d目录中启动脚本的符号链
接。——译者注(后文若无特殊说明,脚注均为“译者
注”。)
Linux操作系统的init系统采用了运行级。运行级
决定了init进程运行etcinittab文件或etcrcX.d目
录中定义好的某些特定类型的进程。Linux操作系
统有5个启动运行级。
运行级为1时,只启动基本的系统进程以及一个
控制台终端进程。我们称之为单用户 模式。单
用户模式通常用来在系统有问题时进行紧急的文
件系统维护。显然,在这种模式下,仅有一个人
(通常是系统管理员)能登录到系统上操作数
据。
标准的启动运行级是3。在这个运行级上,大多
数应用软件,比如网络支持程序,都会启动。另
一个Linux中常见的运行级是5。在这个运行级上
系统会启动图形化的X Window系统,允许用户通过图形化桌面窗口登录系统。
Linux系统可以通过调整启动运行级来控制整个系
统的功能。通过将运行级从3调整成5,系统就可
以从基于控制台的系统变成更先进的图形化X
Window系统。
在第4章,你将会学习如何使用ps 命令查看当前
运行在Linux系统上的进程。
3. 硬件设备管理
内核的另一职责是管理硬件设备。任何Linux系统
需要与之通信的设备,都需要在内核代码中加入
其驱动程序代码。驱动程序代码相当于应用程序
和硬件设备的中间人,允许内核与设备之间交换
数据。在Linux内核中有两种方法用于插入设备驱
动代码:
编译进内核的设备驱动代码
可插入内核的设备驱动模块
以前,插入设备驱动代码的唯一途径是重新编译
内核。每次给系统添加新设备,都要重新编译一
遍内核代码。随着Linux内核支持的硬件设备越来越多,这个过程变得越来越低效。不过好在Linux
开发人员设计出了一种更好的将驱动代码插入运
行中的内核的方法。
开发人员提出了内核模块的概念。它允许将驱动
代码插入到运行中的内核而无需重新编译内核。
同时,当设备不再使用时也可将内核模块从内核
中移走。这种方式极大地简化和扩展了硬件设备
在Linux上的使用。
Linux系统将硬件设备当成特殊的文件,称为设备
文件 。设备文件有3种分类:
字符型设备文件
块设备文件
网络设备文件
字符型设备文件是指处理数据时每次只能处理一
个字符的设备。大多数类型的调制解调器和终端
都是作为字符型设备文件创建的。块设备文件是
指处理数据时每次能处理大块数据的设备,比如
硬盘。
网络设备文件是指采用数据包发送和接收数据的设备,包括各种网卡和一个特殊的回环设备。这
个回环设备允许Linux系统使用常见的网络编程协
议同自身通信。
Linux为系统上的每个设备都创建一种称为节点
的特殊文件。与设备的所有通信都通过设备节点
完成。每个节点都有唯一的数值对供Linux内核标
识它。数值对包括一个主设备号和一个次设备
号。类似的设备被划分到同样的主设备号下。次
设备号用于标识主设备组下的某个特定设备。
4. 文件系统管理
不同于其他一些操作系统,Linux内核支持通过不
同类型的文件系统从硬盘中读写数据。除了自有
的诸多文件系统外,Linux还支持从其他操作系统
(比如Microsoft Windows)采用的文件系统中读
写数据。内核必须在编译时就加入对所有可能用
到的文件系统的支持。表1-1列出了Linux系统用
来读写数据的标准文件系统。
表 1-1 Linux文件系统
文件系
统
描述
ext
Linux扩展文件系统,最早的Linux文件系统
ext2
第二扩展文件系统,在ext的基础上提供了更多的功
能
ext3
第三扩展文件系统,支持日志功能
ext4
第四扩展文件系统,支持高级日志功能
hpfs
OS2高性能文件系统
jfs
IBM日志文件系统
iso9660
ISO 9660文件系统(CD-ROM)
minix
MINIX文件系统
msdos
微软的FAT16
ncp
Netware文件系统
nfs
网络文件系统
ntfs
支持Microsoft NT文件系统
proc
访问系统信息
ReiserFS
高级Linux文件系统,能提供更好的性能和硬盘恢复
功能
smb
支持网络访问的Samba SMB文件系统
sysv
较早期的Unix文件系统
ufs
BSD文件系统
umsdos
建立在msdos上的类Unix文件系统
vfat
Windows 95文件系统(FAT32)
XFS
高性能64位日志文件系统
Linux服务器所访问的所有硬盘都必须格式化成表
1-1所列文件系统类型中的一种。
Linux内核采用虚拟文件系统(Virtual FileSystem,VFS)作为和每个文件系统交互的接
口。这为Linux内核同任何类型文件系统通信提供
了一个标准接口。当每个文件系统都被挂载和使
用时,VFS将信息都缓存在内存中。
1.1.2 GNU工具
除了由内核控制硬件设备外,操作系统还需要工
具来执行一些标准功能,比如控制文件和程序。
Linus在创建Linux系统内核时,并没有可用的系统
工具。然而他很幸运,就在开发Linux内核的同
时,有一群人正在互联网上共同努力,模仿Unix
操作系统开发一系列标准的计算机系统工具。
GNU组织(GNU是GNU's Not Unix的缩写)开发
了一套完整的Unix工具,但没有可以运行它们的
内核系统。这些工具是在名为开源软件(open
source software,OSS)的软件理念下开发的。
开源软件理念允许程序员开发软件,并将其免费
发布。任何人都可以使用、修改该软件,或将该
软件集成进自己的系统,无需支付任何授权费
用。将Linus的Linux内核和GNU操作系统工具整
合起来,就产生了一款完整的、功能丰富的免费
操作系统。尽管通常将Linux内核和GNU工具的结合体称为
Linux,但你也会在互联网上看到一些Linux纯粹
主义者将其称为GNULinux系统,藉此向GNU组
织所作的贡献致意。
1. 核心GNU工具
GNU项目的主旨在于为Unix系统管理员设计出一
套类似于Unix的环境。这个目标促使该项目移植
了很多常见的Unix系统命令行工具。供Linux系统
使用的这组核心工具被称为coreutils(core
utilities)软件包。
GNU coreutils软件包由三部分构成:
用以处理文件的工具
用以操作文本的工具
用以管理进程的工具
这三组主要工具中的每一组都包含一些对Linux系
统管理员和程序员至关重要的工具。本书将详细
介绍GNU coreutils软件包中包含的所有工具。
2. shellGNULinux shell是一种特殊的交互式工具。它为
用户提供了启动程序、管理文件系统中的文件以
及运行在Linux系统上的进程的途径。shell的核心
是命令行提示符。命令行提示符是shell负责交互
的部分。它允许你输入文本命令,然后解释命
令,并在内核中执行。
shell包含了一组内部命令,用这些命令可以完成
诸如复制文件、移动文件、重命名文件、显示和
终止系统中正运行的程序等操作。shell也允许你
在命令行提示符中输入程序的名称,它会将程序
名传递给内核以启动它。
你也可以将多个shell命令放入文件中作为程序执
行。这些文件被称作shell脚本 。你在命令行上执
行的任何命令都可放进一个shell脚本中作为一组
命令执行。这为创建那种需要把几个命令放在一
起来工作的工具提供了便利。
在Linux系统上,通常有好几种Linux shell可用。
不同的shell有不同的特性,有些更利于创建脚
本,有些则更利于管理进程。所有Linux发行版默
认的shell都是bash shell。bash shell由GNU项目开
发,被当作标准Unix shell——Bourne shell(以创
建者的名字命名)的替代品。bash shell的名称就
是针对Bourne shell的拼写所玩的一个文字游戏,称为Bourne again shell。
除了bash shell,本书还将介绍其他几种常见的
shell。表1-2列出了Linux中常见的几种不同shell。
表 1-2 Linux shell
shell
描述
ash
一种运行在内存受限环境中简单的轻量级shel l,但与bash
shel l完全兼容
korn
一种与Bourne shel l兼容的编程shel l,但支持如关联数组和
浮点运算等一些高级的编程特性
tcsh
一种将C语言中的一些元素引入到shel l脚本中的shel l
zsh
一种结合了bash、tcsh和korn的特性,同时提供高级编程
特性、共享历史文件和主题化提示符的高级shel l
大多数Linux发行版包含多个shell,但它们通常会
采用其中一个作为默认shell。如果你的Linux发行
版包含多个shell,就请尽情尝试不同的shell,看
看哪个能满足你的需要。1.1.3 Linux桌面环境
在Linux的早期(20世纪90年代初期),能用的只
有一个简单的Linux操作系统文本界面。这个文本
界面允许系统管理员运行程序,控制程序的执
行,以及在系统中移动文件。
随着Microsoft Windows的普及,电脑用户已经不
再满足于对着老式的文本界面工作了。这推动了
OSS社区的更多开发活动,Linux图形化桌面环境
应运而生。
完成工作的方式不止一种,Linux一直以来都以此
而闻名。在图形化桌面上更是如此。Linux有各种
图形化桌面可供选择。后面几节将会介绍其中一
些比较流行的桌面。
1. X Window系统
有两个基本要素决定了视频环境:显卡和显示
器。要在电脑上显示绚丽的画面,Linux软件就得
知道如何与这两者互通。X Window软件是图形显
示的核心部分。
X Window软件是直接和PC上的显卡及显示器打
交道的底层程序。它控制着Linux程序如何在电脑上显示出漂亮的窗口和图形。
Linux并非唯一使用X Window的操作系统,它有
针对不同操作系统的版本。在Linux世界里,能够
实现X Window的软件包可不止一种。
其中最流行的软件包是X.org。它提供了X
Window系统的开源实现,支持当前市面上的很多
新显卡。
另外两个X Window软件包也日渐流行。Fedora
Linux发行版采用了试验性的Wayland软件;Ubuntu
Linux发行版开发出了Mir显示服务器,用于其桌
面环境。
在首次安装Linux发行版时,它会检测显卡和显示
器,然后创建一个含有必要信息的X Window配置
文件。在安装过程中,你可能会注意到安装程序
会检测一次显示器,以此来确定所支持的视频模
式。有时这会造成显示器黑屏几秒。由于现在有
多种不同类型的显卡和显示器,这个过程可能会
需要一段时间来完成。
核心的X Window软件可以产生图形化显示环境,但仅此而已。虽然对于运行独立应用这已经足
够,但在日常PC使用中却并不是那么有用。它没有桌面环境供用户操作文件或是开启程序。为
此,你需要一个建立在X Window系统软件之上的
桌面环境。
2. KDE桌面
KDE(K Desktop Environment,K桌面环境)最初
于1996年作为开源项目发布。它会生成一个类似
于Microsoft Windows的图形化桌面环境。如果你
是Windows用户,KDE就集成了所有你熟悉的功
能。图1-3展示了运行在openSuSE Linux发行版上
的KDE 4桌面。图 1-3 openSuSE Linux系统上的KDE 4桌面
KDE桌面允许你把应用程序图标和文件图标放置
在桌面的特定位置上。单击应用程序图标,Linux
系统就会运行该应用程序。单击文件图标,KDE
桌面就会确定使用哪种应用程序来处理该文件。
桌面底部的横条称为面板,由以下四部分构成。
KDE菜单 :和Windows的开始菜单非常类
似,KDE菜单包含了启动已安装程序的链
接。
程序快捷方式 :在面板上有直接从面板启
动程序的快速链接。
任务栏 :任务栏显示着当前桌面正运行的
程序的图标。
小应用程序 :面板上还有一些特殊小应用
程序的图标,这些图标常常会根据小应用程
序的状态发生变化。
所有的面板功能都和你在Windows上看到的类
似。除了桌面功能,KDE项目还开发了大量的可
运行在KDE环境中的应用程序。3. GNOME桌面
GNOME(the GNU Network Object Model
Environment,GNU网络对象模型环境)是另一个
流行的Linux桌面环境。GNOME于1999年首次发
布,现已成为许多Linux发行版默认的桌面环境
(不过用得最多的是Red Hat Linux)。
尽管GNOME决定不再沿用Microsoft Windows的
标准观感(look-and-feel),但它还是集成了许多
Windows用户习惯的功能:
一块放置图标的桌面区域
两个面板区域
拖放功能
图1-4展示了CentOS Linux发行版采用的标准
GNOME桌面。图 1-4 CentOS Linux系统上的GNOME桌面
GNOME开发人员不甘示弱于KDE,也开发了一
批集成进GNOME桌面的图形化程序。
4. Unity桌面
如果你用的是Ubuntu Linux发行版,你会注意到它
与KDE和GNOME桌面环境有些不一样。准确来
说,这是因为负责开发Ubuntu的公司决定采用自
己的一套叫作Unity的Linux桌面环境。
Unity桌面得名于该项目的目标——为工作站、平
板电脑以及移动设备提供一致的桌面体验。不管
你是在工作站还是在手机上使用Ubuntu,Unity桌
面的使用方式都是一样的。图1-5展示了Ubuntu
14.04 L TS中的Unity桌面。图 1-5 Ubuntu Linux系统上的Unity桌面
5. 其他桌面图形化桌面环境的弊端在于它们要占用相当一部
分的系统资源来保证正常运行。在Linux发展之
初,Linux的标志和卖点之一就是它可以运行在处
理能力较弱的老旧PC上,这些PC无力运行较新
的微软桌面。然而随着KDE和GNOME桌面环境
的普及,情况发生了变化。运行KDE或GNOME
桌面要占用的内存资源和微软的最新桌面环境旗
鼓相当。
如果你的PC已经有些年代了,也不要泄气。
Linux开发人员已经联手让Linux返璞归真。他们
开发了一些低内存开销的图形化桌面应用,提供
了能够在老旧PC上完美运行的基本功能。尽管这
些图形化桌面环境并没有大量专为其设计的应
用,但它们仍然能运行许多基本的图形化程序,支持如文字处理、电子表格、数据库、绘图以及
多媒体等功能。
表1-3列出了一些可在配置较低的PC和笔记本电
脑上运行的轻量级Linux图形化桌面环境。
表 1-3 其他Linux图形化桌面
桌面
描述
Fluxbox 一个没有面板的轻型桌面,仅有一个可用来启动程序
的弹出式菜单
Xfce
和KDE很像的一个桌面,但少了很多图像以适应低内
存环境
JWM
Joe的窗口管理器(Joe's Window Manager),非常适用
于低内存低硬盘空间环境的超轻型桌面
Fvwm
支持如虚拟桌面和面板等高级桌面功能,但能够在低
内存环境中运行
fvwm95
从fvwm衍生而来,但看起来更像是Windows 95桌面
这些图形化桌面环境并不如KDE或GNOME桌面
一样绚丽,但却提供了恰到好处的基本图形化功
能。图1-6展示了Puppy Linux antiX发行版所采用
的JWM桌面的外观。图 1-6 Puppy Linux发行版所采用的JWM桌面
如果你用的是老旧PC,尝试一下基于上述某个桌
面环境的Linux发行版,看看怎么样,可能会有惊
喜哦。1.2 Linux发行版
到此为止,你已经了解了构成完整Linux系统所需
要的4个关键部件,那你可能在考虑要怎样才能
把它们组成一个Linux系统。幸运的是,已经有人
为你做好这些了。
我们将完整的Linux系统包称为发行版 。有很多
不同的Linux发行版来满足可能存在的各种运算需
求。大多数发行版是为某个特定用户群定制的,比如商业用户、多媒体爱好者、软件开发人员或
者普通家庭用户。每个定制的发行版都包含了支
持特定功能所需的各种软件包,比如为多媒体爱
好者准备的音频和视频编辑软件,为软件开发人
员准备的编译器和集成开发环境(IDE)。
不同的Linux发行版通常归类为3种:
完整的核心Linux发行版
特定用途的发行版
LiveCD测试发行版
后面几节将会探讨这些不同类型的Linux发行版,然后展示每种类型中一些Linux发行版示例。
1.2.1 核心Linux发行版
核心Linux发行版含有内核、一个或多个图形化桌
面环境以及预编译好的几乎所有能见到的Linux应
用。它提供了一站式的完整Linux安装。表1-4列
出了一些较流行的核心Linux发行版。
表 1-4 核心Linux发行版
发行版
描 述
Slackware
最早的Linux发行版中的一员,在Linux极客中比较流
行
Red Hat
主要用于Internet服务器的商业发行版
Fedora
从Red Hat分离出的家用发行版
Gentoo
为高级Linux用户设计的发行版,仅包含Linux源代码
openSUSE
用于商用和家用的发行版
Debian 在Linux专家和商用Linux产品中流行的发行版
在Linux的早期,发行版是作为一叠软盘发布的。
你必须下载多组文件,然后将其复制到软盘上。
通常要用20张或更多的软盘来创建一个完整的发
行版!毋庸多言,这是个痛苦的过程。
现今,家用电脑基本都有内置的CD和DVD光
驱,Linux发行版也就用一组CD光盘或单张DVD
光盘来发布。这大大简化了Linux的安装过程。
然而当新手在安装核心Linux发行版时,仍然经常
遇到各种各样的问题。为了照顾到Linux用户的所
有使用情景,单个发行版必须包含很多应用软
件。从高端的Internet数据库服务器到常见的游
戏,可谓应用尽有。鉴于Linux上可用应用程序的
数量,一个完整的发行版通常至少要4张CD。
尽管发行版中的大量可选配置对Linux极客来说是
好事,但对新手来说就是一场噩梦。多数发行版
会在安装过程中询问一系列问题,以决定哪些应
用要默认加载、PC上连接了哪些硬件以及怎样配
置硬件设备。新手经常会被这些问题困扰,因
此,他们经常是要么加载了过多的程序,要么没
有加载够,到后来才发现计算机并没有按照他们
预想的方式工作。对新手来说,幸运的是,安装Linux还有更简便的
方法。
1.2.2 特定用途的Linux发行版
Linux发行版的一个新子群已经出现了。它们通常
基于某个主流发行版,但仅包含主流发行版中一
小部分用于某种特定用途的应用程序。
除了提供特定软件外(比如仅为商业用户提供的
办公应用),定制化发行版还尝试通过自动检测
和自动配置常见硬件来帮助新手安装Linux。这使
得Linux的安装过程轻松愉悦了许多。
表1-5列出了一些特定用途的Linux发行版以及它
们的专长。
这只是特定用途的Linux发行版中的一小部分而
已。像这样的发行版足有上百款,而且在互联网
上还不断有新的成员加入。不管你的专长是什
么,你都能找到一款为你量身定做的Linux发行
版。
表 1-5 特定用途的Linux发行版
发行版 描述
CentOS
一款基于Red Hat企业版Linux源代码构建的免费发
行版
Ubuntu
一款用于学校和家庭的免费发行版
PCLinuxOS
一款用于家庭和办公的免费发行版
Mint
一款用于家庭娱乐的免费发行版
dyne:bol ic
一款用于音频和MIDI应用的免费发行版
Puppy
Linux
一款适用于老旧PC的小型免费发行版
许多特定用途的Linux发行版都是基于Debian
Linux。它们使用和Debian一样的安装文件,但仅
打包了完整Debian系统中的一小部分。
1.2.3 Linux LiveCD
Linux世界中一个相对较新的现象是可引导的
Linux CD发行版的出现。它无需安装就可以看到
Linux系统是什么样的。多数现代PC都能从CD启动,而不是必须从标准硬盘启动。基于这点,一
些Linux发行版创建了含有Linux样本系统(称为
Linux LiveCD)的可引导CD。由于单张CD容量的
限制,这个样本并非完整的Linux系统,不过令人
惊喜的是,你可以自己加入各种软件。结果就
是,你可以通过CD来启动PC,并且无需在硬盘
安装任何东西就能运行Linux发行版。
这是一个不弄乱PC就体验各种Linux发行版的绝
妙方法。只需插入CD就能引导了!所有的Linux
软件都将直接从CD上运行。你可以从互联网上下
载各种Linux LiveCD,刻录,然后体验。
表1-6列出了一些可用的流行Linux LiveCD。
表 1-6 Linux LiveCD发行版
发行版
描述
Knoppix
来自德国的一款Linux发行版,也是最早的LiveCD
Linux
PCLinuxOS
一款成熟的LiveCD形式的Linux发行版
Ubuntu 为多种语言设计的世界级Linux项目
Slax
基于Slackware Linux的一款LiveCD Linux
Puppy
Linux
为老旧PC设计的一款全功能Linux
你能在这张表中看到熟悉的面孔。许多特定用途
的Linux发行版都有对应的Linux LiveCD版本。一
些Linux LiveCD发行版,比如Ubuntu,允许直接从
LiveCD安装整个发行版。这使你可以从CD引导
启动,先体验一下此Linux发行版,如果喜欢的
话,再把它安装到硬盘上。这个功能极其方便易
用。
就像所有美好的事物一样,Linux LiveCD也有一
些不足之处。由于要从CD上访问所有东西,应用
程序会运行得更慢,而如果再搭配上陈旧缓慢的
PC和光驱,那更是慢上加慢。还有,由于无法向
CD写入数据,对Linux系统作的任何修改都会在
重启后失效。
不过,有一些Linux LiveCD的改进帮助解决了上
述一些问题。这些改进包括:
能将CD上的Linux系统文件复制到内存中;
能将系统文件复制到硬盘上;
能在U盘上存储系统设置;
能在U盘上存储用户设置。
一些Linux LiveCD,如Puppy Linux,只包含最少
数量的Linux系统文件。当CD引导启动时,LiveCD的启动脚本直接把它们复制到内存中。这
允许在Linux启动后立即把CD从光驱中取走。这
不仅提高了程序运行速度(因为程序从内存中运
行时更快),而且还空出了CD光驱,供你用
Puppy Linux自带的软件转录音频CD或播放视频
DVD。
其他Linux LiveCD用另外的方法,同样允许你在
启动后将CD从光驱中拿走。这种方法是将核心
Linux文件作为一个文件复制到Windows硬盘上。
待CD启动后,系统会寻找那个文件,并从中读取
系统文件。dyne:bolic Linux LiveCD采用的就是这
种技术,我们称之为对接 。当然,你必须在从
CD引导启动之前把系统文件复制到硬盘里。
一种非常流行的技术就是用常见的U盘(也称为闪存或闪盘)来存储Linux LiveCD会话数据。几
乎每个Linux LiveCD都能识别插入的U盘(即使是
在Windows下格式化的)并从U盘上读写文件。
这允许你启动Linux LiveCD,使用Linux应用来创
建文件,再将这些文件存储在U盘上,然后用
Windows应用(或者在另外一台电脑上)访问这
些文件。这该有多酷!1.3 小结
本章探讨了Linux系统及其基本工作原理。Linux
内核是系统的核心,控制着内存、程序和硬件之
间的交互。GNU工具也是Linux系统中的一个重要
部分。本书关注的焦点Linux shell是GNU核心工
具集中的一部分。本章还讨论了Linux系统中的最
后一个组件:Linux桌面环境。随着时间推移,一
切都发生了改变。现今的Linux可以支持多种图形
化桌面环境。
本章还探讨了各种Linux发行版。Linux发行版就
是把Linux系统的各个不同部分汇集起来组成一个
易于安装的包。Linux发行版有囊括各种软件的成
熟的Linux发行版,也有只包含针对某种特定功能
软件包的特定用途发行版。Linux LiveCD则是一
种无需将Linux安装到硬盘就能体验Linux的发行
版。
下一章将开始了解启动命令行和shell脚本编程体
验所需的基本知识。你将了解如何从绚丽的图形
化桌面环境获得Linux shell工具。就目前而言,这
绝非易事。
第 2 章 走进shell
本章内容
访问命令行
通过Linux控制台终端访问CLI
通过图形化终端仿真器访问CLI
使用GNOME终端仿真器
使用Konsole终端仿真器
使用xterm终端仿真器
在Linux早期,可以用来工作的只有shell。那时,系统管理员、程序员和系统用户都端坐在Linux控
制台终端前,输入shell命令,查看文本输出。如
今,伴随着图形化桌面环境的应用,想在系统中
找到shell提示符来输入命令都变得困难起来。本
章讨论了如何进入命令行环境,带你逐步了解可
能会在各种Linux发行版中碰到的终端仿真软件
包。2.1 进入命令行
在图形化桌面出现之前,与Unix系统进行交互的
唯一方式就是借助由shell所提供的文本命令行界
面 (command line interface,CLI)。CLI只能接
受文本输入,也只能显示出文本和基本的图形输
出。
由于这些限制,输出设备并不需要多华丽。通常
只需要一个简单的哑终端就可以使用Unix系统。
所谓的哑终端无非就是利用通信电缆(一般是一
条多线束的串行电缆)连接到Unix系统上的一台
显示器和一个键盘。这种简单的组合可以轻松地
向Unix系统中输入文本数据,并查看文本输出结
果。
如你所知,如今的Linux环境相较以前已经发生了
巨大变化。所有的Linux发行版都配备了某种类型
的图形化桌面环境。但是,如果想输入shell命
令,仍旧需要使用文本显示来访问shell的CLI。
于是现在的问题就归结为一点:有时还真是不容
易在Linux发行版上找到进入CLI的方法。
2.1.1 控制台终端进入CLI的一种方法是让Linux系统退出图形化桌
面模式,进入文本模式。这样在显示器上就只有
一个简单的shell CLI,跟图形化桌面出现以前一
样。这种模式称作Linux控制台 ,因为它仿真了
早期的硬接线控制台终端,而且是一种同Linux系
统交互的直接接口。
Linux系统启动后,它会自动创建出一些虚拟控制
台。虚拟控制台是运行在Linux系统内存中的终端
会话。无需在计算机上连接多个哑终端,大多数
Linux发行版会启动5~6个(有时会更多)虚拟控
制台,你在一台计算机的显示器和键盘上就可以
访问它们。
2.1.2 图形化终端
除了虚拟化终端控制台,还可以使用Linux图形化
桌面环境中的终端仿真包 。终端仿真包会在一
个桌面图形化窗口中模拟控制台终端的使用。图
2-1展示了一个运行在Linux图形化桌面环境中的
终端仿真器。图 2-1 运行在Linux桌面上的终端仿真器
图形化终端仿真只负责Linux图形化体验的一部分。完整的体验效果需要借助多个组件来实现,其中就包括图形化终端仿真软件(称为客户端)。表2-1展示了Linux图形化桌面环境的不同组
成部分。
表 2-1 图形界面的组成
名称
例子
描述
客户
端
图形化终端仿真器,桌
面环境,网络浏览器
请求图形化服务的应用
显示
服务
器
Mir,Wayland
Composi tor,Xserver
负责管理显示(屏幕)和输入设
备(键盘、鼠标、触摸屏)
窗口
管理
器
Compiz,Metaci ty,Kwin
为窗口加入边框,提供窗口移动
和管理功能
部件
库
Athenal(Xaw),X
Intrinsics
为桌面环境中的客户端添加菜单
以及外观项
要想在桌面中使用命令行,关键在于图形化终端
仿真器。可以把图形化终端仿真器看作GUI中(in the GUI)的CLI终端,将虚拟控制台终端看
作GUI以外(outside the GUI)的CLI终端。理解各
种终端及其特性能够提高你的命令行体验。2.2 通过Linux控制台终端访问CLI
在Linux的早期,在启动系统时你只会在显示器上
看到一个登录提示符,除此之外就没别的了。之
前说过,这就是Linux控制台。它是唯一可以为系
统输入命令的地方。
尽管在启动时会创建多个虚拟控制台,但很多
Linux发行版在完成启动过程之后会切换到图形化
环境。这为用户提供了图形化登录以及桌面体
验。这样一来,就只能通过手动方式来访问虚拟
控制台了。
在大多数Linux发行版中,你可以使用简单的按键
组合来访问某个Linux虚拟控制台。通常必须按下
Ctrl+Alt组合键,然后按功能键(F1~F7)进入要
使用的虚拟控制台。功能键F1生成虚拟控制台
1,F2键生成虚拟控制台2,F3键生成虚拟控制台
3,F4键生成虚拟控制台4,依次类推。
说明 Linux发行版通常使用Ctrl+Alt组合键
配合F1或F7来进入图形界面。Ubuntu使用
F7,而RHEL则使用F1。最好还是测试一下
自己所使用的发行版是如何进入图形界面
的。文本模式的虚拟控制台采用全屏的方式显示文本
登录界面。图2-2展示了一个虚拟控制台的文本登
录界面。
图 2-2 Linux虚拟控制台登录界面
注意,在图2-2中第一行文本的最后有一个词tty2。这个词中的2表明这是虚拟控制台2,可以通过
Ctrl+Alt+F2组合键进入。tty 代表电传打字机
(teletypewriter)。这是一个古老的名词,指的
是一台用于发送消息的机器。
说明 不是所有的Linux发行版都会在登录界面上显示虚拟控制台的tty号。
在login: 提示符后输入用户ID,然后再
在Password: 提示符后输入密码,就可以进入控
制台终端了。如果你之前从来没有用过这种方式
登录,那要注意在这里输入密码和在图形环境中
输入不太一样。在图形环境中,输入密码的时候
会看到点号或星号,但是在虚拟控制台中,输入
密码的时候什么都不会显示。
登入虚拟控制台之后,你就进入了Linux CLI。记
住,在Linux虚拟控制台中是无法运行任何图形化
程序的。
一旦登录完成,你可以保持此次登录的活动状
态,然后在不中断活动会话的同时切换到另一个
虚拟控制台。你可以在所有虚拟控制台之间切
换,拥有多个活动会话。在使用CLI时,这个特
性为你提供了巨大的灵活性。
还有一些灵活性涉及虚拟控制台的外观。尽管虚
拟控制台只是文本模式的控制台终端,但你可以
修改文字和背景色。
比如可将终端的背景色设置成白色、文本设置成
黑色,这样可让眼睛轻松些。登录之后,有好几种方法可实现这样的修改。其中一种方法是输入
命令setterm -inversescreen on ,然后按回车
键,如图2-3所示。注意,在途中我们使用选项on
启用了inversescreen 特性。也可以使用选项off
关闭该特性。图 2-3 启用了inversescreen 的Linux虚拟控制
台
另一种方法是连着输入两条命令。输入setterm
-background white ,然后按回车键,接着输
入setterm -foreground black ,再按回车键。
要注意,因为先修改的是终端的背景色,所以可
能会很难看清接下来输入的命令。
在上面的命令中,你不用像inversescreen 那样
去启用或关闭什么特性。共有8种颜色可供选
择,分别是black 、red 、green 、yellow
、blue 、magenta 、cyan 和white (这种颜色在
有些发行版中看起来像灰色)。你可以赋予纯文
本模式的控制台终端富有创意的外观效果。表2-2
展示了setterm 命令的一些选项,可以用于增进
控制台终端的可读性,或改善外观。
表 2-2 用于设置前景色和背景色的setterm 选
项
选项
参数
描述
black 、red
、green 、yellow
将终端的背景色改为指定颜 -background 、blue 、magenta
、cyan 或white
色
-foreground
black 、red
、green 、yellow
、blue 、magenta
、cyan 或white
将终端的前景色改为指定颜
色
-
inversescreen
on 或off
交换背景色和前景色
-reset
无
将终端外观恢复成默认设置并
清屏
-store
无
将终端当前的前景色和背景色
设置成 -reset 选项的值
如果不涉及GUI,虚拟控制台终端访问CLI自然是
不错的选择。但有时候需要一边访问CLI,一边
运行图形化程序。使用终端仿真软件包可以解决
这个问题,这也是在GUI中访问shell CLI的一种流
行的方式。接下来的部分将介绍能够提供图形化
终端仿真的常见软件包。2.3 通过图形化终端仿真访问CLI
相较于虚拟化控制台终端,图形化桌面环境提供
了更多访问CLI的方式。在图形化环境下,有大
量可用的图形化终端仿真器。每个软件包都有各
自独特的特性及选项。表2-3列举出了一些流行的
图形化终端仿真器软件包及其网址。
表 2-3 流行的图形化终端仿真器软件包
名称
网址
Eterm
http: www.eterm.org
Final Term
http: final term.org
GNOME
Terminal
https: help.gnome.orgusersgnome-terminal stable
Guake
https: gi thub.comGuakeguake
Konsole
Terminal
http: konsole.kde.org
Li l lyTerm
http: l i lyterm.luna.com.twindex.html
LXTerminal
http: wiki .lxde.orgenLXTerminal
mrxvt
https: code.google.compmrxvt
ROXTerm
http: roxterm.sourceforge.net
rxvt
http: sourceforge.netprojectsrxvt
rxvt-
unicode
http: software.schmorp.depkgrxvt-unicode
Sakura
https: launchpad.netsakura
st
http: st.suckless.org
Terminator
https: launchpad.netterminator
Terminology
http: www.enl ightenment.orgp.php?p=aboutterminology
ti lda
http: ti lda.sourceforge.netti ldaabout.php
UXterm
http: manpages.ubuntu.commanpagesgutsyman1uxterm.1.html
Wterm
http: sourceforge.netprojectswterm
xterm
http: invisible-island.netxterm
Xfce4
Terminal
http: docs.xfce.orgappsterminal start
Yakuake
http: extragear.kde.orgappsyakuake
尽管可用的图形化终端仿真器软件包不少,但本
章只重点关注其中常用的三个。它们分别是
GNOME Terminal、Konsole Terminal和xterm,通
常都会默认安装在Linux发行版中。2.4 使用GNOME Terminal仿真器
GNOME Terminal是GNOME桌面环境的默认终端
仿真器。很多发行版,如RHEL、Fedora和
CentOS,默认采用的都是GNOME桌面环境,因
此GNOME Terminal自然也就是默认配备了。不过
其他一些桌面环境,比如Ubuntu Unity,也采用
GNOME Terminal作为默认的终端仿真软件包。它
使用起来非常简单,是Linux新手的不错选择。这
部分将带你学习如何访问、配置和使用GNOME
终端仿真器。
2.4.1 访问GNOME Terminal
每个图形化桌面环境都有不同的方式访问
GNOME终端仿真器。本节讲述了如何在
GNOME、Unity和KDE桌面环境中访问GNOME
Terminal。
说明 如果你使用的桌面环境并没有在表2-
3中列出,那你就得逐个查看桌面环境中的
各种菜单来找到GNOME终端仿真器。它在
菜单中通常叫作Terminal。
在GNOME桌面环境中,访问GNOME Terminal非常直截了当。找到左上角的菜单,点击
Applications,从下拉菜单中选择System Tools,点
击Terminal。如果写成简写法的话,这一系列操
作就像这样:Applications ? System Tools ?
Terminal。
图2-1就是一张GNOME Terminal的图片。它展示
了在CentOS发行版的GNOME桌面环境中访问
GNOME Terminal。
在Unity桌面环境中,访问GNOME终端得费点
事。最简单的方法是Dash ? Search,然后输入
Terminal。GNOME终端会作为一个名为Terminal
的应用程序显示在Dash区域。点击对应的图标就
可以打开GNOME终端仿真器了。
窍门 在一些Linux发行版的桌面环境中,例如Ubuntu的Unity,可以使用快捷键
Ctrl+Alt+T快速访问GNOME终端。
在KDE桌面环境中,默认的仿真器是Konsole终端
仿真器。必须通过菜单才能访问。找到屏幕左下
角名为Kickoff Application Launcher的图标,然后
依次点击Application ? Utilities ? Terminal。
在大多数桌面环境中,可以创建一个启动器(launcher)访问GNOME Terminal。启动器是桌
面上的一个图标,可以利用它启动一个选定的应
用程序。这是个很棒的特性,可以让你在桌面环
境中快速访问终端仿真器。如果不想使用快捷键
或是你的桌面环境中无法使用快捷键,这个特性
就尤为有用。
例如,在GNOME桌面环境中,要创建一个启动
器的话,可以在桌面中间单击右键,在出现的下
拉菜单中选择Select Create Launcher...,然后会打
开一个名为Create Launcher的窗口。在Type字段中
选择Application。在Name字段中输入图标的名
称。在Command字段中输入gnome-terminal 。点
击Ok,保存为新的启动器。一个带有指定名称图
标的启动器就出现在了桌面上。双击就可以打开
GNOME终端仿真器了。
说明 在Command字段中输入gnome-
terminal 时,输入的实际上是用来启动
GNOME终端仿真器的shell命令。在第3章中
会学到如何为gnome-terminal 这类命令加入
特定的命令行选项来获得特殊的配置,以及
如何查看可用的选项。
在GNOME终端仿真器应用中,菜单提供了多种
配置选项,应用本身也包含了很多可用的快捷键。了解这些选项能够增进GNOME Terminal CLI
的使用体验。
2.4.2 菜单栏
GNOME Terminal的菜单栏包含了配置选项和定制
选项,可以通过它们使你的GNOME Terminal符合
自己的使用习惯。接下来的几张表格简要地描述
了菜单栏中各种配置选项以及对应的快捷键。
说明 在阅读书中所描述的这些GNOME
Terminal菜单选项时,要注意的是,这和你
所使用的Linux发行版的GNOME Terminal的
菜单选项可能会略有不同。因为一些Linux发
行版采用的GNOME Terminal的版本比较旧。
表2-4展示了GNOME Terminal的File菜单下的配置
选项。File菜单中包含了可用于创建和管理所有
CLI终端会话的菜单项。
表 2-4 File菜单
名称
快捷键
描述
Open
Shift+Ctrl+N
在新的GNOME Terminal窗口中启动一个Terminal 新的shel l会话
Open
Tab
Shift+Ctrl+T
在现有的GNOME Terminal窗口的新标签
中启动一个新的shel l会话
New
Profi le
无
定制会话并将其保存为配置文件
(profi le),以备随后再次使用
Save
Contents
无
将回滚缓冲区(scrol lback buffer)中的
内容保存到文本文件中
Close
Tab
Shift+Ctrl+W
关闭当前标签中的会话
Close
Window
Shift+Ctrl+Q
关闭当前的GNOME Terminal会话
注意,和在网络浏览器中一样,你可以在
GNOME Terminal会话中打开新的标签来启动一个
全新的CLI会话。每个标签中的会话均被视为独
立的CLI会话。
窍门 并不是非得点击菜单项才能进入File
菜单中的选项。大多数选项可以通过在会话
区域中点击右键找到。表2-5所展示的Edit菜单中的菜单项用于处理标签
内的文本内容。可以使用鼠标在会话窗口中的任
意位置复制、粘贴文本。
表 2-5 Edit菜单
名称
快捷键
描述
Copy
Shift+Ctrl+C
将所选的文本复制到GNOME的剪贴
板中
Paste
Shift+Ctrl+V
将GNOME剪贴板中的文本粘贴到会
话中
Paste
Fi lenames
粘贴已复制的文件名和对应的路径
Select Al l
无
选中回滚缓冲区中的全部输出
Profi les
无
添加、删除或修改GNOME Terminal
的配置文件
Keyboard
Shortcuts
无
创建快捷键来快速访问GNOME
Terminal的各种特性
Profi le
Preferences
无
编辑当前会话的配置文件
Paste Filenames菜单项只有在最新版的GNOME
Terminal中才能找到,因此在你的系统中可能会
看不到。
表2-6所展示的View菜单中包含用于控制CLI会话
窗口外观的菜单项。这些选项能够为视力有缺陷
的用户带来帮助。
表 2-6 View菜单
名称
快捷键
描述
Show Menubar
无
打开关闭菜单栏
Ful l Screen
F11
打开关闭终端窗口全桌面显示模式
Zoom In
Ctrl++
逐步增大窗口显示字号
Zoom Out
Ctrl+-
逐步减小窗口显示字号
Normal Size Ctrl+0 恢复默认字号
要注意的是,如果关闭了菜单栏显示,会话的菜
单栏就会消失。不过你可以在任何一个终端会话
窗口中点击右键,然后选择Show Menubar,轻而
易举地找回菜单栏。
表2-7所展示的Search菜单中的菜单项用于在终端
会话中进行简单的搜索。这些搜索类似于在网络
浏览器或字处理软件中进行的操作。
表 2-7 Search菜单
名称
快捷键
描述
Find
Shift+Ctrl+F
打开Find窗口,提供待搜索文本的搜索
选项
Find Next
Shift+Ctrl+H
从终端会话的当前位置开始向前搜索
指定文本
Find
Previous
Shift+Ctrl+G
从终端会话的当前位置开始向后搜索
指定文本
表2-8所展示的Terminal菜单中的菜单项用于控制终端仿真会话的特性。这些菜单项并没有对应的
快捷键。
表 2-8 Terminal菜单
名称
描述
Change Profi le
切换到新的配置文件
Set Ti tle
修改标签会话的标题
Set Character
Encoding
选择用于发送和显示字符的字符集
Reset
发送终端会话重置控制码
Reset and Clear
发送终端会话重置控制码并清除终端会话
显示
Window Size List
列出可用于调整当前终端窗口大小的列表
Reset选项非常有用。某天,你可能不小心让终端
会话显示了一堆杂乱无章的字符和符号。这时候根本识别不出什么文本信息。这通常是因为在屏
幕上显示了非文本文件。可以通过选择Reset或
Reset and Clear让屏幕恢复正常。
表2-9所展示的Tabs菜单中的菜单项用于控制标签
的位置以及活动标签的选择。这个菜单只有在打
开多个标签会话时才会出现。
表 2-9 Tabs菜单
名称
快捷键
描述
Next
Tab
Ctrl+PageDown
使下一个标签成为活动标签
Previous
Tab
Ctrl+PageUp
使上一个标签成为活动标签
Move
Tab
Left
Shift+Ctrl+PageUp
将当前标签移动到前一个标签的
前面
Move
Tab
Right
Shift+Ctrl+PageDown
将当前标签移动到下一个标签的
后面
Detach
Tab
无
删除该标签并使用该标签会话启
动一个新的GNOME Terminal窗口
Tab
List
无
列出当前正在运行的标签(选择
一个标签,转入对应的会话)
Terminal
List
无
列出当前正在运行的终端(选择
一个终端,转入对应的会话。当
打开多个窗口会话的时候才会出
现该菜单项)
最后,Help菜单包含了两个菜单项。Contents提供
了一份完整的GNOME Terminal手册,可供你研究
GNOME Terminal的各个菜单项和特性。About菜
单项可以告诉你当前运行的GNOME Terminal的版
本。
除了GNOME终端仿真软件包,另一个常用的软
件包是Konsole Terminal。两者在很多方面类似。
不过两者间存在的差异还是让我们很有必要单独
开辟一节来讲解的。2.5 使用Konsole Terminal仿真器
KDE桌面项目拥有自己的终端仿真软件包:
Konsole Terminal。Konsole软件包具备基本的终端
仿真特性,另外还包含了一些更高级的图形应用
程序功能。本节描述了Konsole Terminal的特性及
其用法。
2.5.1 访问Konsole Terminal
Konsole Terminal是KDE桌面环境的默认终端仿真
器,可以通过KDE环境的菜单系统轻而易举地访
问到。在其他桌面环境中,访问Konsole Terminal
就要麻烦一点了。
在KDE桌面环境中,可以通过点击屏幕左下角名
为Kickoff Application Launcher的图标来访问
Konsole Terminal。然后点击Applications ?
System ? Terminal (Konsole)。
说明 你可能会在KDE菜单环境中看到两个
终端菜单项。如果是这样的话,下方包含文
字Konsole的Terminal菜单项就是Konsole终
端。在GNOME桌面环境中,通常并没有默认安装
Konsole终端。如果已经安装过的话,你可以通过
GNOME的菜单系统进行访问。在屏幕左上角点
击Applications ? System Tools ? Konsole。
说明 你的系统中可能并没有安装Konsole
终端仿真软件包。如果想安装的话,请阅读
第9章来学习如何在命令行中安装软件。
如果在Unity桌面环境中安装了Konsole,可以通
过Dash ? Search,然后输入Konsole 进行访问。
Konsole Terminal会作为一个名为Konsole的应用程
序显示在Dash区域。点击对应的图标打开Konsole
终端仿真器。
图2-4展示了在CentOS Linux发行版的KDE桌面环
境中访问Konsole Terminal。图 2-4 Konsole Terminal
记住,在大多数桌面环境中,可以创建一个启动
器来访问如Konsole Terminal这样的应用程序。需
要用于启动器启动Konsole终端仿真器的命令
是konsole 。另外,如果已经安装过Konsole
Terminal的话,可以在其他的终端模拟器中输
入konsole ,然后按回车键来启动。和GNOME Terminal类似,Konsole Terminal也通过
菜单提供了一些配置选项和快捷键。接下来将会
逐一讲述这些选项。
2.5.2 菜单栏
Konsole Terminal的菜单栏包含了查看和更改终端
仿真会话特性所需的配置及定制化选项。下面的
几张表格简要描述了菜单选项及其快捷键。
窍门 在活动会话区域中点击右键时,Konsole Terminal会弹出一个简单的菜单。一
些菜单项可以在这个非常方便的菜单中找
到。
表2-10中所展示的File菜单提供了可用于在当前
窗口或新窗口中打开新标签的选项。
表 2-10 File菜单
名称
快捷键
描述
New Tab
Ctrl+Shift+N
在现有的Konsole Terminal窗口的新标
签中启动一个新的shel l会话
New
Window
Ctrl+Shift+M
在新的Konsole Terminal窗口中启动一
个新的shel l会话
shel l
无
打开采用默认配置文件的shel l
Open
Browser
Here
无
打开默认的文件浏览器应用
Close Tab
Ctrl+Shift+W
关闭当前标签中的会话
Qui t
Ctrl+Shift+Q
退出Konsole Terminal仿真应用
在首次启动Konsole Terminal时,菜单中唯一列出
的配置文件就是shell。随着越来越多的配置文件
被创建及保存,它们的名字都会出现在菜单中。
说明 在阅读书中所描述的Konsole
Terminal菜单项时,要注意的是,这可能会
和你使用的Linux发行版中的Konsole Terminal
有所不同。因为一些Linux发行版中采用的
Konsole Terminal仿真软件包的版本比较旧。
表2-11中所展示的Edit菜单提供了可用于处理会
话中的文本内容的选项。除此之外,可以管理标签名称的选项也在此列。
表 2-11 Edit菜单
名称
快捷键
描述
Copy
Ctrl+Shift+C
将选择的文本复制到Konsole的剪贴板
中
Paste
Ctrl+Shift+V
将Konsole剪贴板中的文本粘贴到会话
中
Rename
Tab
Ctrl+Al t+S
修改标签会话的标题
Copy Input
To
无
开始停止将会话输入复制到所选的其
他会话中
Clear
Display
无
清除终端会话中的内容
Clear
Reset
无
清除终端会话中的内容并发送终端会
话重置控制码 Konsole有一种很好的方法来跟踪每个标签会话中
正在进行的活动。你可以使用Rename Tab菜单项
对标签进行命名,使其符合当前执行的任务。这
可以帮助我们知道那些打开的标签究竟是干什么
的。
表2-12所展示的View菜单中的菜单项用于控制
Konsole Terminal窗口中单个会话的视图。除此之
外,可监视终端会话活动的选项也在此列。
表 2-12 View菜单
名称
快捷键
描述
Spl i t View
无
控制显示在Konsole Terminal窗口中的
多个标签会话
Detach
View
Ctrl+Shift+H
删除一个标签会话并使用该标签中的
会话启动一个新的Konsole Terminal窗
口
Show
Menu Bar
无
打开关闭菜单栏
Ful l Screen
Mode Ctrl+Shift+F11 打开关闭终端窗口的全屏模式
Moni tor for
Si lence
Ctrl+Shift+I
打开关闭无活动标签(tab si lence)的
特殊消息
Moni tor for
Activi ty
Ctrl+Shift+A
打开关闭活动标签(tab activi ty)的
特殊消息
Character
Encoding
无
选择用于发送和显示字符的字符集
Increase
Text Size
Ctrl++
逐步增大窗口显示字号
Decrease
Text Size
Ctrl+-
逐步减小窗口显示字号
菜单项Monitor for Silence用于指明无活动标签。
如果在当前标签会话内超过10秒钟没有出现新的
文本内容,那该标签就成了无活动标签。这允许
你在等待应用程序输出时切换到另一个标签。
由菜单项Monitor for Activity所打开的活动标签功
能会在标签会话中出现新的文本内容时发出一条
消息。这一选项能让你注意到应用程序产生了新的输出。
Konsole为每个标签保存了一个叫作回滚缓冲区
的历史记录。这个历史记录中包含了已经不在当
前终端可视区域中的文本内容。默认的是在回滚
缓冲区内保存最近的1000行文本。表2-13所展示
的Scrollback菜单中的菜单项可用于查看该缓冲
区。
表 2-13 Scrollback菜单
名称
快捷键
描述
Search Output
Ctrl+Shift+F
打开Konsole Terminal窗口底部的Find
窗口,提供回滚文本搜索选项
Find Next
F3
在回滚缓冲区历史记录中查找下一
个匹配的文本
Find Previous
Shift+F3
在回滚缓冲区历史记录中查找上一
个匹配的文本
Save Output
无
将回滚缓冲区中的内容保存在一个
文本文件或HTML文件中
Scrol lback
Options
无
打开Scrol lback Options窗口来配置回
滚缓冲区选项
Clear
Scrol lback
无
删除回滚缓冲区中的内容
Clear
Scrol lback
Reset
Ctrl+Shift+X
删除回滚缓冲区中的内容并重置终
端窗口
你也可以使用窗口可视区域中的滚动条向后翻看
回滚缓冲区中的内容。另外,也可以使用
Shift+UpArrow逐行向后翻看,或是使用
Shift+PageUp逐页(24行)向后翻看。
表2-14中所展示的Bookmarks菜单中的菜单项可用
于管理Konsole Terminal窗口中的书签。书签能够
保存活动会话的目录位置,让你随后可以在相同
会话或新的会话中轻松返回之前的位置。
表 2-14 Bookmark菜单
名称
快捷键
描述
Add Bookmark Ctrl+Shift+B 在当前目录位置上创建新的书
签
Bookmark Tabs as
Folder
无
为当前所有的终端标签会话创建
一个新的书签
New Bookmark
Folder
无
创建新的书签文件夹
Edi t Bookmarks
无
编辑已有的书签
表2-15所展示的Settings菜单中的菜单项可用于定
制和管理配置文件。另外,你还可以为当前的标
签会话再添加些许功能。这些菜单项并没有对应
的快捷键。
表 2-15 Settings菜单
名称
描述
Change Profi le
将所选的配置文件应用于当前标签
Edi t Current Profi le
打开Edi t Profi le窗口,提供配置文件配置选
项
Manage Profi les
打开Manage Profi le窗口,提供配置文件管理
选项
Configure Shortcuts
创建Konsole Terminal命令快捷键
Configure
Notifications
创建定制化的Konsole Terminal方案及会话
Configure Notifications项允许将会话中发生的特定
事件与不同的行为关联起来。当出现某个事件
时,就会触发指定的行为(或一系列行为)。
表2-16中所展示的Help菜单中的菜单项给出了完
整的Konsole手册(如果你的Linux发行版中已经
安装了KDE手册)以及标准的About Konsole对话
框。
表 2-16 Help菜单
名称
快捷键
描述
Konsole
Handbook
无
包含了完整的Konsole手册
What's This? Shift+F1 包含了终端部件的帮助信息
Report Bug
无
打开Submi t Bug Report(提交bug报
告)表单
Swi tch Appl ication
Language
无
打开Swi tch Appl ication's
Language(切换应用程序语言)表
单
About Konsole
无
显示当前Konsole Terminal的版本
About KDE
显示当前KDE桌面环境的版本
有一份相当全面的文档可以帮助你使用Konsole终
端仿真器软件包。除此之外,在你碰到程序故障
的时候,还可以使用Bug Report表单向Konsole
Terminal开发人员提交问题。
相较于另一个流行的软件包xterm,Konsole终端
仿真器软件包算是年轻一代了。在下一节中,我
们将探望一下“老古董”xterm。2.6 使用xterm终端仿真器
最古老也是最基础的终端仿真软件包是xterm。
xterm软件包在X Window出现之前就有了,通常
默认包含在发行版中。
尽管xterm是功能完善的仿真软件包,但是它并不
需要太多的资源(如内存)来运行。正因为如
此,在专门为老旧硬件设计的Linux发行版中,xterm非常流行。有些图形化桌面环境就用它作为
默认终端仿真器软件包。
xterm软件包尽管没有提供太多炫目的特性,但是
却把一件事做到了极致:它能够仿真旧式终端,如DEC公司的VT102、VT220以及Tektronix 4014
终端。对于VT102和VT220终端,xterm甚至能够
仿真VT序列色彩控制码,让你可以在脚本中使用
色彩。
说明 DEC VT102及VT220盛行于20世纪80
年代和90年代初期,用于连接Unix系统的哑
文本终端。VT102VT220不仅能显示文本,还能够使用块模式图形显示基本的图形结
构。由于在很多商业环境中这种终端访问方
式仍在使用,因而使得VT102VT220仿真依然流行。
图2-5展示了运行在图形化Linux桌面中的xterm。
可以看出,它非常朴素。
图 2-5 xterm终端
如今得花点心思才能把xterm终端仿真器找出来。
它常常并没有被包含在桌面环境的菜单中。2.6.1 访问xterm
在Ubuntu的Unity桌面中,xterm是默认安装的。可
以通过Dash ? Search,然后输入xterm进行访
问。xterm会作为一个名为XTerm的应用出现在
Dash区域。点击对应的图标就可以打开xterm终端
仿真器。
说明 在Ubuntu中搜索xterm时,你可能会看
到另一个叫作UXTerm的终端。这只不过是加
入了Unicode支持的xterm仿真器软件包而
已。
GNOME和KDE桌面环境中并没有默认安装
xterm。你得先安装它(可以参阅第9章安装软件
包)。安装完成之后,你必须从另一个终端仿真
器中启动xterm。打开一个终端仿真器进入CLI,输入xterm并按回车键。记住,也可以创建桌面启
动器来启动xterm。
xterm包让你可以使用命令行参数设置自己的特
性。下面的内容将讨论这些特性以及如何进行修
改。
2.6.2 命令行参数xterm的命令行参数非常多。你可以控制大量的特
性来对终端仿真实施定制,例如允许或禁止某种
VT仿真。
说明 xterm包含数量众多的配置选项,在
此无法一一列举。在bash手册中有大量的文
档可供参考。第3章中会讲到如何阅读bash手
册。另外,xterm开发团队也在其网站上提供
了很好的帮助:http:invisible-
island.netxterm 。
可以通过向xterm 命令加入参数来调用某些配置
选项。例如,要想让xterm仿真DEC VT100终端,可以输入命令xterm -ti vt100 ,然后按回车
键。表2-17给出了一些可以配合xterm终端仿真器
使用的参数。
表 2-17 xterm命令行参数
参数
描述
-bg color
指定终端背景色
-fb font
指定粗体文本所使用的字体
-fg color
指定文本颜色
-fn font
指定文本字体
-fw font
指定宽文本字体
-lf filename
指定用于屏幕日志的文件名
-ms color
指定文本光标颜色
-name name
指定标题栏中的应用程序名称
-ti terminal
指定要仿真的终端类型
一些xterm命令行参数使用加号(+ )或减号(-)来指明如何设置某种特性。加号表示启用某种
特性,减号表示关闭某种特性。不过反过来也
行。加号可以表示禁止某种特性,减号可以表示
允许某种特性,例如在使用bc 参数的时候。表2-
18中列出了可以使用+- 命令行参数设置的一些
常用特性。
表 2-18 xterm +-命令行参数
参数
描述
ah
启用禁止文本光标高亮
aw
启用禁止文本行自动环绕
bc
启用禁止文本光标闪烁
cm
启用禁止识别ANSI色彩更改控制码
fullscreen
启用禁止全屏模式
j
启用禁止跳跃式滚动
l
启用禁止将屏幕数据记录进日志文件
mb
启用禁止边缘响铃
rv
启用禁止图像反转
t
启用禁止Tektronix模式 要注意,不是所有的xterm实现都支持这些命令行
参数。你可以在xterm启动后,使用-help 参数来
确定你所使用的xterm实现支持哪些参数。
现在你已经了解了三种终端仿真器软件包,重要
的问题是:哪个是最好的终端仿真器。对于这个
问题,并没有权威的答案。要使用哪个仿真器软
件包取决于你的个人需求。不过,能有这么多选
择总是好事。2.7 小结
为了着手学习Linux命令行命令,得先能访问命令
行。在图形化界面的世界里,有时会费点周折。
本章讨论了能够获得Linux命令行的一些不同的界
面。
首先,我们讲解了通过虚拟控制台终端(不涉及
GUI的终端)和通过图形化终端仿真软件包(GUI
中的终端)访问CLI时的不同。简要对比了两种
访问方式之间的差别。
接下来,我们详细探究了通过虚拟控制台终端访
问CLI,包括像更改背景色这类控制台终端配置
选项。
在学习了虚拟控制台终端之后,本章还讲述了利
用图形化终端仿真器访问CLI,其中主要涉及三
种终端仿真器:GNOME Terminal、Konsole
Terminal以及xterm。
本章还讨论了GNOME桌面项目的GNOME终端仿
真软件包。GNOME Terminal通常默认安装在
GNOME桌面环境中。藉由菜单以及快捷键,它
可以很方便地设置多种终端特性。然后讨论了KDE桌面项目的Konsole终端仿真软件
包。Konsole Terminal通常默认安装在KDE桌面环
境中。它提供了诸多漂亮的特性,例如能够监测
到空闲的终端。
最后讲到的是xterm终端仿真器软件包。xterm是
Linux中第一个可用的终端仿真器。它能够仿真旧
式终端硬件,如VT和Tektronix终端。
下一章将开始接触Linux命令行。你将从中学习到
Linux文件系统导航以及创建、删除、处理文件所
需的命令。
第 3 章 基本的bash shell命令
本章内容
使用shell
bash手册
浏览文件系统
文件和目录列表
管理文件和目录
查看文件内容
大多数Linux发行版的默认shell都是GNU bash
shell1 。本章将介绍bash shell的一些基本特性,例如bash手册、tab键自动补全以及显示文件内
容,带你逐步了解怎样用bash shell提供的基本命
令来操作Linux文件和目录。如果你已经熟悉了
Linux环境中的这些基本操作,可以直接跳过本
章,从第4章开始了解更多的高级命令。
1 在6.10之后的大部分Ubuntu版本上,默认的shel l是dash。3.1 启动shell
GNU bash shell能提供对Linux系统的交互式访
问。它是作为普通程序运行的,通常是在用户登
录终端时启动。登录时系统启动的shell依赖于用
户账户的配置。
etcpasswd文件包含了所有系统用户账户列表以
及每个用户的基本配置信息。以下是
从etcpasswd文件中取出的样例条目:
christine:x:501:501:Christine Bresnahan:homechristine:binbash
每个条目有七个字段,字段之间用冒号分隔。系
统使用字段中的数据来赋予用户账户某些特定特
性。其中的大多数条目将在第7章有更加详细的
介绍。现在先将注意力放在最后一个字段上,该
字段指定了用户使用的shell程序。
说明 尽管本书的重点放在了GNU bash
shell,但是也会谈及其他一些shell。第23章中讲解了如何使用如dash和tcsh之类的shell。
在前面的etcpasswd样例条目中,用户christine使
用binbash作为自己的默认shell程序。这意味着
当christine登录Linux系统后,bash shell会自动启
动。
尽管bash shell会在登录时自动启动,但是,是否
会出现shell命令行界面(CLI)则依赖于所使用
的登录方式。如果采用虚拟控制台终端登录,CLI提示符会自动出现,你可以输入shell命令。
但如果是通过图形化桌面环境登录Linux系统,你
就需要启动一个图形化终端仿真器来访问shell
CLI提示符。3.2 shell提示符
一旦启动了终端仿真软件包或者登录Linux虚拟控
制台,你就会看到shell CLI提示符。提示符就是
进入shell世界的大门,是你输入shell命令的地
方。
默认bash shell提示符是美元符号( ),这个符
号表明shell在等待用户输入。不同的Linux发行版
采用不同格式的提示符。在Ubuntu Linux系统上,shell提示符看起来是这样的:
christine@server01:~
在CentOS系统上是这样的:
[christine@server01 ~]
除了作为shell的入口,提示符还能够提供其他的
辅助信息。在上面的两个例子中,提示符中显示了当前用户ID名christine。另外还包括系统名
server01。在本章的后续部分,你会学习到更多
可以在提示符中显示的内容。
窍门 如果你还是CLI新手,请记住,在输
入shell命令之后,需要按回车键才能让shell
执行你输入的命令。
shell提示符并非一成不变。你可根据自己的需要
改变它。第6章讲到了如何修改shell CLI提示符。
可以把shell CLI提示符想象成一名助手,它帮助
你使用Linux系统,给你有益的提示,告诉你什么
时候shell可以接受新的命令。shell中另一个大有
帮助的东西是bash手册。3.3 bash手册
大多数Linux发行版自带用以查找shell命令及其他
GNU工具信息的在线手册。熟悉手册对使用各种
Linux工具大有裨益,尤其是在你要弄清各种命令
行参数的时候。
man 命令用来访问存储在Linux系统上的手册页
面。在想要查找的工具的名称前面输入man 命
令,就可以找到那个工具相应的手册条目。图3-1
展示了查找xterm 命令的手册页面的例子。输入
命令man xterm 就可以进入该页面。图 3-1 xterm 命令的手册页面
注意图3-1中xterm 命令的DESCRIPTION 段落。这些段落排列的并不紧密,字里行间全是技术行
话。bash手册并不是按部就班的学习指南,而是
作为快速参考来使用的。
窍门 如果你是新接触bash shell,可能一开
始会觉得手册页并不太有用。但是,如果养
成了阅读手册的习惯,尤其是阅读第一段或
是DESCRIPTION 部分的前两段,最终你会学
到各种技术行话,手册页也会变得越来越有
用。
当使用man 命令查看命令手册页的时候,这些手
册页是由分页程序 (pager)来显示的。分页程
序是一种实用工具,能够逐页显示文本。可以通
过点击空格键进行翻页,或是使用回车键逐行查
看。另外还可以使用箭头键向前向后滚动手册页
的内容(假设你用的终端仿真软件包支持箭头键
功能)。
读完了手册页,可以点击q键退出。退出手册页
之后,你会重新获得shell CLI提示符,这表示
shell正在等待接受下一条命令。
窍门 bash手册甚至包含了一份有关其自身
的参考信息。输入man man 来查看与手册页
相关的手册页。手册页将与命令相关的信息分成了不同的节。每
一节惯用的命名标准如表3-1所示。
表 3-1 Linux手册页惯用的节名
节
描述
Name
显示命令名和一段简短的描述
Synopsis
命令的语法
Confi guration
命令配置信息
Description
命令的一般性描述
Options
命令选项描述
Exi t Status
命令的退出状态指示
Return Value
命令的返回值
Errors
命令的错误消息
Environment
描述所使用的环境变量
Fi les
命令用到的文件
Versions
命令的版本信息
Conforming To
命名所遵从的标准
Notes
其他有帮助的资料
Bugs
提供提交bug的途径
Example
展示命令的用法
Authors
命令开发人员的信息
Copyright
命令源代码的版权状况
See Also
与该命令类型的其他命令
并不是每一个命令的手册页都包含表3-1中列出的
所有节。还有一些命令的节名并没有在上面的节名惯用标准中列出。
窍门 如果不记得命令名怎么办?可以使用
关键字搜索手册页。语法是:man -k 关键
字。例如,要查找与终端相关的命令,可以
输入man -k terminal 。
除了对节按照惯例进行命名,手册页还有对应的
内容区域。每个内容区域都分配了一个数字,从
1开始,一直到9,如表3-2所示。
表 3-2 Linux手册页的内容区域
区域号
所涵盖的内容
1
可执行程序或shel l命令
2
系统调用
3
库调用
4
特殊文件
5
文件格式与约定
6
游戏
7
概览、约定及杂项
8
超级用户和系统管理员命令
9
内核例程
man工具通常提供的是命令所对应的最低编号的
内容。例如,在图3-1中,我们输入的是命令man
xterm ,请注意,在现实内容的左上角和右上
角,单词XTERM后的括号中有一个数字:(1)。
这表示所显示的手册页来自内容区域1(可执行
程序或shell命令)。
一个命令偶尔会在多个内容区域都有对应的手册
页。比如说,有个叫作hostname 的命令。手册页
中既包括该命令的相关信息,也包括对系统主机
名的概述。要想查看所需要的页面,可以输
入man section topic 。对手册页中的第1部分
而言,就是输入man 1 hostname 。对于手册页中
的第7部分,就是输入man 7 hostname 。
你也可以只看各部分内容的简介:输入man 1intro 阅读第1部分,输入man 2 intro 阅读第2
部分,输入man 3 intro 阅读第3部分,等等。
手册页不是唯一的参考资料。还有另一种叫作
info页面的信息。可以输入info info 来了解info
页面的相关内容。
另外,大多数命令都可以接受-help 或--help 选
项。例如你可以输入hostname -help 来查看帮
助。关于帮助的更多信息,可以输入help help。(看出这里面的门道没?)
显然有不少有用的资源可供参考。不过,很多基
本的shell概念还是需要详细的解释。在下一节
中,我们要讲讲如何浏览Linux文件系统。3.4 浏览文件系统
当登录系统并获得shell命令提示符后,你通常位
于自己的主目录中。一般情况下,你会想去逛逛
主目录之外的其他地方。本节将告诉你如何使用
shell命令来实现这个目标。在开始前,先了解一
下Linux文件系统,为下一步作铺垫。
3.4.1 Linux文件系统
如果你刚接触Linux系统,可能就很难弄清楚
Linux如何引用文件和目录,对已经习惯Microsoft
Windows操作系统方式的人来说更是如此。在继
续探索Linux系统之前,先了解一下它的布局是有
好处的。
你将注意到的第一个不同点是,Linux在路径名中
不使用驱动器盘符。在Windows中,PC上安装的
物理驱动器决定了文件的路径名。Windows会为
每个物理磁盘驱动器分配一个盘符,每个驱动器
都会有自己的目录结构,以便访问存储其中的文
件。
举个例子,在Windows中经常看到这样的文件路
径:c:\Users\Rich\Documents\test.doc
这种Windows文件路径表明了文件test.doc究竟位
于哪个磁盘分区中。如果你将test.doc保存在闪存
上,该闪存由J来标识,那么文件的路径就是
J:\test.doc。该路径表明文件位于J盘的根目录
下。
Linux则采用了一种不同的方式。Linux将文件存
储在单个目录结构中,这个目录被称为虚拟目录
(virtual directory)。虚拟目录将安装在PC上的
所有存储设备的文件路径纳入单个目录结构中。
Linux虚拟目录结构只包含一个称为根 (root)目
录的基础目录。根目录下的目录和文件会按照访
问它们的目录路径一一列出,这点跟Windows类
似。
窍门 你将会发现Linux使用正斜线()而
不是反斜线(\)在文件路径中划分目录。在
Linux中,反斜线用来标识转义字符,要是用
在文件路径中的话会导致各种各样的问题。
如果你之前用的是Windows环境,就需要一点时间来适应。
在Linux中,你会看到下面这种路径:
homeRichDocumentstest.doc
这表明文件test.doc位于Documents目录,Documents又位于rich目录中,rich则在home目录
中。要注意的是,路径本身并没有提供任何有关
文件究竟存放在哪个物理磁盘上的信息。
Linux虚拟目录中比较复杂的部分是它如何协调管
理各个存储设备。在Linux PC上安装的第一块硬
盘称为根驱动器 。根驱动器包含了虚拟目录的
核心,其他目录都是从那里开始构建的。
Linux会在根驱动器上创建一些特别的目录,我们
称之为挂载点 (mount point)。挂载点是虚拟目
录中用于分配额外存储设备的目录。虚拟目录会
让文件和目录出现在这些挂载点目录中,然而实
际上它们却存储在另外一个驱动器中。
通常系统文件会存储在根驱动器中,而用户文件
则存储在另一驱动器中,如图3-2所示。图 3-2 Linux文件结构图3-2展示了计算机中的两块硬盘。一块硬盘和虚
拟目录的根目录(由正斜线表示)关联起来。剩
下的硬盘就可以挂载到虚拟目录结构中的任何地
方。在这个例子中,第二块硬盘被挂载到
了home位置,用户目录都位于这个位置。
Linux文件系统结构是从Unix文件结构演进过来
的。在Linux文件系统中,通用的目录名用于表示
一些常见的功能。表3-3列出了一些较常见的
Linux顶层虚拟目录名及其内容。
表 3-3 常见Linux目录名称
目录
用途
虚拟目录的根目录。通常不会在这里存储文件
bin
二进制目录,存放许多用户级的GNU工具
boot
启动目录,存放启动文件
dev
设备目录,Linux在这里创建设备节点
etc 系统配置文件目录
home
主目录,Linux在这里创建用户目录
l ib
库目录,存放系统和应用程序的库文件
media
媒体目录,可移动媒体设备的常用挂载点
mnt
挂载目录,另一个可移动媒体设备的常用挂载点
opt
可选目录,常用于存放第三方软件包和数据文件
proc
进程目录,存放现有硬件及当前进程的相关信息
root
root用户的主目录
sbin
系统二进制目录,存放许多GNU管理员级工具
run
运行目录,存放系统运作时的运行时数据
srv
服务目录,存放本地服务的相关文件
sys
系统目录,存放系统硬件信息的相关文件
tmp
临时目录,可以在该目录中创建和删除临时工作文件
usr
用户二进制目录,大量用户级的GNU工具和数据文件都
存储在这里
var
可变目录,用以存放经常变化的文件,比如日志文件
常见的目录名均基于文件系统层级标准
(filesystem hierarchy standard,FHS)。很多
Linux发行版都遵循了FHS。这样一来,你就能够
在任何兼容FHS的Linux系统中轻而易举地查找文
件。
说明 FHS偶尔会进行更新。你可能会发现
有些Linux发行版仍在使用旧的FHS标准,而
另外一些则只实现了部分当前标准。要想保
持与FHS标准同步,请访问其官方主
页:http:www.pathname.comfhs 。
在登录系统并获得一个shell CLI提示符后,会话
将从主目录开始。主目录是分配给用户账户的一
个特有目录。用户账户在创建之后,系统通常会
为其分配一个特有的目录(参见第7章)。可以使用图形界面在虚拟目录中跳转。要想在
CLI提示符下切换虚拟目录,需要使用cd 命令。
3.4.2 遍历目录
在Linux文件系统上,可以使用切换目录命令cd
将shell会话切换到另一个目录。cd 命令的格式非
常简单:
cd destination
cd 命令可接受单个参数 destination ,用以指定
想切换到的目录名。如果没有为cd 命令指定目标
路径,它将切换到用户主目录。
destination 参数可以用两种方式表示:一种是
使用绝对文件路径,另一种是使用相对文件路
径。
接下来将分别阐述这两种方法。这两者之间的不
同对于理解文件系统遍历非常重要。
1. 绝对文件路径用户可在虚拟目录中采用绝对文件路径 引用目
录名。绝对文件路径定义了在虚拟目录结构中该
目录的确切位置,以虚拟目录的根目录开始,相
当于目录的全名。
绝对文件路径总是以正斜线()作为起始,指明
虚拟文件系统的根目录。因此,如果要指向usr目
录所包含的bin目录下的用户二进制文件,可以使
用如下绝对文件路径:
usrbin
使用绝对文件路径可以清晰表明用户想切换到的
确切位置。要用绝对文件路径来切换到文件系统
中的某个特定位置,只需在cd 命令后指定全路径
名:
christine@server01:~ cd usrbin
christine@server01:usrbin
注意,在上面的例子中,提示符中一开始有一个波浪号(~)。在切换到另一个目录之后,这个
波浪号被usrbin替代了。CLI提示符正是用它来
帮助你跟踪当前所在虚拟目录结构中的位置。波
浪号表明shell会话位于你的主目录中。在切换出
主目录之后,如果提示符已经进行了相关配置的
话,绝对文件路径就会显示在提示符中。
说明 如果你的shell CLI提示符中并没有显
示shell会话的当前位置,那是因为它并没有
进行相关的配置。如果你希望修改CLI提示
符的话,第6章会告诉你如何更改配置。
如果没有配置好提示符来显示当前shell会话的绝
对文件路径,也可以使用shell命令来显示所处的
位置。pwd 命令可以显示出shell会话的当前目
录,这个目录被称为当前工作目录 。pwd 命令的
用法如下:
christine@server01:usrbin pwd
usrbin
christine@server01:usrbin
窍门 在切换到新的当前工作目录时使
用pwd 命令,是很好的习惯。因为很多shell命令都是在当前工作目录中操作的,在发出
命令之前,你应该始终确保自己处在正确的
目录之中。
可以使用绝对文件路径切换到Linux虚拟目录结构
中的任何一级:
christine@server01:usrbin cd varlog
christine@server01:varlog
christine@server01:varlog pwd
varlog
christine@server01:varlog
还可以从Linux虚拟目录中的任何一级跳回主目
录:
christine@server01:varlog cd
christine@server01:~
christine@server01:~ pwd
homechristine
christine@server01:~
但是,如果你只是在自己的主目录中工作,经常
使用绝对文件路径的话未免太过冗长。例如,若已经位于目录homechristine,再输入下面这样的
命令切换到Documents目录就有些繁琐了:
cd homechristineDocuments
幸好还有一种简单的解决方法。
2. 相对文件路径
相对文件路径 允许用户指定一个基于当前位置
的目标文件路径。相对文件路径不以代表根目录
的正斜线()开头,而是以目录名(如果用户准
备切换到当前工作目录下的一个目录)或是一个
特殊字符开始。假如你位于home目录中,并希望
切换到Documents子目录,那你可以使用cd 命令
加上一个相对文件路径:
christine@server01:~ pwd
homechristine
christine@server01:~
christine@server01:~ cd Documents
christine@server01:~Documents pwd
homechristineDocuments
christine@server01:~Documents上面的例子并没有使用正斜线(),而是采用了
相对文件路径将当前工作目录从homechristine改
为homechristineDocuments,大大减少了输入内
容。
另外,此例中还要注意的是,如果提示符经过配
置可以显示出当前工作目录,它就会一直显示波
浪号。这表明当前工作目录位于用户home目录之
下。
窍门 如果你刚接触命令行和Linux目录结
构,建议暂时先坚持使用绝对文件路径。等
熟悉了目录布局之后,再使用相对文件路
径。
可以在任何包含子目录的目录中使用带有相对文
件路径的cd 命令。也可以使用一个特殊字符来表
示相对目录位置。
有两个特殊字符可用于相对文件路径中:
单点符(.),表示当前目录;
双点符(..),表示当前目录的父目录。
你可以使用单点符,不过对cd 命令来说,这没有什么意义。在本章后面你会看到另一个命令如何
有效地在相对文件路径中使用单点符。
双点符在目录层级中移动时非常便利。如果你处
在在主目录下的Documents目录中,需要切换到主
目录下的Downloads目录,可以这么做:
christine@server01:~Documents pwd
homechristineDocuments
christine@server01:~Documents cd ..Downloads
christine@server01:~Downloads pwd
homechristineDownloads
christine@server01:~Downloads
双点符先将用户带到上一级目录,也就是用户的
主目录,然后Downloads这部分再将用户带到下
一级目录,即Downloads目录。必要时用户也可
用多个双点符来向上切换目录。假如现在位于主
目录中(homechristine),想切换到etc目录,可以输入如下命令:
christine@server01:~ cd ....etc
christine@server01:etc pwd
etc
christine@server01:etc当然,在上面这种情况下,采用相对路径其实比
采用绝对路径输入的字符更多,用绝对路径的
话,用户只需输入etc。因此,只在必要的时候
才使用相对文件路径。
说明 在shell CLI提示符中加入足够的信息
非常方便,本节正是这么做的。不过出于清
晰性的考虑,在书中余下的例子里,我们只
使用一个简单的提示符。
既然你已经知道如何遍历文件系统和验证当前工
作目录,那就可以开始探索各种目录中究竟都有
些什么东西了。下一节将学习如何查看目录中的
文件。3.5 文件和目录列表
要想知道系统中有哪些文件,可以使用列表命令
(ls )。本节将描述ls 命令和可用来格式化其
输出信息的选项。
3.5.1 基本列表功能
ls 命令最基本的形式会显示当前目录下的文件和
目录:
ls
Desktop Downloads Music Pictures Templates Videos
Documents examples.desktop my_script Public test_file
注意,ls 命令输出的列表是按字母排序的(按列
排序而不是按行排序)。如果用户用的是支持彩
色的终端仿真器,ls 命令还可以用不同的颜色来
区分不同类型的文件。LS_COLORS 环境变量控制
着这个功能。(第6章中会讲到环境变量。)不
同的Linux发行版根据各自终端仿真器的能力设置
这个环境变量。如果没安装彩色终端仿真器,可用带-F 参数的ls
命令轻松区分文件和目录。使用-F 参数可以得到
如下输出:
ls -F
Desktop Downloads Music Pictures Templates Videos
Documents examples.desktop my_script Public test_file
-F 参数在目录名后加了正斜线(),以方便用
户在输出中分辨它们。类似地,它会在可执行文
件(比如上面的my_script文件)的后面加个星
号,以便用户找出可在系统上运行的文件。
基本的ls 命令在某种意义上有点容易让人误解。
它显示了当前目录下的文件和目录,但并没有将
全部都显示出来。Linux经常采用隐藏文件 来保
存配置信息。在Linux上,隐藏文件通常是文件名
以点号开始的文件。这些文件并没有在默认的ls
命令输出中显示出来,因此我们称其为隐藏文
件。
要把隐藏文件和普通文件及目录一起显示出来,就得用到-a 参数。下面是一个带有-a 参数的ls
命令的例子: ls -a
. .compiz examples.desktop Music test_file.. .config .gconf my_script Videos
.bash_history Desktop .gstreamer-
0.10 Pictures .Xauthority
.bash_logout .dmrc .ICEauthority .profile .xsession-
errors
.bashrc Documents .local Public .xsession-
errors.old
.cache Downloads .mozilla Templates
所有以点号开头的隐藏文件现在都显示出来了。
注意,有三个以.bash开始的文件。它们是bash
shell环境所使用的隐藏文件,在第6章会对其进
行详细的讲解。
-R 参数是ls 命令可用的另一个参数,叫作递归
选项。它列出了当前目录下包含的子目录中的文
件。如果目录很多,这个输出就会很长。以下
是-R 参数输出的简单例子:
ls -F -R
.:
Desktop Downloads Music Pictures Templates Videos
Documents examples.desktop my_script Public test_file
.Desktop:.Documents:
.Downloads:
.Music:
ILoveLinux.mp3
.Pictures:
.Public:
.Templates:
.Videos:
注意,首先-R 参数显示了当前目录下的内容,也
就是之前例子中用户home目录下的那些文件。另
外,它还显示出了用户home目录下所有子目录及
其内容。只有Music子目录中包含了一个可执行
文件ILoveLinux.mp3。
窍门 选项不一定要像例子中那样分开输
入:ls -F -R 。它们可以进行如下合并:ls
-FR 。
在上一个例子中,子目录中没再包含子目录。如
果有更多的子目录,-R 参数会继续进行遍历。正
如你所看到的,如果目录结构很庞大,输出内容会变得很长。
3.5.2 显示长列表
在基本的输出列表中,ls 命令并未输出太多每个
文件的相关信息。要显示附加信息,另一个常用
的参数是-l 。-l 参数会产生长列表格式的输
出,包含了目录中每个文件的更多相关信息。
ls -l
total 48
drwxr-xr-
x 2 christine christine 4096 Apr 22 20:37 Desktop
drwxr-xr-
x 2 christine christine 4096 Apr 22 20:37 Documents
drwxr-xr-
x 2 christine christine 4096 Apr 22 20:37 Downloads
-rw-r--r-
- 1 christine christine 8980 Apr 22 13:36 examples.desktop
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fall
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fell
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fill
-rw-rw-r-- 1 christine christine 0 May 21 13:44 full
drwxr-xr-
x 2 christine christine 4096 May 21 11:39 Music
-rw-rw-r-
- 1 christine christine 0 May 21 13:25 my_file
-rw-rw-r-
- 1 christine christine 0 May 21 13:25 my_scrapt
-rwxrw-r-
- 1 christine christine 54 May 21 11:26 my_script
-rw-rw-r-
- 1 christine christine 0 May 21 13:42 new_file
drwxr-xr-
x 2 christine christine 4096 Apr 22 20:37 Pictures
drwxr-xr-
x 2 christine christine 4096 Apr 22 20:37 Publicdrwxr-xr-
x 2 christine christine 4096 Apr 22 20:37 Templates
-rw-rw-r-
- 1 christine christine 0 May 21 11:28 test_file
drwxr-xr-
x 2 christine christine 4096 Apr 22 20:37 Videos
这种长列表格式的输出在每一行中列出了单个文
件或目录。除了文件名,输出中还有其他有用信
息。输出的第一行显示了在目录中包含的总块
数。在此之后,每一行都包含了关于文件(或目
录)的下述信息:
文件类型,比如目录(d )、文件(- )、字符型文件(c )或块设备(b );
文件的权限(参见第6章);
文件的硬链接总数;
文件属主的用户名;
文件属组的组名;
文件的大小(以字节为单位);文件的上次修改时间;
文件名或目录名。
-l 参数是一个强大的工具。有了它,你几乎可以
看到系统上任何文件或目录的大部分信息。
在进行文件管理时,ls 命令的很多参数都能派上
用场。如果在shell提示符中输入man ls ,就能看
到可用来修改ls 命令输出的参数有好几页。
别忘了可以将多个参数结合起来使用。你不时地
会发现一些参数组合不仅能够显示出所需的内
容,而且还容易记忆,例如ls -alF 。
3.5.3 过滤输出列表
由前面的例子可知,默认情况下,ls 命令会输出
目录下的所有非隐藏文件。有时这个输出会显得
过多,当你只需要查看单个少数文件信息时更是
如此。
幸而ls 命 ......
您现在查看是摘要介绍页, 详见PDF附件(5545KB,1556页)。





