侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux smbclient命令详解:如何使用smbclient访问SMB/CIFS资源(附实例教程和注意事项)

Linux smbclient命令介绍

smbclient是一个用于访问SMB/CIFS资源的客户端程序,它是Samba软件套件的一部分。SMB/CIFS是一种用于在网络上共享文件和打印机的协议,最初由微软开发,但也被其他操作系统支持。smbclient提供了一个类似于ftp的接口,可以与LAN Manager服务器通信,执行一些文件传输和管理的操作,如从服务器下载文件,上传文件到服务器,获取服务器的目录信息等。

Linux smbclient命令适用的Linux版本

smbclient命令适用于大多数Linux发行版,但需要安装smbclient软件包。这个软件包也被描述为“Unix的命令行SMB/CIFS客户端”。不同的Linux发行版可能有不同的安装命令,以下是一些常见的例子:

  • Debian, Ubuntu, Mint, Kali: sudo apt install smbclient
  • CentOS, RHEL, Fedora: sudo dnf install smbclient
  • Arch, Manjaro: sudo pacman -S smbclient

如果你的Linux发行版没有提供smbclient软件包,你也可以从Samba官网²下载源码并编译安装。

Linux smbclient命令的基本语法

smbclient命令的基本语法如下:

smbclient servicename [password] [options]

其中:

  • servicename是要访问的服务器和服务的名称,格式为\\server\service,其中server是提供服务的LAN Manager服务器的NetBIOS名称,service是服务的名称。例如,要连接到服务器lanman提供的printer服务,你可以使用\\lanman\printer作为servicename
  • password是访问指定服务所需的密码。如果提供了这个参数,那么-N选项(禁止密码提示)会被假定。如果没有提供密码,也没有指定-N选项,那么客户端会提示输入密码,即使所需的服务不需要密码。(如果不需要密码,按回车键提供一个空密码。)
  • options是一些可选的参数,用于控制smbclient的行为和输出。有很多可用的选项,下面会介绍一些常用的。

Linux smbclient命令的常用选项说明

smbclient命令有很多可用的选项,这里只介绍一些常用的,完整的列表可以参考smbclient的手册页。以下是一些常用选项的说明:

选项说明
-A指定一个包含用户名和密码的文件,用于认证。这个文件的格式应该是username = userpassword = password。这个选项可以避免在命令行中暴露密码。
-c指定一个要执行的命令字符串,而不是进入交互式模式。这个选项可以用于一次性的文件传输或管理操作。
-d指定调试级别,范围是0到10,数字越大,输出的调试信息越多。默认的调试级别是0,表示不输出调试信息。
-E将错误信息输出到标准错误流,而不是标准输出流。这个选项可以用于区分正常的输出和错误的输出。
-I指定服务器的IP地址,而不是使用NetBIOS名称解析。这个选项在NetBIOS名称和TCP/IP主机名不匹配或者要访问另一个网络的服务器时很有用。
-L列出服务器提供的服务,而不是连接到指定的服务。这个选项可以用于查看服务器的共享情况。
-M发送消息,使用“WinPopup”协议,给另一台计算机。这个选项可以用于给Windows用户发送弹出消息。
-N禁止密码提示。如果没有提供密码,那么使用一个空密码。
-O指定套接字选项,用于控制TCP/IP连接的参数。这个选项的格式和smb.conf文件中的socket options参数相同。
-p指定服务器监听的端口号,默认是139。
-T指定tar选项,用于将服务器上的文件打包或解包。这个选项可以用于备份或恢复服务器上的文件。
-U指定用户名,用于认证。如果没有提供这个选项,那么使用当前的用户名。如果提供了这个选项,那么客户端会提示输入密码,除非使用-A选项指定了一个包含密码的文件。
-W指定工作组或域的名称,用于认证。如果没有提供这个选项,那么使用当前的工作组或域。

Linux smbclient命令的实例

以下是一些smbclient命令的实例,展示了如何使用smbclient进行一些常见的操作。

  • 列出服务器fileserver提供的服务:
[linux@bashcommandnotfound.cn ~]$ smbclient -L fileserver
Enter WORKGROUP\linux's password: 
Anonymous login successful

        Sharename       Type      Comment
        ---------       ----      -------
        IPC$            IPC       IPC Service (Samba 4.11.6)
        print$          Disk      Printer Drivers
        printer         Printer   HP LaserJet 1020
        public          Disk      Public Files
        users           Disk      Home Directories
Anonymous login successful

        Server               Comment
        ---------            -------

        Workgroup            Master
        ---------            -------
        WORKGROUP            FILESERVER
  • 连接到服务器fileserverpublic服务,使用用户名guest和密码guest,并进入交互式模式:
[linux@bashcommandnotfound.cn ~]$ smbclient \\\\fileserver\\public -U guest
Enter WORKGROUP\guest's password: 
Try "help" to get a list of possible commands.
smb: \>
  • 在交互式模式下,列出当前目录的文件和子目录:
smb: \> ls
  .                                   D        0  Mon Nov 27 16:16:35 2023
  ..                                  D        0  Mon Nov 27 16:16:35 2023
  documents                           D        0  Mon Nov 27 16:16:35 2023
  music                               D        0  Mon Nov 27 16:16:35 2023
  pictures                            D        0  Mon Nov 27 16:16:35 2023
  videos                              D        0  Mon Nov 27 16:16:35 2023

                10485247 blocks of size 1024. 10485247 blocks available
  • 在交互式模式下,切换到documents子目录,并下载一个文件report.pdf到本地:
smb: \> cd documents
smb: \documents\> get report.pdf
getting file \documents\report.pdf of size 123456 as report.pdf (123.4 KiloBytes/sec) (average 123.4 KiloBytes/sec)
  • 在交互式模式下,上传一个本地文件resume.docx到服务器的当前目录:
smb: \documents\> put resume.docx
putting file resume.docx as \documents\resume.docx (123.4 kb/s) (average 123.4 kb/s)
  • 在交互式模式下,删除服务器上的一个文件old.txt
smb: \documents\> del old.txt
  • 在交互式模式下,创建一个子目录backup
smb: \documents\> mkdir backup
  • 在交互式模式下,退出smbclient:
smb: \documents\> quit
  • 不进入交互式模式,直接执行一个命令字符串,将本地的一个文件夹myfiles到服务器的backup子目录:
[linux@bashcommandnotfound.cn ~]$ smbclient \\\\fileserver\\public -U guest -c "cd documents; cd backup; recurse; prompt; mput myfiles"
Enter WORKGROUP\guest's password: 
putting file myfiles/file1.txt as \documents\backup\myfiles\file1.txt (123.4 kb/s) (average 123.4 kb/s)
putting file myfiles/file2.txt as \documents\backup\myfiles\file2.txt (123.4 kb/s) (average 123.4 kb/s)
putting file myfiles/file3.txt as \documents\backup\myfiles\file3.txt (123.4 kb/s) (average 123.4 kb/s)
  • 不进入交互式模式,直接执行一个命令字符串,将服务器的music子目录打包成一个tar文件,并下载到本地:
[linux@bashcommandnotfound.cn ~]$ smbclient \\\\fileserver\\public -U guest -c "cd music; tar c music.tar *"
Enter WORKGROUP\guest's password: 
getting file \music\music.tar of size 1234567 as music.tar (1234.5 KiloBytes/sec) (average 1234.5 KiloBytes/sec)
  • 不进入交互式模式,直接执行一个命令字符串,将本地的一个tar文件backup.tar上传到服务器的backup子目录,并解包:
[linux@bashcommandnotfound.cn ~]$ smbclient \\\\fileserver\\public -U guest -c "cd documents; cd backup; put backup.tar; tar x backup.tar"
Enter WORKGROUP\guest's password: 
putting file backup.tar as \documents\backup\backup.tar (1234.5 kb/s) (average 1234.5 kb/s)
extracting files from backup.tar
extracting file1.txt
extracting file2.txt
extracting file3.txt
  • 发送一个弹出消息给Windows用户winuser
[linux@bashcommandnotfound.cn ~]$ smbclient -M winuser
Enter message, end with CTRL-D; abort with CTRL-C
Hello, this is a message from Linux user.
^D
sent 32 bytes

Linux smbclient命令的注意事项

以下是一些使用smbclient命令时需要注意的事项:

  • 如果你的服务器或服务的名称中包含空格,你需要用引号将它们括起来,例如"\\file server\public files"
  • 如果你的密码中包含特殊字符,你需要用反斜杠将它们转义,例如p\@ssw0rd
  • 如果你的服务器或服务需要域认证,你需要在用户名前加上域名,例如DOMAIN\\user
  • 如果你遇到bash: smbclient: command not found的错误,说明你没有安装smbclient软件包,你需要根据你的Linux发行版使用相应的命令安装它。
0

评论区