Windows與Linux檔案系統互訪的幾種方法

shentar.me發表於2014-08-22

首先,我們知道基於檔案的幾種服務: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 = / 
  creat 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系統的防火牆未開啟

相關文章