计算化学公社

 找回密码 Forget password
 注册 Register
Views: 10525|回复 Reply: 16
打印 Print 上一主题 Last thread 下一主题 Next thread

[Linux] 量化计算中的技巧(一)

[复制链接 Copy URL]

103

帖子

5

威望

1000

eV
积分
1203

Level 4 (黑子)

跳转到指定楼层 Go to specific reply
楼主
本帖最后由 sky 于 2017-7-12 11:54 编辑

这是很早就计划好的一个系列,去年写过几篇文章。但是后来因为处理其它事而中断了一年。现在回来继续更新。
写这一系列文章的初衷主要是我发现我接触过的所有做量化计算的人和组,无论科研水平高低,对计算机的了解都仅限于皮毛,因为关注重心都在了怎么发文章上,而忽略了其它东西,比如说怎么用计算机提高工作效率。
做计算跟做实验不一样,实验上想要降低工作量,要么花钱找人代劳,要么压榨本科生,都不具有普适性。而计算机本来就是发明出来降低人类工作量的,尤其是对于重复的、无意义的工作。这一点在程序猿身上体现的淋漓尽致,为了提高工作效率,他们搞出了自动化部署、自动化测试工具,还写了专门的IDE来帮助写代码,把所有精力都集中到思考怎么写代码身上。
做量化计算的人其实跟程序猿有很多共同之处,很多习惯、思维和工具都可以借鉴程序猿的做法。比如当年跟一个程序猿聊过天,他就说对于程序猿来说,想方设法偷懒就是一个重要的习惯,把所有重复性的工作都写成代码,让机器去完成。

在接下来的一系列文章中,我就将介绍怎么省去这些重复劳动,把精力都集中到科研上。

首先介绍第一点:求求你们把bash shell都换了吧!!
shell 就是你敲命令的那个界面,而bash shell是linux自带的。除了bash shell,还有zsh shell, csh shell, ksh shell等等。每个shell使用方法大致相同,功能上略有差异。
我见过的所有做计算的人和组,用的全是清一色的bash shell,整个界面只有黑白两色,看着都难受。
gaussian可能还好一点,VASP的所有输入输出文件全是大写的,所以需要不停地在大小写之间来回切换,难道没有人觉得麻烦吗??
切换目录都需要在前面加 cd,你不觉得麻烦吗??
目录都需要一级一级敲,一级一级补全,没有人觉得麻烦吗??
曾经见过一个老师做计算,他的每个目录名字都很长,所以每进一级目录就得用一次ls,然后用鼠标双击需要的目录复制,再cd 粘贴。切换10次目录,就要在鼠标键盘之间来回10次,最关键的是他还不会盲打,所有命令都是食指敲出来的,看着我都难受(无意黑这位老师,他科研水平很高的,而且帮了我很多)。真的无法想象用这种界面是怎么做十几年科研的。


而fish shell可以解决上述所有烦恼:
fish shell: www.fishshell.com

随便举几个常用的例子:
1. 用vim编辑POSCAR文件只需要在小写状态下输入:

然后按tab,就能自动补全大写:

无论是目录还是文件,都不需要切换大小写。

2. 切换目录直接输入路径名称,不需要输入cd:

按回车直接跳转




3. 自动识别你曾经输入过的命令,比如我在之前的计算中,使用命令生成了一个POTCAR文件:

之后我在新的目录里,只需要再输入ca两个字母,系统会给你提示出以ca字母开头的上一条使用过的命令:



这时候只要按方向键→,就能自动补全整条命令:

如果输入‘ca’后系统提示的命令'cat POTCAR >>POTCAR1'不是你想要的怎么办?按方向键↑自动列出你曾经使用过的,以ca开头的命令:


4. 目录名称和文件名称模糊匹配
比如我有两个文件,分别是‘abc_def’和‘abc_hij’
我只需要输入:
  1. > ls bj
复制代码


然后按tab,就能自动补全为:
  1. > ls abc_hij
复制代码


5. 按alt+←或者alt+→可以在之前访问过的目录中随意跳转

fish shell能解决的问题远不止上面说到的那些,只有真正用过了才能体会到fish shell带来的便利。两者相比,bash shell就像是上个世纪老掉牙的产品,而fish shell才是属于这个时代的工具,时刻都能感受到它的优美和人性化设计,实际使用起来的体验和效率也是分分钟吊打bash shell的。


安装方法非常简单,只要是linux系统都能安装。这点官网写的很详细了,只要能拿到root权限,复制粘贴几条命令就可以了。

除此之外要是对自己电脑有足够自信,可以试试zsh shell,这才是shell当中的极品:
为什么说 zsh 是 shell 中的极品?(www.zhihu.com/question/21418449

可惜配置起来非常麻烦,可以调的参数太多了,对新手极不友好。



评分 Rate

参与人数
Participants 5
eV +30 收起 理由
Reason
Jack + 5 欢迎讨论
ggdh + 5 谢谢分享
元江1994 + 10 欢迎讨论
Graphite + 5
sobereva + 5 欢迎讨论

查看全部评分 View all ratings

222

帖子

0

威望

4751

eV
积分
4973

Level 6 (一方通行)

2#
发表于 Post on 2017-7-11 14:43:49 | 只看该作者 Only view this author
之前试过fish shell,不过用vi时有点问题就没有继续了
顺便,第一个功能修改inputrc也可以实现

50

帖子

0

威望

1491

eV
积分
1542

Level 5 (御坂)

3#
发表于 Post on 2017-7-11 14:51:08 | 只看该作者 Only view this author
再次鼓吹一遍 zsh 和 oh-my-zsh

https://github.com/robbyrussell/oh-my-zsh

免配置

评分 Rate

参与人数
Participants 1
eV +1 收起 理由
Reason
一颗赛艇 + 1

查看全部评分 View all ratings

1102

帖子

18

威望

6643

eV
积分
8105

Level 6 (一方通行)

計算化学の社畜

4#
发表于 Post on 2017-7-11 15:11:10 | 只看该作者 Only view this author
楼主帖子分类有问题,应该发往 “计算机使用与Linux交流”。
Stand on the shoulders of giants

136

帖子

3

威望

4184

eV
积分
4380

Level 6 (一方通行)

5#
发表于 Post on 2017-7-11 16:39:58 | 只看该作者 Only view this author
本来还以为楼主准备教我等量化小白怎么做量化计算的,结果却是给什么shell打广告的,从入门开始就是用的bash shell,用得很习惯了,也不觉得有多麻烦。
期待楼主的第二篇可以更精彩些。

1102

帖子

18

威望

6643

eV
积分
8105

Level 6 (一方通行)

計算化学の社畜

6#
发表于 Post on 2017-7-11 17:06:24 | 只看该作者 Only view this author
laoman 发表于 2017-7-11 16:39
本来还以为楼主准备教我等量化小白怎么做量化计算的,结果却是给什么shell打广告的,从入门开始就是用的bas ...

+1  bash shell 用习惯了,也就不想折腾了
Stand on the shoulders of giants

106

帖子

1

威望

2048

eV
积分
2174

Level 5 (御坂)

7#
发表于 Post on 2017-7-11 18:54:46 | 只看该作者 Only view this author
本帖最后由 rtransformation 于 2017-7-11 18:56 编辑

感觉bash基本都能做,自动补全大小写,我配置的是if [[ $labtest > 0 ]]; then bind "set completion-ignore-case on"; fi(labtest是前面定义的一个参数),其他想要什么功能比如跳转目录什么的,GitHub上有各种“软件”,安装就行了。
嫌bash的prompt做的不好看,可以自己设计,我就设计成这样:

当命令输入错误的时候,那个对号就变成闪烁的“叉”

不也挺好看的

评分 Rate

参与人数
Participants 1
eV +1 收起 理由
Reason
Novice + 1 不明觉厉

查看全部评分 View all ratings

903

帖子

37

威望

5324

eV
积分
6967

Level 6 (一方通行)

8#
发表于 Post on 2017-7-11 21:55:18 | 只看该作者 Only view this author
本帖最后由 ggdh 于 2017-7-11 22:00 编辑

楼主给的知乎连接不能访问?原来是把括号给包括到链接当中了。。https://www.zhihu.com/question/41076349 知乎上这篇也可以参考


1102

帖子

18

威望

6643

eV
积分
8105

Level 6 (一方通行)

計算化学の社畜

9#
发表于 Post on 2017-7-11 21:57:08 | 只看该作者 Only view this author
ggdh 发表于 2017-7-11 21:55
楼主给的知乎连接不能访问?

www.zhihu.com/question/21418449   【你把最右边的半个括号去了就能进】
Stand on the shoulders of giants

264

帖子

0

威望

2588

eV
积分
2852

Level 5 (御坂)

10#
发表于 Post on 2017-7-11 23:08:40 | 只看该作者 Only view this author
冰释之川 发表于 2017-7-11 17:06
+1  bash shell 用习惯了,也就不想折腾了

+1

103

帖子

5

威望

1000

eV
积分
1203

Level 4 (黑子)

11#
 楼主 Author| 发表于 Post on 2017-7-12 08:19:59 | 只看该作者 Only view this author
ulosggs 发表于 2017-7-11 14:51
再次鼓吹一遍 zsh 和 oh-my-zsh

https://github.com/robbyrussell/oh-my-zsh

用过一次,感觉什么都不配置的话比起fish还是差了点

103

帖子

5

威望

1000

eV
积分
1203

Level 4 (黑子)

12#
 楼主 Author| 发表于 Post on 2017-7-12 08:20:16 | 只看该作者 Only view this author
冰释之川 发表于 2017-7-11 15:11
楼主帖子分类有问题,应该发往 “计算机使用与Linux交流”。

太久没来,没注意还有这个分类

103

帖子

5

威望

1000

eV
积分
1203

Level 4 (黑子)

13#
 楼主 Author| 发表于 Post on 2017-7-12 08:23:33 | 只看该作者 Only view this author
rtransformation 发表于 2017-7-11 18:54
感觉bash基本都能做,自动补全大小写,我配置的是if [[ $labtest > 0 ]]; then bind "set completion-ignor ...

与其装一堆软件,还不如直接装一个fish得了。
要是这么折腾,都可以玩玩zsh了

106

帖子

1

威望

2048

eV
积分
2174

Level 5 (御坂)

14#
发表于 Post on 2017-7-12 09:42:10 | 只看该作者 Only view this author
sky 发表于 2017-7-12 08:23
与其装一堆软件,还不如直接装一个fish得了。
要是这么折腾,都可以玩玩zsh了

感觉还是折腾好玩,2333

51

帖子

0

威望

2390

eV
积分
2441

Level 5 (御坂)

15#
发表于 Post on 2017-7-16 21:54:59 | 只看该作者 Only view this author
呵呵!如果是单机,想怎么折腾都行,集群还是免了吧;尽管号称都兼容bash shell,但为什么各大服务器linux版还是用bash shell呢

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2024-11-23 19:18 , Processed in 1.320579 second(s), 25 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list