前几天使用winscp在windows和linux之间拷贝文件,结果由于编码的设置不当,导致在windows下查看linux上的文件时中文字符全是乱码,而且不能拷贝。google了下winscp乱码相关的问题,但是根据这些方法都没能解决这个问题。于是决定使用大名鼎鼎的samba。下面以Ubuntu 10.04为例,简单的说明samba的配置和使用方法。
1. 安装samba
# apt-get install samba smbfs
启动samba服务
# /etc/init.d/smbd start
# /etc/init.d/smbd restart
停止samba服务
# /etc/init.d/smbd stop
2. 配置samba
samba的配置文件是/etc/samba/smb.conf,该配置文件主要可以分成两部分,一部分是以"[global]"开始的全局设置部分,剩下的则各个共享的设置。下面通过一个简单的例子来说明,配置文件中常用的一些配置的含义,配置文件的内容如下:
[global]
workgroup = WORKGROUP
server string = %h server
netbios name = nc1
server string = Linux Samba Server TestServer
security = share
[public]
path = /opt/public
writeable = yes
browseable = yes
guest ok = yes
[global]这段是全局配置,是必段写的。
workgroup 就是Windows中显示的工作组;
netbios name 就是在Windows中显示出来的计算机名;
server string 就是Samba服务器说明,可以自己来定义;这个不是什么重要的;
security 这是验证和登录方式,这里我们用了share ;验证方式有好多种,这是其中一种;
另外一种常用的是user的验证方式;如果用share呢,就是不用设置用户和密码了;
[public] 这个在Windows中显示出来是共享的目录;
path = 可以设置要共享的目录放在哪里;
writeable 是否可写,这里我设置为可写;
browseable 是否可以浏览,可以;可以浏览意味着,我们在工作组下能看到共享文件夹。
如果您不想显示出来,那就设置为 browseable=no;
guest ok 匿名用户以guest身份登录
添加上述配置后,创建/opt/public目录,并将其所属的用户改为nobody,如下:
# mkdir -p /opt/public
# chown -R nobody:nogroup /opt/public
重启samba,在windows的地址栏中输入“//linux主机ip地址”,就应该可以看到一个public的文件夹,而且你可以往该文件夹写东西,创建新的文件。呵呵,是不是很简单啊,下面在看看其他的一些应用场景。
场景1. 创建一个共享目录,所有的人都读写,且不需要登录
[global]
。。。
security = share
[scene1]
path = /opt/scene1
writeable = yes
browseable = yes
guest ok = yes
# mkdir -p /opt/scene1
# chown -R nobody:nogroup /opt/scene1
场景2. 创建一个共享目录,所有的人都只能读,不能写,且不需要登录
[global]
。。。
security = share
[scene2]
path = /opt/scene2
writeable = no
browseable = yes
guest ok = yes
# mkdir -p /opt/scene2
# chown -R nobody:nogroup /opt/scene2
场景3. 创建一个共享目录,匿名用户不能访问,必须登录才能读写
# 添加用户
# mkdir -p /home/user1
# groupadd user1
# useradd -g user1 -d /home/user1 -s /sbin/nologin user1
# chown -R user1:user1 /home/user1
# 将该用户添加到samba,并为其设置登录密码
#smbpasswd -a user1
New SMB password:
Retype new SMB password:
# 修改samba配置文件
[user1]
path = /home/user1
directory mask = 0755
create mask = 0644
writeable = yes
browseable = yes
valid user = user1
其他的情况可以参考上述配置进行自由的更改。
关于乱码的解决方法:
编码的设置需要根据linux系统的配置做出调整,如果系统的locale是zh_HK.UTF-8等含有UTF-8的编码,则在global中添加
display charset = UTF-8
unix charset = UTF-8
dos charset = cp936
如果locale是zh_CN.GBK或zh_CN.gb2312,则如下设置:
display charset = cp936
unix charset = cp936
dos charset = cp936
隐藏打印机:
如果你使用samba只是进行文件共享,那么你可以不想看到打印机的图标,通过在global中添加如下的配置可以很容易做到。
disable spoolss = yes
3. 使用samba
通过适当的配置,现在直接在windows的地址栏中输入“//linux主机ip地址”就应该能够看到那些共享的文件了。如果你想长期的占用,可以通过windows的“映射网络驱动器”来实现。
同样,在linux下想要访问windows下的文件也很简单,通过mount命令即可。
# mount -t smbfs -o codepage=cp936,username=用户名,password=密码 //ip地址或计算机名/共享文件夹名 挂载点
# smbmount -o codepage=cp936,username=用户名,password=密码 //ip地址或计算机名/共享文件夹名 挂载点
除了mount和smbmount,linux还有很多工具可以查看通过samba共享的文件,这里不再一一细说。