Linux命令-smbclientSamba/CIFS 客户端 简介 语法⚙️ 选项 交互命令文件和目录操作本地和会话控制 示例示例 1列出服务器共享并连接示例 2非交互式操作——单条命令和脚本自动化示例 3备份 Windows 共享到 tar 归档示例 4自动化备份脚本示例 5指定 SMB 协议版本调试连接问题⚠️ 注意 相关命令 总结快速参考smbclient是 Samba 套件中的命令行 FTP 式客户端用于访问 Windows 共享文件夹SMB/CIFS 协议。它提供交互式 Shell 和非交互式命令两种模式是 Linux 与 Windows 互操作的核心工具之一。smbclient不需要挂载文件系统即可访问共享适合临时查看、脚本自动化、备份等场景。如果需要持久挂载共享为本地目录请使用mount -t cifs。 简介SMBServer Message Block协议是 Windows 文件和打印共享的基础CIFSCommon Internet File System是其后续版本。smbclient由 Samba 项目开发让 Linux/Unix 系统能够像 FTP 客户端一样访问 SMB/CIFS 共享资源。安装方式因发行版而异# Debian/Ubuntu$sudoapt-getinstallsmbclient# RHEL/CentOS 7$sudoyuminstallsamba-client# RHEL/CentOS 8 / Fedora$sudodnfinstallsamba-client# Arch Linux$sudopacman-Ssmbclient# openSUSE$sudozypperinstallsamba-client# 验证安装$ smbclient--versionVersion4.19.5-Debian 语法smbclient //服务器/共享名[选项]smbclient-L服务器[选项]# 列出共享smbclient //服务器/共享名-c命令# 执行单条命令⚙️ 选项选项说明-L 服务器列出远程服务器上的所有共享资源-U 用户名[%密码]指定登录用户名和密码密码可直接跟在%后-W 工作组/域指定工作组或域名-N匿名登录无密码等同于-U %-p 端口指定 SMB 端口默认 445旧版 139-m 协议级别指定 SMB 协议版本如SMB2、SMB3-c 命令连接后立即执行指定命令执行完后退出-d 级别调试级别0-10越高信息越详细-I IP地址使用 IP 地址连接跳过 NetBIOS 名称解析-A 认证文件从文件读取用户名和密码格式usernamexxxpasswordxxx--max-protocol 版本限制最高协议版本--min-protocol 版本限制最低协议版本-t 终端代码指定终端字符编码如-t utf8-T 选项创建 tar 格式备份c创建、x提取 交互命令进入 smbclient 交互模式后可以使用的命令文件和目录操作命令说明ls/dir列出远程共享中的文件和目录cd 目录切换远程工作目录pwd显示远程当前目录get 文件 [本地名]下载远程文件put 文件 [远程名]上传本地文件mget 通配符批量下载文件mput 通配符批量上传文件mkdir 目录创建远程目录rmdir 目录删除远程空目录del 文件/rm 文件删除远程文件rename 旧名 新名重命名远程文件more 文件查看远程文件内容recurse切换递归操作开关配合 mget/mput 使用prompt切换批量操作时的确认提示lowercase切换下载文件名自动转小写本地和会话控制命令说明lcd 目录切换本地工作目录!命令在本地 Shell 中执行命令queue显示打印队列如果共享是打印机print 文件打印文件到远程打印机volume显示共享的卷标信息stat 文件显示远程文件详细信息altname 文件显示文件的 8.3 短文件名exit/quit/q退出 smbclient 示例示例 1列出服务器共享并连接# Step 1: 扫描目标服务器上的所有共享$ smbclient-L192.168.1.50-NSharename Type Comment --------- ---- ------- ADMIN$ Disk 远程管理 C$ Disk 默认共享 IPC$ IPC 远程 IPC ShareDocs Disk 共享文档 UserData Disk 用户数据 Printer1 Printer HP LaserJet SMB1 disabled -- no workgroup available# Step 2: 交互式连接到共享$ smbclient //192.168.1.50/ShareDocs-Ujohn Passwordfor[WORKGROUP\john]: ******** Tryhelpto get a list of possible commands. smb:\ls.D0Sat Jun1410:00:002026..D0Sat Jun1410:00:002026project_docs D0Fri Jun1315:30:002026README.txt A2048Sat Jun1409:00:002026sales_report.xlsx A15360Fri Jun1311:20:00202610485760blocks of size1024.5242880blocks available smb:\cdproject_docs smb:\project_docs\get design_spec.pdf gettingfile\project_docs\design_spec.pdf of size524288as design_spec.pdf(512.0KiloBytes/sec)(average512.0KiloBytes/sec)smb:\project_docs\exit# 预期输出# 列出所有共享 → 密码认证 → 浏览目录 → 下载文件 → 退出示例 2非交互式操作——单条命令和脚本自动化# 方式一使用 -c 执行单条命令$ smbclient //192.168.1.50/ShareDocs-Ujohn%mypassword-cls# 注%后面跟密码虽然方便但在命令行中暴露密码不安全# 方式二使用认证文件更安全$cat~/.smb_credentialsCRED usernamejohn passwordMySecurePass123 domainWORKGROUP CRED$chmod600~/.smb_credentials $ smbclient //192.168.1.50/ShareDocs-A~/.smb_credentials-cls# 方式三多命令串联用分号分隔$ smbclient //192.168.1.50/ShareDocs-A~/.smb_credentials\-ccd backups; prompt off; mget *.tar.gz; exit# 预期输出# getting file \backups\db_backup_20260601.tar.gz of size 104857600 ...# getting file \backups\db_backup_20260608.tar.gz of size 106954752 ...# 方式四Here Document 实现复杂操作$ smbclient //fileserver/IT-A~/.smb_credentialsSMBCMD cd Software/Linux mkdir New Deployment cd New Deployment lcd /tmp/deploy prompt off mput * ls exit SMBCMD# 预期输出# smb: \ cd Software\Linux# smb: \Software\Linux\ mkdir New Deployment# smb: \Software\Linux\ cd New Deployment# smb: \Software\Linux\New Deployment\ lcd /tmp/deploy# smb: \Software\Linux\New Deployment\ mput deploy.tar.gz install.sh config.ini# Putting file deploy.tar.gz as \Software\Linux\New Deployment\deploy.tar.gz (100%)# Putting file install.sh as \Software\Linux\New Deployment\install.sh (100%)# Putting file config.ini as \Software\Linux\New Deployment\config.ini (100%)# smb: \Software\Linux\New Deployment\ ls# deploy.tar.gz A 10240000 Sat Jun 14 10:00:00 2026# install.sh A 512 Sat Jun 14 10:00:00 2026# config.ini A 2048 Sat Jun 14 10:00:00 2026示例 3备份 Windows 共享到 tar 归档# smbclient 内置 tar 模式可直接将共享内容打包成 tar# 这是备份 Windows 共享最便捷的方式之一# 创建备份tar 归档到本地文件$ smbclient //192.168.1.50/ShareDocs-A~/.smb_credentials\-Tc/backup/share_backup_$(date%Y%m%d).tar# 从 tar 归档恢复到共享$ smbclient //192.168.1.50/ShareDocs-A~/.smb_credentials\-Tx/backup/share_backup_20260601.tar# 备份特定子目录$ smbclient //192.168.1.50/UserData-A~/.smb_credentials\-Tc/backup/userdata.tar project_docs/\*.pdf reports/\*# 指定 tar 增量备份仅备份新文件$ smbclient //192.168.1.50/ShareDocs-A~/.smb_credentials\-TcN/backup/share_incremental.tar# 预期输出# 打包过程会在标准输出显示正在处理的文件列表# tar: dumped 142 files, 524288000 bytes total示例 4自动化备份脚本#!/bin/bash# Windows 共享自动备份脚本# 将 Windows 共享内容周期备份到 Linux 服务器set-eCRED_FILE/root/.smb_credentialsBACKUP_DIR/backup/windows_sharesLOG_FILE/var/log/smb_backup.logDATE$(date%Y%m%d_%H%M%S)# 共享列表格式服务器 共享名declare-ASHARES([fs01]IT_Docs HR_Data Finance[fs02]Projects Backup)log(){echo[$(date%Y-%m-%d %H:%M:%S)]$*|tee-a$LOG_FILE}mkdir-p$BACKUP_DIRforSERVERin${!SHARES[]};doforSHAREin${SHARES[$SERVER]};doBACKUP_FILE${BACKUP_DIR}/${SERVER}_${SHARE}_${DATE}.tarlog开始备份: //${SERVER}/${SHARE}-${BACKUP_FILE}smbclient//${SERVER}/${SHARE}\-A$CRED_FILE\-Tc$BACKUP_FILE2$LOG_FILEif[$?-eq0];thenSIZE$(du-sh$BACKUP_FILE|cut-f1)log备份成功:${BACKUP_FILE}(${SIZE})elselog备份失败: //${SERVER}/${SHARE}fidonedone# 清理 30 天前的旧备份find$BACKUP_DIR-name*.tar-mtime30-deletelog清理完成已删除 30 天前的备份# 预期日志输出# [2026-06-14 03:00:01] 开始备份: //fs01/IT_Docs - /backup/windows_shares/fs01_IT_Docs_20260614_030001.tar# [2026-06-14 03:05:23] 备份成功: /backup/windows_shares/fs01_IT_Docs_20260614_030001.tar (245M)# [2026-06-14 03:05:23] 开始备份: //fs01/HR_Data - /backup/windows_shares/fs01_HR_Data_20260614_030523.tar# [2026-06-14 03:06:45] 备份成功: /backup/windows_shares/fs01_HR_Data_20260614_030523.tar (12M)示例 5指定 SMB 协议版本调试连接问题# Windows 10/11 和 Windows Server 默认禁用 SMB1因 WannaCry 安全漏洞# 如果连接失败需要指定更高的协议版本# 尝试使用 SMB2 连接$ smbclient //windows-server/Share-Uuser-mSMB2# 或$ smbclient //windows-server/Share-Uuser --max-protocol SMB3# 调试连接问题-d 3 输出详细调试信息$ smbclient //192.168.1.50/ShareDocs-Ujohn-d3-clslp_load_ex: refreshing parameters Initialising global parameters Processing section[global]added interface eth0ip192.168.1.10bcast192.168.1.255netmask255.255.255.0 Connecting to192.168.1.50 at port445Got a positive name query response from192.168.1.50(192.168.1.50)saved_session_key:len16doing spnego session setup gotOID1.3.6.1.4.1.311.2.2.30 gotprincipalNONE gotprincipalnot_defined_in_RFC4178please_ignore.D0Sat Jun1410:00:002026..D0Sat Jun1410:00:002026# 指定 NetBIOS 名称和 IP解决名称解析问题$ smbclient //192.168.1.50/ShareDocs-I192.168.1.50-WWORKGROUP-Ujohn⚠️ 注意smbclient vs mount -t cifs 的选择特性smbclientmount -t cifs访问方式FTP 式交互命令文件系统挂载像本地目录持久性临时访问可持久挂载fstab资源占用按需连接不占用挂载点持续占用内核资源应用兼容仅 smbclient 支持的操作用所有应用都能直接访问脚本友好✅-c非交互模式需处理挂载/卸载适用场景临时传输、备份脚本长期文件共享、开发环境常见问题排查“NT_STATUS_CONNECTION_REFUSED”— 目标服务器 445 端口未开放或防火墙阻止“NT_STATUS_LOGON_FAILURE”— 用户名或密码错误注意域名前缀“protocol negotiation failed: NT_STATUS_CONNECTION_RESET”— SMB 协议版本不匹配尝试指定-m SMB2或-m SMB3中文文件名乱码— 添加-t utf8选项或设置LANGzh_CN.UTF-8 相关命令命令说明smbpasswd管理 Samba 用户密码smbstatus查看 Samba 服务器连接状态mount -t cifs将 SMB/CIFS 共享挂载到本地目录nmblookupNetBIOS 名称查询smbtree以树形结构显示网络中的共享smbcontrol向 Samba 守护进程发送控制消息testparm检查 Samba 配置文件语法 总结smbclient是 Linux 管理员访问 Windows 共享的瑞士军刀它的价值在于零挂载代价不需要 root 权限挂载目录普通用户即可使用FTP 式操作交互命令直观学习曲线低脚本化友好-c选项和 Here Document 支持完美的自动化内置备份tar 模式可直接打包远程共享无需额外工具协议灵活支持 SMB1 到 SMB3 的完整协议栈日常运维中临时访问 Windows 共享用 smbclient长期挂载用mount -t cifs。两者搭配使用覆盖所有 Linux-Windows 互操作场景。