需求:在linux下访问局域网络中另一台计算机的共享资源,另一台计算机的系统可能为windows或者linux。我首先想到的是用mount命令挂载共享资源,后经群里朋友提醒,直接用samba更方便。另外windows访问linux资源也需要运用samba。Linux/Unix之间的文件互访用NFS网络文件系统。
一、mount 在mount共享文件之前,需要要先安装smbfs工具包。原因是Windows网络共享的核心是SMB/CIFS,在linux下要挂接(mount)windows的磁盘共享,就必须安装和使用samba软件包(参看下面的提问)。既然windows网络共享的核心是smb/cifs,那么下面的两条命令都可以实现挂载共享文件了:
#mount -t smbfs //ip/sharefile /mountpoint
#mount -t cifs //ip/sharefile /mountpoint
上面的命令挂载正常,英文路径下互访正常;但中文路径出现乱码,不能正常互访。原因是互访编码不一致,中文用utf8,用下面的命令可以正常识别中文:
#mount -t smbfs -o codepage=cp936,iocharset=utf8 //ip/sharefile /mountpoint
中文文件正常互访,但有Warning: ignoring deprecated smbfs option 'codepage=cp936'。知道原因的朋友留个解释:)
如果有用户名和密码的话:
#mount -t smbfs -o username=****,password=*****,codepage=cp936,iocharset=utf8 //ip/sharefile /mountpoint
卸载命令是:
#umount /mountpoint 或者
#umount //ip/sharefile
提问时间:smb/cifs是什么玩意儿?[1]在mount之前不安装smbfs工具包,能否用-t cifs实现互访?
二、samba 在前一部分中已经用到了samba,虽然已经非常的方便(嘎嘎,mount很强大),但只能要在linux下访问windows文件,我们还要能够在 windows下访问linux共享文件。samba采用server/client架构。通过使用samba客户端可以让linux访问windows 共享资源;通过在linux上配置samba服务器,可以让windows访问linux共享资源。
在linux环境下访问windows共享资源:
首先,查看系统中是否已经安装samba.在ubuntu下用#dpkg -l | grep samba [2],在redhat中用rpm -qa | grep samba. [3] 如果没有安装好samba包,redhat下的安装方法参考[3],ubuntu下使用#apt-get install samba。
现在就可以使用samba访问windows共享资源拉。访问的方式也有两种:
(1)命令方式
命令方式如同第一部分介绍的那样。它不用考虑对中文支持的问题,因为samba能很好的实现中文支持。它的使用命令如下:
查询windows主机共享资源:#smbclient -L SEU-PPCHEN(主机名)或者#smbclient -L //ip
连接共享目录:#smbclient //SEU-PPCHEN/sharefile 或者//ip/sharefile;然后就进入了smb模式,在smb模式下支持大部分的常用命令,可以用help查看有哪些命令。
另外使用smbmount可以实现和第一部分一样的挂载效果。
(2)图形方式(相当于windows下的网络邻居)
在ubuntu的现在版本8.04中,在file browser中就能很好的支持网络邻居了。一,可以通过菜单places->network直接访问;二,也可以在file browser的locate中输入smb:///(查看有哪些主机)或smb://ip(访问具体的主机)。
在redhat和KDE下,参考[3]。
windows下访问linux共享资源 linux提供共享服务,需要配置samba服务器实现共享功能。配置方法参考来自网络上的一篇文章[4],作者不祥。为了能够让windows下的用户通过以太网访问Linux下的共享文件,需要开启Samba服务器,Samba服务器详细配置步骤如下:
1.打开samba的配置文件 vim /etc/samba/smb.conf
2.其中存在如下几个域 [global](全局参数的设置,它对samba的功能具有很大的影响,主要用来设置整个系统规则。
workgroup= 这是你在windows中的域。
server string= 这是在windows中看到你的samba的解释。
netbios name =最好是你的机器名,如果把改句注消,默认的是你LINUX机器名,不过,最好还是自己填上
dos charset=cp936
unix charset=cp936 加上这二句就可以正确显示中文了。
hosts allow 允许登录的linux-samba的主机名单,用IP地址给出,多个IP地址用空格分开,不在名单中的主机将不能得到samba提供的服务,这也是网络安全的一个方面。
printcap name 指定printcap文件地址,通常为/etc/printcap,包含了linux打印机的配置信息。
load printers 允许使用共享打印机时,默认值为yes。
printing 如果使用的打印机是非标准的,那么应该指出打印机系统类型。
log file = /usr/local/samba/var/log.%m
max log size = 0
上面这两行则是Samba日志的相关定义。其记录文件的位置是放在/var/log/samba/%m.log,安装目录不一样,日志可不一样,后面的一条是定义日志记录文件的大小,单位是KB,如果是0的话就不限大小。
guest acount 来宾帐户,表示用哪一个Linux用户作为所要的客户连接,定义Samba缺省的用户账号,这个账号必须在/etc/passwd中。
security 指定安全模式。大多数用户使用user级的安全模式,samba用本地linux口令文件验证。
security = security_level
定义Samba的安全级别,按从低到高分为四级:share,user,server,domain。它们对应的验证方式如下:
share:没有安全性的级别,任何用户都可以不要用户名和口令访问服务器上的资源。
user:samba的默认配置,要求用户在访问共享资源之前资源必须先提供用户名和密码进行验证。
server:和user安全级别类似,但用户名和密码是递交到另外一个服务器去验证,比如递交给一台NT服务器。如果递交失败,就退到user安全级。
domain:这个安全级别要求网络上存在一台Windows的主域控制器,samba把用户名和密码递交给它去验证。
后面三种安全级都要求用户在本linux机器上也要系统帐户。否则是不能访问的。
主要修改和添加的域如下:
2.1列出允许访问的主机ip hosts allow = 192.168.0.1 192.168.0.88
2.2安全模式 security = share
2.3指定共享文件名称和共享文件 [glx_linux]
comment = This is Glx Linux #备注说明
path = /mnt/e_win
guest ok = yes
writable = yes
2.4创建Samba专用用户 创建用户gliet_linux
addusr gliet_linux
passwd gliet_linux
之后将该用户添加到samba中
/etc/samba/smbpasswd -a gliet_linux
2.5清除ip链 service iptables stop
清除所有链: [ 确定 ]
删除用户定义的链: [ 确定 ]
将内建链重设为默认的“ACCEPT”策略: [ 确定 ]
2.6重启网卡 service network restart
正在关闭接口 eth0: [ 确定 ]
关闭环回接口: [ 确定 ]
设置网络参数: [ 确定 ]
弹出环回接口: [ 确定 ]
弹出界面 eth0: [ 确定 ]
3.重启Samba /etc/rc.d/init.d/smb restart (重启samba)
4.好了,在win_xp下登录 //192.168.0.5
输入用户名:gliet_linux和密码后,就可以看到目录glx_linux,该目录是可以被windows用户修改的。
哈哈,windows可以对linux进行操作了,以下是我的一个配置文件:
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]
四、当Linux已经存在乱码文件时,可以通过iconv命令将文件内容的编码转换成utf8. 原Windows rar压缩的文件,Linux系统下解压后打开里边的文件,内容全部乱码。其他类似的情况都可以按照如此办法解决。
之所以出现乱码是因为所压缩的文件中,有的文件是以中文命名。而在windows下中文的编码一般为gbk,而linux下中文的编码一般为utf8,所以在windows下正常打开的文件,到linux下很可能会出现乱码。解决办法为:使用命令iconv对文件内容编码进行转换。例如我有一个文件"linux常用命令"在windows下打开正常,而在linux下打开则会乱码,其解决办法为在终端输入:
iconv -f gbk -t utf8 linux常用命令.txt > linux常用命令.txt.utf8
之后再打开"linux常用命令.txt.utf8"这个文件,该文见的乱码问题就解决了。
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/