如何在 Linux 中使用 SCP 命令

一個簡單的教程,可幫助您使用 scp 命令將文件從 Linux 系統傳輸到遠程系統。

SCP 代表“安全副本”。scp是 Linux 提供的命令行實用程序,它允許通過不安全的網絡將文件和目錄從一台機器傳輸到另一台機器。

如果您希望將文件從一個系統複製到另一個系統,那麼scp對文件和目錄進行安全傳輸是一個非常好的選擇。當兩台通信機器通過同一網絡連接時,scp就可以使用了。

您可以高度依賴該scp命令的機密性和完整性,因為正在傳輸的文件和用於傳輸的密碼都是加密的。即使有人試圖在此傳輸過程中窺探流量,也不會洩露任何敏感信息。

在本教程中,我們將看到該scp命令的不同示例。我們還將查看該scp命令的一些常用選項。

開始使用 scp 命令

使用該scp命令您可以傳輸文件/目錄:

  • 從本地機器到遠程機器。
  • 在兩台遠程機器之間。
  • 從遠程機器到本地機器。

一般語法:

scp [Option] [source_file_name] [[email protected]_Host]:destination_folder

讓我們一一了解這個命令的基本屬性。

  • [source_file_name]這是您要復制的源文件。
  • [ [email protected] _Host]這是要復製文件的遠程系統的用戶名。遠程機器的 IP 地址也用於此屬性中的“ @”符號之後。
  • [destination_folder]這是您要保存複製文件的目錄。

注意::在語法中使用冒號 ( ) 符號來區分本地和遠程位置。我們:對遠程系統使用冒號 ( ) 來指定文件應複製到的目錄。如果我們不指定目標目錄,那麼文件將被複製到遠程系統用戶的主目錄。

使用的選項 scp

scp下面列出了與該命令一起使用的一些最流行的選項。

選項 描述
-C 允許壓縮要傳輸的文件
-v 給出詳細的輸出
-r 遞歸複製文件和目錄
-p 保留文件的權限、模式和訪問時間
-P 更改scp命令使用的默認端口

scp 命令的常用選項

我們將在教程中進一步看到這些選項的示例。

將文件從本地複製到遠程系統

scp允許您使用以下語法將文件從本地系統傳輸到遠程系統。這允許您將文件傳輸或上傳到遠程放置的服務器。

一般語法:

scp [file_name] [email protected]:[destination_folder]

例子:

scp apache-tomcat-9.0.8.tar.gz [email protected]:gaurav

在此示例中,我們將文件“apache-tomcat-9.0.8.tar.gz”從本地系統複製到 IP 地址為“143.110.178.221”的遠程系統。

在遠程系統上,該文件現在將復製到名為“gaurav”的目錄中。

輸出:

[email protected]:~$ scp apache-tomcat-9.0.8.tar.gz [email protected]:gaurav
[email protected]'s password: 
apache-tomcat-9.0.8.tar.gz                           100% 9589KB  79.8KB/s   02:00    
[email protected]:~$ 

讓我們檢查遠程系統上文件的輸出。

[email protected]:~/gaurav# ls
apache-tomcat-9.0.8.tar.gz
[email protected]:~/gaurav#

因此,使用該scp命令將文件成功複製到遠程系統。

將多個文件複製到遠程系統

在前面的示例中,我們學習了使用scp命令將文件傳輸到遠程系統。我們現在將看到使用此命令將多個文件從本地系統傳輸到遠程系統的方法。

一般語法:

scp [file 1] [file 2] [file n] [email protected]_host:[specific directory]

讓我們通過一個例子來理解這個簡單的過程。

例子:

scp ath.html abc.txt ppa-purge_0.2.8+bzr56_all.deb [email protected]:gaurav

在這裡,要在遠程系統上複製的命令中提到了多個文件。

輸出:

[email protected]:~$ scp ath.html abc.txt ppa-purge_0.2.8+bzr56_all.deb [email protected]:gaurav 
[email protected]'s password: 
ath.html                                      100%  199KB  94.7KB/s   00:02    
abc.txt                                       100%    0     0.0KB/s   00:00    
ppa-purge_0.2.8+bzr56_all.deb                 100% 4360    42.2KB/s   00:00    
[email protected]:~$

在遠程系統上:

[email protected]:~/gaurav# ls -l
total 9800
-rw-r--r-- 1 root root       0 Oct  5 08:58 abc.txt
-rw-r--r-- 1 root root 9818695 Oct  5 08:35 apache-tomcat-9.0.8.tar.gz
-rw-r--r-- 1 root root  204057 Oct  5 08:58 ath.html
-rw-r--r-- 1 root root    4360 Oct  5 08:58 ppa-purge_0.2.8+bzr56_all.deb
[email protected]:~/gaurav#

所有三個文件現在都複製到遠程系統上。

將目錄複製到遠程系統

您可以使用scp命令將目錄從本地系統複製到遠程系統。該過程類似於復製文件的過程。要復制目錄的內容,您可以將 -r選項與scp命令一起使用。

-r選項用於遞歸複製目錄。這意味著,目錄中的所有子文件夾和文件也將被複製。

一般語法:

scp -r [directory path] [email protected]_host:[target_directory]

例子:

scp -r PycharmProjects [email protected]:gaurav

輸出:

[email protected]:~$ scp -r PycharmProjects [email protected]:gaurav
[email protected]'s password: 
__main__.py                                   100%  623     7.8KB/s   00:00    
__init__.py                                   100%   23     0.4KB/s   00:00    
completion.py                                 100% 2929    28.1KB/s   00:00    
search.py                                     100% 4728    38.7KB/s   00:00    
uninstall.py                                  100% 2963    32.5KB/s   00:00    
hash.py                                       100% 1681    21.3KB/s   00:00    
check.py                                      100% 1430    16.8KB/s   00:00    
configuration.py                              100% 7125    50.4KB/s   00:00    
show.py                                       100% 6289    49.8KB/s   00:00    
download.py                                   100% 6623    48.2KB/s   00:00  
[email protected]:~$  

使用該-r選項和scp命令將目錄中的所有子文件夾和文件從本地機器複製到遠程系統。

顯示有​​關 scp 進程的詳細信息

您可以使用-v(小寫v)選項顯示有關在遠程或本地系統上複製的文件的信息。這種類型的輸出也稱為詳細輸出。

使用此選項時,有關文件的完整調試信息將顯示在屏幕上。

一般語法:

scp -v [file_name] [email protected]_host:

例子:

scp -v apache-tomcat-9.0.8.tar.gz [email protected]:team

輸出:

[email protected]:~$ scp -v apache-tomcat-9.0.8.tar.gz [email protected]:team
Executing: program /usr/bin/ssh host 159.89.170.11, user root, command scp -v -t team
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n  7 Dec 2017
debug1: Reading configuration data /home/gaurav/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 159.89.170.11 [159.89.170.11] port 22.
debug1: Connection established.
debug1: key_load_public: No such file or directory
debug1: identity file /home/gaurav/.ssh/id_rsa type -1
apache-tomcat-9.0.8.tar.gz                                                                                          100% 9589KB  99.8KB/s   01:36    
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
debug1: fd 1 clearing O_NONBLOCK
Transferred: sent 9826736, received 4016 bytes, in 97.2 seconds
Bytes per second: sent 101133.9, received 41.3
debug1: Exit status 0
[email protected]:~$

在這裡,在輸出中,您可以看到當scp命令與-v選項一起使用時,文件的調試信息正在顯示在終端上。

在兩個遠程主機之間傳輸文件

Linux 允許您連接到多個遠程主機。您可以使用該scp命令在兩個遠程主機之間傳輸文件和目錄。

一般語法:

scp [email protected]_1:/[file_name] [email protected]_2:[folder_to_save]

語法可能看起來有點寬,但非常簡單。在這裡,命令的第一部分給出了有關要從何處複製文件的遠程用戶的輸入。冒號 (:)/用於指定要在兩台遠程機器之間傳輸的文件名或目錄名。

第二部分提供有關要復製文件的目標遠程系統的信息。

例子:

scp -r [email protected]:gaurav [email protected]:/team

在這裡,我們將遞歸地從本地系統複製名為“gaurav”的目錄到遠程系統。該文件將被複製到遠程系統上的文件夾“team”。

輸出:

[email protected]:~$ scp -r [email protected]:/gaurav [email protected]:/team 
[email protected]'s password: 
1.py                                          100%  134   261.3KB/s   00:00    
variables.py                                  100%  377   949.2KB/s   00:00    
abc.txt                                       100%    0     0.0KB/s   00:00    
ath.html                                      100%  199KB  41.8MB/s   00:00    
[email protected]:~$

在這裡,我們使用scp本地系統上的命令將名為“gaurav”的目錄從一台遠程服務器傳輸到另一台服務器。

將文件從遠程系統傳輸到本地系統

您可以使用該scp命令輕鬆地將文件或目錄從遠程系統傳輸到本地系統。簡而言之,您可以使用該scp 命令從遠程服務器下載多個文件或目錄到您的本地系統。

一般語法:

scp [email protected]_host:/files/file.txt /[folder_of_local_system]

輸出:

[email protected]:~$ scp [email protected]:how.txt .
[email protected]'s password: 
how.txt                                                                                                             100%   11     0.1KB/s   00:00    
[email protected]:~$

在這裡,我已將文件從遠程服務器下載(複製)到我的主目錄中。因此,我使用點 ( .) 在命令中指定將文件複製到我的主目錄。

示例輸出:

[email protected]:~$ ls -l how.txt
-rw-r--r-- 1 gaurav gaurav 11 Oct  6 09:49 how.txt
[email protected]:~$ 

在這裡,文件現在從遠程服務器複製到我的主目錄。

同樣,您可以使用scp帶有適當選項的命令從遠程服務器下載多個文件或目錄。

壓縮文件以加快傳輸速度

有時,傳輸大文件可能很耗時。使用scp帶有-C(uppercase C) 選項的命令時,可以解決此問題。

使用該-C 選項可壓縮較大的文件,從而加快傳輸速度,從而節省時間。

關於此選項的一個有趣事實是,文件在目標系統上以其原始大小複製,但在傳輸過程中,大小被壓縮以實現更快的傳輸。因此,壓縮僅在網絡上完成。

一般語法:

scp -C [file_name] [email protected]_host:[target_folder]

讓我們看一個比較示例以了解差異。

不帶 -C 選項的傳輸:

[email protected]:~$ scp -rv dlink [email protected]:team
Executing: program /usr/bin/ssh host 68.183.82.183, user root, command scp -v -r -t team
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n  7 Dec 2017
debug1: Reading configuration data /home/trinity/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 68.183.82.183 [68.183.82.183] port 22.
debug1: Connection established.

debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
debug1: fd 1 clearing O_NONBLOCK
Transferred: sent 7516504, received 4008 bytes, in 74.6 seconds
Bytes per second: sent 100693.7, received 53.7
debug1: Exit status 0
[email protected]:~$ 

從上面的輸出我們可以看出,傳輸所需的時間是 74.6 秒。我們將嘗試使用 -C 選項傳輸相同的文件並觀察差異。

使用 -C 選項傳輸:

[email protected]:~$ scp -Crv dlink [email protected]:team
Executing: program /usr/bin/ssh host 68.183.82.183, user root, command scp -v -r -t team
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n  7 Dec 2017
debug1: Reading configuration data /home/trinity/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 68.183.82.183 [68.183.82.183] port 22.
debug1: Connection established.
.
.
webupload.img                                                                                                       100% 1834KB  98.7KB/s   00:18    
Sending file modes: C0664 1877552 router.img
Sink: C0664 1877552 router.img
router.img                                                                                                          100% 1834KB 100.3KB/s   00:18    
Sink: E
Sending file modes: C0664 3754103 DSL-2750U-Release-IN-T-01.00.07.zip
Sink: C0664 3754103 DSL-2750U-Release-IN-T-01.00.07.zip
DSL-2750U-Release-IN-T-01.00.07.zip                                                                                 100% 3666KB 218.5KB/s   00:16    
Sink: E
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
debug1: fd 1 clearing O_NONBLOCK
Transferred: sent 7518864, received 3828 bytes, in 51.0 seconds
Bytes per second: sent 100245.4, received 51.0
debug1: Exit status 0
debug1: compress outgoing: raw data 7511925, compressed 7513136, factor 1.00
debug1: compress incoming: raw data 1467, compressed 999, factor 0.68
[email protected]:~$

在這裡,我們可以很容易地觀察到,使用-C帶有scp命令的選項允許我們通過網絡壓縮文件,從而證明是一個節省時間的選項。

使用不同的 ssh 端口進行文件傳輸

使用該scp命令時,部署的默認端口是port 22. 用戶可以自由定制此端口選擇。您可以-Pscp命令中使用(大寫 P 選項)來使用您選擇的端口。

一般語法:

cp -P [new_port_number] [file_name/directory_name] [email protected]:[destination_folder]

例子:

scp -P 4248 dlink [email protected]:team

使用上面的命令,文件將被傳輸到遠程服務器。但這一次,使用的端口將port 4248代替默認的port 22.

結論

完成本教程後,我們了解了scp用於將文件從一個系統傳輸或複製到另一個系統的命令的動態特性。此選項還可用於從遠程服務器下載文件或目錄。因此,我們可以得出結論,scp當您必須同時處理多個系統和遠程服務器時,命令證明對文件傳輸非常有用。

Tags: #linux命令

如何在 Chromebook 上複製和粘貼

如何在 Chromebook 上複製和粘貼

在切換到 Chromebook 時,您可能想知道的第一件事是如何做基本的事情——你在以前的操作系統中掌握的那種東西。複製和粘貼是您必須在某一時刻使用的一項基本功能。

如何使用 tt 在 Linux 上進行打字測試

如何使用 tt 在 Linux 上進行打字測試

在現代科技時代,打字已成為許多職業最常見的活動之一。學會更快更準確地打字可以幫助您在相同的時間內完成更多的工作。

Wi-Fi 在 Ubuntu 上不工作?這是修復方法

Wi-Fi 在 Ubuntu 上不工作?這是修復方法

Ubuntu 因其健壯性和相對較少的錯誤而廣受歡迎。但它肯定不是沒有問題。其中一個問題是其 Wi-Fi 驅動程序。您可能會打開系統電源,卻發現您的 Wi-Fi 無法正常工作。

2020 年適用於 Ubuntu 的最佳免費視頻編輯器

2020 年適用於 Ubuntu 的最佳免費視頻編輯器

除了所有的絨毛,這裡列出了適用於 Ubuntu 的最佳免費視頻編輯器,您可以使用它們來創建令人驚嘆的視頻。

如何在 Chromebook 上創建和掃描二維碼

如何在 Chromebook 上創建和掃描二維碼

快速響應碼,簡稱 QR 碼,是一種高級條碼,包含比傳統條碼更多的信息。這些代碼是二維的,允許您垂直或水平掃描它們。

如何在 Arch Linux 中安裝和刪除軟件包

如何在 Arch Linux 中安裝和刪除軟件包

想在 Arch Linux 上安裝軟件包但不知道如何安裝?很多人第一次從基於 Debian 的發行版遷移到 Arch 時都會遇到這個問題。但是,您可以使用包管理器輕鬆管理基於 Arch 的系統上的包。

如何在 Linux 上安裝 Spotify

如何在 Linux 上安裝 Spotify

Spotify 是最大的音樂流媒體服務之一。它具有適用於移動(Android 和 iOS)和桌面(Mac 和 Windows)設備的本機客戶端。

9 個讓你開始使用 Linux 的基本命令

9 個讓你開始使用 Linux 的基本命令

Linux 操作指南通常希望您在終端中執行某些操作,這乍一看似乎令人生畏。但不要擔心;這個 Linux 命令備忘單將涵蓋打開終端和發出一些有用命令的過程。

如何使用 Mv 命令移動 Linux 文件

如何使用 Mv 命令移動 Linux 文件

雖然您可能已經知道如何使用 GUI 文件瀏覽器在 Linux 中移動文件,但您可能想知道終端中是否有移動命令可以讓您快速將文件移動到不同的目錄。mv 命令就是您想要的,它的簡單語法和一些可選的安全標誌易於使用。

如何在 Ubuntu 的“Alt-Tab”中取消組合 Windows

如何在 Ubuntu 的“Alt-Tab”中取消組合 Windows

默認情況下,Ubuntu 允許您切換應用程序而不是窗口。以下是如何在 Ubuntu 上的 Alt-Tab 中反轉它並取消組合選項卡。