使用samba实现linux,windows间文件共享

经常在linux下需要用到windows下的文件,但是将文件通过ftp上传到linux上又很浪费时间,而且很浪费磁盘的空间,也很难保证两台机器上文件的同步,要是能够像windows之间那样直接进行共享就好了,下面我就们就来看看如何在linux和windows下面共享文件呢。

本文是一台windows7和两台RedHat5.3机器上进行测试,windows7IP地址为192.168.31.226,机器名为WANGHAIFENG-PC,Linux的IP分别是192.168.31.145和192.168.31.167。

(一)检查和安装samba是否安装

(1)分别检查两台机器samba的安装情况,

# uname -r

2.6.18-53.el5//192.168.31.145

[root@dhcp_hostmnt]#rpm-qa|grepsamba

samba-client-3.0.25b-0.el5.4

system-config-samba-1.2.39-1.el5

samba-3.0.25b-0.el5.4

samba-common-3.0.25b-0.el5.4

# uname -r

2.6.18-53.el5//192.168.31.167

#rpm-qa|grepsamba

samba-common-3.0.25b-0.el5.4

samba-client-3.0.25b-0.el5.4

从上面可以看出,145安装了samba的服务端和客户端,而在167上只安装了samba的客户端,因此在145能够查看和共享文件,而在167上只能查看文件,假如需要共享文件,可以在RedHat的安装光盘中获得samba-3.0.25b-0.el5.4.rpm进行安装,system-config-samba-1.2.39-1.el5是samba图形化的配置程序。

(2)安装samba Server端,在192.168.31.167上进行安装

#rpm -Uvh samba-3.0.33-3.7.el5.i386.rpm

warning:samba-3.0.33-3.7.el5.i386.rpm:HeaderV3DSAsignature:NOKEY,keyID37017186

error:Faileddependencies:

perl(Convert::ASN1)isneededbysamba-3.0.33-3.7.el5.i386

        samba-common = 0:3.0.33-3.7.el5 is needed by samba-3.0.33-3.7.el5.i386

这是由于原先的Samba版本比现有的版本低,因此需要进行升级,否则无法安装。

# rpm -Uvh samba-common-3.0.33-3.7.el5.i386.rpm

warning:samba-common-3.0.33-3.7.el5.i386.rpm:HeaderV3DSAsignature:NOKEY,keyID37017186

error:Faileddependencies:

        samba-common = 0:3.0.25b-0.el5.4 is needed by (installed) samba-client-3.0.25b-0.el5.4.i386

由于samba-client依赖于现在的samba-common,因此先删除samba-client,然后再升级安装samba-common

# rpm -e samba-client-3.0.25b-0.el5.4.i386

#rpm-Uvhsamba-common-3.0.33-3.7.el5.i386.rpm

warning:samba-common-3.0.33-3.7.el5.i386.rpm:HeaderV3DSAsignature:NOKEY,keyID37017186

Preparing...###########################################[100%]

   1:samba-common           ########################################### [100%]

继续安装samba-3.0.33-3.7.el5.i386.rpm

#rpm -Uvh samba-3.0.33-3.7.el5.i386.rpm

warning:samba-3.0.33-3.7.el5.i386.rpm:HeaderV3DSAsignature:NOKEY,keyID37017186

error:Faileddependencies:

        perl(Convert::ASN1) is needed by samba-3.0.33-3.7.el5.i386

从上图可以看出来还缺少perl(Convert::ASN1) 这个模块,在安装光盘中找到perl-Convert-ASN1-0.20-1.1.noarch.rpm这个文件

# rpm -Uvh perl-Convert-ASN1-0.20-1.1.noarch.rpm

warning:perl-Convert-ASN1-0.20-1.1.noarch.rpm:HeaderV3DSAsignature:NOKEY,keyID37017186

Preparing...###########################################[100%]

1:perl-Convert-ASN1###########################################[100%]

#rpm-Uvhsamba-3.0.33-3.7.el5.i386.rpm

warning:samba-3.0.33-3.7.el5.i386.rpm:HeaderV3DSAsignature:NOKEY,keyID37017186

Preparing...###########################################[100%]

1:samba###########################################[100%]

#rpm-Uvhsamba-client-3.0.33-3.7.el5.i386.rpm

warning:samba-client-3.0.33-3.7.el5.i386.rpm:HeaderV3DSAsignature:NOKEY,keyID37017186

Preparing...###########################################[100%]

1:samba-client###########################################[100%]

#rpm-qa|grepsamba

samba-common-3.0.33-3.7.el5

samba-3.0.33-3.7.el5

samba-client-3.0.33-3.7.el5

samba就已经安装完成了,上面这些安装文件都能够在RedHat的安装CD中找到。

(3)添加samba用户

使用smbpasswd添加samba用户,用户必须是linux系统中已有的用户,密码则不必和系统用户相同。

# smbpasswd root

NewSMBpassword:

RetypenewSMBpassword:

Failedtofindentryforuserroot.

Failed to modify password entry for user root

出现上面这个错的原因是因为需要为root用户创建一个用户,使用smbpasswd –a root就可以创建一个entry了,再次调用smbpasswd就不需要使用-a选项了, -x上删除用户。

# smbpasswd -a root

NewSMBpassword:

RetypenewSMBpassword:

Addeduserroot.

#smbpasswdroot

NewSMBpassword:

Retype new SMB password:

# smbpasswd -a wanghaifeng

NewSMBpassword:

RetypenewSMBpassword:

Failed to modify password entry for user wanghaifeng

出现上述错误的原因是因为在这台系统中不存在wanghaifeng这个用户,假如需要可以使用adduser添加用户。

(4)samba配置文件

smaba的配置文件都/etc/samba/下面,smb.conf是主配置文件。

(二)在windows下面开启共享

在D盘中新建文件夹samba_test,右击->属性->共享,点击共享按钮,根据需要添加对应的用户,可以选择不同的权限,位置是\\WANGHAIFENG-PC\samba_test ,WANGHAIFENG-PC是机器名。

(三)在linux下查看共享文件

(1)查看所有共享内容

smbclient 是Samba 的Linux 客户端,在Linux机器上用来查看服务器上的共享资源,也可以象FTP一样,用户可以登录Samba服务器,也可以上传put和下载get文件[3]。使用下面的命令,其中用户名是指windows系统的用户名,然后输入该用户的密码。

#smbclient -L //IP或机器名  [-U 用户名]

# smbclient -L //WANGHAIFENG-PC -U wanghaifeng

Password:Domain=[WANGHAIFENG-PC] OS=[Windows 7 Ultimate 7600] Server=[Windows 7 Ultimate 6.1]

        Sharename       Type      Comment

--------------------

ADMIN$Disk远程管理

C$Disk默认共享

D$Disk默认共享

E$Disk默认共享

IPC$IPC远程IPC

print$Disk打印机驱动程序

samba_testDisk

UsersDisk

Domain=[WANGHAIFENG-PC] OS=[Windows 7 Ultimate 7600] Server=[Windows 7 Ultimate 6.1]

        Server               Comment         ---------            -------

        Workgroup            Master

----------------

[root@lcmsp_testsamba]#smbclient-L//192.168.31.226-Uwanghaifeng

Password:

Domain=[WANGHAIFENG-PC] OS=[Windows 7 Ultimate 7600] Server=[Windows 7 Ultimate 6.1]

        Sharename       Type      Comment

--------------------

ADMIN$Disk远程管理

C$Disk默认共享

D$Disk默认共享

E$Disk默认共享

IPC$IPC远程IPC

print$Disk打印机驱动程序

samba_testDisk

UsersDisk

sessionrequestto192.168.31.226failed(Callednamenotpresent)

sessionrequestto192failed(Callednamenotpresent)

sessionrequestto*SMBSERVERfailed(Callednamenotpresent)

NetBIOS over TCP disabled -- no workgroup available

分别使用IP和主机名进行测试,发现使用主机名进行访问的时候一切正常,使用IP进行访问就会出现上面的那些问题,尚待解决…,已经可以在共享内容中看到我们的共享文件samba_test。

# smbclient -L //WANGHAIFENG-PC/

Password:

Anonymousloginsuccessful

Domain=[WORKGROUP] OS=[Windows 7 Ultimate 7600] Server=[Windows 7 Ultimate 6.1]

        Sharename       Type      Comment

--------------------

cli_rpc_pipe_open:cli_nt_createfailedonpipe\srvsvctomachineWANGHAIFENG-PC.ErrorwasNT_STATUS_ACCESS_DENIED

Errorreturningbrowselist:NT_STATUS_ACCESS_DENIED

Anonymousloginsuccessful

Domain=[WORKGROUP] OS=[Windows 7 Ultimate 7600] Server=[Windows 7 Ultimate 6.1]

        Server               Comment         ---------            -------

        Workgroup            Master

----------------

#smbclient-L//WANGHAIFENG-PC/-UGuest

Password:

Anonymousloginsuccessful

Domain=[WORKGROUP] OS=[Windows 7 Ultimate 7600] Server=[Windows 7 Ultimate 6.1]

        Sharename       Type      Comment

--------------------

cli_rpc_pipe_open:cli_nt_createfailedonpipe\srvsvctomachineWANGHAIFENG-PC.ErrorwasNT_STATUS_ACCESS_DENIED

Errorreturningbrowselist:NT_STATUS_ACCESS_DENIED

Anonymousloginsuccessful

Domain=[WORKGROUP] OS=[Windows 7 Ultimate 7600] Server=[Windows 7 Ultimate 6.1]

        Server               Comment         ---------            -------

        Workgroup            Master         ---------            -------

尝试着匿名登录,但是失败了,Windows上开启了Guest用户后,也是不行,不知道有什么好的方法。

(2)登录获取共享内容

使用下面的命令能够登录samba上传和下载文件

#smbclient  //IP地址或者主机名/共享文件夹    -U 用户

# smbclient  //WANGHAIFENG-PC/samba_test -U wanghaifeng

Password:

Domain=[WANGHAIFENG-PC]OS=[Windows7Ultimate7600]Server=[Windows7Ultimate6.1]

smb:\>?//登录成功,进入samba的shell,输入?查看所有命令

?altnamearchiveblocksizecancel

case_sensitivecdchmodchownclose

deldirduexitget

getfaclhardlinkhelphistorylcd

linklocklowercaselsmask

mdmgetmkdirmoremput

neweropenposixposix_openposix_mkdir

posix_rmdirposix_unlinkprintpromptput

pwdqqueuequitrd

recurseregetrenamereputrm

rmdirshowaclssetmodestatsymlink

tartarmodetranslateunlockvolume

vuidwdellogonlistconnectshowconnect

!

smb:\>ls//ls可以查看有哪些文件

.D0FriMar1211:37:152010

..D0FriMar1211:37:152010

  test.txt                            A       11  Fri Mar 12 11:37:44 2010

                51199 blocks of size 1048576. 24705 blocks available

smb:\>?du//?命令可以查看命令的使用方法

HELPdu:

        <mask> computes the total size of the current directory

smb: \> get test.txt         //使用get进行下载

gettingfile\test.txtofsize11astest.txt(3.6kb/s)(average3.6kb/s)

smb:\>putinstall.log//使用put进行上传操作

putting file install.log as \install.log (326.4 kb/s) (average 326.4 kb/s)

上述的命令和ftp的命令非常的类似,可以使用put上传,get进行下载操作。

(3)挂载共享文件夹到Linux目录

我们也可以使用mount命令将共享的Windows文件挂载到Linux目录下面,命令格式如下面所示,username和password都是指,windows系统的用户名和密码,与samba用户名和密码无关

# mount -t cifs -o username=xxx,password=xxx //hostname/dir /mnt/tmp

# mount -t cifs -o username=wanghaifeng //192.168.31.226/samba_test /mnt

Password:

#cd/mnt/

[root@lcmsp_testmnt]#ls

install.logtest.txt

#ls-l

总计37

-rwxrwSrwt1rootroot3609903-1211:46install.log

-rwxrwSrwt1rootroot1103-1211:37test.txt

#df-k

文件系统1K-块已用可用已用%挂载点

/dev/mapper/VolGroup00-LogVol00

3621664025681808866542075%/

/dev/hdc1101086221737369424%/boot

tmpfs51730805173080%/dev/shm

//192.168.31.226/samba_test

                      52428796  27130460  25298336  52% /mnt

假如用下面这种方式挂载,便会报错,由于在RedHat5上已经默认不知道smbfs了

# mount -t smbfs -o username=wanghaifeng //192.168.31.226/samba_test /mnt mount: unknown filesystem type 'smbfs'

(四)在linux下共享文件

那如何在linux下共享文件呢,这都是在samba的配置文件smb.conf里面设置的,默认是访问samba用户的的HOME目录。

可以根据需求将配置共享目录,是否匿名,具体的配置可以查看参考资料【3】和【4】

(五)在windows下查看linux共享文件

在windows查看linux下的共享文件就很方便了,在文件浏览器里直接输入\\IP就可以直接查看文件内容了,比如\\192.168.31.145,输入用户名和密码,这里用户名和密码就是在开始设置的samba用户名和密码

参考资料:

[1] mount: unknown filesystem type "smbfs" http://hi.baidu.com/joe266/blog/item/a2ddfdef94729211fdfa3ce8.html

[2]http://lists.samba.org/archive/samba/2005-April/103326.html

[3]http://www.linuxsir.org/main/node/158

相关推荐