初识 Linux 系统

生信中常进行的分析任务基本上都是在 Linux 系统上进行的,因此了解 Linux 系统相关的基本知识有助于我们日常的工作。本文我们将对系统的基本知识进行学习。

Linux 内核

Linus 完成了第一版 Linux 内核的开发,而现在则是由一组人员进行这项工作。Linux 内核主要负责以下功能:

  • 系统内存管理
  • 软件程序管理
  • 硬件设备管理
  • 文件系统管理

系统内存管理

内存除了实际存在的物理内存外,还包括虚拟内存。内核通过硬盘上的存储空间实现虚拟内存,这块区域称为交换空间(swap space)。内核不断地在交换空间和物理内存之间反复交换虚拟内存的内容,从而使系统拥有比物理内存更多的内存。
内存存储单元按组划分成多块,称为页面(page)。内核将每个内存页面放在物理内存或交换空间,并维护一个内存页面表,指明哪些页面位于物理内存内,哪些页面被换到了磁盘上。
内核会记录哪些内存页面正在使用中,并自动把一段时间未访问的内存页面复制到交换空间区域,称为换出(swapping out) —— 即使还有可用内存。当程序要访问一个已被换出的内存页面时,内核必须从物理内存换出另外一个内存页面给它让出空间,然后从交换空间换入请求的内存页面。

软件程序管理

Linux 操作系统将运行中的程序称为进程(process)。内核控制着 Linux 系统如何管理运行在系统上的所有进程。 内核创建了第一个进程(称为 init 进程)来启动系统上所有其他进程。当内核启动时,它会将init进程加载到虚拟内存中。内核在启动任何其他进程时,都会在虚拟内存中给新进程分配一块专有区域来存储该进程用到的数据和代码。 一些Linux发行版使用一个表来管理在系统开机时要自动启动的进程。在 Linux 系统上,这个表通常位于专门文件 /etc/inittab 中;另外一些系统(如 Ubuntu)则采用 /etc/init.d 目录,将开机时启动或停止某个应用的脚本放在这个目录下。这些脚本通过 /etc/rcX.d 目录下的入口(entry)启动,这里的 X 代表运行级(run level)
Linux 操作系统的 init 系统采用了运行级。运行级决定了 init 进程运行 /etc/inittab 文件或 /etc/rcX.d 目录中定义好的某些特定类型的进程。Linux操作系统有5个启动运行级。运行级为1时,只启动基本的系统进程以及一个控制台终端进程,称之为单用户模式,常用来在系统有问题时进行紧急的文件系统维护;标准的启动运行级是3。

硬件设备管理

任何 Linux 系统需要与之通信的设备,都需要在内核代码中加入其驱动程序代码,充当应用程序和硬件设备的中间人,允许内核与设备之间交换数据。
最初插入设备驱动代码的唯一途径是重新编译内核,每次添加新设备都得重新编译一遍内核代码,显然很低效。后来开发人员提出了内核模块的概念,允许将驱动代码插入到运行中的内核而无需重新编译内核,同时,当设备不再使用时也可将内核模块从内核中移走。
Linux 系统将硬件设备当成特殊的文件,称为设备文件,包括:

  • 字符型设备文件,处理数据时每次只能处理一个字符的设备,如大多数类型的调制解调器和终端
  • 块设备文件,处理数据时每次能处理大块数据的设备,如硬盘
  • 网络设备文件,采用数据包发送和接收数据的设备,包括各种网卡和一个特殊的回环设备

Linux 为系统上的每个设备都创建一种称为节点(node)的特殊文件。与设备的所有通信都通过设备节点完成。每个节点都有唯一的数值对供 Linux 内核标识它。数值对包括一个主设备号和一个次设备号。类似的设备被划分到同样的主设备号下,次设备号用于标识主设备组下的某个特定设备。

文件系统管理

Linux 内核支持通过不同类型的文件系统从硬盘中读写数据。内核必须在编译时就加入对所有可能用到的文件系统的支持。
Linux 内核采用虚拟文件系统(Virtual File System,VFS)作为和每个文件系统交互的接口。这为 Linux 内核同任何类型文件系统通信提供了一个标准接口。当每个文件系统都被挂载和使用时,VFS将信息都缓存在内存中。

Linux shell

shell 是 GNU 核心工具集中的一部分,一种特殊的交互式工具。它为用户提供了启动程序、管理文件系统中的文件以及运行在 Linux 系统上的进程的途径

访问命令行

Linux 早期,可以用来工作的只有 shell,人们借助由 shell 所提供的文本命令行界面(command line interface,CLI)输入命令。如今,进入 CLI 的一种方法是让 Linux 系统退出图形化桌面模式,进入文本模式。这样在显示器上就只有一个简单的 shell CLI,这种模式称作 Linux控制台。Linux 系统启动后,它会自动创建出一些虚拟控制台。虚拟控制台是运行在 Linux 系统内存中的终端会话,大多数Linux发行版会启动5~6个;第二种方法就是使用 Linux 图形化桌面环境中的终端仿真包

虚拟控制台

尽管在启动时会创建多个虚拟控制台,但很多Linux发行版在完成启动过程之后会切换到图形化环境,所以需要手动进行切换,通常是 Ctrl+Alt 组合键,然后按功能键(F1~F7)。显示的终端号中包括 tty ,代表电传打字机(teletypewriter)

终端仿真包

在图形化环境下,有大量可用的图形化终端仿真软件

文件系统

Linux 将文件存储在单个目录结构中,这个目录被称为虚拟目录(virtual directory),它将安装在PC上的所有存储设备的文件路径纳入单个目录结构中。 Linux 虚拟目录结构只包含一个称为根(root)目录的基础目录。
在Linux PC上安装的第一块硬盘称为根驱动器。根驱动器包含了虚拟目录的核心,其他目录都是从那里开始构建的。Linux会在根驱动器上创建一些特别的目录,我们称之为挂载点(mount point)。挂载点是虚拟目录中用于分配额外存储设备的目录。虚拟目录会让文件和目录出现在这些挂载点目录中,然而实际上它们却存储在另外一个驱动器中。