第一章 Linux及Linux Shell简介

1.1 关于Linux

1.1.1 什么是Linux

Linux是自由开源的类Unix操作系统。该操作系统的内核是由莱纳斯·托瓦兹在1991年10月5日首次发布。
严格来讲,术语Linux只表示操作系统的内核本身,但通常采用“Linux内核”来表达该意思。Linux则常用来指基于Linux内核的完整操作系统,包括GUI组件和许多其它实用工具。
Linux最初是作为支持Intel x86架构的个人计算机的一个自由操作系统开发的,目前Linux已经被移植到更多的计算机硬件平台。世界上500个最快的超级计算机90%以上运行Linux发行版或变种,包括最快的前10名超级计算机运行的都是基于Linux内核的操作系统。Linux也广泛应用在嵌入式系统上,如手机、平板电脑、路由器、电视和电子游戏机等。在移动设备上广泛使用的Android操作系统就是基于Linux内核的。

1.1.2 谁创建了Linux

1991年,莱纳斯·托瓦兹开始了那个之后变为Linux 内核的项目。它最初是托瓦兹用于访问大学里的UNIX服务器的一个终端模拟器。他专门为他当时正在使用的硬件写了一个独立于操作系统的程序,因为他想使用他的80386处理器的新计算机的功能。这个程序的开发是在使用GNU C编译器的MINIX操作系统上完成的,即Linux的前身。
如托瓦兹在他的书中《Just for Fun》所写,他最终意识到他编写了一个操作系统内核。1991年8月25日他在Usenet上发布了这个系统。
第一章 Linux及Linux Shell简介_第1张图片

1.1.3 Linux在日常生活中的使用

作为一个杰出的操作系统可以应用于:

  • 台式计算机
  • 网站服务器
  • 软件开发工作站
  • 网络监控工作站
  • 工作组服务器
  • 杀手级网络服务,例如DHCP、防火墙、路由、FTP、SSH、邮件、代理、代理缓存服务器等等。

1.1.4 Linux Kernel是什么

如前面所说,Linux内核,即Linux操作系统的核心。它主要由以下模块组成:

  • 进程管理
  • 定时器
  • 中断管理
  • 内存管理
  • 模块管理
  • 虚拟文件系统接口
  • 文件系统
  • 设备驱动程序
  • 进程间通信
  • 网络管理
  • 系统引导

第一章 Linux及Linux Shell简介_第2张图片

1.1.5 Linux的理念

如之前所述,Linux是类Unix的操作系统,Unix的理念是一套基于Unix操作系统顶级开发者们的经验提出的软件开发的准则和哲学。因此这些理念也同样适用于Linux操作系统。

  • 小即是美
  • 让程序只做好一件事
  • 可移植性比效率更重要
  • 一切即文件 – 适用方便而且把硬件作为文件处理是安全的
  • 使用Shell脚本来提高效率和可移植性
  • 避免使用可定制性低下的用户界面
  • 所有程序都是数据的过滤器

1.2 什么是Linux Shell

Linux Shell是用户和Linux内核之间的接口程序,为用户提供使用操作系统的接口。当从Shell向Linux传递命令时,内核会做出相应的反应。

  • Shell是一个用户程序,或是一个为用户与系统交互提供的环境
  • 它是一个执行从标准输入设备(比如键盘或文件)读入的命令的语言解释程序,它拥有自己内建的Shell命令集,Shell也能被系统中其他应用程序所调用。
  • 当你登录或打开控制台时Shell就会运行
  • Shell不是系统内核的一部分,但是它使用系统内核执行程序,创建文件等
  • 我们可以通过多种方式来访问和使用Shell:
  • 终端 – Linux桌面提供基于GUI的登录系统。一旦登录你就可以通过运行X终端(XTerm)、Gnome终端(GTerm)或KDE终端(KTerm)应用程序来访问Shell。
  • 安全Shell连接(SSH)- 可以通过它远程登录服务器或工作站来访问其Shell。
  • 使用控制台 – 一些Linux系统同样提供基于文本的登录系统。通常情况下,登录系统后就可以直接访问Shell。

1.3 Shell的种类

Linux(Unix或类Unix)中的Shell有多种类型,其中最常用的种类有Bourne Shell(sh)、C Shell、Korn Shell。这三种Shell各有优缺点。

  • Bourne Shell是UNIX最初使用的Shell,并且在每种UNIX上都可以使用。Bourne Shell在Shell编程方面相当优秀,但是在处理与用户的交互方面做的不如其它几种Shell。
  • Bourne-Again Shell(bash)是 Linux系统中最常用的Shell。它是Bourne Shell的扩展,与Bourne Shell完全向后兼容,并且在Bourne Shell的基础上增加、增强了很多特性,具有很多特色,可以提供如命令补全、命令编辑和命令历史等功能,它还包含了很多C Shell和Korn Shell中的优点,有灵活和强大的编程接口,同时又有很有好的用户界面。
  • C Shell(csh)C Shell是一种比Bourne Shell更适于编程的Shell,它的语法和用法和C语言很相似,Linux为喜欢使用C Shell编程的人提供了TCSH。
  • TCSH是与C Shell兼容的增强版本。它包括命令行编辑、可编程单词补全、拼写校正、历史命令替换、作业控制和类似C语言的语法。
  • Korn Shell(ksh)集合了C Shell和Bourne Shell的优点,并和Bourne Shell完全兼容。Linux系统提供了ksh的扩展,它支持任务控制,可以在命令行上挂起、后台执行、唤醒或终止程序。

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

1.4 怎样使用Shell

要使用Shell,你只需简单的输入命令即可,命令即是一个用于执行特定任务的计算机程序。
如果你的系统启动后进入的是文本模式,那么当你登录系统后就可以直接使用Shell,你可以在登录后的Shell中输入命令并执行(命令是为执行特定任务而构建的计算机程序)。
如果你的系统是以图形界面的模式启动的,例如GNOME桌面或是KDE桌面,那么你可以在图形界面中点击“应用程序->系统工具->终端”来打开一个Shell。或者,你可以按“Ctrl-Alt-F1”切换到虚拟控制台并使用你的用户名和密码登陆。若想切换回图形界面模式,可以简单地按“Alr-F7”。
Linux终端提供了一个让你简单地与你的Shell(例如bash)交互的手段。Shell不过是一个解释并执行你在命令行提示符中输入的命令的程序。当你启动GNOME、KDE或X Window终端时,这些应用程序启动你的系统账号中所指定的默认Shell。你可以随时切换到不同的Shell。接下来,我们来简单了解一下Gnome终端的使用和配置。

1.4.1 使用shell提示符

当普通用户成功登录,系统将执行一个Shell程序,Shell进程会提供一个命令行提示符。作为默认值,普通用户用“$”作提示符,超级用户(root)用“#”作提示符。一旦出现了Shell提示符,就可以键入命令名称及命令所需的参数,键入回车后,Shell将执行这些命令。

1.4.2 运行原理

在Shell执行命令时,Shell首先检查命令是否是内部命令,若不是再检查是否是一个应用程序(这里的应用程序可以是Linux本身的实用程序,如date和cat,也可以是购买的商业程序,如rtds,或是自由软件,如emacs),Shell在搜索路径里寻找这些应用程序(搜索路径是一个存放可执行程序的目录列表)。如果键入的命令不是一个内部命令并且在搜索路径里没有找到这个可执行文件,Shell将会显示一条错误信息。如果能够成功找到命令,该命令将被分解为系统调用并传给Linux内核。

1.4.3 Shell快捷键

在Shell下,你可以使用如下按键组合来编辑和回调命令:

  • CTRL + W:删除光标位置前的单词
  • CTRL + U:清空行
  • ↑,↓方向键:查看命令历史
  • Tab:自动补全文件名、目录名和命令等等
  • CTRL + R:搜索先前使用的命令
  • CTRL + C:中止当前命令
  • CTRL + D:退出登录Shell
  • ESC + T:调换光标前的两个单词

1.4.4 结束登录

当用户准备结束登录对话进程时,可以键入logout命令、exit命令或CTRL+D,结束登录。
Linux Shell的另一个重要特性是它自身就是一个解释型的程序设计语言,Shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构等。Shell编程语言简单易学,任何在提示符中能键入的命令都可以放到一个可执行的Shell脚本中。

1.5 Shell脚本是什么?

Shell脚本就像早期dos年代的.bat,最简单的功能就是将许多指令汇整写一起,让使用者很容易的就能够一个操作执行多个命令,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,它提供了数组,循环,条件以及逻辑判断等重要功能,让使用者可以直接以Shell来写程序,比用其他编程语言编写的程序效率更高,毕竟它使用了Linux/Unix下的命令。
Shell脚本是利用Shell的功能所写的一个程序,这个程序是纯文本文件格式,将一些shell的语法与指令写在里面,然后用正则表达式,管道命令以及数据流重定向等功能,以实现我们所需要的功能。

  • Shell脚本是Linux/Unix编程环境的基本组成部分。
  • Shell脚本一般由以下几部分构成:
  • Shell关键字 - 例如if…else,for do…done
  • Shell命令 - 例如export,echo,exit,pwd,return
  • Linux命令 - 例如date,rm,mkdir
  • 文本处理功能 – 例如awk,cut,sed,grep
  • 函数 – 通过函数把一些常用的功能放在一起。例如,/etc/init.d目录中的大部分或全部系统Shell脚本所使用的函数都包含在文件/etc/init.d/functions中。
  • 控制流语句 – 例如if…then…else或执行重复操作的Shell循环。

每个Shell脚本都有它的用途,例如,备份文件系统和数据库到网络存储服务器。Shell脚本可以像Linux下的一个命令一样被执行。

1.6 为什么使用Shell脚本?

Shell脚本的应用知识对于每一个想熟练地管理Linux操作系统的人是必须的,即使你可能从来不必写脚本。比方说在Linux机器启动时,它执行/etc/rc.d目录中的Shell脚本来加载系统配置和运行服务,那么详细的理解这些启动脚本对于我们分析系统的行为或是可能修改这些脚本将是很重要的。
学习编写Shell脚本并不难,因为它的语法简单易懂,类似于直接调用命令行的功能并串联在一起,并且只有几种规则需要学习。大部分简短的脚本可以第一次就正确执行,即使要调试长的脚本也是简单的。
总的来说,我们使用Shell具有如下一些原因:

  • 使用简单
  • 节省时间:可以把冗长的重复的一连串命令合并成一条简单的命令
  • 可以创建你自己的自动化工具和应用程序
  • 使系统管理任务自动化
  • 因为脚本经过很好的测试,所以使用脚本做类似配置服务或系统管理任务的时,发生错误的机会将大大减少
  • 我们经常会用到Shell脚本的实例有:
  • 监控你的Linux系统
  • 备份数据和创建快照
  • 创建邮件告警系统
  • 查找耗尽系统资源的进程
  • 查找是否所有的网络服务都正常运行等等

1.7 与bash手册交互

大多数Linux发行版自带在线手册,可以查找shell命令以及其他GUN实用工具的相关信息。man命令可以访问Linux系统的手册页。在man命令之后跟上想要查看的命令名,就可以显示相应的手册页。示例如下:

man houstname

当使用man命令查看命令手册页的时候,其中的信息是由分页程序(pager)来显示的。分页程序是一种实用工具,能够逐页(或逐行)显示文本。单机空格键进行翻页,或使用enter键逐行查看。也可以使用箭头键向前和向后滚动手册页的内容,如果阅读完毕,可以使用q键退出手册页,然后会重新获得shell CLI提示符。
在命令概要部分中,很多命令采用的基本模式如下:

COMMAND-NAME [OPTION] … [ARGUMENT] …

  1. COMMAND-NAME:是要运行的命令名;
  2. OPTION:是用于修改命令行为的选项。可添加的OPTION(也称作开关)通常不止一个。中括号[ ] 表示OPTION是可选的。并且可以选多个。
  3. ARGUMENT是传递给命令的参数,以指明命令的操作对象。中括号看出也不是必须的,也可以一次指定多个。

提示:如果想使用多个命令选项,那么通常可以将其合并在一起。例如:要使用选项 -a 和 -b,可以写作 -ab。

手册页并非唯一的参考资料。还有另一种称作info页面的信息。可以输入info info来了解info页面的相关内容。
内建页面有自己的帮助页面。有关帮助页面的更多信息,可以输入help help。另外,大多数命令接受-h 或 --help选项。例如,可以输入hostname --help来查看简要的帮助信息。

1.8 浏览文件系统

1.8.1 Linux文件系统

Linux虚拟目录结构只包含一个称为根(root)目录的基础目录。根目录下的目录和文件会按照其访问路径一一列出。
第一章 Linux及Linux Shell简介_第3张图片
常见的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目录值得特别关注,因为该目录时一个次目录层级结构,包含共享的只读文件。会在其中发现用户命令、源代码文件、游戏、等等。
主目录是分配给用户账户的一个特有目录。创建用户时,系统通常会为其分配主目录。

1.8.2 遍历目录

在Linux文件系统中,可以使用目录切换(cd)命令来将shell会话切换到另一个目录。cd命令的语法结构非常简单:

cd destination

cd命令可以接受单个参数_destination_,用以指定你想切换到的目录名。如果没有为cd命令指定目标路径,则会切换到用户目录。
_destination_参数可以用两种方式表示:一种是绝对路径,另一种是相对路径。

  1. 绝对路径

绝对路径定义了在虚拟目录结构中,该目录从根开始的确切位置,相当于目录的全名。绝对路径总是以正斜线(/)作为起始,以指明虚拟文件系统的根目录。绝对路径可以清洗明确地表明用户想切换到的确切位置。要用绝对路径来到达文件系统中的某个特定位置,用户只需要在cd命令后指定完整的路径名即可:

cd /usr/bin

可以使用shell命令中的pwd命令显示shell会话的当前目录,该目录被称为当前工作目录。pwd命令并无参数,直接使用即可。

pwd

返回当前工作目录的绝对路径。
但有时绝对路径会显得冗长,因此有一种更简单的解决方法,相对路径。

  1. 相对路径

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

cd Documents

可以在任何包含子目录的目录中使用带有相对路径的cd命令,也可以使用特殊字符来表示相对目录位置。
有两个特殊字符可用于相对路径中:

  • 单点号(.):表示当前目录;
  • 双点号(…):表示当前目录的父目录。

1.9 小结

我们来总结一下,这一章我们都学习哪些知识:

  • Linux是自由开源的类Unix操作系统。该操作系统的内核是由莱纳斯·托瓦兹在1991年10月5日首次发布。
  • Linux既可以作为服务器操作系统使用,也可以作为个人计算机的独立操作系统使用。
  • Linux内核,即Linux操作系统的核心。它的主要模块分以下几个部分:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等。
  • Linux的主要理念:一个程序只做一件事并做好、一切皆文件、小即是美、在文本文件中存储配置和数据、可移植性高于效率、简单美观。
  • Linux Shell是用户和Linux内核之间的接口程序,为用户提供使用操作系统的接口。
  • Linux中最常用的Shell有Bourne Shell(sh)、C Shell(csh)、Korn Shell(ksh)。
  • 如果你的系统启动后进入的是文本模式,那么当你登录系统后就可以直接使用Shell。
  • Shell脚本是使用纯文本文件,集合了一些Shell的语法和指令,并用正则表示法或管道命令以及数据流重导向等功能,达到我们想要的处理目的的程序。
  • Shell脚本具有使用简单、节省时间、使系统管理自动化等特点。

1.10 作业

制作下载安装虚拟机的md文档,文档内容要求

  1. 下载VMware Workstation的网站;
  2. 安装VMware Workstation的详细流程,截图以及每个步骤的说明;
  3. 下载CentOS7的ISO文件,版本:CentOS-7-x86_64-DVD-2009.iso,下载网址;
  4. 安装CentOS7的详细流程,截图以及每个步骤的说明。

将md文档命名为自己的班级+名字,例如:21云计算1班xxx。
每周日晚8点交。

你可能感兴趣的:(Linux,Shell编程,linux,服务器,网络)