linux 文件传输 以及 服务器后台运行任务

前言

为了某个比赛写了个Java的C/S架构的类早期QQ的聊天软件。
两个Jar包,为了在线上运行,买了一个月的aliyun(linux)
然后学习了一下如何在两台linux之间传文件,主要有sftp和scp两个命令。

补充:需要在云服务器上后台运行程序 涉及到的命令

##sftp
sftp 是一个基于ssh的交互式文件传输程式。它类似于 ftp, 但它进行加密传输,比FTP有更高的安全性。
sftp 使用方法:

1
2
3
sftp [remote_username@]remote_ip[:file ...]
sftp [remote_username@]remote_ip[:dir[/]]
sftp -b batchfile [remote_username@]remote_ip

举例说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ sftp root@xxx.xxx.xxx.xxx
The authenticity of host 'xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)' can't be established.
ECDSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'xxx.xxx.xxx.xxx' (ECDSA) to the list of known hosts.
Password: [enter your password]
Connected to xxx.xxx.xxx.xxx.

sftp> get /x/xx/xxx /xxxx/
//这条语句将从远程主机的 /x/xx/ 目录下将 xxx 下载到本地 /xxxx/ 目录下

sftp> put /z/zz /zzz/
//这条语句将把本地 /z/ 目录下的 zz 文件上传至远程主机 /zzz/ 目录下。

/*如果不知道远程主机的当前目录,可以用pwd命令
*改变路径可以用cd命令
*以及ls,rm,rmdir,mkdir等常用命令
*对应的
*在本地主机执行命令,在命令前加 l
*如lpwd,lcd,lls,lrm等
*离开sftp,用 exit,quit,bye 均可。
*/

当然也有GUI的工具 gftp 可以使用

##scp
scp也是基于ssh登录的文件copy命令,操作方便,可用于将本地文件copy到远程主机上。

从本地复制到远程主机

1
2
3
4
5
6
7
8
9
//复制文件
$ scp local_file remote_username@remote_ip:remote_folder
$ scp local_file remote_username@remote_ip:remote_file
$ scp local_file remote_ip:remote_folder
$ scp local_file remote_ip:remote_file

//复制目录
$ scp -r local_folder remote_username@remote_ip:remote_folder
$ scp -r local_folder remote_ip:remote_folder

从远程主机复制到本地,只要将 从本地复制到远程主机的命令 的后2个参数 调换顺序 即可。

注意两点:
1.如果远程服务器防火墙有特殊限制,scp便要走特殊端口,具体用什么端口视情况而定,命令格式如下:
scp -p 4588 remote@www.abc.com:/usr/local/sin.sh /home/administrator
2.使用scp要注意所使用的用户是否具有可读取远程服务器相应文件的权限。

##nohup ‘&’ etc.
通常我们在终端执行脚本时,进程运行在前台,(若运行时间长)运行时是不能执行其他任务的。
若想将当前正在前台执行的进程转到后台,我们可以使用一下命令:

1
2
ctrl + z     //将任务放到后台去,并暂停;
bg <%int> //将后台任务唤醒,在后台运行;

还有相关命令:

1
2
fg <%int>   //将后台任务的程序放到前台;
jobs //列举出后台作业信息。([作业号] 运行状态 作业名称)

不过若我们连接远程服务器后,想要长期运行一个脚本,仅仅如此是不够的
使用常规方法后,当我们退出脱离终端后,进程随之终止。
而‘nohup’命令可以解决这个问题。

1
2
3
4
5
//have loged in a remote linux server
$ nohup <run a shell or sth.> &
[~]$ appending output to nohup.out
$ exit
//loged out from remote server

nohup 命令的作用就是可以让 shell 命令忽略 SIGHUP 信号,即可以使之脱离终端运行
此命令长用于:

  1. 执行程序耗时长(如unzip sth),而网络不稳定
  2. 执行完需要关闭终端

##References
SCP 命令
简单而有用的 nohup 命令
nohup 命令用法释疑
修复“正确操作nohup让程序始终在后台运行”中已发现的问题