前言
换了mac本之后,一直使用item2作为终端,最常用的就是通过ssh连接到远程服务器进行一些开发调试的工作。有时候需要把本地文件上传到服务器上,由于中间使用了跳板机,所以无法通过scp命令直接把文件上传到服务器上,而是要通过跳板机周转一下,非常麻烦。
在windows中经常使用xshell、secretCRT,可以很方便的通过rz、lz命令就可以上传下载文件。可是在MAC的item2中我按照教程配置了好久,依然不行,每次都是卡死。
终于,在今天,我在同事那里获知了有“瑞士军刀”美誉的工具—— nc(netcat)。
初试牛刀
使用nc传送文件很简单,在服务器端用nc监听一个端口用于接收文件,然后在客户端使用nc访问服务器IP和相应端口传输文件就OK了。
1
2
3
4
5
|
#远程服务器,接收文件。其中20000是监听的端口号,1.txt是你要把接收的文件保存的位置
nc -l 20000 > 1.txt
#本地机器,发送文件。其中10.10.10.10是远程服务器的ip,端口号要和监听的端口一致
nc 10.10.10.10 20000 < 1.txt
|
这样就可以把本地的文件上传到远程服务器了,注意要先启动接收的服务器
简单升级
每次输入这些命令还是比较麻烦的,因此,我自己写了一个的wrap脚本,可以通过简单的命令使用nc。
首先,新建一个文件/usr/local/bin/mync,添加如下代码
1
2
3
4
5
6
7
8
9
10
11
12
|
#!/bin/bash
#远程服务器的ip
ip=10.10.10.10
port=20000
if [ -f $1 ];then
nc -n $ip $port < $1
if [ $? -eq 0 ]; then
echo 'send ok'
fi
else
echo "$1 is not exist"
fi
|
然后给予这个脚本执行权限, 同时保证PATH中包含/usr/local/bin目录
1
2
|
chmod a+x /usr/local/bin/mync
export PATH="/usr/local/bin:$PATH"
|
新建一个文件/usr/local/bin/ncrev,添加如下代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#!/bin/bash
port=20000
if [ -z $1 ]; then
echo "please enter file name"
exit 1
fi
dname=$( dirname $1 )
#判断目录是否存在,不存在则创建
if [ ! -d $dname ]; then
mkdir -p $dname
if [ $? -ne 0 ]; then
echo "create dir failed"
exit 1
fi
fi
#判断用于存储的文件是否存在,如果存在,询问用户是否覆盖
if [ -f $1 ]; then
echo "file is exist,overwrite it ?(y/n)"
read input
if [ $input != "y" -a $input != "Y" ]; then
exit 2
fi
fi
if [ -d $1 ]; then
echo 'path can not a directory'
exit 3
fi
echo "receiving..."
#开始监听
nc -l $port > $1
echo "received success..."
|
然后给予这个脚步执行权限, 同时保证PATH中包含/usr/local/bin目录
1
2
|
chmod a+x /usr/local/bin/ncrev
export PATH="/usr/local/bin:$PATH"
|
使用方法:
1
2
3
4
5
|
#首先在服务器端开启接收命令
ncrev /data/1.txt
#在客户端执行发送命令
mync /home/1.txt
|
这样就把本地/home/1.txt文件的内容发送到10.10.10.10服务器上,并保存在了 /data/1.txt 中,有没有觉得方便一些了?
结语
做的比较简单,基本满足了自己的需求,后期会进一步完善一下。
当然,nc的功能绝不仅限于此,更多nc的使用请参考: http://netcat.sourceforge.net/ 或自行google