歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> 【Linux探索之旅】第四部分第三課:文件傳輸,潇灑同步

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

日期:2017/3/1 12:18:56   编辑:關於Linux

\


內容簡介<喎?http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPjwvaDI+CjxwPjxzdHJvbmc+MaGiPHN0cm9uZz48c3Ryb25nPrXay8Syv7fWtdrI/b/Oo7rOxLz+tKvK5KOs5OzI982ssr08L3N0cm9uZz48L3N0cm9uZz48L3N0cm9uZz48L3A+CjxwPjxzdHJvbmc+MqGiPHN0cm9uZz612svEsr+31rXay8S/zqO6t9bO9jxzdHJvbmc+PHN0cm9uZz7N+MLnPC9zdHJvbmc+PC9zdHJvbmc+o6y49MDrt8C78Dwvc3Ryb25nPjwvc3Ryb25nPjwvcD4KPHA+PGJyPgo8L3A+Cjxocj4KPGgyPs7EvP60q8rko6zk7Mj3zayyvTwvaDI+CjxwPjxicj4KPC9wPgo8cD7V4tK7v861xMTayN3P4LbUvPK1paOsy/nS1M7Sw8fC/cL9z+3Tw6GjPC9wPgo8cD48YnI+CjwvcD4KPHA+vq25/cnP0ru/zrXE0afPsKOsztLDx9LRvq3WqrXAyOe6ztS2s8zBrL3Ttb3G5Mv7tefE1MHLoaO0073x0tS686OsxOO+zb/J0tTU2tfUvLq1xLXnxNTJz9TL0NDD/MHuo6zAtL/Y1sbUtre9tcTB7dK7zKi158TUwcujrLrcv+GwyaGjPGJyPgo8L3A+CjxwPjxicj4KPC9wPgo8cCBjbGFzcz0="hoveredCourseElement">我們繼續探究Linux的奇幻網絡世界。這個網絡世界比較特別,也許你已經有所體會:前輩們做了大量努力,靠加密方法來保證網絡間傳輸的數據的安全,以防我們私人的信息洩露,例如密碼。


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


    如何下載文件

    如何連接到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會不斷的嘗試,直到整個文件下載完畢。如果是服務器打斷下載過程,它會再次聯到服務器上從停止的地方繼續下載。這對從那些限定了鏈接時間的服務器上下載大文件非常有用。簡直是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表示目標文件,就是拷貝產生的文件。


    這兩個文件都可以如下方式來表示:


    user@ip:file_name


    其中user是登錄名,ip是域名(例如google.fr)或ip地址(例如89.231.45.67),file_name是文件路徑。不要忘了中間的@號和冒號(:)。


    從自己電腦拷貝文件到另一台電腦


    這很簡單,例如:


    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的密碼。輸入密碼,回車,就開始拷貝了。


    另一台電腦拷貝文件到自己電腦


    類似的用法,例如:


    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(不改名也可以)。如下圖所示:


    \

    修改端口


    上述命令中,我們並沒有指定用哪個端口,只指定了ip地址。默認的端口號是22,和SSH一樣。我們也可以修改端口號,用-P參數。例如:


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


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


    注意:上一課中,SSH修改端口號使用-p參數,p是小寫。而scp修改端口號使用-P參數,P是大寫。



    ftp&sftp:傳輸文件


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


    FTP協議已經有點歲數了,1985年誕生,比小編來老呢。現在仍然是傳輸文件的最常用協議。正所謂“廉頗老矣,尚能飯否”,人家是“FTP當道,寶刀未老”。


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


      從公共的FTP服務器下載文件。一般來說,當你點擊浏覽器上的下載鏈接時,浏覽器就以自動和透明的方式來完成這個操作。這種情況下,連接是匿名的。

      從私有的FTP服務器上傳或下載文件。當我們從服務器出租商處租用一台服務器作為個人網站之用時,出租商通常會給我們一個FTP的登錄名和密碼,我們可以連接,以上傳及下載文件。這種情況下,連接是需要身份驗證的。


      因為並不是每個讀者都有自己私人的FTP服務器,所以下面演示的時候,我們會連接到公共的FTP服務器。當然,如果你想要連接到私人FTP服務器,那方法是一樣的。


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


      連接到FTP服務器


      我們試著連接到Debian的FTP服務器,地址如下:ftp://ftp.debian.org


      方法很簡單:


      ftp ftp.debian.org


      Debian的FTP服務器應該會有所回應,並向你請求輸入用戶名和密碼。對於公共的FTP服務器,用戶名一般都填寫 anonymous (表示“匿名”)。


      密碼你隨便輸入什麼都會被接受。


      登錄成功後,會看到類似以下信息:


      230 Login successful.

      Remote system type is UNIX.

      Using binary mode to transfer files.

      ftp>


      現在你有了命令提示符了,就是那個 ftp>


      你就可以輸入FTP命令了。


      在FTP服務器中操作


      好消息:你在FTP服務器上可以使用的命令基本和我們到目前為止學習的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文件現在位於你的當前目錄了。


        如果你連接到FTP服務器,但又想要在自己的電腦上運行命令,怎麼辦呢?


        只要在命令前加一個感歎號就可以了,例如:


        !pwd


        就會在自己電腦上執行pwd命令,而不是在FTP服務器上執行。


        其他的ftp命令


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


        用man ftp來看看其他可用的命令吧。你會發現,並不是所有的命令都與你到目前學過的Linux命令一樣的。例如,刪除文件不是用rm命令,而是delete命令。


        要從FTP服務器斷開連接,你可以用Ctrl+D組合鍵。也可以用bye,exit或quit命令,效果是一樣的。


        sftp:安全加密的ftp


        ftp命令雖然方便,但是有一個致命缺點:不安全,數據不是加密傳輸的。任何人,只要連接到同一個網絡,可以想辦法截取到你傳輸的數據,或者你的密碼。


        因此,我們需要請出sftp。sftp是Secure FTP的縮寫。表示“安全的FTP”。


        sftp也是基於SSH的,所以登錄需要用戶名和密碼,用法如下:


        sftp user@ip


        例如:


        sftp [email protected]


        一旦你輸入用戶名和密碼,連接上之後,其他的操作和ftp是一樣的。只不過通信被加密了,更安全。


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


        上述命令中,我們並沒有指定用哪個端口,只指定了ip地址。默認的端口號是22,和SSH一樣。我們也可以修改端口號,用-oPort參數。例如:


        sftp -oPort 3592 [email protected]



        rsync:同步備份


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


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


        sudo apt-get install rsync


        rsync命令使我們可以同步兩個目錄,不管這兩個目錄位於同一台電腦還是不同的電腦(用網絡連接)。


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


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


        備份有什麼好處呢?


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


        小編以前就有備份的良好習慣,而且我備份不止會在一個地方。


        所以備份很重要。假如你把你電腦上的文件備份到遠程服務器上,那麼如下圖所示:



        \


        用rsync來進行備份,是非常方便的。假如,你把自己的用戶家目錄都備份到服務器上了,也許有十幾個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/


          是不是很簡單呢。


          至於更多參數,可以用man rsync學習。


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


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


          這樣你以後不論在哪個目錄下輸入backup,rsync就幫你自動同步了,非常帥氣。這酸爽,不言而喻~


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



          總結


            wget命令可以下載文件。

            為了將文件從一台電腦拷貝到另一台電腦,我們可以使用scp命令。它使用上一課提到的SSH,因此傳輸是加密的,是安全的。

            我們可以用ftp命令來連接到一個FTP服務器,然後就可以上傳及下載文件了。

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

            rsync命令可以同步同一台電腦或兩台不同電腦上的兩個文件(夾)的內容,用rsync命令來備份文件特別方便。



            第四部分第四課預告


            今天的課就到這裡,一起加油吧!

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

Copyright © Linux教程網 All Rights Reserved