在Linux/UNIX操作系统可以使用mount命令在指定的挂载点挂载CIFS Windows共享目录。

通用Internet文件系统CIFS,是一种网络文件共享协议。 CIFS是SMB另一种形式。在本教程中,我们将说明如何在Linux挂载Windows共享目录。

安装 CIFS客户端

要在Linux系统挂载CIFS Windows共享目录,首先需要安装CIFS软件包。软件包名称在Linux发行版之间可能有所不同。

如果你的计算机运行的是基于Debian的Linux发行版,例如Ubuntu,Linux mint。请运行命令sudo apt install cifs-utils安装samba客户端smbclient。

如果你的计算机运行的是基于RedHat的Linux发行版,例如CentOS,Fedora。请运行命令sudo yum install cifs-utils安装samba客户端smbclient。

sudo apt update
sudo apt install cifs-utils

#Redhat
sudo dnf install cifs-utils

挂载CIFS Windows共享目录

挂载远程Windows共享目录类似于挂载普通文件系统。首先,运行mkdir命令创建目录作为远程Windows共享目录的挂载点。

以root或具有sudo权限的用户运行mount命令来挂载Windows共享目录。系统将提示您输入密码。

<win_share_user>是Windows共享用户名,是可选参数,<win_share_password> 是Windows共享用户密码,也是可选项参数。

WIN_SHARE_IPWindows的IP地址,/mnt/win_share挂载点目录。share_name是Windows共享名称。<win_domain>指定Windows 域,是可选项参数。

成功后,不会有任何输出。要验证是否成功安挂载远程Windows共享,请运行mount命令或df -h命令。

当完成挂载Windows共享,挂载点目录就和普通目录一样。你可以对待本地文件一样使用远程文件。

sudo mkdir /mnt/win_share

sudo mount -t cifs -o username=<win_share_user> //WIN_SHARE_IP/<share_name> /mnt/win_share

#specify password
sudo mount -t cifs -o username=<win_share_user>,password=<win_share_password> //WIN_SHARE_IP/<share_name> /mnt/win_share

#specify win_domain
sudo mount -t cifs -o username=<win_share_user>,domain=<win_domain> //WIN_SHARE_IP/<share_name> /mnt/win_share

mount
Password:

创建CIFS Windows共享凭证文件

为了提高安全性,建议使用凭证文件,其中包含共享用户名,密码和域。你可创建文件/etc/win-credentials保存用户凭证。

在本教程中,我们使用vim创建文件/etc/win-credentials。凭证文件具有以下格式。完成编辑后,保存文件并退出vim

为使其它用户不能读取凭证文件。你需要设置正确的权限所有权。运行命令sudo chown root: /etc/win-credentials

要在mount命令指定使用的凭证文件,使用mount命令的-o和参数credentials指定凭证文件的绝对路径。

sudo vim /etc/win-credentials 
sudo chown root: /etc/win-credentials


sudo mount -t cifs -o credentials=/etc/win-credentials //WIN_SHARE_IP/<share_name> /mnt/win_share
username = user
password = password
domain = domain
/etc/win-credentials

设置CIFS Windows共享文件与目录权限

默认情况下,挂载共享的所有者为root,并且权限设置为777。你可以使用dir_mode选项设置目录权限模式。

使用file_mode设置文件权限模式。使用uidgid选项更改默认的用户和组所有权。

要设置其它挂载参数,请在-o选项之后指定多个参数,多个参数使用逗号分隔。要获取所有挂载参数,请在终端运行命令man mount

sudo mount -t cifs -o credentials=/etc/win-credentials,dir_mode=0755,file_mode=0755 //WIN_SHARE_IP/<share_name> /mnt/win_share

sudo mount -t cifs -o credentials=/etc/win-credentials,uid=1000,gid=1000,dir_mode=0755,file_mode=0755 //WIN_SHARE_IP/<share_name> /mnt/win_share

自动挂载

当使用mount命令挂载CIFS Windows共享目录时,当重新启动后,你需要重新运行mount命令挂载。

/etc/fstab文件包含一个挂载点列表,这些条目定义在系统启动时将在何处以及如何挂载文件系统。

要在Linux 系统启动时自动挂载CIFS Windows共享目录,请在/etc/fstab文件中定义挂载信息。

此行必须包含Windows主机名或IP地址,共享目录名称以及Linux 本地计算机的挂载点。

继续使用你喜欢文本编辑器打开文件/etc/fstab,我们还是vim编辑文件并将以下行添加到文件/etc/fstab

完成编辑后,保存文件并退出vim。运行mount命令挂载Windows共享目录。

mount命令将会读取/etc/fstab内容并挂载Windows 共享目录。当下次重新启动Linux系统时,Windows共享目录将会被自动挂载。

sudo vim /etc/fstab
sudo mount /mnt/win_share
# <file system>             <dir>          <type> <options>                                                   <dump>  <pass>
//WIN_SHARE_IP/share_name  /mnt/win_share  cifs  credentials=/etc/win-credentials,file_mode=0755,dir_mode=0755 0       0

卸载 Windows共享目录

umount命令可以从目录树中卸载已挂载的文件系统。要卸载已挂载的Windows共享目录。请运行umount命令,后跟已挂载的Windows共享的目录或挂载点。

如果/etc/fstab文件中配置自动挂载Windows共享,请将其删除或者在该行的开头添加#注释掉。

例如本教程示例,可以运行命令sudo umount /mnt/win_share卸载CIFS Windows共享目录。

sudo umount /mnt/win_share

如果你在卸载Windows共享时,遇到文件系统繁忙或者其它进程访问着Windows共享。你可能需要找到哪些进程正在访问Windows共享。

命令fuser -m MOUNT_POINT可帮助我们找到正在访问Windows共享目录的进程,MOUNT_POINT是挂载点。

在本教程示例挂载点是/mnt/win_share,则fuser查找进程的命令是fuser -m /var/backups

fuser -m /var/backups

找到正在访问NFS共享目录的进程后,可以使用kill命令将其终止,然后卸载Windows共享。

如果仍然存在卸载的问题,请使用umount命令的-l/--lazy选项,该选项可让您在文件系统不再繁忙后立即将其卸载。

如果无法访问远程Windows共享,请使用-f/--force选项强制卸载。通常,使用强制选项不是一个好主意,因为它可能会损坏文件系统的数据。

sudo umount -f MOUNT_POINT
sudo umount -l MOUNT_POINT

结论

在Linux可以使用mount命令Windows共享。如果您有任何问题或反馈,请随时发表评论。