經常在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_host mnt]# rpm -qa | grep samba
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 | grep samba
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: Header V3 DSA signature: NOKEY, key ID 37017186
error: Failed dependencies:
perl(Convert::ASN1) is needed by samba-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: Header V3 DSA signature: NOKEY, key ID 37017186
error: Failed dependencies:
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 -Uvh samba-common-3.0.33-3.7.el5.i386.rpm
warning: samba-common-3.0.33-3.7.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
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: Header V3 DSA signature: NOKEY, key ID 37017186
error: Failed dependencies:
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: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
1:perl-Convert-ASN1 ########################################### [100%]
#rpm -Uvh samba-3.0.33-3.7.el5.i386.rpm
warning: samba-3.0.33-3.7.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
1:samba ########################################### [100%]
# rpm -Uvh samba-client-3.0.33-3.7.el5.i386.rpm
warning: samba-client-3.0.33-3.7.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
1:samba-client ########################################### [100%]
# rpm -qa | grep samba
samba-common-3.0.33-3.7.el5
samba-3.0.33-3.7.el5
samba-client-3.0.33-3.7.el5samba就已經安裝完成了,上面這些安裝文件都能夠在RedHat的安裝CD中找到。
(3)添加samba用戶
使用smbpasswd添加samba用戶,用戶必須是linux系統中已有的用戶,密碼則不必和系統用戶相同。
# smbpasswd root
New SMB password:
Retype new SMB password:
Failed to find entry for user root.
Failed to modify password entry for user root出現上面這個錯的原因是因爲需要爲root用戶創建一個用戶,使用smbpasswd –a root就可以創建一個entry了,再次調用smbpasswd就不需要使用-a選項了, -x上刪除用戶。
# smbpasswd -a root
New SMB password:
Retype new SMB password:
Added user root.
#smbpasswd root
New SMB password:
Retype new SMB password:# smbpasswd -a wanghaifeng
New SMB password:
Retype new SMB password:
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_test Disk
Users Disk
Domain=[WANGHAIFENG-PC] OS=[Windows 7 Ultimate 7600] Server=[Windows 7 Ultimate 6.1]Server Comment
--------- -------Workgroup Master
--------- -------
[root@lcmsp_test samba]# smbclient -L //192.168.31.226 -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_test Disk
Users Disk
session request to 192.168.31.226 failed (Called name not present)
session request to 192 failed (Called name not present)
session request to *SMBSERVER failed (Called name not present)
NetBIOS over TCP disabled -- no workgroup available分別使用IP和主機名進行測試,發現使用主機名進行訪問的時候一切正常,使用IP進行訪問就會出現上面的那些問題,尚待解決…,已經可以在共享內容中看到我們的共享文件samba_test。
# smbclient -L //WANGHAIFENG-PC/
Password:
Anonymous login successful
Domain=[WORKGROUP] OS=[Windows 7 Ultimate 7600] Server=[Windows 7 Ultimate 6.1]Sharename Type Comment
--------- ---- -------
cli_rpc_pipe_open: cli_nt_create failed on pipe \srvsvc to machine WANGHAIFENG-PC. Error was NT_STATUS_ACCESS_DENIED
Error returning browse list: NT_STATUS_ACCESS_DENIED
Anonymous login successful
Domain=[WORKGROUP] OS=[Windows 7 Ultimate 7600] Server=[Windows 7 Ultimate 6.1]Server Comment
--------- -------Workgroup Master
--------- -------
#smbclient -L //WANGHAIFENG-PC/ -U Guest
Password:
Anonymous login successful
Domain=[WORKGROUP] OS=[Windows 7 Ultimate 7600] Server=[Windows 7 Ultimate 6.1]Sharename Type Comment
--------- ---- -------
cli_rpc_pipe_open: cli_nt_create failed on pipe \srvsvc to machine WANGHAIFENG-PC. Error was NT_STATUS_ACCESS_DENIED
Error returning browse list: NT_STATUS_ACCESS_DENIED
Anonymous login successful
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=[Windows 7 Ultimate 7600] Server=[Windows 7 Ultimate 6.1]
smb: \> ? //登錄成功,進入samba的shell,輸入?查看所有命令
? altname archive blocksize cancel
case_sensitive cd chmod chown close
del dir du exit get
getfacl hardlink help history lcd
link lock lowercase ls mask
md mget mkdir more mput
newer open posix posix_open posix_mkdir
posix_rmdir posix_unlink print prompt put
pwd q queue quit rd
recurse reget rename reput rm
rmdir showacls setmode stat symlink
tar tarmode translate unlock volume
vuid wdel logon listconnect showconnect
!
smb: \> ls //ls可以查看有哪些文件
. D 0 Fri Mar 12 11:37:15 2010
.. D 0 Fri Mar 12 11:37:15 2010
test.txt A 11 Fri Mar 12 11:37:44 201051199 blocks of size 1048576. 24705 blocks available
smb: \> ? du //? 命令 可以查看命令的使用方法
HELP du:
<mask> computes the total size of the current directorysmb: \> get test.txt //使用get進行下載
getting file \test.txt of size 11 as test.txt (3.6 kb/s) (average 3.6 kb/s)
smb: \> put install.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_test mnt]# ls
install.log test.txt
#ls -l
總計 37
-rwxrwSrwt 1 root root 36099 03-12 11:46 install.log
-rwxrwSrwt 1 root root 11 03-12 11:37 test.txt
#df -k
文件系統 1K-塊 已用 可用 已用% 掛載點
/dev/mapper/VolGroup00-LogVol00
36216640 25681808 8665420 75% /
/dev/hdc1 101086 22173 73694 24% /boot
tmpfs 517308 0 517308 0% /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