Scroll to navigation

SMBCLIENT(1) SMBCLIENT(1)

NAME

smbclient - 類似FTP操作方式的訪問SMB/CIFS服務器資源的客戶端

總覽 SYNOPSIS

smbclient {servicename} [password] [-b <buffer size>] [-d debuglevel] [-D Directory] [-U username] [-W workgroup] [-M <netbios name>] [-m maxprotocol] [-A authfile] [-N] [-l logfile] [-L <netbios name>] [-I destinationIP] [-E] [-c <command string>] [-i scope] [-O <socket options>] [-p port] [-R <name resolve order>] [-s <smb config file>] [-T<c|x>IXFqgbNan] [-k]

描述 DESCRIPTION

此程序是Samba(7)套件的一部分。

smbclient 是個可以和SMB/CIFS服務器“交談”的客戶端程序。它提供 了類似FTP程序(參見ftp (1))的用戶界面。它可以完成的操作包括象從服務 器下載文件到本地,上傳本地文件到服務器及在服務器上查找目錄信息等。

選項 OPTIONS

servicename

servicename就是你要使用的服務名稱。服務名使用//server/service這樣的形式,其中server 是提供服務的SMB/CIFS服務器的NetBIOS名字,而service 是可獲得服務資源的名稱。所以如果要聯接服務器"smbserver"上的"printer"服務的話,應該使用這樣的服務名稱://smbserver/printer

注意服務名不使用服務器的IP(或DNS)主機名,而應該用NetBIOS名,而它可能與服務器的IP主機名相同當然也可能不相同。

服務器名是根據smbclient使用的-R 參數或者smb.conf(5)配置文件中的名稱解析順序參數來解析的。名稱解析參數使管理員可以控制名稱解析的順序和方法。

password

用password指定訪問服務時所需的口令。如果使用了這個選項,就假定使用了-N(suppress password prompt)參數,在執行過程中不出現口令提示。

口令沒有默認值。如果在命令行上沒有提供口令(或者使用這個參數,或者在-U-fR參數中指定),並且也沒有使用-N選項,那麼即使需要的服務項不要求口令,程序也會提供要用戶輸入一個口令。(如果服務不需要口令,只要簡單地打個回車就向服務器迴應了一個空口令)

注意:有些服務器(包括OS/2和Windows for Workgroups)會強調使用大寫口令,它們會拒絕小寫或者大小寫混合的口令。

在腳本中使用口令要小心。(可能有安全問題嘛!)

-R <name resolve order>
通過指定這個選項讓Samba套件中的程序決定使用怎樣的名字解析服務及其次序來解決主機名和IP的對應。這個選項以一個以空格分隔的不同的名稱解析方法爲選項值。

可選值是:“lmhosts”,“host”,“wins”和“bcast”。這些選項使名字解析按以下的方法來進行:

lmhosts: 向Samba的lmhosts文件查詢IP地址。If the line in lmhosts has no name type attached to the NetBIOS name (see the lmhosts(5) for details) then any name type matches for lookup.

host: 用標準的名字到IP地址解析方法:系統/etc/hosts文件,NIS或DNS查詢。如何使用這個名字解析由系統決定。舉例來說,在IRIX或者Solaris系統中,/etc/nsswitch.conf文件會處理這些問題。 Note that this method is only used if the NetBIOS name type being queried is the 0x20 (server) name type, otherwise it is ignored.

wins: 用配置文件中wins server選項列出的地址來查詢名字。如果沒有指定WINS服務器的話 會略過這種方法。

bcast: 向配置文件中interfaces參數列出的每個已知本地接口進行廣播來進行查詢。這是最不可靠的名字解析方法,因爲它要求目標主機在本地子網內。

如果不使用這個參數的話,將按 smb.conf(5)配置文件中(name resolve order)參數指定的次序來進行名字解析。

默認的解析次序是lmhosts,host,wins,bcast,在不使用這個參數或者沒有在smb.conf(5)配置文件中設定name resolve order 參數的情況下將使用這樣的次序進行解析。

-M NetBIOS name
使用這個選項可以讓你以“WinPopup” 協議向其它計算機發送信息。一旦聯接成功你就可以發送信息了,結束時可以按^D(Ctl-D).

如果接受方計算機也正在運行WinPopup的話,用戶會收到發送的信息並且系統可能會鳴叫一聲。如果對方並沒有運行WinPopup的話信息就被丟棄,而不會發出出錯信息。

如果發送的信息超過1600字節的話會自動被截斷,因爲這是此協議規定的極限。

這裏有個很有用的小技巧,通過smbclient,用cat處理信息,例如:

cat mymessage.txt | smbclient -M FRED 將會把 mymessage.txt 中的信息發送給主機 FRED.

你也許會發現-U-I選項很有用,因爲它們允許你控制信息的源地址和目的地址部分。

參見smb.conf(5)配置文件中的message command參數獲得如何在Samba中處理新進的WinPopup消息的詳細描述。

注意:如果你總是要用你的WfWg PC的WinPopup來接收消息的話可以在你的Windows機器中把它拷到“啓動”中。

-p port
聯接服務器所用的TCP端口號。標準(衆所周知)的SMB/CIFS服務器TCP端口是139,當然也是默認值。

-h|--help
打印出命令行幫助信息。

-I IP-address
指定要聯接的服務器IP地址。當然格式應該是“a.b.c.d”。

通常client會使用上面介紹過的name resolve order參數中描述的NetBIOS名字解析機制通過查詢嘗試查找一個已命名的SMB/CIFS服務器。使用這個參數會強制客戶端程序採用指定的IP地址而忽略要聯接的服務資源的NetBIOS名部分。

這個參數並沒有默認值。如果不指定的話程序會用上面說的方法來自動檢測。

-E
當使用了這個參數後,程序會把信息寫到標準錯誤流(stderr)而不是標準輸入流中。

默認情況下,程序會把信息寫入標準輸入中 - 典型的例子是用戶的tty。

-L
此選項允許你查看服務器上可以獲得的服務資源。使用smbclient -L host 命令會顯示一份列表。如果你的NetBIOS名與TCP/IP域名不匹配或者要在其它網絡上查找主機時,-I 選項會非常有用。

-t terminal code
用這個選項告訴smbclient怎樣解釋從遠程服務器上傳來的文件名。通常,UNIX系統對亞洲多字節的語言的實現與SMB/CIFS服務器使用的字符集不同(例如用EUC代替 SJIS)。設置這個參數可以讓smbclient 在UNIX文件名與SMB文件名之間進行正確的轉換。不過,這個選項還沒有經過嚴格的測試,所以可能會有些問題。

終端編碼包含CWsjis, CWeuc, CWjis7, CWjis8, CWjunet, CWhex, CWcap. 當然這個列表並不完整,要獲取完整列表請查看samba 源碼。

-b buffersize
在對服務器進行上/下傳文件時可以用這個選項來改變傳輸緩衝大小。默認值是65520個字節。當從一個Win9x的服務器上進行文件傳輸時,把這個值設爲稍小一點的值(例如1200字節)可以得到一些速度提升。

-V
Prints the program version number.

-s <configuration file>
指定的這個文件包含服務器需要的配置詳細信息。文件中的信息包含針對服務器的信息,比如使用什麼printcap文件,還有所有服務器提供的服務的描述。參見smb.conf來獲得更多信息。默認的配置文件名是在編譯時指定的。

-d|--debug=debuglevel
debuglevel 調試等級是個從0到10的整數。參數未指定時默認值爲0。

如果這個值越高,越多關於服務器的詳細活動信息將被記錄到文件中。在0調試級時,只記錄緊急錯誤和嚴重警告。對於平日的運行服務,1調試級是個合理的等級,它只產生小量的關於執行操作的信息。

1以上的調試級將產生相當多的記錄數據,並且只在解決問題時纔有用。3以上的調試級只被設計爲讓開發者使用並會產生極大數量的記錄數據,而且其中很多部分非常難以理解。

注意在此使用這個參數將越過在smb.conf (5)文件中的log level參數。

-l|--logfile=logbasename
指定一個記錄和調試的文件名。文件會被添加.client擴展名。記錄文件無法被客戶端刪除。

-N
如果指定了這個選項,就會省略通常的口令提示。當訪問無需口令的服務資源時它很有用。

除非在命令行上輸入了口令或者使用了上述這個選項,否則用戶將被提示要求輸入一個口令。

-k
Try to authenticate with kerberos. Only useful in an Active Directory environment.

-A|--authfile=filename
This option allows you to specify a file from which to read the username and password used in the connection. The format of the file is

username = <value>
password = <value>
domain   = <value>
    

Make certain that the permissions on the file restrict access from unwanted users.

-U|--user=username[%password]
這個參數指定程序聯接時使用的用戶名或者用戶名和密碼

如果沒指定%password,將提示用戶輸入。程序會使用環境變量USER或LOGNAME,如果任何一個存在就會被轉換爲大寫。如果既沒有用戶名也不存在環境變量的話,將使用GUEST作爲用戶名。

A third option is to use a credentials file which contains the plaintext of the username and password. This option is mainly provided for scripts where the admin does not wish to pass the credentials on the command line or via environment variables. If this method is used, make certain that the permissions on the file restrict access from unwanted users. See the -A for more details.

在腳本中包含口令或者使用PASSWD環境變量時要小心。而且在很多系統中,運行的命令行可以通過ps命令來查看,所以讓rpcclient提示輸入口令並直接鍵入會比較安全。

-n <primary NetBIOS name>
使用這個選項讓你越過機器的主機名而使用你要用的NetBIOS名。這樣作和設置smb.conf文件中的netbios name選項作用相同。但是,命令行設置比配置文件中的設置優先級高。

-i <scope>
這個參數指定一個產生NetBIOS名字時nmblookup用來通信所需要的NetBIOS範圍。對於NetBIOS範圍這個概念,可以參見rfc1001.txt和rfc1002.txt這兩個文件中的詳細定義。實際上這個NetBIOS範圍的概念很少被用到,僅當你作爲負責整個NetBIOS通信的管理員時纔要設置。

-W|--workgroup=domain
設置用戶名的SMB域。這個選項越過了smb.conf配置文件中的默認域。如果指定的域與服務器NetBIOS名相同,會使得用戶使用服務器本地安全管理local SAM來登錄(與域SAM相反).

-O socket options
TCP套接字選項用來在客戶端設定套接字方面的功能。參見smb.conf(5)手冊頁中的socket options參數獲得合法的選項列表。

-T tar options
我們可以用smbclient來對位於SMB/CIFS共享資源上的所有文件建立兼容tar(1) 格式的備份。可使用的tar選項是以下這些:

c - 在unix系統上建立一個tar文件。當然了,卷文件名,目標設備都必須給出,或者用"-"代表標準輸出。如果用 標準輸出,你必須把記錄等級調到它的最低值-d0以避免影響產生的tar文件。這個標誌的功能正好與x標誌相反。

x - 用這個標誌可以把本地的一個tar備份文件釋放(恢復)到共享資源上。除非使用了-D選項,tar備份文件將從共享資源的頂層開始恢復。當然了,使用這個參數時後面必須緊跟一個想要恢復的文件名,設備,或者用"-"代表標準輸入。與上面一樣,這個標誌的功能正好與c標誌的功能相反。恢復後文件的建立時間(mtime)會被tar文件中保存的日期來替換, 而目錄無法做到這一點的。

I - 用這個標誌可以包含文件和目錄。當在用-T參數時指定了一個文件名的話這就是默認的操作了。在釋放或建立時tar文件都會包含這些內容(同時不會包含其他的內容)。參見下面的示例。文件名通配符有兩種方式,參見下面r

X - 排除文件和目錄。在釋放或者建立備份時使這些文件或目錄不被包含在內。請看下面的示例文件名通配符有兩種方式,參見下面r

b - 塊大小。在這個標誌後必須用一個合法的塊大小(大於0)。使建立備份時寫入到塊大小*TBLOCK(通常是512字節)這樣 大小的塊中。

g - 增量備份。只備份設置了歸檔位的文件。必須與c標誌一起使用。

q - 靜態工作。當操作進行時沒有輸出。它的意義與tar相應的靜態工作模式一樣。

r - 用正則表達式來描述包含或排除操作。當用HAVE_REGEX_H編譯的話,用通常的正則表達式可以描述排除操作及要排除的文件,但是這種模式工作非常慢。如果沒有用HAVE_REGEX_H的話,僅僅可以用通配符'*'和'?'。

N - 時間更新(newer)的文件.在這個標誌後面必須是一個用來與共享中的文件創建時間做比較的文件名。只有共享中的文件比指定的文件要新的時候纔會被備份。必須 與c標誌一起使用。

a -設定歸檔位。使用這個標誌在備份時對文件設置歸檔位。必須與g和fIc標誌一起用.

Tar Long File Names

smbclient的tar選項現在可以在備份與恢復操作時支持長文件名了。但是,文件的完整路徑描述必須小於1024 個字節。而且,當建立了一個歸檔包時,smbclient的tar選面會用文件相對路徑寫入歸檔包中,而不是絕對路徑。

Tar Filenames

所有的文件名都要以DOS路徑名(以'\\'作分隔符)或UNIX路徑名(以'/'作分隔符)給出。

示例

把備份文件backup.tar恢復到位於mypc上的myshare中(無須口令)

smbclient //mypc/yshare "" -N -Tx backup.tar

恢復除了users/docs以外的所有內容

smbclient //mypc/myshare "" -N -TXx backup.tar users/docs

users/docs下建立一個備份文件

smbclient //mypc/myshare "" -N -Tc backup.tar users/docs

與上面操作相同,不過用的是DOS路徑名

smbclient //mypc/myshare "" -N -tc backup.tar users\docs

對共享資源上所有內容(文件和目錄)作一完整的備份

smbclient //mypc/myshare "" -N -Tc backup.tar *

-D initial directory
在開始前用這個參數來改變初始目錄。可能只在用tar的-T選項才用。

-c command string
命令字符串串是一個以單引號(“'”)分隔的用來替換標準輸入提示的一系列命令列表,這個參數意味着 -N

當使用腳本或者要打印標準輸入信息到服務器時這個選項就非常有用了,例如:-c 'print -'

操作 OPERATIONS

一旦運行了這個命令,就會在用戶的提示行出現以下信息:

smb:\>

反斜槓符("\\")指出了在服務器上用戶當前的工作路徑,如果這個路徑改變了的話,相同的提示也會改變。

提示符表示用戶準備好並等待執行一個用戶命令。每個命令都是一個單獨的詞,一般隨後可以有選擇地指定一些命令所需的參數。命令和參數之間用空格來分隔,除非有其它規定。當然所有命令都區分大小寫,而參數可能不一定要區分大小寫,不過這應該由命令來決定。

要在文件名中使用空格的話必須用雙引號封閉,例如:"a long file name"。

以方括號("[]")封閉的參數是可選項,如果沒有使用,命令還是以默認的情況執行;而以尖括號<>封閉的參數就是必須的了。

注意,所有對服務器的命令操作實際上是完成的是向服務器發送一個請求。因而,這種動作可能在服務器到服務器之間會作些改變,這由服務器的實現方式來決定。

下面以字母次序給出可以使用的命令。

? [command]
如果指定了command ,那麼?命令就顯示該命令的一些簡單介紹信息。如果單獨使用?的話,它會 給出一份給用命令的列表。

! [shell command]
如果指定了 shell command,那麼!命令會執行一個本地的命令解釋器並運行指定的shell命令。如果不指定 要運行哪個shell命令,那麼就只執行一個本地命令解釋器。

altname file
The client will request that the server return the "alternate" name (the 8.3 name) for a file or directory.

cancel jobid0 [jobid1] ... [jobidN]
The client will request that the server cancel the printjobs identified by the given numeric print job ids.

chmod file mode in octal
This command depends on the server supporting the CIFS UNIX extensions and will fail if the server does not. The client requests that the server change the UNIX permissions to the given octal mode, in standard UNIX format.

chown file uid gid
This command depends on the server supporting the CIFS UNIX extensions and will fail if the server does not. The client requests that the server change the UNIX user and group ownership to the given decimal values. Note there is currently no way to remotely look up the UNIX uid and gid values for a given name. This may be addressed in future versions of the CIFS UNIX extensions.

cd [directory name]
如果指定了"directory name",那麼服務器的當前工作路徑就改爲用戶指定的路徑。如果指定了任何不可訪問的目錄的話,該操作就失敗了。

如果不指定目錄名,就向用戶給出服務器當前工作路徑。

del <mask>
刪除所有當前工作路徑中匹配mask的文件。

dir <mask>
列出所有當前工作路徑中匹配mask的文件。

exit
終止聯接並退出程序。

get <remote file name> [local file name]
把服務器上名爲remote file name的文件到拷貝到本地,名稱爲local file name。要注意的是,smbclient所用的傳送模式爲二進制模式。同時參見lowercase命令。

help [command]
同以上的?命令相同。

lcd [directory name]
把本機目錄改爲directory name指定的地點。如果要換的目錄是不可訪問的話,操作將會失敗。

如果不指定目錄名,則顯示當前本機的工作路徑。

link source destination
This command depends on the server supporting the CIFS UNIX extensions and will fail if the server does not. The client requests that the server create a hard link between the source and destination files. The source file must not exist.

lowercase
在get和mget命令中選用小寫字符作爲文件名。

當選擇了小寫狀態時,用get和mget命令時會把本地文件名都轉換爲小寫。從服務器上拷貝MSDOS 文件時這個選項非常有用,因爲小寫文件名是UNIX系統的標準。

ls <mask>
同以上的dir命令。

mask <mask>
此命令允許用戶設置在mget和mput命令的遞歸形式操作中使用的一個掩碼(通配符)。

當選擇了遞歸複製目錄時,mget和mput命令指定這個掩碼(通配符)作爲目錄過濾器。

用mask命令指定的掩碼可以用來過濾目錄中的文件。例如,如果在mget命令中指定了掩碼"source*",並且用mask命令指定了文件掩碼"*.c",並且選擇了遞歸複製目錄的話,mget命令會下載所有在當前工作目錄中匹配"source*"的目錄以及其下所有匹配"*.c" 的文件。

注意掩碼(通配符)默認值是空(等價於"*"),除非使用mask命令來改變它。它會一直保持最近一次指定的值。爲了避免出現意外的結果,在使用了mget和mput命令之後把值改回"*"是比較明智的。

md <directory name>
同以上的mkdir命令。

mget <mask>
複製服務器上所有匹配mask 的文件到本機。

注意mask在命令的遞歸調用和非遞歸調用兩種方法之間有不同的解釋含義 - 請參考recurse和mask命令獲得更多信息。其次就是smbclient傳送的方式是二進制的。另見lowercase命令。

mkdir <directory name>
在服務器上建立指定名稱的目錄(當然用戶要有相應的訪問權限)。

mput <mask>
複製本機上當前目錄內所有匹配mask 的文件到服務器當前工作目錄。

注意mask在命令的遞歸調用和非遞歸調用兩種方法之間有不同的解釋含義 - 請參考recurse和mask命令獲得更多信息。其次就是smbclient 傳送的方式是二進制的。

print <file name>
打印本機上指定的文件到服務器的可打印資源上。

參見printmode命令。

printmode <graphics or text>
設定打印模式以適應二進制數據(例如圖形信息)或文本,這樣後續的打印命令皆使用當前設好的打印模式。

prompt
在執行mget和mput命令時使用對文件名的提示。

當用提示時,在執行命令期間會提示用戶對每個要傳送的文件進行確認。反之,所有傳送操作都不會出現提示。

put <local file name> [remote file name]
從本機拷貝名爲local file name的文件到服務器上並取名爲remote file name。與上面提到的一樣,smbclient 傳送用的是二進制模式。參見lowercase命令。

queue
用來顯示打印隊列、任務標識、名稱、容量大小和當前狀態。

quit
參見exit命令。

rd <directory name>
參見rmdir命令。

recurse
以目錄遞歸方式運行mget和mput命令。

當使用了遞歸方式時,這些執行的命令會處理源目錄下所有的子目錄,進入匹配通配符的子目錄。只有與mask命令指定的通配符相符的文件纔會被處理。參見mask命令。

當沒有使用這種遞歸方式時,只有源主機當前工作目錄中與匹配通配符的文件纔會被複制。mask命令指定的通配符將被忽略。

rm <mask>
刪除所有服務器上當前工作目錄中與mask相符的文件。

rmdir <directory name>
從服務器上刪除指定的目錄,當然了,需要一定的用戶訪問權限。

setmode <filename> <perm=[+|\-]rsha>
與DOS命令attrib類似的東東,用來設定文件權限,例如:

setmode myfile +r

將把myfile設爲只讀。

symlink source destination
This command depends on the server supporting the CIFS UNIX extensions and will fail if the server does not. The client requests that the server create a symbolic hard link between the source and destination files. The source file must not exist. Note that the server will not create a link to any path that lies outside the currently connected share. This is enforced by the Samba server.

tar <c|x>[IXbgNa]
執行一個tar操作。參見上面的 -T 命令行選項。tarmode命令可能會影響具體的行爲。還有就是g(增量方式)和N(新建方式)會改變tarmode設定。這裏要注意的是 tar x參數前加"-"可能會導致命令不執行,應當使用命令行選項方式。

blocksize <blocksize>
塊大小。參數後必須跟一上合法的(就是比0大的數啦)塊尺寸。因爲在執行命令時,tar文件要被寫到一個大小爲blocksize*TBLOCK(一般是512字節)的塊中。

tarmode <full|inc|reset|noreset>
根據歸檔位來改變tar的行爲。當用完全備份時,tar會備份所有的內容而不管歸檔位是如何設置的,這正好是默認的工作模式。當爲增量模式時,它只備份置有歸檔位的文件。而用重組模式時,tar會對所有要備份文件的歸檔位進行復位(同時讀/寫共享)。

注意 NOTES

一些服務器對用戶提供的用戶名、口令、共享資源名(也就是服務名)和機器名的大小寫形式非常挑剔。如果你聯接失敗,試一下全部用大寫。

通常你在聯接某種服務器時用-n選項會方便一點。例如OS/2 LanManager會強調要使用合法的NetBIOS名字,所以你需要提供讓服務器可以理解的合法名字。

smbclient支持在服務器使用LANMAN2及更高的協議時使用長文件名。

環境變量 ENVIRONMENT VARIABLES

USER變量包含使用客戶端的用戶的用戶名。只有當連接的協議等級足夠高,支持會話級別的口令時才使用此信息。

PASSWD變量包含使用客戶端的用戶的口令。只有當連接的協議等級足夠高,支持會話級別的口令時才使用此信息。

The variable LIBSMB_PROG may contain the path, executed with system(), which the client should connect to instead of connecting to a server. This functionality is primarily intended as a development aid, and works best when using a LMHOSTS file

安裝 INSTALLATION

存放這個程序的位置對於個人的系統管理員來說也是件麻煩事。下面僅僅是一些建議。

推薦你把smbclient軟件包安裝到/usr/local/samba/bin/ /usr/samba/bin/目錄中,而這個目錄對所有人來說應該是隻讀的,對root纔是可寫的。程序本身可以被所有人調用,但是它是setuid或者setgid的。

而程序的記錄文件應該放在一個用戶可讀寫的目錄中。

要測試這個程序,你要先知道運行SMB/CIFS的服務器名。這個服務器可能運行着smbd(8) a守護進程並提供一個用戶可以訪問的端口(通常端口號大於1024),這樣用戶就可以用這些數據來測試了。

診斷 DIAGNOSTICS

通常情況下診斷信息都記錄到指定好的記錄文件中。這個文件的名稱是在編譯時指定的,但也可以用命令行來指定。

用戶可以得到的診斷信息的數量和種類取決於用戶執行客戶端程序時所用的調試等級。如果你發現有問題的話,把調試級設到3並詳細閱讀記錄文件裏的內容。

版本 VERSION

此手冊頁是針對Samba套件版本2.2的。

作者 AUTHOR

samba軟件和相關工具最初由Andrew Tridgell創建。samba現在由Samba Team 作爲開源軟件來發展,類似linux內核的開發方式。

最初的samba手冊頁是 Karl Auer寫的。 手冊頁源碼已經轉換爲YODL格式(另一種很好的開源軟件,可以在ftp://ftp.ice.rug.nl/pub/unix找到),由Jeremy Sllison 更新到Samba2.0 版本。 Gerald Carter 在Samba2.2中將它轉化爲DocBook 格式。 Alexander Bokovoy 在Samba 3.0中實現了DocBook XML4.2 格式的轉換。

[中文版維護人]

meaculpa <meaculpa@21cn.com>

[中文版最新更新]

2000/12/08

《中國linux論壇man手冊頁翻譯計劃》:

http://cmpp.linuxforum.net

本頁面中文版由中文 man 手冊頁計劃提供。
中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh