1. 程式人生 > >linux下不同服務器間數據傳輸(wget,scp)

linux下不同服務器間數據傳輸(wget,scp)

buffer 常用配置 歷史 類型 聯系 可用 and 遠程命令 再次

一、wget是Linux下最常用的http/ftp文件下載工具1.wget斷點續傳,只需要加上-c參數即可,例如:代碼:wget-chttp://www.abc.com/abc.zip-Oabc.zip2.當服務器上的文件比本地指定目錄下的文件更新時才下載,-P指定目錄,-N表示檢查文件文件是否更新代碼:wget-N-P/hom

一、wget是Linux下最常用的http/ftp文件下載工具
1.wget斷點續傳,只需要加上-c參數即可,例如:
代碼:
wget -c http://www.abc.com/abc.zip -O abc.zip

2.當服務器上的文件比本地指定目錄下的文件更新時才下載,-P指定目錄,-N表示檢查文件文件是否更新
代碼:
wget -N -P /home/user http://www.abc.com/abc.zip

3.wget下載ftp服務器上的文件

代碼:

wget --ftp-user=USER --ftp-password=PASS ftp://www.abc.com/abc.zip

關於wget更詳細的參數見wget --help


二、scp是通過SFTP拷貝文件的命令
#從遠端把文件復制到本地

代碼:

scp root@remote_server:/home/root/abc.zip

#從本地把文件復制到遠端

代碼:

scp abc.zip root@remote_server:/home/root/abc.zip

linux下不同服務器間數據傳輸命令和工具進行了研究和總結。主要是rcp,scp,rsync,ftp,sftp,lftp,wget,curl。

rcp

rcp不是一種安全的的傳輸文件的方式,rcp通過rsh(rsh見下面)來執行遠程命令,要使用rcp必須經過一些配置,現在rcp已經被scp取代了,常用scp來進行文件傳輸。要使用rcp,需要具備以下條件:

(1)如果系統中有/etc/hosts 文件,應確保該文件包含要與之進行通信的遠程主機信息:internet_address official_name alias。例如:1.186.10.*** blade1.ibm.com.cnblade

(2).rhosts 文件:.rhosts 文件位於遠程系統的根目錄下,其中包含本地系統的名稱和本地登錄名。例如,遠程系統的 .rhosts 文件中的項可能是:blade1 root;其中,blade1 是本地系統的名稱,root 是本地登錄名。這樣,blade1 上的 root 即可在包含 .rhosts 文件的遠程系統中來回復制文件。

配置過程:

(1) 在雙方root用戶根目錄下建立.rhosts文件,並將雙方的hostname加進去.在此之前應在雙方的 /etc/hosts文件中加入對方的IP和hostname

(2) 把rsh服務啟動起來,redhat默認是不啟動的。方法:用執行ntsysv命令,在rsh選項前用空格鍵選中,確定退出。然後執行:service xinetd restart即可。如果沒有rsh,請見下面rsh部分

(3) 到/etc/pam.d/目錄下,把rsh文件中的auth required /lib/security/pam_securetty.so一行用“#”註釋掉即可。(只有註釋掉這一行,才能用root用戶登錄)

命令使用:

rcp [options] [[user@]host1:]file1 ...[[user@]host2:]file2

options: 

-r 遞歸地把源目錄中的所有內容拷貝到目的目錄中。

-p 試圖保留源文件的修改時間和模式,忽略umask。

rsh(remote shell,它不夠安全):rsh使用條件同rcp,rsh配置過程(以root為例)

(1) 在服務器上運行/urs/bin/ntsysv選中rexec,rlogin,rsh三項服務。

(2) 運行#/sbin/service xinetd restart啟動該三項服務。

(3) 運行echo"rexec">>/etc/securetty; echo"rlogin">>/etc/securetty; echo"rsh">>/etc/securetty

(4) 在服務器上運行echo"你的ip地址root">>/root/.rhosts或者echo"你的主機名root">>/root/.rhosts且確保在服務器上的/etc/hosts中有主機名和ip地址的映射關系

(5) 到/etc/pam.d/目錄下,把rexec, rlongin, rsh文件中的auth required /lib/security/pam_securetty.so 一行用“#”註釋掉即可。(只有註釋掉這一行,才能用root用戶登錄)

(6) rsh命令用法:rshremote-sytem-neame Linux-command,例如:rsh blade1 ls /home/root

scp

scp 命令是 SSH中最方便有用的命令了,scp就是secure copy,是用來進行遠程文件拷貝的。數據傳輸使用 ssh,並且和ssh 使用相同的認證方式,提供相同的安全保證。 與rcp 不同的是,scp 在需要進行驗證時會要求你輸入密碼或口令。

scp [options] [本地用戶名@IP地址:]file1 [遠程用戶名 @IP 地址 :] file2

options:

-v 用來顯示進度,可以用來查看連接,認證,或是配置錯誤。

-C 使能壓縮選項。

-c 選擇使用那個加密算法(具體對應到ssh的-c cipher-spec,這個參數值會被傳給ssh,可選擇值3des,blowfish,des),使用blowfish會快很多,可以參看man ssh 中的-c cipher-spec

-P 選擇端口

-r 遞歸拷貝整個目錄

-l 限制使用帶寬,Kbit/s

-o 指定傳給ssh的一些參數值,比如Compression=yes

-p 保留文件的修改時間等信息。

rsync

rsync是rcp的替代品之一,rsync 是一款高效的遠程數據備份和鏡象工具,可快速地同步多臺主機間的文件,其具有如下特性:

l 支持鏈接、所有者、組信息以及權限信息的拷貝;

l 通過遠程 shell(ssh, rsh)進行傳輸;

l 無須特殊權限即可安裝使用;

l 流水線式文件傳輸模式,文件傳輸效率高;

l 支持匿名操作;

需要提及的是 rsync 以其優越的性能優勢區別於其它幾種 Linux 文件傳輸方法,其同步文件的速度相當快,這主要歸功於 rsync 所使用的傳輸算法。簡而言之 rsync 算法能在相當短的時間內計算出需要備份的數據,只對源文件與目標文件的不同之處進行傳輸,從而降低網絡中傳輸的數據量,以此達到快速備份鏡像的目的。下面 通過一典型應用場景來描述 rsync 算法的基本原理:主機 A 與主機 B 均有對同一文件的拷貝,用戶對主機 A 上的拷貝進行更新,主機 B 通過 rsync 算法對更新後的文件進行同步。以下是該算法的實現步驟:

(1) 主機 B 將原始拷貝劃分成大小為 N 的不重合的若幹塊(文件末尾部分分塊大小可能不足 N),並對這些數據塊進行兩種不同方式的校驗:32 位的滾動弱校驗、128 位的 MD4 強校驗。弱校驗較之強校驗計算速度快。

(2) 主機 B 將每個數據塊的弱校驗、強校驗結果發送給主機 A 。

(3) 主機 A 對更新後的文件拷貝中的每個長度為 N 的數據塊進行弱校驗並與從 B 接收到的弱校驗值進行匹配,若相同再進行強校驗匹配。由於弱校驗的滾動特性可以快速地篩選出需要進行同步的數據塊。該算法的運算量主要集中在主機 A 上。

通過上述計算,主機 A 將文件的不同部分發送給 B,B 接收到兩個拷貝之間的不同之處,從而同步得到更新後的文件。通過如上方式,rsync 避免了對相同數據的傳輸,減少了網絡帶寬的浪費。在時間上整個過程中需一個往返,從某種程度上也保證了 rsync 的優越性能。

Rsync可以通過兩種方式來連接遠程服務器,一種是通過類shell命令的方式,一種是通過rsync daemon的方式,rsync daemon需要進行安裝和配置,具體如下:

可從官方網站http://rsync.samba.org/ 上下載安裝 rsync 的最新版本。使用時需將 rsync 分別安裝於服務端和客戶端,服務端和客戶端使用同一個 rsync 軟件包來實現遠程鏡像和定期同步更新。需要說明的是一個 rsync 服務端可同時備份多個客戶端的數據;多個服務端備份一個客戶端的數據。 rsync 默認端口為 873,服務器在該端口接收客戶的匿名或者認證方式的備份請求。

rsync 服務端在使用之前需要進行必要的配置,其配置文件為 /etc/rsyncd.conf,進行認證、訪問、日誌記錄等控制。配置文件包括全局參數、模塊參數的設置。 rsyncd.conf 文件中 [module] 之前的所有參數為全局參數,也可以在全局參數部分定義模塊參數,在這種情況下該參數的值就是所有模塊的默認值。全局參數設置程序使用的端口號,指定消息文 件、日誌文件 pid 文件以及發送日誌消息的級別。模塊參數主要定義服務端哪個目錄需要被同步。用戶可根據不同的需要指定多個模塊,每個模塊對應需要備份的一個目錄樹,即若有 N 個需要備份的目錄樹,則需要 N 個模塊與之對應。模塊中可以定義許多參數,常見參數如下。

l Comment 模塊信息描述,該描述連同模塊名在客戶連接得到模塊列表時顯示給客戶。默認沒有描述定義。

l Path 指定供備份的目錄路徑,必須指定該參數。

l max connections 指定最大並發連接數以保護服務器,超過限制的連接請求將被告知隨後再試。默認值為 0,即沒有限制。

l log file 指定日誌文件

l read only 設定是否允許客戶上載文件。若為 true 任何上載請求均會失敗,若為 false 且客戶端擁有服務器目錄讀寫權限則可以上載。默認值為 true 。

l write only 設定是否允許客戶下載文件。若為 true 任何下載請求均會失敗,默認值為 false 。

l List 設定當客戶請求可以使用的模塊列表時,是否列出該模塊。若為 false,則創建隱藏的模塊。默認值為 true 。

l fake super 允許文件享有所有權限,而無需後臺服務以 root 權限進行操作。

l Filter 設置過濾列表以決定哪些文件可由客戶端訪問。

l hosts allow 指定允許客戶連接的 IP 地址。可以為單個 IP 地址或整個網段。多個 IP或網段需要以空格隔開。默認是允許所有主機連接。

l dont compress 指定不進行壓縮處理即可傳輸的文件,默認值是 *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz

l pre-xfer exec, post-xfer exec 設置可在文件傳輸前/後執行的命令。若在文件傳輸前執行的命令失敗,則取消本次傳輸操作。

需要註意的是服務器端啟動:/usr/bin/rsync--daemon --config=/etc/rsyncd/rsyncd.conf

連接遠程服務器的兩種方式的基本語法

(1) 通過遠程 shell 方式:

l rsync [OPTION] [USER@]HOST:SRC DEST:用遠程 shell(如 ssh, rsh)實現將遠程機器的內容拷貝到本地機器。 SRC 地址路徑中以單個冒號 ":" 進行分隔。

l rsync [OPTION] SRC [USER@]HOST:DEST:使用遠程 shell(如 rsh、ssh)實現本地機器的內容拷貝到遠程機器。 DEST 地址路徑中以單個冒號 ":" 進行分隔。

(2) 通過 rsync daemon 方式:

l rsync [OPTION] [USER@]HOST::SRC DEST 或rsync [OPTION]rsync://[USER@]HOST[:PORT]/SRC [DEST]:從遠程 rsync 服務器中拷貝文件到本地機。SRC 地址路徑中以雙冒號 "::" 進行分隔。

l rsync [OPTION] SRC [USER@]HOST::DEST 或rsync [OPTION] SRCrsync://[USER@]HOST[:PORT]/DEST:從本地機器拷貝文件到遠程 rsync 服務器中。 DEST 地址路徑中以雙冒號 "::" 進行分隔。

如果 rsync 命令中只指定 SRC 參數而不指定 DEST 參數,則意為顯示源文件列表而非進行同步拷貝。

Options:

options:

-v,--verbose 詳細模式輸出

-q,--quiet 精簡輸出模式

-c,--checksum 打開校驗開關,強制對文件傳輸進行校驗

-a,--archive 歸檔模式,表示以遞歸方式傳輸文件,並保持所有文件屬性,等於-rlptgoD

-r,--recursive 對子目錄以遞歸模式處理

-R,--relative 使用相對路徑信息

-b,--backup 創建備份,也就是對於目的已經存在有同樣的文件名時,將老的文件重新命名為~filename。可以使用--suffix選項來指定不同的備份文件前綴。

--backup-dir將備份文件(如~filename)存放在在目錄下。

-suffix=SUFFIX定義備份文件前綴

-u,--update 僅僅進行更新,也就是跳過所有已經存在於DST,並且文件時間晚於要備份的文件。(不覆蓋更新的文件)

-l,--links 保留軟鏈結

-L,--copy-links 想對待常規文件一樣處理軟鏈結

--copy-unsafe-links僅僅拷貝指向SRC路徑目錄樹以外的鏈結

--safe-links忽略指向SRC路徑目錄樹以外的鏈結

-H,--hard-links 保留硬鏈結

-p,--perms 保持文件權限

-o,--owner 保持文件屬主信息

-g, --group 保持文件屬組信息

-D,--devices 保持設備文件信息

-t,--times 保持文件時間信息

-S,--sparse 對稀疏文件進行特殊處理以節省DST的空間

-n,--dry-run現實哪些文件將被傳輸

-W,--whole-file 拷貝文件,不進行增量檢測

-x,--one-file-system 不要跨越文件系統邊界

-B,--block-size=SIZE 檢驗算法使用的塊尺寸,默認是700字節

-e,--rsh=COMMAND 指定使用rsh、ssh方式進行數據同步

--rsync-path=PATH指定遠程服務器上的rsync命令所在路徑信息

-C,--cvs-exclude 使用和CVS一樣的方法自動忽略文件,用來排除那些不希望傳輸的文件

--existing僅僅更新那些已經存在於DST的文件,而不備份那些新創建的文件

--delete刪除那些DST中SRC沒有的文件

--delete-excluded同樣刪除接收端那些被該選項指定排除的文件

--delete-after傳輸結束以後再刪除

--ignore-errors及時出現IO錯誤也進行刪除

--max-delete=NUM最多刪除NUM個文件

--partial保留那些因故沒有完全傳輸的文件,以是加快隨後的再次傳輸

--force強制刪除目錄,即使不為空

--numeric-ids不將數字的用戶和組ID匹配為用戶名和組名

--timeout=TIMEIP超時時間,單位為秒

-I,--ignore-times 不跳過那些有同樣的時間和長度的文件

--size-only當決定是否要備份文件時,僅僅察看文件大小而不考慮文件時間

--modify-window=NUM決定文件是否時間相同時使用的時間戳窗口,默認為0

-T--temp-dir=DIR 在DIR中創建臨時文件

--compare-dest=DIR同樣比較DIR中的文件來決定是否需要備份

-P等同於 --partial

--progress顯示備份過程

-z,--compress 對備份的文件在傳輸時進行壓縮處理

--exclude=PATTERN指定排除不需要傳輸的文件模式

--include=PATTERN指定不排除而需要傳輸的文件模式

--exclude-from=FILE排除FILE中指定模式的文件

--include-from=FILE不排除FILE指定模式匹配的文件

--version打印版本信息

--address綁定到特定的地址

--config=FILE指定其他的配置文件,不使用默認的rsyncd.conf文件

--port=PORT指定其他的rsync服務端口

--blocking-io對遠程shell使用阻塞IO

-stats給出某些文件的傳輸狀態

--progress在傳輸時現實傳輸過程

--log-format=formAT指定日誌文件格式

--password-file=FILE從FILE中得到密碼

--bwlimit=KBPS限制I/O帶寬,KBytes per second

-h,--help 顯示幫助信息

實例:

(1) 查看服務端文件及列表:

l rsync 9.186.110.53::查看服務端可用的模塊列表以及註釋信息;rsync [email protected]::www/查看服務端 www 模塊中的目錄及文件列表(使用 rsyncd 用戶認證方式)

l rsync [email protected]:/var/www/html/查看服務端/var/www/html 目錄中的內容(使用服務端的系統用戶進行驗證,如 ibmuser)

(2) 保持客戶端與服務端的數據同步:

l rsync -avz [email protected]::www/ /backup1/使用後臺服務方式將服務端www 模塊下的內容備份到本地 /backup1 目錄中,備份時保留原有權限、屬性、屬主及符號連接等,並使用壓縮方式加快數據傳輸。

l rsync – [email protected]:/var/www/html /backup2/使用 ssh 方式將遠程的/var/www/html 目錄備份到本地 /backup2/ 目錄下

l rsync -avz [email protected]::www/ /backup3/將遠程 www 模塊備份到本地/backup3/ 目錄中,同時進行同步目錄,刪除本地目錄中多余的文件。

(3) 當服務端的數據出現問題時,需要通過客戶端的數據對服務端進行恢復,只要客戶端有服務端的寫入權限,即可通過調換 rsync 命令的 SRC、DEST 參數進行恢復。

ftp

ftp命令使用文件傳輸協議(FileTransfer Protocol ,FTP)在本地主機和遠程主機之間或者兩個遠程主機之間進行文件傳輸。FTP 協議允許數據在不同文件系統的主機之間傳輸。盡管這個協議在傳輸數據上提供了高適應性,但是它並沒有嘗試去保留一個特定文件系統上的文件屬性(例如一個文 件的保護模式或者修改次數)。而且 FTP 協議很少對一個文件系統的整體結構作假定,也不提供這樣的功能,比如遞歸的拷貝子目錄。在使用 ftp 命令時,需要註意 FTP 協議的這些特性。當需要保留文件屬性或者需要遞歸的拷貝子目錄時,可以使用 rcp/scp 等命令。

如果需要將文件以ftp傳輸到目的服務器上,必須在目的服務器上安裝ftp server,基本的安裝和啟動過程如下:

根據服務對象的不同,FTP服務可以分為兩類:一類是系統FTP服務器,它只允許系統上的合法用戶使用;另一類是匿名FTP服務器,它允許任何人登錄到FTP服務器,和服務器連接後,在登錄提示中輸入Anonymous,即可訪問服務器。

Yum list *ftp* (找到可用的Ftp包)

sudo yum install ftp包

手工啟動和關閉:啟動:/usr/sbin/ftprestart 關閉:/usr/sbin/ftpshut

FTP服務器的配置:為了確保FTP服務器安全,必須設置一些重要的配置文件,以更好地控制用戶的訪問權限。這些配置文件是:/etc /ftpusers;/etc/ftpconversions;/etc/ftp-groups;/etc/ftpphosts;/etc /ftpaccess。利用這些文件,能夠非常精確地控制哪些人、在什麽時間、從什麽地點可以連接服務器,並且可以對他們連接後所做的工作進行檢查跟蹤。

(1) /etc/ftpusers:該文件夾中包含的用戶不能通過FTP登錄服務器,有時將需要禁止的用戶賬號寫入文件/etc/ftpuser中,這樣就可以禁止一些用戶使用FTP服務。

(2) /etc/ftpconversions:用來配置壓縮/解壓縮程序。

(3) /etc/ftpgroups:創建用戶組,這個組中的成員預先定義可以訪問FTP服務器。

(4) /etc/ftpphosts:用來根據禁止或允許遠程主機對特定賬戶的訪問,例如:allow czc 192.168.0.0/24 deny cdd 10.0.0.0/8(表示允許czc用戶從192.168.0這個網段連線訪問,拒絕cdd從10.這個網段連線訪問)。

(5) /etc/ftpaccess:是非常重要的一個配置文件,用來控制存取權限,文件中的每一行定義一個屬性,並對屬性的值進行設置。下面對它的一些常用配置做一點介紹:

l 定義用戶類別:格式:class[類名] [real/guest/anonymous][IP地址] 功能:這個指令的功能設定FTP服務器上用戶的類別。並可對客戶端的IP地址進行限制,允許特定或者全部的IP地址訪問FTP服務器。

l 登錄重試次數:在命令行中輸入:loginfails 10,這表明如果10次還沒有登錄成功就切斷連線。

l 密碼檢查:格式:passwd-check〈strictness〉 warn。是對匿名用戶的密碼使用方式的檢查,其中〈strictness〉是三個可能的字符串之一:None、Trivial、RFC822。若選 None,表示將不對口令做任何檢查;若選Trivial,表示對口令有一定的要求,它需要在口令中至少要有一個@符號;若選RFC822,則表示最嚴 格,要求E-mail地址必須遵守RFC822報文標題標準(如:[email protected] )。例如:passwd-check rfc822 warn,表明密碼的要求很嚴格,當密碼不符合規定時出現警告信息。

l 登錄人數的限制:格式:limit[類別] [人數] [時間] [文件名]。設置指定類別在約定時間內可以登錄FTP的人數。例如:limit remote Any/etc/many.msg,說明類別Remote類別在任何時間內登錄人數不超過20個人,否則會顯示Many.msg警告信息。

安裝、配置好FTP服務器後,只需要在命令提示符後輸入:FTP Servername,用主機名或希望連接的FTP服務器的IP地址代替Servername,按照提示輸入用戶名和口令,然後用標準的Linux上移或 下移FTP服務器目錄結構。另外,也可以采用圖形化FTP程序,包括窗口式gFTP,可以借助Web瀏覽器去訪問FTP服務器。

在登錄上ftp後,可以使用如下ftp命令進行操作:

l FTP> ! 從 ftp 子系統退出到外殼

l FTP> ? 顯示 ftp 命令說明,和 help 相同,格式:? [command]說明:[command]指定需要幫助的命令名稱。假如沒有指定 command,linux ftp命令參數將顯示全部命令的列表。

l FTP> append 使用當前文檔類型配置將本地文檔附加到遠程電腦上的文檔。格式:append local-file [remote-file],說明:local-file 指定要添加的本地文檔,remote-file指定要添加 local-file 的遠程電腦上的文檔。假如省略了 remote-file,本地文檔名將被用作遠程文檔名。

l FTP> ascii 將文檔傳送類型配置為默認的 ASCII。說明:linux ftp命令參數支持兩種文檔傳送類型,ASCII 碼和二進制圖像,在傳送文本文檔時應該使用ASCII。

l FTP> bell 轉換響鈴以在每個文檔傳送命令完成後響鈴??默認情況下,鈴聲是關閉的。

l FTP> binary(或bi) 將文檔傳送類型配置為二進制

l FTP> bye(或by) 結束和遠程電腦的linux ftp命令參數會話並退出linux ftp命令參數。

l FTP> cd 更改遠程電腦上的工作目錄。格式:cd remote-directory,說明:remote-directory 指定要更改的遠程電腦上的目錄。

l FTP> close 結束和遠程服務器的linux ftp命令參數會話並返回命令解釋程式。

l FTP> debug 轉換調試。當調試打開時,發送到遠程電腦的每個命令都打印,前面是字符串">"。默認情況下,調試是關閉的。

l FTP> delete 刪除遠程電腦上的文檔。格式:delete remote-file,說明:remote-file 指定要刪除的文檔。

l FTP> dir 顯示遠程目錄文檔和子目錄列表。格式:dir [remote-directory] [local-file],說明:remote-directory 指定要查看其列表的目錄。假如沒有指定目錄,將使用遠程電腦中的當前工作目錄。Local-file 指定要存儲列表的本地文檔。假如沒有指定,輸出將顯示在屏幕上。

l FTP> disconnect 從遠程電腦斷開,保留linux ftp命令參數提示。

l FTP> get 使用當前文檔轉換類型將遠程文檔復制到本地,格式:get remote-file [local-file],說明:remote-file 指定要復制的遠程文檔,Local-file指定要在本地電腦上使用的名稱,假如沒有指定,文檔將命名為 remote-file。

l FTP>glob 轉換文檔名組合,組合允許在內部文檔或路徑名中使用通配符(*和?),默認情況下,組合是打開的。

l FTP>hash 轉換已傳輸的每個數據塊的數字簽名 (#) 打印,數據塊的大小是2048 字節,默認情況下,散列符號打印是關閉的。

l FTP>help 顯示linux ftp命令參數命令說明。格式:help [command],  說明:command 指定需要有關說明的命令的名稱,假如沒有指定 command,linux ftp命令參數將顯示全部命令的列表。

l FTP>lcd 更改本地電腦上的工作目錄,默認情況下,工作目錄是啟動linux ftp命令參數的目錄。格式:lcd [directory],說明:directory 指定要更改的本地電腦上的目錄,假如沒有指定directory,將顯示本地電腦中當前的工作目錄。

l FTP>literal 將參數逐字發送到遠程linux ftp命令參數服務器,將返回單個的linux ftp命令參數回復代碼,格式:literal argument [ ...],說明:argument 指定要發送到linuxftp命令參數服務器的參數。

l FTP>ls 顯示遠程目錄文檔和子目錄的縮寫列表,格式:ls [remote-directory] [local-file],說明:remote-directory 指定要查看其列表的目錄,假如沒有指定目錄,將使用遠程電腦中的當前工作目錄,local-file 指定要存儲列表的本地文檔??假如沒有指定,輸出將顯示在屏幕上。

l FTP>mdelete 刪除遠程電腦上的文檔,格式:mdelete remote-files [ ...],說明:remote-files 指定要刪除的遠程文檔。

l FTP>mdir 顯示遠程目錄文檔和子目錄列表,能夠使用 mdir 指定多個文檔,格式:mdir remote-files [ ...] local-file,說明:remote-files 指定要查看列表的目錄,必須指定 remote-files,請鍵入 - 使用遠程電腦上的當前工作目錄。local-file 指定要還原列表的本地文檔,請鍵入- 在屏幕上顯示列表。

l FTP>mget 使用當前文檔傳送類型將遠程文檔復制到本地電腦,格式:mget remote-files [ ...],說明:remote-files 指定要復制到本地電腦的遠程文檔。

l FTP>mkdir 創建遠程目錄,格式:mkdir directory,說明:directory 指定新的遠程目錄的名稱。

l FTP>mls 顯示遠程目錄文檔和子目錄的縮寫列表,格式:mls remote-files [ ...] local-file,說明:remote-files 指定要查看列表的文檔??必須指定remote-files;,請鍵入- 使用遠程電腦上的當前工作目錄。local-file 指定要存儲列表的本地文檔,請鍵入 - 以在屏幕上顯示列表。

l FTP>mput 使用當前文檔傳送類型將本地文檔復制到遠程電腦上。格式:mput local-files [ ...],說明:local-files 指定要復制到遠程電腦的本地文檔。

l FTP>open 和指定的linux ftp命令參數服務器連接,格式:open computer [port],說明:computer 指定要連接的遠程電腦??能夠通過 IP 地址或電腦名稱指定電腦(DNS 或主機文檔必須可用),假如自動登錄打開(默認),ftp 還將嘗試自動將用戶登錄到linux ftp命令參數服務器port 指定用來聯系linux ftp命令參數服務器的端口號。

l FTP>prompt 轉換提示,假如關閉提示時 mget 及 mput 傳送任何文檔,linux ftp命令參數在多文檔傳送過程中將提示允許您有選擇地檢索或存儲文檔,默認情況下,提示是打開的。

l FTP>put 使用當前文檔傳送類型將本地文檔復制到遠程電腦上,格式:put local-file [remote-file],說明:local-file 指定要復制的本地文檔,remote-file指定要在遠程電腦上使用的名稱??假如沒有指定,文檔將命名為 local-file。  

l FTP>pwd 顯示遠程電腦上的當前目錄。

l FTP>quit 結束和遠程電腦的linux ftp命令參數會話並退出linux ftp命令參數。

l FTP>quote 將參數逐字發送到遠程linux ftp命令參數服務器,將返回單個的linux ftp命令參數回復代碼。

l FTP>recv 使用當前文檔傳送類型將遠程文檔復制到本地電腦,Recv 和 get相同。格式:recv remote-file [local-file],說明:remote-file 指定要復制的遠程文檔,local-file指定要在本地電腦上使用的名稱,假如沒有指定,文檔將命名為 remote-file。

l FTP>remotehelp 顯示遠程命令幫助,格式:remotehelp [command],說明:command 指定需要幫助的命令的名稱,假如沒有指定 command,linux ftp命令參數將顯示全部遠程命令的列表。

l FTP>rename 重命名遠程文檔,格式:rename filename newfilename,說明:filename 指定要重命名的文檔,newfilename指定新的文檔名。

l FTP>rmdir 刪除遠程目錄,格式:rmdir directory,說明:directory 指定要刪除的遠程目錄的名稱。

l FTP>send 使用當前文檔傳送類型將本地文檔復制到遠程電腦上,Send 和put 相同,格式:send local-file [remote-file],說明:local-file 指定要復制的本地文檔,remote-file指定要在遠程電腦上使用的名稱,假如沒有指定,文檔將命名為 local-file。

l FTP>status 顯示linux ftp命令參數連接和轉換的當前狀態。

l FTP>trace 轉換數據包跟蹤,Trace 在運行linux ftp命令參數命令時顯示每個數據包的路由。

l FTP>type 配置或顯示文檔傳送類型,格式:type [type-name],說明:type-name 指定文檔傳送類型,默認配置為 ascii,假如沒有指定type-name,將顯示當前的類型。

l FTP>user 指定遠程電腦的用戶,格式:user username [password] [account],說明:user-name 指定登錄到遠程電腦所使用的用戶名,password 指定 user-name 的密碼,假如沒有指定,但必須指定,linux ftp命令參數會提示輸入密碼。account 指定登錄到遠程電腦所使用的帳戶,假如沒有指定account,但是需要指定,linux ftp命令參數會提示您輸入帳戶。

l FTP>verbose 轉換 verbose 模式,假如打開,將顯示任何 linux ftp命令參數響應,在文檔傳送完成後,將同時顯示和傳送效率有關的統計信息,默認情況下,verbose 是打開的。

sftp

sftp(安全文件傳輸協議)與ftp 有著幾乎一樣的語法和功能。FTP 為 SSH的一部份,是一種傳輸檔案至 Blogger 伺服器的安全方式。它並不使用ftp守護進程(ftpd或wu-ftpd)來進行連接,而是有意義地增強系統的安全性。實際上,通過監視一些系統中的 log文件,可以註意到很多攻擊是針對於ftpd守護進程的。sftp避免了這些攻擊從而可以停止在wu-ftpd上潛在的危險。SFTP本身沒有單獨的 守護進程,它必須使用sshd守護進程(端口號默認是22)來完成相應的連接操作。使用SFTP是非常安全的。但是,由於這種傳輸方式使用了加密/解密技 術,所以傳輸效率比普通的FTP要低得多,如果您對網絡安全性要求更高時,可以使用SFTP代替FTP。

用法舉例:

(1) [email protected]:/root/test.sh(直接將192上的文件復制到本地)

(2) [email protected]:/root (直接連接到192的root目錄下,這樣就可以使用getput等命令了)

sftp使用在數據連接上使用ssh2,所以文件的傳輸是盡可能地安全。使用sftp代替ftp兩個主要的的原因是:

(1) password從不用明文傳輸,防止sniffer(嗅探器)的攻擊。

(2) 數據在傳輸時被加密,使用刺探和修改連接非常困難。

使用sftp2是非常簡單的。讓我們假設你使用了你的帳戶:myname通過sftp連按上了主機host1。可以使用命令:sftp myname@host1。當sftp2準備好了來接受連接時,它將顯示一個狀態提示符 sftp>。在sftp手冊中有完整的用戶可以使用的命令列表;其中有:

l quit:從這個應用程序中退出。

l cd directory:改變當前的遠程工作目錄。

l lcd directory:改變當前的本地工作目錄。

l ls [ -r ] [ -l ] [ file ... ]:列出在遠地服務器上的文件名。如果是目錄,則列出目錄的內容。當命令行中指定了-r,則遞歸地顯示目錄樹。(默認情況下,子目錄並不被訪問)。當命令 行中指定了-l,文件與目錄的權限,屬主,大小和修改時間被列出。當沒有參數被指定,則.(當前目錄)的內容被列出。普通情況下選項-r和-l是互相不兼 容的。

l lls [ -r ] [ -l ] [ file ... ]:與ls一樣,但是是對於本地文件操作。

l get [file ...]:從遠程端傳送指定的文件到本地端。目錄內容被遞歸地復制。

l put [ file ... ]:從本地端傳送指定的文件到遠地端。目錄內容被遞歸地復制。

l mkdir dir (rmdir dir):嘗試建立或刪除參數中指定的目錄。

l 通配符對於ls,lls,get和put是支持的。格式在sshregex手冊中有描述。

從sftp使用加密技術以來,一直有一個障礙:連接速度慢(有2-3倍),但是這一點對於非常好的安全性來講只能放在一邊了。在一個測試中,局域網 上的sniffer可以在一個小時中捉住ftp連接上的4個password.。sftp的使用可以從網絡上傳送文件並且除去這些安全問題。

lftp

lftp 是一個功能強大的下載工具,它支持訪問文件的協議: ftp, ftps, http, https, hftp, fish.(其中ftps和https需要在編譯的時候包含openssl庫)。llftp非常像一個shell: 有命令補全,歷史記錄,允許多個後臺任務執行等功能,使用起來非常方便。它還有書簽、排隊、鏡像、斷點續傳、多進程下載等功能。

命令行語法

(1) lftp [-d] [-e cmd] [-p port][-u user[,pass]] [site]

-e在選擇後執行命令

-u [,] 使用指定的用戶名/口令進行驗證

-p 連接指定的端口

Site:主機名,URL 或書簽的名字

(2) lftp -f script_file

執行文件中的命令後退出

(3) lftp -c commands

執行命令後退出

(4) lftp –version

顯示 lftp 版本後退出

(5) lftp --help

顯示幫助信息後退出

例子:

(1) 如果在命令行中輸入的站點名稱,lftp將直接登錄站點,比如

lftp ftp://.............

(2) 如果在命令行不輸入站點名稱,則必須在進入到lftp界面後用open命令打開

Lftp

lftp :~> open ftp://...................

常用命令

l 下載單個文件和一組文件,斷點續傳用-c參數

lftp ................:/> get -c ls-lR.txt

lftp ...............:/> mget *.txt

l 鏡像(反鏡像即上傳)一個目錄,可以用多個線程並行鏡像一個目錄(--parallel=N)

lftp ................:/> mirror incoming local_name

lftp ................:/> mirror -R local_name

lftp ................:/> mirror --parallel=3 incominglocal_name

l 多線程下載,類似網絡螞蟻的功能;缺省是5個線程

lftp ................:/> pget -n 4 ls-lR.txt

l 後臺任務管理

缺省情況下,按 Ctrl+z,正在執行的任務將轉為後臺執行,也可以在命令行末尾加&符號使任務在後臺執行。用jobs命令可以查看所有的後臺進程。用queue命令可以排隊新的任務。如果退出lftp是還有任務在後臺執行,lftp將轉為後臺執行。

l 其它用法

lftp支持類似bash的管道操作,例如用下面的命令可以將ftp服務器上的特定目錄下(也可以是整個站點)所有文件的大小存到本地的文件ls.txt中

lftp ................:/> du incoming > ls.txt

相關文件

(1) /etc/lftp.conf

全局配置文件,實際位置依賴系統配置文件目錄,可能在/etc,也可能在/usr/local/etc

(2) ~/.lftp/rc, ~/.lftprc

用戶配置文件,將在/etc/lftp.conf之後執行,所以這裏面的設置會覆蓋/etc/lftp.conf中的設置。

(3) lftp 缺省不會顯示 ftp 服務器的歡迎信息和錯誤信息,這在很多時候不方便,因為你有可能想知道這個服務器到底是因為沒開機連不上,還是連接數已滿。如果是這樣,你可以在 ~/.lftprc 裏寫入一行,debug 3,就可以看到出錯信息了。更多的配置選項請查man手冊或在lftp界面內用命令 set -a 獲得。

(4) ~/.lftp/log

當lftp轉為後臺非掛起模式執行時,輸出將重定向到這裏

(5) ~/.lftp/bookmarks

這是lftp存儲書簽的地方,可以lftp查看bookmark命令

(6) ~/.lftp/cwd_history

這個文件用來存儲訪問過的站點的工作目錄

(7) ~/.lftprc

在用lftp訪問國內一些ftp服務器時,往往看到的中文是亂碼。不用慌,這是由於服務器和本地編碼不一致造成的。我們只要在主目錄下新建一個文 件~/.lftprc或者~/.lftp/rc。並在其中加入以下內容:debug 3set ftp:charset GBKset file:charset UTF-8#setftp:passtive-mode no#alias utf8 " set ftp:charset UTF-8"#alias gbk" set ftp:charset GBK"

登錄ftp服務器:

lftpftp://user:password@site:port

lftpuser:password@site:port

lftpsite -p port -u user,password

lftpsite:port -u user,password

上面的幾種方式都能正常工作,不過密碼都是明文,這樣好像不太安全哦。沒關系,使用lftp user@site:port,系統會提示輸入password,密碼就回顯為******了,不過每次都輸入這麽多,好麻煩哦。如果有類似 leapftp的站點管理器就好了,其實lftp早就給我們想好了:這就是bookmark。後面我們將會看到。

在終端運行如manlftp或登錄ftp後輸入help就可以看到命令列表,下面我們看一下lftp常用的命令:

(1) ls:顯示遠端文件列表(!ls顯示本地文件列表)。

(2) cd:切換遠端目錄(lcd 切換本地目錄)。

(3) get:下載遠端文件。

(4) mget:下載遠端文件(可以用通配符也就是 *)。

(5) pget:使用多個線程來下載遠端文件, 預設為五個。

(6) mirror:下載/上傳(mirror-R)/同步整個目錄。

(7) put:上傳文件。

(8) mput:上傳多個文件(支持通配符)。

(9) mv:移動遠端文件(遠端文件改名)。

(10) rm:刪除遠端文件。

(11) mrm:刪除多個遠端文件(支持通配符)。

(12) mkdir:建立遠端目錄。

(13) rmdir:刪除遠端目錄。

(14) pwd:顯示目前遠端所在目錄(lpwd顯示本地目錄)。

(15) du:計算遠端目錄的大小

(16) !:執行本地 shell的命令(由於lftp 沒有 lls, 故可用 !ls 來替代)

(17) Lcd:切換本地目錄

(18) Lpwd:顯示本地目錄

(19) Alias:定義別名

(20) Bookmark:設定書簽。

(21) Exit:退出ftp

(22) 快捷書簽:ftp中的bookmark命令,是將配置寫到~/.lftp/bookmarks文件中;我們可以直接修改此文件,快速登陸ftp服務器。

wget

wget 是一個經由 GPL 許可的可從網絡上自動獲取文件的自由軟件包。它是一個非交互式的命令行工具。支持 HTTP,HTTPS 和 FTP 協議,支持代理服務器以及斷點續傳功能。 wget 可實現遞歸下載,即可跟蹤 HTML 頁面上的鏈接依次下載來創建遠程服務器的本地版本,完全重建原始站點的目錄結構,實現遠程網站的鏡像。在遞歸下載時,wget 將頁面中的超級鏈接轉換成指向本地文件,方便離線瀏覽。由於非交互特性,wget 支持後臺運行,用戶在退出系統後,仍可繼續運行。功能強大,設置方便簡單。

基本語法: wget [options][URL-list]

Options:

-r 遞歸下載服務器上所有的目錄和文件。由 -l選項來指定遞歸深度。

-b 後臺下載

-m 制作站點鏡像

-c 指定斷點續傳功能。該功能要求服務器支持斷點續傳。

-I 指定下載目錄列表,可實現批量下載

-A/-R 指定接受/拒絕下載列表,實現選擇性地下載

--proxy=on/off 指定是否利用代理服務器進行下載

-t,--tries=NUMBER 最大嘗試鏈接次數 (0 表示無限制,默認為 20 次 )

-nc,--no-clobber 不覆蓋已存在的文件

-N,--timestamping 只下載比本地新的文件

-nd--no-directories 不進行目錄結構創建

-x,--force-directories 強制創建目錄結構

-nH,--no-host-directories 不繼承主機目錄結構

-P,--directory-prefix=PREFIX 設置目錄前綴

例子:遞歸下載 http://www.ibm.com.cn 站點的信息。下載所有顯示完整網頁所以需要的文件,如圖片等。在下載不進行上層目錄搜索並將絕對鏈接轉換為相對鏈接。

wget -r -p -np -k http://www.ibm.com.cn

將在本地硬盤建立http://www.ibm.com.cn 的鏡像,鏡像文件存入當前目錄下一個名為 www.ibm.com.cn 的子目錄中(也可以使用 -nH 參數指定不建立該子目錄,而直接在當前目錄下建立鏡像的目錄結構),遞歸深度為 4,重試次數為無窮(若連接出現問題,wget 將永遠重試下去,直至任務完成)

wget -m -l4 -t0 http://www.ibm.com.c

使用代理進行下載,並實現斷點續傳。代理可以在環境變量 PROXY 或 wgetrc 文件中設定。 -c 選項要求服務支持斷點續傳。

wget -Y on -c http://www.ibm.com.cn

curl

curl是對 libcurl 庫的一個命令行工具包裝。libcurl 庫中提供了相應功能的 API,可以在程序中調用。 curl 使用 URL 的語法來傳輸文件,它支持 FTP, FTPS, HTTP, HTTPS, TFTP, SFTP, TELNET 等多種協議。 curl 功能強大,它提供了包括代理支持,用戶認證,FTP 上載,HTTP post,SSL 連接,文件續傳等許多特性。

基本語法:curl [options …]

其中下載參數大約有 80 多個,curl 的各個功能完全依靠這些參數來完成。下面舉例說明 curl 的一些基本用法。

使用實例:

(1) 獲取 GNU 的主頁curl http://www.gnu.org

(2) 獲取 GNU 的 FTP 服務器上根目錄下的 README 文件curl ftp://ftp.gnu.org/README

(3) 從一個字典中獲取 curl 的定義curl dict://dict.org/m:curl

(4) 如果需要指定用戶名和密碼的話,可以在 url 中指定,或者使用 -u 參數curl ftp://name:[email protected]:port/full/path/to/file或者curl -uname:passwd ftp://machine.domain:port/full/path/to/file

(5) curl 會將從指定 url 處獲取的內容打印到標準輸出上。如果需要保存在本地文件中,可以使用 -o,或使用 -O 參數指定使用遠程主機上的文件名(如果 url 中沒有給出文件名的部分,則此操作將會失敗)curl -o gnu.html http://www.gnu.org 或者curl -O http:///www.gnu.org/index.htm

(6) 使用 -x 選項來使用代理進行連接curl -x my-proxy:port ftp://ftp.somesite.com/READMEN

(7) 通過使用 curl 的 -T 選項來進行上載curl -T - ftp://ftp.upload.com/upfile,此命令從標準輸入讀取數據,並上載至遠程 FTP 服務器上的 upfile 文件中。也可以指定上載一個本地文件curl -T localfile -a ftp://ftp.upload.com/upfile其中 -a 參數表示以添加方式將localfile 中的內容附加到 upfile 的末尾。

總的來說,curl 適合用來進行自動的文件傳輸或操作序列,它是一個很好的模擬用戶在網頁瀏覽器上的行為的工具。尤其當需要在程序中調用時,libcurl 是個很好的選擇。

傳輸速度

因為經常在服務器見進行文件傳輸,就對傳輸速度和帶寬有要求,這裏總結一下可以影響以上rcp,scp,rsync,ftp,sftp,lftp,wget,curl這6個命令的傳輸速度和帶寬的參數:

(1) rcp:沒有參數可以調整帶寬和傳輸速度

(2) scp:如果傳輸的文件沒有壓縮,可以使用-C參數(-C 使能壓縮選項)。-c 選擇使用那個加密算法,具體對應到ssh的-c cipher-spec,這個參數值會被傳給ssh,可選擇值3des,blowfish,des),使用blowfish會快很多,可以參看man ssh 中的-c cipher-spec。可以使用-l 限制使用帶寬,Kbit/s。避免因為傳輸文件而影響其他程序使用帶寬。-o ssh_option使用ssh選項

(3) rsync:-B, --block-size=SIZE 檢驗算法使用的塊尺寸,默認是700字節;-z, --compress 對備份的文件在傳輸時進行壓縮處理;--bwlimit=KBPS 限制I/O帶寬,KBytes per second ;-e, --rsh=COMMAND 指定使用rsh、ssh方式進行數據同步

(4) ftp:FTP>ascii 將文檔傳送類型配置為默認的 ASCII。說明:linux ftp命令參數支持兩種文檔傳送類型,ASCII 碼和二進制圖像,在傳送文本文檔時應該使用ASCII。Binary二進制傳輸。

(5) sftp: -B buffer_size, -C使用壓縮,-ossh_option使用ssh選項

(6) lftp:可以調整進程數等

(7) wget: --limit-rate=amount限制帶寬。

(8) curl:-B/--use-ascii和--ciphers,--compressed等。

總結

(1) 傳輸性能:wget 通過支持後臺執行及斷點續傳提高文件傳輸效率; rsync 則以其高效的傳輸及壓縮算法達到快傳輸的目的。

(2) 配置難度:rcp 只需進行簡單的配置,創建.rhost文件以及設置/etc/hosts文件中主機名與IP地址列表; wget設置方便簡單,只需在客戶端指定參數執行命令即可; rsync 在使用前需要對服務端/etc/rsyncd.conf 進行參數設定,配置內容相對復雜。

(3) 安全性能:ftp、rcp不保證傳輸的安全性,scp、rsync則均可基於ssh 認證進行傳輸,提供了較強的安全保障。wget 也可通過指定安全協議做到安全傳輸。

通過上述的對比不難發現,每種文件傳輸方法基於其自身的特點與優勢均有其典型的適用場景:

(1) ftp 作為最常用的入門式的文件傳輸方法,使用簡單,易於理解,並且可以實現腳本自動化;但是需要安裝ftp server才可以訪問遠程f

linux下不同服務器間數據傳輸(wget,scp)