需求:在linux下訪問(wèn)局域網(wǎng)絡(luò)中另一臺(tái)計(jì)算機(jī)的共享資源,另一臺(tái)計(jì)算機(jī)的系統(tǒng)可能為windows或者linux。我首先想到的是用mount命令掛載共享資源,后經(jīng)群里朋友提醒,直接用samba更方便。另外windows訪問(wèn)linux資源也需要運(yùn)用samba。Linux/Unix之間的文件互訪用NFS網(wǎng)絡(luò)文件系統(tǒng)。
一、mount 在mount共享文件之前,需要要先安裝smbfs工具包。原因是Windows網(wǎng)絡(luò)共享的核心是SMB/CIFS,在linux下要掛接(mount)windows的磁盤(pán)共享,就必須安裝和使用samba軟件包(參看下面的提問(wèn))。既然windows網(wǎng)絡(luò)共享的核心是smb/cifs,那么下面的兩條命令都可以實(shí)現(xiàn)掛載共享文件了:
#mount -t smbfs //ip/sharefile /mountpoint
#mount -t cifs //ip/sharefile /mountpoint
上面的命令掛載正常,英文路徑下互訪正常;但中文路徑出現(xiàn)亂碼,不能正常互訪。原因是互訪編碼不一致,中文用utf8,用下面的命令可以正常識(shí)別中文:
#mount -t smbfs -o codepage=cp936,iocharset=utf8 //ip/sharefile /mountpoint
中文文件正常互訪,但有Warning: ignoring deprecated smbfs option 'codepage=cp936'。知道原因的朋友留個(gè)解釋?zhuān)海?br>如果有用戶(hù)名和密碼的話:
#mount -t smbfs -o username=****,password=*****,codepage=cp936,iocharset=utf8 //ip/sharefile /mountpoint
卸載命令是:
#umount /mountpoint 或者
#umount //ip/sharefile
提問(wèn)時(shí)間:smb/cifs是什么玩意兒?[1]在mount之前不安裝smbfs工具包,能否用-t cifs實(shí)現(xiàn)互訪?
二、samba 在前一部分中已經(jīng)用到了samba,雖然已經(jīng)非常的方便(嘎嘎,mount很強(qiáng)大),但只能要在linux下訪問(wèn)windows文件,我們還要能夠在 windows下訪問(wèn)linux共享文件。samba采用server/client架構(gòu)。通過(guò)使用samba客戶(hù)端可以讓linux訪問(wèn)windows 共享資源;通過(guò)在linux上配置samba服務(wù)器,可以讓windows訪問(wèn)linux共享資源。
在linux環(huán)境下訪問(wèn)windows共享資源:
首先,查看系統(tǒng)中是否已經(jīng)安裝samba.在ubuntu下用#dpkg -l | grep samba [2],在redhat中用rpm -qa | grep samba. [3] 如果沒(méi)有安裝好samba包,redhat下的安裝方法參考[3],ubuntu下使用#apt-get install samba。
現(xiàn)在就可以使用samba訪問(wèn)windows共享資源拉。訪問(wèn)的方式也有兩種:
(1)命令方式
命令方式如同第一部分介紹的那樣。它不用考慮對(duì)中文支持的問(wèn)題,因?yàn)閟amba能很好的實(shí)現(xiàn)中文支持。它的使用命令如下:
查詢(xún)windows主機(jī)共享資源:#smbclient -L SEU-PPCHEN(主機(jī)名)或者#smbclient -L //ip
連接共享目錄:#smbclient //SEU-PPCHEN/sharefile 或者//ip/sharefile;然后就進(jìn)入了smb模式,在smb模式下支持大部分的常用命令,可以用help查看有哪些命令。
另外使用smbmount可以實(shí)現(xiàn)和第一部分一樣的掛載效果。
(2)圖形方式(相當(dāng)于windows下的網(wǎng)絡(luò)鄰居)
在ubuntu的現(xiàn)在版本8.04中,在file browser中就能很好的支持網(wǎng)絡(luò)鄰居了。一,可以通過(guò)菜單places->network直接訪問(wèn);二,也可以在file browser的locate中輸入smb:///(查看有哪些主機(jī))或smb://ip(訪問(wèn)具體的主機(jī))。
在redhat和KDE下,參考[3]。
windows下訪問(wèn)linux共享資源 linux提供共享服務(wù),需要配置samba服務(wù)器實(shí)現(xiàn)共享功能。配置方法參考來(lái)自網(wǎng)絡(luò)上的一篇文章[4],作者不祥。為了能夠讓windows下的用戶(hù)通過(guò)以太網(wǎng)訪問(wèn)Linux下的共享文件,需要開(kāi)啟Samba服務(wù)器,Samba服務(wù)器詳細(xì)配置步驟如下:
1.打開(kāi)samba的配置文件 vim /etc/samba/smb.conf
2.其中存在如下幾個(gè)域 [global](全局參數(shù)的設(shè)置,它對(duì)samba的功能具有很大的影響,主要用來(lái)設(shè)置整個(gè)系統(tǒng)規(guī)則。
workgroup= 這是你在windows中的域。
server string= 這是在windows中看到你的samba的解釋。
netbios name =最好是你的機(jī)器名,如果把改句注消,默認(rèn)的是你LINUX機(jī)器名,不過(guò),最好還是自己填上
dos charset=cp936
unix charset=cp936 加上這二句就可以正確顯示中文了。
hosts allow 允許登錄的linux-samba的主機(jī)名單,用IP地址給出,多個(gè)IP地址用空格分開(kāi),不在名單中的主機(jī)將不能得到samba提供的服務(wù),這也是網(wǎng)絡(luò)安全的一個(gè)方面。
printcap name 指定printcap文件地址,通常為/etc/printcap,包含了linux打印機(jī)的配置信息。
load printers 允許使用共享打印機(jī)時(shí),默認(rèn)值為yes。
printing 如果使用的打印機(jī)是非標(biāo)準(zhǔn)的,那么應(yīng)該指出打印機(jī)系統(tǒng)類(lèi)型。
log file = /usr/local/samba/var/log.%m
max log size = 0
上面這兩行則是Samba日志的相關(guān)定義。其記錄文件的位置是放在/var/log/samba/%m.log,安裝目錄不一樣,日志可不一樣,后面的一條是定義日志記錄文件的大小,單位是KB,如果是0的話就不限大小。
guest acount 來(lái)賓帳戶(hù),表示用哪一個(gè)Linux用戶(hù)作為所要的客戶(hù)連接,定義Samba缺省的用戶(hù)賬號(hào),這個(gè)賬號(hào)必須在/etc/passwd中。
security 指定安全模式。大多數(shù)用戶(hù)使用user級(jí)的安全模式,samba用本地linux口令文件驗(yàn)證。
security = security_level
定義Samba的安全級(jí)別,按從低到高分為四級(jí):share,user,server,domain。它們對(duì)應(yīng)的驗(yàn)證方式如下:
share:沒(méi)有安全性的級(jí)別,任何用戶(hù)都可以不要用戶(hù)名和口令訪問(wèn)服務(wù)器上的資源。
user:samba的默認(rèn)配置,要求用戶(hù)在訪問(wèn)共享資源之前資源必須先提供用戶(hù)名和密碼進(jìn)行驗(yàn)證。
server:和user安全級(jí)別類(lèi)似,但用戶(hù)名和密碼是遞交到另外一個(gè)服務(wù)器去驗(yàn)證,比如遞交給一臺(tái)NT服務(wù)器。如果遞交失敗,就退到user安全級(jí)。
domain:這個(gè)安全級(jí)別要求網(wǎng)絡(luò)上存在一臺(tái)Windows的主域控制器,samba把用戶(hù)名和密碼遞交給它去驗(yàn)證。
后面三種安全級(jí)都要求用戶(hù)在本linux機(jī)器上也要系統(tǒng)帳戶(hù)。否則是不能訪問(wèn)的。
主要修改和添加的域如下:
2.1列出允許訪問(wèn)的主機(jī)ip hosts allow = 192.168.0.1 192.168.0.88
2.2安全模式 security = share
2.3指定共享文件名稱(chēng)和共享文件 [glx_linux]
comment = This is Glx Linux #備注說(shuō)明
path = /mnt/e_win
guest ok = yes
writable = yes
2.4創(chuàng)建Samba專(zhuān)用用戶(hù) 創(chuàng)建用戶(hù)gliet_linux
addusr gliet_linux
passwd gliet_linux
之后將該用戶(hù)添加到samba中
/etc/samba/smbpasswd -a gliet_linux
2.5清除ip鏈 service iptables stop
清除所有鏈: [ 確定 ]
刪除用戶(hù)定義的鏈: [ 確定 ]
將內(nèi)建鏈重設(shè)為默認(rèn)的“ACCEPT”策略: [ 確定 ]
2.6重啟網(wǎng)卡 service network restart
正在關(guān)閉接口 eth0: [ 確定 ]
關(guān)閉環(huán)回接口: [ 確定 ]
設(shè)置網(wǎng)絡(luò)參數(shù): [ 確定 ]
彈出環(huán)回接口: [ 確定 ]
彈出界面 eth0: [ 確定 ]
3.重啟Samba /etc/rc.d/init.d/smb restart (重啟samba)
4.好了,在win_xp下登錄 //192.168.0.5
輸入用戶(hù)名:gliet_linux和密碼后,就可以看到目錄glx_linux,該目錄是可以被windows用戶(hù)修改的。
哈哈,windows可以對(duì)linux進(jìn)行操作了,以下是我的一個(gè)配置文件:
security = user
[glx_linux_write_win_share]
comment = This is Write test
path = /home/gliet/win
guest ok = yes
writable = yes
[glx_linux_read_win_tar_share]
comment = This is Read test
path = /home/gliet/tar
guest ok = yes
read only = yes
三、NFS(Networks File System)
[5]
四、當(dāng)Linux已經(jīng)存在亂碼文件時(shí),可以通過(guò)iconv命令將文件內(nèi)容的編碼轉(zhuǎn)換成utf8. 原Windows rar壓縮的文件,Linux系統(tǒng)下解壓后打開(kāi)里邊的文件,內(nèi)容全部亂碼。其他類(lèi)似的情況都可以按照如此辦法解決。
之所以出現(xiàn)亂碼是因?yàn)樗鶋嚎s的文件中,有的文件是以中文命名。而在windows下中文的編碼一般為gbk,而linux下中文的編碼一般為utf8,所以在windows下正常打開(kāi)的文件,到linux下很可能會(huì)出現(xiàn)亂碼。解決辦法為:使用命令iconv對(duì)文件內(nèi)容編碼進(jìn)行轉(zhuǎn)換。例如我有一個(gè)文件"linux常用命令"在windows下打開(kāi)正常,而在linux下打開(kāi)則會(huì)亂碼,其解決辦法為在終端輸入:
iconv -f gbk -t utf8 linux常用命令.txt > linux常用命令.txt.utf8
之后再打開(kāi)"linux常用命令.txt.utf8"這個(gè)文件,該文見(jiàn)的亂碼問(wèn)題就解決了。
reference
[1]http://zhidao.baidu.com/question/7819626.html?fr=qrl
[2]http://wiki.ubuntu.org.cn/UbuntuSkills
[3]http://www.chinaitpower.com/2005September/2005-09-13/205372.html
[4]http://www.linux-cn.com/html/linux/beginner/20070524/41617.html
[5]http://blog.163.com/liang8421@126/blog/static/894819572008102774710496/