ccidnet????

出版日期:2001-03-05 总期号:999 本年期号:14

本期导读
要闻综合
电脑工作室
渠道与市场
产品与应用
软件与服务
Linux与Windows文件互访



  Linux与Windows文件互访有很多种解决方法。在Linux下,我们可以把Windows分区进行挂载,在Windows下也可以访问ext2文件系统。通过使用Samba,我们还可以在Windows下访问Linux和Unix服务器。通过一个Samba的客户端库,我们甚至可以在Linux和Unix的应用程序里访问Windows文件系统。


  从Linux中访问Windows文件


  在Windows文件系统里,有很多方面要考虑。在DOS里使用的是老式的8.3文件名;在Windows 95里,开始支持长文件名;在更新版的Windows 95里,开始支持FAT32文件系统;在Windows 98里则引入了VFAT文件系统;此外,还有NT文件系统,即NTFS。

  Linux可以访问MS-DOS和VFAT文件系统已有很长时间了,对于NTFS的只读访问的支持,也有些时日了。以前,要想对NTFS分区进行只读访问,需从网上下载驱动程序。从Linux 2.2.x开始,对NTFS的读写支持已经成了内核的一部分。不过,在Linux下访问文件系统可没有在Windows下那么简单。访问前,我们必须首先挂载分区。比如,硬盘分区如下所示:

  /dev/hda1 -- Windows 9x 文件系统

  /dev/hda2 -- Linux swap 分区

  /dev/hda3 -- Linux root 文件系统

  那么,如果想把Windows分区挂载到 /mnt/windows挂载点上,就可以使用如下命令:

  mount /dev/hda1 /mnt/

  windows

  请注意,这里无需指定文件系统类型(比如 mount -t vfat /dev/hda1 /mnt/windows),因为mount命令会先尝试VFAT文件系统,然后才会尝试MS—DOS文件系统。

  执行上述命令后,就可以使用所有的Linux命令来访问Windows文件系统了。我们可以在Windows分区上读写文件,也可以使用vi或者Emacs等编辑器来修改文件。如果我们把Windows分区里的详细信息列出,我们会发现,在该分区里的文件有一些有趣的属性,比如挂载文件系统的人将拥有所有用户和用户组。这是因为Windows 9x里没有用户和用户组对文件所有的概念。

  Linux可以挂载MS-DOS和VFAT文件系统。当使用mount命令时,如果使用如下命令:

  mount -t msdos /dev/hda1 /mnt/win98

  将会挂载分区,但我们只能看到MS-DOS风格的文件名。我们也可以用类似的方式挂载NTFS分区。假设NTFS分区位于/dev/hda1,那么我们只需键入如下命令即可访问该分区:

  mount -t ntfs /dev/hda1 /mnt/win98

  当然,如果要在Windows和Linux中频繁切换,那么重复敲入以上命令将是一件非常烦人的事。我们可以在/etc/fstab文件里加入一行程序以使这个过程自动化。只要在/etc/fstab里加入如下所示的一行程序,就可以在启动时,使Windows 9x的挂载过程自动化:

  /dev/hda1 /mnt/windows vfat defaults 00

  以下是加入这一行后我的fstab文件内容:

  /dev/hda3/ext2 defaults 1 1

  /dev/hda2 swap swap defaults 0 0

  /dev/hda1/mnt/windows vfat

  defaults 0 0

  /dev/fd0 /mnt/floppy auto

  sync,user,noauto,nosuid,nodev,unhide 0 0

  /dev/cdrom /mnt/cdrom auto user,noauto,nosuid,exec,nodev,ro 0 0

  none /proc proc defaults 0 0

  none /dev/pts devpts

  mode=0622 0 0

  在使用软盘时,我们可能需要访问VFAT设备。软盘使得在系统间移动文件变得非常的便利,并且它们一般都是DOS格式,而很少是ext2格式。我们可以用挂载硬盘的方式来挂载软盘,命令如下所示:

  mount -t vfat /dev/fd0 /mnt/floppy

  现在发行的Linux版本中,我们已经可以不用-t vfat参数了,因为Linux会判断出正确的类型。另外一个有用的快捷方式是只用mount /dev/fd0的形式,因为Linux的mount命令可以从/etc/fstab中检索出其它需要的信息。对于mount和umount命令的详细使用,可以分别使用man mount和umount命令来查看。

  很显然,每次使用软盘时都要挂载,而要想使用其它的软盘时又得解除当前挂载,然后重新挂载。这样一个周而复始的过程非常浪费时间。所幸的是,现在很多版本的Linux里都装有一个mtools程序包。它包含有一系列的命令,使得我们可以再也不用对软驱进行挂载和解除挂载操作。对于处理MS-DOS格式的软盘,它有一系列的命令,包括mdir(显示软盘上的文件)、mcopy(从软盘拷贝文件或者拷贝文件到软盘)、mdel等。与MS-DOS的命令相比,这些命令只是在相应的命令前加了一个“m”。如果你的机器上没有安装这个程序包,那么可以从安装盘上进行安装。在Red Hat 7.0里,安装这一程序包的文件是mtools-3.9.7-3.i386.rpm。

  下面是mtools命令的几个实例:

  [root@testy /root]# mdir

  [root@testy /root]# mcopy a:017.zip ./017-v1.zip

  [root@testy /root]# ls -al 017-v1.zip

  如果在网络里同时有Windows和Linux系统,那么有时就会需要在Windows里挂载Linux文件系统。这时我们使用的命令是smbmount。因为smbmount命令和mount命令非常相像,所以使用起来也比较简单。


  在Windows下访问Linux文件


  很显然,我们不仅需要从Linux里访问windows的文件,还常常需要从Windows里访问Linux的文件。根据环境不同,我们有很多种方法来实现这一访问。

   如果你是连在网上,而想从Windows机器上访问Linux服务器,那么Samba是一个理想的解决方案。它看起来很像Windows NT服务器,并且可以让你在Windows系统下访问位于Linux 服务器上的文件。

  对于在同一台电脑上安装了Linux和Windows操作系统且设置为双启动的机器,有时我们可能也需要从Windows里访问位于Linux上的ext2分区。对于这种情况,也有很多种解决办法。这其中包括LTools(用于DOS、Windows 3.x、Windows9.x和NT)、explore2fs (用于 Windows 95 和 Windows NT)、FSDext2 (用于Windows 9x) 以及 ext2fsnt (用于 NT)。所有这些问题的讨论都可以在Filesystems HOWTO中找到,在这一部分文档中还包括下载每一个工具的链接。


  图1 在ext2分区上查看文件。

  以上的每一种操作都用不同的方式。比如,FSDext2和ext2fsnt提供了设备驱动,使用它后,可以在Windows中使用Windows的命令和工具访问ext2分区。LTools和explore2fs提供了可以从Windows中访问ext2的命令。在所有的解决方案中,除了FSDext2只能提供只读访问外,其它所有的方案都可以对ext2分区进行读写操作。

  在Windows 9x 下,Fsdext2非常易于安装。只需要解开文件,运行Install批处理文件,然后重新启动,再把文件系统挂载到一个字母驱动器上即可。图1显示了在ext2分区上查看文件;图2显示了如何把ext2分区挂载到L驱动器或者如何解除挂载。

  有关这一主题的更多信息,可查看Filesystems HOWTO。


  文件互访解决方案


  ——GraphOn

  GraphOn的解决方案适用于网络用户,尤其是中小企业。

  GraphOn Bridges提供了一种功能强大的替代解决方案。对于独立软件供应商来说,Bridges是一个完整的、跨平台的应用程序解决方案,能在网上运行全部特性及可交互的Unix、Linux和Windows应用程序。把Bridges安装在一台标准服务器上,应用程序可在PC端(红旗Linux)上运行。Bridges可与任何的桌面应用程序集成和捆绑,而无需扩充和重写代码。使用Bridges技术在网络上运行Windows 、Unix、Linux应用程序,独立软件供应商可为他们的用户提供更多的增值服务,同时也可调节他们自己在桌面应用程序上的投资。

  Bridges安装完成后,应用程序几乎无需维护。所有的数据和文件均可在服务器上处理、存储和操作,以确保对数据完整性和安全性的维护。由于应用程序驻留在一台中心服务器上,所以系统管理员只需安装一次应用程序,而无需在每台客户机上安装。这种基于服务器的结构,简化了对桌面的管理,并显著地降低了企业拥有应用程序的总成本,消除了无限制升级带来的烦恼和费用。


  未来展望


  不管是从Linux里访问MS-DOS或者VFAT,还是从Windows里访问ext2,总是有人需要从不同的操作系统里访问不同的文件系统,所以以上讨论的工具对于这些人将非常实用。然而,现在的社会里,越来越多的人生活在网络世界里,周围混杂的是Linux和Windows系统,而他们则希望可以访问网络里的所有系统。


  图2 把ext2分区挂载到L驱动器或者解除挂载。

  Samba的smbclient可以提供这种能力,但是它是一个面向命令行的工具。对于大多数人来说,它们更喜欢使用GUI的工具来浏览网络以及在Windows系统上查阅文件。这时,可选择使用KDE的Konqueror包,但是在访问Windows和Samba系统时,它是基于C++库的,而这种库现在已经不被支持,这使得非C++程序在访问Windows系统时比较困难。

  不过不用担心,现在正有人开发一个新的、用C语言写的Samba客户端库。一旦这个库的完全版发行(现在有部分代码已经发行),开发者将会发现,要把对Windows系统的访问整合到应用程序中将变得非常容易。该库将包括GTK+测试程序,可作为欲访问Windows系统的开发者出发点。

  总之,Linux和Windows系统间的互访将变得越来越简单。因为只要有人使用,就会有人开发,结果受益的,当然是广大的使用者。