SMBCLIENT(1) | SMBCLIENT(1) |
smbclient - 類似FTP操作方式的訪問SMB/CIFS伺服器資源的客戶端
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]
此程式是Samba(7)套件的一部分。
smbclient 是個可以和SMB/CIFS伺服器“交談”的客戶端程式。它提供 了類似FTP程式(參見ftp (1))的使用者介面。它可以完成的操作包括象從服務 器下載檔案到本地,上傳本地檔案到伺服器及在伺服器上查詢目錄資訊等。
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)會強調使用大寫口令,它們會拒絕小寫或者大小寫混合的口令。
在指令碼中使用口令要小心。(可能有安全問題嘛!)
可選值是:“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的話,使用者會收到傳送的資訊並且系統可能會鳴叫一聲。如果對方並沒有執行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機器中把它拷到“啟動”中。
通常client會使用上面介紹過的name resolve order引數中描述的NetBIOS名字解析機制透過查詢嘗試查詢一個已命名的SMB/CIFS伺服器。使用這個引數會強制客戶端程式採用指定的IP地址而忽略要聯接的服務資源的NetBIOS名部分。
這個引數並沒有預設值。如果不指定的話程式會用上面說的方法來自動檢測。
預設情況下,程式會把資訊寫入標準輸入中 - 典型的例子是使用者的tty。
終端編碼包含CWsjis, CWeuc, CWjis7, CWjis8, CWjunet, CWhex, CWcap. 當然這個列表並不完整,要獲取完整列表請檢視samba 原始碼。
如果這個值越高,越多關於伺服器的詳細活動資訊將被記錄到檔案中。在0除錯級時,只記錄緊急錯誤和嚴重警告。對於平日的執行服務,1除錯級是個合理的等級,它只產生小量的關於執行操作的資訊。
1以上的除錯級將產生相當多的記錄資料,並且只在解決問題時才有用。3以上的除錯級只被設計為讓開發者使用並會產生極大數量的記錄資料,而且其中很多部分非常難以理解。
注意在此使用這個引數將越過在smb.conf (5)檔案中的log level引數。
除非在命令列上輸入了口令或者使用了上述這個選項,否則使用者將被提示要求輸入一個口令。
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提示輸入口令並直接鍵入會比較安全。
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 *
當使用指令碼或者要列印標準輸入資訊到伺服器時這個選項就非常有用了,例如:-c 'print -'
一旦運行了這個命令,就會在使用者的提示行出現以下資訊:
smb:\>
反斜槓符("\\")指出了在伺服器上使用者當前的工作路徑,如果這個路徑改變了的話,相同的提示也會改變。
提示符表示使用者準備好並等待執行一個使用者命令。每個命令都是一個單獨的詞,一般隨後可以有選擇地指定一些命令所需的引數。命令和引數之間用空格來分隔,除非有其它規定。當然所有命令都區分大小寫,而引數可能不一定要區分大小寫,不過這應該由命令來決定。
要在檔名中使用空格的話必須用雙引號封閉,例如:"a long file name"。
以方括號("[]")封閉的引數是可選項,如果沒有使用,命令還是以預設的情況執行;而以尖括號<>封閉的引數就是必須的了。
注意,所有對伺服器的命令操作實際上是完成的是向伺服器傳送一個請求。因而,這種動作可能在伺服器到伺服器之間會作些改變,這由伺服器的實現方式來決定。
下面以字母次序給出可以使用的命令。
如果不指定目錄名,就向用戶給出伺服器當前工作路徑。
如果不指定目錄名,則顯示當前本機的工作路徑。
當選擇了小寫狀態時,用get和mget命令時會把本地檔名都轉換為小寫。從伺服器上複製MSDOS 檔案時這個選項非常有用,因為小寫檔名是UNIX系統的標準。
當選擇了遞迴複製目錄時,mget和mput命令指定這個掩碼(萬用字元)作為目錄過濾器。
用mask命令指定的掩碼可以用來過濾目錄中的檔案。例如,如果在mget命令中指定了掩碼"source*",並且用mask命令指定了檔案掩碼"*.c",並且選擇了遞迴複製目錄的話,mget命令會下載所有在當前工作目錄中匹配"source*"的目錄以及其下所有匹配"*.c" 的檔案。
注意掩碼(萬用字元)預設值是空(等價於"*"),除非使用mask命令來改變它。它會一直保持最近一次指定的值。為了避免出現意外的結果,在使用了mget和mput命令之後把值改回"*"是比較明智的。
注意mask在命令的遞迴呼叫和非遞迴呼叫兩種方法之間有不同的解釋含義 - 請參考recurse和mask命令獲得更多資訊。其次就是smbclient傳送的方式是二進位制的。另見lowercase命令。
注意mask在命令的遞迴呼叫和非遞迴呼叫兩種方法之間有不同的解釋含義 - 請參考recurse和mask命令獲得更多資訊。其次就是smbclient 傳送的方式是二進位制的。
參見printmode命令。
當用提示時,在執行命令期間會提示使用者對每個要傳送的檔案進行確認。反之,所有傳送操作都不會出現提示。
當使用了遞迴方式時,這些執行的命令會處理源目錄下所有的子目錄,進入匹配萬用字元的子目錄。只有與mask命令指定的萬用字元相符的檔案才會被處理。參見mask命令。
當沒有使用這種遞迴方式時,只有源主機當前工作目錄中與匹配萬用字元的檔案才會被複制。mask命令指定的萬用字元將被忽略。
setmode myfile +r
將把myfile設為只讀。
一些伺服器對使用者提供的使用者名稱、口令、共享資源名(也就是服務名)和機器名的大小寫形式非常挑剔。如果你聯接失敗,試一下全部用大寫。
通常你在聯接某種伺服器時用-n選項會方便一點。例如OS/2 LanManager會強調要使用合法的NetBIOS名字,所以你需要提供讓伺服器可以理解的合法名字。
smbclient支援在伺服器使用LANMAN2及更高的協議時使用長檔名。
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
存放這個程式的位置對於個人的系統管理員來說也是件麻煩事。下面僅僅是一些建議。
推薦你把smbclient軟體包安裝到/usr/local/samba/bin/或 /usr/samba/bin/目錄中,而這個目錄對所有人來說應該是隻讀的,對root才是可寫的。程式本身可以被所有人呼叫,但是它不是setuid或者setgid的。
而程式的記錄檔案應該放在一個使用者可讀寫的目錄中。
要測試這個程式,你要先知道執行SMB/CIFS的伺服器名。這個伺服器可能執行著smbd(8) a守護程序並提供一個使用者可以訪問的埠(通常埠號大於1024),這樣使用者就可以用這些資料來測試了。
通常情況下診斷資訊都記錄到指定好的記錄檔案中。這個檔案的名稱是在編譯時指定的,但也可以用命令列來指定。
使用者可以得到的診斷資訊的數量和種類取決於使用者執行客戶端程式時所用的除錯等級。如果你發現有問題的話,把除錯級設到3並詳細閱讀記錄檔案裡的內容。
此手冊頁是針對Samba套件版本2.2的。
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
http://cmpp.linuxforum.net
本頁面中文版由中文
man 手冊頁計劃提供。
中文 man
手冊頁計劃:https://github.com/man-pages-zh/manpages-zh