有时候需要从Linux下访问Windows下的共享文件夹,可以采用mount挂载的方法或者samba客户端的方式进行连接。

Windows创建共享文件夹

首先需要打开windows的文件共享,在控制面板->网络和共享中心->更改高级共享设置->点选“启用网络发现”,“启用文件和打印机共享”。

启用windows网络发现和文件共享

windows创建共享文件夹有命令行和界面两种方式。

1.命令行的方式如下:

net share ShareDir=${your_share_dir_path} /GRANT:${user_to_share},FULL

# 如果需要创建新用户,也可以直接通过命令行创建一个专门用于文件共享的用户
net user ${new_user_name} ${password_with_charactor_and_number} /add
# 可以将用户加入管理员组
net localgroup administrators ${new_user_name} /add

2.通过界面,可以在要共享的文件夹上邮件,共享标签->高级共享,设置共享名,点击权限按钮设置要共享的用户和授予的权限,点击确定即可。

通过图形界面设置共享文件夹
给共享用户设置权限

从Linux访问Windows共享文件

Linux访问Windows共享文件有多种协议。

Server Message Block - SMB,即服务(器)消息块,是 IBM 公司在 80 年代中期发明的一种文件共享协议。它只是系统之间通信的一种方式(协议),并不是一款特殊的软件。SMB 协议被设计成为允许计算机通过本地局域网(LAN)在远程主机上读写文件。远程主机上通过 SMB 协议开放访问的目录称为 共享文件夹

Common Internet File System - CIFS,即通用因特网文件系统。CIFS 是 SMB 协议的衍生品,即 CIFS 是 SMB 协议的一种特殊实现,由美国微软公司开发。由于 CIFS 是 SMB 的另一中实现,那么 CIFS 和 SMB 的客户端之间可以互访就不足为奇。二者都是协议级别的概念,名字不同自然存在实现方式和性能优化方面的差别,如文件锁、LAN/WAN 网络性能和文件批量修改等。

Samba 是一组不同功能程序组成的应用集合,它能让 Linux 服务器实现文件服务器、身份授权和认证、名称解析和打印服务等功能。与 CIFS 类似,Samba 也是 SMB 协议的实现,它允许 Windows 客户访问 Linux 系统上的目录、打印机和文件(就像访问 Windows 服务器时一样)。重要的是,Samba 可以将 Linux 服务器构建成一个域控制器。这样一来,就可以直接使用 Windows 域中的用户凭据,免去手动在 Linux 服务器上重新创建的麻烦。

Network File System - NFS,即网络文件系统。由 Sun 公司面向 SMB 相同的功能(通过本地网络访问文件系统)而开发,但它与 CIFS/SMB 完全不兼容。也就是说 NFS 客户端是无法直接与 SMB 服务器交互的。NFS 用于 Linux 系统和客户端之间的连接。而 Windows 和 Linux 客户端混合使用时,就应该使用 Samba。

cifs方式

安装cifs

# Ubuntu
apt-get install cifs-utils

# CentOS
yum install cifs-utils.x86_64 -y

新建挂载文件夹挂载Windows共享文件夹

mkdir /mnt/Share
mount -t cifs //${windows_ip}/Share /mnt/Share -o username="${username}",passowrd="${password}",vers=2.0 


# 注意如果使用Windows10系统,必须添加vers=2.0选项
# 为了能正确显示中文,以utf8为locale的用户(如果使用Ubuntu或Fedora,默认就是utf8(locale)加入以下选项:codepage=cp936和iocharset=utf8,即mount命令为:
# 	mount -o guest,iocharset=utf8,codepage=cp936 -t smbfs //192.168.0.2/linux /mnt/win_share 之所以这样写,是因为远端使用的编码是cp936,而本地使用的是utf8。
# 以gbk为locale的用户则
# mount -o guest,iocharset=cp936,codepage=cp936 -t smbfs //192.168.0.2/linux /mnt/win_share
这样写的原因是远端和本地都是cp936

[注意]:
  1. 指定uid或gid参数,也能指定用户的身份(uid=后面可接uid号或用户名),如:
  smbmount //test/d /mnt/d -o uid=grind
  2. smbmount也能写作mount.smbfs,这是个符号链接;
  3. smbmount的参数必须写在最后,而mount的参数位置能变化;
  4. 由于//sambaserver/d格式能表明是要mount上smbfs,所以mount的-t smbfs参数能省掉;
  5. 如果命令行中不加入密码,下一行中系统会提示你输入;

加入开机启动自动挂载

# 编辑/etc/fstab, 添加行
//${windows_ip}/Share	/mnt/Share	cifs	auto,username=${username},password=${password},vers=2.0		0	0

重新挂载使挂载配置生效

mount -a
# 挂载后,可以通过mount命令查看是否成功
mount

使用Samba连接

使用Samba首先需要安装Sambaclient

# ubuntu
apt-get install smbclient

# centos
yum install –y samba samba-client samba-winbind-clients.x86_64 cifs-utils.x86_64

然后就可以直接访问共享的文件夹了

smbclient --user=${username} //${windows_ip}/Share

# 提示输入密码,输入密码回车进入smb命令操作空间,可以通过help查看所有命令

使用Samba也可以实现从Windows访问Linux的共享文件夹。

其他问题

mount.cifs windows共享目录权限755问题,百度搜索 cifs 共享文件夹只读可以通过file_mode 和dir_mode 来设置权限,覆盖默认的755权限,取消共享文件夹只读sudo mount -t cifs -o username=Administrator,password=198107,rw,dir_mode=0777,file_mode=0777 //192.168.0.81/abc /home/cbx/abc