詳細介紹!Linux 上幾種經常使用的文件傳輸方式

ftphtml

ftp 命令使用文件傳輸協議(File Transfer Protocol, FTP)在本地主機和遠程主機之間或者在兩個遠程主機之間進行文件傳輸。算法

FTP 協議容許數據在不一樣文件系統的主機之間傳輸。儘管這個協議在傳輸數據上提供了高適應性,可是它並無嘗試去保留一個特定文件系統上的文件屬性(例如一個文件的保護模式或者修改次數)。並且 FTP 協議不多對一個文件系統的總體結構做假定,也不提供這樣的功能,好比遞歸的拷貝子目錄。在使用 ftp 命令時,須要注意 FTP 協議的這些特性。當須要保留文件屬性或者須要遞歸的拷貝子目錄時,可使用 rcp/scp 等命令。shell

基本語法瀏覽器

ftp 命令的通常格式以下:安全

$ ftp 主機名 /IP

其中「主機名 /IP 」是所要鏈接的遠程機的主機名或 IP 地址。在命令行中,主機名屬於可選項,若是指定主機名,ftp 將試圖與遠程機的 ftp 服務程序進行鏈接;若是沒有指定主機名,ftp 將給出提示符,等待用戶輸入命令:服務器

$ ftp  ftp >

此時在 ftp> 提示符後面輸入 open 子命令加主機名或 IP 地址,將試圖鏈接指定的主機。無論使用哪種方法,若是鏈接成功,須要在遠程機上登陸。用戶若是在遠程機上有賬號,就能夠經過 ftp 使用這一賬號並須要提供口令。在遠程機上的用戶賬號的讀寫權限決定該用戶在遠程機上能下載什麼文件和能將上載文件放到哪一個目錄中。在遠程站點上登陸成功後,在「 ftp> 」提示符下能夠自由使用 ftp 提供的各類子命令,最經常使用的子命令以下表所示。網絡

表 1. ftp 子命令dom

描述
ls 列出遠程機的當前目錄
cd 在遠程機上改變工做目錄
lcd 在本地機上改變工做目錄
ascii 設置文件傳輸方式爲 ASCII 模式
binary 設置文件傳輸方式爲二進制模式
close 終止當前的 ftp 會話
get (mget) 從遠程機傳送指定文件到本地機
put (mput) 從本地機傳送指定文件到遠程機
open 鏈接遠程 ftp 站點
quit 斷開與遠程機的鏈接並退出 ftp
? 顯示本地幫助信息
! 轉到 Shell 中
prompt 1 關閉交互模式

使用實例:ssh

利用編寫 ftp 腳本能夠自動完成文件傳輸任務。具體方法是使用 ftp 命令的 -in 選項,並重定向 ftp 命令的輸入。如今咱們來編寫一個利用 ftp 登陸到遠程服務器,並以 bin 的文件格式,在 /home 目錄下,下載 file1.log 以及 file2.sh 至本機 /opt/ibm/,並從本地 /opt 目錄上傳文件 file3.jave 至遠程服務器 /home 的自動化腳本。curl

ftp -ni <<+ 
     open $IP 
     user $USERNAME $PASSWD 
     bin 
     cd /home 
     lcd /opt/ibm 
     mget file1.log file2.sh 
     lcd /opt 
     mput file3.jave 
     ls 
     bye

rcp

rcp 意爲「 remote file copy 」(遠程文件拷貝)。該命令用於計算機之間進行文件拷貝。其有兩種格式。第一種格式用於文件到文件的拷貝;第二種格式用於把文件或目錄拷貝到另外一個目錄中。

基本語法

scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] 
         [-l limit] [-o ssh_option] [-P port] [-S program] 
         [[user@]host1:]file1 [...] [[user@]host2:]file2

每一個文件或目錄參數既能夠是遠程文件名也能夠是本地文件名。遠程文件名具備以下形式:rname@rhost:path,其中 rname 爲遠程用戶名,rhost 爲遠程計算機名,path 爲該文件的路徑。下表說明了 rcp 命令各個參數的含義。

表 2. rcp 命令的命令行參數

選項 描述
-r 遞歸地將源目錄中的全部內容拷貝到目的目錄中。若使用該選項,目的須爲一個目
-p 試圖保留源文件的修改時間和模式,忽略 umask 。
-k 請求 rcp 得到在指定區域內的遠程主機的 Kerberos 許可,而不是得到由 krb_relmofhost(3)肯定的遠程主機區域內的遠程主機的 Kerberos 許可。
-x 爲傳送的全部數據進行 DES 加密。這會影響響應時間和 CPU 利用率,可是能夠提升安全性。

若是在文件名中指定的路徑不是完整的路徑名,則該路徑將被解釋爲相對遠程機上同名用戶的主目錄。若沒有給出遠程用戶名,則使用當前用戶名。若是遠程機上的路徑包含特殊 shell 字符,須要使用反斜線()、雙引號(」)或單引號(’)將其括起來,使全部的 shell 元字符都能被遠程地解釋。須要說明的是,rcp 不提示輸入口令,它經過 rsh(remote shell)命令來執行拷貝。

使用實例:

  • 將本地文件複製到遠程登陸目錄中
    rcp
  • 將多個本地文件複製到遠程登陸目錄的子目錄中
    rcp
  • 將多個文件從多個遠程源複製到使用不一樣用戶名的遠程目標中
    rcp

scp

scp 命令在網絡上的主機之間拷貝文件,它是安全拷貝(secure copy)的縮寫。scp 命令使用 ssh 來傳輸數據,並使用與 ssh 相同的認證模式,提供一樣的安全保障。scp 命令的用法和 rcp 命令很是相似,這裏就不作過多介紹了。通常推薦使用 scp 命令,由於它比 rcp 更安全。

咱們能夠經過配置 ssh,使得在兩臺機器間拷貝文件時不須要每次都輸入用戶名和密碼。

基本語法

scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] 
         [-l limit] [-o ssh_option] [-P port] [-S program] 
         [[user@]host1:]file1 [...] [[user@]host2:]file2

使用 scp 命令,須要輸入密碼,若是不想每次都輸入,可參考下面的方法。

首先生成密鑰對

$ ssh-keygen -t rsa 
 Generating public/private rsa key pair. 
 Enter file in which to save the key (/home/user/.ssh/id_rsa): 
 Created directory '/home/user/.ssh'. 
 Enter passphrase (empty for no passphrase): 
 Enter same passphrase again: 
 Your identification has been saved in /home/user/.ssh/id_rsa. 
 Your public key has been saved in /home/user/.ssh/id_rsa.pub. 
 The key fingerprint is: 
 10:66:da:38:85:8a:8c:bd:db:9c:6e:eb:ee:bd:7d:15 user@somehost

在這裏,咱們指定了生成 rsa 類型的密鑰。在提示密鑰的保存路徑和密碼時,能夠直接回車使用默認路徑和空密碼。這樣,生成的公共密鑰保存在$HOME/.ssh/id_rsa.pub,私有密鑰保存在 $HOME/.ssh/id_rsa 。而後把這個密鑰對中的公共密鑰的內容複製到要訪問的機器上的 $HOME/.ssh/authorized_keys 文件中。這樣,下次再訪問那臺機器時,就不用輸入密碼了。

使用實例:

  • Copy 本地文件 /etc/eva.log, 到遠程機器 sysB, 用戶 user 的家目錄下
    scp /etc/eva.log user@sysB:/home/user
  • copy 遠程機器 sysB 上的文件 /home/uesr/eva.log, 到本地的 /etc 目錄下 , 並保持文件屬性不變
    scp -p user@sysB:/home/uesr/eva.log /etc
  • copy sysB 上的目錄 /home/user, 到本地 /home/user/tmp, <new home="" user="" tmp="" style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important; font-size: inherit; color: inherit; line-height: inherit;">scp -r user@sysB:/home/user /home/user/tmp</new>

wget

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

基本語法

wget [options] [URL-list]

wget 有不少不一樣的參數以用於遠程站點信息的獲取,經常使用參數以下,更多參數請參照 wget 幫助手冊 http://www.gnu.org/software/w...

表 3. wget 工具經常使用參數

image

使用實例:

  • 遞歸下載 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,能夠在程序中調用。對於 libcurl 庫的使用方法介紹超出了本文的討論範圍。curl 使用 URL 的語法來傳輸文件,它支持 FTP, FTPS, HTTP, HTTPS, TFTP, SFTP, TELNET 等多種協議。curl 功能強大,它提供了包括代理支持,用戶認證,FTP 上載,HTTP post,SSL 鏈接,文件續傳等許多特性。

基本語法

curl [options … ] <url>

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

使用實例:

  • 獲取 GNU 的主頁
    curl http://www.gnu.org
  • 獲取 GNU 的 FTP 服務器上根目錄下的 README 文件
    curl ftp://ftp.gnu.org/README
  • 從一個字典中獲取 curl 的定義
    curl dict://dict.org/m:curl
  • 若是須要指定用戶名和密碼的話,能夠在 url 中指定,或者使用 -u 參數
    curl ftp://name:passwd@machine.domain:port/full/path/to/file
    curl -u name:passwd ftp://machine.domain:port/full/path/to/file
  • curl 會將從指定 url 處獲取的內容打印到標準輸出上。若是須要保存在本地文件中,可使用 -o,或使用 -O 參數指定使用遠程主機上的文件名(若是 url 中沒有給出文件名的部分,則此操做將會失敗)
    curl – o gnu.html http://www.gnu.org
    curl – O http://www.gnu.org/index.html
  • 使用 -x 選項來使用代理進行鏈接
    curl -x my-proxy:port ftp://ftp.somesite.com/README
  • 經過使用 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 是個很好的選擇。

rsync

rsync 是一款高效的遠程數據備份和鏡像工具,可快速地同步多臺主機間的文件,其具備以下特性:

  • 支持連接、全部者、組信息以及權限信息的拷貝;
  • 經過遠程 shell(ssh, rsh)進行傳輸;
  • 無須特殊權限便可安裝使用;
  • 流水線式文件傳輸模式,文件傳輸效率高;
  • 支持匿名操做;

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

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

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

三、主機 A 對更新後的文件拷貝中的每一個長度爲 N 的數據塊進行弱校驗並與從 B 接收到的弱校驗值進行匹配,若相同再進行強校驗匹配。因爲弱校驗的滾動特性能夠快速地篩選出須要進行同步的數據塊。該算法的運算量主要集中在主機 A 上。

四、經過上述計算,主機 A 將文件的不一樣部分發送給 B,B 接收到兩個拷貝之間的不一樣之處,從而同步獲得更新後的文件。

經過如上方式,rsync 避免了對相同數據的傳輸,減小了網絡帶寬的浪費。在時間上整個過程當中需一個往返,從某種程度上也保證了 rsync 的優越性能。

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

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

表 4. rsyncd.conf 配置文件常見模塊參數列表

image

基本語法

  • 經過遠程 shell 方式:
    rsync [OPTION] [USER@]HOST:SRC DEST
  • 使用遠程 shell(如 ssh, rsh)實現將遠程機器的內容拷貝到本地機器。SRC 地址路徑中以單個冒號 ":" 進行分隔。
  • rsync [OPTION] SRC [USER@]HOST:DEST
  • 使用遠程 shell(如 rsh、ssh)實現本地機器的內容拷貝到遠程機器。DEST 地址路徑中以單個冒號 ":" 進行分隔。
  • 經過 rsync daemon 方式:
  • rsync [OPTION] [USER@]HOST::SRC DEST 或
  • rsync [OPTION] rsync://[USER@]HOST[:PORT]/SRC [DEST]
  • 從遠程 rsync 服務器中拷貝文件到本地機。SRC 地址路徑中以雙冒號 "::" 進行分隔。
  • rsync [OPTION] SRC [USER@]HOST::DEST 或
  • rsync [OPTION] SRC rsync://[USER@]HOST[:PORT]/DEST
  • 從本地機器拷貝文件到遠程 rsync 服務器中。DEST 地址路徑中以雙冒號 "::" 進行分隔。

若是 rsync 命令中只指定 SRC 參數而不指定 DEST 參數,則意爲顯示源文件列表而非進行同步拷貝。rsync 有許多功能選項,經常使用的選項以下:

表 5. rsync 經常使用參數

image

使用實例:

image

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

結尾與總結

綜上所述,各類文件傳輸方式的特徵表現各有千秋,咱們從如下幾個方面綜合對比,更深刻地瞭解它們各自的特性。

  • 傳輸性能

wget 經過支持後臺執行及斷點續傳提升文件傳輸效率 ;rsync 則以其高效的傳輸及壓縮算法達到快傳輸的目的。

  • 配置難度

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

  • 安全性能

ftp、rcp 不保證傳輸的安全性,scp、rsync 則都可基於 ssh 認證進行傳輸,提供了較強的安全保障。wget 也可經過指定安全協議作到安全傳輸。

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

  • ftp 做爲最經常使用的入門式的文件傳輸方法,使用簡單,易於理解,而且能夠實現腳本自動化;
  • rcp 相對於 ftp 能夠保留文件屬性並可遞歸的拷貝子目錄;
  • scp 利用 ssh 傳輸數據,並使用與 ssh 相同的認證模式,相對於 rcp 提供更強的安全保障;
  • wget,實現遞歸下載,可跟蹤 HTML 頁面上的連接依次下載來建立遠程服務器的本地版本,徹底重建原始站點的目錄結構,適合實現遠程網站的鏡像;
  • curl 則適合用來進行自動的文件傳輸或操做序列,是一個很好的模擬用戶在網頁瀏覽器上的行爲的工具;
  • rsync 更適用於大數據量的每日同步,拷貝的速度很快,相對 wget 來講速度快且安全高效。

讀者可在不一樣的場合根據實際須要,選擇適合的文件傳輸方法。

相關文章
相關標籤/搜索