个人文件站(局域网资源共享)
前言
资源链接:Github:手机终端Termux
无需多言请看VCR:
软件方案通过软件工具杜绝繁琐配置;不过作者未亲自体验过,并不清楚实际效果如何。
- LocalSend(跨平台开源,最强推荐)
- 全平台:Windows/macOS/Linux/Android/iOS
- 局域网点对点互传 - 不用登录、不用服务器、开箱即用
- 支持:文件、文件夹、文字、剪贴板
- 适合:临时快速传文件,不想配置任何服务。
-
Resilio Sync(原 Bittorrent Sync)
- P2P 同步,不经过服务器
- 多设备自动同步文件夹
- 支持:Windows/macOS/Linux/Android/iOS
- 适合:你想让多设备自动保持文件一致。
samba协议
SMB(Server Message Block)协议是由微软和因特尔联合制定的协议,主作为微软网络的通信(局域网文件和打印共享)协议;该协议工作于会话层、表示层和一小部分应用层,采用NetBIOS(运行在TCP/IP网络协议上服)的API应用接口;SMB的核心进程是nmbd(NetBIOS名称解析为IP地址并提供浏览服务,默认端口为139)和smbd(管理smb服务上共享目录与资源并校验权限与身份,默认的端口为445)。
samba配置了解
服务名:在linux上分smbd和nmbd;在Windows统称LanmanServer
配置文件:/etc/samba/smb.conf(Linux上);而Windows服务组件的均在注册表 / 组策略中
用户配置:在Linux中分别由smbpasswd或pdbedit决定;而在windows中是由本地AD用户账户决定
SMB工作流:发送 negport数据包 确定 SMB类型 => 客户端发送 session setup数据包 请求建立连接 => 服务器分配唯一用户UID进行权限确认 => 客户端发生 tree connect指令 请求资源 => 客户端发送共享资源连接并分配TID => 客户发送 tree diosconnect报文关闭共享
搭建samba
Windows系统搭建SMB
> 启动 SMB 功能
- 方法一:打开"控制面" => 选择"程序" => 打开"启动或关闭 Windows 功能" => 勾选SMB/samba相关的功能
- 方法二:Win+R键 打开"运行" => 输入optionalfeatures.exe => 勾选SMB/samba相关的功能
> 文件夹共享:
- 右键需要共享的文件夹 => 选择"属性" => 在"共享"中选择"高级共享" => 勾选"共享此文件夹(s)"并设置"权限" => 设置您对应的用户权限(最好不要设置everyone或guest权限为"完全控制",这无密码的访问用户均可修改/读取共享资源文件)
注:Windows搭建的用户共享目录文件夹的SMB服务用户默认使用当前用户及密码(您创建的共享资源在C:\User\administrator中且计算机上存在多名用户,默认允许电脑其他账户用户进行登录,如果在上述"权限"中可用进行限定设置),如果您想指定用户密码,请创建新的用户和密码并为该用下的文件进行共享和权限设置
#### > 启动 SMB 功能(SMB 1.0/CIFS 文件共享支持+SMB Direct直接访问):
win+r打开运行输入optionalfeatures在windows功能中勾选smb相关服务。
> 查看本机局域网 IP:
ipconfig
- 搜索并打开"cmd"或"命令提示符" => 输入 ipconfig 获取 当前局域网IP地址(如:192.168.1.xx)
> Windows访问:
- 在文件资源管理器explorer中输入 \192.168.1.xx\share
- 其他设备/系统请参考下述[访问方式]()
windows上管理samba
刷新 NetBIOS 缓存
nbtstat
Linux系统搭建Samba
> 使用apt安装smaba服务:
sudo apt install samba
> 设置用户ac的samba服务密码:
sudo smbpasswd -a ac
> 在/etc/samba/smb.conf文件中为用户ac进行配置:
[share]
path = /home/ac/share
browseable = yes
read only = no
guest ok = no
create mask = 0644
directory mask = 0755
> 重启samba服务:
sudo systemctl restart smbd
手机端Termux搭建SMB服务
\n#!/bin/bash
set -euo pipefail
\n# 颜色定义(提升交互体验)
RED='\033[0;31m' #']'
GREEN='\033[0;32m' #']'
YELLOW='\033[1;33m' #']'
BLUE='\033[0;34m' #']'
NC='\033[0m' # ']'重置颜色
\n# 全局变量
SHARE_DIR="\sdcard\ac"
SOURCE_BACKUP="/etc/apt/sources.list.bak"
ALIYUN_SOURCE="/etc/apt/sources.list"
\n# ====================== 核心函数:环境校验 ======================
function check_environment() {
echo -e "\n${BLUE}=== 开始环境校验 ===${NC}"
if command -v samba &>/dev/null; then
echo -e "${RED}Samba已存在,您还需要:${NC}"
echo -e "${GREEN}1.卸载Samba及其配置${NC}"
echo -e "${GREEN}2.继续配置samba服务${NC}"
echo -e "其他:退出"
read -p "\n您的需求是(默认退出)?" exist_choice
exist_choice=${exist_choice:-0}
if [ "exist_choice" = "1" ] || [ "exist_choice" = "1." ]
uninstall_samba
exit 1
elif [ "exist_choice" = "2" ] || [ "exist_choice" = "2." ]
switch_source
exit 1
else
echo -e "感谢您的使用~"
exit 1
fi
\n# 1. 检查是否为root用户
if [ "$(id -u)" -ne 0 ]; then
echo -e "${YELLOW}警告:当前脚本未以root权限运行(sudo ./script.sh)${NC}"
fi
\n# 2. 检查系统发行版
if [ -f /etc/os-release ]; then
. /etc/os-release
OS=$NAME
VERSION=$VERSION_ID
echo -e "${GREEN}✓ 系统检测:$OS $VERSION ${NC}"
else
echo -e "${YELLOW}警告:无法检测系统发行版,部分功能可能无法正常运行${NC}"
fi
\n# 3. 检查网络连通性
if ping -c 1 -W 3 www.baidu.com &>/dev/null; then
echo -e "${GREEN}✓ 网络连通信正常${NC}"
else
echo -e "${RED}错误:网络不通,请检查网络配置${NC}"
exit 1
fi
\n# 4. 检查apt工具
if command -v apt &>/dev/null; then
echo -e "${GREEN}✓ APT包管理器已安装${NC}"
else
echo -e "${RED}错误:未找到APT包管理器,此脚本仅支持Debian/Ubuntu系统${NC}"
exit 1
fi
echo -e "${BLUE}=== 环境校验完成 ===${NC}\n"
}
\n# ====================== 核心函数:源切换 ======================
function switch_source() {
read -p "是否切换为阿里云软件源?(y/n,默认n):" switch_choice
switch_choice=${switch_choice:-n}
if [ "$switch_choice" = "y" ] || [ "$switch_choice" = "Y" ]; then
echo -e "${BLUE}=== 开始切换软件源 ===${NC}"
\n# 备份原有源
if [ ! -f "$SOURCE_BACKUP" ]; then
cp "$ALIYUN_SOURCE" "$SOURCE_BACKUP"
echo -e "${GREEN}✓ 已备份原有软件源至 $SOURCE_BACKUP${NC}"
fi
\n# 写入阿里云源(适配Ubuntu 20.04/22.04)
cat > "$ALIYUN_SOURCE" << EOF
deb http://mirrors.aliyun.com/ubuntu/$(lsb_release -cs) main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/$(lsb_release -cs) main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/$(lsb_release -cs)-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/$(lsb_release -cs)-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/$(lsb_release -cs)-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/$(lsb_release -cs)-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/$(lsb_release -cs)-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/$(lsb_release -cs)-security main restricted universe multiverse
EOF
\n# 更新源缓存
apt update && echo -e "${GREEN}✓ 阿里云源切换完成并更新缓存${NC}" || echo -e "${RED}× 源更新失败,请手动检查${NC}"
else
echo -e "${YELLOW}→ 跳过软件源切换${NC}"
fi
}
\n# ====================== 核心函数:共享目录配置 ======================
function configure_share_dir() {
read -p "是否配置共享目录?(y/n,默认y):" dir_choice
dir_choice=${dir_choice:-y}
if [ "$dir_choice" = "y" ] || [ "$dir_choice" = "Y" ]; then
echo -e "${BLUE}\[\*\]配置共享目录: ${NC}"
\n# 选择:创建新目录 or 使用现有目录
read -p "请选择:1-创建新共享目录 2-使用现有目录(默认1):" dir_type
dir_type=${dir_type:-1}
if [ "$dir_type" = "1" ]; then
read -p "请输入要创建的共享目录路径(默认 /sdcard/ac):" new_dir
SHARE_DIR=${new_dir:-/sdcard/ac}
\n# 创建目录并设置权限
mkdir -p "$SHARE_DIR"
chmod 777 "$SHARE_DIR"
echo -e "${GREEN}✓ 已创建共享目录:$SHARE_DIR,权限设置为777${NC}"
elif [ "$dir_type" = "2" ]; then
\n# 循环验证现有目录是否存在
while true; do
if [ "SHARE_DIR" ]; then
echo -e "${GREEN}✓ 确认使用现有目录:$SHARE_DIR${NC}"
break
fi
read -p "请输入已存在的共享目录路径:" exist_dir
if [ -d "$exist_dir" ]; then
SHARE_DIR=$exist_dir
echo -e "${GREEN}✓ 确认使用现有目录:$SHARE_DIR${NC}"
break
else
echo -e "${RED}× 目录 $exist_dir 不存在,请重新输入${NC}"
fi
done
else
echo -e "${YELLOW}→ 输入无效,跳过共享目录配置${NC}"
return
fi
\n# 可选:将共享目录写入/etc/fstab(开机挂载)
read -p "是否将共享目录配置为开机自动挂载?(y/n,默认n):" mount_choice
mount_choice=${mount_choice:-n}
if [ "$mount_choice" = "y" ] || [ "$mount_choice" = "Y" ]; then
\n# 检查fstab中是否已存在该目录
if ! grep -q "$SHARE_DIR" /etc/fstab; then
echo -e "\n# 共享目录自动挂载" >> /etc/fstab
echo "$SHARE_DIR none defaults 0 0" >> /etc/fstab
mount -a && echo -e "${GREEN}✓ 已配置开机自动挂载${NC}" || echo -e "${RED}× 挂载配置失败,请手动检查${NC}"
else
echo -e "${YELLOW}→ 共享目录已存在于fstab中,无需重复配置${NC}"
fi
fi
else
echo -e "${YELLOW}→ 跳过共享目录配置${NC}"
fi
}
\n# ====================== 卸载Samba及其配置 ======================
function uninstall_samba(){
\n# 删除开机挂载内容
\n# 还原备份源
if [ ! -f "$SOURCE_BACKUP" ]; then
read -p "${GREEN}\[\*\] 是否还原备份源(y/n,默认n)?" scroll_back
scroll_back=${scroll_back:-n}
if [ "scroll_back" = "y" ] || [ "scroll_back" = "Y" ]; then
cp "$SOURCE_BACKUP" "$ALIYUN_SOURCE"
echo -e "${GREEN}✓ 已还原备份软件源至 $ALIYUN_SOURCE${NC}"
fi
\n# 卸载Samba及其依赖
apt remove samba && apt purge
}
\n# ====================== 主流程 ======================
function main() {
clear
echo -e "${GREEN}==================== Termux一键Samba配置脚本 ====================${NC}"
echo -e "Samba配置情况:"
echo -e "======================================================${NC}\n"
\n# 步骤1:环境校验
check_environment
\n# 步骤2:软件源切换(交互式)
switch_source
\n# 步骤3:共享目录配置(交互式)
configure_share_dir
\n# 完成提示
echo -e "\n${GREEN}==================== 配置完成 ====================${NC}"
echo -e "已执行操作总结:"
echo -e "1. 环境校验:通过"
echo -e "2. 软件源切换:$(if [ "$switch_choice" = "y" ]; then echo "已切换为阿里云源"; else echo "未切换"; fi)"
echo -e "3. 共享目录配置:$(if [ "$dir_choice" = "y" ]; then echo "已配置为 $SHARE_DIR"; else echo "未配置"; fi)"
echo -e "${NC}"
}
\n#### 启动主流程
main
注:如果您的Termux还没获取储存权限,请使用 termux-setup-storage 获取内部存储权限;请使用 termux-change-repo 命令选择可用源,如果网络仍不可达,请自行配置源地址,这里不做额外赘述。
> 更新相关包依赖:
pkg update && pkg upgrade -y
> 安装 smab 服务:
pkg install samba -y
> 查看samba版本:
smbd --version && nmbd --version
> 创建samba配置目录:
mkdir -p $PREFIX/etc/samba
使用 ls $PREFIX/etc/samba 命令查看是否存在(创建成功) #### > 更新samba配置文件路径: smbd --configfile=$PREFIX/etc/samba/smb.conf;nmbd --configfile=$PREFIX/etc/samba/smb.conf
> 复制配置示例(若存在):
可使用 ls $PREFIX/share/samba 查看是否存在配置示例文件
cp $PREFIX/share/samba/smb.conf.example $PREFIX/etc/samba/smb.conf
> 查看当前用户:
whoami
您可以使用 adduser new-user 命令创建本地用户,并根据提示设置密码
> 为当前用户添加 SMB 密码(两次输入进行确定):
smbpasswd -a $(whoami)
> 启用samba用户new-user:
smbpasswd -e new-user
> 查看已添加的samba用户:
pdbedit -L
> 创建共享文件夹:
mkdir -p /sdcard/share
> 赋予目标文件夹可执行可读写权限(无法写入执行权限):
chmod 775 /sdcard/share
# 添加samba用户new-user权限到目录文件权限:
chown termux-smb:new-user /sdcard/share
> 备份samba核心配置文件
cp $PREFIX/etc/samba/smb.conf $PREFIX/etc/samba/smb.conf.bak
> 在$PREFIX/etc/samba/smb.conf文件中进行配置:
- 方法一:使用nano进行编辑(nano编辑器支持复制粘贴)
nano ~/../use/etc/samba/smb.conf
注:如果您的termux未安装nano,请使用 pkg install nano -y 命令进行安装
- 在$PREFIX/etc/samba/smb.conf配置文件中复制粘贴以下配置(基础安全访问):
[global]
workgroup = WORKGROUP
map to guest = Bad User
server min protocol = NT1
server max protocol = SMB3
[share]
path = /sdcard/share
browseable = yes
writable = yes
guest ok = yes
read only = no
create mask = 0644
directory mask = 0755
-
方法二:复制示例配置并进行追加写入
cp $PREFIX/share/doc/samba/smb.conf.example$PREFIX/etc/samba/smb.conf
-
使用以下命令在$PREFIX/etc/samba/smb.conf配置文件末尾追加以下配置(将/sdcard/ac目录设置为共享文件夹,无需密码允许匿名访问):
cat >> $PREFIX/etc/samba/smb.conf <<EOF
[TermuxSMB]
comment = Termux SMB Share
path = /sdcard/ac
browsable = yes
writable = yes
guest ok = yes
guest only = yes
create mask = 0777
directory mask = 0777
EOF
> 检查配置文件是否正确:
testparm
> 启动 SMB 服务:
smbd -D
> 手动启动Samba子服务nmbd解析为IP:
nmbd -D
> 查看 SMB 服务状态(查看smbd是否运行):
ps -ef | grep smb
> 查看本机局域网:
ifconfig
Android手机端访问:
注:使用Termux搭建的Samba服务访问地址应为:【IP地址】\TermuxSMB
- 使用ES 文件浏览器进行访问:在"主页"中选择"我的网络" => 点击"局域网"进行"扫描" => 点击对应的设备服务输入用户密码即可访问
- 其他设备/系统请参考下述访问方式
<font id="access">访问方式</font>
Windows的explrer文件资源管理器:\IP地址\share
macOS:smb://IP地址/share
Linux:smb://IP地址/share 或挂载
Android手机:
- ES 文件浏览器:在"主页"中选择"我的网络" => 点击"局域网"进行"扫描" => 点击对应的设备服务输入用户密码即可访问
- Solid Explorer、CX 文件管理器、NP 文件管理器
iOS:"文件" App → 连接服务器 → smb://IP