SMBCLIENT(1) SMBCLIENT(1)

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

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

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

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

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


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

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

透過指定這個選項讓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 引數的情況下將使用這樣的次序進行解析。

使用這個選項可以讓你以“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機器中把它拷到“啟動”中。

聯接伺服器所用的TCP埠號。標準(眾所周知)的SMB/CIFS伺服器TCP埠是139,當然也是預設值。
打印出命令列幫助資訊。
指定要聯接的伺服器IP地址。當然格式應該是“a.b.c.d”。

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

這個引數並沒有預設值。如果不指定的話程式會用上面說的方法來自動檢測。

當使用了這個引數後,程式會把資訊寫到標準錯誤流(stderr)而不是標準輸入流中。

預設情況下,程式會把資訊寫入標準輸入中 - 典型的例子是使用者的tty。

此選項允許你檢視伺服器上可以獲得的服務資源。使用smbclient -L host 命令會顯示一份列表。如果你的NetBIOS名與TCP/IP域名不匹配或者要在其它網路上查詢主機時,-I 選項會非常有用。
用這個選項告訴smbclient怎樣解釋從遠端伺服器上傳來的檔名。通常,UNIX系統對亞洲多位元組的語言的實現與SMB/CIFS伺服器使用的字符集不同(例如用EUC代替 SJIS)。設定這個引數可以讓smbclient 在UNIX檔名與SMB檔名之間進行正確的轉換。不過,這個選項還沒有經過嚴格的測試,所以可能會有些問題。

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

在對伺服器進行上/下傳檔案時可以用這個選項來改變傳輸緩衝大小。預設值是65520個位元組。當從一個Win9x的伺服器上進行檔案傳輸時,把這個值設為稍小一點的值(例如1200位元組)可以得到一些速度提升。
Prints the program version number.
指定的這個檔案包含伺服器需要的配置詳細資訊。檔案中的資訊包含針對伺服器的資訊,比如使用什麼printcap檔案,還有所有伺服器提供的服務的描述。參見smb.conf來獲得更多資訊。預設的配置檔名是在編譯時指定的。
debuglevel 除錯等級是個從0到10的整數。引數未指定時預設值為0。

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

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

注意在此使用這個引數將越過在smb.conf (5)檔案中的log level引數。

指定一個記錄和除錯的檔名。檔案會被新增.client副檔名。記錄檔案無法被客戶端刪除。
如果指定了這個選項,就會省略通常的口令提示。當訪問無需口令的服務資源時它很有用。

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

Try to authenticate with kerberos. Only useful in an Active Directory environment.
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.

這個引數指定程式聯接時使用的使用者名稱或者使用者名稱和密碼

如果沒指定%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提示輸入口令並直接鍵入會比較安全。

使用這個選項讓你越過機器的主機名而使用你要用的NetBIOS名。這樣作和設定smb.conf檔案中的netbios name選項作用相同。但是,命令列設定比配置檔案中的設定優先順序高。
這個引數指定一個產生NetBIOS名字時nmblookup用來通訊所需要的NetBIOS範圍。對於NetBIOS範圍這個概念,可以參見rfc1001.txt和rfc1002.txt這兩個檔案中的詳細定義。實際上這個NetBIOS範圍的概念很少被用到,僅當你作為負責整個NetBIOS通訊的管理員時才要設定。
設定使用者名稱的SMB域。這個選項越過了smb.conf配置檔案中的預設域。如果指定的域與伺服器NetBIOS名相同,會使得使用者使用伺服器本地安全管理local SAM來登入(與域SAM相反).
TCP套接字選項用來在客戶端設定套接字方面的功能。參見smb.conf(5)手冊頁中的socket 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 *

在開始前用這個引數來改變初始目錄。可能只在用tar的-T選項才用。
命令字串串是一個以單引號(“'”)分隔的用來替換標準輸入提示的一系列命令列表,這個引數意味著 -N

當使用指令碼或者要列印標準輸入資訊到伺服器時這個選項就非常有用了,例如:-c 'print -'

操作 OPERATIONS

一旦運行了這個命令,就會在使用者的提示行出現以下資訊:

smb:\>

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

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

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

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

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

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

? [command]
如果指定了command ,那麼?命令就顯示該命令的一些簡單介紹資訊。如果單獨使用?的話,它會 給出一份給用命令的列表。
! [shell command]
如果指定了 shell command,那麼!命令會執行一個本地的命令直譯器並執行指定的shell命令。如果不指定 要執行哪個shell命令,那麼就只執行一個本地命令直譯器。
The client will request that the server return the "alternate" name (the 8.3 name) for a file or directory.
The client will request that the server cancel the printjobs identified by the given numeric print job ids.
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.
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.
如果指定了"directory name",那麼伺服器的當前工作路徑就改為使用者指定的路徑。如果指定了任何不可訪問的目錄的話,該操作就失敗了。

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

刪除所有當前工作路徑中匹配mask的檔案。
列出所有當前工作路徑中匹配mask的檔案。
終止聯接並退出程式。
把伺服器上名為remote file name的檔案到複製到本地,名稱為local file name。要注意的是,smbclient所用的傳送模式為二進位制模式。同時參見lowercase命令。
同以上的?命令相同。
把本機目錄改為directory name指定的地點。如果要換的目錄是不可訪問的話,操作將會失敗。

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

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.
在get和mget命令中選用小寫字元作為檔名。

當選擇了小寫狀態時,用get和mget命令時會把本地檔名都轉換為小寫。從伺服器上複製MSDOS 檔案時這個選項非常有用,因為小寫檔名是UNIX系統的標準。

同以上的dir命令。
此命令允許使用者設定在mget和mput命令的遞迴形式操作中使用的一個掩碼(萬用字元)。

當選擇了遞迴複製目錄時,mget和mput命令指定這個掩碼(萬用字元)作為目錄過濾器。

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

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

同以上的mkdir命令。
複製伺服器上所有匹配mask 的檔案到本機。

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

在伺服器上建立指定名稱的目錄(當然使用者要有相應的訪問許可權)。
複製本機上當前目錄內所有匹配mask 的檔案到伺服器當前工作目錄。

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

列印本機上指定的檔案到伺服器的可列印資源上。

參見printmode命令。

設定列印模式以適應二進位制資料(例如圖形資訊)或文字,這樣後續的列印命令皆使用當前設好的列印模式。
在執行mget和mput命令時使用對檔名的提示。

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


從本機複製名為local file name的檔案到伺服器上並取名為remote file name。與上面提到的一樣,smbclient 傳送用的是二進位制模式。參見lowercase命令。
用來顯示列印佇列、任務標識、名稱、容量大小和當前狀態。
參見exit命令。
參見rmdir命令。
以目錄遞迴方式執行mget和mput命令。

當使用了遞迴方式時,這些執行的命令會處理源目錄下所有的子目錄,進入匹配萬用字元的子目錄。只有與mask命令指定的萬用字元相符的檔案才會被處理。參見mask命令。

當沒有使用這種遞迴方式時,只有源主機當前工作目錄中與匹配萬用字元的檔案才會被複制。mask命令指定的萬用字元將被忽略。

刪除所有伺服器上當前工作目錄中與mask相符的檔案。
從伺服器上刪除指定的目錄,當然了,需要一定的使用者訪問許可權。
與DOS命令attrib類似的東東,用來設定檔案許可權,例如:

setmode myfile +r

將把myfile設為只讀。

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操作。參見上面的 -T 命令列選項。tarmode命令可能會影響具體的行為。還有就是g(增量方式)和N(新建方式)會改變tarmode設定。這裡要注意的是 tar x引數前加"-"可能會導致命令不執行,應當使用命令列選項方式。
塊大小。引數後必須跟一上合法的(就是比0大的數啦)塊尺寸。因為在執行命令時,tar檔案要被寫到一個大小為blocksize*TBLOCK(一般是512位元組)的塊中。
根據歸檔位來改變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