若是想要在window和linux之間共享文件,那麼用samba。若是僅僅想在Unix like系統之間共享文件,那麼能夠用NFS。linux
這篇文章分爲兩個部分,第一部分只是簡單的用:照着寫的步驟一步步來就能夠實現nfs共享了,時間緊迫的能夠只看這一部分;第二部分是比較詳細的介紹了一些配置,有點乾貨。centos
我用的是centos 6.6(Final) X86_64操做系統。服務器IP:192.168.128.140 ;客戶端IP:192.168.128.136tomcat
先配置個最簡單的server和client可以讓nfs跑起來。服務器
1 [root@www ~]# /etc/init.d/rpcbind start 2 # 若是 rpcbind 本來就已經在執行了,那就不須要啟動啊! 3 4 [root@www ~]# /etc/init.d/nfs start 5 # 有時候某些 distributions 可能會出現以下的警告訊息: 6 exportfs: /etc/exports [3]: No 'sync' or 'async' option specified 7 for export "192.168.100.10:/home/test". 8 Assuming default behaviour ('sync'). 9 # 上面的警告訊息僅是在告知因為我們沒有指定 sync 或 async 的參數, 10 # 則 NFS 將預設會使用 sync 的資訊而已。你能夠不理他,也能夠加入 /etc/exports。 11 12 [root@www ~]# /etc/init.d/nfslock start
這樣服務器就行了。還有若是不出現意外的話,服務器端防火牆必定會阻止客戶端的鏈接。因此爲了簡單直接關了防火牆吧。(開放端口最後講)async
1 2 [root@clientlinux ~]# /etc/init.d/rpcbind start 3 [root@clientlinux ~]# /etc/init.d/nfslock start
1 2 [root@clientlinux ~]# mkdir -p /home/nfs/public 3 [root@clientlinux ~]# mount -t nfs 192.168.128.140:/temp /home/nfs/public #意思是把遠程的/temp文件夾mount到本地的/home/nfs/public文件夾
另外若是不記得服務器共享了哪些文件夾,能夠用命令 showmount -e 服務器端IP 來查詢。ui
好了,在客戶端 cd /homt/nfs/public 你就會發現你進入的實際上是服務器端的/tmp文件夾。你在裏面touch一個文件在返回服務器端的/tmp文件夾看看。spa
上面的配置已經能夠運行nfs了。下面對於有些東西詳細說一下。以爲內容繁雜的而且只是想下用着的能夠不看。操作系統
1. /etc/exports配置文件。看下面的例子:code
1 /tmp 192.168.100.0/24(ro) localhost(rw) *.ev.ncku.edu.tw(ro,sync) 2 /tmp1 *(rw,no_root_squash) 3 /tmp2 192.168.100.123(rw)
意思是服務器有三個文件夾/tmp, /tmp1,/tmp2是共享的,不過他們共享的對象不同。猜一猜也知道共享給了誰^_^。那個誰有幾種書寫方式:server
至於小括號裏面的內容,表示要賦予權限,看下錶:
參數值 | 內容說明 |
rw ro |
該目錄分享的權限是可讀寫 (read-write) 或惟讀 (read-only),但最終能不能讀寫,仍是與檔案系統的 rwx 及身份有關。 |
sync async |
sync 表明資料會同步寫入到記憶體與硬碟中,async 則表明資料會先暫存於記憶體當中,而非直接寫入硬碟! |
no_root_squash root_squash |
客戶端使用 NFS 檔案系統的賬號若爲 root 時,服務器端該如何判斷這個賬號的身份?預設的狀況下,客戶端 root 的身份會由 root_squash 的設定壓縮成 nfsnobody, 如此對服務器的系統會較有保障。但若是你想要開放客戶端使用 root 身份來操做服務器的檔案系統,那麼這裏就得要開 no_root_squash 才行! |
all_squash | 不論登入 NFS 的使用者身份爲什麼, 他的身份都會被壓縮成爲匿名使用者,一般也就是 nobody(nfsnobody) 啦! |
anonuid anongid |
anon 意指 anonymous (匿名者) 前面關於 *_squash 提到的匿名使用者的 UID 設定值,一般爲 nobody(nfsnobody),可是你能夠自行設定這個 UID 的值!固然,這個 UID 必須要存在於你的 /etc/passwd 當中! anonuid 指的是 UID 而 anongid 則是羣組的 GID 蘿。 |
以上是一些常見的設置,跟多的能夠用 man exports 命令去查看。
2. 關於客戶端鏈接服務器端用戶的問題。(假設客戶端是用tomcat用戶登陸的,那他鏈接服務器並在共享文件夾裏新建立了一個文件,那麼這個文件全部者是誰呢?)
I. 客戶端鏈接時候,對普通用戶的檢查
a. 若是明確設定了普通用戶被壓縮的身份,那麼此時客戶端用戶的身份轉換爲指定用戶;
b. 若是NFS server上面有同名用戶,那麼此時客戶端登陸帳戶的身份轉換爲NFS server上面的同名用戶;
c. 若是沒有明確指定,也沒有同名用戶,那麼此時 用戶身份被壓縮成nfsnobody;
II. 客戶端鏈接的時候,對root的檢查
a. 若是設置no_root_squash,那麼此時root用戶的身份被壓縮爲NFS server上面的root;
b. 若是設置了all_squash、anonuid、anongid,此時root 身份被壓縮爲指定用戶;
c. 若是沒有明確指定,此時root用戶被壓縮爲nfsnobody;
d. 若是同時指定no_root_squash與all_squash 用戶將被壓縮爲 nfsnobody,若是設置了anonuid、anongid將被壓縮到所指定的用戶與組;
3.