在连接上服务器后, 我能做些什么? 比如,如何上传/下载文件? 如何运行程序?
Last modified: December 10, 2024
Step 1: 四处看看
首先, 请不要感到害怕, 使用服务器与使用你的电脑并没有太大的区别, 这种感觉就像是你登陆了某个游戏的客户端, 你要做的只不过是尽快熟悉它, 然后就可以自由的玩耍了!
当用户 aduser 登陆服务器的 loginNode 端口后, 你会看到下面的界面
aduser@loginNode:~$
这里 ~
表示 home 目录, 也称为家目录. 它是你的出生点, 是你存放自己东西的地方, 只有你自己可以访问. 而 aduser@loginNode
表示一个叫 aduser
的用户在 loginNode 上.
loginNode
的意思就是它的字面意思, 登陆节点. 你必须从这里登录, 你可以在这里玩耍, 四处游荡, 写篇日记, 跑一个一秒就能出结果的程序, 但是这里不适合你运行大型程序, 尤其是要跑好几个小时的那种.
你在这里可以干什么呢?试试以下命令:
ls
显示当前目录下的所有文件和目录. 结果是, 什么都没有输出. 因为你的目录下什么都没有.echo 好无聊啊!
正如这个命令的名字所表达的意思一样, 终端像个回声一样输出了好无聊啊!
! 他其实类似编程语言中的print
, 对打印变量和解析通配符很有帮助.echo 好无聊啊!>> mood.txt
这个命令将你的好无聊啊!
输入到了mood.txt
文件中. 执行完这个命令后, 什么都没有返回, 说明一切正常.cat mood.txt
这个命令展示mood.txt
的全部内容. 你可以预计到它的输出.mkdir gg
创建一个叫gg
的文件夹.cd gg
进入到gg
文件夹中. 你可以看到命令行提示你的位置改变了, 进入了gg
文件夹.cd
你又回到了你的 home 目录下.rmdir gg
把gg
文件夹删了.
有关更多Linux命令, 请参阅服务器的基本操作? - Linux 服务器的基本知识. 当然, 你如果只是想迅速入门, 暂时可以先不用看更复杂的内容, 尽管你总有一天会回来的…
Step 2: 运行脚本
在上一步中我们做的所有事情, 其实都可以放入一个脚本中, 让服务器一键执行. 是不是很方便?
我们已经知道可以通过 echo something >> output.txt
的方式将一行字输入进文本文件. 请运行下面的命令:
echo '#!/bin/bash' >> dothis.sh
echo 'hostname' >> dothis.sh
echo 'echo Let me show you our cluster users:' >> dothis.sh
echo 'ls /home' >> dothis.sh
cat dothis.sh
(实际上, 我们还可以使用 vim 文本编辑器, 来修改文本文件的内容. 尽管一开始你可能不习惯, 但用多了以后就会发现它的强大. 请参考: vi/vim 教程)
cat dothis.sh
返回了 dothis.sh
脚本中的内容:
#!/bin/bash
hostname
echo Let me show you our cluster users:
ls /home
第一行 #!/bin/bash
的意思是: 此脚本使用/bin/bash
来解释执行. 目前你只需要记住在每次写脚本的时候都在之前加上这句话就行. 第二行返回主机名. 第三行表示输出 Let me show you our cluster users:
. 第四行表示展示 /home
目录下的子目录与子文件. (即, 看看家里有哪些人.)
运行以下命令, 是否输出了你预期的内容?
bash dothis.sh
Step 3: 到计算节点上运行脚本
到目前为止, 我们运行的命令和脚本都能在一眨眼间输出结果. 如果我们需要运行大型程序, 那么登陆节点就不适用了. 我们要通过作业调度工具 SLURM, 将我们的脚本放到计算节点上运行.
首先, 试试运行
hostname
它会返回 loginNode
, 这是当前的主机名. 接下来, 试试运行
srun hostname
输出结果可能是 bigMem0
, bigMem1
或 bigMem2
等, 但绝不会是 loginNode
. 发生了什么? srun
是 SLURM 提供的功能之一, 它将后面的内容放到计算节点上运行. 因此, srun hostname
相当于在某一个计算节点上运行了 hostname
, 就会返回那一个计算节点的主机名.
你一定想到了我们刚才的 dothis.sh
, 也可以被放到计算节点上运行.
srun bash dothis.sh
dothis.sh
的第一行就是 hostname
, 所以我们可以通过第一行输出来知道我们的脚本究竟在哪一个计算节点上运行. 接下来的输出和在 loginNode
上格式有所不同, 但内容是完全一样的. 这是因为无论在哪个计算节点上, /home
目录下的内容都是一致的, 所以你可以放心地在登陆节点上写代码, 在计算节点上运行.
注意到用 srun
执行命令是即时的, 即 SLURM 当场就把你的程序安排给某一个计算节点去运行, 然后迅速返回你结果. 它的好处是及时性, 它的坏处是, 假设你的程序需要运行好几个小时, 那么你的命令行就会始终卡在这个界面. 如果你想交给 SLURM 一个任务, 然后关机睡觉, 第二天早上再来看结果, 那么 srun
就不适用于你的场景, 得用 sbatch
.
只需要稍作修改:
sbatch dothis.sh
登陆节点会告诉你, 我已经提交了你的任务, 任务编号 (假设为 1234). 通过 ls
, 你会发现在你的目录下多出了一个文件, 叫slurm-1234.out
. 让我们看看里面有什么.
cat slurm-1234.out
和刚才用 srun
输出的结果一样, 只不过被写到了一个文件里. 这样一来, 你就不用守在屏幕前等着程序的输出结果了, 想什么时候看这个文件, 就可以什么时候看.
Step 4: 上传/下载文件
使用 scp 工具进行文件的上下传. scp 就是 secure copy, 是用来进行远程拷贝文件的命令.
- 如何将文件上传到服务器
- 用
scp -P <port> <local_file> <hostname>:~/<dest_file>
复制文件到服务器指定路径 (还记得我们说过~
是 home 目录). - 用
scp -P <port> -r <local_dir> <hostname>:~/dest_file
复制文件夹.
- 用
- 如何将文件下载到本地
- 用
scp -P <port> <hostname>:~/<src_file local_file>
复制文件. - 用
scp -P <port> -r <hostname>:~/<src_dir> <local_file>
复制文件夹.
- 用
注:
(1) 以上 4 个命令都是在本地运行的, 请不要在服务器上运行. 你可以多开多个命令行窗口.
(2)
-P
必须放在最前面, 且 P 必须是大写.
接下来干嘛?
在这个入门教程中, 我们只简单地接触一下 SLURM 的用法, 当你明白 SLURM 在做什么了的时候, 请继续阅读下一篇教程: 使用 slurm 运行程序及提交作业