前言
最近一段時間稍微有點忙,而且技術學習方面也挺困惑的,所以也就沒有更新太多新的內容,目前考慮的是,再重新梳理下多線程方面的技術點,扎實下這塊的技術,因此從明天開始,我就要重新開始學習多線程這塊的內容,這次會盡可能把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 遠程文件服務器,可以禁用其它登錄選項
-
禁用
shellusermod --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資源,后面我們可以專門分享下,教大家如何用樹莓派搭建家庭媒體中心,好了,今天就到這里吧,各位小伙伴 ,晚安吧!
