Linux是自由开源的类Unix操作系统。该操作系统的内核是由莱纳斯·托瓦兹在1991年10月5日首次发布。
严格来讲,术语Linux只表示操作系统的内核本身,但通常采用“Linux内核”来表达该意思。Linux则常用来指基于Linux内核的完整操作系统,包括GUI组件和许多其它实用工具。
Linux最初是作为支持Intel x86架构的个人计算机的一个自由操作系统开发的,目前Linux已经被移植到更多的计算机硬件平台。世界上500个最快的超级计算机90%以上运行Linux发行版或变种,包括最快的前10名超级计算机运行的都是基于Linux内核的操作系统。Linux也广泛应用在嵌入式系统上,如手机、平板电脑、路由器、电视和电子游戏机等。在移动设备上广泛使用的Android操作系统就是基于Linux内核的。
1991年,莱纳斯·托瓦兹开始了那个之后变为Linux 内核的项目。它最初是托瓦兹用于访问大学里的UNIX服务器的一个终端模拟器。他专门为他当时正在使用的硬件写了一个独立于操作系统的程序,因为他想使用他的80386处理器的新计算机的功能。这个程序的开发是在使用GNU C编译器的MINIX操作系统上完成的,即Linux的前身。
如托瓦兹在他的书中《Just for Fun》所写,他最终意识到他编写了一个操作系统内核。1991年8月25日他在Usenet上发布了这个系统。
作为一个杰出的操作系统可以应用于:
如前面所说,Linux内核,即Linux操作系统的核心。它主要由以下模块组成:
如之前所述,Linux是类Unix的操作系统,Unix的理念是一套基于Unix操作系统顶级开发者们的经验提出的软件开发的准则和哲学。因此这些理念也同样适用于Linux操作系统。
Linux Shell是用户和Linux内核之间的接口程序,为用户提供使用操作系统的接口。当从Shell向Linux传递命令时,内核会做出相应的反应。
Linux(Unix或类Unix)中的Shell有多种类型,其中最常用的种类有Bourne Shell(sh)、C Shell、Korn Shell。这三种Shell各有优缺点。
Linux中还包括了一些其它的Shell类型,如比较流行的ash和zsh等。但无论哪一种Shell,它最主要的功用都是解译使用者在命令行提示符中输入的指令。在MS-DOS中,也有一种Shell,它的名字是COMMAND.COM,它也用于同样的工作,只是它显然没有Linux Shell这样强大。每种Shell都有它的用途及各自的命令语法和提供不同的内建功能。有些Shell是有专利的,有些则可从互联网上直接免费获得。
我们可以使用如下命令查看系统中所有可用的Shell:
[root@hadoop102 etc]# cat shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
我们看到此文件中包含了多行,每行都是一种Shell,它代表此系统支持多种Shell。那么如何去选择使用哪种shell呢?
用户登录到Linux系统时由/etc/passwd这个文件决定用户将要使用哪种Shell,比如我们来查看root账号在/etc/passwd这个文件中的定义:
[root@hadoop102 ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
我们可以看到在输出结果中,以冒号“:”分隔的最后一个字段就是定义此账号在登录后所使用的Shell,由此可知此实例中,root账号所使用的Shell是bash。
我们还可以使用如下命令来查看账号当前使用的Shell的类型:
[root@hadoop102 ~]# echo $SHELL
/bin/bash
或者:
[root@hadoop102 ~]# ps -p $$
PID TTY TIME CMD
1985 pts/0 00:00:00 bash
要使用Shell,你只需简单的输入命令即可,命令即是一个用于执行特定任务的计算机程序。
如果你的系统启动后进入的是文本模式,那么当你登录系统后就可以直接使用Shell,你可以在登录后的Shell中输入命令并执行(命令是为执行特定任务而构建的计算机程序)。
如果你的系统是以图形界面的模式启动的,例如GNOME桌面或是KDE桌面,那么你可以在图形界面中点击“应用程序->系统工具->终端”来打开一个Shell。或者,你可以按“Ctrl-Alt-F1”切换到虚拟控制台并使用你的用户名和密码登陆。若想切换回图形界面模式,可以简单地按“Alr-F7”。
Linux终端提供了一个让你简单地与你的Shell(例如bash)交互的手段。Shell不过是一个解释并执行你在命令行提示符中输入的命令的程序。当你启动GNOME、KDE或X Window终端时,这些应用程序启动你的系统账号中所指定的默认Shell。你可以随时切换到不同的Shell。接下来,我们来简单了解一下Gnome终端的使用和配置。
当普通用户成功登录,系统将执行一个Shell程序,Shell进程会提供一个命令行提示符。作为默认值,普通用户用“$”作提示符,超级用户(root)用“#”作提示符。一旦出现了Shell提示符,就可以键入命令名称及命令所需的参数,键入回车后,Shell将执行这些命令。
在Shell执行命令时,Shell首先检查命令是否是内部命令,若不是再检查是否是一个应用程序(这里的应用程序可以是Linux本身的实用程序,如date和cat,也可以是购买的商业程序,如rtds,或是自由软件,如emacs),Shell在搜索路径里寻找这些应用程序(搜索路径是一个存放可执行程序的目录列表)。如果键入的命令不是一个内部命令并且在搜索路径里没有找到这个可执行文件,Shell将会显示一条错误信息。如果能够成功找到命令,该命令将被分解为系统调用并传给Linux内核。
在Shell下,你可以使用如下按键组合来编辑和回调命令:
当用户准备结束登录对话进程时,可以键入logout命令、exit命令或CTRL+D,结束登录。
Linux Shell的另一个重要特性是它自身就是一个解释型的程序设计语言,Shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构等。Shell编程语言简单易学,任何在提示符中能键入的命令都可以放到一个可执行的Shell脚本中。
Shell脚本就像早期dos年代的.bat,最简单的功能就是将许多指令汇整写一起,让使用者很容易的就能够一个操作执行多个命令,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,它提供了数组,循环,条件以及逻辑判断等重要功能,让使用者可以直接以Shell来写程序,比用其他编程语言编写的程序效率更高,毕竟它使用了Linux/Unix下的命令。
Shell脚本是利用Shell的功能所写的一个程序,这个程序是纯文本文件格式,将一些shell的语法与指令写在里面,然后用正则表达式,管道命令以及数据流重定向等功能,以实现我们所需要的功能。
每个Shell脚本都有它的用途,例如,备份文件系统和数据库到网络存储服务器。Shell脚本可以像Linux下的一个命令一样被执行。
Shell脚本的应用知识对于每一个想熟练地管理Linux操作系统的人是必须的,即使你可能从来不必写脚本。比方说在Linux机器启动时,它执行/etc/rc.d目录中的Shell脚本来加载系统配置和运行服务,那么详细的理解这些启动脚本对于我们分析系统的行为或是可能修改这些脚本将是很重要的。
学习编写Shell脚本并不难,因为它的语法简单易懂,类似于直接调用命令行的功能并串联在一起,并且只有几种规则需要学习。大部分简短的脚本可以第一次就正确执行,即使要调试长的脚本也是简单的。
总的来说,我们使用Shell具有如下一些原因:
大多数Linux发行版自带在线手册,可以查找shell命令以及其他GUN实用工具的相关信息。man命令可以访问Linux系统的手册页。在man命令之后跟上想要查看的命令名,就可以显示相应的手册页。示例如下:
man houstname
当使用man命令查看命令手册页的时候,其中的信息是由分页程序(pager)来显示的。分页程序是一种实用工具,能够逐页(或逐行)显示文本。单机空格键进行翻页,或使用enter键逐行查看。也可以使用箭头键向前和向后滚动手册页的内容,如果阅读完毕,可以使用q键退出手册页,然后会重新获得shell CLI提示符。
在命令概要部分中,很多命令采用的基本模式如下:
COMMAND-NAME [OPTION] … [ARGUMENT] …
- COMMAND-NAME:是要运行的命令名;
- OPTION:是用于修改命令行为的选项。可添加的OPTION(也称作开关)通常不止一个。中括号[ ] 表示OPTION是可选的。并且可以选多个。
- ARGUMENT是传递给命令的参数,以指明命令的操作对象。中括号看出也不是必须的,也可以一次指定多个。
提示:如果想使用多个命令选项,那么通常可以将其合并在一起。例如:要使用选项 -a 和 -b,可以写作 -ab。
手册页并非唯一的参考资料。还有另一种称作info页面的信息。可以输入info info来了解info页面的相关内容。
内建页面有自己的帮助页面。有关帮助页面的更多信息,可以输入help help。另外,大多数命令接受-h 或 --help选项。例如,可以输入hostname --help来查看简要的帮助信息。
Linux虚拟目录结构只包含一个称为根(root)目录的基础目录。根目录下的目录和文件会按照其访问路径一一列出。
常见的Linux目录名如下表:
目 录 | 用 途 |
---|---|
/ | 虚拟目录的根目录 |
/bin | 二进制文件目录,存放了很多实用级的GUN使用工具 |
/boot | 引导目录,存放引导文件 |
/dev | 设备目录,Linux在其中创建设备节点 |
/etc | 系统配置文件目录 |
/home | 主目录,Linux在其中创建用户目录(可选) |
/lib | 库目录,存放系统和应用程序库文件 |
/libname | 库目录,存放替代合适的系统和应用程序库文件(可选) |
/media | 媒介目录,可移动存储设备的常用挂载点 |
/mnt | 挂载目录,用于临时挂载文件系统的常用挂载点 |
/opt | 可选目录,存放第三方软件包 |
/proc | 进程目录,存放现有内核、系统以及进程的相关信息 |
/root | root用户的主目录(可选) |
/run | 运行目录,存放系统的运行时数据 |
/sbin | 系统二进制文件目录,存放了很多管理级的GUN使用工具 |
/srv | 服务目录,存放本地服务的相关文件 |
/sys | 系统目录,存放设备、驱动程序以及部分内核特征信息 |
/tmp | 临时目录,可以在其中创建和删除临时工作文件 |
/usr | 用户目录,一个次目录层级结构 |
/var | 可变目录,存放经常变化的文件,比如日志文件 |
/usr目录值得特别关注,因为该目录时一个次目录层级结构,包含共享的只读文件。会在其中发现用户命令、源代码文件、游戏、等等。
主目录是分配给用户账户的一个特有目录。创建用户时,系统通常会为其分配主目录。
在Linux文件系统中,可以使用目录切换(cd)命令来将shell会话切换到另一个目录。cd命令的语法结构非常简单:
cd destination
cd命令可以接受单个参数_destination_,用以指定你想切换到的目录名。如果没有为cd命令指定目标路径,则会切换到用户目录。
_destination_参数可以用两种方式表示:一种是绝对路径,另一种是相对路径。
绝对路径定义了在虚拟目录结构中,该目录从根开始的确切位置,相当于目录的全名。绝对路径总是以正斜线(/)作为起始,以指明虚拟文件系统的根目录。绝对路径可以清洗明确地表明用户想切换到的确切位置。要用绝对路径来到达文件系统中的某个特定位置,用户只需要在cd命令后指定完整的路径名即可:
cd /usr/bin
可以使用shell命令中的pwd命令显示shell会话的当前目录,该目录被称为当前工作目录。pwd命令并无参数,直接使用即可。
pwd
返回当前工作目录的绝对路径。
但有时绝对路径会显得冗长,因此有一种更简单的解决方法,相对路径。
相对路径允许指定一个基于当前位置的目标路径。相对路径并不以代表根目录的正斜杠(/)开头,而是以目录名(如果你准备切换到当前工作目录下的某个目录的话)或是一个特殊字符开始。如果位于home目录中,希望切换到到Docunments子目录,那么可以使用cd命令配合相对路径:
cd Documents
可以在任何包含子目录的目录中使用带有相对路径的cd命令,也可以使用特殊字符来表示相对目录位置。
有两个特殊字符可用于相对路径中:
我们来总结一下,这一章我们都学习哪些知识:
制作下载安装虚拟机的md文档,文档内容要求
将md文档命名为自己的班级+名字,例如:21云计算1班xxx。
每周日晚8点交。