说明
以下操作以Ubuntu为例,大家可以参考。
我在Ubuntu 14.04和16.04都试过了。
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)的特性决定的,修改挂载指令是没办法优化这个问题的。
解决方法
如果是命令行操作,那么就只好等待了。如果是在应用程序中使用,则建议使用多线程操作,单开一个临时线程卸载挂载的文件夹,临时线程的假死不会影响主线程。
在Linux下访问Windows共享文件夹的更多相关文章
-
VMware,win7与linux centos6.4文件互传,linux下挂载windows共享文件夹,vmware tools安装方法
本方法是以win7,VMware9.0.1 ,centos6.4为基础实验的. 对于linux的初级使用阶段,都会Windows中使用linux虚拟机VMWare或者其它的.在Windows与linu ...
-
ubuntu 12.04下访问windows共享文件夹
ubuntu 12.04LTS已经不支持smbfs文件系统,所以不能用mount -smbfs 来映射windows共享文件夹. 常见有两种方法 1.terminal下 mount //192.168 ...
-
Linux基础※※※※访问Windows共享文件夹
参考Linux公社链接:http://www.linuxidc.com/Linux/2014-06/103749.htm 实际上,可以直接用sambaclient程序访问共享资源. 列出共享主机的列表 ...
-
linux访问windows共享文件夹的两种方法
有时需要在linux下需要访问windows的共享文件夹,可以使用mount挂载或者使用samba连接. 1.mount挂载 首先创建被挂载的目录: $ mkdir windows 将共享文件夹挂载到 ...
-
Linux怎样访问Windows共享文件和文件夹
常常使用Windows的人可能会发现,Windows计算机之前共享资料非常方便,但是有时候想玩玩Linux的时候,如Fedora.Ubuntu.CentOS等,该怎样才能访问Windows计算机上的文 ...
-
(转)linux访问windows共享文件夹的两种方法
有时需要在linux下访问window的共享文件,可以使用mount挂载或使用samba连接. 1,mount挂载 $ mkdir windows 将共享文件夹挂载到windows文件夹: mount ...
-
Mac OS X 访问 Windows 共享文件夹
Mac OS X 访问 Windows 共享文件夹 mac没有网络邻居,但可以使用finder访问局域网中windows共享的文件 1.点击 Finder 前往菜单中的「前往服务器」(或快捷键 com ...
-
CentOS访问Windows共享文件夹的方法
CentOS访问Windows共享文件夹的方法 1 在地址栏中输入下面内容: smb://Windows IP/Share folder name,smb为Server Message Block协议 ...
-
linux上挂载windows共享文件夹
linux上挂载windows共享文件夹 1.共享windows目录 挂载之前得创建一个有password的用户(当前用户也能够),并将你要挂载的目录进行共享,并赋予读写权限 如图. watermar ...
随机推荐
-
Dynamic CRM 2013学习笔记(三十)Linq使用报错 A proxy type with the name account has been defined by another assembly
在CRM中使用linq时,有时会报这个错误: A proxy type with the name account has been defined by another assembly. Curr ...
-
单例:用AFNetworking封装举例
创建单例的方式 import AFNetworking class NetworkTools: AFHTTPSessionManager { //let是线程安全的 //使用单例实例只需要拿到Netw ...
-
使用LIBUSB实现和自定义通讯设备通讯--MFC代码在末尾
LIBUSB是一款简单好用的USB通讯开发库,一般HID设备用该库通讯能大大降低开发周期,使用如下,首先需要为设备安装驱动 在libusb的bin目录下有一个inf_wirzed.exe的文件,该文件 ...
-
C#遍历指定文件夹中的所有文件(转)
原文链接:http://www.cnblogs.com/qianqianfy/archive/2009/07/08/1518974.html 1. C#遍历指定文件夹中的所有文件 DirectoryI ...
-
js 事件模型详解
把js的事件模型,分为两类,DOM0级和DOM2级, DOM0级 通常直接在DOM对象上绑定函数对象,指定事件类型,dom.onClick = function(){};类似于这种写法,移除事件,则直 ...
-
并发编程(十二)—— Java 线程池 实现原理与源码深度解析 之 submit 方法 (二)
在上一篇<并发编程(十一)—— Java 线程池 实现原理与源码深度解析(一)>中提到了线程池ThreadPoolExecutor的原理以及它的execute方法.这篇文章是接着上一篇文章 ...
-
使用java程序对oracle添加触发器时,报错:索引中丢失 IN 或 OUT 参数:: 1
解决方法: 执行sql语句时,使用java.sql.Statement代替java.sql.PreparedStatement. java.sql.PreparedStatement ps = con ...
-
bzoj2599/luogu4149 [IOI2011]Race (点分治)
点分治.WA了一万年. 重点就是统计答案的方法 做法一(洛谷AC bzojWA 自测WA): 做点x时记到x距离为k的边数最小值为dis[k],然后对每一对有值的dis[i]和dis[K-i],给an ...
-
HTML5本地存储之Web Storage实例篇,最有用的是localStorage
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
-
迭代器 ->; 固定的思路. for循环
一个数据类型中包含了__iter__函数表示这个数据是可迭代的 dir(数据): 返回这个数据可以执行的所有操作 判断迭代器和可迭代对象的方案(野路子) __iter__ 可迭代的 __iter__ ...