文章目录
服务器上跑代码,熟练掌握以下命令行,能高效提高编程效率。
提示:以下是本篇文章正文内容,下面案例可供参考
一、Tmux终端复用器
服务器跑代码时候,经常遇到两个常见的问题:1.当前窗口执行程序被占用时,我想再查看一些信息、运行别的代码。 2.当我ssh登陆远程服务器时,打开远程窗口执行程序,当我电脑息屏时进程就会停止,会报错“broken pipe”。
Tmux 是一个终端复用器(terminal multiplexer), 不仅可以给终端开多个分屏,方便进行debug调试;还能将会话和窗口分离,也就是说,即使我窗口关闭了或者断网了,我在服务器上跑的程序还在运行(会话仍然存在),我可以去干别的事情,等需要的时候再重新接入窗口查看。
类似的,在macOS上也可下载iterm2,里面包含了tmux的功能,感兴趣的读者可以查阅。
比如说你在terminal运行一个程序时,你先在运行过程中查看一些信息,但又无法退出程序,此时就可以在tmux另开一个窗口进行查看。
大部分指令是先“ctrl + b”,松开后结合别的键[key]使用。
各个部分关系
执行程序就是开启一次会话,显示的一个命令行界面就是一个窗口,会话和窗口可以分离,也就是退出窗口,如果不杀死,里面的会话依然进行。
可以在多个会话间切换,一个会话里可以开多个窗口【c】,多个窗口通过【p】/【n】切换;一个窗口可以拆分成多个窗格【%】/【"】,通过【zu】【】
常用指令
# 新建一个tmux 会话,叫<session-name>
tmux new -s <session-name>
例子:tmux new -s hello_world
# 杀死一个会话
tmux kill-session -t <session-name>
# 查看当前所有tmux 会话
tmux ls
# 进入已经创建过的窗口
tmux attach -t <session-name>
tmux a # 进入默认的第一个窗口
# 划分左右两个窗格
ctrl b %
# 划分上下两个窗格
ctrl b "
#在几个pane间跳转
ctrl b 左箭头/右箭头
#关闭当前的pane。执行后会二次确认要删除的pane,注意pane从0开始计数。
ctrl b x
# 创建一个新窗口
ctrl b c #c-create
# 切换到前/后一个窗口
ctrl b p/n # p-previous;n-next
# 查看历史输出日志
ctrl B [ 【进入visual mode】
上下键翻页
退出 d/esc
# 其他可学可不学的
#切换窗格位置
Ctrl b Alt
Ctrl o
#切换会话
tmux switch -t <s-n>
参考教程: Tmux 使用教程, 阮一峰.
一个流程
1.ssh登陆远程服务器:ssh sua@222.29.99.888 -p7777 #[账号名]@[服务器ip地址] -p端口号
2.新建tmux会话: tmux new -s hello_world # tmux new -s [my_session]
3.模拟跑一个程序,查看是否正常在运行。这行代码表示每1s刷新一次系统时间,ctrl d退出运行的程序。分离会话即 ctrl b + d,退出当前窗口,但程序还在跑。
watch -n 1 date
快捷键 [ctrl d]
watch -n 1 date
快捷键 [ctrl b + d]
4.下次使用,重新接入会话: tmux attach -t [my_session]
二、服务器和本地的数据传输
1.开端口查看图片
在服务器上,要看图片的目录下,运行
python3 -m http.server 3000
打开3000端口,在本地浏览器用ip和端口直接访问文件
http://localhost:3000/xxx.xxx.xxx.xxx:3000
xxx.xxx.xxx.xxx为你的服务器的ip地址。
2.scp远程传输
在shell上输入:
# 把服务器上Path1下的文件全都传到本地Path2下,Port为服务器的端口
# -r 传整个文件夹要加上,传一个文件则不加也行
scp -P [Port] -r [HostName]:[Path1] [Path2]
scp -P 7777 -r 222.23.33.33:~/hello_world/ Desktop/test/
3.VS Code自带插件(慢,不推荐)
VS code会带有相应插件,查看pdf,jpg等文件,但响应速度不及时。
4.GUI图形化界面(慢,不推荐)
针对所用的语言,可以下载对应的GUI界面进行操作。在服务器上跑代码就像在本地一样。但通常会导致速度很慢。比如使用matlab,最好还是使用shell更好。
三、shell常用指令
Shell指令
ctrl u #删除当前行
ctrl w #删除当前行的一个word
man command #查看函数的用法
htop #查看资源占用情况
grep [text] [file] #在当前文件夹下的file中找包含text的字符串
#程序
程序暂停:ctrl+z;
继续:fg
htop可以查看当前资源部署情况。
上半部分表示cpu占用情况,可见几乎所有核cpu都跑满。
下半部分显示的是所有线程资源占用情况,点击CPU排序,可见大部分CPU被root用户占用,这可能导致你本身的代码跑的慢,此时可以咨询服务器管理员,给你留几个核。
压缩和解压
Linux使用tar进行压缩和解压,该命令可以调用别的程序去解压对应后缀的压缩包。
基本语法是 tar [-zjZvO cxtru f] 压缩包名字.后缀 [待压缩的东西]
- -f 后接压缩包的名字,必须放在最后,且必须有
- -c 创建;-x 解压;-t:查看内容;-r 向压缩包追加文件;-u 更新原压缩包中的文件。一个命令中,这5个参数有且只有1个
- -zjZvO 表示调用的压缩/解压软件,不添加则默认压缩/解压为.tar压缩包。-z 调用gzip,对.tar.gz或.tgz属性;-j:调用bzip2,对.bz2属性; -Z 调用compress,对.Z属性;-v 显示所有过程;-O 将文件解开到标准输出
- 针对.zip结尾的压缩包,用unzip [filename].zip 解压即可;同理,.rar用unrar。
- 最常用指令:
tar -zxvf helloWorld.tgz #解压.tgz或.tar.gz结尾的压缩包。zxvf分别表示调用【gzip】【解压】【文件名为】helloWorld.tgz的压缩包,并【显示所有过程】
tar -zcvf helloWorld.tar.gz *.jpg #将所有.jpg的文件用gzip压缩成.tar.gz为后缀的压缩包
跑matlab代码
不打开图形化界面,在shell中执行matlab的experiment.m文件。
注意文件不需要加后缀".m"。
#双引号里提供了一个交互化环境,包含要运行的所有命令,用分号隔开
matlab -nodesktop -nosplash (-nodisplay) -r "x=1;y=2;experiment;exit"
#调用一个函数
matlab -nodesktop -nosplash (-nodisplay) -r "sqrt(4);exit"
跑python代码
source activate hello_world #打开
python hello_world.py
# python虚拟环境
conda create -n env_name(你的环境的名称) python=3.7 #新建虚拟环境
conda activate envs_name #激活命令
conda env list #查看已有环境
总结
总结使用服务器常用指令和操作,熟练掌握可以提高debug效率!