Linux 命令行与 shell 脚本编程大全 1.初识Linux shell#yyds干货盘点#
Posted toplabs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 命令行与 shell 脚本编程大全 1.初识Linux shell#yyds干货盘点#相关的知识,希望对你有一定的参考价值。
@toc
1 初识 Linux shell
在深入研究如何使用 Linux 命令行和 shell 之前,最好先了解一下什么是 Linux、它的历史及运作方式。本文将带你逐步了解什么是 Linux,并介绍命令行和 shell 在 Linux 整体架构中的位置。
1.1 什么是 Linux
如果你以前从未接触过 Linux,可能就不清楚为什么会有这么多不同的 Linux 发行版。在查看 Linux 软件包时,你肯定被发行版、LiveCD 和 GNU 之类的术语搞晕过。初次进入 Linux 世界会让人觉得不那么得心应手。本文将为你稍稍揭开 Linux 系统的神秘面纱。
首先,Linux 可划分为以下四部分:
Linux内核
GNU工具
图形化桌面环境
应用软件
每一部分在Linux系统中各司其职。但就单个部分而言,其作用并不大。图1-1是一个基本结构框图,展示了各部分是如何协作起来构成整个 Linux 系统的。
本文将详细介绍这四部分,然后概述它们如何通过协作构成一个完整的 Linux 系统。
::: hljs-center
图1-1 Linux系统
:::
1.1.1 深入探究 Linux 内核
- Linux系统的核心是内核。
- 内核控制着计算机系统上的所有硬件和软件,在必要时分配硬件,并根据需要执行软件。
- Linus Torvalds 在赫尔辛基大学上学时开发了第一版 Linux 内核。
- 内核主要负责以下四种功能:
系统内存管理
软件程序管理
硬件设备管理
文件系统管理
后面将会进一步探究以上每一种功能。1.1.1.1 系统内存管理
- 操作系统内核的主要功能之一就是内存管理。
- 内核不仅管理服务器上的可用物理内存,还可以创建和管理虚拟内存(即实际并不存在的内存)。
- 内核通过硬盘上的存储空间来实现虚拟内存,这块区域称为交换空间(swap space)。
- 内核不断地在交换空间和实际的物理内存之间反复交换虚拟内存中的内容。这使得系统以为它拥有比物理内存更多的可用内存。
::: hljs-center
图1-2 Linux系统内存映射
:::
- 交换示意图(如图1-2所示),可以看出是由内核来统筹三者之间的数据交换。
- 内存存储单元按组划分成很多块,这些块称作页面(page)。
- 内核将每个内存页面放在物理内存或交换空间。
- 内核会维护一个内存页面表,指明哪些页面位于物理内存内,哪些页面被换到了磁盘上。
- 内核会记录哪些内存页面正在使用中,并自动把一段时间未访问的内存页面复制到交换空间区域(称为换出,swapping out)——即使还有可用内存。
- 当程序要访问一个已被换出的内存页面时,内核必须从物理内存换出另外一个内存页面给它让出空间,然后从交换空间换入请求的内存页面。显然,这个过程要花费时间,拖慢运行中的进程。
- 只要Linux系统在运行,为运行中的程序换出内存页面的过程就不会停歇。
1.1.1.2 软件程序管理
- Linux 操作系统将运行中的程序称为进程。
- 进程可以在前台运行,将输入显示在屏幕上,也可以在后台运行,隐藏到幕后。
- Linux 中所有的进程都是由内核控制和管理。
- 内核创建第一个进程 init 进程,用于启动系统上所有其他进程。
- 当内核启动时,它会将init进程加载到虚拟内存中。内核在启动任何其他进程时,都会在虚拟内存中给新进程分配一块专有空间来存储进程用到的数据和代码。
- 在 Linux 系统上,通常通过位于专门文件
/etc/inittab
中的表来管理在系统开机时要自动启动的进程。 - 另外一些系统(比如现在流行的 Ubuntu Linux 发行版)则采用
/etc/init.d
目录,将开机时启动或停止某个应用的脚本放在这个目录下。这些脚本通过/etc/rcX.d
目录下的入口(entry)(这些入口实际上是到/etc/init.d
目录中启动脚本的符号链接)启动,这里的X
代表运行级(run level)。 - Linux 操作系统的 init 系统采用了运行级。运行级决定了init进程运行
/etc/inittab
文件或/etc/rcX.d
目录中定义好的某些特定类型的进程。Linux 操作系统有 5 个启动运行级。- 运行级为1时,只启动基本的系统进程以及一个控制台终端进程。我们称之为单用户模式。单用户模式通常用来在系统有问题时进行紧急的文件系统维护。在这种模式下,仅有一个人(通常是系统管理员)能登录到系统上操作数据。
- 标准的启动运行级是3。在这个运行级上,大多数应用软件,比如网络支持程序。
- 常见的运行级是5,可以运行图形化界面,允许用户通过图形化界面登录系统。
- Linux 系统可以通过调整启动运行级来控制整个系统的功能。通过将运行级从3调整成5,系统就可以从基于控制台的系统变成更先进的图形化系统。
1.1.1.3 硬件设备管理
- 内核可以管理硬件设备。
- 任何 Linux 系统需要与之通信的设备,都需要在内核代码中加入其驱动程序代码。驱动程序代码相当于应用程序和硬件设备的中间人,允许内核与设备之间交换数据。
- 在 Linux 内核中有两种方法用于插入设备驱动代码:
编译进内核的设备驱动代码。每次都要重新编译一遍内核代码,效率低下。
可插入内核的设备驱动模块。可以方便的实现热插拔,无需重新编译内核。 - Linux 系统将硬件设备当成特殊的文件,称为设备文件。设备文件有3种分类:
字符型设备文件。处理数据时每次只能处理一个字符,例如调制解调器、终端等。
块设备文件。处理数据时每次能处理大块数据的设备,比如硬盘。
网络设备文件。采用数据包发送和接收数据的设备,例如网卡。 - Linux 会为每个设备文件创建一个节点,用于对这些设备文件进行唯一标识。
- 每个节点都有唯一的数值对供 Linux 内核标识它。
- 数值对包括一个主设备号和一个次设备号。
- 类似的设备被划分到同样的主设备号下。次设备号用于标识主设备组下的某个特定设备。
1.1.1.4 文件系统管理
- Linux 内核支持通过不同类型的文件系统从硬盘中读写数据。
- Linux 内核采用虚拟文件系统(Virtual File System,VFS)作为和每个文件系统交互的接口。当每个文件系统都被挂载和使用时,VFS 将信息都缓存在内存中。
- 表1-1列出了Linux系统用来读写数据的标准文件系统。Linux服务器所访问的所有硬盘都必须格式化成表1-1所列文件系统类型中的一种。
::: hljs-center
表1-1 Linux文件系统
:::
文件系统 | 描 述 |
---|---|
ext | Linux 扩展文件系统,最早的 Linux 文件系统 |
ext2 | 第二扩展文件系统,在 ext 的基础上提供了更多的功能 |
ext3 | 第三扩展文件系统,支持日志功能 |
ext4 | 第四扩展文件系统,支持高级日志功能 |
hpfs | OS/2 高性能文件系统 |
jfs | IBM 日志文件系统 |
iso9660 | ISO 9660 文件系统(CD-ROM) |
minix | MINIX 文件系统 |
msdos | 微软的 FAT16 |
ncp | Netware 文件系统 |
nfs | 网络文件系统 |
ntfs | 支持 Microsoft NT 文件系统 |
proc | 访问系统信息 |
ReiserFS | 高级 Linux 文件系统,能提供更好的性能和硬盘恢复功能 |
smb | 支持网络访问的 Samba SMB 文件系统 |
sysv | 较早期的 Unix 文件系统 |
ufs | BSD 文件系统 |
umsdos | 建立在 msdos 上的类 Unix 文件系统 |
vfat | Windows 95 文件系统(FAT32) |
XFS | 高性能 64 位日志文件系统 |
1.1.2 GNU 工具
- GNU(GNU’s Not Unix)组织在开源软件(Open Source Software,OSS)的软件理念下开发了一套完整的 Unix 工具。
- 将 Linus 的 Linux 内核和 GNU 操作系统工具整合起来,就产生了一款完整的、功能丰富的免费操作系统。
1.1.2.1 核心 GNU 工具
- GNU 项目的主旨在于为 Unix 系统管理员设计出一套类似于 Unix 的环境。
- 供 Linux 系统使用的这组核心工具被称为 coreutils(core utilities) 软件包。该软件包由三部分构成:
用以处理文件的工具
用以操作文本的工具
用以管理进程的工具1.1.2.2 shell
- GNU/Linux shell 是一种特殊的交互式工具。为用户提供以下功能:
启动程序
管理文件系统中的文件
运行在 Linux 上的进程 - shell 的核心是命令行提示符。
- shell 包含了一组内部命令,用这些命令可以完成诸如复制文件、移动文件、重命名文件、显
示和终止系统中正运行的程序等操作。 - shell 允许你在命令行提示符中输入程序的名称,它会将程序名传递给内核以启动它。
- 将多个 shell 命令放入文件中作为一组命令执行。这些文件被称作 shell 脚本。
- 所有 Linux 发行版默认的 shell 都是 bash shell。是由GNU项目开发,被当作标准 Unix shell——Bourne shell(以创建者的名字命名) 的替代品。
- 表1-2列出了Linux中常见的几种不同 shell。
::: hljs-center
表1-2 Linux shell
:::
shell | 描 述 |
---|---|
ash | 一种运行在内存受限环境中简单的轻量级 shell,但与 bash shell 完全兼容 |
korn | 一种与 Bourne shell 兼容的编程 shell,但支持如关联数组和浮点运算等一些高级的编程特性 |
tcsh | 一种将C语言中的一些元素引入到 shell 脚本中的 shell |
zsh | 一种结合了 bash、tcsh 和 korn 的特性,同时提供高级编程特性、共享历史文件和主题化提示符的高级 shell |
1.1.3 Linux 桌面环境
- 在 Linux 的早期(20世纪90年代初期),能用的只有一个简单的 Linux 操作系统文本界面。
- 随着 Microsoft Windows 的普及,电脑用户已经不再满足于对着老式的文本界面工作了。这推动了OSS社区的更多开发活动,Linux 图形化桌面环境应运而生。
1.1.3.1 X Windows 系统
- 显卡和显示器决定了视频环境。
- X Window 软件是图形显示的核心部分。
- X Window 软件是直接和 PC 上的显卡及显示器打交道的底层程序。
- X Window 软件控制着 Linux 程序如何在电脑上显示出漂亮的窗口和图形。
- 在Linux世界里,能够实现X Window的软件包有以下几种:
- X.org 是最流行的软件包,它提供了 X Window 系统的开源实现,支持当前市面上的很多新显卡。
- Fedora Linux 发行版采用了试验性的 Wayland 软件。
- Ubuntu Linux 发行版开发出了 Mir 显示服务器,用于其桌面环境。
1.1.3.2 KDE 桌面
- KDE(K Desktop Environment,K桌面环境)最初于1996年作为开源项目发布。
- 它会生成一个类似于Microsoft Windows的图形化桌面环境。
- 桌面底部的横条称为面板,由以下四部分构成:
KDE 菜单:和 Windows 的开始菜单非常类似,KDE 菜单包含了启动已安装程序的链接。
程序快捷方式:在面板上有直接从面板启动程序的快速链接。
任务栏:任务栏显示着当前桌面正运行的程序的图标。
小应用程序:面板上还有一些特殊小应用程序的图标,这些图标常常会根据小应用程序
的状态发生变化。
1.1.3.3 GNOME 桌面
- GNOME(the GNU Network Object Model Environment,GNU网络对象模型环境)于 1999 年首次发布。
- 现已成为许多 Linux 发行版默认的桌面环境(不过用得最多的是Red Hat Linux)。
- 集成了许多 Windows 用户习惯的功能:
一块放置图标的桌面区域
两个面板区域
拖放功能
1.1.3.4 Unity 桌面
- 由负责开发 Ubuntu 的公司自行研发的桌面环境。
- 该项目的目标——为工作站、平板电脑以及移动设备提供一致的桌面体验。
1.1.3.5 其他桌面
- 图形化桌面环境的弊端在于它们要占用相当一部分的系统资源来保证正常运行,这和 Linux 诞生的初衷是相违背的。
- 表1-3列出了一些可在配置较低的PC和笔记本电脑上运行的轻量级Linux图形化桌面环境。
::: hljs-center
表1-3 其他Linux图形化桌面
:::
桌 面 | 描 述 |
---|---|
Fluxbox | 一个没有面板的轻型桌面,仅有一个可用来启动程序的弹出式菜单 |
Xfce | 和 KDE 很像的一个桌面,但少了很多图像以适应低内存环境 |
JWM | Joe 的窗口管理器(Joe’s Window Manager),非常适用于低内存低硬盘空间环境的超轻型桌面 |
Fvwm | 支持如虚拟桌面和面板等高级桌面功能,但能够在低内存环境中运行 |
fvwm95 | 从 fvwm 衍生而来,但看起来更像是 Windows 95 桌面 |
1.2 Linux 发行版
- 我们将完整的 Linux 系统包称为发行版。
- 不同的 Linux 发行版通常归类为3种:
完整的核心 Linux 发行版
特定用途的发行版
LiveCD 测试发行版
1.2.1 核心 Linux 发行版
- 含有内核、一个或多个图形化桌面环境以及预编译好的几乎所有能见到的 Linux 应用。
- 提供了一站式的完整Linux安装。
- 表1-4列出了一些较流行的核心Linux发行版。
::: hljs-center
表1-4 核心Linux发行版
:::
发 行 版 | 描 述 |
---|---|
Slackware | 最早的 Linux 发行版中的一员,在 Linux 极客中比较流行 |
Red Hat | 主要用于 Internet 服务器的商业发行版 |
Fedora | 从 Red Hat 分离出的家用发行版 |
Gentoo | 为高级 Linux 用户设计的发行版,仅包含 Linux 源代码 |
openSUSE | 用于商用和家用的发行版 |
Debian | 在 Linux 专家和商用 Linux 产品中流行的发行版 |
1.2.2 特定用途的 Linux 发行版
- 由于核心版体积庞大、配置繁琐,导致安装过程异常复杂,所以出现了针对特性场景使用的 Linux 发行版。
- 除了提供特定软件外(比如仅为商业用户提供的办公应用),定制化发行版还尝试通过自动检测和自动配置常见硬件来帮助新手安装 Linux。
- 表1-5列出了一些特定用途的Linux发行版以及它们的专长。
::: hljs-center
表1-5 特定用途的Linux发行版
:::
发 行 版 | 描 述 |
---|---|
CentOS | 一款基于 Red Hat 企业版 Linux 源代码构建的免费发行版 |
Ubuntu | 一款用于学校和家庭的免费发行版 |
PCLinuxOS | 一款用于家庭和办公的免费发行版 |
Mint | 一款用于家庭娱乐的免费发行版 |
dyne:bolic | 一款用于音频和 MIDI 应用的免费发行版 |
Puppy Linux | 一款适用于老旧 PC 的小型免费发行版 |
1.2.3 Linux LiveCD
- 可以在光驱中通过引导直接运行的 Linux 版本,不需要安装就可以看到 Linux 的具体内容。
- 一些 Linux 发行版创建了含有 Linux 样本系统(称为Linux LiveCD)的可引导 CD。
- 许多特定用途的 Linux 发行版都有对应的 Linux LiveCD 版本。
- 由于是从光驱读取的原因,该版本存在以下两大缺陷:
- 由于要从CD上访问所有东西,应用程序会运行得更慢。
- 由于无法向CD写入数据,对Linux系统作的任何修改都会在重启后失效。
- 有一些Linux LiveCD的改进帮助解决了上述一些问题。这些改进包括:
能将CD上的Linux系统文件复制到内存中
能将系统文件复制到硬盘上
能在U盘上存储系统设置
能在U盘上存储用户设置 - 一些如Puppy Linux的Linux LiveCD,只包含最少数量的 Linux 系统文件。当 CD 引导启动时,LiveCD的启动脚本直接把它们复制到内存中。这样可以在 Linux 启动后立即把 CD 从光驱中取走。这不仅提高了程序运行速度(因为程序从内存中运行时更快),而且还空出了CD光驱。
- 其他Linux LiveCD,如 dyne:bolic Linux LiveCD 采用的是对接技术。从CD引导启动之前把系统文件复制到硬盘里,将核心Linux文件作为一个文件复制到Windows硬盘上。待CD启动后,系统会寻找那个文件,并从中读取系统文件。当然,我们必须在从 CD 引导启动之前把系统文件复制到硬盘里。这样也可以在启动后将 CD 从光驱中拿走。
- 表1-6列出了一些可用的流行 Linux LiveCD。
::: hljs-center
表1-6 Linux LiveCD发行版
:::
发 行 版 | 描 述 |
---|---|
Knoppix | 来自德国的一款 Linux 发行版,也是最早的 LiveCD Linux |
PCLinuxOS | 一款成熟的 LiveCD 形式的 Linux 发行版 |
Ubuntu | 为多种语言设计的世界级 Linux 项目 |
Slax | 基于 Slackware Linux 的一款 LiveCD Linux |
Puppy Linux | 为老旧 PC 设计的一款全功能 Linux |
1.3 小结
- Linux内核是系统的核心,控制着内存、程序和硬件之间的交互。
- GNU工具也是Linux系统中的一个重要部分。
- 现今的Linux可以支持多种图形化桌面环境。
- Linux发行版就是把Linux系统的各个不同部分汇集起来组成一个易于安装的包。
- Linux LiveCD 是一种无需将 Linux 安装到硬盘就能体验 Linux 的发行版。
以上是关于Linux 命令行与 shell 脚本编程大全 1.初识Linux shell#yyds干货盘点#的主要内容,如果未能解决你的问题,请参考以下文章
linux命令行与shell脚本编程大全---bash shell命令
《Linux命令行与shell脚本编程大全》第十七章 创建函数
《Linux命令行与Shell脚本编程大全第2版.布卢姆》pdf