在Linux下访问Windows共享⽂件夹
说明
以下操作以Ubuntu为例,⼤家可以参考。
我在Ubuntu 14.04和16.04都试过了。
Windows共享⽂件夹
linux怎么读取windows文件如果局域⽹内有⼀台Windows主机,将指定⽂件夹设为共享,就可以在局域⽹内访问了。
如果要从Linux下访问该如何操作呢?
使⽤ mount.cifs
Windows共享⽂件夹使⽤的协议是SMB/CIFS。因⽽可以使⽤Linux下的smbclient在命令⾏中进⾏操作。
如果想更⽅便地在图形桌⾯环境使⽤,则可以使⽤mount.cifs指令,将共享⽂件夹挂载到指定位置,然后就可以像访问⼀个本地⽂件夹⼀样访问了。
⾸先安装依赖的包
使⽤mount.cifs需要cifs-utils软件包(以及cifs-utils依赖的软件包)。
$ sudo apt install cifs-utils
(插⼀句嘴:现在apt安装可以直接使⽤apt⽽不⽤apt-get了)
挂载共享⽂件夹
可以使⽤如下两种指令(效果是⼀样的)
sudo mount.cifs //[address]/[folder] [mount point] -o user=[username],passwd=[pw]
或者
sudo mount -t cifs //[address]/[folder] [mount point] -o user=[username],passwd=[pw]
其中共享⽂件夹的地址是Windows主机的地址加上⽂件夹名称,这个可以在Windows主机上看到。例如//192.168.0.100/share
挂载点是Linux本地的⼀个空⽂件夹。
后⾯的选项指定了⽤户名和密码。
⽂件操作
挂载成功后,通过图形化的⽂件管理器就可以直接操作了。复制、粘贴、删除等等。
不过,然⽽,可是……你很快就会发现,这个⽂件夹可读不可写!只能往外⾯复制,不能新建⽂件或者向⾥⾯复制。
查看⽂件夹属性后会发现,原来这个⽂件夹在挂载之后,owner变成了root。怎么办呢?不能每次拷个⽂件还要sudo吧?那还得打开命令⾏,不直观,多⿇烦。
别急,mount.cifs还提供了⼀个选项,那就是指定挂载后的owner!⽤法如下:
sudo mount.cifs //[address]/[folder] [mount point] -o user=[username],passwd=[pw],uid=[UID]
在选项中指定⽤户的UID就可以了。
查看某个⽤户UID的⽅法:
id -u [username]
之后就可以正常操作了!
卸载
最后如果要卸载共享⽂件夹,使⽤umount即可
sudo umount [mount point]
Enjoy!
可能遇到的问题
使⽤过程中可能遇到各种各样的问题,其结果往往是⼀样的:⽆法访问⽬标⽂件夹。这⾥列出⼏个可能遇到的问题以及可能的原因和解决办法。
1、⽬标主机在某个域中
⼀般个⼈电脑不会使⽤域管理(Windows PC版压根⼉就没有域管理服务),但是在⼀个企业或者组织中,可能会⽤Windows server的域管理功能,统⼀管理内部的Windows电脑。登录在域中的计算机时,登录界⾯会显⽰域名。
⽤上⾯的指令就没有办法登录处于域中的计算机共享⽂件夹,可能的报错是input/output error。
解决⽅法:
使⽤domain选项来指定域名:
sudo mount.cifs //[address]/[folder] [mount point] -o domain=[domain_name],user=[username],passwd=[pw],uid=[UID]
2、希望免密码登录
有些时候,为了⽅便起见希望不使⽤密码登录。
解决⽅法
使⽤guest选项。
sudo mount.cifs //[address]/[folder] [mount point] -o user=[username],guest,uid=[UID]
不过需要注意的是,如果要免密码登录,不仅客户端的登录指令要变,更重要的是在⽬标主机上要进⾏相关设置,允许Guest账户登录,或者允许免密码登录。具体设置⽅式,这⾥就不涉及了,与Windows系统版本有关,不过⼤同⼩异。
3、账户密码正确,但连接失败
错误信息是mount error(13): Permission denied。遇到这种错误请⾸先确定⽤户名和密码是否正确。
其他导致这种情况的原因有(1)安全协议不匹配(2)在Linux系统中,你没有挂载权限;(3)Windows⽬标主机访问时权限不⾜
解决⽅法
情况1:可使⽤sec=选项指定安全协议。如果Linux内核版本低于3.8,则默认的安全协议是sec=ntlm,⽽3.8及以后的版本使⽤sec=ntlmssp作为默认安全协议。对于版本较低的Windows(如Windows XP),可能不⽀持新的ntlmssp,此时需要指明使⽤ntlm协议。可使⽤man mount.cifs查看详细说明。
情况2:请使⽤有挂载权限的账户操作,⽐如root。
情况3:请进⼊Windows共享⽂件设置相关界⾯进⾏设置。因为可能原因是(1)你使⽤的账户不能访问这个⽂件夹;(2)Windows针对当前的⽹络连接关闭了⽂件共享;(3)其他配置原因。
4、断⽹的情况下假死
如果在已经连接成功的情况下断⽹,此时对已经挂载的共享⽂件夹进⾏任何操作(包括读取和卸载),都会导致假死(可能要卡住1-2分钟才能恢复)。这是⽹络⽂件系统(NFS)的特性决定的,修改挂载指令是没办法优化这个问题的。
解决⽅法
如果是命令⾏操作,那么就只好等待了。如果是在应⽤程序中使⽤,则建议使⽤多线程操作,单开⼀个临时线程卸载挂载的⽂件夹,临时线程的假死不会影响主线程。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。