Linux基础
选择 Linux 还是 Windows?这个话题曾经在网上吵得很热,也许现在还有人在争论。一般而言,使用 Linux 的 优势要远远高于使用 Windows,原因简单列举如下:[1]
大多数科研专用的软件都是在 Linux 下开发的,然后再移植到 Windows 下,因而这类软件在 Windows 下 相对来说有更多的 Bug;很多开源的代码是在 Linux 下写的,然后用 gcc 或 gfotran 编译的。理论上,只要程序写的时候考虑的可移植性,在 Windows 下编译是没有问题的,但实际上大多数代码都需要经过一番修改;Windows 自带了批处理工具(Batch)以及 Shell(PowerShell),可以用于完成数据的批处理; 但前者功能太单一,后者用的人又很少,所以两者都不是合适的选择;Linux 下自带了多种 Shell(Bash、csh、zsh),以及多个适合数据处理的工具,非常适合用于科研。要学习 Linux,首先要选择合适的发行版:Ubuntu、Debian 和 Fedora 应该算是比较适合新手的发行版。刚 接触 Linux 的新手可以考虑在虚拟机中安装不同的发行版,每个都尝试一下,找到最适合自己的就好。选择好发 行版之后,还要对发行版的版本代号有一些了解。以 Ubuntu 为例,对于 12.04 和 14.04 是长期支持版,支持周期 为 5 年,而其他版本的支持周期只有一年多。我遇到不少目前还在用 Ubuntu 13.10 的人,(13.10 在 2014 年 7 月 便不再被支持)。这就是在给自己挖坑,系统用的时间越长,重装的代价就越高,想要重装的欲望就越低,重装时 数据丢失的风险也越大。
接下来要选择合适的入门书籍:国内推荐的比较多的是《鸟哥的 Linux 私房菜 – 基础学习篇》,个人觉得其语言过于啰嗦,知识点对于新手来说稍显繁杂;另一本推荐的比较多的是开源的《The Linux Command Line》, 该书有中文译本。注意,要读的是介绍 Linux 的书,而不是任何介绍 Linux 发行版的书。
对于 Linux 入门需要了解的知识点包括:
了解 Linux 的历史,以及 Linux 与各个发行版之间的联系;熟悉 Linux 的目录树,习惯使用命令行,掌握基本命令 cd 、 pwd 、mkdir 、 rmdir、 ls 、 cp、 rm 、 mv 的基本用法;理解绝对路径和相对路径;理解环境变量 PATH 的作用;理解 Linux 文件权限 rwx ,掌握 chmod 命令;其他几个有用的命令: cat 、 touch 、 head 、 tail 、 which 、 locate ;符号链接 ln 与挂载 mount ;了解最基本的 vi 编辑器的使用,因为很多时候 vi 是服务器上唯一能使用的编辑器;掌握至少一种高级编辑器的使用,如 vim、emacs、sublime text、atom。怎样才叫掌握?这个问题 没有标准答案,选择其中一个一直用下去,遇到需要重复劳动或者不顺心的地方就去找各种插件配置一下。 像 gedit 这种编辑器不用也罢,用它来写程序效率太低;理解 ~/.bashrc 文件的作用;理解并学会使用数据流重定向;理解管道的作用及其用途;Linux 通配符;掌握压缩相关命令 tar 、 gzip 、 bzip2 ,其实最主要的是 tar 命令的两种常用方式: -zxvf 和 -jxvf ;与数据处理相关的命令: awk 、 cut 、 grep 、 wc 、 sort 、uniq ;PS:严格地说, awk 已经不单单是一个命令,更像是一种微型语言了。Bash 及其相关
Bash 其实本身只是一个空壳,具有最基本的条件判断和循环功能。除此之外,日常需要的数据处理、字符串处理, 都需要借助于 Linux 下的其他命令,比如 cat 、 awk 、 grep 、cut 、 paste 等等。 因而除了 bash 脚本自身的功能以外,还需要了解的工具包括:
awk :文本处理工具;sed :流编辑器printf :格式打印;grep :正则表达式匹配;正则表达式;在科研过程中不推荐使用 Bash 脚本,因为 Bash Shell 与 awk 等命令本质上是独立的个体,二者在设计上有很多 不一致的地方,且 awk 等命令在设计的时候明显有向 Shell 妥协的意味。总之,Bash 脚本中坑比较多,仅仅适合 用几行就可以搞定的情况
Perl 或 / 和 Python
Perl 和 Python 是另外两种常见的脚本语言。在学会了 Bash 脚本以及相关的各种工具之后为什么还要学习新的 脚本语言呢?因为 Bash 虽然作为 Linux 下最底层最常用的脚本语言,但是其功能过于依赖于外部工具,且难以 实现更加复杂的功能。Perl 和 Python 可以完全自给自足,其内部完全实现了 awk、grep 等工具的功能, 且速度很快,更重要的是 Perl 和 Python 具有模块功能,可以从网上下载各种别人已经写好的模块来实现几乎 所有自己想要的功能。因而 Perl/Python 实际上比 Bash 功能更强大,学起来也并不难。如果有心学习 Perl/Python 的话,可以简单了解 bash 相关知识,然后直接进入更高级的脚本语言。
就目前的情况来看,Perl 适合日常的简单的数据处理,而 Python 适合完成各种复杂的工作同时也适合进行 科学计算。对于新手,更推荐学习 Python。当然最好 Perl 也稍微懂一些。
对于Python的学习,可以参考菜鸟教程。
以上,编辑于 2019.09.22 晚上
最近使用了Linux,新的体会:
方便的数据处理:打乱shuffle,排序sort,取前几个数head,取后几个数tail,取某列数awk可以自动打开一个窗口,变相并行计算:(待补充)gcc用于编译C语言,g++用于编译C++语言Python的使用很方便,可用于基本的计算和绘图,以及充当胶水语言。同时,它易读,是众多机器学习和深度学习框架的常用语言。它的安装,使用Anaconda即可;其他需要的包例如Pytorch另行安装。以上,编辑于 2022.05.03 凌晨
0 留言