一、我们为什么需要samba服务
samba是一种实现windows和linux包括macos文件共享的套件。它能让我们像访问自己的磁盘一样去访问别的系统的文件。可以看得出来这种一种快速并且高效的文件传输协议。看到这里,大家可能会有些疑问。向linux传输文件,我们可以使用SFTP服务,为什么我们还需要安装一种单独的协议来传输文件?下面我们就来讲讲相比SFTP,samba的优势。首先就是,在局域网中,我们想要访问linux中的文件或者想要上传文件,我们确实可以使用SFTP,但是这种操作方式可能会依赖一些图形化的软件,并且在操作上有没有原本的文件管理器中操作方便。在此,我们引入samba,samba能将linux的文件目录直接映射到windows,在windows中我们可以像访问自己的磁盘一样访问这些文件或者目录,其中的操作都是和windows互通,我们也可以使用windows中的软件对文件进行操作,比如我们可以使用windows的解压软件去解压linux下的文件。其次就是,使用samba我们可以直接使用windows的IDE去打开linux中的工程,在linux是无图形化或者图形化适配比较差时,能够大大提高我们的开发效率。然后,因为samba能够直接将文件夹映射出来同时也有利于在局域网环境下大家协同开发一个项目。如此可见,samba有如此多优秀的地方,那我们的SFTP不就一无是处了吗?当然不,想必大家应该都有注意到,我上面提到了很多都是在局域网的环境下,是的,在近距离传输文件时我们确实可以使用samba,但是一旦涉及到远距离传输,可能samba就没有那么合适了,在远距离的网络传输中,我们不仅要考虑便捷,还要考虑安全性,这两者都兼顾的想必SFTP才是首选,它基于SSH协议,有较高的安全性。当然,如果不在意安全性的问题,就可以直接使用samba。下面我们就来看一下如何在Ubuntu中安装和使用samba吧!
二、安装Samba
前面也提到了,samba服务主要用于windows和linux之间的文件传输,所以,你需要有一台安装了linux系统的电脑或者虚拟机,下面我将使用Ubuntu的虚拟机进行演示,如果你想要在物理机或者虚拟机中安装Ubuntu,那么就可以看下面的文章:
在物理机安装Ubuntu:[Linux]如何在物理机安装Ubuntu(小白向)-CSDN博客
在虚拟机安装Ubuntu:[Linux]如何在虚拟机安装Ubuntu?(小白向)-CSDN博客
在下面的演示中,我都使用命令行进行演示。我们首先登录我们的Ubuntu:
我们使用下面的命令来更新我们的软件包源,这会让我们下载的软件包处于一个较新的版本:
sudo apt update
在更新完软件包源以后,我们就可以开始安装samba了。我们输入下面的命令来安装samba:
sudo apt install samba
在安装结束以后,我们可以使用下面的命令来查看安装:
apt list | grep samba
下面我来解释一下这条命令,apt list是为了查看已经安装的apt包,如果我们只输入apt list那么终端就会打印所有我们已经安装的包,“|”是一个管道符,用于传递参数,它可以将前面一条指令的输出当作后面一条指令的输入。grep用于在我们输入的文本中查找匹配的值,我们这里为了查找我们的文本中有没有“samba”字样。执行命令以后,我们就能发现,它输出了很多和samba相关的包,当然这其中也包括了samba本体:
这也就表示,我们的samba是安装成功的。
三、samba的基本配置
在我们已经安装好samba以后,我们就可以来配置它了。首先,我们需要创建一个用于共享的文件夹,我们使用下面的命令创建一个文件夹在我们的用户目录下:
mkdir ~/share
这条命令会在我们的用户目录下创建一个名为“share”的文件夹。当然,大家可以根据自己目录的用途来更换别的名字。特别提醒,在创建文件夹的时候,不要加“sudo”,这会使得这个文件夹的权限非常高,高到你每一次配置或者使用这个目录你都要加sudo。这也会间接的导致一些文件访问性的问题。所以,养成习惯,在操作自己用户目录的时候不要加“sudo”。
在目录创建完成以后,我们需要赋予这个目录权限,如果你是一位小白,你不知道权限应该怎么合理分配,那就跟着我写就行了。使用下面的命令配置这个文件夹和用户文件夹的权限:
chmod -R 777 /home/chulingxiao/share /home/chulingxiao
这里的chmod是我们的权限配置命令,-R表示递归,也就是说在这个目录的下面一级目录或者文件都被赋予这个权限,777是权限的表现形式,这里我们赋予了自己,用户组,其他人这个文件夹下文件或者目录的读,写,执行权限。换而言之,这个文件夹已经被开放出来了,谁都可以看,谁都可以修改。如果你初学linux这样给权限是没有问题的,但是,在实际工作和项目中,一定要严格管控每一个文件的权限。最后的“/home/chulingxiao/share /home/chulingxiao”就是我们目录了,大家根据自己目录的名字进行调整,这里需要注意一下,我们不仅要修改刚才我们创建的目录的权限,还要修改我们用户目录的权限,这样做也是未来避免权限问题。我们可以看到,在我们输入了上面的权限配置命令以后,我们文件夹最前面表示权限的部分已经和别的文件夹不一样了。这也就表示我们的权限配置成功了。
我们下面来讲一下samba的配置文件,samba的配置文件是被存放在了“/etc/samba/”下的一个名为“smb.conf”的文件,我们现在可以先不着急修改这个配置文件,我们需要把这个配置文件备份一份,防止我们把原本的配置文件搞坏了,输入下面的命令,将配置文件备份到当前用户目录下:
cp /etc/samba/smb.conf ~/
在备份完成以后,我们就可以打开这个配置文件了。使用下面的命令打开配置文件:
sudo nano /etc/samba/smb.conf
因为我们这里已经是对系统目录进行操作了,所以一定要加上“sudo”:
不出意外的话,打开后就是下图中的样子了,如果你打开文件以后是空白了,那你可能就需要检查一下在打开文件时有没有使用“sudo”,如果使用了“sudo”打开仍然是空白的,那你可能需要检查一下samba有没有正常安装:
我们将这个配置文件滑到最下面:
在最下面,我们插入下面这些配置信息,后面我会逐一解释:
[Ubuntu_22.04]
comment = Samba
path = /home/chulingxiao/share
public = yes
writable = yes
available = yes
browseable = yes
valid users = chulingxiao
在添加好配置信息以后,我们保存并关闭配置文件。
下面我来解释一下上面我输入的这些配置信息都是什么意思:
[Ubuntu_22.04]:这是你在 Samba 中定义的共享的名称。当其他网络设备通过 SMB/CIFS 协议访问共享时,这个名称就是他们看到的共享名称。
[comment]:这是对共享的描述或注释,通常显示在客户端连接到共享时的共享列表中。它帮助用户了解共享的用途或内容。
[path]:这是共享资源在服务器上的实际文件路径。它指定了用户通过 Samba 访问的目录位置。所以大家在写路径的时候,就不能和我相同,因为我的路径是根据我的用户目录写出来的,大家根据自己刚才创建的目录进行i修改,这一步很重要。
[public]:表示该共享是否为公共共享。公共共享允许匿名用户(不输入用户名和密码)访问。如果设置为 yes
,任何人都可以访问该共享。通常与 guest ok
配置项相关。
[writable]:决定该共享目录中的文件是否可写。设置为 yes
表示用户可以创建、编辑、和删除文件。如果设置为 no
,则共享为只读。
[available]:表示该共享是否可用。如果设置为 no
,共享将被定义,但实际上不可用,不会在客户端中显示。
[browseable]:决定该共享是否在网络邻居或文件浏览器中显示。如果设置为 yes
,用户可以在网络资源浏览器中看到该共享。如果设置为 no
,共享是隐藏的,但用户仍然可以通过手动输入路径来访问。
[valid users]:指定可以访问该共享的用户或用户组。这些用户必须是在 Samba 中定义的有效用户。如果一个用户不在这个列表中,他将无法访问该共享。这里大家也要根据自己的情况进行修改,上面我写的是我的用户名,大家记得改成自己的,不然可能不能访问。
当然samba的参数还有很多,后面的参数我会写在一个文档中,大家自行前往百度网盘链接进行下载。
samba相关参数文档:https://pan.baidu.com/s/1I_LR7ntUlnwQhOYp3VxVRw?pwd=clxm
提取码:clxm
虽然samba的参数有很多,但是,将我们一开始给大家的参数正确填入配置文件samba就已经能正常工作了。
我们输入下面的命令来为samba来配置一个用户的密码,后面我们访问samba服务的时候都会用到这个密码:
sudo smbpasswd -a chulingxiao
如果是第一次为这个用户设置密码就需要加上-a,后面配置密码就不用加上-a了。如果在第一次设置一个用户的密码不加上-a的选项的话,就会在设置密码时报出错误。
这里同样的,大家要把后面的用户名替换成自己的,不然就会因为找不到这个用户而抛出一个错误。
这里我们输入密码和linux登录时输入密码一样不会回显。
我们输入下面的命令来启动samba服务,每次我们使用samba时都要保证它的服务是启动的:
sudo systemctl start smbd.service
在启动了samba的服务以后,我们可以用下面的命令来查看samba的工作状态:
sudo systemctl status smbd.service
输入查询命令以后,我们的命令栏可能已经不能输入东西了,大家按“Q”退出即可。
如上图我们可以看到,我们的samba已经处于工作状态了。
我们也可以使用下面的命令来重启samba服务:
sudo systemctl restart smbd.service
在我们每次重新设置完密码以后,我都建议大家将samba重启一下。
我们可以使用下面的命令来将samba添加为开机启动:
sudo systemctl enable smbd.service
四、samba的连接
在我们配置并且启动samba以后,我们就可以使用网络去连接它了,我们可以使用下面的命令来查看linux系统的ip地址:
ifconfig
如果提示ifconfig命令找不到则执行“sudo apt install net-tools”
我们可以看到,现在我linux的ip地址为192.168.241.128 ,我们可以打开powershell去ping一下这个地址,测试一下通断。
我们可以看到,这里是能ping通的,说明设备的网络连接没有问题。
我们同时按“win+R”打开运行框:在运行框中输入“\\ip地址”,如下图:
前面的反斜杠不能省略。
输入完以上以后,我们回车。
在输入用户名和密码以后就可以进入以下界面了:
图中的这个文件夹就是我们共享出来的文件夹。
如果你在输入用户名和密码以后提示你连接失败没有权限,那么你需要检查你的用户文件夹权限有没有开放出来。确认权限没有问题以后,仍然提示权限不足的话,检查自己samba的配置文件中的用户名是否写对,检查密码设置是否正确。如果被提示重复连接就检查有没有打开别的连接窗口。
在成功访问到以后,我们可以右键这个文件夹,然后点击“映射网络驱动器”,在弹出的窗口中,我们可以设置映射后的盘符,设置好以后,我们点击完成即可:
在完成以后,我们可以看到这个驱动器已经映射到了我们本地:
我们在这个映射的目录中新建一个文本文档:
我们在linux端进行查看:
至此,我们samba的连接已经完成。
五、结语
在部署了samba服务以后大大的简化了我们的文件传输。我们通过samba能够直接对linux的文件进行解压,编译项目等基本操作。samba的强大功能等待大家自己探索!