使用scp在两个linux系统之间传输文件
- 问题背景
- 拷贝文件
- 首先我们要从源设备(本文中是矩池云自己的服务器)传输文件至目标设备(本文中是A100设备)
- 传输一个文件
- 传输一个文件夹
- 从目标设备(本文中是A100设备)下载文件到源设备(本文中是矩池云自己的服务器)
问题背景
使用矩池云跑深度学习代码,租了个矩池云的第三方服务器,如下图所示。矩池云自己的服务器可以直接用矩池云网盘上传文件跑,但是矩池云的第三方服务器无法用网盘上传文件,需要使用scp进行文件拷贝。
拷贝文件
我将我的代码和数据集上传到了矩池云网盘上,然后租一个CPU服务器(租GPU服务器也可以,反正就是组一个矩池云自己的机器就行),在这个cpu服务器的jupyterlab里面打开终端,输入相关命令拷贝文件。拷贝文件有两个方向,一是从源设备(CPU服务器)传输文件至目标设备(A100 设备),二是从目标设备下载文件至源设备。
首先打开cpu服务器的jupyterlab
打开终端
首先我们要从源设备(本文中是矩池云自己的服务器)传输文件至目标设备(本文中是A100设备)
传输一个文件
在终端中输入以下代码,注意代码需要根据主机端口号不同和要传输的文件不同进行修改
scp -P 35287 /mnt/bcg2ecg/requirements.txt root@58.57.119.80:/mnt/bcg2ecg/
下面解释下代码意思:
代码 | 解释 |
---|---|
scp | 使用scp命令 |
-P | -P表示指定SHH端口号(Port) |
35287 | 目标设备的SSH端口号 |
/mnt/bcg2ecg/requirements.txt | 需要传输的文件在源设备中的路径 |
root | username,大多数情况username应该都是root |
58.57.119.80 | 目标设备的SHH主机(Host) |
/mnt/bcg2ecg/ | 拷贝至目标设备的路径 |
备注 | 注意主机和目标设备路径间有一个冒号 |
这一行代码就是把requirements.txt这个文件拷贝到目标设备的目标文件夹中。其中目标设备的相关信息在矩池云的租用界面中可以看到:
在第一次运行scp程序的时候他会问你是否建立连接,这里输入yes就行
然后输入密码,把密码复制粘贴过去即可,注意这里粘贴密码后也不会显示,粘贴后直接回车即可。
然后就能看到传输成功
传输一个文件夹
如果需要传输一个文件夹,包括文件夹内的文件和所有子文件夹,在上面的代码进行小修改即可
scp -P 35287 -r /mnt/bcg2ecg/data root@58.57.119.80:/mnt/bcg2ecg/
在传输的文件夹路径前面加一个-r,就可以传输一整个文件夹过去
从目标设备(本文中是A100设备)下载文件到源设备(本文中是矩池云自己的服务器)
当我们在目标设备完成训练之后,需要把训练结果的一些文件下载到源设备中,此时的操作方式如下:
为了举例,我在目标设备中创建了一个results的文件夹,并且在这个文件夹下新建了1.txt和2.txt两个文件
输入以下代码,其实也就是把前面代码的源设备地址和目标设备地址调换一下
scp -P 35287 -r root@58.57.119.80:/mnt/bcg2ecg/results /mnt/bcg2ecg
然后可以看到传输成功
源设备出现了results文件夹及文件夹下的两个文件