1. 程式人生 > >【Linux探索之旅】第四部分第三課:文件傳輸,瀟灑同步

【Linux探索之旅】第四部分第三課:文件傳輸,瀟灑同步

命令行 上傳文件 文件夾 images lsh wget命令 ace 目標 wechat

技術分享


內容簡單介紹

1第四部分第三課:文件傳輸。瀟灑同步

2、第四部分第四課:分析網絡。隔離防火



文件傳輸。瀟灑同步


這一課的內容相對簡單,所以我們慢慢享用。


經過上一課的學習。我們已經知道怎樣遠程連接到其它電腦了。

從今以後。你就能夠在自己的電腦上執行命令,來控制遠方的還有一臺電腦了,非常酷吧。


我們繼續探究Linux的奇幻網絡世界。

這個網絡世界比較特別,或許你已經有所體會:前輩們做了大量努力,靠加密方法來保證網絡間傳輸的數據的安全。以防我們私人的信息泄露。比如password。


這一課我們來學習文件傳輸。主要分為下面幾方面:


  • 怎樣下載文件

  • 怎樣連接到FTP,讀取,下載文件

  • 怎樣安全地復制文件


當中涉及的關於網絡方面的知識,能夠查閱小編已完結的系列教程《Web探索之旅》:http://blog.csdn.net/column/details/webexplore.html?



wget:下載文件


我們就從一個簡單的命令開始吧。就是:wget


它能夠使我們直接從終端控制臺下載文件,僅僅須要給出文件的HTTP或FTP地址。


命令格式:


wget [參數] [URL地址]


比如:


wget http://cdimage.debian.org/debian-cd/8.2.0/i386/iso-cd/debian-8.2.0-i386-netinst.iso


就會開始從http://cdimage.debian.org/debian-cd/8.2.0/i386/iso-cd/上下載debian-8.2.0-i386-netinst.iso這個文件。


假設要停止下載,僅僅須要按Ctrl +C


能夠看到下方會出現一個進度條,顯示下載進度:


技術分享


38%表示已下載百分之38。

117k/s是下載速度。表示117kb每秒。

eta是估計剩余時間,此處是70秒。


那麽。怎麽事先獲得供wget下載的地址呢?


你能夠用瀏覽器(比方firefox),找到要下載的文件。然後在文件上點擊鼠標右鍵。左鍵點擊"復制鏈接地址",例如以下圖:


技術分享


然後黏貼到wget命令的地址參數中就能夠了。


wget 非常穩定,它在帶寬非常窄的情況下和不穩定網絡中有非常強的適應性。假設是因為網絡的原因下載失敗。wget會不斷的嘗試,直到整個文件完成下載。假設是server打斷下載過程,它會再次聯到server上從停止的地方繼續下載。這對從那些限定了鏈接時間的server上下載大文件非常實用。簡直是bug般的存在。


繼續中斷的下載


要繼續一個中斷的下載,僅僅要在同樣的下載命令中增加 -c 參數。比如:


wget -c http://cdimage.debian.org/debian-cd/8.2.0/i386/iso-cd/debian-8.2.0-i386-netinst.iso


c是英語continue的縮寫。表示“繼續”。



wget有許多的參數選項,我們不能逐一列舉。能夠參看wget的使用手冊:man wget


wget的一個不錯的地方是它顯示下載的進度。稍後我們會學習的ftp命令則不會顯示下載進度。




scp:網間拷貝


我們曾經的課程中學習過cp命令,它用於在自己的電腦上復制文件。


scp是Secure CoPy的縮寫,表示“安全拷貝”。這個命令能夠使我們通過網絡,把文件從一臺電腦復制到還有一臺。當然,拷貝的信息是安全的,正如它的名字所看到的。


也有一個命令rcp,是Remote CoPy的縮寫。也能夠做相同的事。可是信息沒有得到安全保護,不推薦。


scp使用起來有點類似上一課學過的SSH(Secure SHell)。

這並非巧合,由於scp是基於SSH的原理來運作的。SSH首先會在兩臺通過網絡連接的電腦之間創建一條安全通信的管道(如上一課所看到的),scp就利用這條管道安全地復制文件。


scp的基本命令格式例如以下:


scp original_file destination_file


當中original_file表示源文件。就是被拷貝的文件。

destination_file表示目標文件,就是拷貝產生的文件。


這兩個文件都能夠例如以下方式來表示:


[email protected]:file_name


當中user是登錄名。ip是域名(比如google.fr)或ip地址(比如89.231.45.67),[email protected](:)。


從自己電腦復制文件到還有一臺電腦


這非常easy,比如:


scp image.png [email protected]:/home/oscar/images/


表示把我的電腦中當前文件夾下的image.png文件復制到遠程電腦(ip地址是89.231.45.67)的用戶oscar的/home/oscar/images文件夾下,文件名稱不變(還是image.png,你也能夠改名字)。

例如以下圖所看到的:


技術分享


當然了。scp會請求你輸入遠程電腦(ip地址是89.231.45.67)的用戶oscar的password。輸入password,回車。就開始拷貝了。


還有一臺電腦復制文件到自己電腦


類似的使用方法,比如:


scp [email protected]:/home/oscar/images/image.png file_changed_name.png


表示從遠程電腦(ip地址是89.231.45.67)的用戶oscar的/home/oscar/images文件夾下把image.png復制到我的電腦中當前文件夾下,並改名為file_changed_name.png(不改名也能夠)。

例如以下圖所看到的:


技術分享

改動port


上述命令中,我們並沒有指定用哪個port,僅僅指定了ip地址。默認的port號是22,和SSH一樣。我們也能夠改動port號。用-P參數。比如:


scp -P 7821 [email protected]:/home/oscar/images/image.png .


表示從遠程電腦(ip地址是89.231.45.67,port7821)的用戶oscar的/home/oscar/images文件夾下把image.png復制到我的電腦中當前文件夾下,名字不變。此處用點號(.)表示當前文件夾。


註意:上一課中。SSH改動port號使用-p參數,p是小寫。而scp改動port號使用-P參數,P是大寫。



ftp&sftp:傳輸文件


FTP是File Transfer Protocol的縮寫。表示《文件傳輸協議》。顧名思義。就是用於傳輸文件的。


FTP協議已經有點歲數了,1985年誕生。比小編來老呢。如今仍然是傳輸文件的最經常使用協議。

正所謂“廉頗老矣,尚能飯否”,人家是“FTP當道,寶刀未老”。


使用ftp主要分為兩種情況:


  1. 從公共的FTPserver下載文件。一般來說,當你點擊瀏覽器上的下載鏈接時,瀏覽器就以自己主動和透明的方式來完畢這個操作。

    這樣的情況下。連接是匿名的。

  2. 從私有的FTPserver上傳或下載文件。當我們從server出租商處租用一臺server作為個人站點之用時,出租商一般會給我們一個FTP的登錄名和password,我們能夠連接,以上傳及下載文件。

    這樣的情況下,連接是須要身份驗證的。


由於並非每一個讀者都有自己私人的FTPserver,所以以下演示的時候。我們會連接到公共的FTPserver。當然,假設你想要連接到私人FTPserver,那方法是一樣的。


我們這裏使用純命令行的形式來操作,當然了,也存在不少優秀的FTP軟件,能夠提供圖形操作界面,比如著名的FileZilla。


連接到FTPserver


我們試著連接到Debian的FTPserver。地址例如以下:ftp://ftp.debian.org


方法非常easy:


ftp ftp.debian.org


Debian的FTPserver應該會有所回應,並向你請求輸入username和password。對於公共的FTPserver,username一般都填寫 anonymous (表示“匿名”)。


password你隨便輸入什麽都會被接受。


登錄成功後。會看到類似下面信息:


230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp>


如今你有了命令提示符了,就是那個 ftp>


你就能夠輸入FTP命令了。


在FTPserver中操作


好消息:你在FTPserver上能夠使用的命令基本和我們到眼下為止學習的Linux命令是一樣的。


比如:


ls:列出當前文件夾的文件

pwd:顯示當前文件夾的路徑

cd:轉換文件夾


你能夠試試其它命令。


文件傳輸


假設你想要上傳及下載文件。有兩個命令要知道:


  • put:用於上傳文件

  • get:用於下載文件


例如以下圖所看到的:


技術分享


我們來下載一個文件試試(README):


ftp> get README

local: README remote: README

200 PORT command successful. Consider using PASV.

150 Opening BINARY mode data connection for README (940 bytes).

226 File send OK.

940 bytes received in 0.00 secs (918.9 kB/s)


完成下載。README文件如今位於你的當前文件夾了。


假設你連接到FTPserver,但又想要在自己的電腦上執行命令。怎麽辦呢?


僅僅要在命令前加一個感嘆號就能夠了,比如:


!pwd


就會在自己電腦上運行pwd命令,而不是在FTPserver上運行。


其它的ftp命令


還有好些其它的FTP命令。我們就不逐一列舉了。


用man ftp來看看其它可用的命令吧。你會發現,並非全部的命令都與你到眼下學過的Linux命令一樣的。

比如。刪除文件不是用rm命令,而是delete命令。


要從FTPserver斷開連接。你能夠用Ctrl+D組合鍵。也能夠用bye,exit或quit命令,效果是一樣的。



sftp:安全加密的ftp


ftp命令盡管方便,可是有一個致命缺點:不安全。數據不是加密傳輸的。不論什麽人,僅僅要連接到同一個網絡。能夠想辦法截取到你傳輸的數據,或者你的password。


因此,我們須要請出sftp。sftp是Secure FTP的縮寫。

表示“安全的FTP”。


sftp也是基於SSH的。所以登錄須要username和password。使用方法例如以下:


sftp [email protected]


比如:


sftp [email protected]


一旦你輸入username和password,連接上之後。其它的操作和ftp是一樣的。僅僅只是通信被加密了,更安全。


用man sftp來看看其它可用的命令和參數吧。


上述命令中。我們並沒有指定用哪個port。僅僅指定了ip地址。默認的port號是22,和SSH一樣。我們也能夠改動port號。用-oPort參數。比如:


sftp -oPort 3592 [email protected]



rsync:同步備份


rsync命令易於使用,功能非常強大。


rsync是一個小程序。須要安裝,默認系統一般沒有這個命令。


sudo apt-get install rsync


rsync命令使我們能夠同步兩個文件夾。無論這兩個文件夾位於同一臺電腦還是不同的電腦(用網絡連接)。


rsync應該是最經常使用於“增量備份”的命令了吧。什麽是“增量備份”呢?


增量備份(incremental backup)是備份的一個類型,指在一次全備份或上一次增量備份後。以後每次的備份僅僅需備份與前一次相比添加或者被改動的文件。


備份有什麽優點呢?


想象一下,假如你不備份文件。那麽一旦你的個人電腦遭遇不測,比如壞了,被偷,等等。那麽你的數據就找不回來了。假設有寫了幾十頁的論文在裏面,那哭倒長城都有可能啊。好些朋友就有過這樣慘痛的經歷。


小編曾經就有備份的良好習慣。並且我備份不止會在一個地方。


所以備份非常重要。假如你把你電腦上的文件備份到遠程server上,那麽例如以下圖所看到的:



技術分享


用rsync來進行備份。是很方便的。

假如。你把自己的用戶家文件夾都備份到server上了,或許有十幾個G的內容啊。


第一次備份時,須要傳輸這整整十幾個G的內容,可是以後呢,僅僅須要傳輸新增或改動的內容就夠了,不須要再傳一遍。這就是rsync的強大之處,所謂“增量備份”的優點。



技術分享

如上圖所看到的,我用rsync僅僅傳輸了新的那個文件。其它的並沒有再傳輸。


rsync就好像更智能的scp。



備份到同一臺電腦的其它文件夾


rsync -arv Images/ backups/


以上命令,將Images文件夾下的全部文件備份到backups文件夾下。



-arv參數分別表示:


  • -a:保留文件的全部信息。包含權限,改動日期,等等。

  • -r:遞歸調用。

    表示子文件夾的全部文件也都包含。

  • -v:冗余模式。

    輸出具體操作信息。


刪除文件


默認地,rsync在同步時並不會刪除目標文件夾的文件。

比如,你的源文件夾(被同步文件夾)中刪除了一個文件。可是用rsync同步時。它並不會刪除同步文件夾中的同樣文件。


假設要使rsync也同步刪除操作。

那麽能夠這麽做:


rsync -arv --delete Images/ backups/


加上 --delete 參數就能夠了。



備份到還有一臺電腦的文件夾


rsync -arv --delete Images/ [email protected]:backups/


是不是非常easy呢。


至於很多其它參數,能夠用man rsync學習。


當然,rsync的強大之處絕不止於此。


你能夠自己配置rsync。使得它從指定文件夾(能夠是多個文件夾)備份到指定的ip地址的文件夾下,並且能夠指定哪些類型文件是要備份的,哪些類型不要備份。然後把這一長串命令統一用Shell來寫成一個文件(比如取名叫backup),使之可運行(用chmod命令),再把這個文件的路徑加入到PATH中。


這樣你以後不論在哪個文件夾下輸入backup。rsync就幫你自己主動同步了,很帥氣。這酸爽,不言而喻~


至於怎麽做,就算是留給大家的課後興趣作業咯。能夠自己百度,比如“Ubuntu下rsync配置”。




總結


  1. wget命令能夠下載文件。

  2. 為了將文件從一臺電腦復制到還有一臺電腦。我們能夠使用scp命令。它使用上一課提到的SSH,因此傳輸是加密的,是安全的。

  3. 我們能夠用ftp命令來連接到一個FTPserver,然後就能夠上傳及下載文件了。

  4. sftp和ftp命令類似,可是它用了SSH。所以傳輸的信息是加密的。

  5. rsync命令能夠同步同一臺電腦或兩臺不同電腦上的兩個文件(夾)的內容,用rsync命令來備份文件特別方便。




第四部分第四課預告


今天的課就到這裏。一起加油吧!

下一課我們學習:分析網絡。隔離防火

【Linux探索之旅】第四部分第三課:文件傳輸,瀟灑同步