scp与rsync命令

技术库 小李 978浏览
  • wcp后台运行

执行命令后按ctrl+z中断,显示: [编号]+ Stopped,再输入bg %编号 后台继续执行

#01 在Linux中远程复制和传输文件

scp命令使用SSH协议传输文件。所以尽量使用密码、密码短语或ssh密钥进行身份验证。scp和rsync都会加密文件和密码。这样,就没有人可以查看你的数据或文件。

· 使用scp命令将文件传输到远程主机

语法如下:

scp filename username@destination-remote-host:/path/to/dir
scp /path/to/file username@destination-remote-host:/path/to/dir/file
scp [options /path/to/file username@destination-remote-host:/path/to/dir/file
scp [options] user1@source_A:dir1/file1 user2@destination_B:dir2/file

· user1@source_A:dir1/file1 – 源文件/目录。

· user2@destination_B:dir2/file2 – 目标文件/目录。

· : – 冒号 (:) 起着至关重要的作用,scp使用它来区分本地和远程位置。

· 使用scp命令将本地文件复制到远程系统

要将“log.txt”在Linux或macOS桌面上的当前目录中命名的文件复制到名为“~/data($HOME/data或/home/vivek/data)”的目录中,该目录位于名为“nas04 (IP 192.168.2.17)” 的远程系统上的帐户中,请输入:

scp log.txt vivek@nas04:~/data/

## OR use full path ##
scp log.txt vivek@nas04:/home/vivek/data/  
​
## OR use the IP address ##
scp log.txt vivek@192.168.2.17:~/data/

假设你的用户名是“vivek”,并且上面示例的“nas04”服务器上已经存在名为“/home/vivek/data/”的目录。使用以下简单命令进行验证:

ssh 192.168.2.17 -- ls -l ~/data/

你能看到以下信息:

注意,这里可能会有要求输入密码的提示。这时候输入密码或ssh密钥密码,否则scp命令无效。

我们以vivek用户身份,将名为“web-app-confing.py”的本地文件复制到托管在“Linode”的远程服务器 1.2.3.4:

scp web-app-confing.py vivek@1.2.3.4:/path/to/my/app/dir/

· 使用scp命令将远程文件复制到本地系统

如果需要从托管在Linode或AWS的远程服务器复制文件,则语法为:

scp ec2-user @ public-ip-address: / path / to / file  / path / to / dest / dir /

例如,从IP为1.2.3.4的远程服务器复制一个/var/www/html/config.php命名的文件,运行以下命令:

scp ec2-user@public-ip-address:/path/to/file /path/to/dest/dir/

· 在两台主机之间递归复制整个目录

要复制目录及其包含的所有文件,请使用带有 -r 选项的scp命令,如下所示:

scp -r ~/projects/python/ backup@192.168.2.17:/backups/desktop/python/

上述命令将整个 ~/projects/python 目录从你的帐户复制到备份服务器IP地址192.168.2.17帐户。假设从macOS或Linux桌面,在 ~/projects/python 删除了某个内容。我们可以从备份服务器复制文件。重点!语法如下:

scp -r vivek@192.168.2.17:~/projects/python/ ~/python

· 使用通配符复制多个文件

要复制目录中的多个文件,可以使用通配符。

举个例子,从EC2服务器帐户上的appA目录复制所有“.pl”(Python)文件,则输入:

scp -r ~/appA/*.pl ec2-user@1.2.3.4:~/appA/  
​
 # Grab all Perl files from remote server to the local dir
scp ec2-user@1.2.3.4:"appB/*.pl" ~/appB/

· 使用scp命令在两个远程服务器之间复制文件

对于以下示例,假设“vivek”用户登录到另一个Linux或macOS系统,例如{macBookAir}$。

auth.py”要从主目录复制到上“Box1”的“/app/auth/”目录“Box2”,则输入:

{macBookAir}$ scp vivek@Box1:~/auth.py vivek@box2:/app/auth/

注意,系统会提示你输入两个密码。一种用于名为 的源系统“Box1”,一种用于名为的目标系统“Box2”。需要输入两个密码或ssh密钥密码,否则该命令无效。还可以声明ssh端口或进行递归复制:

{macBookAir}$ scp -P 4242 vivek@Box1:~/auth.py vivek@box2:/app/auth/
{macBookAir}$ scp -P 4242 -r vivek@Box1:~/app1/ vivek@box2:~/app1/

· 如何处理SSH端口

假设远程主机正在侦听默认 SSH TCP 端口 # 22 以外的端口,那么您需要使用-P {port_number_here}选项指定要连接到远程主机上的端口,如下所示:

# Upload file using remote HOST ssh TCP port # 2222
scp -P 2222 filename.txt user@1.2.3.4:/path/to/dest/  
​
# Download file using remote HOST ssh port # 4242
scp -P 4242 vivek@ls.www-db-1:~/projects/cluster.ini .  
​
# Recursive copy with SSH port
scp -r -P 4242 mysqlbackup@ls.www-db-1:/etc/mysql/ ~/mysql/

#02 Rsync是什么

Rsync是一个命令行实用程序,可在Linux和Unix上提供快速增量文件传输。此外,当由于高级选项需要传输许多文件时,建议使用Rsync。根据OpenSSH,scp协议已经过时,不灵活、不易修复。因此,建议使用更现代的sftp和rsync协议来代替文件传输。

· 如何在Linux和Unix上使用rsync远程复制和传输文件

rsync命令有很多选项,最典型的用法是:

rsync -av --delete /source/path username@hostname:/destination/path/
rsync -av --delete username@hostname:/source/path/ /destination/path

在以下示例中,将/source/dir/ 复制到 /target/dir:

rsync -avP /source/dir /target/dir/

通过网络进行文件传输,如下所示:

rsync -avP /source/dir user@Box2:/target/dir/
rsync -avP ~/projects/ vivek@server2:~/projects/

我们需要在目标目录前面加上远程计算机名称来复制文件。系统将提示您输入远程主机上的 ssh密码或ssh密钥密码。以下命令将目录app1从桌面同步到ec2-server上的 ~vivek/data/app1 (/home/vivek/data/app1 dir):

rsync -av --delete ~/app1 vivek@ec2-server:data

以下命令将 serverC 上的目录 ~vivek/appB (/home/vivek/appB) 同步到当前目录中本地 Linux 桌面上的 ./appB:

rsync -av --delete vivek@serverC:appB ~/appB

rsync命令选项如下:

-a : 归档模式(递归复制所有子目录和文件,并尽可能多地保留文件属性)

-v : 详细模式(复制时显示文件名)

-P : 显示进度条

–delete : 要求rsync从接收方删除无关文件(不在发送方的文件),但只删除正在同步的目录。

#03 总结

本期如何使用scp或rsync在两个Linux或Unix系统之间安全地传输文件就到这里。你还可以使用“man”命令查看以下手册页:

man scp
man rsync
man ssh

转载请注明:清韵逸-博客生活分享 » scp与rsync命令