當您需要為云服務器ECS進行軟件部署、數據備份和恢復、數據導入和導出等操作時,您可以使用類Unix/Linux平臺上常用的文件傳輸工具實現。本文通過介紹文件傳輸的基本原理,以及常用的NETCAT、SCP和Rsync文件傳輸工具,您可以根據實際需要選擇合適的文件傳輸工具。
文件傳輸原理
文件傳輸是信息傳輸的一種形式,它是在數據源和數據宿之間傳送文件數據的過程,也稱為文件數據通信。操作系統把文件數據提取到內存中做暫存,再復制到目的地,加密是在文件外加了一個殼,文件本身仍然是一個整體,復制只是把這個整體轉移到其他地方,不需要解密,只有在打開壓縮包時才需要解密。在數據傳輸過程中,您需要注意:
一個大文件作為一個數據整體,是不可能瞬間從一臺主機轉移到其他主機的,傳輸是一個持續的過程,但不是把文件分割了,因此,如果在傳輸的過程中意外中斷,目標主機的路徑中不會有該文件。
如果傳輸的是多個文件,那么這些文件將會按順序分別傳輸,如果傳輸過程發生中斷,則正在傳輸的文件會傳輸失敗,但不會影響已經傳完的文件(如果傳輸的是文件壓縮包,則無論壓縮包中有幾個文件,該壓縮包均會被視為一個文件)。
通常我們看到的諸如NETCAT、SCP、Rsync等都是可以用來傳輸文件數據的工具,下面我們將詳細介紹主要文件傳輸工具的特點以及用法。
NETCAT
NETCAT在網絡工具中有“瑞士軍刀”的美譽,它功能強大,作為網絡工具的同時,它傳輸文件的能力也不容小覷。它可以建立TCP連接、發送UDP數據包、對TCP和UDP端口進行掃描、處理IPv4和IPv6數據包。
參數說明
NETCAT常用參數說明如下表所示:
參數 | 說明 |
-C | 一直不斷連接 |
-g <網關> | 設置路由器躍程通信網關,最多可設置8個 |
-G <指向器數目> | 設置來源路由指向器,其數值為4的倍數 |
-i <延遲秒數> | 設置時間間隔,以便傳送信息及掃描通信端口 |
-l | 使用監聽模式,管控傳入的資料 |
-o <輸出文件> | 指定文件名稱,把往來傳輸的數據以16進制字碼傾倒成該文件保存 |
-p <通信端口> | 設置本地主機使用的通信端口 |
-r | 指定本地與遠端主機的通信端口 |
-s <IP地址> | 本地源地址 |
-u | 使用UDP傳輸協議 |
-v | 顯示指令執行過程 |
-w <超時秒數> | 設置等待連線的時間 |
-z | 使用0輸入/輸出模式,只在掃描通信端口時使用 |
-n | 直接使用IP地址,而不通過域名服務器 |
常用示例
NC是NETCAT的簡寫,NC的常用示例如下:
端口掃描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
從192.168.2.33拷貝文件到192.168.2.34。
在192.168.2.34上:
nc -l 1234 > test.txt
在192.168.2.33上:
nc 192.168.2.34 < test.txt
用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)即安全拷貝,是一種在兩個服務器(本地與本地、本地與遠程、遠程與遠程)之間安全地進行文件傳輸的方法,它以SSH協議為基礎。SCP命令的用法和RCP命令格式非常類似,一般推薦使用SCP命令,因為它比RCP更安全。
更多SCP信息,請參見通過SFTP/SCP上傳或下載文件(本地主機為Linux或macOS)。
SCP在需要進行驗證時會要求您輸入密碼或口令。
SCP命令使用SSH來傳輸數據,并使用與SSH相同的認證模式,提供同樣的安全保障。
SSH是目前較可靠的、為遠程登錄會話和其他網絡服務提供安全性的協議,利用SSH協議可以有效防止遠程管理過程中的信息泄露問題。SCP是基于SSH的應用,所以進行數據傳輸的機器上必須支持SSH服務。
特點說明
SCP的特點如下:
SCP類似于RCP,它能夠保留一個特定文件系統上的文件屬性,能夠保留文件屬性或者需要遞歸地拷貝子目錄。
SCP具備更好的文件傳輸保密性。與此同時,付出的代價就是文件傳輸時需要輸入密碼,而且涉及到SSH的一些配置問題,這些都影響其使用的方便性,對于有特定需求的用戶來說,它是比較合適的傳輸工具。
參數說明
SCP常用參數說明如下表所示:
參數 | 說明 |
-v | 詳細方式顯示輸出,可以用來調試連接、驗證或者配置問題 |
-B | 使用批處理模式(傳輸過程中不詢問傳輸口令或短語) |
-C | 在復制過程中壓縮文件或目錄 |
-P | 如果默認SSH端口不是22,則使用此選項指定SSH端口 |
-r | 遞歸復制整個目錄 |
-4 | 強制SCP命令只使用IPv4地址 |
-6 | 強制SCP命令只使用IPv6地址 |
常用示例
SCP的常用示例如下:
生成RSA類型的密鑰
使用SCP命令時,需要輸入密碼,如果不想每次都輸入,可以通過配置SSH,這樣在兩臺機器之間拷貝文件時不需要每次都輸入用戶名和密碼。
上述命令生成RSA類型的密鑰。在提示密鑰的保存路徑和密碼時,可以直接回車使用默認路徑和空密碼。這樣,生成的公共密鑰保存在/.ssh/id_rsa.pub,私有密鑰保存在 /.ssh/id_rsa。然后把這個密鑰對中的公共密鑰的內容復制到要訪問的機器上的/.ssh/authorized_keys文件中。這樣,下次再訪問那臺機器時,就不用輸入密碼了。
在兩臺Linux主機間復制文件
命令基本格式:
scp [可選參數] file_source file_target
從本地復制文件到遠程服務器(如下四種方式)
序號
命令
指定用戶名和密碼
指定遠程目錄或具體的文件名
1
scp local_file remote_username@remote_ip:remote_folder
指定遠程主機的用戶名后,執行命令時需要再輸入密碼。
指定了遠程的目錄,命令執行后會將本地文件復制到遠程指定的目錄下。
2
scp local_file remote_username@remote_ip:remote_file
指定遠程主機的用戶名后,執行命令時需要再輸入密碼。
指定了具體的文件名,命令執行后會將本地文件復制到遠程主機上,且命名為指定的文件名。
3
scp local_file remote_ip:remote_folder
未指定遠程主機的用戶名,則執行命令后需要輸入用戶名和密碼。
指定了遠程的目錄,命令執行后會將本地文件復制到遠程指定的目錄下。
4
scp local_file remote_ip:remote_file
未指定遠程主機的用戶名,則執行命令后需要輸入用戶名和密碼。
指定了具體的文件名,命令執行后會將本地文件復制到遠程主機上,且命名為指定的文件名。
以使用第4條命令,將本地test.txt文件復制到遠程主機(公網IP地址為:120.XXX.XXX.XXX)并命名為test02.txt為例,操作如下:
在本地主機上執行
scp test.txt 120.XXX.XXX.XXX:test02.txt
命令,然后根據提示輸入遠程主機的登錄密碼。在遠程主機上查看文件。
您可以在遠程主機上看到復制成功的test02.txt文件。
從遠程服務器復制文件到本地
從遠程復制到本地,只要將從本地復制到遠程的命令的后2個參數調換順序即可。
scp remote_username@remote_ip:remote_folder local_file
在兩臺Linux主機間復制目錄
命令基本格式:
scp -r file_source file_target
從本地復制目錄到遠程服務器(如下兩種方式)
指定遠程主機的用戶名后,執行命令時需要再輸入密碼:
scp -r local_file remote_username@remote_ip:remote_folder
未指定遠程主機的用戶名,則執行命令后需要輸入用戶名和密碼:
scp -r local_file remote_ip:remote_folder
從遠程服務器復制目錄到本地
從遠程復制到本地,只要將從本地復制到遠程的命令的后2個參數調換順序即可。
scp -r remote_username@remote_ip:remote_folder local_file
Rsync
Rsync是Linux/Unix文件同步和傳送工具。它是用于替代RCP的一個工具,Rsync可以通過rsh或ssh使用,也能以daemon模式運行,在以daemon方式運行時,Rsync server會開啟一個873端口,等待客戶端連接。連接時Rsync server會檢查口令是否相符,若通過口令驗證,則可以進行文件傳輸,第一次連通完成時,會把整份文件傳輸一次,以后則只需進行增量備份。
安裝說明
您需要在本地和遠程服務器上安裝Rsync,Rsync的安裝方式如下:
可以使用每個發行版本自帶的安裝包管理器進行安裝。
sudo apt-get install rsync #在debian、ubuntu 等在線安裝方法;
slackpkg install rsync #Slackware 軟件包在線安裝;
源碼編譯安裝:
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
參數說明
Rsync常用參數說明如下表所示:
參數 | 說明 |
-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 #驗證密碼文件
相關文檔
您可以使用SFTP來傳輸文件,具體操作,請參見通過SFTP/SCP上傳或下載文件(本地主機為Linux或macOS)。
如果您使用Workbench遠程連接Linux實例,則您可以通過Workbench可視化地管理Linux文件,包括上傳文件和下載文件等。具體操作,請參見使用Workbench上傳或下載文件。