Linux命令行与shell脚本编程大全(第3版)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-07 01:23:22

点击下载

作者:布鲁姆(Richard Blum)

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Linux命令行与shell脚本编程大全(第3版)

Linux命令行与shell脚本编程大全(第3版)试读:

引言

欢迎阅读《Linux命令行与shell脚本编程大全(第3版)》。和所有“大全”系列图书一样,本书涵盖了详尽的动手教程和实践信息,还提供了与所学内容相关的参考信息和背景资料。本书是关于Linux命令行和shell命令的相当全面的资源。读完之后,你将可以轻松写出自己的shell脚本来实现Linux系统任务自动化处理。

读者对象

如果你是Linux环境下的系统管理员,那么学会编写shell脚本将让你受益匪浅。本书并未细述安装Linux系统的每个步骤,但只要系统已安装好Linux并能运行起来,你就可以开始考虑如何让一些日常的系统管理任务实现自动化。这时shell脚本编程就能发挥作用了,这也正是本书的作用所在。本书将演示如何使用shell脚本来自动处理系统管理任务,包括从监测系统统计数据和数据文件到为你的老板生成报表。

如果你是家用Linux爱好者,同样能从本书中获益。现今,用户很容易在诸多部件堆积而成的图形环境中迷失。大多数桌面Linux发行版都尽量向一般用户隐藏系统的内部细节。但有时你确实需要知道内部发生了什么。本书将告诉你如何启动Linux命令行以及接下来要做什么。通常,如果是执行一些简单任务(比如文件管理),在命令行下操作要比在华丽的图形界面下方便得多。在命令行下有大量的命令可供使用,本书将会展示如何使用它们。

本书结构

本书将会引领你从认识Linux命令行基础开始,一直到写出自己的shell脚本。全书分成四大部分,每部分都基于前面的内容。

第一部分假定你已经有个能运行的Linux系统,或者正在设法获取Linux系统。第1章“初识Linux shell”,描述了构成整个Linux系统的各个部分,并且说明了shell是如何融入Linux的。在介绍了Linux系统的基础知识之后,接着继续探讨以下内容:● 使用终端仿真包来访问shell(第2章);● 介绍基本的shell命令(第3章);● 使用更高级的shell命令来窥探系统信息(第4章);● 理解shell的用途(第5章);● 使用shell变量来操作数据(第6章);● 理解Linux文件系统和安全(第7章);● 在命令行上使用Linux文件系统(第8章);● 在命令行上安装和更新软件(第9章);● 使用Linux编辑器编写shell脚本(第10章)。

第二部分将从编写shell脚本开始,具体内容如下:● 学习如何创建和运行shell脚本(第11章);● 改变shell脚本中程序的流程(第12章);● 迭代代码片段(第13章);● 在脚本中处理用户输入的数据(第14章);● 了解在脚本中存储和显示数据的不同方法(第15章);● 控制脚本在系统中运行的方式和时机(第16章)。

第三部分深入探讨了shell脚本编程的更高级话题,其中包括:● 在脚本中创建自己的函数(第17章);● 利用Linux图形化桌面来和脚本用户交互(第18章);● 使用高级Linux命令过滤和解析数据文件(第19章);● 使用正则表达式来定义数据(第20章);● 学习在脚本中操作数据的高级方法(第21章);● 从原始数据生成报表(第22章);● 修改shell脚本,使其能在其他Linux shell中运行(第23

章)。

本书的第四部分演示了如何在现实环境中使用shell脚本。在这部分,你将:● 学习如何将各种脚本特性融入自己的脚本中(第24章);● 学习如何使用数据库保存、检索数据,如何访问互联网上的

数据以及发送电子邮件(第25章);● 编写与Linux系统交互的高级脚本(第26章)。

警告、窍门与说明

为帮助读者更好地理解本书内容,全书进行了很多不同的组织和排版上的处理。警告 这部分信息很重要,所以放在单独的段落里,并采用了特殊的排版。“警告”部分介绍了要特别注意的信息,不管是不便之处,还是对数据和系统潜在的危害,都囊括在内。

 窍门 这部分提供了有益的建议,能够简化你的操作,提升工作效率。“窍门”部分也会提出可行的问题解决方案或某项任务更好的处理方法。

 说明 这部分提供了有用的补充或辅助信息,不过有些偏离当前讲述的主题。

代码下载

可以从http://www.wiley.com/go/linuxcommandline下载本书的代码文件。

最低需求

本书并不局限于某种特定的Linux发行版,你可以使用任何可用的Linux系统来跟着书中的进度学习。书中大部分内容都采用了bash shell,这是多数Linux系统的默认shell。

下一步做什么

读完本书之后,你就已经可以在日常工作中得心应手地运用Linux命令了。在不断变化的Linux世界,我们最好能不断了解Linux的最新发展。Linux发行版会有变动,增加新的功能,移除过时的功能。经常关注Linux方面的资讯,不断更新你的Linux知识体系。找一个不错的Linux论坛,关注一下Linux世界的最新动态。有很多流行的Linux新闻站点都能提供有关Linux新进展的及时资讯,比如Slashdot和Distrowatch。

致谢

首先,所有的荣誉和赞美都献给上帝。是他通过他的儿子耶稣,让这一切成为可能,并赐予我们永生。

非常感谢John Wiley & Sons出版团队的诸位为本书作出的突出贡献。感谢前组稿编辑Mary James为我们提供写作本书的机会。感谢策划编辑Brian Herrmann保证本书的写作顺利进行,并将内容更好地呈现给读者。感谢Marty的努力和勤勉。本书的技术编辑Kevin E. Ryan为保证本书的内容正确作出了卓越贡献,并对本书内容提出了若干改进建议。感谢本书的文字编辑Gwenette Gaddis,她的耐心和努力使得本书的可读性更强。还要感谢Waterside Productions公司的Carole McClendon为我们安排本书的写作事务,并在写作道路上给予了我们很大的帮助。

在此,Christine还想感谢她的先生Timothy,感谢他的鼓励、耐心和倾听,即使他并不理解她说的是什么,也能全心支持她。第一部分Linux 命令行本部分内容● 第 1 章 初识 Linux shell● 第 2 章 走进 shell● 第 3 章 基本的 bash shell 命令● 第 4 章 更多的 bash shell 命令● 第 5 章 理解 shell● 第 6 章 使用 Linux 环境变量● 第 7 章 理解 Linux 文件权限● 第 8 章 管理文件系统● 第 9 章 安装软件程序● 第 10 章 使用编辑器第 1 章 初识Linux shell本章内容● 什么是Linux● Linux内核的组成● 探索Linux桌面● 了解Linux发行版

在深入研究如何使用Linux命令行和shell之前,最好先了解一下什么是Linux、它的历史及运作方式。本章将带你逐步了解什么是Linux,并介绍命令行和shell在Linux整体架构中的位置。1.1 什么是Linux

如果你以前从未接触过Linux,可能就不清楚为什么会有这么多不同的Linux发行版。在查看Linux软件包时,你肯定被发行版、LiveCD和GNU之类的术语搞晕过。初次进入Linux世界会让人觉得不那么得心应手。在开始学习命令和脚本之前,本章将为你稍稍揭开Linux系统的神秘面纱。

首先,Linux可划分为以下四部分:● Linux内核● GNU工具● 图形化桌面环境● 应用软件

每一部分在Linux系统中各司其职。但就单个部分而言,其作用并不大。图1-1是一个基本结构框图,展示了各部分是如何协作起来构成整个Linux系统的。

本节将详细介绍这四部分,然后概述它们如何通过协作构成一个完整的Linux系统。图 1-1 Linux系统1.1.1 深入探究Linux内核

Linux系统的核心是内核。内核控制着计算机系统上的所有硬件和软件,在必要时分配硬件,并根据需要执行软件。

如果你一直都在关注Linux世界,肯定听说过Linus Torvalds。Linus还在赫尔辛基大学上学时就开发了第一版Linux内核。起初他只是想仿造一款Unix系统而已,因为当时Unix操作系统在很多大学都很流行。

Linus完成了开发工作后,将Linux内核发布到了互联网社区,并征求改进意见。这个简单的举动引发了计算机操作系统领域内的一场革命。很快,Linus就收到了来自世界各地的学生和专业程序员的各种建议。

如果谁都可以修改内核程序代码,那么随之而来的将是彻底的混乱。为了简单起见,Linus担当起了所有改进建议的把关员。能否将建议代码并入内核完全取决于Linus。时至今日,这种概念依然在Linux内核代码开发过程中沿用,不同的是,现在是由一组开发人员来做这件事,而不再是Linus一个人。

内核主要负责以下四种功能:● 系统内存管理● 软件程序管理● 硬件设备管理● 文件系统管理

后面几节将会进一步探究以上每一种功能。

1. 系统内存管理

操作系统内核的主要功能之一就是内存管理。内核不仅管理服务器上的可用物理内存,还可以创建和管理虚拟内存(即实际并不存在的内存)。

内核通过硬盘上的存储空间来实现虚拟内存,这块区域称为交换空间(swap space)。内核不断地在交换空间和实际的物理内存之间反复交换虚拟内存中的内容。这使得系统以为它拥有比物理内存更多的可用内存(如图1-2所示)。图 1-2 Linux系统内存映射

内存存储单元按组划分成很多块,这些块称作页面(page)。内核将每个内存页面放在物理内存或交换空间。然后,内核会维护一个内存页面表,指明哪些页面位于物理内存内,哪些页面被换到了磁盘上。

内核会记录哪些内存页面正在使用中,并自动把一段时间未访问的内存页面复制到交换空间区域(称为换出,swapping out)——即使还有可用内存。当程序要访问一个已被换出的内存页面时,内核必须从物理内存换出另外一个内存页面给它让出空间,然后从交换空间换入请求的内存页面。显然,这个过程要花费时间,拖慢运行中的进程。只要Linux系统在运行,为运行中的程序换出内存页面的过程就不会停歇。

2. 软件程序管理

Linux操作系统将运行中的程序称为进程。进程可以在前台运行,将输出显示在屏幕上,也可以在后台运行,隐藏到幕后。内核控制着Linux系统如何管理运行在系统上的所有进程。

内核创建了第一个进程(称为init进程)来启动系统上所有其他进程。当内核启动时,它会将init进程加载到虚拟内存中。内核在启动任何其他进程时,都会在虚拟内存中给新进程分配一块专有区域来存储该进程用到的数据和代码。

一些Linux发行版使用一个表来管理在系统开机时要自动启动的进程。在Linux系统上,这个表通常位于专门文件etcinittab中。

另外一些系统(比如现在流行的Ubuntu Linux发行版)则采用etcinit.d目录,将开机时启动或停止某个应用的脚本放在这个目录1下。这些脚本通过etcrcX.d目录下的入口(entry)启动,这里的X代表运行级(run level)。

1. 这些入口实际上是到etcinit.d目录中启动脚本的符号链接。——译者注(后文若无特殊说明,脚注均为“译者注”。)

Linux操作系统的init系统采用了运行级。运行级决定了init进程运行etcinittab文件或etcrcX.d目录中定义好的某些特定类型的进程。Linux操作系统有5个启动运行级。

运行级为1时,只启动基本的系统进程以及一个控制台终端进程。我们称之为单用户模式。单用户模式通常用来在系统有问题时进行紧急的文件系统维护。显然,在这种模式下,仅有一个人(通常是系统管理员)能登录到系统上操作数据。

标准的启动运行级是3。在这个运行级上,大多数应用软件,比如网络支持程序,都会启动。另一个Linux中常见的运行级是5。在这个运行级上系统会启动图形化的X Window系统,允许用户通过图形化桌面窗口登录系统。

Linux系统可以通过调整启动运行级来控制整个系统的功能。通过将运行级从3调整成5,系统就可以从基于控制台的系统变成更先进的图形化X Window系统。

在第4章,你将会学习如何使用ps命令查看当前运行在Linux系统上的进程。

3. 硬件设备管理

内核的另一职责是管理硬件设备。任何Linux系统需要与之通信的设备,都需要在内核代码中加入其驱动程序代码。驱动程序代码相当于应用程序和硬件设备的中间人,允许内核与设备之间交换数据。在Linux内核中有两种方法用于插入设备驱动代码:● 编译进内核的设备驱动代码● 可插入内核的设备驱动模块

以前,插入设备驱动代码的唯一途径是重新编译内核。每次给系统添加新设备,都要重新编译一遍内核代码。随着Linux内核支持的硬件设备越来越多,这个过程变得越来越低效。不过好在Linux开发人员设计出了一种更好的将驱动代码插入运行中的内核的方法。

开发人员提出了内核模块的概念。它允许将驱动代码插入到运行中的内核而无需重新编译内核。同时,当设备不再使用时也可将内核模块从内核中移走。这种方式极大地简化和扩展了硬件设备在Linux上的使用。

Linux系统将硬件设备当成特殊的文件,称为设备文件。设备文件有3种分类:● 字符型设备文件● 块设备文件● 网络设备文件

字符型设备文件是指处理数据时每次只能处理一个字符的设备。大多数类型的调制解调器和终端都是作为字符型设备文件创建的。块设备文件是指处理数据时每次能处理大块数据的设备,比如硬盘。

网络设备文件是指采用数据包发送和接收数据的设备,包括各种网卡和一个特殊的回环设备。这个回环设备允许Linux系统使用常见的网络编程协议同自身通信。

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

4. 文件系统管理

不同于其他一些操作系统,Linux内核支持通过不同类型的文件系统从硬盘中读写数据。除了自有的诸多文件系统外,Linux还支持从其他操作系统(比如Microsoft Windows)采用的文件系统中读写数据。内核必须在编译时就加入对所有可能用到的文件系统的支持。表1-1列出了Linux系统用来读写数据的标准文件系统。表 1-1 Linux文件系统文件系统描述extLinux扩展文件系统,最早的Linux文件系统第二扩展文件系统,在ext的基础上提供了更多的ext2功能ext3第三扩展文件系统,支持日志功能ext4第四扩展文件系统,支持高级日志功能hpfsOS/2高性能文件系统jfsIBM日志文件系统iso9660ISO 9660文件系统(CD-ROM)minixMINIX文件系统msdos微软的FAT16ncpNetware文件系统nfs网络文件系统ntfs支持Microsoft NT文件系统proc访问系统信息ReiserF高级Linux文件系统,能提供更好的性能和硬盘恢S复功能smb支持网络访问的Samba SMB文件系统sysv较早期的Unix文件系统ufsBSD文件系统umsdos建立在msdos上的类Unix文件系统vfatWindows 95文件系统(FAT32)XFS高性能64位日志文件系统

Linux服务器所访问的所有硬盘都必须格式化成表1-1所列文件系统类型中的一种。

Linux内核采用虚拟文件系统(Virtual File System,VFS)作为和每个文件系统交互的接口。这为Linux内核同任何类型文件系统通信提供了一个标准接口。当每个文件系统都被挂载和使用时,VFS将信息都缓存在内存中。1.1.2 GNU工具

除了由内核控制硬件设备外,操作系统还需要工具来执行一些标准功能,比如控制文件和程序。Linus在创建Linux系统内核时,并没有可用的系统工具。然而他很幸运,就在开发Linux内核的同时,有一群人正在互联网上共同努力,模仿Unix操作系统开发一系列标准的计算机系统工具。

GNU组织(GNU是GNU's Not Unix的缩写)开发了一套完整的Unix工具,但没有可以运行它们的内核系统。这些工具是在名为开源软件(open source software,OSS)的软件理念下开发的。

开源软件理念允许程序员开发软件,并将其免费发布。任何人都可以使用、修改该软件,或将该软件集成进自己的系统,无需支付任何授权费用。将Linus的Linux内核和GNU操作系统工具整合起来,就产生了一款完整的、功能丰富的免费操作系统。

尽管通常将Linux内核和GNU工具的结合体称为Linux,但你也会在互联网上看到一些Linux纯粹主义者将其称为GNU/Linux系统,藉此向GNU组织所作的贡献致意。

1. 核心GNU工具

GNU项目的主旨在于为Unix系统管理员设计出一套类似于Unix的环境。这个目标促使该项目移植了很多常见的Unix系统命令行工具。供Linux系统使用的这组核心工具被称为coreutils(core utilities)软件包。

GNU coreutils软件包由三部分构成:● 用以处理文件的工具● 用以操作文本的工具● 用以管理进程的工具

这三组主要工具中的每一组都包含一些对Linux系统管理员和程序员至关重要的工具。本书将详细介绍GNU coreutils软件包中包含的所有工具。

2. shell

GNU/Linux shell是一种特殊的交互式工具。它为用户提供了启动程序、管理文件系统中的文件以及运行在Linux系统上的进程的途径。shell的核心是命令行提示符。命令行提示符是shell负责交互的部分。它允许你输入文本命令,然后解释命令,并在内核中执行。

shell包含了一组内部命令,用这些命令可以完成诸如复制文件、移动文件、重命名文件、显示和终止系统中正运行的程序等操作。shell也允许你在命令行提示符中输入程序的名称,它会将程序名传递给内核以启动它。

你也可以将多个shell命令放入文件中作为程序执行。这些文件被称作shell脚本。你在命令行上执行的任何命令都可放进一个shell脚本中作为一组命令执行。这为创建那种需要把几个命令放在一起来工作的工具提供了便利。

在Linux系统上,通常有好几种Linux shell可用。不同的shell有不同的特性,有些更利于创建脚本,有些则更利于管理进程。所有Linux发行版默认的shell都是bash shell。bash shell由GNU项目开发,被当作标准Unix shell——Bourne shell(以创建者的名字命名)的替代品。bash shell的名称就是针对Bourne shell的拼写所玩的一个文字游戏,称为Bourne again shell。

除了bash shell,本书还将介绍其他几种常见的shell。表1-2列出了Linux中常见的几种不同shell。表 1-2 Linux shellshell描述一种运行在内存受限环境中简单的轻量级shell,ash但与bash shell完全兼容一种与Bourne shell兼容的编程shell,但支持如关korn联数组和浮点运算等一些高级的编程特性一种将C语言中的一些元素引入到shell脚本中的tcshshell一种结合了bash、tcsh和korn的特性,同时提供高zsh级编程特性、共享历史文件和主题化提示符的高级shell

大多数Linux发行版包含多个shell,但它们通常会采用其中一个作为默认shell。如果你的Linux发行版包含多个shell,就请尽情尝试不同的shell,看看哪个能满足你的需要。1.1.3 Linux桌面环境

在Linux的早期(20世纪90年代初期),能用的只有一个简单的Linux操作系统文本界面。这个文本界面允许系统管理员运行程序,控制程序的执行,以及在系统中移动文件。

随着Microsoft Windows的普及,电脑用户已经不再满足于对着老式的文本界面工作了。这推动了OSS社区的更多开发活动,Linux图形化桌面环境应运而生。

完成工作的方式不止一种,Linux一直以来都以此而闻名。在图形化桌面上更是如此。Linux有各种图形化桌面可供选择。后面几节将会介绍其中一些比较流行的桌面。

1. X Window系统

有两个基本要素决定了视频环境:显卡和显示器。要在电脑上显示绚丽的画面,Linux软件就得知道如何与这两者互通。X Window软件是图形显示的核心部分。

X Window软件是直接和PC上的显卡及显示器打交道的底层程序。它控制着Linux程序如何在电脑上显示出漂亮的窗口和图形。

Linux并非唯一使用X Window的操作系统,它有针对不同操作系统的版本。在Linux世界里,能够实现X Window的软件包可不止一种。

其中最流行的软件包是X.org。它提供了X Window系统的开源实现,支持当前市面上的很多新显卡。

另外两个X Window软件包也日渐流行。Fedora Linux发行版采用了试验性的Wayland软件;Ubuntu Linux发行版开发出了Mir显示服务器,用于其桌面环境。

在首次安装Linux发行版时,它会检测显卡和显示器,然后创建一个含有必要信息的X Window配置文件。在安装过程中,你可能会注意到安装程序会检测一次显示器,以此来确定所支持的视频模式。有时这会造成显示器黑屏几秒。由于现在有多种不同类型的显卡和显示器,这个过程可能会需要一段时间来完成。

核心的X Window软件可以产生图形化显示环境,但仅此而已。虽然对于运行独立应用这已经足够,但在日常PC使用中却并不是那么有用。它没有桌面环境供用户操作文件或是开启程序。为此,你需要一个建立在X Window系统软件之上的桌面环境。

2. KDE桌面

KDE(K Desktop Environment,K桌面环境)最初于1996年作为开源项目发布。它会生成一个类似于Microsoft Windows的图形化桌面环境。如果你是Windows用户,KDE就集成了所有你熟悉的功能。图1-3展示了运行在openSuSE Linux发行版上的KDE 4桌面。图 1-3 openSuSE Linux系统上的KDE 4桌面

KDE桌面允许你把应用程序图标和文件图标放置在桌面的特定位置上。单击应用程序图标,Linux系统就会运行该应用程序。单击文件图标,KDE桌面就会确定使用哪种应用程序来处理该文件。

桌面底部的横条称为面板,由以下四部分构成。● KDE菜单:和Windows的开始菜单非常类似,KDE菜单包含

了启动已安装程序的链接。● 程序快捷方式:在面板上有直接从面板启动程序的快速链

接。● 任务栏:任务栏显示着当前桌面正运行的程序的图标。● 小应用程序:面板上还有一些特殊小应用程序的图标,这些

图标常常会根据小应用程序的状态发生变化。

所有的面板功能都和你在Windows上看到的类似。除了桌面功能,KDE项目还开发了大量的可运行在KDE环境中的应用程序。

3. GNOME桌面

GNOME(the GNU Network Object Model Environment,GNU网络对象模型环境)是另一个流行的Linux桌面环境。GNOME于1999年首次发布,现已成为许多Linux发行版默认的桌面环境(不过用得最多的是Red Hat Linux)。

尽管GNOME决定不再沿用Microsoft Windows的标准观感(look-and-feel),但它还是集成了许多Windows用户习惯的功能:● 一块放置图标的桌面区域● 两个面板区域● 拖放功能

图1-4展示了CentOS Linux发行版采用的标准GNOME桌面。图 1-4 CentOS Linux系统上的GNOME桌面

GNOME开发人员不甘示弱于KDE,也开发了一批集成进GNOME桌面的图形化程序。

4. Unity桌面

如果你用的是Ubuntu Linux发行版,你会注意到它与KDE和GNOME桌面环境有些不一样。准确来说,这是因为负责开发Ubuntu的公司决定采用自己的一套叫作Unity的Linux桌面环境。

Unity桌面得名于该项目的目标——为工作站、平板电脑以及移动设备提供一致的桌面体验。不管你是在工作站还是在手机上使用Ubuntu,Unity桌面的使用方式都是一样的。图1-5展示了Ubuntu 14.04 LTS中的Unity桌面。图 1-5 Ubuntu Linux系统上的Unity桌面

5. 其他桌面

图形化桌面环境的弊端在于它们要占用相当一部分的系统资源来保证正常运行。在Linux发展之初,Linux的标志和卖点之一就是它可以运行在处理能力较弱的老旧PC上,这些PC无力运行较新的微软桌面。然而随着KDE和GNOME桌面环境的普及,情况发生了变化。运行KDE或GNOME桌面要占用的内存资源和微软的最新桌面环境旗鼓相当。

如果你的PC已经有些年代了,也不要泄气。Linux开发人员已经联手让Linux返璞归真。他们开发了一些低内存开销的图形化桌面应用,提供了能够在老旧PC上完美运行的基本功能。尽管这些图形化桌面环境并没有大量专为其设计的应用,但它们仍然能运行许多基本的图形化程序,支持如文字处理、电子表格、数据库、绘图以及多媒体等功能。

表1-3列出了一些可在配置较低的PC和笔记本电脑上运行的轻量级Linux图形化桌面环境。表 1-3 其他Linux图形化桌面桌面描述一个没有面板的轻型桌面,仅有一个可用来启动Fluxbox程序的弹出式菜单和KDE很像的一个桌面,但少了很多图像以适应Xfce低内存环境Joe的窗口管理器(Joe's Window Manager),非JWM常适用于低内存低硬盘空间环境的超轻型桌面支持如虚拟桌面和面板等高级桌面功能,但能够Fvwm在低内存环境中运行从fvwm衍生而来,但看起来更像是Windows 95桌fvwm95面

这些图形化桌面环境并不如KDE或GNOME桌面一样绚丽,但却提供了恰到好处的基本图形化功能。图1-6展示了Puppy Linux antiX发行版所采用的JWM桌面的外观。图 1-6 Puppy Linux发行版所采用的JWM桌面

如果你用的是老旧PC,尝试一下基于上述某个桌面环境的Linux发行版,看看怎么样,可能会有惊喜哦。1.2 Linux发行版

到此为止,你已经了解了构成完整Linux系统所需要的4个关键部件,那你可能在考虑要怎样才能把它们组成一个Linux系统。幸运的是,已经有人为你做好这些了。

我们将完整的Linux系统包称为发行版。有很多不同的Linux发行版来满足可能存在的各种运算需求。大多数发行版是为某个特定用户群定制的,比如商业用户、多媒体爱好者、软件开发人员或者普通家庭用户。每个定制的发行版都包含了支持特定功能所需的各种软件包,比如为多媒体爱好者准备的音频和视频编辑软件,为软件开发人员准备的编译器和集成开发环境(IDE)。

不同的Linux发行版通常归类为3种:● 完整的核心Linux发行版● 特定用途的发行版● LiveCD测试发行版

后面几节将会探讨这些不同类型的Linux发行版,然后展示每种类型中一些Linux发行版示例。1.2.1 核心Linux发行版

核心Linux发行版含有内核、一个或多个图形化桌面环境以及预编译好的几乎所有能见到的Linux应用。它提供了一站式的完整Linux安装。表1-4列出了一些较流行的核心Linux发行版。表 1-4 核心Linux发行版发行版描  述Slackwar最早的Linux发行版中的一员,在Linux极客中比较e流行Red Hat主要用于Internet服务器的商业发行版Fedora从Red Hat分离出的家用发行版为高级Linux用户设计的发行版,仅包含Linux源代Gentoo码openSU用于商用和家用的发行版SEDebian在Linux专家和商用Linux产品中流行的发行版

在Linux的早期,发行版是作为一叠软盘发布的。你必须下载多组文件,然后将其复制到软盘上。通常要用20张或更多的软盘来创建一个完整的发行版!毋庸多言,这是个痛苦的过程。

现今,家用电脑基本都有内置的CD和DVD光驱,Linux发行版也就用一组CD光盘或单张DVD光盘来发布。这大大简化了Linux的安装过程。

然而当新手在安装核心Linux发行版时,仍然经常遇到各种各样的问题。为了照顾到Linux用户的所有使用情景,单个发行版必须包含很多应用软件。从高端的Internet数据库服务器到常见的游戏,可谓应用尽有。鉴于Linux上可用应用程序的数量,一个完整的发行版通常至少要4张CD。

尽管发行版中的大量可选配置对Linux极客来说是好事,但对新手来说就是一场噩梦。多数发行版会在安装过程中询问一系列问题,以决定哪些应用要默认加载、PC上连接了哪些硬件以及怎样配置硬件设备。新手经常会被这些问题困扰,因此,他们经常是要么加载了过多的程序,要么没有加载够,到后来才发现计算机并没有按照他们预想的方式工作。

对新手来说,幸运的是,安装Linux还有更简便的方法。1.2.2 特定用途的Linux发行版

Linux发行版的一个新子群已经出现了。它们通常基于某个主流发行版,但仅包含主流发行版中一小部分用于某种特定用途的应用程序。

除了提供特定软件外(比如仅为商业用户提供的办公应用),定制化发行版还尝试通过自动检测和自动配置常见硬件来帮助新手安装Linux。这使得Linux的安装过程轻松愉悦了许多。

表1-5列出了一些特定用途的Linux发行版以及它们的专长。

这只是特定用途的Linux发行版中的一小部分而已。像这样的发行版足有上百款,而且在互联网上还不断有新的成员加入。不管你的专长是什么,你都能找到一款为你量身定做的Linux发行版。表 1-5 特定用途的Linux发行版发行版描述一款基于Red Hat企业版Linux源代码构建的免费发CentOS行版Ubuntu一款用于学校和家庭的免费发行版PCLinux一款用于家庭和办公的免费发行版OSMint一款用于家庭娱乐的免费发行版dyne:一款用于音频和MIDI应用的免费发行版bolicPuppy 一款适用于老旧PC的小型免费发行版Linux

许多特定用途的Linux发行版都是基于Debian Linux。它们使用和Debian一样的安装文件,但仅打包了完整Debian系统中的一小部分。1.2.3 Linux LiveCD

Linux世界中一个相对较新的现象是可引导的Linux CD发行版的出现。它无需安装就可以看到Linux系统是什么样的。多数现代PC都能从CD启动,而不是必须从标准硬盘启动。基于这点,一些Linux发行版创建了含有Linux样本系统(称为Linux LiveCD)的可引导CD。由于单张CD容量的限制,这个样本并非完整的Linux系统,不过令人惊喜的是,你可以自己加入各种软件。结果就是,你可以通过CD来启动PC,并且无需在硬盘安装任何东西就能运行Linux发行版。

这是一个不弄乱PC就体验各种Linux发行版的绝妙方法。只需插入CD就能引导了!所有的Linux软件都将直接从CD上运行。你可以从互联网上下载各种Linux LiveCD,刻录,然后体验。

表1-6列出了一些可用的流行Linux LiveCD。表 1-6 Linux LiveCD发行版发行版描述来自德国的一款Linux发行版,也是最早的LiveCD KnoppixLinuxPCLinux一款成熟的LiveCD形式的Linux发行版OSUbuntu为多种语言设计的世界级Linux项目Slax基于Slackware Linux的一款LiveCD LinuxPuppy 为老旧PC设计的一款全功能LinuxLinux

你能在这张表中看到熟悉的面孔。许多特定用途的Linux发行版都有对应的Linux LiveCD版本。一些Linux LiveCD发行版,比如Ubuntu,允许直接从LiveCD安装整个发行版。这使你可以从CD引导启动,先体验一下此Linux发行版,如果喜欢的话,再把它安装到硬盘上。这个功能极其方便易用。

就像所有美好的事物一样,Linux LiveCD也有一些不足之处。由于要从CD上访问所有东西,应用程序会运行得更慢,而如果再搭配上陈旧缓慢的PC和光驱,那更是慢上加慢。还有,由于无法向CD写入数据,对Linux系统作的任何修改都会在重启后失效。

不过,有一些Linux LiveCD的改进帮助解决了上述一些问题。这些改进包括:● 能将CD上的Linux系统文件复制到内存中;● 能将系统文件复制到硬盘上;● 能在U盘上存储系统设置;● 能在U盘上存储用户设置。

一些Linux LiveCD,如Puppy Linux,只包含最少数量的Linux系统文件。当CD引导启动时,LiveCD的启动脚本直接把它们复制到内存中。这允许在Linux启动后立即把CD从光驱中取走。这不仅提高了程序运行速度(因为程序从内存中运行时更快),而且还空出了CD光驱,供你用Puppy Linux自带的软件转录音频CD或播放视频DVD。

其他Linux LiveCD用另外的方法,同样允许你在启动后将CD从光驱中拿走。这种方法是将核心Linux文件作为一个文件复制到Windows硬盘上。待CD启动后,系统会寻找那个文件,并从中读取系统文件。dyne:bolic Linux LiveCD采用的就是这种技术,我们称之为对接。当然,你必须在从CD引导启动之前把系统文件复制到硬盘里。

一种非常流行的技术就是用常见的U盘(也称为闪存或闪盘)来存储Linux LiveCD会话数据。几乎每个Linux LiveCD都能识别插入的U盘(即使是在Windows下格式化的)并从U盘上读写文件。这允许你启动Linux LiveCD,使用Linux应用来创建文件,再将这些文件存储在U盘上,然后用Windows应用(或者在另外一台电脑上)访问这些文件。这该有多酷!1.3 小结

本章探讨了Linux系统及其基本工作原理。Linux内核是系统的核心,控制着内存、程序和硬件之间的交互。GNU工具也是Linux系统中的一个重要部分。本书关注的焦点Linux shell是GNU核心工具集中的一部分。本章还讨论了Linux系统中的最后一个组件:Linux桌面环境。随着时间推移,一切都发生了改变。现今的Linux可以支持多种图形化桌面环境。

本章还探讨了各种Linux发行版。Linux发行版就是把Linux系统的各个不同部分汇集起来组成一个易于安装的包。Linux发行版有囊括各种软件的成熟的Linux发行版,也有只包含针对某种特定功能软件包的特定用途发行版。Linux LiveCD则是一种无需将Linux安装到硬盘就能体验Linux的发行版。

下一章将开始了解启动命令行和shell脚本编程体验所需的基本知识。你将了解如何从绚丽的图形化桌面环境获得Linux shell工具。就目前而言,这绝非易事。第 2 章  走进shell本章内容● 访问命令行● 通过Linux控制台终端访问CLI● 通过图形化终端仿真器访问CLI● 使用GNOME终端仿真器● 使用Konsole终端仿真器● 使用xterm终端仿真器

在Linux早期,可以用来工作的只有shell。那时,系统管理员、程序员和系统用户都端坐在Linux控制台终端前,输入shell命令,查看文本输出。如今,伴随着图形化桌面环境的应用,想在系统中找到shell提示符来输入命令都变得困难起来。本章讨论了如何进入命令行环境,带你逐步了解可能会在各种Linux发行版中碰到的终端仿真软件包。2.1 进入命令行

在图形化桌面出现之前,与Unix系统进行交互的唯一方式就是借助由shell所提供的文本命令行界面(command line interface,CLI)。CLI只能接受文本输入,也只能显示出文本和基本的图形输出。

由于这些限制,输出设备并不需要多华丽。通常只需要一个简单的哑终端就可以使用Unix系统。所谓的哑终端无非就是利用通信电缆(一般是一条多线束的串行电缆)连接到Unix系统上的一台显示器和一个键盘。这种简单的组合可以轻松地向Unix系统中输入文本数据,并查看文本输出结果。

如你所知,如今的Linux环境相较以前已经发生了巨大变化。所有的Linux发行版都配备了某种类型的图形化桌面环境。但是,如果想输入shell命令,仍旧需要使用文本显示来访问shell的CLI。于是现在的问题就归结为一点:有时还真是不容易在Linux发行版上找到进入CLI的方法。2.1.1 控制台终端

进入CLI的一种方法是让Linux系统退出图形化桌面模式,进入文本模式。这样在显示器上就只有一个简单的shell CLI,跟图形化桌面出现以前一样。这种模式称作Linux控制台,因为它仿真了早期的硬接线控制台终端,而且是一种同Linux系统交互的直接接口。

Linux系统启动后,它会自动创建出一些虚拟控制台。虚拟控制台是运行在Linux系统内存中的终端会话。无需在计算机上连接多个哑终端,大多数Linux发行版会启动5~6个(有时会更多)虚拟控制台,你在一台计算机的显示器和键盘上就可以访问它们。2.1.2 图形化终端

除了虚拟化终端控制台,还可以使用Linux图形化桌面环境中的终端仿真包。终端仿真包会在一个桌面图形化窗口中模拟控制台终端的使用。图2-1展示了一个运行在Linux图形化桌面环境中的终端仿真器。图 2-1 运行在Linux桌面上的终端仿真器

图形化终端仿真只负责Linux图形化体验的一部分。完整的体验效果需要借助多个组件来实现,其中就包括图形化终端仿真软件(称为客户端)。表2-1展示了Linux图形化桌面环境的不同组成部分。表 2-1 图形界面的组成名称例子描述客户图形化终端仿真器,请求图形化服务的应用端桌面环境,网络浏览器显示Mir,Wayland 负责管理显示(屏幕)和输入服务Compositor,Xserver设备(键盘、鼠标、触摸屏)器窗口Compiz,Metacity,为窗口加入边框,提供窗口移管理Kwin动和管理功能器部件Athenal(Xaw),X 为桌面环境中的客户端添加菜库Intrinsics单以及外观项

要想在桌面中使用命令行,关键在于图形化终端仿真器。可以把图形化终端仿真器看作GUI中(in the GUI)的CLI终端,将虚拟控制台终端看作GUI以外(outside the GUI)的CLI终端。理解各种终端及其特性能够提高你的命令行体验。2.2 通过Linux控制台终端访问CLI

在Linux的早期,在启动系统时你只会在显示器上看到一个登录提示符,除此之外就没别的了。之前说过,这就是Linux控制台。它是唯一可以为系统输入命令的地方。

尽管在启动时会创建多个虚拟控制台,但很多Linux发行版在完成启动过程之后会切换到图形化环境。这为用户提供了图形化登录以及桌面体验。这样一来,就只能通过手动方式来访问虚拟控制台了。

在大多数Linux发行版中,你可以使用简单的按键组合来访问某个Linux虚拟控制台。通常必须按下Ctrl+Alt组合键,然后按功能键(F1~F7)进入要使用的虚拟控制台。功能键F1生成虚拟控制台1,F2键生成虚拟控制台2,F3键生成虚拟控制台3,F4键生成虚拟控制台4,依次类推。说明 Linux发行版通常使用Ctrl+Alt组合键配合F1或F7来进入图形界面。Ubuntu使用F7,而RHEL则使用F1。最好还是测试一下自己所使用的发行版是如何进入图形界面的。

文本模式的虚拟控制台采用全屏的方式显示文本登录界面。图2-2展示了一个虚拟控制台的文本登录界面。图 2-2 Linux虚拟控制台登录界面

注意,在图2-2中第一行文本的最后有一个词tty2。这个词中的2表明这是虚拟控制台2,可以通过Ctrl+Alt+F2组合键进入。tty代表电传打字机(teletypewriter)。这是一个古老的名词,指的是一台用于发送消息的机器。说明 不是所有的Linux发行版都会在登录界面上显示虚拟控制台的tty号。

在login:提示符后输入用户ID,然后再在Password:提示符后输入密码,就可以进入控制台终端了。如果你之前从来没有用过这种方式登录,那要注意在这里输入密码和在图形环境中输入不太一样。在图形环境中,输入密码的时候会看到点号或星号,但是在虚拟控制台中,输入密码的时候什么都不会显示。

登入虚拟控制台之后,你就进入了Linux CLI。记住,在Linux虚拟控制台中是无法运行任何图形化程序的。

一旦登录完成,你可以保持此次登录的活动状态,然后在不中断活动会话的同时切换到另一个虚拟控制台。你可以在所有虚拟控制台之间切换,拥有多个活动会话。在使用CLI时,这个特性为你提供了巨大的灵活性。

还有一些灵活性涉及虚拟控制台的外观。尽管虚拟控制台只是文本模式的控制台终端,但你可以修改文字和背景色。

比如可将终端的背景色设置成白色、文本设置成黑色,这样可让眼睛轻松些。登录之后,有好几种方法可实现这样的修改。其中一种方法是输入命令setterm -inversescreen on,然后按回车键,如图2-3所示。注意,在途中我们使用选项on启用了inversescreen特性。也可以使用选项off关闭该特性。图 2-3 启用了inversescreen的Linux虚拟控制台

另一种方法是连着输入两条命令。输入setterm -background white,然后按回车键,接着输入setterm -foreground black,再按回车键。要注意,因为先修改的是终端的背景色,所以可能会很难看清接下来输入的命令。

在上面的命令中,你不用像inversescreen那样去启用或关闭什么特性。共有8种颜色可供选择,分别是black、red、green、yellow、blue、magenta、cyan和white(这种颜色在有些发行版中看起来像灰色)。你可以赋予纯文本模式的控制台终端富有创意的外观效果。表2-2展示了setterm命令的一些选项,可以用于增进控制台终端的可读性,或改善外观。表 2-2 用于设置前景色和背景色的setterm选项选项参数描述-black、red、green、将终端的背景色改为指定backgryellow、颜色oundblue、magenta、cyan或white-black、red、green、将终端的前景色改为指定foregroyellow、颜色undblue、magenta、cyan或white-inverseon或off交换背景色和前景色screen-将终端外观恢复成默认设无reset置并清屏-将终端当前的前景色和背无store景色设置成-reset选项的值

如果不涉及GUI,虚拟控制台终端访问CLI自然是不错的选择。但有时候需要一边访问CLI,一边运行图形化程序。使用终端仿真软件包可以解决这个问题,这也是在GUI中访问shell CLI的一种流行的方式。接下来的部分将介绍能够提供图形化终端仿真的常见软件包。2.3 通过图形化终端仿真访问CLI

相较于虚拟化控制台终端,图形化桌面环境提供了更多访问CLI的方式。在图形化环境下,有大量可用的图形化终端仿真器。每个软件包都有各自独特的特性及选项。表2-3列举出了一些流行的图形化终端仿真器软件包及其网址。表 2-3 流行的图形化终端仿真器软件包名称网址http://www.eterm.orgEtermhttp://finalterm.orgFinal TermGNOME https://help.gnome.org/users/gnome-terminal/Terminalstablehttps://github.com/Guake/guakeGuakeKonsole http://konsole.kde.orgTerminalLillyTermhttp://lilyterm.luna.com.tw/index.htmlhttp://wiki.lxde.org/en/LXTerminalLXTerminalhttps://code.google.com/p/mrxvtmrxvthttp://roxterm.sourceforge.netROXTermhttp://sourceforge.net/projects/rxvtrxvtrxvt-http://software.schmorp.de/pkg/rxvt-unicodeunicodehttps://launchpad.net/sakuraSakurahttp://st.suckless.orgsthttps://launchpad.net/terminatorTerminatorTerminologhttp://www.enlightenment.org/p.php?p=about/yterminologyhttp://tilda.sourceforge.net/tildaabout.phptildahttp://manpages.ubuntu.com/manpages/gutsy/UXtermman1/uxterm.1.htmlhttp://sourceforge.net/projects/wtermWtermhttp://invisible-island.net/xtermxtermXfce4 http://docs.xfce.org/apps/terminal/startTerminalhttp://extragear.kde.org/apps/yakuakeYakuake

尽管可用的图形化终端仿真器软件包不少,但本章只重点关注其中常用的三个。它们分别是GNOME Terminal、Konsole Terminal和xterm,通常都会默认安装在Linux发行版中。2.4 使用GNOME Terminal仿真器

GNOME Terminal是GNOME桌面环境的默认终端仿真器。很多发行版,如RHEL、Fedora和CentOS,默认采用的都是GNOME桌面环境,因此GNOME Terminal自然也就是默认配备了。不过其他一些桌面环境,比如Ubuntu Unity,也采用GNOME Terminal作为默认的终端仿真软件包。它使用起来非常简单,是Linux新手的不错选择。这部分将带你学习如何访问、配置和使用GNOME终端仿真器。2.4.1 访问GNOME Terminal

每个图形化桌面环境都有不同的方式访问GNOME终端仿真器。本节讲述了如何在GNOME、Unity和KDE桌面环境中访问GNOME Terminal。说明 如果你使用的桌面环境并没有在表2-3中列出,那你就得逐个查看桌面环境中的各种菜单来找到GNOME终端仿真器。它在菜单中通常叫作Terminal。

在GNOME桌面环境中,访问GNOME Terminal非常直截了当。找到左上角的菜单,点击Applications,从下拉菜单中选择System Tools,点击Terminal。如果写成简写法的话,这一系列操作就像这样:Applications ➪ System Tools ➪ Terminal。

图2-1就是一张GNOME Terminal的图片。它展示了在CentOS发行版的GNOME桌面环境中访问GNOME Terminal。

在Unity桌面环境中,访问GNOME终端得费点事。最简单的方法是Dash ➪ Search,然后输入Terminal。GNOME终端会作为一个名为Terminal的应用程序显示在Dash区域。点击对应的图标就可以打开GNOME终端仿真器了。窍门 在一些Linux发行版的桌面环境中,例如Ubuntu的Unity,可以使用快捷键Ctrl+Alt+T快速访问GNOME终端。

在KDE桌面环境中,默认的仿真器是Konsole终端仿真器。必须通过菜单才能访问。找到屏幕左下角名为Kickoff Application Launcher的图标,然后依次点击Application ➪ Utilities ➪ Terminal。

在大多数桌面环境中,可以创建一个启动器(launcher)访问GNOME Terminal。启动器是桌面上的一个图标,可以利用它启动一个选定的应用程序。这是个很棒的特性,可以让你在桌面环境中快速访问终端仿真器。如果不想使用快捷键或是你的桌面环境中无法使用快捷键,这个特性就尤为有用。

例如,在GNOME桌面环境中,要创建一个启动器的话,可以在桌面中间单击右键,在出现的下拉菜单中选择Select Create Launcher...,然后会打开一个名为Create Launcher的窗口。在Type字段中选择Application。在Name字段中输入图标的名称。在Command字段中输入gnome-terminal。点击Ok,保存为新的启动器。一个带有指定名称图标的启动器就出现在了桌面上。双击就可以打开GNOME终端仿真器了。说明 在Command字段中输入gnome-terminal时,输入的实际上是用来启动GNOME终端仿真器的shell命令。在第3章中会学到如何为gnome-terminal这类命令加入特定的命令行选项来获得特殊的配置,以及如何查看可用的选项。

在GNOME终端仿真器应用中,菜单提供了多种配置选项,应用本身也包含了很多可用的快捷键。了解这些选项能够增进GNOME Terminal CLI的使用体验。2.4.2 菜单栏

GNOME Terminal的菜单栏包含了配置选项和定制选项,可以通过它们使你的GNOME Terminal符合自己的使用习惯。接下来的几张表格简要地描述了菜单栏中各种配置选项以及对应的快捷键。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载