管理员在进行系统操作的时候,不可避免地会对文本进行修改,如进行各种服务程序配置文件的改动,使程序对用户提供不同的服务效果。在本章我们向大家介绍Linux上常见的编辑器ed、vi、emacs,同时以vi为例,讲解Linux中的文本编辑,为大家成为优秀的系统管理员打下基础。
【重点内容】
Ø Linux编辑器简介
Ø vi的打开和退出
Ø vi 的三种模式
Ø 在文件中快速移动光标
Ø 在文件中替换和删除文本
Ø 撤销和重复编辑命令
Ø 移动和复制文本
4.1 Linux的文本编辑器
4.1.1 ed
在早期的unix平台上,ed可以说是唯一的编辑工具。它是一个很古老的行编辑器,vi这些编辑器都是从ed 演化而来。行编辑器使用起来很不方便,每次只能对一行进行操作,。而后面介绍的pico、vi、emacs等全屏幕编辑器可以对整个屏幕进行编辑,用户编辑的文件直接显示在屏幕上,修改的结果可以立即看出来,克服了行编辑的那种不直观的操作方式,便于用户学习和使用,具有强大的功能。
Linux虽然现在通用vi来编辑,但也在系统中保留了ed,只是没有人会去用罢了。
4.1.2 pico
pico很象DOS下的edit程序,打开之后,屏幕下方有操作的提示信息,功能简单,也可以完成操作,一步一步做就可以了。pico的功能键直接列在屏幕的最下方,可以做为帮助来指导操作。
字符界面下的pico
这个工具对初学Linux是有帮助的,毕竟Linux中的新东西太多了,可以从简单熟悉的东西入手,在建立了基本的概念之后,再来学习vi等复杂的工具。这不失为一种选择。
4.1.3 vi和vim
vi在是Unix平台上历史悠久的编辑器,它的命名是取“visual”(可视化的)这个单词的前两个字母,vi是Unix平台上可视化编辑器(或者说基于屏幕的编辑器)的代表,由加州大学和伯克利大学等机构,以原来的Unix行编辑器ed等为基础开发出来的,是一个使用多年,流传非常广泛的编辑工具。在Linux诞生的时候,vi与基本Unix应用程序一样被保留下来,成为我们管理系统的好帮手。
vim意为“vi iMproved”,改进了的vi,由Bram Moolenaar编写。Bram于1989年新买了一台计算机,在上面使用vi的时候觉得很多地方都不太方便,所以他找到了Stevie的源代码,在上面进行改进。在这期间还有Sven等很多人的加入,持续地改进,直到我们现在使用得很广泛的6.x版本。
vim与vi相比,增加了更多的特性,如彩色与高亮显示,可以使我们的编辑工作更轻松。通过设置,vim会自动检测文件中内容的类型,并以不同的颜色进行高亮显示,如注释变成蓝色,关键字变成褐色,而字符串变成红色等,与vi传统的黑白显示模式相比,vim更易读易用。另一个有趣的功能是vim支持从右到左输入字符,这在使用一些特殊语言(如Farsi)进行编程时是比较有用的。在vim中,我们还可以使用多窗口显示,在一个屏幕中同时对多个文件进行操作。我们还可以通过.vimrc文件定制的方法,来使用户在打开vi的时候获得自己熟悉的和适用于自己特殊目的的环境。
在编辑那些比较大的文件特别是程序文件的时候,vim比vi更方便一些。
4.1.4 emacs
emacs是Open Source的领袖Richard Stallman开发的,是Linux发烧友和程序员的终极武器,其功能大大超过了文本编辑。我们可以在emacs中进行文本编辑,也可以编写程序代码,做程序调试,编辑HTML/SGML,读News,收发e-mail…,而且emacs经过配置后还支持中文。不过功能的强大往往意味着操作方法的复杂,emacs也是如此,必须记非常多的命令才能使用它。
启动了功能菜单的emacs
很多UNIX程序员每天开机的第一件事就是打开emacs,看看自己的邮箱,然后开始编程工作,看其他人在News Group中讨论问题…emacs就是他们的一天,难怪有人说emacs是个操作系统。,目前emacs有terminal和Xwindow版本,terminal版是比较难操作的,而Xwindow版因为支持鼠标,所以相对容易上手一些。在自己的Linux水平从中级向高级发展的时候,不妨把emacs做为选择对象。
4.2 vi编辑器:打开和退出
vi是一个让人又恨又爱的东东,恨的是它有非常多的参数与使用方法,让人记不胜记;还有不同与一般编辑器的“三种模式”,使初学者头晕眼花,应接不暇。但随着不断的使用,我们会对vi渐渐熟悉,一定越来越会发现它竟如此快捷方便。vi是帮我们管好Linux、Unix的强大工具,如果我们对编程开发有兴趣的话,将会发现利用vi,我们在这方面更能发挥自己的才能。
我们先来看一下如何简单地进入和退出vi:
4.2.1 进入vi
vi是一个在命令行下使用的编辑工具,在提示符下输入vi即可进入
# vi
或者使用vi加上所需编辑的文件名,可以直接开始对文件的修改
# vi /etc/services
4.2.2 vi的退出
退出时,只要在底线模式(详见4.3节)。下输入“q”,再回车就可以了。
技巧
使用“vi + 文件名”打开文件。执行vi时,如果使用加号后面跟文件名,就可以在进入文件的时候使光标处在文件最后一行的位置,便于添加内容。如“vi + /etc/hosts”。
使用“vi + 数字文件名”,可以直接从某一行开始编辑文件。如“vi + 23 /etc/services”,就是打开serivces,从23行开始编辑。
4.2.3 打开文件、保存文件和退出 vi 编辑器
存盘和退出、设置行号操作等功能,输入“:”进入底线模式。
在屏幕最下面一行将出现一个“:”符号。这时,输入不同的命令符并回车,有不同的效果:
w命令:
把当前的文件保存起来,然后可以继续编辑。
q命令:
退出vi。
这两个命令符也可以组合起来,“wq”回车,就是保存后退出了。
x命令:
x = wq,保存退出。
! 命令:强制执行。(常用)
在你想保存一个属性是“只读”的文件的时候,系统会提示
E45: 'readonly' option is set (add ! to override)
文件只读,要用“!”符号来强制写入,
“w!”
就可以存盘了。
另外是修改之后,发现自己修改的内容太混乱,不想存盘而直接退出,这时候是无法在底线模式下输入“q”退出的,vi会提示如下错误信息:
E37: No write since last change (add ! to override)
系统会提示你在修改之后没有存盘,不让你退出。这时候同样可以使用“!”符号:
“q!”
就可以不管三七二十一,直接退出了。同样地,强制存盘退出也可以组合出来:
“wq!”或者是“x!”
在保存的时候,如果加上文件名,就相当于另存为,例如:
“:w newfile”
就可以把当前的文件保存为newfile。
技巧
在保存时使用“:x,x1 w newfile”,就可以把从x行到x1行的内容另存为newfile。
4.3 vi 的三种模式
刚刚用vi的朋友,总会问到:“打开之后,我的vi不能输入字符,按上下左右键光标也没法移动,机器光是吱吱叫,这是怎么回事?”很简单,你必须要先进入Insert模式。对vi的三种模式搞不清,是初学者的第一个难题。
三种模式是vi的特点,是与其他编辑器显著不同的,在不同的模式下,完成不同类型的操作。想让vi帮你做事情,先了解下面的内容吧。
4.3.1 vi 的输入模式(Insert mode)
初用vi,大概最容易掌握的就是Insert模式了。简单地说,Insert模式让我们可以输入字符和文字。当我们编辑一个系统配置文件,修改一个脚本的内容,都要敲入字符,这最终都要在Insert模式下进行。刚才那位仁兄无法输入字符,就是因为没有进入vi的输入模式。
其实他只要在进入vi之后,把光标移动到要输入字符的相应位置,敲一下“i”键,就可以输入了。我们会看到屏幕最下方显示“插入”的字样(如英文为默认语言,则为Insert)。这时候就是在输入模式下了,想写什么,就写什么。进入输入模式还有其他的方法,大家在这里先记住“i”键,我们等一下再看其他的进入方式。
进入输入模式时,会显示“INSERT”
输入模式的功能
输入模式就这么一个功能:字符输入,最简单。
4.3.2 vi 的命令模式(Command mode)
命令模式是vi中管理光标和其他一些工作的。我们在编辑文件的时候,需要把光标移来移去,这时候我们需要进入命令模式;删除字符,要进入命令模式;想进行移动和复制某段文字的操作,还是要进入命令模式。命令模式和输入模式结合起来,让我们可以在文件中上上下下,添加修改,完成我们的编辑。
命令模式的功能
移动光标:这已经介绍过,把光标移动到屏幕不同的位置。
删除字符:可以一个一个字符地删除,也可以成行、成段地删除。
复制或者移动字符:这是编辑器里不可缺少的功能,vi中也不例外。
我们将在后面功能键部分着重地讲一下。
4.3.3 vi 的底线模式(Last line mode)
对一般的使用者来说,底线模式最重要的一个功能,就是让我们可以保存编辑工作的结果,如果没有存盘而异常退出,那么非常不幸,需要重新再来修改一遍。当我们完成编辑,想把结果保存起来时,就要进入底线模式。
底线模式的功能
底线模式中可以执行各种命令,常见的包括:
保存结果:这已经介绍过,在此就不再赘述了。
查找字符:在编辑大段文字的时候,想找到一个词,一个字符串或是其他任何内容,都可以用底线模式下的查找功能。
退出vi。编辑完成后,也是由这里退出的。
列出文件的行号:对多行的文件来说,列出行号有利于定位文字,也是很方便的一个功能。
光标移到某一行:列出行号后,当然也会想让光标方便地移到某一行上,快速定位。
三种模式中,以底线模式的功能最复杂,涉及的方面也多,大家要注意掌握。
4.3.4 vi 三种模式的切换
vi在编辑中,有时需要输入,有时需要移动光标,最后是保存、退出,这些操作是在三种模式下执行各自的功能,所以三种模式下的切换方法也是需要掌握的基本功。
首先要记住的是命令模式是切换的“中心”,由命令模式可以直接进入其他两种模式,而输入模式需要进入底线模式时,首先要进入命令模式,然后由这里进入底线模式;反之亦然。
命令模式是三种模式的转换中心
4.3.4.1 命令模式进入输入模式
前面已经介绍过,在命令模式下,敲击“i”键就可以进入输入模式,另外敲击“a”和“o”(字母)键也能进入,三者的区别如下:
i:在当前光标所在之处插入,开始输入字符。(最常用)
a:在当前光标所在的后一个位置插入,开始输入字符(最常用)
o:在当前光标所在行的下面新创建一行,并在行的第一个位置开始输入字符。(最常用)
这并不是全部的进入方法,但却是最常用的。大家可以根据不同的情况选取。下面相应地还有一些大写字母的进入方式,我们按住Shift+大写字母(I、A、O),也可以进入输入模式,但光标移动的位置不同:
I:光标移动到本行的行首,开始输入(常用)
A:光标移动到本行的末尾,开始输入(常用)
O:与“o”相对,在当前光标所在行的上面新创建一行,并在行的第一个位置开始输入字符。(常用)
4.3.4.2 命令模式进入底线模式
有两种方法可以进入,一种是敲“:”,一种是敲“/”键。我们会发现光标从原来的位置变到了屏幕的最下面一行,在后面就可以输入相应的底线模式命令。
“:”键:执行存盘、退出、参数设置和shell底线模式命令等功能。
“/”键(或者“?”也可以):如果要执行查找功能,敲击此键。
底线模式模式的提示符
技巧
用“%”进行括号匹配
此功能对程序员比较有用。按下“%”时,vi首先向后找到第一个括号如“(”,然后就会去找与之相配的另一边“)”;如向右的第一个括号是“)”,vi就会去找相应的“(”。
5.3.4.4 输入模式和底线模式进入命令模式
从这两种模式进入命令模式,按“ESC”就可以了。
我们从下面就要开始学习在vi中进行各种编辑工作,但首先要注意做任何操作需要处于相应的模式下,否则就不会成功。在各种模式中切换是vi的基本功,请一定认真掌握和识别不同模式。
4.4 在文件中快速移动光标
4.4.1 基本的移动方式
要对正文内容进行修改,首先必须把光标移动到指定位置。移动光标的最简单的方式是按键盘的上、下、左、右箭头键。除了这种最原始的方法之外,用户还可以利用 vi 提供的众多字符组合键,在正文中移动光标,迅速到达指定的行或列,实现定位。
命令模式下的光标移动
k、j、h、l (常用)
功能分别等同于上、下、左、右箭头键。可能在最初的时候不太习惯。
提示
在Linux中的vi版本中,上下左右键也都可以移动光标,无论在命令模式还是输入模式中。
4.4.2 在同一行中移动光标
M(常用)
将光标移到当前屏幕的中间一行的行首。M表示Middle。
L (常用)
将光标移到当前屏幕的最下行的行首。L表示Lowest。另外:
xL将光标移到屏幕的倒数第x行。例如,3L,将光标移到屏幕的倒数第3行。
w
在指定行内右移光标,到下一个单词的开头。
e
在指定行内右移光标,到本单词的末尾
b
在指定行内左移光标,到前一个单词的开头.
0
数字0,左移光标,到本行的开头(注意与“I”的区别,数字0只移动而不插入)
$
右移光标,到本行的末尾(注意与“A”的区别,$只移动而不插入)。
^
移动光标,到本行的第一个非空字符。
fx
往右移动到 x 字符上,注意此操作不能移到下一行,找到最后一个字母即止。下面的Fx、tx、Tx与此相同。
Fx
往左移动到 x 字符上
tx
往左移动到 x 字符前
Tx
往左移动到 x 字符后
4.4.3 在页面间移动光标
Ctrl+b (大文件常用)
在文件中向上翻一页(相当于 PageUp 键)
Ctrl+f (大文件常用)
在文件中向下翻一页(相当于 PageDown 键)
H(常用)
将光标移到当前屏幕的最上行的行首。H表示Highest。
xH
将光标移到当前屏幕的第x行。例如,2H就是将光标移到当前屏幕的第2 行。注意这个当前屏幕的第2行并不一定是本文件的第二行。
和4.4.2节重复J,删除!
4.4.4 在底线模式下移动光标
快速移动不但在命令模式中可以实现,在底线模式中也可以,我们先来看一下为文件加上行号的方法。
按“:”键,在屏幕最后一行出现“:”提示符的时候,输入
“set nu”
可以给文件中的每一行加上行号,方便阅读与编辑。注意此行号只是标注,而不是实际添加到文件里的数字。
文件中的标识行号
技巧
直接显示光标所在行的行号。有时我们并不想用“:set nu”为文件加上行号,但又想看一下光标所在行是哪一行,可以使用“Ctrl+g”命令,就可以显示"文件名" line 34(光标位置) of 970(总行数) --3%--(比例)等信息。
4.4.5 使用行号移动光标
在“:”提示符后面输入数字,可以使光标直接移到相应行。在编辑大的文件的时候,这是很有帮助的功能。如上图的光标在第4行,想马上移到第9行,可以先输入“:”,进入底线模式,然后输入“9”,就可以使光标处在第9行的位置。
提示
输入数字把光标移动到某一行,并不需要先用“set nu”加上行号,直接在“:”后输入数字就可以。当然首先要对目标行的行号心中有数。
4.4.6 查找字符或者文字
在底线模式中使用“/”和“?”键进行查找
在命令模式中按“/”或“?”键,同样可以进入底线模式,屏幕下方显示一个“/”或“?”,并且可以查找所需的字符、文字等。直接在提示符后面输入想要查找的内容,再回车就可以了。如查找“mail”:
“/mail”
使用底线模式的查找功能
就是从光标所在位置向后查找“mail”这个单词,如果现在找到的不是所需的单词,可以按“n”键(表示next),继续查找。使用问号“?”,是向前查找。
4.5 在文件中替换和删除文本
4.5.1 命令模式中的替换命令
将光标定位于文件内指定位置后,可以用其他字符来替换光标所指向的字符,或从当前光标位置删除一个或多个字符。
rc (最常用)
用字母“c”替换光标所指向的当前字符。r是replace的意思。另外:
xrc:这里x是数字。表示从光标位置起,用字母“c”替换光标后的x个字符。如:5rc用字母c替换光标所指向的后5个字符。
4.5.2 在底线模式中的替换命令
:%s/字符1/字符2/g
查找并替换字符,在底线模式下执行。可以在全文中查找字符1,然后以字符2替换。例如:
“:%s/tcp/tcpv6/g “,会将全文中的tcp换为tcpv6。
x (最常用)
删除光标所指向的当前字符。另外:
nx:删除光标所在位置起的后x个字符。如:3x,删除光标所在位置起的后3个字符
dw (常用)
从光标所在位置开始,向右删除单词。例如,光标在“daytime”单词的字母“y”的位置上,那么按dw会删除“ytime”部分,留下“da”。若是在单词的第一个字母执行此命令,则整个单词都被删除。另外,
xdw:删除光标右侧的x个单词。例如:3dw,删除光标右侧的3个单词。
db (常用)
从光标位置起,删除左侧的单词。用法与dw一样,只是方向相反。同样支持xdb方式的用法,也与dw一样。
dd (最常用)
删除光标所在行,并去除空隙。就是说删除后,原来的第三行会提升上来。另外:
xdd:删除x行内容,并去除空隙。例如,3dd,删除3行内容,并去除空隙。
d$(常用)
从当前位置删除到行尾。
dG
从光标当前所在行开始,删除下面所有行。做了这个操作之后,vi还会提醒“现在还剩xxx行”。
4.5.3 底线模式中的删除方式
在底线模式中我们同样可以利用行号来做整行的删除工作。在底线模式下,我们可以输入行号加“d”来删除某一行:
“:35 d”
表示删除第35行。也可以一次删除多行,把两个行号用逗号隔开,以这两行为起止点进行删除:
“:35,47 d”
表示删除文件中的35到47行。
“:35,$ d”
表示从第35行删除到最后一行。
:%d
在底线模式“:”下输入“:%d”再回车,可以删除全文。注意别误用了这个命令,如果误用,赶快用下面的撤销命令。
4.6 撤销和重复编辑命令
“u”:在命令模式中输入“u”,是undo的意思,可以撤销上一次的操作,最常用,反复的按u,可以退回很多次操作。
“.”:使用“.”符号可以重复本次操作。例如,使用“dd”命令删除了一行之后,可以再按“.”键,每次都可以再删除一行。
4.7 移动和复制文本
4.7.1 文本行的移动
vi中我们可以方便地将某个范围内的文本行左右移动或从一个地方移至另外一个地方。
文本行的左右移动是在命令模式下完成的,经常用于程序编写。
下面内容中的符号“>”为键盘上的大于号,“<”为键盘上的小于号。
> (按回车键)
将本行与下一行向右移动8个字符(一个tab)的位置
>0
只将本行向右移动8个字符的位置
>x (加回车)
从本行开始,将下面的x行都向右移动8个字符的位置
<
将本行与下一行向左移动8个字符的位置
<0
只将本行向左移动8个字符的位置
<x (加回车)
从本行开始,将下面的x行都向左移动8个字符的位置
>>
将本行向右移动8个字符的位置
<<
将本行向左移动8个字符的位置
4.7.2 在底线模式中的整行移动
在底线模式中,我们可以把某一行放入另一行的下面,使用命令
“:x m x1”
就可以把第x行移动到第x1行。
粘贴和复制
从正文中删除的内容(如字符、字或行)并没有真正丢失,而是被剪切并复制到了一个内存缓冲区中。用户可将其粘贴到正文中的指定位置。完成这一操作的命令是:
p
小写字母 p,将缓冲区的内容粘贴到光标的后面
P
大写字母 P,将缓冲区的内容粘贴到光标的前面
如果缓冲区的内容是字符或字,直接粘贴在光标的前面或后面;如果缓冲区的内容为整行正文,则粘贴在当前光标所在行的上一行或下一行。
注意上述两个命令中字母的大小写。vi 编辑器经常以一对大、小写字母(如 p 和 P)来提供一对相似的功能。通常,小写命令在光标的后面进行操作,大写命令在光标的前面进行操作。
有时需要复制一段正文到新位置,同时保留原有位置的内容。这种情况下,首先应当把指定内容复制(而不是剪切)到内存缓冲区。完成这一操作的命令是:
yy
复制当前行到内存缓冲区。另外:
xyy:复制x行内容到内存缓冲区,例如:5yy,复制5行内容到内存缓冲区。
y$
从当前位置复制到行尾。
p(常用)
如果要粘贴到其他地方 p 就可以了。
xp
当前的字符与后一个字符交换位置。
ddp
光标所在行的上下两行交换位置。
J
将光标所在的上下两行合并。
4.8 在 vi 编辑器中与 shell交互
在vi中,我们可以在底线模式下用“!”符号来访问Linux的Shell,进行操作。
“: !命令”
直接在!后面接着所要执行的命令就可以。例如,我们在编辑/etc/service文件时,想知道当前系统开放有哪些端口,就可以在底线模式下输入:
“:!netstat –an | more”
就会在当前屏幕中显示结果,完毕后会提示你用回车退出。
4.9 vi的定制
在vim的学习中,我们已经了解了它的基本功能。vim是一个强大的工具,可以支持多种Linux使用者的操作。普通使用者,系统管理员和程序员使用的vim习惯和环境可能有很大不同。我们可以通过vimrc文件定制的方法来使用户在打开vim的时候获得自己熟悉的和适用于自己特殊目的的环境。
在每个用户的home目录下都有一个“.vimrc”文件(注意前面有一个点),我们可以手工创建它。在vim启动时,会读入其中的参数配置,这样我们打开文件时就可以进入自己熟悉的编辑环境和使用个性化的键盘配置。
应用实例:使用.vimrc文件定制vim
.vimrc的内容
set nu
set inc search
set tabstop=4
set mouse=a
set history=100
set vb t_vb=
set ruler
set virtualedit=all
set nocompatible
set nu
我们已经学习过如何在vim编辑时为文件加上行号以利于定位。其实我们可以让vim在启动时就加上行号。
set ic
查找字符时忽略大小写。可以根据自己的习惯使用此功能。如果在编辑时想开启大小写查找,可以输入“: set noic”。
set incsearch
查找时,我们输入第一个字符时,vim光标就会自动定位到下面第一个与所查字符相同的字符上,输入第二个字符,光标就会定位到下一个与这两个字符相同的字符位置上,依次类推。比原来的查找更方便。
set tabstop=4
默认情况下,vim中的tab键可以一次向后移动8位,我们可以通过这个设置把移动位置调整为4,或者其他用户习惯的数值。
set mouse=a
在编辑过程中鼠标始终活动。
set history=30
使vim可以记住30条历史命令。在使用!与shell交互的时候很有用,不过也不宜过多空耗内存。
set vb t_vb=
vim如果操作不被允许,计算机会发出“哔”的声音。如果你觉得这个声音太讨厌(本人就是如此J),可以用此选项来定关掉它。
set ruler
让光标所在位置在屏幕下方显示。
set virtualedit=all
一个文件中可能含有很多空的位置,如tab符之间,这些位置默认是不允许光标停留的。而开启了这个设置之后,光标就可以停留在文件的任何地方做编辑了。可以根据自己的习惯使用。不过请注意,有的时候这个选项会导致因分不清文件中是tab还是空格而引起的格式错误。
set nocompatible
使vim与vi的模式不兼容,这样可以避免vi中的bug在vim中出现。可以根据自己的要求关闭。
4.10 编辑多个文件
vim允许我们一次打开多个文件进行编辑,并在它们之间进行切换。如:
#vim /etc/hosts /etc/service /usr/local/samba/lib/smb.conf
可以一次编辑三个文件。打开的屏幕会显示第一个文件,我们可以用底线模式下的“e”来实现三个文件中的切换:
“:e /etc/service”
也可以用Ctrl+Shift+6来回到上一个编辑的文件。注意在文件间切换时,vim会强制你保存或放弃本次修改的内容。
一次编辑多个文件是很实用的功能。我们还可以在vim中用“:e”命令随时打开新的文件,用“yy”拷贝其中的内容,粘贴到原来的文件中。
技巧
同时编辑多个文件时还可以用更直观的方法:分割当前屏幕,用不同的屏幕空间显示不同的文件,使编辑工作更清晰。在底线模式下使用“:sp /etc/service”,即可以此种方式打开文件,并分上下两栏分别显示。
4.11 十六进制编辑方式
除了传统的ASCII码的编辑方式,Vi中还可以采用十六进制的方式来编辑文件,尤其是在一些特殊目的的编程中会用到。这时可以通过xxd设定命令来完成。在底线模式下输入:
:%!xxd
然后回车即可。
如图可见,十六进制模式编辑的时候中间显示了文件数据的十六进制代码,而右边还是原文。
如果要从十六进制返回原来的编辑模式,只需输入:%!xxd –r就可以完成。
4.12 文本格式转换:unix2dos和dos2unix命令
从名称就可以猜想到,这两个文本操作命令是在unix与dos文件格式之间进行转换用的。实际应用中,管理员经常会把Linux平台上的重要文档放到自己的Windows工作站上保存和查看,而两种平台之间的文本在互相查看的时候可能会因为一些控制符号的存在而使屏幕显得很乱,非常不方便编辑。这时就需要用到本节介绍的这两个转换命令。
在Windows窗口中的Linux文档
DOS文件中,列的结束符号有两个控制字符,一个是归位字符 (carriage return,^M),另一个是换列字符(new line,^J)。但Linux中只使用一个换列字符 \n (功能同^J)。所以当Linux的文本文件放到DOS 上用文字编辑器编辑时,会错乱成首尾相连的一行。
unix2dos的作用就是把Linux 的行尾符号(^J)转换成DOS中使用的(^M^J)。命令格式:unix2dos 源文件名
如:
# unix2dos ls.man.txt |
# unix2dos -n ls.man.txt ls.man.txt.dos |
转换出来的内容会更新ls.man.txt文件,在Windows中查看就是正常的了。如果想将保留原文件,将转换内容新生成一个文件,需要-n选项。
而
新生成出来的ls.man.dos.txt就是可以被Windows识别的格式。
dos2unix的作用可以想见是正好相反的,功能是把Windows文档中的行尾符号转为^J,以便在Linux中可以使用。命令格式也相同。
# unix2dos -n ls.man.txt ls.dos.txt |