本文記錄linux系統中文件傳輸的多種方式,留作備忘。linux中文件傳輸的方式有ftp,scp,rsync,rz,sz等,但各個工具的功能又有所區別;
- FTP : FTP是文件服務器,可實現文件的上傳下載,存儲等功能,但本文不打算介紹ftp的使用。
- scp: scp能夠將不同主機的文件進行相互傳輸,使用簡單方便。
- rz : 用於linux與windows之間的文件上傳
- sz : 用於linux與windows之間的文件下載
- rsync : rsync是文件同步工具,結合inotify可以實現文件的同步,備份功能。
-
scp介紹
scp是secure copy的簡寫,用於在Linux下進行遠程拷貝文件的命令,和它類似的命令有cp,不過cp只是在本機進行拷貝不能跨服務器,而且scp傳輸是加密的。可能會稍微影響一下速度。當你服務器硬盤變為只讀 read only system時,用scp可以幫你把文件移出來。另外,scp還非常不占資源,不會提高多少系統負荷,在這一點上,rsync就遠遠不及它了。雖然 rsync比scp會快一點,但當小文件眾多的情況下,rsync會導致硬盤I/O非常高,而scp基本不影響系統正常使用。scp在誇機器復制的時候為了提高數據的安全性,使用了ssh連接和加密方式,如果機器之間配置了ssh免密碼登錄,那在使用scp的時候密碼都不用輸入。
scp的安裝:文件傳輸的兩端機器都需要安裝
[root@yufu ~]# yum install openssh-clients -y
命令格式:scp [參數] [本地主機文件路徑] [遠程主機路徑]
參數選項:
-1 強制scp命令使用協議ssh1
-2 強制scp命令使用協議ssh2
-4 強制scp命令只使用IPv4尋址
-6 強制scp命令只使用IPv6尋址
-B 使用批處理模式(傳輸過程中不詢問傳輸口令或短語)
-C 允許壓縮。(將-C標志傳遞給ssh,從而打開壓縮功能)
-p 保留原文件的修改時間,訪問時間和訪問權限。 (建議使用,傳輸時保留屬性時間信息,否則會導致時間發生改變無法進行增量傳輸)
-q 不顯示傳輸進度條。 (很適合crontab任務計划中使用)
-r 遞歸復制整個目錄。
-v 詳細方式顯示輸出。scp和ssh(1)會顯示出整個過程的調試信息。這些信息用於調試連接,驗證和配置問題。
-c cipher 以cipher將數據傳輸進行加密,這個選項將直接傳遞給ssh。
-F ssh_config 指定一個替代的ssh配置文件,此參數直接傳遞給ssh。
-i identity_file 從指定文件中讀取傳輸時使用的密鑰文件,此參數直接傳遞給ssh。
-l limit 限定用戶所能使用的帶寬,以Kbit/s為單位。
-o ssh_option 如果習慣於使用ssh_config(5)中的參數傳遞方式,
-P port 注意是大寫的P, port是指定數據傳輸用到的端口號
-S program 指定加密傳輸時所使用的程序。此程序必須能夠理解ssh(1)的選項。
1.scp傳輸
scp -r /data/file root@ip:/data/
scp -C /data/sda.img root@ip:/data/img/
#-r: 支持目錄
#-C: 啟用壓縮傳送
scp傳輸速度較慢,但使用ssh通道保證了傳輸的安全性
配置scp在Linux或Unix之間傳輸文件無需密碼 http://www.linuxidc.com/Linux/2015-01/111894.htm
Linux之cp/scp命令+scp命令詳解 http://www.linuxidc.com/Linux/2014-09/107127.htm
CentOS 不能使用scp命令 解決方法 http://www.linuxidc.com/Linux/2014-09/106569.htm
兩台Linux主機之間scp復制文件 http://www.linuxidc.com/Linux/2014-04/99979.htm
2.rsync差異化傳輸(支持斷點續傳,數據同步)
rsync -av /backup/ -e ssh root@192.168.1.110:/bak
#-a: archive歸檔模式,表示以遞歸方式傳輸文件,並保持所有文件屬性,鏈接等,等於-rlptgoD
rsync——remote sync。rsync是Linux系統下的文件同步和數據傳輸工具,它采用“rsync”算法,可以將一個客戶機和遠程文件服務器之間的文件同步,也可以在本地系統中將數據從一個分區備份到另一個分區上。如果rsync在備份過程中出現了數據傳輸中斷,恢復后可以繼續傳輸不一致的部分。rsync可以執行完整備份或增量備份。它的主要特點有:
1.可以鏡像保存整個目錄樹和文件系統;
2.可以很容易做到保持原來文件的權限、時間、軟硬鏈接;無須特殊權限即可安裝;
3.可以增量同步數據,文件傳輸效率高,因而同步時間短;
4.可以使用rcp、ssh等方式來傳輸文件,當然也可以通過直接的socket連接;
5.支持匿名傳輸,以方便進行網站鏡象等;
6.加密傳輸數據,保證了數據的安全性;
Rsync實現文件備份同步詳解 http://www.linuxidc.com/Linux/2014-09/106967.htm
Rsync同步兩台服務器 http://www.linuxidc.com/Linux/2014-09/106574.htm
CentOS 6.5下Rsync遠程同步 http://www.linuxidc.com/Linux/2014-05/101084.htm
Ubuntu Linux下用Rsync進行數據備份和同步配制 http://www.linuxidc.com/Linux/2014-03/97592.htm
Linux使用Rsync客戶端與服務端同步目錄進行備份 http://www.linuxidc.com/Linux/2014-02/97068.htm
3.管道傳輸(降低IO開銷)
gzip -c sda.img | ssh root@192.168.1.110 "gunzip -c - > /image/sda.img"
#對sda.img使用gzip壓縮,-c參數表示輸出到stdout,即通過管道傳送
#gunzip -c - 中的"-"表示接收從管道傳進的sdtin
4.nc傳輸(一種網絡的數據流重定向)
nc所做的就是在兩台電腦之間建立tcp或udp鏈接,並在兩個端口之間傳輸數據流,是一種網絡的數據流重定向
#使用dd結合nc命令網絡克隆磁盤分區
主機:
dd if=/dev/vda | gzip -c | nc -l 50522
待恢復機:
nc 192.168.215.63 50522 | gzip -dc | dd of=/dev/sda
#dd命令克隆/dev/vda磁盤,並使用gzip壓縮,把數據流重定向到本機50522端口,待恢復機上使用nc連接主機50522端口,就能接收主機50522端口的比特數據流,然后使用gzip解壓縮,並恢復到/dev/sda磁盤
#dd命令讀取的是磁盤扇區,所以不論磁盤文件系統,或者分區表,磁盤MBR信息,dd都能夠復制,可以使用bs,count參數控制要克隆的大小
#例如dd bs=512 count=1 if=/dev/vda of=mbr.img 只復制磁盤vda的第一個扇區512K字節數據(引導程序和分區表)
5.建立文件服務器
除了上面集中傳輸文件的方式之外,還可以通過簡歷文件服務器,然后通過網絡掛載的方式傳輸,這種適用於經常性的拷貝,下面是一個掛載ftp服務器的例子
掛載ftp服務器
yum install curlftpfs
mkdir /data/ftp
curlftpfs username:password@ftp.yourdomain.com /data/ftp
-
rz sz (lrzsz)
rz sz指令可以實現linux和windows之間的文件傳輸,但要求在windows客戶端要安裝Xshell或SecureCRT遠程連接工具。
rz指令和sz指令是一對上傳與下載的指令。它們的軟件包名為lrzsz。
rz sz指令使用很簡單,執行rz 指令,遠程連接工具會彈出windows文件選擇窗口,只要選擇要上傳的文件即可
該命令的功能是將給出的文件或目錄拷貝到另一文件或目錄中,就如同DOS下的copy命令一樣,功能非常強大。
語法:cp [選項] 源文件或目錄 目標文件或目錄
說明:該命令把指定的源文件復制到目標文件或把多個源文件復制到目標目錄中。
各選項含義:
- - a 該選項通常在拷貝目錄時使用。它保留鏈接、文件屬性,並遞歸地拷貝目錄,其作用等於dpR選項的組合。
- - d 拷貝時保留鏈接。
- - f 刪除已經存在的目標文件而不提示。
- - i 和f選項相反,在覆蓋目標文件之前將給出提示要求用戶確認。回答y時目標文件將被覆蓋,是交互式拷貝。
- - p 此時cp除復制源文件的內容外,還將把其修改時間和訪問權限也復制到新文件中。
- - r 若給出的源文件是一目錄文件,此時cp將遞歸復制該目錄下所有的子目錄和文件。此時目標文件必須為一個目錄名。
- - l 不作拷貝,只是鏈接文件。
需要說明的是:為防止用戶在不經意的情況下用cp命令破壞另一個文件,如用戶指定的目標文件名是一個已存在的文件名,用cp命令拷貝文件后,這個文件就會被新拷貝的源文件覆蓋,因此,建議用戶在使用cp命令拷貝文件時,最好使用i選項。
$ cp - i exam1.c /usr/wang/shiyan1.c
該命令將文件exam1.c拷貝到/usr/wang 這個目錄下,並改名為 shiyan1.c
若不希望重新命名,可以使用下面的命令:
$ cp exam1.c /usr/ wang/
將/usr/xu目錄中的所有文件及其子目錄拷貝到目錄/usr/liu中,命令如下:
$ cp - r /usr/xu/ /usr/liu/
功能: 復制文件或目錄
說明: cp指令用於復制文件或目錄,如同時指定兩個以上的文件或目錄,且最后的目的地是一個已經存在的目錄,則它會把前面指定的所有文件或目錄復制到此目錄中。若同時指定多個文件或目錄,而最后的目的地並非一個已存在的目錄,則會出現錯誤信息
參數:
-a 或 --archive 此參數的效果和同時指定"-dpR"參數相同
-b 或 --backup 刪除、覆蓋目的文件先備份,備份的文件或目錄亦建立為符號鏈接,並指向源文件或目錄鏈接的源文件或目錄。假如沒有加上這個參數,在復制過程中若遇到符號鏈接,則會直接復制源文件或目錄
-f 或 --force 強行復制文件或目錄, 不論目的文件或目錄是否已經存在
-i 或 --interactive 覆蓋文件之前先詢問用戶
-l 或 --link 對源文件建立硬鏈接,而非復制文件
-p 或 --preserve 保留源文件或目錄的屬性,包括所有者、所屬組、權限與時間
-P 或 --parents 保留源文件或目錄的路徑,此路徑可以是絕對路徑或相對路徑,且目的目錄必須已經豐在
-r 遞歸處理,將指定目錄下的文件與子目錄一並處理。若源文件或目錄的形態,不屬於目錄或符號鏈接,則一律視為普通文件處理
-R 或 --recursive 遞歸處理,將指定目錄下的文件及子目錄一並處理
-s 或 --symbolic-link 對源文件建立符號鏈接,而非復制文件
-S <備份字尾字符串> 或 --suffix=<備份字尾字符串> 用"-b"參數備份目的文件后,備份文件的字尾會被加上一個備份字符串。默認的備份字尾符串是符號"~"
-u 或 --update 使用這項參數之后,只會在源文件的修改時間(Modification Time)較目的文件更新時,或是名稱相互對應的目的文件並不存在,才復制文件
-v 或 --verbose 顯示執行過程
-V <備份方式> 或 --version-control=<備份方式> 指定當備份文件時,備份文件名的命名方式,有以下3種:
1.numbered或t, 將使用備份編號,會在字尾加上~1~字符串,其數字編號依次遞增
2.simple或never 將使用簡單備份,默認的備份字尾字符串是~, 也可通過-S來指定
3.existing或nil將使用當前方式,程序會先檢查是否存在着備份編號,若有則采用備份編號,若無則采用簡單備份
-x 或 --one-file-system 復制的文件或目錄存放的文件系統,必須與cp指令執行時所處的文件系統相同,否則不復制,亦不處理位於其他分區的文件
--help 顯示在線幫助
--sparse=<使用時機> 設置保存希疏文件的時機
--version 顯示版本
示例:
.復制文件,只有源文件較目的文件的修改時間新時,才復制文件
cp -u -v file1 file2
.將文件file1復制成文件file2
cp file1 file2
.采用交互方式將文件file1復制成文件file2
cp -i file1 file2
.將文件file1復制成file2,因為目的文件已經存在,所以指定使用強制復制的模式
cp -f file1 file2
.將目錄dir1復制成目錄dir2
cp -R file1 file2
.同時將文件file1、file2、file3與目錄dir1復制到dir2
cp -R file1 file2 file3 dir1 dir2
.復制時保留文件屬性
cp -p a.txt tmp/
.復制時保留文件的目錄結構
cp -P /var/tmp/a.txt ./temp/
.復制時產生備份文件
cp -b a.txt tmp/
.復制時產生備份文件,尾標 ~1~格式
cp -b -V t a.txt /tmp
.指定備份文件尾標
cp -b -S _bak a.txt /tmp
http://blog.chinaunix.net/uid-28552340-id-5768392.html
