IT技术博客大学习 共学习 共进步

Windows与Linux文件系统互访的几种方法

忘我的追寻 2014-09-17 13:37:30 浏览 3,983 次

首先,我们知道基于文件的几种服务:ftp,sftp,这两种服务都是文件传输服务,偏重于网络传输,并不是实时互访。通常,我们需要在远程和本地同时操作同一个目录,如:在Windows下使用各种强大的IDE编辑代码,在Linux下编译和运行该代码。如果在Windows下编写好代码再拷贝到Linux下编译,这样修改时很费事,直接在Linux下修改,还要同步回Windows,相当费事。当然有人会说,所有的工作都在Linux下搞定,VI、Linux命令行足够强大,没有需要使用Windows系统的理由,本文的重点不在讨论命令行熟练程度与工作效率的问题。

怎样像访问本地文件系统一样访问远程的文件呢?如果远程的系统与本地系统是不同类型的,又该如何做呢。

我们知道,在Windows系统之间,可以通过共享目录的方式,让远程系统直接访问。其实这里是Windows提供一种远程文件系统机制,NAS协议的一种——CIFS协议。如果是Linux系统呢,同样有另外一种NAS协议——NFS协议来实现远程访问。那么这两种NAS协议能否互通呢?答案是否定的。虽然二者不能互通,但是,在Linux系统上面已经有了CIFS协议的服务端和客户端的实现,这样,无论是Linux给Windows共享还是Windows给Linux共享都可以借助这些已有的实现来做到了。

相反的,Windows上面有没有NFS的客户端或者服务端呢?也有,但是不常用,这里就不详细介绍了。

这里主要围绕着Linux上面使用CIFS协议来阐述如何实现两个系统之间的跨文件系统,跨操作系统共享。按照上面的描述,有两种方式来实现共享。Linux分别作为CIFS的服务端和客户端。下面分别就这两种方式来说明操作步骤和简单的原理介绍:

一、Samba软件实现共享Linux文件系统给Windows用户

Samba软件被誉为10大最有价值的开源软件之第五位。其获取方式非常容易,配置使用也非常简单。下面以fedora系统为例,先看一下本地是否已经安装好samba,如果/etc/init.d/smb 文件存在,则说明已经安装好了samba软件,否则使用如下命令安装:

yum install samba

安装完成后,修改配置文件,打开:/etc/samba/smb.conf,在文件末尾加上如下配置:

[root]
  comment = root
  path = / 
  create mask = 64
  writeable = yes 
  browseable = yes
  valid users = root

这个配置的意思是,创建一个名为root的共享,将根文件目录“/”共享给用户。允许登录的用户名是root。

然后给samba系统添加root用户,使用如下命令:

smbpasswd -a root

按照提示设置root用户的密码。

重新启动samba服务。

service smb restart


检查smb进程是否已经运行:

root      1787  0.0  0.4  33068  4784 ?        Ss   21:51   0:00 smbd
root      1788  0.0  0.2  33068  2580 ?        S    21:51   0:00  \_ smbd



在需要访问该Linux系统的Windows客户机上面,打开Windows的资源管理器,在地址栏输入:\\192.168.1.110

会发现,提示有一个共享root,双击访问时,提示输入用户名和密码,输入此前配置的root用户和密码即可访问。这里就是Samba软件实现了CIFS的服务端,Windows资源管理作为客户端访问远程的共享文件系统。为了更为方便的使用该文件系统,还可以将该共享映射成一个本地的盘符,让Windows上面的各种工具像使用本地磁盘一样使用该目录。所有在Windows上面对该共享做的操作都会实时同步到Linux系统上面。

二、Linux访问Windows的共享

上面的借助于Samba的方式是大家常用的。还有一种,Windows系统天然就是一个CIFS的服务端和客户端,既然Windows系统可以给Windows系统共享目录,那么Linux系统能否访问这些共享呢?答案是肯定的,由于有强大的VFS支撑,Linux支持挂载和访问各种文件系统。mount工具支持挂在CIFS甚至NTFS的文件系统。如果是Windows本机上面的Linux虚拟机,那么可以直接通过虚拟机管理软件,如Vmware直接共享本地的磁盘分区给Linux系统,Linux系统根据Windows的磁盘分区的文件系统类型挂载即可。这里不详述该方案。

进入本段的正题,首先我们需要共享一个Windows的目录:

下面以Windows XP为例,Windows 7未做验证,应该类似。在共享之前,首先需要确保Windows系统的server服务处于启动状态,如下图:

server服务启动

选择需要共享的目录,右键,属性,选择“共享”页,如下图:

配置共享


选择在网络上共享这个文件夹,并指定共享名。根据需要选择是否允许远程用户修改该文件夹。这样这个文件夹就被共享给远程访问了。

共享目录

在Linux系统下挂载该共享:

[root@f2 ~]# mount -t cifs -o username="Test" //192.168.1.100/sourcecode /root/sourcecode
Password for Test@//192.168.1.100/sourcecode:  



按照要求输入指定用户的密码即可。

此时,Windows的共享sourcecode目录就已经挂载到Linux系统上面了,Linux系统可以像访问本地目录一样访问该目录了。

这种方法应该是更好的访问方式,因为一般而言,我们操作的文件和工作空间都是在Windows上面的,只有少数时候,需要在Linux上面进行编译,调试。但是用起来稍显麻烦。注意,此前曾遇到过Windows系统与虚拟出来的Linux系统之间无法传输数据的问题,原因是Windows系统的防火墙未开启,参见:《Windows XP不能向VMware虚拟机传输大文件的问题分析和解决》一文。

建议继续学习

  1. 更改 Windows 10 命令行字体 (阅读 3,623)
  2. 为什么 Windows 的文件系统会有盘符,使用反斜杠分割路径 (阅读 2,963)
  3. windows 快捷键 总结 (阅读 2,782)
  4. 浅析Windows的访问权限检查机制 (阅读 2,605)
  5. Windows主机的性能监控 (阅读 2,503)
  6. 回忆Windows开发中的古老概念 (阅读 2,301)