vlambda博客
学习文章列表

生信基础Linux--基本的bash shell命令

bash手册

大多数Linux发行版自带用以查找shell命令及其他GNU工具信息的在线手册。收悉手册对使用各种Linux工具大有裨益,尤其是在你要弄清各种命令行参数的时候。

man命令用来访问储存在Linux系统上的手册页面,在想要查找的工具的名称前面输入man命令,就可以找到那个工具相应的手册条目。如输入:man cp,显示如下页面:

生信基础Linux--基本的bash shell命令

手册页不是唯一的参考资料。还有另一种叫作info页面的信息。可以输入info info来了解 info页面的相关内容。

另外,大多数命令都可以接受-help或--help选项。例如你可以输入hostname -help来 查看帮助。关于帮助的更多信息,可以输入help help。

浏览文件系统

当登录系统并获得shell命令提示符后,你通常位于自己的主目录中。

Linux文件系统:

Linux路径名中不适用驱动器盘符(如win中的C,D盘)。Linux将文件存储在单个目录结构中,这个目录被称为虚拟 目录(virtual directory)。虚拟目录将安装在PC上的所有存储设备的文件路径纳入单个目录结构中。

Linux虚拟目录结构只包含一个称为根(root)目录的基础结构。

你将会发现Linux使用正斜线(/)而不是反斜线(\)在文件路径中划分目录。在Linux中, 反斜线用来标识转义字符,要是用在文件路径中的话会导致各种各样的问题。

Linux虚拟目录中比较复杂的部分是它如何协调管理各个存储设备。在Linux PC上安装的第一块硬盘称为根驱动器。根驱动器包含了虚拟目录的核心,其他目录都是从那里开始构建的。

Linux会在根驱动器上创建一些特别的目录,我们称之为挂载点(mount point)。挂载点是虚拟目录中用于分配额外存储设备的目录。虚拟目录会让文件和目录出现在这些挂载点目录中,然而实际上它们却存储在另外一个驱动器上。

通常系统文件会存储在根驱动器中,而用户文件则存储在另一驱动器中。

生信基础Linux--基本的bash shell命令

图3-2展示了计算机中的两块硬盘。一块硬盘和虚拟目录的根目录(由正斜线/表示)关联起来。剩下的硬盘就可以挂载到虚拟目录结构中的任何地方。在这个例子中,第二块硬盘被挂载到了/home位置,用户目录都位于这个位置。

常见Linux目录名称:

生信基础Linux--基本的bash shell命令

遍历目录:

cd命令:将shell会话切换到另一个目录。

cd destination  #cd 命令可接受单个参数destination,用以指定想切换到的目录名。如果没有为cd命令指定目标路径,它将切换到用户主目录。

destination参数可以用两种方式表示:一种使用绝对文件路径,另一种使用相对文件路径。

绝对文件路径:

用户可在虚拟目录中采用绝对文件路径引用目录名。绝对文件路径定义了在虚拟目录结构中 该目录的确切位置,以虚拟目录的根目录开始,相当于目录的全名。绝对文件路径总是以正斜线(/)作为起始,指明虚拟文件系统的根目录。因此,如果要指 向usr目录所包含的bin目录下的用户二进制文件,可以使用如下绝对文件路径:

/usr/bin

使用绝对文件路径可以清晰表明用户想切换到的确切位置。要用绝对文件路径来切换到文件 系统中的某个特定位置,只需在cd命令后指定全路径名:

cd /usr/bin
相对文件路径:

相对文件路径允许用户指定一个基于当前位置的目标文件路径。相对文件路径不以代表根目录的正斜线(/)开头,而是以目录名(如果用户准备切换到当前工作目录下的一个目录)或是一个特殊字符开始。假如你位于home目录中,并希望切换到Documents子目录中,那你可以使用cd命令加上一个相对文件路径:

生信基础Linux--基本的bash shell命令

上面的例子并没有使用正斜线(/),而是采用了相对文件路径将当前工作目录从/home/christine改为/home/christina/Documents,大大减少了输入内容。

有两个特殊字符可用于相对文件路径中:

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

  • 双点符(..),表示当前目录的父目录;

文件和目录列表:

想要知道系统中有哪些文件,可以使用列表命令(ls)。本节将描述ls命令和可用来格式化其输出信息的选项。

基本列表功能:

ls -F:带-F参数的ls命令轻松区分文件和目录。使用-F参数可 以得到如下输出:

生信基础Linux--基本的bash shell命令

-F参数在目录名后加了正斜线(/),以方便用户在输出中分辨它们。类似地,它会在可执行 文件(比如上面的my_script文件)的后面加个星号,以便用户找出可在系统上运行的文件。

ls -a:显示隐藏文件,隐藏文件在Linux常以点号开头。

ls -R: -R参数是ls命令可用的另一个参数,叫作递归选项。它列出了当前目录下包含的子目录中的问价。

当一个命令有两个或多个参数时,可以分开输入:ls -F -R;也可以合并输入: ls -FR

显示长列表:

ls -l:-l参数会产生长列表格式的输出,包含了目录中每个文件的更多相关信息。

生信基础Linux--基本的bash shell命令

这种长列表格式的输出在每一行中列出了单个文件或目录。除了文件名,输出还有其它有用信息。

生信基础Linux--基本的bash shell命令

过滤输出列表:

ls命令支持在命令行中定义过滤器。它会用过滤器来决定应该在输出中显示哪些文件或目录。这个过滤器就是一个进行简单文本匹配的字符串。可以在要用的命令行参数之后添加这个过滤器:

生信基础Linux--基本的bash shell命令

当指定特定文件名称作为过滤器时,ls命令只会显示该文件的信息。有时你可能不知道要找那个文件的确切名称。ls命令能够识别标准通配符,并在过滤器中用它们进行模式匹配:

  • 问号(?)代表一个字符;

  • 星号(*)代表零个或多个字符。

生信基础Linux--基本的bash shell命令

在过滤器中使用星号和问号被称为文件扩展匹配(file globbing),指的是使用通配符进行模式匹配的过程。通配符正式的名称叫作元字符通配符(metacharacter wildcards)。除了星号和问号之外,还有更多元字符通配符可用于文件扩展匹配。可以使用中括号。

生信基础Linux--基本的bash shell命令

中括号表示一个字符位置给出多个可能的字符:a或i。中括号也可以指定字符范围,例如字母范围[a - i]

生信基础Linux--基本的bash shell命令

另外,可以使用感叹号(!)将不需要的内容排除在外。

生信基础Linux--基本的bash shell命令

处理文件

创建文件:
touch命令:

touch命令可以创建空文件:

复制文件:
cp命令:

cp命令用于复制文件。

在最基本的用法里,cp命令需要两个参数-----源对象和目标对象:

cp source destination

当source和destination参数都是文件名时,cp命令将源文件复制成一个新文件,并且以 destination命名。新文件就像全新的文件一样,有新的修改时间。

当加上 -i选项,强制shell询问是否需要覆盖已有文件

此前介绍单点符(.)就很适合用于cp命令。单点符表示当前工作目录。

生信基础Linux--基本的bash shell命令

cp -R:cp命令的-R参数威力强大。可以用它在一条命令中递归地复制整个目录的内容。

生信基础Linux--基本的bash shell命令

在执行cp –R命令之前,目录Mod_Scripts并不存在。它是随着cp –R命令被创建的,整个Scripts 目录中的内容都被复制到其中。注意,在新的Mod_Scripts目录中,所有的文件都有对应的新日期。Mod_Scripts目录现在已经成为了Scripts目录的完整副本。

在上面的例子中,ls命令加入了-Fd选项。之前你已经见过-F选项了,不过-d选项可能 还是第一次碰到。后者只列出目录本身的信息,不列出其中的内容。

也可以在cp命令中使用通配符。

cp命令也可以使用制表键自动补全。(Tab键)

链接文件
ln命令:

链接文件是Linux文件系统的一个优势。如需要在系统上维护同一份文件的两份或多份副本,除了保存多份单独的物理文件副本之外,还可以采用保存一份物理文件副本和多个虚拟副本的方式。这种虚拟的副本就称为链接。链接是目录中指向文件真实位置的占位符。在Linux中有两种不同类型的文件链接:

  • 符号链接;

                符号链接就是一个实实在在的文件,它指向存放在虚拟目录结构中某个地方的另一个文件。这两个通过符号链接在一起的文件,彼此的内容并不相同。

                 要为一个文件创建符号链接,原始文件必须事先存在。然后可以使用ln命令以及-s选项来 创建符号链接。

生信基础Linux--基本的bash shell命令

在上面的例子中,注意符号链接的名字sl_data_file位于ln命令中的第二个参数位置上。显示 在长列表中符号文件名后的->符号表明该文件是链接到文件data_file上的一个符号链接。 

                 inode编号是一个用于标识的唯一数字,这个数字由内核分配给文件系统中的每一个对象。要查看文件或目录的inode编号,可以给ls命令加入-i参数。不同的inode编号,代表不同的文件。

生信基础Linux--基本的bash shell命令

  • 硬链接;

            硬链接会创建独立的虚拟文件,其中包含了原始文件的信息及位置。但是它们从根本上而言 是同一个文件。引用硬链接文件等同于引用了源文件。要创建硬链接,原始文件也必须事先存在, 只不过这次使用ln命令时不再需要加入额外的参数了。

生信基础Linux--基本的bash shell命令

  • 在上面的例子中,我们使用ls -li命令显示了*code_files的inode编号以及长列表。注意, 带有硬链接的文件共享inode编号。这是因为它们终归是同一个文件。还要注意的是,链接计数 (列表中第三项)显示这两个文件都有两个链接。另外,它们的文件大小也一模一样。

只能对处于同一存储媒体的文件创建硬链接。要想在不同存储媒体的文件之间创建链接, 只能使用符号链接。

不要复制链接文件,直接复制源文件,否则会造成混乱。

重命名/移动文件:
mv命令:

在Linux中,重命名文件称为移动(moving)。mv命令可以将文件和目录移动到另一个位置 或重新命名。

删除文件
rm命令:

在Linux中,删除(deleting)叫作移除(removing)。bash shell中删除文件的命令是rm。rm 命令的基本格式非常简单。

-i参数:提示你是不是要真的删除该文件。bash shell中没有回收站或垃圾箱,文件 一旦删除,就无法再找回。因此,在使用rm命令时,要养成总是加入-i参数的好习惯。

-f参数:如果要删除很多文件且不受提示符的打扰,可以用-f参数强制删除。

处理目录:

在Linux中,有些命令(比如cp命令)对文件和目录都有效,而有些只对目录有效。创建新 目录需要使用本节讲到的一个特殊命令。删除目录也很有意思,本节也会讲到。

创建目录:
mkdir命令:

在Linux中创建目录很简单,用mkdir命令即可。(touch命令创建的是一个文件)

-p参数:用于同时创建多个目录和子目录。

删除目录:
rmdir命令:

删除目录的基本命令是rmdir。默认情况下,rmdir命令只删除空目录。

要解决这一问题,得先把目录中的文件删掉,然后才能在空目录上使用rmdir命令。

rm -rf命令:

也可以在整个非空目录上使用rm命令。使用-r选项使得命令可以向下进入目录,删除其中的文件,然后再删除目录本身。(就是删除整个目录及其内的子目录或文件)

对rm命令而言,-r参数和-R参数的效果是一样的。-R参数同样可以递归地删除目录中的 文件。shell命令很少会就相同的功能采用不同大小写的参数。

rm -rf命令既没有警告信息,也没有声音提示。这肯定是一个危险的工具,尤其是在拥有 超级用户权限的时候。

查看文件内容

查看文件类型
file命令:

               它能够探测文件的内部,并决定文件是什么类型的。

                file命令还可以展示符号链接的文件,还可以告诉你它链接到了哪个文件。

生信基础Linux--基本的bash shell命令

查看整个文件
cat命令:

              cat命令是显示文本文件中所有数据的得力工具。

              -n参数会给所有的行加上行号。

              -b参数给有文本的行加上行号。

              -T参数:不让制表符出现。-T参数用^I字符组合去替换文中的所有制表符。

more命令:

                   cat命令的主要缺陷是:一旦运行,你就无法控制后面的操作。为了解决这个问题,开发人 员编写了more命令。more命令会显示文本文件的内容,但会在显示每页数据之后停下来。

                   more命令是分页工具。在本章前面的内容里,当使用man命令时,分页工具会显示所选的bash 手册页面。和在手册页中前后移动一样,你可以通过按空格键或回车键以逐行向前的方式浏览文 本文件。浏览完之后,按q键退出。more命令只支持文本文件中的基本移动。如果要更多高级功能,可以试试less命令。

less命令:

                  less命令的操作和more命令基本一样,一次显示一屏的文件文本。除了支持和more命令相 同的命令集,它还包括更多的选项。

                    其中一组特性就是less命令能够识别上下键以及上下翻页键(假设你的终端配置正确)。在 查看文件内容时,这给了你全面的控制权。

查看部分文件:
tail命令:

              显示文件最后几行(默认情况下为10行)的内容 。

              可以向tail命令中加入-n参数来修改所显示的行数。在下面的例子中,通过加入-n 2使 tail命令只显示文件的后两行。

head命令:

              head命令,顾名思义,会显示文件开头那些行的内容。默认情况下,它会显示文件前10行 的文本。 

              类似于tail命令,它也支持-n参数,这样就可以指定想要显示的内容了。这两个命令都允 许你在破折号后面输入想要显示的行数。