Samba 4.15.13 常用 CLI 命令详解
实测 Samba 4.15.13 全套命令行工具:smbclient 上传下载与 tar 备份、smbget、smbpasswd 启停改密、pdbedit 审计导出删除、testparm 校验查询、smbstatus 会话与锁、smbcacls 远程 ACL、net status、smbcontrol 热重载,附命令总览矩阵与排障路径。
Samba 4.15.13 常用 CLI 命令详解
目标:把 Samba 4.15.13(Ubuntu 22.04 仓库版)日常运维必用的命令行工具逐个过一遍——每条命令都给出真实执行回显与参数解读,形成一张"要做什么、用哪条命令"的矩阵。全部命令与输出均在真实双机环境实测。
一、环境信息
| 项目 | 值 |
|---|---|
| 服务端操作系统 | Ubuntu 22.04.5 LTS(x86_64) |
| 服务端主机名 / IP | fileserver / 10.89.56.10 |
| Samba 版本 | samba 2:4.15.13+dfsg-0ubuntu1.13(smbd --version 显示 Version 4.15.13-Ubuntu) |
| 客户端 | Ubuntu 22.04.5 LTS,主机名 client,IP 10.89.56.20 |
| 客户端工具 | smbclient 2:4.15.13+dfsg-0ubuntu1.13、cifs-utils 2:6.14-1ubuntu0.7、smbget(samba-common-bin 随附) |
| 服务端工具包 | samba、samba-common-bin(smbpasswd/pdbedit/testparm/net/smbstatus/smbcontrol/smbcacls 随附) |
| 共享 | public(匿名)、team(认证+回收站)、archive(只读+admin 可写) |
| 演示账号 | admin、dev1(密码均为 q1w2e3r4),组 smbteam |
| 配置层知识 | 见《Samba 4.15.13 配置参数详解》 |
二、命令总览矩阵
| 命令 | 所在机 | 用途 | 典型场景 |
|---|---|---|---|
| smbclient | 客户端 | SMB 交互/脚本化访问 | 上传下载、浏览共享、tar 备份 |
| smbget | 客户端 | 命令行直连下载单个文件 | 快速拉取远程文件(类 wget) |
| smbpasswd | 服务端 | 管理用户 SMB 密码与启停 | 建号、改密、禁用 |
| pdbedit | 服务端 | passdb 的查看/导出/删除 | 审计账号、批量导出 |
| testparm | 服务端 | 配置校验与查询 | 改配置后第一道检查 |
| smbstatus | 服务端 | 查看会话/连接/锁 | 运维巡检、排障 |
| smbcacls | 两端 | 查看/设置 SMB ACL | 远程改文件授权 |
| net | 服务端 | 多子命令管理工具 | net status 看连接 |
| smbcontrol | 服务端 | 向 smbd/nmbd 发指令 | 热重载配置、关消息 |
三、smbclient
3.1 版本与共享浏览(-V / -L)
smbclient -V
smbclient -L //10.89.56.10 -N # -N 匿名
smbclient -L //10.89.56.10 -U dev1%q1w2e3r4 # 认证,%后接密码
实测输出:
Version 4.15.13-Ubuntu
Sharename Type Comment
--------- ---- -------
public Disk Anonymous public share
team Disk Authenticated team share
archive Disk Read-only archive, admin writable
IPC$ IPC IPC Service (Samba Server 4.15.13-Ubuntu)
SMB1 disabled -- no workgroup available
匿名与认证浏览出的列表一致(map to guest = Bad User 下匿名即 guest)。-L 是排查"服务端装好了、客户端看不到共享"的第一条命令。
3.2 非交互操作(-c 与 put/get/ls/mkdir/del)
-c 后接分号分隔的命令串,是脚本化的主力形态。上传、读取、建目录、删除一轮:
echo "hello from client $(date)" > /tmp/hello.txt
smbclient //10.89.56.10/public -N -c "put /tmp/hello.txt hello.txt; ls"
smbclient //10.89.56.10/team -U dev1%q1w2e3r4 -c "get from-dev1.txt /tmp/got.txt"
smbclient //10.89.56.10/team -U dev1%q1w2e3r4 -c "mkdir dirmask-test"
smbclient //10.89.56.10/team -U dev1%q1w2e3r4 -c "del docs/plan.txt"
实测输出(依次):
putting file /tmp/hello.txt as \hello.txt (45.9 kb/s) (average 45.9 kb/s)
Try "help" to get a list of possible commands.
. D 0 Mon Oct 26 08:00:55 2026
.. D 0 Mon Oct 26 07:59:31 2026
hello.txt A 47 Mon Oct 26 08:00:55 2026
464118080 blocks of size 1024. 336461396 blocks available
getting file \from-dev1.txt of size 8 as /tmp/got.txt (80000.0 KiloBytes/sec) (average inf KiloBytes/sec)
两个实测陷阱:其一,-c "put /tmp/hello.txt"(缺远端文件名)会报 NT_STATUS_OBJECT_PATH_NOT_FOUND opening remote file \tmp\hello.txt——put 必须显式给远端名;其二,ls 输出里 hello.txt 的 A 标记是 DOS archive 属性,服务端会因 map archive 多出属主 x 位。
负向验证——匿名连认证共享、错密码、不存在用户:
smbclient //10.89.56.10/team -N -c ls
smbclient //10.89.56.10/team -U dev1%badpass -c ls
smbclient //10.89.56.10/team -U nosuchuser%q1w2e3r4 -c ls
实测输出:
tree connect failed: NT_STATUS_ACCESS_DENIED
===
session setup failed: NT_STATUS_LOGON_FAILURE
===
tree connect failed: NT_STATUS_ACCESS_DENIED
(=== 为三次实测输出的分隔。)三种失败发生在不同阶段:会话建立(密码)与 tree connect(共享准入),据此可快速定位是账号问题还是共享权限问题。
3.3 交互模式与 help 命令列表
直接执行 smbclient //10.89.56.10/team -U dev1%q1w2e3r4 进入 smb: \> 提示符。交互内输入 help 可列出全部子命令,实测共 76 个(节选):
? allinfo altname archive backup
blocksize cancel case_sensitive cd chmod
chown close del deltree dir
du echo exit get getfacl
geteas hardlink help history iosize
lcd link lock lowercase ls
l mask md mget mkdir
more mput newer notify open
posix posix_encrypt posix_open posix_mkdir posix_rmdir
posix_unlink posix_whoami print prompt put
pwd q queue quit readlink
rd recurse reget rename reput
rm rmdir showacls setea setmode
scopy stat symlink tar tarmode
timeout translate unlock volume vuid
wdel logon listconnect showconnect tcon
tdis tid utimes logoff ..
!
常用的有:ls/dir(列表)、get/put(单文件)、mget/mput(通配批量,配合 prompt off 免逐个确认)、reget/reput(断点续传)、del/rm、lcd(切本地目录)、!命令(执行本地 shell)。
3.4 整个共享的 tar 备份(-Tc)
smbclient 内建 tar 引擎,可直接把共享打成 tar 包,无需 root:
smbclient //10.89.56.10/public -N -Tc /tmp/pub-backup.tar
tar -tf /tmp/pub-backup.tar
mkdir -p /tmp/restore && tar -xf /tmp/pub-backup.tar -C /tmp/restore && ls -l /tmp/restore/
实测输出:
tar: dumped 1 files and 0 directories
Total bytes written: 47 (0.0 MiB/s)
./hello.txt
total 4
-rw-r--r-- 1 root root 47 Oct 26 09:09 hello.txt
注意写法是 -Tc 连写(c=create),后跟本地 tar 文件路径;写成 -T c /tmp/pub-backup.tar 会把路径当成远端文件清单而报 NT_STATUS_OBJECT_NAME_NOT_FOUND。恢复用 -Tx /tmp/pub-backup.tar。
3.5 协议与版本协商(-m)
smbclient -m NT1 //10.89.56.10/public -N -c ls
smbclient -m SMB2 //10.89.56.10/public -N -c ls
实测输出:
lp_load_ex: Max protocol NT1 is less than min protocol SMB2_02.
protocol negotiation failed: NT_STATUS_INVALID_PARAMETER_MIX
hello.txt A 47 Mon Oct 26 09:09:21 2026
464118080 blocks of size 1024. 335197928 blocks available
-m 用来钉住客户端最大协议版本做兼容性排查;Samba 4.15 服务端默认下限 SMB2_02,NT1 直接被参数检查拒绝。cifs 内核挂载协商结果可用 mount | grep cifs 查看(实测 vers=3.1.1)。
四、smbget
4.1 匿名下载远程文件
smbget -a smb://10.89.56.10/public/hello.txt
ls -l hello.txt && cat hello.txt
实测输出:
[hello.txt] 0b of 47b (0.00%) at 0b/s ETA: Unknownsmb://10.89.56.10/public/hello.txt
Downloaded 47b in 0 seconds
Using workgroup WORKGROUP, user guest
-rwxr-xr-x 1 root root 47 Oct 26 08:38 hello.txt
hello from client Mon Oct 26 08:00:41 UTC 2026
-a 即匿名(guest)下载,用法与 wget 类似,支持 smb://host/share/path 直链与 -r 递归;认证下载用 -U user%password。适合脚本里拉取单个文件,比 smbclient -c get 更顺手。
五、smbpasswd
5.1 添加账号(-a)
smbpasswd -a admin
smbpasswd -a dev1
pdbedit -L
实测输出(按提示输入两次新密码):
New SMB password:
Retype new SMB password:
Added user admin.
New SMB password:
Retype new SMB password:
Added user dev1.
admin:1001:
dev1:1000:
-a 把已存在的系统用户加入 Samba 密码库(passdb.tdb),UID 括号里就是系统 UID。只改密码(用户已存在)直接 smbpasswd dev1。
5.2 禁用、启用与改密(-d / -e / 交互改密)
smbpasswd -d dev1
smbclient //10.89.56.10/team -U dev1%q1w2e3r4 -c ls
smbpasswd -e dev1
smbpasswd dev1
实测输出(依次):
Disabled user dev1.
session setup failed: NT_STATUS_ACCOUNT_DISABLED
Enabled user dev1.
New SMB password:
Retype new SMB password:
-d 禁用后客户端立即收到 NT_STATUS_ACCOUNT_DISABLED(无需重启服务),-e 重新启用,直接 smbpasswd 用户名 进入改密交互。临时冻结账号用这条链路最快。
六、pdbedit
6.1 列表(-L)与批量导出(-w)
pdbedit -L
pdbedit -L -w dev1
实测输出:
admin:1001:
dev1:1000:
dev1:1000:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:FA31EE7E163000674D3B568DEC1710A4:[U ]:LCT-6ADF1134:
-w 以 smbpasswd 兼容格式导出(含 NT 哈希字段,X 为占位),适合迁移前的账号盘点;导出文件含哈希,务必按敏感数据保管。
6.2 详情(-Lv)
pdbedit -L -v admin
实测输出(节选):
Unix username: admin
NT username:
Account Flags: [U ]
User SID: S-1-5-21-1836360869-2309419580-3956840721-1000
Primary Group SID: S-1-5-21-1836360869-2309419580-3956840721-513
Full Name:
Home Directory: \\FILESERVER\admin
HomeDir Drive:
Logon Script:
Profile Path: \\FILESERVER\admin\profile
Domain: FILESERVER
[U] 是普通用户标志,User SID 由服务端机器 SID + RID 1000 构成——SID 体系在后续接 AD 域时是排障关键。
6.3 删除账号(-x)
smbpasswd -a test1
pdbedit -L
pdbedit -x test1
echo $?
pdbedit -L
实测输出:
Added user test1.
admin:1001:
test1:1002:
dev1:1000:
0
admin:1001:
dev1:1000:
-x 从 passdb 移除(只删 Samba 账号,不影响系统用户),退出码 0。smbpasswd 只能增改禁启,删除必须用 pdbedit。
七、testparm
7.1 全量校验与参数/段查询
testparm -s
testparm -s --parameter-name='map to guest' 2>/dev/null
testparm -s --section-name=team 2>/dev/null
实测输出(第一条为全量校验头部,后两条为查询结果):
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Weak crypto is allowed
Server role: ROLE_STANDALONE
Bad User
[team]
comment = Authenticated team share
create mask = 0664
directory mask = 0775
path = /srv/samba/team
read only = No
valid users = @smbteam
vfs objects = recycle
recycle:exclude = *.tmp
recycle:maxsize = 0
recycle:touch = yes
recycle:versions = yes
recycle:keeptree = yes
recycle:repository = .recycle
--section-name 展开的是生效值(含继承与默认归一,read only = No 即 writable = yes 的规范形),比肉眼看配置文件可靠。
7.2 未知参数告警
在配置尾部追加拼错的参数再校验:
Load smb config files from /etc/samba/smb.conf
Unknown parameter encountered: "map too guest"
Ignoring unknown parameter "map too guest"
Loaded services file OK.
testparm 只警告不阻断,Samba 会静默忽略未知参数——改完配置务必看 stderr(详细闭环见《Samba 4.15.13 配置参数详解》2.2 节)。
八、smbstatus
8.1 全量视图(会话+连接+锁)
有活跃会话时执行 smbstatus:
Samba version 4.15.13-Ubuntu
PID Username Group Machine Protocol Version Encryption Signing
----------------------------------------------------------------------------------------------------------------------------------------
4191 dev1 dev1 10.89.56.20 (ipv4:10.89.56.20:51376) SMB3_11 - partial(AES-128-CMAC)
Service pid Machine Connected at Encryption Signing
---------------------------------------------------------------------------------------------
IPC$ 4191 10.89.56.20 Mon Oct 26 08:02:23 2026 UTC - -
team 4191 10.89.56.20 Mon Oct 26 08:02:23 2026 UTC - -
No locked files
三段分别对应:会话(用户、来源、协议版本 SMB3_11、签名 partial(AES-128-CMAC))、共享连接(连了哪些服务)、锁(此处无文件被锁)。排查"文件被谁占用"看第三段,审计"谁在线"看第一段。
8.2 分项查询(-b / -p / -S)与锁定明细(-L)
无会话时各分项只输出表头:
=== smbstatus -b ===
Samba version 4.15.13-Ubuntu
PID Username Group Machine Protocol Version Encryption Signing
----------------------------------------------------------------------------------------------------------------------------------------
=== smbstatus -p ===
Samba version 4.15.13-Ubuntu
PID Username Group Machine Protocol Version Encryption Signing
----------------------------------------------------------------------------------------------------------------------------------------
=== smbstatus -S ===
Service pid Machine Connected at Encryption Signing
---------------------------------------------------------------------------------------------
客户端挂载并持有文件时,smbstatus -S 与 -L 实测:
Service pid Machine Connected at Encryption Signing
---------------------------------------------------------------------------------------------
team 5517 10.89.56.20 Mon Oct 26 08:37:41 2026 UTC - -
IPC$ 5517 10.89.56.20 Mon Oct 26 08:37:41 2026 UTC - -
===L===
Pid User(ID) DenyMode Access R/W Oplock SharePath Name Time
--------------------------------------------------------------------------------------------------
5517 1000 DENY_NONE 0x12019f RDWR LEASE(RWH) /srv/samba/team 季度报表-Q3.xlsx Mon Oct 26 08:37:41 2026
LEASE(RWH) 表示客户端持有了该文件的读/写/句柄租约(SMB3 特性,用于客户端缓存);清理僵死会话可对第一段的 PID 执行 kill,smbd 会自动重建子进程。
九、smbcacls
9.1 查看共享根与文件 ACL
smbcacls //10.89.56.10/team "" -U dev1%q1w2e3r4
smbcacls //10.89.56.10/team acl.txt -U dev1%q1w2e3r4
实测输出(依次):
REVISION:1
CONTROL:SR|PD|DP
OWNER:Unix User\root
GROUP:Unix Group\smbteam
ACL:Unix User\root:ALLOWED/0x0/FULL
ACL:Unix Group\smbteam:ALLOWED/0x0/FULL
ACL:Everyone:ALLOWED/0x0/READ
REVISION:1
CONTROL:SR|PD|DP
OWNER:FILESERVER\dev1
GROUP:Unix Group\smbteam
ACL:FILESERVER\dev1:ALLOWED/0x0/RW
ACL:Unix Group\smbteam:ALLOWED/0x0/RW
ACL:Everyone:ALLOWED/0x0/R
共享根 ACL 映射自目录属主/属组,文件级 ACL 由创建者 dev1 持 RW。smbcacls 的价值在于从 SMB 端远程改授权(-a ADD / -m MODIFY / -r REMOVE 子命令),无需登服务端 setfacl——对接 Windows 管理习惯的服务可用它统一操作(服务端 setfacl 的对照实验见《Samba 4.15.13 配置参数详解》第七节)。
十、net
10.1 net status sessions / shares
net 是多合一管理工具(net status、net conf、net rpc 等子命令族)。与 smbstatus 互补的两个子命令:
net status sessions
net status shares
实测输出(与 8.2 节同一活跃会话):
PID Username Group Machine
-------------------------------------------------------------------
5517 dev1 dev1 10.89.56.20 (ipv4:10.89.56.20:34016)
Service pid machine Connected at
-------------------------------------------------------
team 5517 10.89.56.20 Mon Oct 26 08:37:41 2026
IPC$ 5517 10.89.56.20 Mon Oct 26 08:37:41 2026
输出与 smbstatus 同源但更紧凑,适合脚本 grep。
十一、smbcontrol 与排障辅助命令
11.1 smbcontrol reload-config(热重载)
testparm -s >/dev/null 2>&1 && smbcontrol all reload-config && echo reloaded
实测输出:
reloaded
smbcontrol 向运行中的 smbd/nmbd 进程发消息,reload-config 让配置改动即时生效且不断开现有会话(对比 systemctl restart smbd 会清空所有连接)。smbcontrol smbd ping 可探测进程响应。改配置的标准三连:testparm 校验 → reload-config → 客户端复测。
11.2 ss 确认监听端口
ss -ltnp | grep -E ":445|:139"
实测输出:
LISTEN 0 50 0.0.0.0:445 0.0.0.0:* users:(("smbd",pid=3837,fd=46))
LISTEN 0 50 0.0.0.0:139 0.0.0.0:* users:(("smbd",pid=3837,fd=47))
LISTEN 0 50 [::]:445 [::]:* users:(("smbd",pid=3837,fd=44))
LISTEN 0 50 [::]:139 [::]:* users:(("smbd",pid=3837,fd=45))
smbd 同时监听 445(SMB 直连)与 139(NBT over TCP)。客户端连不上时按"ss 有无监听 → ufw 是否放行 → smbclient 本机自测"顺序排查。另注:本测试环境的 nmbd(NetBIOS 名服务,UDP 137/138)未启用,此时 nmblookup -A 10.89.56.10 返回 No reply from 10.89.56.10,纯 445 场景不受影响。
十二、参考链接
- smbclient 手册 https://www.samba.org/samba/docs/current/man-html/smbclient.1.html (检索日期 2026-10-26)
- smbstatus / smbcontrol / pdbedit 手册(man smbstatus、man smbcontrol、man pdbedit,随包附带)
- Samba 官方 Wiki https://wiki.samba.org/ (检索日期 2026-10-26)
- 本站相关文档:Samba 4.15.13 介绍与选型指南
- 本站相关文档:Ubuntu 22.04 安装 Samba 4.15.13 指南
- 本站相关文档:Samba 4.15.13 配置参数详解