前言
最近一段时间稍微有点忙,而且技术学习方面也挺困惑的,所以也就没有更新太多新的内容,目前考虑的是,再重新梳理下多线程方面的技术点,扎实下这块的技术,因此从明天开始,我就要重新开始学习多线程这块的内容,这次会尽可能把juc
包下的内容都覆盖到,同时也希望比之前更完整更详细。
至于今天,我打算整理下最近做的几件比较有意思的事。一个是在前几天安装的manjaro
上搭建samba
文件服务,实现个人文件网盘,不过我这个目前只能在局域网使用,搭建家庭媒体中心的话就很方便;
另一个是shell
脚本统计数据。这一块是由于最近需要帮产品统计一个数据,但是由于公司数据存储是分库存储的所以一条sql
是没法直接查的,毕竟还跨数据库实例,所以我就写了一个shell
脚本,实现数据统计排序,原本考虑用python
实现的,但是堡垒机安装的是python 2.7
,mysql
的驱动库安装不上(需要更新pip
,但是我没权限),所以最后我放弃了。
今天我们先看第一件事——实现网盘*。
网盘*
其实,关于文件共享是有多种解决方案的,除了我们熟知的各类网盘,比如百度云盘、阿里云盘、坚果云等云盘外,还有很多技术层面的解决方案,包括FTP
、Samba
、WebDAV
等多种方式的,下面是关于这几种协议的简单介绍(来源网络):
FTP
属于古老的文件共享方式了,因为安全性,现代浏览器最新已默认不能打开FTP协议。SFTP
在FTP
基础上增加了加密,在Linux
上安装OpenSSH
后可以直接用SFTP
协议传输。使用SFTP
临时传送文件还可以,但做文件共享,性能不高,速度较慢。
Samba
是Linux
下CIFS
协议的实现,优势在于对于小白使用简章,和Windows
系统文件共享访问一样,不需要安装第三方软件,而且移动端也有大量APP
支持。苹果手机文件APP
中添加网络存储用的就是这种方式。Windows
下文件共享使用445
端口,且不能更改。445
端口常常受黑客关照,在广域网上大多运营封掉了访端口,所以这种文件共享只适合在内网使用。
WebDAV
基于HTTP
协议的通信协议,在GET
、POST
、HEAD
等几个HTTP
标准方法以外添加了一些新的方法,使应用程序可对Web Server
直接读写,并支持写文件锁定(Locking
)及解锁(Unlock
),还可以支持文件的版本控制。因为基于HTTP
,在广域网上共享文件有天然的优势,移动端文件管理APP
也大多支持WebDAV
协议。使用HTTPS
还能保安全性。Apache
和Nginx
支持WebDAV
,可作为WebDAV
文件共享服务器软件。也可以使用专门的WebDAV
软件部署。
为什么采用samba
?原因很简单,它安装配置都很简单,支持win
、android
和ios
等多平台,而且市面上很多软件都支持(后面我们会分享)。但是它也有个缺点,就是共享端口固定且不能修改,安全性差,不过局域网使用就不用考虑这么多。
至于网盘,受空间和网速限制,动不动还要开会员,这一点就不是特别友好,而且有些文件还不适合存在网盘中,过不好过几天看不了了。当然,如果你有自己的服务器,可以直接搞webDAV
,这就更接近网盘体验了。
好了,废话少说,我们直接开干吧!
下面我以manjaro
为例,其他linux
发行版类似,过几天我把树莓派拿回来了,可以再给各位小伙伴分享在树莓派搭建个人服务器的相关内容,包括文件服务器搭建。
安装samba服务及依赖
安装依赖的方式都差不多,只需要替换成对应平台的软件包管理工具即可
sudo pacman -S samba
配置
创建共享用户
Samba
需要 Linux
账户才能使用 - 可以使用已有账户或 创建新用户。
虽然用户名可以和 Linux
系统共享,Samba
使用单独的密码管理,将下面的 syske
替换为选择的 Samba
用户:
# syske 就是你要和linux共享的用户名
smbpasswd -a syske
执行完上面的命令之后,我就可以在samba
的文件共享中使用这个用户了,密码就是这个用户的linux
登录密码
根据服务器角色差异,可能需要修改已有的文件权限和属性
要让新创建的用户仅能访问 Samba
远程文件服务器,可以禁用其它登录选项
-
禁用
shell
usermod --shell /usr/bin/nologin --lock syske
-
禁用
SSH
:需要在/etc/ssh/sshd_config
中配置,具体可以自行搜索
更改用户密码
如果你想修改samba
用户的密码,可以通过如下命令进行修改,只需要按照提示输入密码即可
sudo smbpasswd syske
创建samba用户组
这一步可以直接省略,非必须,有需要的小伙伴可以看下:
groupadd sambashare
groupdd
是linux
的用户组新增命令,后面直接更用户组名称即可。
修改配置文件
安装完成后会在/etc
文件夹下生成samba
文件夹,在配置之前我们先将初始化配置文件备份下:
mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
接着我们开始编辑smb.conf
文件,将其中原有的配置文件全部注释掉,并加入如下配置内容:
[global]
#所要加入的工作组或者域
workgroup = WORKGROUP
#用于在 Windows 网上邻居上显示的主机名
netbios name = Manjaro
#定义安全级别
security = user
#将所有samba系统主机所不能正确识别的用户都映射成guest用户
map to guest = bad user
#是否开启dns代理服务
dns proxy = no
这里设置的是samba
的全局设置信息,注释已经够详细了,所以不再赘述
然后再写入系统配置分享文件夹地配置:
[syskeshare]
# 我们要分享的文件夹路径
path = /run/media/syske/D88047AA80478DC6
# 是否允许浏览
browseable = yes
# 是否可写
writable = yes
# 是否允许匿名(guest)访问,等同于public
guest ok = yes
# 客户端上传文件的默认权限
create mask = 0777
# 客户端创建目录的默认权限
# 注意共享文件在系统本地的权限不能低于以上设置的共享权限。
directory mask = 0777
这里主要设置我们要分享的文件夹的相关信息,首先syskeshare
是节点名,也是我们客户端访问的共享路径,节点下面配置了文件夹的路径以及权限信息,需要注意的是,这里设置的文件夹权限只能小于等于分享路径文件夹的权限,否则不一定能正常写入文件。
启动测试
完成以上配置之后,从理论上讲,我们只需要启动samba
服务就可以访问我们共享的文件夹了。启动的方式也很简单:
# 启动
sudo systemctl start smb nmb
# 重启
sudo systemctl restart smb nmb
# 停止
sudo systemctl stop smb nmb
启动成功后,我们可以先通过如下命令测试下效果:
如上显示则表明,samba
服务已经启动成功,且可以正常访问,下面我们看下各个平台具体如何访问:
安卓
安卓端可以通过es
文件管理器进行访问,操作也很方便:
这款软件不知道ios
平台是否有,不过应该可以找到替代软件。这一款软件的不好之处是有广告,优点是可以自动扫描,操作上便捷很多,安卓平台还有另一款软件Solid Explorer
,是一款国外的软件,只能通过google play
下载,需要的小伙伴可以私信,我放几张截图:
这款软件的优势是轻量,而且没广告,云盘这块支持的也挺多的,我是今天刚发现的。
win平台
win
平台操作就简单多了,直接点击文件管理器中的网络,如果能找到你的共享机器,直接双击即可,如果有密码输入密码即可,如果找不多,直接输入分享地址访问:
\\192.168.0.101\syskeshare
其中192.168.0.101
是我manjaro
的主机地址,syskeshare
是我的分享名称,显示效果如下:
由于手里没有mac
系统的设备,感兴趣的小伙伴自己尝试下,应该也不会太难。
结语
用linux
搭建samba
服务器算是一个比较简单,但是特别实用的技能,有了这个技能加持之后,你再也不用担心文件共享问题了,最爽的是视频资源、音乐资源、图片资源再也不用手动复制了,只需要接入samba
服务器就可以在家里的任何可以连到wifi
的地方访问他们,岂不是美滋滋!
另外关于家庭媒体中心这块也有一款特别好用的软件,而且它本身也支持samba
资源,后面我们可以专门分享下,教大家如何用树莓派搭建家庭媒体中心,好了,今天就到这里吧,各位小伙伴 ,晚安吧!