在資訊化高速發展的今天,伺服器每天都會與其它單機交換大量檔案資料,檔案傳輸對大家來說是家常便飯。因此,其重要性就不言而喻了。檔案傳輸方式各有不同,選擇一款合適自己的檔案傳輸工具,在工作中能起到事半功倍的效果。節省資源、方便傳輸、提升工作效率、加密保護等等。因此,很多檔案傳輸工具應運而生,例如:NC、FTP、SCP、NFS、SAMBA、RSYNC/SERVERSYNC等等,每種方式都有自己的特點。本文將首先簡單介紹一下檔案傳輸的基本原理,然後,詳細介紹類Unix/Linux、Windows平台上熱門檔案傳輸方式,並針對它們各自的特點進行比較,讓讀者對檔案傳輸方式有比較詳盡地瞭解,從而能夠根據不同的需要選擇合適的檔案傳輸方式。

檔案傳輸原理

檔案傳輸是資訊傳輸的一種形式,它是在資料來源和資料宿之間傳送檔案資料的過程,也稱檔案資料通訊。作業系統把檔案資料提取到記憶體中做暫存,再複製到目的地,加密就是在檔案外加了一個殼,檔案本身還是一個整體,複製只是把這個整體轉移到其它地方,不需要解密,只有開啟壓縮包時才需解密。一個大檔案作為一個資料整體,是不可能瞬間從一台主機轉移到其它的主機,傳輸是一個持續的過程,但不是把檔案分割了,因此,如果在傳輸的過程中意外中斷,目標路徑中是不會有傳輸的檔案,另外,如果傳輸的是多個檔案,那麼,這些檔案是按順序分別傳輸,如果中間中斷,則正在傳輸的檔案會傳輸失敗,但是,之前已經傳完的檔案傳輸成功(如果傳輸的是檔案壓縮包,那麼,不管裡面有幾個檔案,它本身被視為一個檔案)。

通常我們看到的 NC、FTP、SCP、NFS 等等,都是可以用來傳輸檔案資料的工具,下面我們將詳細介紹主要檔案傳輸工具的特點以及用法。

NETCAT

在網路工具中有“瑞士軍刀”的美譽,它功能強大,作為網路工具的同時,它傳輸檔案的能力也不容小覷。

常用參數

參數 說明
-g <網關> 設定路由器躍程通訊網關,最多可設定8個
-G <指向器數目> 設定來源路由指向器,其數值為4的倍數
-i <延遲秒數> 設定時間間隔,以便傳送資訊及掃描通訊連接埠
-l 使用監聽模式,管控傳入的資料
-o <輸出檔案> 指定檔案名稱,把往來傳輸的資料以16進位字碼傾倒成該檔案儲存
-p <通訊連接埠> 設定本地主機使用的通訊連接埠
-r 指定本地與遠端主機的通訊連接埠
-u 使用UDP傳輸協議
-v 顯示指令執行過程
-w <逾時秒數> 設定等待連線的時間
-z 使用0輸入/輸出模式,只在掃描通訊連接埠時使用
-n 直接使用IP地址,而不通過網域名稱伺服器

用法舉例

1.連接埠掃描21-24(以IP192.168.2.34為例)。
nc -v -w 2 192.168.2.34 -z 21-24

返回樣本:

nc: connect to 192.168.2.34 port 21 (tcp) failed: Connection refused
Connection to 192.168.2.34 22 port [tcp/ssh] succeeded!
nc: connect to 192.168.2.34 port 23 (tcp) failed: Connection refused
nc: connect to 192.168.2.34 port 24 (tcp) failed: Connection refused
2. 從192.168.2.33拷貝檔案到192.168.2.34。
  • 在192.168.2.34上:nc-l 1234 > test.txt

  • 在192.168.2.33上:nc192.168.2.34 < test.txt

3.用nc命令操作memcached。

  • 儲存資料:printf “set key 0 10 6rnresultrn” |nc 192.168.2.34 11211

  • 擷取資料:printf “get keyrn” |nc 192.168.2.34 11211

  • 刪除資料:printf “delete keyrn” |nc 192.168.2.34 11211

  • 查看狀態:printf “statsrn” |nc 192.168.2.34 11211

  • 類比top命令查看狀態:watch “echo stats” |nc 192.168.2.34 11211

  • 清空緩衝:
    printf “flush_allrn” |nc 192.168.2.34 11211       #謹慎操作,清空了緩衝就沒了

SCP 安全拷貝

SCP( Secure Copy)命令的用法和 RCP 命令格式非常類似,區別就是 SCP 提供更安全保障,SCP 在需要進行驗證時會要求你輸入密碼或口令,一般推薦使用 SCP 命令,因為它比 RCP 更安全。SCP 命令使用 SSH 來傳輸資料,並使用與 SSH 相同的認證模式,提供同樣的安全保障,SSH 是目前較可靠得,為遠程登入工作階段和其他網路服務提供安全性的協議,利用 SSH 協議可以有效防止遠端管理過程中的資訊泄露問題。SCP 是基於 SSH 的應用,所以進行資料轉送的機器上必須支援 SSH 服務。

特點

SCP 類似於RCP, 它能夠保留一個特定檔案系統上的檔案屬性,能夠保留檔案屬性或者需要遞迴的拷貝子目錄。

SCP它具備更好檔案傳輸保密性。與此同時,付出的代價就是檔案傳輸時需要輸入密碼而且涉及到 SSH 的一些配置問題,這些都影響其使用的方便性,對於有特定需求的使用者,是比較合適的傳輸工具。

常用樣本

使用 SCP 命令,需要輸入密碼,如果不想每次都輸入,可以通過配置 SSH,這樣在兩台機器間拷貝檔案時不需要每次都輸入使用者名稱和密碼:

產生 RSA 類型的密鑰:


返回樣本

上述命令產生 RSA 類型的密鑰。在提示密鑰的儲存路徑和密碼時,可以直接斷行符號使用預設路徑和空密碼。這樣,產生的公用密鑰儲存/.ssh/id_rsa.pub,私人密鑰儲存在 /.ssh/id_rsa 。然後把這個金鑰組中的公用密鑰的內容複寫到要訪問的機器上的 /.ssh/authorized_keys 檔案中。這樣,下次再訪問那台機器時,就不用輸入密碼了。

在兩台Linux主機間複製檔案
命令基本格式:
scp [選擇性參數] file_source file_target
從本地複製到遠程(如下四種方式):
scp local_file remote_username@remote_ip:remote_folder
scp local_file remote_username@remote_ip:remote_file
scp local_file remote_ip:remote_folder
scp local_file remote_ip:remote_file
说明 第1,2個指定了使用者名稱,命令執行後需要再輸入密碼,第1個僅指定了遠端目錄,檔案名稱字不變,第2個指定了檔案名稱。

第3,4個沒有指定使用者名稱,命令執行後需要輸入使用者名稱和密碼,第3個僅指定了遠端目錄,檔案名稱字不變,第4個指定了檔案名稱。

從遠程複製到本地:

scp root@www.cumt.edu.cn:/home/root/others/music /home/space/music/i.mp3
scp -r www.cumt.edu.cn:/home/root/others/ /home/space/music/
说明 從遠程複製到本地,只要將從本地複製到遠端命令的後2個參數調換順序即可。

Rsync

Rsync是linux/Unix檔案同步和傳送工具。用於替代rcp的一個工具,rsync可以通過rsh或ssh使用,也能以daemon模式去運行,在以daemon方式運行時rsync server會開一個873連接埠,等待用戶端去串連。串連時rsync server會檢查口令是否相符,若通過口令查核,則可以通過進行檔案傳輸,第一次連通完成時,會把整份檔案傳輸一次,以後則就只需進行增量備份。

安裝方式
说明 可以使用每個發行版本內建的安裝包管理器安裝。
sudo apt-get  install  rsync      #在debian、ubuntu 等線上安裝方法;
slackpkg  install  rsync          #Slackware 軟體包線上安裝;
yum install rsync                 #Fedora、Redhat 等系統安裝方法;
源碼編譯安裝:
wget http://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz
tar xf rsync-3.0.9.tar.gz
cd rsync-3.0.9
./configure && make && make install
參數介紹:
參數 說明
-v 詳細模式輸出
-a 歸檔模式,表示以遞迴的方式傳輸檔案,並保持所有檔案屬性不變,相當於使用了組合參數-rlptgoD
-r 對子目錄以遞迴模式處理
-l 保留軟連結
-p 保持檔案許可權
-t 保持檔案時間資訊
-g 保持檔案屬組資訊
-o 保持檔案屬主資訊
-D 保持裝置檔案資訊
-H 保留硬鏈結
-S 對疏鬆檔案進行特殊處理以節省DST的空間
-z 對備份的檔案在傳輸時進行壓縮處理
rsync六種不同的工作模式
  • 拷貝本地檔案,將/home/coremail目錄下的檔案拷貝到/cmbak目錄下。

    rsync -avSH /home/coremail/ /cmbak/
  • 拷貝本地機器的內容到遠程機器。

    rsync -av /home/coremail/ 192.168.11.12:/home/coremail/
  • 拷貝遠程機器的內容到本地機器。

    rsync -av 192.168.11.11:/home/coremail/ /home/coremail/
  • 拷貝遠程rsync伺服器(daemon形式運行rsync)的檔案到本地機。

    rsync -av root@172.16.78.192::www /databack
  • 拷貝本地機器檔案到遠程rsync伺服器(daemon形式運行rsync)中。當DST路徑資訊包含”::”分隔字元時啟動該模式。

    rsync -av /databack root@172.16.78.192::www
  • 顯示遠程機的檔案清單。這類似於rsync傳輸,不過只要在命令中省略掉本地機資訊即可。

    rsync -v rsync://192.168.11.11/data
rsync設定檔說明
cat/etc/rsyncd.conf              #內容如下
port = 873                       #連接埠號碼
uid = nobody                     #指定當模組傳輸檔案的守護進程UID
gid = nobody                     #指定當模組傳輸檔案的守護進程GID
use chroot = no                  #使用chroot到檔案系統中的目錄中
max connections = 10             #最大並發串連數
strict modes = yes               #指定是否檢查口令檔案的許可權
pid file = /usr/local/rsyncd/rsyncd.pid       #指定PID檔案
lock file = /usr/local/rsyncd/rsyncd.lock     #指定支援max connection的鎖檔案,預設為/var/run/rsyncd.lock
motd file = /usr/local/rsyncd/rsyncd.motd     #定義伺服器資訊的,自己寫 rsyncd.motd 檔案內容
log file = /usr/local/rsyncd/rsync.log        #rsync 伺服器的日誌
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
[conf]                                   #自訂模組
path = /usr/local/nginx/conf             #用來指定要備份的目錄
comment = Nginx conf
ignore errors                            #可以忽略一些IO錯誤
read only = no                           #設定no,用戶端可以上傳檔案,yes是唯讀
write only = no                          #no為用戶端可以下載,yes不能下載
hosts allow = 192.168.2.0/24             #可以串連的IP
hosts deny = *                           #禁止串連的IP
list = false                             #客戶請求時,使用模組列表
uid = root
gid = root
auth users = backup                      #串連使用者名稱,和linux系統使用者名稱無關係
secrets file = /etc/rsyncd.pass          #驗證密碼檔案