本篇简单介绍Linux的基本相关概念,毕竟学习一个东西还是要知道它的前世今生的,内容皆总结摘抄自《鸟哥的Linux私房菜:基础学习篇》的第一部分,仅作笔记。
Linux本质上是一个操作系统最底层的及其提供的内核工具。由于它是GNU GPL授权模式,因此所有人都可以取得它的源码与执行内核程序,并且可以修改。Linux参考了POSIX规范,于是兼容了UNIX操作系统,因此也成为UNIX-like(类UNIX)的一种。
GNU(GNU's Not UNIX),是一个叫Stallman的男人发起的计划名称,该计划的目的是:建立一个*、开放的UNIX操作系统。Stallman认为程序是想要分享给大家使用的,但由于每个人使用的计算机软硬件并不相同,因此该程序的源码应该要同时发布,这样才能方便大家修改使用于每个人的计算机(一九八几年的UNIX系统多种多样)。这个将源代码连同软件程序发布的举动,在GNU计划的范畴之内就称为*软件(free software)运动。GNU计划对如今的*软件风潮都有不可磨灭的推动,目前我们所使用的很多*软件或开源软件,几乎都直接或间接受益于这个计划。
GPL(General Public License),是Stallman为了避免GNU所开发的*软件被其他人利用而称为专利软件草拟的通用公共许可证。一个软件使用了GPL版权声明之后,它自然就成了*软件,这个软件就具有下面的特色:
- 取得软件与源代码:我们可以根据自己的需求来使用这个*软件;
- 复制:我们可以*地复制该软件;
- 修改:我们可以将取得的源代码进行程序修改使其更符合实际工作场景;
- 再发行:我们可以将修改过的程序再度*发行,而不会与原先的编写者冲突;
- 回馈:我们应该将修改过的程序代码回馈于社区。
可以看到GPL是站在互助互利的角度上,因此我们修改的任何一个*软件都不应该这样做:
- 修改授权:不能将一个GPL授权的*软件,在修改后将它取消授权;
- 单纯销售:不能单纯销售*软件。
Linux发行版
Linux虽然仅具有内核与内核所提供的工具,但很多软件已经可以在Linux上面运行,因此,Linux+各种软件就是一个相当完整的操作系统。但Linux早期都是由黑客工程师开发维护,他们并没有考虑到一般用户的能力。为了让用户能接触到Linux,很多的商业公司或非盈利团体就将Linux内核与可运行的软件整合起来,加上自己具有创意的工具程序,这个工具程序可以让用户以CD/DVD或通过网络直接安装/管理Linux系统。这个内核+软件+工具+可完全安装程序的东西,我们称之为Linux distribution,即Linux发行版。虽然发展LInux发行版的社区与公司很多,但每个Linux的内核都由www.kernel.org网站发布,它们所选择的软件几乎都是目前很知名的软件,重复性相当高。此外,为了让所有的Linux发行版开发不至于差异太大,且让这些开发者在开发的时候有所依据,还有Linux Standard Base(LSB)等标准来规范开发者,以及目录结构的File system Hierarchy Standard(FHS)标准规范。
命令行模式下命令的执行
在Linux系统中,不管是可视化的窗口管理器还是命令行模式都是一组或一个程序在负责我们所想要完成的任务。命令行模式所运行的程序被称为壳(Shell),这是因为这恶搞程序负责最外面与用户沟通,所以被戏称为壳程序。
命令的一般格式及说明如下:
command [-options] parameter1 paraterme2 ...
命令 选项 参数1 参数2
- 一行命令中第一个输入的部分绝对是命令(command)或可执行文件(例如shell脚本);
- command为命令的名称,例如变换工作目录的命令为cd(change directory)等;
- []中的内容是命令的选项,是可选的,通常选项前会带“-”号,例如-h;有时候会使用选项的完整全名,则选项前带有“--”符号,例如--help;
- parameter1和parameter2为依附在选项后面的参数,或是command的参数;
- 命令、选项、参数等它们的中间以空格来区分,不论空几格shell都视为一格,因此空格是很重要的特殊字符;
- 回车键代表一行命令的开始启动;
- 命令太长时,可以使用反斜扛(\)来转义回车键,使命令连续到下一行;
- Linux系统是区分英文大小写的。
在命令行模式中执行命令时会有两种主要的情况:
- 第一种是命令执行后会直接显示结果,然后回到命令提示字符等待下一个命令的输入;
- 第二种是进入到该命令的环境,知道结束该命令才回到命令行界面的环境。
等待下一个命令输入的环境即光标在工作目录后闪烁时,我们使用的大多数命令都属于第一种情况,例如date命令显示当前日期:
例如cal命令显示指定年份的日历:
上图的最下方可以看到命令执行完后直接进入了等待输入下一个命令的环境。而有些命令会让我们进入它的特定环境中,例如计算器命令bc:
可以看到笔者在进入bc计算器环境后执行了各种加减乘除运算,在0作被除数时也会抛错。直到输入”quit“命令才离开计算器环境回到命令行等待输入环境。
在命令行模式中,最常使用的除了命令外还有一些功能组合键,这些按键可以辅助我们进行命令的编写与程序的中断。
- Tab按键:具有命令补全与文件补齐的功能,可以避免我们打错命令或文件名。那什么时候补全命令,什么时候补全文件呢?Tab接在一串命令的第一个字段后面,则为命令补全;接在一串命令的第二个字段后面,则为文件补全。例如输入”ca“后按Tab键得到如下结果:
可以看到补全了ca开头的一系列命令,其中包括了刚刚介绍的cal打印日历命令。我们再使用cd(change directory)命令来检验下文件补全,笔者的工作目录为”/lib/games“,改变工作目录为/lib下的一个目录,补全如下:
- Ctrl-c按键:具有中断目前程序的功能。在有些命令或情景下,命令行会一直运行一些东西无法停止,这时如果我们想强行停止就可以使用该组合键。
- Ctrl-d按键:表示键盘输入结束的意思,它也可以用来取代exit的输入。例如我们想离开命令行模式,就可以使用此组合键。下面是笔者使用Workbench远程连接阿里云服务器的时候按下此组合键的结果:
在线求助
我们使用Linux的时候是不可能把Linux的命令全部记住的,并且有些命令的选项和参数繁多且复杂。我们仅需要记住常用的一些命令即可,但有时候又不可避免地要使用我们不熟悉的命令,这时我们就需要使用到Linux的在线求助功能。所谓的求助功能其实就是几个命令,下面逐个介绍这几个求助的命令。
- --help
我们可以使用命令 --help的方式快速获取所需要的选项、参数的说明以及简单的解释,例如我们想看一下cal命令的用法,如下:
但对于稍复杂的命令,--help就不能解释的很清楚了,例如之前介绍过的bc计算器命令:
--help仅有很简单的解释,对于我们不了解命令的人来说就显得略显不足。--help用在协助查询“曾经使用的命令所具备的选项与参数”,对于从没有用过的命令或是要查询的是文件的格式的时候,就需要使用下面这个命令了。
- man page
这里的man(操作手册)是manual的缩写,因此我们使用这个命令的时候会发现输出了超多的说明。使用的格式是man 命令,例如使用man命令查看cal命令的操作手册如下:
这里可以使用空格键来翻页,使用“/关键词”来查找关键词使用q键来离开man命令环境。首先看到的就是我们要查询的命令(date),命令后面还跟着一个数字,这个数字表示的是这个命令的类型。man page把命令分为以下几种类型:
代号 | 代表内容 |
---|---|
1 | 用户在shell环境中可以操作的命令或可执行文件 |
2 | 系统内核可调用的函数与工具等 |
3 | 一些常用的函数与函数库,大部分为C的函数库 |
4 | 设备文件的说明,通常在/dev下的文件 |
5 | 配置文件或是某些文件的格式 |
6 | 游戏 |
7 | 惯例与协议等,例如Linux文件系统、网络协议、ASCII代码等的说明 |
8 | 系统管理员可用的管理命令 |
9 | 跟内核有关的文件 |
可以看到man把我们要查询的命令的选项和参数都做了详细的解释,左侧有类似标题的地方将手册分成了几个部分,这几个部分的具体说明如下表。
标题 | 内容说明 |
---|---|
NAME | 简短的命令、数据名称说明,例如上图中的display a calendar(显示日历) |
SYNOPSIS | 简短的命令语法简介 |
DESCRIPTION | 较为完整的说明,较重要 |
OPTIONS | 针对SYNOPSIS部分中,有列举的所有可用的选项说明 |
COMMANDS | 当执行后进入该命令的环境的时候,可以在此环境中执行的命令 |
FILES | 这个程序或数据所使用或参考或链接到的文件 |
SEE ALSO | 可以参考跟这个命令或数据有相关的其他说明 |
EXAMPLE | 一些可以参考的范例 |
事实上,笔者在自己的服务器上运行man命令后,标题与上表有些出入,此处仅列出书上介绍的,由于发行版本不同所导致的区别这里笔者就不多介绍了。
- info page
info的用途跟man差不多,都是用来查询命令的用法或是文件的格式。但与man page一口气输出一堆信息不同的是,info page将文件数据拆成一个一个的段落,每个段落用自己的页面来编写,并且在每个页面中还有类似网页的超链接来跳到不同的页面中,每个独立的页面也被称为一个节点。利用使用info来查询info命令的用途,得到以下结果:
其中前面带*号的即表示一个节点,可以看到第一行的Next即表示下一个节点的标题,Up表示上一个阶段。此时我们可以使用n进入到下一个阶段,也可以使用u回到上一个节点。使用Tab键在各个节点之间移动,然后按Enter键可以选择进入某个节点。需要注意的是,info page只能用于以info的格式来写成的(例如info自己),之前介绍过的date、cal等命令使用非info page的格式,因此在使用info date或cal的时候事实上看到的是与man page相同的结果。