上传与下载文件
AIStudio 支持在您的本地计算机和开发机之间传输文件。本节详细介绍了如何使用 scp
或 sftp
命令将文件上传 AIStudio 的开发机,或开发机挂载的共享高性能存储,并提供一些实用的技巧,帮助您在传输大文件时保持连接稳定。
导读
本文仅介绍命令行界面下 2 种常用的文件传输方案,即 scp
和 sftp
。
WARNING
开发机默认用户名已变更为 root
。部分旧版开发机实例仍默认使用非 root 普通用户名登录,重启后将自动更新。
如果您在寻找使用图形化界面传输文件的方案:
- 可参考教程使用 VS Code 远程开发,直接拖拽本地文件到左侧窗口,即可上传文件。
- 可参考教程使用 Filezilla 客户端 进行文件传输。
- 可参考教程安装 File Browser,支持通过 Web 界面轻松管理服务器上的文件。
TIP
如果仅需要操作共享高性能存储,也可使用 AICoder 的进行文件传输。AICoder 为 CPU 实例,不会占用显卡资源。
获取开发机 SSH 地址
目前支持的本地数据传输方案都基于 SSH。您可以从开发机详情页的 SSH 登录地址中获取下方所需的 IP 地址和端口号。
NOTE
开发机支持 SSH 用户名/密码认证,也支持基于 SSH 密钥的认证。请提前确认可成功 SSH 远程登录开发机。如需帮助,请参考 SSH 远程登录。
使用 scp
上传和下载文件
scp
(安全复制)是一种非交互式的文件传输工具,同样基于 SSH 协议。它适合快速传输单个文件或文件夹。
新手提示
上传、下载操作均需要在本地计算机运行命令(scp
/sftp
),不需要在开发机上运行命令。
上传文件
上传文件到开发机的命令格式如下:
scp -P port localfile username@ip:/remotefile
例如,用户 tom 将本地文件上传到开发机(Ubuntu)挂载的共享高性能存储目录 /mnt/tom
:
scp -P 41294 ~/Desktop/v2.jpg root@199.115.57.194:/mnt/tom
也可以上传到开发机本地存储 /home/tom
(开发机的免费本地存储)。
下载文件
从开发机下载文件到本地的命令格式如下:
scp -P port username@ip:/remotefile localfile
例如,用户 tom 将远程文件 v2.jpg
下载到本地的桌面:
scp -P 41294 root@199.115.57.194:/mnt/tom/v2.jpg ~/Desktop/v2.jpg
上传和下载文件夹
上传文件夹
scp -P port -r 本地文件夹 username@ip:/远程文件夹
例如,用户 tom 将本地文件夹 myfolder
上传到远程的 /mnt/tom
目录:
scp -P 41294 -r ~/Desktop/myfolder root@199.115.57.194:/mnt/tom/myfolder
下载文件夹
scp -P port -r username@ip:/remotedir localdir
例如,用户 tom 将远程文件夹 myfolder
下载到本地的桌面:
scp -P 41294 -r root@199.115.57.194:/mnt/tom/myfolder ~/Desktop/myfolder
创建远程目录并上传文件
由于 scp
无法直接创建目录,您可以组合使用 ssh
和 scp
:
# 创建 newdir
ssh -p port username@ip "mkdir -p /remotedir/newdir"
# 上传到 newdir
scp -P port 本地文件 username@ip:/remotedir/newdir
例如:
# 创建 newdir
ssh -p 41294 root@199.115.57.194 "mkdir -p /mnt/tom/newdir"
# 上传到 newdir
scp -P 41294 ~/Desktop/v2.jpg root@199.115.57.194:/mnt/tom/newdir
使用 sftp
上传和下载文件
sftp
(安全文件传输协议)是一种交互式的文件传输工具,基于 SSH 协议。通过 sftp
,您可以在本地和远程机器之间安全地传输文件。
新手提示
上传、下载操作均需要在本地计算机运行命令(scp
/sftp
),不需要在开发机上运行命令。
建立 sftp
连接
连接到开发机的命令格式如下:
sftp -P port username@ip
例如,Jane 从本地与 AIStudio 平台的开发机建立 SFTP 连接:
sftp -P 41294 jane@199.115.57.194
上传文件
连接成功后,可以使用 put
命令上传文件:
sftp> put localfile remotefile
例如,将本地文件 v2.png
上传到远程的 /mnt/jane/
目录:
# 执行 put 命令
sftp> put /Users/jane/Desktop/v2.png /mnt/jane/v2.png
# 打印执行结果
Uploading /Users/jane/Desktop/v2.png to /mnt/jane/v2.png
v2.png 100% 1064KB 12.0MB/s 00:00
下载文件
使用 get
命令下载文件:
sftp> get remotefile localfile
例如,将远程文件 v2.png
下载到本地的桌面:
sftp> get /mnt/jane/v2.png /Users/jane/Desktop/v2.png
上传和下载文件夹
sftp
也支持传输整个文件夹,方法如下:
上传文件夹
上传文件夹(格式):
sftp> put -r localfolder remotefolder
例如,用户 Jane Doe 需要将本地目录 /Users/janedoe/work/public/elements
上传到远程的 /home/janedoe
路径下:
sftp> lpwd
Local working directory: /Users/janedoe/work
sftp> put -r ./public/elements /home/janedoe
Uploading ./public/elements/ to /home/janedoe/elements
Entering ./public/elements/
web-components.min.css 100% 289KB 20.1MB/s 00:00
web-components.min.js 100% 2152KB 20.5MB/s 00:00
api-reference.css 100% 9840 1.9MB/s 00:00
sftp> ls /home/janedoe
/home/janedoe/elements
sftp>
下载文件夹
sftp> get -r remotedir localdir
NOTE
使用 -r
选项递归地传输文件夹及其内容。
传输大文件的技巧
在传输大文件时,可以使用以下方法确保传输过程不会因网络中断或退出 shell 而中断:
使用 nohup
和 &
使用 nohup
命令可以在退出 shell 后继续运行任务。将命令放在后台运行可以使用 &
。
上传大文件
nohup scp -P port 本地大文件 username@ip:/远程文件 &
例如,用户 tom 将本地大文件 largefile.iso
上传到远程的 /mnt/tom
目录:
nohup scp -P 41294 ~/Desktop/largefile.iso root@199.115.57.194:/mnt/tom/largefile.iso &
下载大文件
nohup scp -P port username@ip:/远程大文件 本地文件 &
例如,用户 tom 将远程大文件 largefile.iso
下载到本地的桌面:
nohup scp -P 41294 root@199.115.57.194:/mnt/tom/largefile.iso ~/Desktop/largefile.iso &
使用 screen
或 tmux
screen
和 tmux
是两个强大的终端复用器,可以保持会话在后台运行,即使连接断开也不会中断传输任务。
使用 screen
启动一个新的
screen
会话:shellscreen
在
screen
会话中执行scp
命令:shellscp -P port 本地文件 username@ip:/远程文件
按
Ctrl+A
然后按D
将会话分离。要重新连接到
screen
会话:shellscreen -r
使用 tmux
启动一个新的
tmux
会话:shelltmux
在
tmux
会话中执行scp
命令:shellscp -P port 本地文件 username@ip:/远程文件
按
Ctrl+B
然后按D
将会话分离。要重新连接到
tmux
会话:shelltmux attach-session
TIP
使用 screen
或 tmux
可以确保文件传输任务在连接断开时继续运行。它们是传输大文件的理想工具。
命令行工具对比
工具选择取决于具体需求。
场景一:传输包含数个大文件和多个小文件的文件夹。
特性 | rsync | scp | sftp |
---|---|---|---|
增量传输 | 只传输差异数据 | 不支持 | 不支持 |
断点续传 | 支持,从中断处继续 | 不支持 | 支持,通过手动续传和偏移量设置实现 |
压缩 | 支持,减少传输时间 | 支持 | 支持 |
文件权限保留 | 支持 | 支持 | 支持 |
目录传输 | 支持高效同步,适合大量文件 | 支持递归传输(-r 选项) | 支持,通过交互命令传输 |
带宽利用 | 高效,适合低带宽 | 效率较低 | 效率较低 |
灵活性 | 提供多种选项,灵活性高 | 简单,选项少 | 支持基本操作 |
推荐:可使用 scp
/ sftp
,但建议使用 rsync 传输数据到开发机。由于文件夹包含大量小文件和几个大文件,并且网络带宽有限,rsync
是最佳选择。它的增量传输和断点续传功能能够有效地减少带宽使用和传输时间。
场景二:传输单个大文件
特性 | rsync | scp | sftp |
---|---|---|---|
增量传输 | 只传输差异数据 | 不支持 | 不支持 |
断点续传 | 支持,从中断处继续 | 不支持 | 支持,通过手动续传和偏移量设置实现 |
压缩 | 支持,减少传输时间 | 支持 | 支持 |
文件权限保留 | 支持 | 支持 | 支持 |
大文件传输 | 高效,支持断点续传 | 简单传输 | 支持断点续传,通过手动续传和偏移量设置实现 |
带宽利用 | 高效,适合低带宽 | 效率较低 | 效率较低 |
灵活性 | 提供多种选项,灵活性高 | 简单,选项少 | 支持基本操作 |
推荐:对于单个大文件,如果可能中断,rsync
和 sftp
都是不错的选择。rsync
提供增量传输功能,而 sftp
需通过 reput
命令支持断点续传。