vlambda博客
学习文章列表

Linux入门系列之基础bash命令学习(上)


Linux入门系列之基础bash命令学习(上)





Linux入门系列之基础bash命令学习(上)


其实,不管是Windows系统还是Linux系统,从头学起都是很重要的。还记得我们刚刚接触微软的Windows时候是怎么样学习的吗?就是由资源管理器学起,然后慢慢学到控制面板,桌面管理,最后才去学习办公软件,Linux的学习方式差不多,我们要耐住性子慢慢学起。要增加体力,只有运动;要丰富知识,就只有读书。我强烈推荐给想要学习Linux的同学必看的俩本书《鸟哥的Linux私房菜》和《Linux命令行与Shell脚本编程大全》,个人觉得这俩本的内容已经满足你日常对于linux使用需求了。

其中在《鸟哥的Linux私房菜》这本书中,作者对学习Linux的人有这四点建议:

  • 先理解基础硬件知识,不必全懂(时间有限),但是,至少要听过,有概念。
  • 先了解Linux的基础知识,其中包含了"用户、用户组的概念"、“权限的概念”、“程序的定义”等等
  • 必须至少学会一种以上的文字编辑器,比如,最好学会通用版本的vi
  • 实际操作Linux时候,必定要学习Shell命令行,最好也能了解Shell脚本。

背景知识

Linux shell是一种特殊的交互式工具。其内核就是系统的核心,控制着内存、程序和硬件之间的交互。它为用户提供了启动程序、管理文件系统中的文件以及运行在Linux系统上的进程的途径。shell的核心是命令行提示符。命令行提示符是shell负责交互的部分。它允许你输入文本命令,然后解释命令,并在内核中执行。

shell包含了一组内部命令,用这些命令可以完成我们在Windows系统中常用的操作诸如复制文件、移动文件、重命名文件、显示和终止系统中正运行的程序等。shell也允许你在命令行提示符中输入程序的名称,它会将程序名传递给内核以启动它。我们可以将多个shell命令放入文件中作为程序执行。这些文件被称作shell脚本。所有Linux发行版默认的shell都是「bash shell」。除此之外,还有其它几种的Shell,我们知道即可。

Linux入门系列之基础bash命令学习(上)
其他几种Shell

关于Linux发行版本通常归类为3种:

  • 完整的核心Linux发行版
  • 特定用途的发行版
  • LiveCD测试发行版
Linux入门系列之基础bash命令学习(上)
特定用途的发行版

对于我们做生信研究人员一般使用特定用途版本中CentOS和Ubuntu较多。在这里我们只是对Bash Shell中的常用必学的命令进行学习记录,及通过这些命令在Linux系统中来熟练操作处理文件,对Linux系统背景知识,系统内核操作原理若感兴趣的希望大家能看书深入了解。

当我们初次进入Linux系统时候,你会看到一些常见的顶层家目录名称,这里列出一些,当你以后见到要知道里面各目录里都保存着哪种类型的文件。

Linux入门系列之基础bash命令学习(上)
常见的Linux家目录名称

基础Bash命令

在之前推送转发的一文中,作者自述到使用Linxu时间超过8年,但是使用的命令的频度超过99%的不超过20条。确实是这样的,不要被像《鸟哥的Linxu私房菜》这样厚厚一大本书被吓到,其实我们只需要先把一些基础命令学好已经够用了(比如复制粘贴,文操作等等),差不多也就20多个,其他命令我们需要用到时候再去学习做好笔记即可。

这里强调一点,对于使用Windows系统的小伙伴不要给自己找没有服务器或者Linux系统而学习不了的借口,现在Windows下已经有很多种方式可以使用了,这里提供几种方式网上都有成堆的教程: 1)Git for windows;2) Ubuntu on Windows 10 ;3) VMware虚拟机等等。我们可以通过这些方式去先练习命令行,后续有条件的话团队内配置个服务器再深入学习操作生信软件,自己使用的话买个小型的云服务器也是不错的选择。

OK,让我们现在正式开始学习命令吧。首先,我们要知道默认的bash shell 提示符号为美元符号$, 它表示着在Linux系统中等待我们输入命令行的符号。例如在Ubuntu Linux系统中,shell提示符就是这样的,

Linux入门系列之基础bash命令学习(上)
$提示符

「man命令」

个人认为对于接触Linux的新手这应该是你第一个要学会的命令,生信学习中重要的一项技能就是学会搜索,学会查看帮助文档,文档里的内容往往是最详细全面的,不像你在某个博客或帖子看到了哪个命令的讲解,多数作者也不会将各个参数都一一细致的写出来,只是站在自己的角度上讲认为很必要掌握的参数。man命令可以用来访问存储在Linux系统上的手册页面,比如我们输入man man,就可以打开man命令的manual命令手册,里面有全部的参数解释。

Linux入门系列之基础bash命令学习(上)
man帮助文档

除了man查找命令的手册以外,大多数命令也可以直接输入-help或者--help选项进行查看帮助,比如我们输入man --help,出现以下界面,但是没有man命令的文档详细,而且我们也没必要去将所有的参数都掌握,只掌握一些常用和能解决我们当且问题的参数,剩下的当我们用到时候再学即可。

Linux入门系列之基础bash命令学习(上)
--help参数

「cd命令」

切换工作目录命令为cd,在这里我们还有个需要了解的点是「绝对路径」和「相对路径」的区别:

假设你当前位于 /home/Temp/TxGameDownload/ 路径下,该路径中还有个APK目录,此时我们想去往该目录下,我们可以用以下两种方法。

  • 绝对路径:可以清晰的表明用户的确切位置,比如我们切换到文件系统中某个特定位置时候,cd后面要指定全路径的名称。输入内容为 cd  /home/Temp/TxGameDownload/APK,
  • 相对路径:允许用户指定一个基于当前位置的目标文件路径,我们就可以直接 cd APK 到达作目录 /home/Temp/TxGameDownload/APK 目录下,达到了同样的目的,可以看出采用相对路径大大的减少了输入内容。(刚接触命令行,建议先使用绝对路径文件,等熟悉了目录布局之后再使用相对路径文件)

「注意」:Linux中的文件路径是区别于Windows的,在Windows中我们看到文件路径是这样的:\Temp\TxGameDownload\APK ,是反斜线(\)划分路径的,但是在Linux中的路径划分都是以正斜线(/)去划分的,比如 /Temp/TxGameDownload/APK 。刚开始接触Linux,我们会花费一点时间来适应这一点。

另外,相对路径中有俩个特殊字符可用:

  • 单点符(.) 表示当前目录

  • 双点符(..)   表示当前目录的父目录,也就是上一级目录

    也就说当你想从 /home/Temp/TxGameDownload/APK 目录中回到上一次层目录,只需要 cd .. 即可。

「pwd命令」

查看所位于的路径位置,输入pwd会以绝对路径的形式显示出你处于哪个目录下。

Linux入门系列之基础bash命令学习(上)

「ls命令」

最基本的显示出当前目录下的文件和目录,加上-l 参数会产生长列表格式的输出,包含目录中的每个文件的更多信息(包换文件类型,权限,修改时间等等)。如下图中看到行首的字符不一样,目录为(d), 而文件前面都是(-)表示。

Linux入门系列之基础bash命令学习(上)
文件列表

除了-l 参数,还有其他有用的参数,比如:

-a : 隐藏文件和普通文件及目录一起显示出来

-R: 递归选项。它列出了当前目录下包含的子目录中的文件

我们若同时想用这些参数的功能,我们就可以写在一起 「ls -alR」 来表示。

「touch命令」

创建文件,输入touch test.txt会在目录下生成test.txt的文件。

「cp命令」

复制文件,输入cp test1.pdf ../test2.pdf,我们就会把当前目录中的test1.pdf文件复制一份到上一级目录,且命名为test2.pdf.

「mv命令」

剪切文件,输入mv test1.pdf ../test2.pdf,我们就会把当前目录中的1.pdf文件剪切到上一级目录,且重命名为test2.pdf.

「Tab键补全命令」

制表键(键盘中的Tab键)自动补全允许你在输入文件名或目录名时按一下制表键,让shell帮忙将内容补充完整。比如上面的命令我们在输入到mv test1.p时候,按一下Tab键,会自动补全文件名mv test1.pdf,从而提高我们的工作效率

「ln命令」

链接文件是Linux文件系统的一个优势。如需要在系统上维护同一文件的两份或多份副本,除了保存多份单独的物理文件副本之外,还可以采用保存一份物理文件副本和多个虚拟副本的方法。这种虚拟的副本就称为链接。链接分为两种:

  • 软链接:要为一个文件创建符号链接,原始文件必须事先存在。然后可以使用ln命令以及-s选项来创建符号链接输入 ln -s test1_file test2_file 即可。其实相当于Windows下的创建的快捷方式。
  • 硬链接:会创建独立的虚拟文件,其中包含了原始文件的信息及位置。但是它们从根本上而言 是同一个文件。引用硬链接文件等同于引用了源文件。要创建硬链接,原始文件也必须事先存在,只不过这次使用ln命令时不再需要加入额外的参数了。直接 ln test1_file test2_file 。个人觉得链接(ln)的命令使用的频率没有复制(cp)和剪切(mv)高。当你链接创造的多的时候,容易犯晕,特别是当你不小心创建了软连接文件的软链接,形成了混乱的链接链。

「rm命令」

删除文件,基本格式十分简单。比如rm test.pdf即可删除文件。注意LInux中可没有回收站这一说,没了就是真的没了。

  • 加上-i参数时候,使用这个选项,系统会要求你逐一确定是否要删除。这时,必须输入y并按Enter键,才能删除文件。如果仅按Enter键或其他字符,文件不会被删除。

  • 加上-f 参数,会强制删除文件,不受提示符的打扰。

  • 加上-r参数,表示递归地删除目录下的所有文件和目录

「rmdir」

删除目录,假设我们现在去删除一个名字为data的目录,当目录下无内容空目录时候,我们直接可以rmdir date删除该目录,若目录下有内容,系统会直接提示rmdir: failed to remove 'data': Directory not empty, 但是此时我们可以用rm -r data去直接递归删除。

「mkdir」

对应rmdir,是创建目录的意思, 由此看出Linux中的命令其实大部分为英文缩写的拼接,有的命令我们看到名字就能大概猜出他是要干嘛的,就比如rmdir = remove + directory。

「file命令」

查看文件类型,比如分别对文件1.pdf和目录1使用file命令,可以看到Linux会提示我们这是什么类型的文件

Linux入门系列之基础bash命令学习(上)
查看文件类型

「cat 命令」

我们使用Linux会经常去处理一些大型文件,在处理之前我们肯定要先去看一下文件的内容,所以我们要学习几个查看的命令。我们拿手头一个fasta序列文件test.fa举例。

cat命令会从头到尾显示文件的所有数据,屏幕会直接不停输出文件的内容,除非你按Ctrl +C停止输出。

Linux入门系列之基础bash命令学习(上)
cat查看

「tac命令」

从尾到头倒着显示所有数据,tac ,cat 自己细品,单词都是反着写的。

「more命令」

上面两个命令的缺陷是一旦运行就不会停止,more命令会显示文件内容,但是会显示每页数据之后停止下来。我们可以通过按空格键或回车键以逐行向前的方式浏览文本文件。浏览完之后,按q键退出。

「less命令」

more命令的升级版,操作和more命令基本一样,一次显示一屏的文件文本。比more命令拥有有更多的参数功能,我们看下常用参数-S (对齐) 和 -N(显示行号) 输入less -SN test.fa,看出区别了吧,其他参数需要时候再学吧。

Linux入门系列之基础bash命令学习(上)
less查看

「head/tail命令」

如果你要查看的数据要么在文本文件的开头,要么在文本文件的末尾,我们可以分别使用head、tail命令去查看文件的开头或末尾几行,默认显示10行,加上-n参数可指定显示的行数。

Linux入门系列之基础bash命令学习(上)
head/tail查看头尾

「管道命令」

最后,我们再来学习一个管道(pipeline)命令符号,在Linxu中用  |  符号来表示,他的作用是使我们的命令衔接起来,提高我们的工作效率,我举个栗子,查看一个文件并输入文件的前5行,我们就可以直接输入less test.fa | head -n 5,有了管道符号,我们的命令行就有了更大的自由搭配各种命令去快速实现目的。

Linux入门系列之基础bash命令学习(上)
管道命令

至此,我们已经学习了Linux系统中一些常用的基础命令,包括查看帮助文档及类似于Windsows下文件操作(查看,复制,剪切,删除等等),下次我们将学习更多的bash shell命令如探查进程、数据处理等等,先说到这儿吧~~


往期精彩回顾











我就知道你在看!