玩转服务器4—服务器间数据传输

文摘   2024-11-12 20:01   广东  

滴水穿石 非一日之功


随着单细胞的火热,我们的共享服务器也进行了对应的升级迭代,从早期的96线程512G内存到如今的256线程2T内存【2024的共享服务器交个朋友福利价仍然是800】,可以说是加量不加价。由于我们的共享服务器广受好评,其中有不少用户有多个账号,或者在早期账号到期后,选择新开账号。这时候常常面临的问题就是旧账号数据需要拷贝到新账号,或者多个账号之间互相传输数据。一些用户选择先下载数据到自己的硬盘,然后再上传到新账号,其实这是非常低效的一个方法。那么如何更快速方便的实现自己账号间数据的传输呢?这时候我们就需要用到 scp 命令了。

背景知识

scp

scp(Secure Copy Protocol)是Linux系统中的一个命令行工具,用于通过SSH协议在本地和远程主机之间安全传输文件。它的工作方式类似于cp命令,但具有加密功能,能够保证数据在传输过程中的安全性。

基本语法

scp [选项] source_file target_file
  • source_file:要传输的源文件路径,可以是本地文件,也可以是远程主机上的文件。
  • target_file:文件传输的目标路径,可以是本地路径,也可以是远程主机上的路径。

常用选项

  • -P:指定远程主机的SSH端口(默认是22)。
  • -r:递归复制整个目录,适合传输文件夹。
  • -C:在传输过程中启用压缩,有助于提高传输速度。
  • -i:指定身份验证的私钥文件,常用于基于密钥的认证方式。
  • -l:限制传输带宽,以防止占用过多的网络资源。

基本使用方式

  1. 从本地复制到远程:
scp /path/to/local/file username@remotehost:/path/to/remote/directory

在这个例子中,命令会将本地的文件复制到远程主机的指定目录下。

  1. 从远程复制到本地:
scp username@remotehost:/path/to/remote/file /path/to/local/directory

在这个例子中,命令会将远程主机的文件复制到本地的指定目录下。

  1. 复制目录: 要复制整个目录,可以使用 -r 选项:
scp -r /path/to/local/directory username@remotehost:/path/to/remote/directory

在这个例子中,命令会将本地的目录及其所有内容复制到远程主机的指定目录下。

  1. 指定端口: 如果远程主机的SSH服务不是运行在默认的22端口上,可以使用 -P 选项来指定端口:
scp -P port /path/to/local/file username@remotehost:/path/to/remote/directory

具体演示

了解了 scp 命令,那么具体到我们的服务器上,该如何操作。

我们的共享服务器一般都是通过域名登录的,这个时候你有两个选择,一是通过内网传输(建议)、二是通过外网传输(不建议)

scp 内网传输

从账号2(t020559)拷贝文件/文件夹到账号1(t160560)

首先查看账号1所在服务器的内网ip地址,可以使用 ifconfig  或者 ip 命令实现

ifconfig命令查看
ip命令查看

然后在账户2执行命令:scp -r 需要拷贝的文件 账号1@服务器ip地址:/home/data/usrename/目标目录

##传输文件
scp GRCh38.p14.genome.fa t160560@10.10.11.80:/home/data/t160560/ref
##传输整个文件夹
scp -r refdata-gex-GRCh38-2020-A t160560@10.10.11.80:/home/data/t160560/ref
t020559上传数据到t160560

如果文件非常大,建议放到后台传输,避免中断。比如使用screen

##创建一个screen会话
screen -R share

#
#然后再执行传输命令
scp -r refdata-gex-GRCh38-2020-A t160560@10.10.11.80:/home/data/t160560/ref

#
# 退出会话
ctrl+a+d (快捷键)

#
# 重新进入(恢复)之前创建的会话窗口
screen -r share

同理,如果需要从账号1(t160560)拷贝数据到账号2(t020559),只需要调换一下主机前后位置即可  scp -r 账号1@服务器ip地址:/home/data/usrename/需要拷贝的文件 /账号2/目标目录

scp -r t160560@10.10.11.80:/home/data/t160560/updata   ~/tmp
从t160560下载数据到t020559

scp 外网传输

如果文件很小,其实也可以使用外网,进行服务器间传输(大文件不建议这么做,会占用整个服务器网速)

走外网传输首先就是要搞清楚两个账号的域名和端口。ssh默认是运行在22号端口,但是我们的共享服务器均是设定了固定的端口,所以需要使用 -P 参数来指定端口

从账号2(t020559)拷贝文件/文件夹到账号1(t160560)

在账号2执行命令:scp -r -P 账号1端口号 /账号2/需拷贝的文件 账号1@biotrainee.cn:/home/data/username/目标目录

scp -r -P 9941 gencode.v45.transcripts.fa   t160560@biotrainee.cn:/home/data/t160560/ref

从账号1(t160560)拷贝文件/文件夹到账号2(t020559)

同理,scp -r -P 账号1@biotrainee.cn:/home/data/username/需拷贝的文件 /账号2/目标目录

scp -P 9941 t160560@biotrainee.cn:/home/data/t160560/test_project/idmap1-master.zip   /home/data/t020559/tmp
外网传输示例

注意事项:

  • scp会覆盖目标目录中同名文件,因此在传输时需小心,一定要理解代码,清楚自己在做什么。
  • 由于scp基于SSH,因此需要确保SSH服务在两台主机之间正常运行,并且用户拥有相应的权限。

如果你也需要共享服务器,详见: 2024的共享服务器交个朋友福利价仍然是800 福利抢购方式

还等什么呢,赶快扫描下面二维码添加微信抢购吧!



文末友情宣传

强烈建议你推荐给身边的博士后以及年轻生物学PI,多一点数据认知,让他们的科研上一个台阶:

生信菜鸟团
生信菜鸟团荣誉归来,让所有想分析生物信息学数据的小伙伴找到归属,你值得拥有!
 最新文章