一、终端机简介
一个终端机是一个萤幕与一个键盘的组合,其型别有vt100, vt102, vt220,
sun, hp, ansi 等。基本上这些型别就是不同公司的不同产品型号,他们之间的差
异在於控制游标的方法不同,按键时键盘产生的键盘代码不同,以及是否有彩色能
力等。
由於设计先天不良,UNIX无法自动侦测终端机的型别,必须以人工的方式告知
。告知的方法就是设定一个环境变数TERM。UNIX里面需要控制萤幕的程式都会参考
此变数。设定此变数的方法如下:
1. 在csh, tcsh下用:
% set term = vt100
这里要说明的是为什麽刚刚说要设定的变数名是大写(TERM),而这里却是小写
;另外一个问题是csh、tcsh中,set指令是用来设定临时变数而已,另有一个
专门设定环境变数的指令叫setenv,为什麽不用setenv?
答案是 csh、tcsh为了使用者的方便,只要'term'这一个临时变数被设了值,
csh 就自动更新TERM这个环境变数的值。
2. 在sh,bash,ksh,zsh中要下两个命令:
$ TERM=vt100
$ export TERM
其中export的意思为,把'TERM'这个暂时变数转成环境变数
<UNIX小字典——环境变数与变数>
在UNIX里面,这是一个不讲还好、越讲越搞不清楚的观念。简单的说,所
谓的<环境变数>就是此变数能够告诉所有的程式使用者目前所处的环境
,而变数则不能,因为只有Shell 能看到变数,而环境变数是所有的程式
都能够看到的。例如所有的程式都需要知道TERM这个变数,所以它是一个
环境变数。在sh下面的export命令可以想作:让大家都能看到这个变数。
二、终端机控制
一般而言,终端机提供一些简单的编辑功能:
1. 删除一个字: BS (CTRL-H, ^H) 或 DEL (^?)
这两个键正常状况下只有一个有用。可用以下两个命令选择
% stty erase '^H'
% stty erase '^?'
2. 删除一行: CTRL-U (^U)
3. 输出控制:
CTRL-S (^S) 暂停输出
CTRL-Q (^Q) 取消暂停输出
三、编辑器种类
A. 列编辑器(line editor)
列编辑器一次只能处理一行,现在除了写程式外几乎没有人在用了。
以下指令皆会启动列编辑器:
e, ed, ex, edit
其中e, ed 没有提示号,ex, edit的提示号是冒号':' 因为没什麽用,所以只
要知道不小心执行了怎麽出来就可以了。用^D或q 或q!可退出之。
B. 全萤幕编辑器
全萤幕编辑器可以使用游标移动至文字档任何地方,做各种修改,也较自然。
UNIX的标准编辑器是vi。其他的编辑器为网路上免费的编辑器。
vi VIsual editor,特色是显示较快、游标移动也较快,不易学习。
joe Joe's own version of editor,本来是作者的上课作业,但是现
在以发展成一个成熟、稳定、方便使用的编辑器。
emacs Editor MACroS,最初由MIT 人工智慧实验室流传出来,是UNIX上
除了vi外最常见的编辑器。它的按键几乎成了UNIX下移动游标的
标准。功能很强、也不是很好学。
Jove Jxxx's own version of Emacs,我们可以说jove是另一个emacs
编辑器的仿制品。但是jove编辑器没有emacs 那麽强的扩充功能
,也比较小巧玲珑。
四、vi的使用
vi有两种模式,输入模式与命令模式。刚进入vi时是处於命令模式。在命令模
式中可以告诉vi要怎麽样移动游标,要改哪些字,对正在编辑的文字档做什麽处理
。此时键盘上的每个键都可以是命令。在输入模式则vi把所有的按键都当成输入,
不做处理。
1. 进入输入模式的方法
想打几个字到萤幕上就要先进入输入模式。以下几个命令皆可进入输入模式:
(注意大小写)
i insert mode,由游标前面插入
a append mode,由游标後面插入
o open a new line and insert
A append from end of line
I insert from begin of line
<eg> 按下列几个键试试看:(先按i再按hello)
ihello
2. 从输入模式跳回命令模式的方法:按<ESC>键
每次进入输入模式就可以打一段文字,在输入模式下只能用^H及^U等基本终端
机编辑功能,按完<Enter> 後就不能退回修改了。要修改必须用<ESC> 跳回命
令模式。
3. 命令模式
在命令模式下才能移动游标、作删除的工作
A. 移动游标
上
左 h j k l 右
下
<eg> 承上例,打完ihello後按一次<ESC>然後四个h回到第一行。
B. 快速移动游标
w -- move a word ^B - page up (backword)
b -- move back a word ^D - move down half a page
^F - page down (forward) ^U - move up half a page
另外可以在这些命令之前加数字,表示重复几次。
<eg> 10j 表示向下 10 行
<eg> 10^F 表示向下 10 页
C. 删除与Undo(还原)
x -- 删除一个字
dd - 删除一行
u -- 还原上一个指令的影响(undo)
<eg> 3x 表示删除三个字
<eg> d8d 删除八行
D. 档案处理
在命令模式下
ZZ -- save & quit
:w! -- write (save) unconditionally
:wq -- write & quit
:w filename -- 把档案存到 filename 这个档去
:q -- quit
:q! -- do not save and quit
:e filename -- edit
:r filename -- read in a file
E. Ex Mode
: 使 vi 暂时进入 ex 命令模式
Q 使 vi 退回 ex Mode
在 ex 下用 vi 命令可回到 vi mode
F. 搜寻
按斜线'/'可以对本文搜寻。
<eg> /hello 寻找含有hello的字串。
G. vilearn
vi的内容太多太杂,316室的工作站有个'程式'叫vilearn可以有效率的学
习vi的使用。
五、joe的使用
joe使用很简单,按CTRL-K H 就可以把按键印出来。比较特殊的是joe 提供区
块功能,可以把某区块标示起来,然後做拷贝。此功能叫Block Commands。另外
joe 也可以一次编辑数个档案。(Windows)
六、Jove & Emacs
Emacs 非常的强,甚至可以在Emacs 里面写E-mail,读News,下UNIX的命令。
Emacs 的主要诉求就是作这些事的时候按键都相同。
进Emacs 後键盘的输入就是文字档的内容。Emacs 的命令大部分以CTRL- 键开
头,有些键是以Meta键开头
例:
方向键可以用之外,
CTRL-P 上,previous line CTRL-N 下,next line
CTRL-B 左,backword CTRL-F 右,forward
(注意:emacs的backword/forward与vi不同)
CTRL-D delete
DEL backspace
CTRL-V Page down
META-V Page UP
各位一定会好奇,Meta怎麽按?所谓的META键并非每一种键盘都有。在工作站
前,空白键旁有个小菱形的键即是。如果没有META键的话,META-V 要按成
<ESC><V>。
在Emacs内有一点要注意的是,Emacs认为删除游标左边的字要用<DEL> 键,而
不是我们的直觉,<BS>键。原因就是<BS>键其实就是CTRL-H。而Emacs 内CTRL-H是
用来显示求助讯息的。
CTRL-H b 列出目前按键的组合有哪些功能
CTRL-H t 启动emacs的教导使用程式
jove没有这个功能,但是有个外部程式叫teachjove。
Emacs 的命令很多,很复杂,万一不小心误按了命令,可以按CTRL-G取消。
CTRL-G在Emacs 内任何时刻都代表中断、取消的意思。
结束emacs可用<CTRL-X><CTRL-C>(不存档案)。
Emacs/Jove按键不容易在讲义上描述,以上的描述可提供各位初步的概念,以
及在Emacs 内求生、以及全身而退的方法,大家有兴趣可以下emacs 命令到Emacs
的世界探险。X windows的所有编辑按键皆和Emacs 一样,熟悉一点Emacs的按键用
处蛮多的。
七、info系统
这里并不想介绍info的使用,只是让大家知道此系统的存在而已。在emacs 内
按CTRL-H I或者在命令列下info指令就可以进入了。info系统是一个求助系统,比
man 方便,读起来也较方便。但是资料库不大,只包含了Emacs 及一些程式发展工
具的使用方法。
□其他档案处理的方法
本节介绍UNIX处理档案的一些程式
一、压缩档
一个档案太大、不常用,可以把它压缩起来,以节省空间。指令为
compress/uncompress或gzip/gunzip。相关的程式有zcat, gzcat, zmore。
<eg> 有份报告叫report,用compress压过後叫report.Z,用gzip压过後叫
report.gz,要看这份报告可以用'zmore report'看。
二、寻找字串
寻找档案内是否有所要的字串
<eg> grep "字串" 档案
cat 档案 | grep 字串
寻找字串的方法很多,比如说我想找所有以M开头的行。此时必须引进pattern的观
念。以下是一些简单的□例,以及说明:
^M 以M开头的行,^表示开始的意思
M$ 以M结尾的行,$表示结束的意思
^[0-9] 以数字开始的行,[]内可列举字母
^[124ab] 以1,2,4,a,或b开头的行
^b.503 句点表示任一字母
* 星号表示0个以上的字母(可以没有)
+ 加号表示1个以上的字母
\. 斜线可以去掉特殊意义
<eg> ypcat passwd | grep ^b 列出大学部有申请帐号者名单
ypcat passwd | grep ^s 列出交换学生申请帐号者名单
ypcat passwd | grep '^b.503' 列出电机系各年级...
grep '^\.' myfile.txt 列出所有以句点开头的行
三、nroff标准的UNIX简易排版指令。
所谓的排版就是在文章间加入一些控制指令,让nroff 这个程式读。nroff 就会依
照我们想要的方式把文章印出。相关的指令有tbl 表格产生器,eqn 数式产生器,
以及pic 绘图语言。有蛮多英文的UNIX书籍就是用这套程式印出来的。另外有个程
式叫作troff ,其接受的命令与nroff 几乎一样,但是它的输出比较高级,可以作
为照相排版用。以下为一些小例子,首先用编辑器编写以下档案,命名为clock。
┌————— clock ——————┐
│.ce │
│clock │
│.sp 2 │
│<自己写一段文章,不用对齐> │
│<段与段间用空白行隔开> │
└———————————————┘
然後用以下的命令可以得到输出:
% nroff clock | more 预视
% nroff clock | lpr 输出到印表机
nroff 的排版指令很多,有兴趣的请自己参考书籍,因为它只能处理英文而已。
四、TeX/LaTeX
高级的排版程式,不是UNIX附的。主要用来做高品质的输出,特别是数学符号的处
理。国内倚天公司有PC版的 LaTeX,可以处理中文。(其实网路上也有免费的 TeX
中文版,但是没有人安装,也不知道字形好不好看)
五、awk
awk 可视为超强的grep。或者说awk 是一个简易的资料库处理工具。
<eg> ypcat passwd | awk -F: '{print $1}' | more
印出所有的使用者,passwd档的第一栏。
<eg> ypcat passwd | awk -F: '$1 ~ /^b.503/ {print $1}' | more
印出电机系的使用者。
六、寻找档案find
find . -name hello -print 寻找目前目录及所有的子目录内叫hello的
档案。
find . -ctime +7 -print 找出七天内未被更动的档案
find . -size +2000m -print 找出大小超过2000 bytes的档案
find /tmp -user b1234567 -print 在/tmp下属於b1234567的档案
find . -name '*.c' -exec rm {} \; 删除所有的.c档