感谢支持
我们一直在努力

让DOS与Unix文件相互兼容

    Unix与DOS(包括Windos)是不同类型的操作系统。由于其内部架构的不同,这导致他们之间的文件难以相互兼容。如现在有一个文本文件,内容如下:


  如果这是一个Unix格式下的文件,在Windows操作系统下就不会正常显示。很有可能在Windows操作系统下打开的时候,其三行内容会再同一行中显示。所以如果企业中同时存在有Unix操作系统与微软操作系统的时候,那么就需要考虑如何提高文件的兼容性问题。不但要能够显示文件的内容,而且文件的格式也需要保存下来,如分行等等。今天笔者就跟大家来探讨一下这个问题。


  一、Unix文件与Dos文件的主要差异。


  在实际工作中,系统工程师经常需要在Unix操作系统与Windows操作系统之间共享文件。但是由于他们的格式存在一定的差异,故兼容性不是很高。了解他们格式的具体差异,是解决这个兼容性问题的前提。其实他们的差异很少,只是在一个分号控制符上有点差异。例如笔者现在分别在Unix操作系统与Windows操作系统下建立一个test文件。然后利用od –bc test(Unix操作系统下的文件)与od -bc test.test(微软操作系统下的文本文件)这两个命令来显示这两个文件,那么他们的差异也就一览无余了。


  test1


  test2


  unix test


  微软操作系统下的文件(如记事本文件),行的结束符都要用两个字符表示,即为\r与\n。但是Unix操作系统下的文件,行的结束符则只用一个字符表示,即\n.\r与\n两个字符的八进制值分别为015与012,\r与\n是转义字符的表示方法。利用od –bc命令就可以用八进制显示结果。如果要把Dos文件格式转换为Unix文件格式,则需要把每行后面一个多于的\n符号去掉。相反,如果要把Unix文件转换为微软操作系统支持的格式,则需要在每行后面加入\n符号。这个原理虽然简单,但是操作起来却有一定的难度。如果内容少的话,那么手工更改也没有多少工作量。但是如果一个文件有数百行、上千行,那么手工更改的话可不是一个好主意。为此需要借助一定的工具或者命令,来实现这个自动转换的功能。


  利用od –bc命令可以以八进制的形式显示结果。在实际工作中,八进制对于系统工程师来说,具有很大的实用价值。为什么呢?这要从八进制的运算机制开始说起。所谓八进制,就是其基数为8,基数值可以取0、1、2、3、4、5、6、7共8个值,逢八进一。 八进制与十进制运算规则一样。那么为什么要用八进制多此一举呢?实际上,八进制的引用,主要是为了书写和表示方便,因为二进制表示位数比较长。例如数字10 用二进制表示为(、10000000000,共有11个数字。用八进制表示为8。更重要的是,由于二进制与八进制存在在一种对等关系,每三位二进制与一位八进制数完全对等。所以二进制和八进制在运算上无区别,而十进制不具备这一优点。而最重要的是,因为操作系统中都是采用二进制来表示的。而由于二进制与十进制存在完全对等的关系,所以系统工程师在有时更倾向于采用八进制来显示结果。为此系统工程师如果要提高自己的业务水平,那么就需要多多去了解一下八进制的显示格式与运算逻辑。

  二、利用软件实现自动转换。


  有些软件工具可以帮助系统工程师自动进行文件格式的转换。如在微软的操组系统中部署了一个FTP文件传输服务器。那么当系统工程师通过FTP从微软操作系统中下载文件时,Unix系统就会自动完成这个格式的转换工作。即会把文件中每一个行内自动加入\n符号。这个特性可能会给系统工程师一定的启示。


  对于企业的普通员工来说,这是最简单的实现文件兼容性的方式。有一些负责的实现方式虽然对系统工程师来说可能简单一些,但是对于没有专业技术背景的普通员工来说,这个傻瓜式的实现方式无疑是比较合理的,因为这个文件格式转换对于普通员工来说是透明的。当使用Unix操作系统的员工从FTP服务器上下载Winodws文件时,员工并不知道他们之间存在着差异。Unix系统会自动根据操作系统的不同,对格式进行转换。


  为此,笔者在给企业部署Unix操作系统的时候,为了提高文件的兼容性,笔者都是建议用户通过FTP文件服务器来下载软件。如可以组建一个基于微软操作系统的文件服务器,然后其他员工需要把文件共享给Unix操组系统的员工的话,则可以先把文件放到文件服务器上(利用FTP实现),然后Unix操作系统的员工可以从文件服务器上下载文件。这个处理方式虽然比较麻烦一些,但是对于用户来说转换内容是透明的,故比较适合普通用户使用。

  三、利用命令进行自动转换。


  虽然可以通过软件工具实现自动转换。但是在一些特殊的情况下,必须要由系统管理员手工来完成格式的转换。又或者系统工程师觉得通过软件来实现格式转换比较麻烦,而通过命令来手工实现格式转换要简单一些。为此系统工程师就会选择手工转换。确实手工转换不用通过FTP服务器这个中转站,所以处理起来就会便捷许多。况且系统工程师又是这方面的专家,故对于他们来说也没有什么技术障碍。


为了满足系统工程师的这个需要,一些Unix系统则专门提供了dos2unix和unix2dos这两个命令。顾名思义,他们可以实现微软操作系统文件与Unix系统操作文件的相互转换。不过这里需要注意的是,各个Unix操作系统在这两个命令上用法可能有所不同。系统工程师在使用这个命令之前,最好能够先参考一下相关的命令说明。或者利用man命令来查看系统对于这个命令的帮助文档。


  另外在使用这两个命令进行手工转换文件时,需要注意原文件是否会被覆盖的问题。如有些Unix系统,第一个文件与第二个文件允许使用同一个文件名。但是有些Unix系统则只需要一个文件名,即执行这两个命令后,系统要覆盖原来文档的内容。有的Unix版本操作系统更需要采用重定向符来实现这个格式的转换。不过值得庆幸的是,一般在系统的帮助文档中都会有说明。如果系统工程师换了一个操作系统版本,不熟悉具体操作时,则可以查阅在线帮助文档中的使用说明,以确定自己使用的版本系统里这两个命令的具体用法。在使用这两个命令的时候,有一些细节的问题系统工程师需要了解,即格式转换对于文件大小的影响。由于微软操作系统文件每一行末需要使用两个字符来表示一行;而在Unix操作系统下则只需要使用一个字符来表示一行。故当把Unix文件转换为微软操作系统文件的时候,转换后的文件会比原先的文件要大一点,其增加两即位文件的行数。

  四、格式转换过程中的注意点。


  在格式转换的过程中,笔者认为有两点要引起系统工程师的注意。一是如果一个Unix文件,没有转换在Windows操作系统下一般也能够查看。其中的内容是可以看到的,只是显示的格式会有点混乱。如在Unix系统中文章一开始提到的那个文件内容是分行显示的。但是如果没有转换,在微软操作系统中将显示为一行。故如果系统工程师自己要用这个文件,在文件内容比较少的情况下,没有必要进行转换。二是这个文件的转换只针对普通的文件。如果现在有一个文件是二进制文件(如一个微软操作系统下EXE格式的可执行文件)。此时系统工程师就不能够利用命令把这个文件转换为Unix文件。或则说,转换是可以转换的,只是转换后这个可执行文件将无法执行。因为其内部格式受到了破坏。这是系统工程师需要引起警惕的地方。

赞(0) 打赏
转载请注明出处:服务器评测 » 让DOS与Unix文件相互兼容
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏