第十二章 vi 文本编辑器
第十二章 vi 文本编辑器前言
概述
现在这个时代存在着很多图形界面编辑器和易用的基于文本的编辑器,例如 nano ,那为什么还要学习 vi ?这里有三条充分理由:
vi 总是可用的。如果用户面前系统没有图形界面,例如远程服务器或者是本地系统的 X 配置不可用,那么 vi 就会成为救命稻草。
尽管 nano 已经得到了越来越广泛的应用,但是,迄今为止它还不是通用的。而 POSIX (一种 UNIX 系统的程序兼容标准) 则要求系统必须配备有 vi 。
vi 是轻量级的软件,运行速度快。对很多的任务来说,启动 vi 比在菜单中找到一个图形界面编辑器并等待几兆大小的编辑器载入要容易得多。另外,vi 的设计还非常利于打字。
vi 背景
1976年,加州大学生伯克利分校的学生,之后成为 Sun 公司创始人之一的 Bill Joy 写出了 vi 的第一个版本。
vi 出自单词 visual ,含义是能够在视频终端上移动光标来进行编辑。
在图形界面编辑器出现之前是行编辑器的天下,用户每次只能在一行文本上进行编辑。
使用行编辑器的时候,用户需要告知编辑器是在哪一行进行什么样操作。比如添 ...
第二十二章 打印
打印前言
前面几章讲述了文本的操纵,现在是时候讨论如何将文本输出到纸张上了,本章将会介绍一些用于打印文件以及控制打印机操作的命令行工具。
本章会讨论如下命令:
pr: 转换文本文件,从而进行打印操作
lpr: 打印文件
lp: 打印文件 (System V)
a2ps: 格式化文件,以在 PostScript 打印机上打印
lpstat: 显示打印机状态信息。
lpq: 显示打印机队列状态。
lprm: 取消打印任务
cancel: 取消打印任务 (System V)
打印操作简史
在充分理解类 UNIX 操作系统的打印特性之前,我们必须首先了解一些打印操作的的发展史。
类 UNIX 系统的打印操作可以追溯到操作系统的起源,那个时期,打印机及其使用方法与现在有很大区别。
打印操作简史如下:
灰暗时期的打印
基于字符的打印机
图形化打印机
Linux 方式的打印
准备打印文件基本介绍
作为命令行用户,我们多数还是倾向于打印文本文件,虽然其他的数据形式也可以打印。
pr - 将文本文件转换为打印文件
pr 基本介绍
前面章节略微介绍了 pr 的相关知识,本节将讨论其 ...
第十一章 环境
第十一章 环境环境
前面讲到,在 shell 会话调用环境 (environment) 期间, shell 会存储大量的信息。
程序使用存储在环境中的数据来确定我们的配置。尽管大多数系统程序使用配置文件 (configuration file) 来存储程序设置,但是也有一些程序会查找环境中存储的变量来调整自己的行为。
本章会讲解下述命令
printenv: 打印部分或者全部的环境信息
set: 设置 shell 选项
export: 将环境导出到随后要运行的程序中
alias: 为命令创建一个别名
环境中存储的是什么基本介绍
尽管 shell 在环境中存储了两种基本类型的数据,但是在 bash 中,这两种类型基本上没有什么区别。这两种数据类型分别是环境变量 (environment variable) 和 shell 变量 (shell variable) 。
shell 变量是由 bash 存放的少量数据,环境变量就是除此之外的所有其他变量。除变量之外,shell 还存储了一些编程数据 (programmatic data) ,也就是别名和 shell 函数。
检查环境
要了 ...
第十七章 文件搜索
第十七章 文件搜索前言
本章我们主要介绍两个用于在 Linux 系统中搜索文件的工具:
locate: 通过文件名查找文件
find: 在文件系统目录框架中查找文件
xargs: 从标准输入中建立、执行命令行
touch: 更改文件的日期时间
stat: 显示文件或文件系统的状态
locate - 较简单的方式查找文件
locate 命令通过快速搜索数据库,以寻找路径名与给定子字符串相匹配的文件,同时输出所有匹配结果。
例如,假定查找名称以 zip 字符串开头的程序,由于查找的是程序文件,所以可以认为包含所要查找的程序的目录应以 /bin 结尾。因此,可以尝试下面的命令行。1[me@linuxbox ~]$ locate bin/zip
有时搜索需求并不是这么简单,这时便可以用 locate 命令结合其它诸如 grep 这样的工具实现一些更有趣的搜索。1234[me@linuxbox ~]$ locate zip | grep bin/bin/bunzip2/bin/bzip2/bin/bzip2recover
locate 程序已经使用了很长时间,因此出现了多种衍生体 ...
第二十章 文本处理
文本处理前言
由于所有类 UNIX 操作系统都严重依赖于文本文件来进行某些数据类型的存储,所以需要有很多可以进行文本操作的工具。
本章主要介绍一些与切割文本有关的命令,第 21 章会进一步探讨文本处理工具,并重点讲解那些用于格式化输出以及其他满足人类需求的程序。
本章首先会回顾之前讲过的一些命令,然后讲解一些新的命令。
cat: 连接文件并打印到标准输出
sort: 对文本排序
uniq: 报告并省略重复行
cut: 从每一行中移除文本区域
paste: 合并文件文本行
join: 基于某个共享字段来联合两个文件的文本行
comm: 逐行比较两个已经排好序的文件
diff: 逐行比较文件
patch: 对原文件打补丁
tr: 转换或删除字符
sed: 用于过滤和转换文本的流编辑器
aspell: 交互式拼写检查器
文本应用程序
基本介绍
到目前为止,我们总共介绍了两种文本编辑 (nano 和 vim) ,看过一堆配置文件,并且目睹了许多命令的输出都是文件格式。
文件
许多人都采用纯文本格式编辑文件。虽然大家都知道用一些较小的文本文件进行一些简单的笔记很方便、很实用,但 ...
第二十三章 编译程序
编译程序前言
本章将介绍如何通过源代码生成可执行程序。开放源代码是 Linux 自由开源的必要因素,整个 Linux 系统的开发依赖于开发人员之间的自由交流。
需要编译软件的原因:
可用性:尽管有些发行版已经包含了版本库中一些预编译程序,但并不会包含用户所有可能需要的应用程序。这种情况下,用户获取所需要软件的唯一方式就是编译源代码。
及时性:虽然有些发行版本专注于一些前沿的程序版本,但是多数并不会。这就意味着想要获取最新版本的程序,编译必不可少的。
编译软件源代码是一项非常复杂并且有技术性的任务,这远远超出了多数用户的能力范围。
本章将会介绍一个新的命令:
make: 维护程序的工具
什么是编译
编译就是一个将源代码 (由程序员编写的人类可读的程序描述) 编译成计算机处理器能识别的语言的过程。
是不是所有的程序都需要编译
Shell 脚本可以直接运行而不需要编译,这些文件都是用脚本或解释型语言编写的。
这些语言越来越受欢迎,其中就有 Perl、Python、PHP、Ruby 以及其他多种语言等。
脚本语言由一个称为解释器的特殊程序来执行,解释器负责输入程序文件并执行其所 ...
第二十一章 格式化输出
格式化输出前言
本章继续讨论与文本相关的工具,重点将一些用于格式文本输出而非改变文本自身内容的命令。
这些命令通常用于文本的打印,而打印这一主题将在下一章介绍。
本章将要讨论的命令如下所示:
nl: 对行进行标号
fold: 设定文本行长度
fmt: 简单的文本格式化工具
pr: 格式化打印文本
printf: 格式化并打印数据
简单的格式化工具基本介绍
首先让我们看一些简单的格式化工具,他们多数都是单目的程序,且一般执行一些不复杂的操作,他们一般用于一些小的任务,并作为管道传输和脚本的一部分。
nl - 对行进行标号
nl 基本介绍
nl 命令是一个非常神秘的工具,用于完成一个非常简单的任务;对行进行编号。就其最简单用法,与 cat -n 很相似。1234567891011[me@linuxbox ~]$ nl distros.txt | head 1 SUSE 10.2 12/07/2006 2 Fedora 10.0 11/25/2008 3 SUSE 11.0 06/19/2008 4 Ubuntu 8.04 04/2 ...
第九章 权限
第九章 权限前言
传统的 UNIX 操作系统与那些传统的 MS-DOS 操作系统不同,区别在于它们不仅是多重任务处理系统,而且还是多用户系统。
为了保证多用户功能实际可用,Linux 系统特别设计了一种方案来保护当前用户不受其他用户操作的影响。
本章将介绍系统安全的基础知识以及如下命令的使用:
id: 显示用户身份标识
chmod: 更改文件的模式
umask: 设置文件的默认权限
su: 以另一个用户的身份运行shell
sudo: 以另一个用户的身份来执行命令
chown: 更改文件所有者
chgrp: 更改文件所属群组
passwd:更改用户密码
所有者、组成员和其他所有用户
我们在第四章讲解文件系统时,当试图查看类似 /etc/shadow 的文件时,会遇到下面的问题:1234[me@linuxbox ~]$ file /etc/shadow/etc/shadow: regular file, no read permission[me@linuxbox ~]$ less /etc/shadow/etc/shadow: Permission denie ...
第八章 高级键盘技巧
第八章 高级键盘技巧前言
UNIX 被称为它是为喜欢敲键盘的人设计的系统。当然,UNIX 中存在命令行的这一事实充分证明了一点。
用户使用命令行时往往不喜欢敲入太多字,所以命令行中存在类似 cp、ls、mv 和 rm 的短命令。
事实上,省事 (即用最少的击键次数执行最多的任务) 是命令行最希望达到的目标之一。
命令行的另一个目标是,用户在执行任务时手指无需离开键盘,不使用鼠标。
我们将使用到以下命令:
clear: 清屏
history: 显示历史列表的记录
编辑命令行
基本介绍
bash 使用了一个名为 Readline 的库 (供不同的应用程序共享使用的线程集合) 来实现命令行的编辑。
光标移动
组合键
作用
Ctrl-A
移动光标到行首
Ctrl-E
移动光标到行尾
Ctrl-F
光标向前移动一个字符;和右箭头键作用一样
Ctrl-B
光标向前移动一个字符;和左箭头键作用一样
Alt-F
光标向前移动一个字
Alt-B
光标向后移动一个字
Ctrl-l
清屏并把光标移到左上角;clear 命令可以完成相同工作
修改文本
...
第七章 透过 Shell 看世界
第七章 透过 Shell 看世界前言
在本章,我们将介绍在按下 Enter 键时,命令行中发生的一些神奇事情。
虽然我们会介绍 shell 的几个有趣而复杂的特性,但是我们只使用一条新命令来处理。
echo: 显示一行文本
扩展基本介绍
每次输入命令行按下 Enter 键时,bash 都会执行之前的对文本进行多重处理。
前面已经见过一个简单的字符序列 (比如 * ) 在 shell 中被识别为多种意思的例子。产生这个结果的处理过程称为扩展 (expansion) 。
有了扩展功能,再输入内容后,这些内容将在 Shell 对其执行之前被扩展成其他内容。
echo 是 shell 的一个内置命令,它执行的任务非常简单,即把文本参数内容打印到标准输出。1[me@linuxbox ~]$ echo this is a test
上面例子相当简单,传递 echo 的任何参数都将显示出来。
我们可以看看另一个例子12[me@linux ~]$ echo *Desktop Documents ls-output.txt Music Pictures Public Templates Video ...