Friday, September 11, 2009

就是不使用GUI的samba browser!

如果问我: 使用过Gnome, 它给你最大的印象有哪些?
我一定会说出nautilus. 因为它的功能实大强大, samba的浏览就是一个印象很深刻的功能

我记得有一次使用mount无法加载一个smbfs(其实是不知道使用什么参数, 现在也不知道), 但是nautilus简单完成了

在gentoo下, 因为为了省时间(make的时间实在太久), 一直没有使用nautilus. 近排又想出了samba的GUI browser.
除了nautilus还其实后备?

在linux下, 还有一个比较小型一点的samba browser: LinNeighborhood
使用equery depgraph查看了一下依懒, 不算多. 本想动手emerge一个, 但是又想到
1. samba常在服务器上使用.
2. 使用GUI常常会有"黑箱"的感觉, 有error不能方便在stderr中打印出现
结果还是停下手. 决定搞命令行的!

方便, 快速使用samba的share. 应该使用smbclient, 并非是mount

方便快速使用samba, 应该要:
1. smbclient使用方法
2. nbtscan对网络搜索方法
3. NetBIOS name的使用
下面反序讲述上面3种方法

nbtscan对网络搜索方法

使用GUI browser方便之一就是可以查看整个windows share网络的情况, 比较"网络邻居":

在linux下, 可以使用nbtscan去搜索:
1. 得到整个网段的windows share机器列表
2. 得到NetBIOS名字

例如:
jessinio@niolaptop ~ $ nbtscan  192.168.10.0/24
Doing NBT name scan for addresses from 192.168.10.0/24

IP address       NetBIOS Name     Server    User             MAC address      
------------------------------------------------------------------------------
192.168.10.0    Sendto failed: Permission denied
192.168.10.2     RAINLY-PC        <server>  <unknown>        08-00-27-2c-58-7c
192.168.10.105   NIOLAPTOP        <server>  NIOLAPTOP        00-00-00-00-00-00
192.168.10.106   NIOWIN           <server>  <unknown>        08-00-27-e9-70-63

可以看到, 在192网段有三台机器开了samba服务

nbtscan软件主页: http://www.inetcat.net/software/nbtscan.html
* 不知道是网络不稳定还是nbtscan的问题, 有时搜索的结果不一样的
* 当搜索不出时, 可能使用IP, 硬要使用NetBIOS的话, 可以:wbinfo -I 192.168.10.105 得到NetBIOS name, 但是这时需要winbindd的支持

NetBIOS name的使用

使用NetBIOS name主要是方便指定主机, 如果在smbclient中使用IP去指定机器的话, 可以不使用NetBIOS name
NetBIOS name全名NetBIOS name service, 与DNS是同一类服务!
* 关于NetBIOS name service应见: http://en.wikipedia.org/wiki/NetBIOS#Name_service
例如:
jessinio@niolaptop ~ $ ping NIOWIN
PING NIOWIN (192.168.10.106) 56(84) bytes of data.
64 bytes from 192.168.10.106: icmp_seq=1 ttl=128 time=0.514 ms
* 蓝色的NIOWIN就是使用nbtscan搜索出的NetBIOS name

使用NetBIOS name需要server和client都要有配置!

服务器端:

1. linux下: samba默认就有NetBIOS的功能. smb.conf还有N多关于NetBIOS的配置
2. windows下: 需要在control pannel -> network connections的网卡配置中启用NetBIOS:

客户端:

对我而言, 客户端就是linux. 需要smbclient, ping等程序都可以使用NetBIOS name service, 需要:
1. 编译samba时, 需要编译入winbind功能
2. 配置nsswitch.conf

如下是man winbindd的手册内容:
           ## only available on IRIX: use winbind to resolve hosts:
           # hosts:        files dns winbind
           ## All other NSS enabled systems should use libnss_wins.so like this:
           hosts:          files dns wins
* linux是使用wins, nss使用的库路径为:
jessinio@niolaptop /tmp $ equery files samba|grep libnss
/usr/lib/libnss_winbind.so
/usr/lib/libnss_winbind.so.2
/usr/lib/libnss_wins.so
/usr/lib/libnss_wins.so.2

所以, 只需要在/etc/nsswitch.conf中的hosts一列中加入wins就可以让程序去查询NetBIOS name service


smbclient的使用

上面一大段内容, 只是为了两点:
1. 了解网段中的windows (samba) share的机器
2. 使用NetBIOS name
为使用smbclient提供了一些方便的基础. 现在需要使用smbclient去实际操作数据

列出share point:
smbclient -L //<netbios name>

得出share point后, 登陆samba空间:
jessinio@niolaptop ~ $ smbclient //NIOWIN/personal
Password:
Domain=[NIOWIN] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
smb: \>
* NIOWIN为NetBIOS name, personal为share point
smbclient为ftp操作方式, 多数操作看help可以快速学会.
有两个命令需要注意:
1. mput
2. mget
这两个命令与两个switch相关:
1. prompt: 使用mput和mget命令时, 可以使用prompt默认回答y. 一次prompt只能使用一次mput和mget!
2. recurse: 使用mput和mget命令时, 可以使用recurse去操作子目录, 否则子目录会成为一个empty文件
这两个命令是无参数的, 就是说: 单次数打开命令, 双次数为关闭命令
* prompt和recurse在使用上有点重要, 应该多试一下. 本人没有这种描述能力和文章长度不想太长太臭.不说!

smbclient还有一个-c选项, 成了no-interactive方式. happy!






No comments:

Post a Comment

Note: Only a member of this blog may post a comment.