Samba 4.15.13 常用 CLI 命令详解

实测 Samba 4.15.13 全套命令行工具:smbclient 上传下载与 tar 备份、smbget、smbpasswd 启停改密、pdbedit 审计导出删除、testparm 校验查询、smbstatus 会话与锁、smbcacls 远程 ACL、net status、smbcontrol 热重载,附命令总览矩阵与排障路径。

SambaSamba命令行2026/10/26

Samba 4.15.13 常用 CLI 命令详解

目标:把 Samba 4.15.13(Ubuntu 22.04 仓库版)日常运维必用的命令行工具逐个过一遍——每条命令都给出真实执行回显与参数解读,形成一张"要做什么、用哪条命令"的矩阵。全部命令与输出均在真实双机环境实测。

一、环境信息

项目值
服务端操作系统Ubuntu 22.04.5 LTS(x86_64)
服务端主机名 / IPfileserver / 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 场景不受影响。

十二、参考链接

  1. smbclient 手册 https://www.samba.org/samba/docs/current/man-html/smbclient.1.html (检索日期 2026-10-26)
  2. smbstatus / smbcontrol / pdbedit 手册(man smbstatus、man smbcontrol、man pdbedit,随包附带)
  3. Samba 官方 Wiki https://wiki.samba.org/ (检索日期 2026-10-26)
  4. 本站相关文档:Samba 4.15.13 介绍与选型指南
  5. 本站相关文档:Ubuntu 22.04 安装 Samba 4.15.13 指南
  6. 本站相关文档:Samba 4.15.13 配置参数详解