还有,首先定义一下我遇到的samba中文乱码情况,我没有x(x残废多月,用不了也没必要用了).所以我所有的配置都是基于命令行的.
情况一,
smb.conf文件中输入共享中文文件夹的语句如
代码: 全选
[中文文件夹]
path = /home/shzhang
. . .
情况二,
smb.conf文件中输入共享英文文件夹的语句,比如共享"FOLDER"文件夹,win一端网上邻居正常使用,可以放入中文文件,win端打开写入什么都正常,但是在linux端,进入"FOLDER"文件夹,你会看到里面的中文文件名都是乱码,无法在命令行下选中或操作.
情况三,
情况二中的中文文件不删除,我在smb.conf文件中定义smb使用的字符类型为中文,重启后,win端看"FOLDER"内皆为乱码,但是win端继续操作,写入中文文件,本次写入的中文显示依然正常,linux本地显示本次写入的也是正常中文.
总之,就是不管lin那儿乱码成什么样,win这儿使用samba服务都能正常使用中文文件名,只要你不改变linux那儿的配置.
====================解决方法精简版========================
偷懒点,先把smb目前共享的文件中正确显示中文名的文件全部通过网上邻居简切出来,等全部完成了再拷贝回去.
执行 locale命令
查看你的系统所用的字符集,
如果LANG是GB的 就在 smb.conf文件中加入
代码: 全选
#================= character set ================================
display charset = cp936
unix charset = cp936
dos charset = cp936
就在smb.conf文件中加入
代码: 全选
#================= character set ================================
display charset = UTF-8
unix charset = UTF-8
dos charset = UTF-8
代码: 全选
# service smb restart
[/size]
====================解决方法剧情版========================
单位的FC5曾经在一次强行关机(我干的 )中,x崩溃了,崩溃原因似乎跟字库有关,但是在重装了字库后,x依然不举,只能命令行使用,不过自从没了x,这台机子健步如飞.焕发第二春....扯远了,说正经的.
话说这个崩溃后,中文就开始抽风了,多次调整后,ssh可以中文,但是samba不能,在smb.conf里写的中文共享目录,在windows下整个乱码. 只好在smb.conf中全部使用英文,于是乎,windows那边用网上邻居拷贝过来的中文目录和文件,在windows下显示正常,linux本地全部乱码.也就这么将就着用了半年,相安无事....呃,说故事了,又远了,耐心,耐心.物价涨了不要乱扔鸡蛋
终于事发, 工程部要和我们研发部公用服务器,存储他们的文档.但是他们一定要用中文,而且要详细的权限配置,因为中文在linux本地是乱码,所以我无法做到有效的权限配置.只能先解决中文问题.经过....(省略若干字)..找到解决方法
其实不难,ssh正确显示中文,只是和linux本地显示中文的配置有关.
代码: 全选
# vim /etc/sysconfig/i18n
文件内容为
代码: 全选
LANG="zh_CN.GB2312"
LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
SUPPORTED="zh_CN.GB18030:zh_CN.GB2312:zh_CN.UTF-8:zh:en_US.UTF-8:en_US:en:ja_JP.UTF-8:ja_JP:ja"
SYSFONT="lat0-sun16"
SYSFONTTACH="8859-15"
保存退出,注销再进系统,新的字库配置生效(你要不放心就重启,我只是exit了一下,然后又login了)
下面解决samba,
samba默认的是英文的编码规则,所以要在smb.conf文件中写入定义文字编码标准的语句.
且慢!
如果你像我一样,在设置之前已经开始使用samba了,并且共享文件夹中的中文在win的网络邻居是正常显示的,请先通过网络邻居把这些文件移动到windows下,(个人猜测,其实这个移动过程或者拷贝过程中,是存在文件名字符转换的过程的). 如果你不这么做,那么在你配置了samba的中文字符集后, 你在win的网上邻居里看到的都将是乱码,linux本地依然是乱码,总之没有一个地方正常,乱码的后果就是删不掉,也操作不了.但是你恢复了原先的字符集设置后就能恢复原貌.
确保samba共享的那些文件夹中没有中文文件名存在了,可以配置samba了
很简单
先看你本地文件系统的字符集用的是什么
代码: 全选
$ locale
LANG=zh_CN.GB2312
LC_CTYPE="zh_CN.GB2312"
LC_NUMERIC="zh_CN.GB2312"
LC_TIME="zh_CN.GB2312"
LC_COLLATE="zh_CN.GB2312"
LC_MONETARY="zh_CN.GB2312"
LC_MESSAGES="zh_CN.GB2312"
LC_PAPER="zh_CN.GB2312"
LC_NAME="zh_CN.GB2312"
LC_ADDRESS="zh_CN.GB2312"
LC_TELEPHONE="zh_CN.GB2312"
LC_MEASUREMENT="zh_CN.GB2312"
LC_IDENTIFICATION="zh_CN.GB2312"
LC_ALL=
之后就可以对症修改了
代码: 全选
#vim /etc/samba/smb.conf
代码: 全选
#================= character set ================================
display charset = cp936
unix charset = cp936
dos charset = cp936
#如果你的locale是UTF8的,请使用下面三行,注释掉上面3行
#display charset = UTF-8
#unix charset = UTF-8
#dos charset = UTF-8
代码: 全选
# service smb restart
此时你就可以在smb.conf文件中直接共享中文目录了,并且,windows那些网上邻居拷过来的中文文件 在linux本地也是正常显示了.[/size]
====================其他相关========================
#表示用root权限运行,$表示一般用户权限
samba下的权限配置可以结合linux本身的权限配置,
优先级为,linux文件系统的权限最高,之后是samba.
如果要很详细的权限配置,就可以考虑使用ACL,这个我目前在折腾.弄好了再来"忽悠"大家
另外在另一个帖子里看到,有人问smb.conf文件里# ;什么意思, 我看smb的说明里说,这两个都是用来注释的.但从实际观察来看,一般#注释掉的都是描述性的文字, ;注释掉的是有效的命令行.
我现在要用这个ACL是因为两层文件夹,A文件夹下面有abc三个文件夹,工程部要求,我们研发部看不了他们的整个A,然后对于他们,共享文件夹是A,然后进入,abc三个文件夹,不需要网上同时看到A,a,b,c四个文件夹,有四个老总,能看A不能写,管理员可以读写完全的A,经理a能读写文件夹a,只读bc,经理b,只读ac,读写b,经理c,只读ab,读写c.这个功能目前看来只能用acl实现,因为linux本身的权限只有所有人,组,其他,我们这里组的界定不方便.因此只能用acl.
再废话一句,头一次在这儿长篇大论,拍砖时轻点.....