每天一個linux命令:拷貝命令家族(cp、scp、rsync) --- scp

每天一個linux命令:拷貝命令家族(cp、scp、rsync) — scp

1. scp功能

scp 命令可以在 2個 linux 主機間複製文件; scp 即secure copy, scp是linux系統下基於ssh的遠程文件拷貝命令,所以,使用scp命令之前要保證目標主機開啓了ssh server。

更多精彩請查看:www.zicreate.com

2.命令格式

scp [參數] [源路徑] [目標路徑]

#遠程主機路徑格式爲 username@host:filename

3.主要命令參數

-1:使用ssh協議版本1;
-2:使用ssh協議版本2;
-4:使用ipv4;
-6:使用ipv6;
-B:以批處理模式運行;
-C:使用壓縮;
-F:指定ssh配置文件;
-l:指定寬帶限制;
-o:指定使用的ssh選項;
-P:指定遠程主機的端口號;
-p:保留文件的最後修改時間,最後訪問時間和權限模式;
-q:不顯示覆制進度;
-r:以遞歸方式複製。

4.使用場景

場景1:從本地複製到遠程

命令:

$ scp zicreate.txt [email protected]:/tmp/
The authenticity of host ‘10.239.85.241 (10.239.85.241)’ can’t be established.
ECDSA key fingerprint is 21:fe:c6:5f:91:7e:b6:28:b3:fe:aa:8e:24:3a:2d:2b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘10.239.85.241’ (ECDSA) to the list of known hosts.
[email protected]’s password:
zicreate.txt 100% 640 0.6KB/s 00:00

如上所示,第一次建立ssh鏈接時會詢問,輸入yes即可。由於scp是基於ssh登陸進行安全的遠程文件拷貝,所以,拷貝時需要指定遠程主機的用戶名稱以及對應的密碼,只有經過認證的用戶才具有拷貝權利,並不是可以隨便拷貝的。

場景2:從遠程複製到本地

命令:

$ rm zicreate.txt
rm: remove regular file ‘zicreate.txt’? y
$ scp root@10.239.85.241:/tmp/zicreate.txt ./
root@10.239.85.241's password:
zicreate.txt                                                                                                                                            100%  640                    0.6KB/s   00:00
$ ls -l zicreate.txt
-rw-r--r--. 1 root root 640 Dec 28 02:52 zicreate.txt

場景1與場景2的操作是一樣的,唯一的區別僅在於 [源路徑] [目標路徑] 的定義不同而已。

場景3:複製文件夾

使用scp 進行文件夾複製時只需要加上 “-r” 參數即可,其他如通配符之類的組合操作可以參考cp命令。使用方式如下:

$ scp -r [email protected]:/tmp/dir1 ./ #從遠程拷貝文件夾到本地

$ scp -r ./dir1 [email protected]:/tmp #從本地拷貝文件夾到遠程

默認進行復制操作時會顯示傳輸進度以及傳輸速率。

其他參數相關操作實際使用較少,不再詳述。

擴展

與scp相似有一個同樣功能的命令rcp。scp 是 rcp 的加強版,是security cp,而 rcp 是不加密的remote cp。所以,有了scp 基本上不需要 rcp 了,本系列文章不再講解 rcp 的使用。

腦洞

在這裏先劇透一個牛逼的命令 nc — Netcat。

以下演示如何通過 nc 進行文件以及目錄的遠程傳輸。

在這個示例中,假設有兩臺電腦 A / B。A作爲服務器(ip=10.239.85.234),B爲客戶端(ip=10.239.85.241)。

1. 文件傳輸

Server

$ nc -l 1234 < zicreate.txt

Client

$ nc -n 10.239.85.234 1234 > recv.txt

在這裏我們創建了一個socke服務在A的1234端口上,並且重定向 netcat 的輸入爲文件 zicreate.txt,那麼當任何 client 成功連接到 server 該端口時,netcat 會發送文件 zicreate.txt 的內容到 client。

在 client 我們將接收到的數據重定向輸出到 recv.txt,當 Client 連接到 server , server 發送文件內容, Client 保存文件內容.

當然,server 端也可以接收文件,方法如下:

同樣是 A 作爲Server,

Server

$ nc -l 1234 > recv.txt

Client

$ nc -n 10.239.85.234 1234 < recv.txt

2. 目錄傳輸

發送一個文件很簡單,但是如果我們想要發送多個文件,或者整個目錄,一樣很簡單,只需要使用壓縮工具tar,壓縮後發送壓縮包。

具體命令如下:

Server

$ tar -cvf – ./dir1 | nc -l 1234

Client

$ nc -n 10.239.85.234 1234 | tar -xvf -

在server 上,我們創建一個tar歸檔包並且通過”-“在控制檯重定向它,然後使用管道重定向給netcat,netcat可以通過網絡發送它。

在client 我們下載該壓縮包,然後通過管道接收歸檔包並解壓爲文件夾。

如果想要節省帶寬傳輸壓縮包,我們可以使用bzip2或者其他工具壓縮。

關於netcat 更多高級操作此處不在展開,留待以後講解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章