Windows與Linux檔案系統互訪的幾種方法
首先,我們知道基於檔案的幾種服務: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
- 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服務處於啟動狀態,如下圖:
選擇需要共享的目錄,右鍵,屬性,選擇“共享”頁,如下圖:
選擇在網路上共享這個資料夾,並指定共享名。根據需要選擇是否允許遠端使用者修改該資料夾。這樣這個資料夾就被共享給遠端訪問了。
在Linux系統下掛載該共享:
- [[email protected] ~]# mount -t cifs -o username="Test" //192.168.1.100/sourcecode /root/sourcecode
- Password for [email protected]//192.168.1.100/sourcecode:
按照要求輸入指定使用者的密碼即可。
此時,Windows的共享sourcecode目錄就已經掛載到Linux系統上面了,Linux系統可以像訪問本地目錄一樣訪問該目錄了。
這種方法應該是更好的訪問方式,因為一般而言,我們操作的檔案和工作空間都是在Windows上面的,只有少數時候,需要在Linux上面進行編譯,除錯。但是用起來稍顯麻煩。注意,此前曾遇到過Windows系統與虛擬出來的Linux系統之間無法傳輸資料的問題,原因是Windows系統的防火牆未開啟。