一、Windows设置共享文件夹
首先说明,Centos和windows的网络需要畅通,比如都是在同一局域网内
在Windows系统中,右键点击需要共享的文件夹->属性->共享
点击共享,然后下拉选择一个用户,点击添加,然后点击共享:
点击"高级共享设置",勾选"共享此文件夹":
然后点击"权限",设置授权用户访问共享文件的权限:
最后确认。
ps:最好在"安全"中添加授权用户的权限:
添加用户并授权:
这里需要添加你自己想要授权的用户,然后给与相应的权限~~~
设置完成后,我们可以通过另外一台Windwos电脑来访问共享文件(注意访问者必须是前面被授权的用户,我设置的是Everyone,也就是任何人都可以访问)。
Windwos下按住win+r,输入"\\ip"即可访问,比如我的:
就会在问价管理中看到之前设置的共享文件夹了~~~
二、访问共享文件
1.Windows访问"远程Windows"共享文件
通过cmd的方式,使用win+r,输入\\ip的方式可以直接访问;
在程序中,比如我的,访问远程windows上的一个access数据库:
我们可以这样访问到目标数据库文件~~
需要注意的是,我的开发OS也是Windows,所以可以这样访问;开发OS如果非Windows,这样是行不通的,比如下面的情况。
2.Centos7访问远程windows
如果你的开发OS为Windows,并且你使用上面第一点中的方法在本地运行自己的项目,成功读取到了目标数据库文件,然后你就发布到测试或者生产的Centos服务器上,你就会发现在Centos上,通过之前的配置是读取不到目标文件的:
这个时候,你可能会怀疑是的配置文件路径的问题,然后可能会尝试修改配置文件中的路径,比如"\"问题~~
其实不是路径的问题,原因是Windows访问Windows和Centos访问Windows是不同的,没错,Windows之间使用这种方式无疑是没有问题的,但是在跨OS场景下,就不一样了~~ 协议不一样!!!!!
Centos访问Windows共享文件,有几种方式,我使用的是挂载共享文件的方式。这种方式需要在Centos本地挂载远程Windows上的共享文件,挂载成功后,就相当于访问本地文件了!!!
挂载之前,请先建好文件路径:
mkdir -p /mnt/share/industrial_analyzer/xxx.xxx.xxx.xxx/DataBase
挂载命令:
mount -t cifs //windowsip/sharedir 挂载路径 -o username=用户名,password=密码,vers=版本
mount -t cifs //xxx.xxx.xxx.xxx/DataBase /mnt/share/industrial_analyzer/xxx.xxx.xxx.xxx/DataBase -o username=Administrator,vers=1.0
比如上面,我将 10.20.12.96 的 windows 上的共享文件夹 DataBase 挂载到Centos的 /mnt/share/industrial_analyzer/xxx.xxx.xxx.xxx/DataBase 下,挂载成功后,Centos本地 /mnt/share/industrial_analyzer/xxx.xxx.xxx.xxx/DataBase 下就出现windows共享文件夹下的文件了:
ps:这里有一个坑,SMB协议问题,针对win7,是默认支持SMB协议1.0的,也就是上面mount命令后面的vers的值,但是针对win10、win11等,默认是不支持的,当你使用命令:
mount -t cifs //xxx.xxx.xxx.xxx/DataBase /mnt/share/industrial_analyzer/xxx.xxx.xxx.xxx/DataBase -o username=Administrator,vers=1.0
注意:vers=1.0,此时会报错:
然后你可能会查资料,然后执行:
mount -t cifs //xxx.xxx.xxx.xxx/DataBase /mnt/share/industrial_analyzer/xxx.xxx.xxx.xx/DataBase -o username=Administrator,vers=2.0
或
mount -t cifs //xxx.xxx.xxx/DataBase /mnt/share/industrial_analyzer/xxx.xxx.xxx/DataBase -o username=Administrator,vers=3.0
接着你会挂载成功~~~~
但是当你又将程序部署到Centos上的时候,你可能又会遇到一个问题:
Permission denied
网上说是权限的问题,经过实践测试,我发现并不是权限的问题,这里使用vers=1.0挂载就不会出现这个问题。
但是如果你的远程共享机器为win10或者win11,使用vers=1.0却挂不上去!!!
这是应为win10或者win11需要手动开启SMB协议,需要在windows中手动设置一下:
控制面板->程序->启用或关闭windows功能->勾选SMB1.0,然后重启电脑然设置生效:
然后再次使用vers=1.0挂载,就可以挂载成功:
mount -t cifs //xxx.xxx.xxx.xxx/DataBase /mnt/share/industrial_analyzer/xxxx.xxxx.xxxx.xxxx/DataBase -o username=Administrator,vers=1.0
注意:重新挂载前,请卸载之前挂载的:
umount /mnt/share/industrial_analyzer/xxxx.xxxx.xxxx.xxxx/DataBase
最后,挂载成功后,部署到Centos上,就可以正常的读取到目标文件了~~~