1. 程式人生 > >linux下掛載windows上的共享目錄,並設定所有者為非root使用者

linux下掛載windows上的共享目錄,並設定所有者為非root使用者

參考了很多文章,這裡總結下我得出來的最優答案(針對我的需求而言)吧,但是還是存在bug,稍後指出!

以下是我的bash指令碼,防止多次重複掛載,相信看了就能明白:

[[email protected] share]$ cat m.sh 
#!/bin/bash

src="//192.168.1.77/game"
dest="/home/zcm/share/game"
cmd="mount -t cifs -o rw,username=admin,password=1111,uid=1000,gid=1000,iocharset=cp936,file_mode=0777,dir_mode=0777 $src $dest"

if [ `df | grep share | wc -l` -eq 0 ]; then
	echo "not mounted"
	echo $cmd
	$cmd
else
	echo "mounted"
	echo umount $dest
	umount $dest
fi


通過這種方式掛載後,$dest目錄就能屬於非root使用者zcm了,同時新建的檔案或目錄的許可權都為0777,即同時具有rwx許可權。

簡單說明:admin / 1111為訪問windows上共享目錄時的使用者名稱和密碼, uid和gid後的1000是linux下使用者zcm的使用者id和組id,可通過"id zcm“看到

bug:

我嘗試通過cocos new 建立一個HelloWorld工程到$dest目錄下,在建立過程中會失敗,提示無法獲取“$dest"目錄下要建立的檔案的狀態,接下來掛載的目錄就無法訪問了,只有重啟windows後重新掛載才行。

這個問題,還未找到解決辦法,提示是"I/O錯誤",我想是不是與-t cifs這種協議本身有關呢,因為我是在這個共享目錄中建立目錄的,從結果來看,有部分檔案和目錄是建立成功了,但是有些卻失敗,不解。若有解決方案,希望可以交流下。

copy其他普通目錄到這個共享目錄下,我未作實際測試,因為老要重啟windows,下次再試吧。

==================================================================

以上的mount方式,只有執行一次才能掛載上去。如果要讓系統啟動時自動掛載上去,需要在/etc/fstab檔案末尾新增一行掛載項,如:

//192.168.1.77/game	/home/zcm/share/game cifs defaults,username=admin,password=1111,uid=1000,gid=1000	0 2


這裡第4列的選項與mount -o 時的內容不一定完全相容,可能有些在mount中能識別的選項在fstab中無法識別的,如file_mode等。