滴水穿石 非一日之功
随着单细胞的火热,我们的共享服务器也进行了对应的升级迭代,从早期的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
:限制传输带宽,以防止占用过多的网络资源。
基本使用方式
从本地复制到远程:
scp /path/to/local/file username@remotehost:/path/to/remote/directory
在这个例子中,命令会将本地的文件复制到远程主机的指定目录下。
从远程复制到本地:
scp username@remotehost:/path/to/remote/file /path/to/local/directory
在这个例子中,命令会将远程主机的文件复制到本地的指定目录下。
复制目录: 要复制整个目录,可以使用 -r
选项:
scp -r /path/to/local/directory username@remotehost:/path/to/remote/directory
在这个例子中,命令会将本地的目录及其所有内容复制到远程主机的指定目录下。
指定端口: 如果远程主机的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
命令实现
然后在账户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
如果文件非常大,建议放到后台传输,避免中断。比如使用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
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,多一点数据认知,让他们的科研上一个台阶: