Linux 系统管理高级教程(一)

原文:Pro linux system administration

协议:CC BY-NC-SA 4.0

一、Linux 简介

您决定学习更多关于系统管理的知识,或者在自由开放源码(FOSS)基础设施上运营您的业务?祝贺并欢迎来到 Linux 和开源软件的世界!本章将带您完成实现该基础设施的最初步骤。我们包括选择平台或发行版、选择合适的受支持的硬件,以及找到您需要的软件。我们还为您提供一些资源的位置,以帮助您支持您的 Linux 环境。然后,在第二章,我们将向您展示如何安装您的第一台 Linux 主机。

Linux 发行版

什么是 Linux 发行版?简单来说,它是运行在 Linux 内核上的应用程序、包、管理和特性的集合。内核是所有发行版的共同点(有时由发行版维护者定制),但它们的核心都运行 Linux。

Note

你会问,内核是什么?别慌,我们会告诉你的。内核是所有计算机操作系统的核心,通常是允许操作系统与计算机硬件交互的层。内核包含允许您使用硬盘驱动器、网卡、RAM 和其他硬件组件的软件。在 Linux 世界中,内核是基于最初由 Linux 创始人、芬兰开发人员 Linus Torvalds 开发的代码。内核现在由一个开源开发者社区维护,并且变化会经历一个软件生命周期过程。您的发行版将附带该内核的一个版本,像 Windows 或其他操作系统一样,它可以更新和升级,以提供新功能或修复错误。

Linux 发行版的世界初看起来可能有点混乱。你可能在想,“如果都是‘Linux’,为什么会有这么多不同的名字,我选哪个?”你可能听说过像 Red Hat、Fedora、Debian 这样的名字,以及更奇怪的名字 Ubuntu(这是一个祖鲁语单词,大致翻译为“对他人的人性”!).在这一节中,我们将解释什么是发行版,描述发行版的不同之处,并建议一些为您选择正确发行版的策略。

发行版在几个方面有所不同,其中三个最重要的是

  • 目的
  • 配置和包装
  • 支持模型

首先,不同的发行版通常设计用于不同的目的,并提供不同的用户体验。一些发行版被设计成服务器,另一些被设计成桌面,还有一些被设计成执行特定的功能,例如,作为嵌入式系统。大多数 Linux 安装仍然倾向于服务器。虽然越来越多的 Linux 桌面出现,但这些数字还不足以挑战 Windows 和苹果 OS X 在桌面市场的主导地位。

发行版之间的第二个主要区别是它们的配置。虽然有些发行版将所有配置设置和文件保存在相同的位置,但其他发行版会改变它们的位置。此外,安装和更新应用程序(通常由软件包安装)的过程在不同的发行版中并不一致。许多发行版使用不同的应用程序安装和管理工具(通常称为包管理工具)。如果您的环境中有不同的发行版,这可能会造成混乱,并使管理变得困难。在第十九章中,我们将仔细研究配置管理工具以及如何克服这些问题。

第三个区别是发行版也有不同的支持模型。有些,像 Debian、CentOS 和 Fedora,是由志愿者社区维护的。其他的,像 Red Hat Enterprise Linux 和 Ubuntu,由商业供应商维护和支持。该软件仍然是开源的,但你可以支付支持和维护费用。大多数商业 Linux 供应商通过销售维护和支持服务来支持自己。

让我们看看一些可用的选择;这不是一个全面的列表,但是我们将涵盖大多数主要的流行发行版,然后给出一些选择特定平台的理由。我们还将把一些相似的发行版组合在一起,特别关注从两个主要发行版派生的发行版:CentOS(从 Red Hat 发行版派生)和 Ubuntu(本身从 Debian 发行版派生)。

Note

那么一个分布如何从另一个分布“派生”出来呢?开源软件意味着开发者可以获得源代码。开发人员可以在发行版中挑选他们想要的特性,并有可能创建他们自己的发行版。许多主要发行版的出现是因为一个开发人员或一组开发人员决定创建他们自己版本的另一个发行版。这些新的衍生产品通常有自己的品牌和特色。一些保持接近父发行版,而另一些遵循它们自己的路径。

红帽企业版 Linux

红帽企业 Linux ( www.redhat.com/rhel/ ))是一个流行的商业支持的 Linux 平台。它有许多版本,最常见的两个是红帽企业 Linux(也称为 RHEL)和红帽企业 Linux 高级平台(RHELAP)。两个版本之间的主要区别是支持的 CPU(中央处理器)数量,RHEL 最多支持两个 CPU,而 RHELAP 支持的数量没有限制。

Red Hat 平台通常被企业组织用作服务器平台,因为供应商提供专门的支持和服务级别。Red Hat 和大多数基于它的发行版都使用 Red Hat Package Management (RPM)打包系统。

在撰写本文时,RHEL 的基本支持费用约为每年 350 美元,特优支持费用高达 1,500 美元。其更高级的同类产品 RHELAP 每年的成本从 1,500 美元到 2,500 多美元不等,具体取决于硬件架构和所需的支持级别。这些费用为您提供技术支持以及发行版所需的任何补丁或更新。

Red Hat 过去也是由志愿者社区管理的,直到分发对于商业组织的技术基础设施变得如此重要,以至于人们乐于为有保证的支持付费。他们最初的志愿者团体仍然作为 Fedora 项目存在。

CentOS

CentOS ( www.centos.org/ )是红帽企业 Linux 平台的衍生。基于相同的源代码,它是免费的(并且没有 Red Hat 的支持)。希望利用 Red Hat 平台及其稳定性而无需支付额外支持的人通常会使用它。它采用与 Red Hat 产品相同的打包系统、RPM 和许多相同的管理工具。这是我们将在这本书的版本中使用的发行版本之一。

Fedora 项目

Fedora 项目( http://fedoraproject.org/ )是由社区和红帽共同运营的发行版。它是 Red Hat Enterprise Linux 的衍生产品,为该产品提供了一个向前开发的平台。Fedora 由 Red Hat 赞助,是 Red Hat 许多新功能的试验场。因此,它偶尔会被一些人认为对于商业用途来说过于前卫。Fedora 中引入的许多特性经常会出现在新的 RHEL 版本中。Fedora 还利用了 RPM 包和许多 RHEL 使用的管理工具。

Debian Linux

Debian Linux 发行版( www.debian.org )是一个由社区开发和管理的免费发行版,拥有一群多元化的活跃的开发者和用户。它始于 1993 年,围绕着一个社会契约( www.debian.org/social_contract )而建立。Debian 发行版致力于自由、开放,并专注于提供用户想要的东西。

Debian 发行版以 dpkg 打包系统和该发行版的近 23,000 个应用程序和工具的可用性而闻名。

人的本质

由南非技术专家和企业家马克·舒托沃尔斯发起的 Ubuntu 操作系统( www.ubuntu.com/ )是免费的,基于 Debian Linux 平台。它是由社区开发的,每六个月发布一次升级。其协调组织 Canonical 以及第三方支持提供商也提供商业支持。它有不同的风格,可以用作台式机或服务器。一些专家认为 Ubuntu 无处不在的特性和稳定性预示着 Linux 作为桌面平台的使用会越来越多。许多人认为 Ubuntu 是最容易使用和理解的 Linux 平台之一,它的大部分开发都是为了易用性和良好的用户体验。Ubuntu 使用 Debian 的打包系统和一些管理工具。

巴布亚企鹅

Gentoo 发行版( www.gentoo.org/ )是另一个社区开发的平台。值得注意的是,它提供了在硬件上从源代码编译整个发行版的选项。这允许您定制每个选项以适合您的特定硬件组合,但可能需要相当长的时间才能完成。Gentoo 也可以以预编译的形式安装,供那些不希望编译所有内容的技术水平较低的人使用。Gentoo 还因其经常被用作 MythTV 的平台而闻名,MythTV 是一种类似于微软媒体中心的开源媒体中心应用程序。Gentoo 使用了平台特有的打包系统 Portage。

Tip

你可以在 DistroWatch ( http://distrowatch.com/ )上了解 Linux 世界中无数可用的发行版。

那么应该选择哪个发行版呢?

选择特定的发行版应该基于您组织的预算、技能和需求。然而,我们的广泛建议是,你要么选择 Red Hat 衍生的发行版,要么选择 Ubuntu(基于 Debian 的发行版)或 Debian。所有这些都得到维护它们的组织和社区的支持。

Tip

你会在网上找到一个有用的非科学的自动测试来选择一个合适的 Linux 发行版,可以在 www.proprofs.com/quiz-school/story.php?title=which-linux-distribution-are-you-1 找到,在 http://lifehacker.com/5889950/how-to-find-the-perfect-linux-distribution-for-you 找到一篇关于这个主题的文章。

除了 Red Hat Enterprise Linux 需要签订支持合同来接收更新和补丁之外,我们讨论的所有发行版都是免费的。您可以下载并安装它们,无需支付许可费。

Note

你可以免费获得 Red Hat Enterprise Linux 软件,并且无需支付许可证就可以安装它——唯一的麻烦是,如果没有支持协议,你将无法获得任何更新,这可能会给你留下一个漏洞百出、不安全的主机。

我们讨论过的几个发行版都有商业支持,如果你的技术能力不强,值得考虑这样的发行版,比如 Red Hat Enterprise Linux 或者 Ubuntu(由他们的协调公司 Canonical 提供支持)。您还应该记住,当地提供商可能会提供技术支持。例如,许多信息技术(IT)公司和系统集成商提供 Linux 支持,而且 IT 支持行业中经常有中小型公司也可以提供相关的支持服务。

如果您不想为第三方或供应商提供的商业技术支持付费,您可能希望从大量以其大型活跃社区而闻名的发行版中进行选择,您可以在这些社区中找到支持和帮助。尤其是 Ubuntu 支持资源在最近几年有所增长,这是因为许多 Linux 新手已经采用了这个发行版。

最后,不要对自己的亲身经历打折扣。自己探索发行版。试用 LiveCDs,安装一些发行版,感受一下各种管理工具和界面。不应该低估你自己对哪个发行版适合你以及哪个发行版最容易使用的感觉。

那么这本书涵盖了哪些发行版呢?

正如我们所讨论的,两个流行的选择是 Red Hat,或者像 CentOS 和 Fedora 这样的衍生品,以及 Ubuntu 和其他相关发行版。我们选择了 Red Hat 衍生的发行版和 Ubuntu,一个 Debian 衍生的发行版。我们选择这些是因为它们代表了两个主要的分布族。它们还允许我们展示主要的配置选项和风格、包管理工具以及大量可用的 Linux 发行版所使用的相关管理技术。

具体来说,本书涵盖了在上实现应用程序和工具所需的材料

  • Red Hat Enterprise Linux 或基于 Red Hat 的发行版,如 CentOS 或 Fedora
  • Ubuntu 或其他基于 Debian 的发行版

在提供具体示例时,我们选择使用 CentOS 7 和 Ubuntu LTS XenialXerus (16.04)进行演示。

Note

LTS 是“长期支持”的缩写 Ubuntu 项目每六个月更新一次服务器和桌面版本。Ubuntu 项目保证 LTS 版本在发布后的五年内得到支持(例如,修复错误和安全问题)。Red Hat 也有类似的发布周期,Red Hat 试图在发布周期内保持二进制兼容性(这意味着它不会在发布周期内改变主要的包)。Red Hat 还有一个 ELS(扩展生命周期支持)。更多信息,请参见 https://wiki.ubuntu.com/LTShttps://access.redhat.com/support/policy/updates/errata

每章将提供每个发行版的配置示例,并记录发行版之间的任何差异,如配置文件的位置或包的名称。

挑选硬件

关于选择合适硬件的详细分析超出了本书的范围。我们通常建议您购买具有足够可靠性和支持的硬件,以满足您组织的要求。如果您需要 24/7/365 全天候依赖您的基础架构并要求高可用性,您应该购买具有冗余功能的硬件,如备用电源。您还应该购买适当的支持功能,例如备件和现场、电话或在线支持。

当然,购买自己的硬件可能不是实现服务的经济有效的方式。根据您的需求,云提供商可能是您更好的选择。您可以从 Rackspace ( www.rackspace.com )或 Linode ( www.linode.com )等提供商处购买专用或虚拟服务器。如果你想要完全虚拟化的服务器,你还可以看看亚马逊云服务( https://aws.amazon.com )或谷歌计算引擎( https://cloud.google.com/compute ),甚至像数字海洋( www.digitalocean.com )这样的简单服务

Note

选择云还是购买自己的硬件取决于多种因素。服务器放在您的办公室或数据中心有什么真正的原因吗?您是否有足够的互联网带宽和稳定性来将您的服务放入云中。根据您的需求,您始终可以选择内部硬件和 PaaS(平台即服务)的组合。

支持的硬件

除了购买合适的硬件,您还应该考虑一些重要的选择和性能因素。最重要的考虑是,Linux 操作系统并不支持所有的硬件。虽然很少,但一些硬件组件(例如,一些无线网卡)在一些或所有 Linux 平台上缺乏驱动程序和支持。

您应该确认您购买的任何硬件都受到您选择的发行版的支持。大多数发行版都有硬件兼容性列表(HCl ),您可以用它来验证您的硬件是否受支持。以下是一些目前维护的 HCL 站点:

也有很多大型硬件厂商为系统提供 OEM(原始设备制造商)Linux 软件。您可以从戴尔、惠普和 IBM 等公司中进行选择,以提供保证与指定的受支持 Linux 发行版列表一起工作的硬件。

Note

在后面的章节中,当我们研究特定的应用程序和工具时,我们将讨论各种特定的性能问题。

获取软件

您从哪里开始安装第一台主机?首先,你需要得到你需要的软件的拷贝。有多种方法可以获得基本操作系统软件。有些发行版出售 CD-r om 和 DVD,其他发行版提供 ISO 映像下载(有些发行版两者都提供!).其他发行版也提供通过网络或互联网的安装。

Note

我们将在第十九章中探讨基于网络的自动化服务器供应流程。

以下是一些可以获得 CD-r om 和 DVD 的网站列表:

下载所需软件后,您可以将 ISO 刻录到 CD、DVD 或 USB 上。以下是一些软件的链接以及如何操作的说明:

或者,如果您已经有可用的介质,您可以在第二章开始安装。

获得支持

根据发行版的不同,为您的 Linux 发行版寻找帮助和支持会有很大的不同。如果您选择了商业发行版,您可以联系您的供应商以获得您需要的支持。对于非商业发行版,您可以在您的发行版网站上记录票证或查看文档。

此外,永远不要低估搜索引擎为你的问题找到解决方案的能力。世界上许多人都在使用 Linux,他们可能也经历过和你一样的问题,并发表或撰写了解决方案。

对于特定的发行版,以下网站最有用:

查看其他发行版的站点,了解它们的支持机制。其他有用的网站包括

摘要

在这一章中,我们已经向您介绍了 Linux 的一些变种,包括本书关注的两个发行版:

  • CentOS
  • 人的本质

我们还讨论了选择特定发行版的一些原因,如何选择一些合适的硬件,以及从哪里获得对您选择的发行版的一些基本支持。在下一章,我们将向您展示如何安装本书涵盖的两个发行版。

二、安装 Linux

在本章中,我们将带您完成安装 CentOS 主机和 Ubuntu Server 主机的过程。我们将使用图形化安装工具展示每个发行版的安装过程,并详细说明安装过程中可用的选项。我们将执行基本安装,并安装运行基本 web、邮件和 DNS(域名系统)服务器所需的软件包。如果你目前不知道这些功能是什么,不要担心——我们在第十章解释 DNS,在第十一章解释 web 服务器,在第十二章解释邮件服务器。

Tip

我们建议您阅读整个章节,包括涉及 CentOS 和 Ubuntu 安装过程的部分,以获得对安装 Linux 主机的最佳理解。

在“CentOS 服务器安装”一节中,我们将从安装基于 Red Hat 的发行版开始。虽然本节中的屏幕截图是特定于 CentOS 的,但 Red Hat Enterprise Linux (RHEL)和 Fedora 的安装过程以非常相似的方式运行(CentOS 和 RHEL 源自 Fedora)。因此,如果您选择了这些发行版中的任何一个,您应该能够从我们的解释中很容易地识别出这些发行版的安装过程。你会发现大多数 Red Hat 衍生发行版的配置和管理都是如此。

如果你选择了 Ubuntu,你会在“Ubuntu 安装”一节中找到关于 Ubuntu 安装过程的完整解释。Ubuntu 源自 Debian,但安装过程不同。不过,配置和选项非常一致,通过遵循 Ubuntu 安装过程,您应该能够识别 Debian 和其他 Debian 衍生发行版的安装过程。

Note

如果您希望使用基于 CD /DVD /USB 的安装过程和所提供的图形安装程序,那么您需要在一台配有显示器、键盘(最好是鼠标)的主机上安装。这些外围设备将允许您有效地与安装工具进行交互。我们将在第十九章描述如何进行无人值守或无头(无监控器)安装。

我们还将在第八章中扩展潜在的安装选项,当我们考虑在 Linux 上安装软件时,以及在第十九章中,当我们检查自动化安装和构建的方法时。

Caution

发行版会改变,安装屏幕和选项也会随之改变。如果本章提供的屏幕截图与您在安装过程中看到的不完全一致,请不要惊慌。通常,不同版本之间的大多数安装选项和步骤都是相似的。

LiveCDs 和虚拟机

在我们开始第一次安装之前,我们将介绍在主机上了解 Linux 的另外两个选项,在提交构建物理服务器之前尝试这两个选项可能是有用的:LiveCDs 和 virtual machines。这些方法允许您探索 Linux 发行版,以及如何以最少的时间和基础设施投资来使用它。

livecds

LiveCDs 是可以从 CD 或 DVD 在计算机上运行的发行版本。它们无需在你的电脑上安装任何软件就能把自己载入内存。这意味着您可以在您的计算机上尝试一个发行版,然后移除 CD 并重新启动以返回到您现有的操作系统,这使得探索和测试 Linux 发行版和软件变得非常容易,而无需更改您计算机上的任何内容。你可以在 http://en.wikipedia.org/wiki/Live_CD 找到更多关于 LiveCDs 的信息。

您可以在 LiveCD 格式中找到如下流行的发行版:

您还可以在 www.livecdlist.com/ 找到众多 LiveCDs 的完整列表。

虚拟计算机

您还可以在虚拟机上运行您的 Linux 发行版。虚拟机是主机的软件实现,就像物理主机一样运行。您可以在单个物理主机上运行多个虚拟主机。虚拟化应用程序和服务器的示例包括 VMware ( www.vmware.com/ )、VirtualBox ( www.virtualbox.org/ )以及像 Xen ( www.xen.org/ )等开源替代产品。你也可以从主机公司购买虚拟主机。

Note

在第三章,我们演示如何安装 VirtualBox。以下说明适用于“裸机”或虚拟主机。裸机安装和虚拟安装之间的差异相对较小。虚拟主机的一个不同之处是,您可以直接从 ISO 映像安装主机,而不必先将 ISO 映像刻录到 CD /DVD /USB,然后将其加载到 CD /DVD 驱动器或 USB 驱动器中。虚拟主机安装还使构建和重建主机变得更加容易,并且您可以执行诸如创建不同类型主机的时间点备份之类的功能。当第一次探索 Linux 时,虚拟主机是学习的最佳方式。

您可能还希望利用预制的虚拟设备,这些虚拟设备是您随虚拟化软件一起加载的 Linux 发行版的虚拟映像。它们已经安装和配置好了,而且这些设备通常是为特定目的而创建的,比如 VoIP 服务器、文件服务器或邮件服务器。您可以在以下站点查看可用设备列表:

CentOS 服务器安装

让我们从安装 CentOS 主机开始。我们将在这里做一些假设:

  • 您正在使用 CentOS 网站( www.centos.org/download/ )上的 CentOS ISO,并将其刻录到 CD/DVD/USB 上。
  • 您只是在构建一个基本的邮件、DNS(域名系统)和 web 服务器。
  • 您正在没有任何先前操作系统的全新服务器上安装。

首先,将您的安装介质(通常是 CD、DVD 或 USB)放入主机并打开电源。

Note

如果您正在构建一个虚拟机,您应该从原始 ISO 开始构建。虚拟机通常包括一个“虚拟 DVD”,您可以在其中挂载安装 ISO 以进行引导。我们将在下一章向您展示这一点。

加载安装介质并启动主机后,您将看到 CentOS 安装闪屏,如图 2-1 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-1。

The CentOS 7 installation splash screen

从闪屏中,您可以通过图形界面启动安装。如果我们不选择任何东西,自动引导将开始安装过程。只需在此处按 Enter 键即可开始安装。

按 Tab 键将允许您访问引导命令行。在这里,您可以添加其他您认为适合传递给将要引导的内核的引导选项,如网络 kickstart 文件或其他选项。在本书的后面,我们将展示这些选项的实际应用。

最后,进入“故障排除”部分将提供更多选项,如救援 CentOS 系统、内存测试和从本地驱动器启动。救援模式假设您已经加载了 Linux,它允许您引导并可能修复或救援损坏的 Linux 安装。您将引导进入一个救援提示符,允许您挂载磁盘、编辑配置文件和访问其他有用的实用程序。但是现在,只需按 Enter 键就可以进入安装的下一个阶段。

在图 2-2 中,将安装主机的“anaconda”安装程序进程已经启动。anaconda 应用程序是安装 CentOS 的软件,它运行在 X Window 系统中,也称为 X。X 是 Linux 上常用的图形用户界面;我们将在第四章中对此进行更多的讨论。有一个基于文本的安装模式,允许您进行以下选择。内存非常少的系统可能必须在此模式下运行才能安装 CentOS。这也可以通过称为 Kickstart 的过程来实现,这是一种自动选择安装的方式。我们在第十九章中讨论 Kickstart。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-2。

The CentOS graphical installer

在图 2-2 中,我们选择想要使用的语言。我们正在把英语本地化为澳大利亚版本,伙计。选择继续进入下一个屏幕。

Tip

发行说明告诉您这个版本和上一个版本之间有什么变化。如果您要升级主机,最好阅读并理解发行说明中记录的任何更改的含义。CentOS 7 的发布说明可以在这里找到: https://wiki.centos.org/Manuals/ReleaseNotes/CentOS7

接下来,在图 2-3 中,我们看到了主安装摘要屏幕。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-3。

Main Installation Summary screen

在这里,我们可以访问主要的配置项目。它们分为几个部分:本地化、安全性、软件和系统。将鼠标悬停在其中一个项目上,会显示相关屏幕的链接。

Note

有些高级配置设置有时需要先配置网络设置(如日期和时间设置中的 NTP 服务器设置),这一点并不明显。要配置网络设置,您必须首先完成安装目标。因此,我们将从安装目的地开始,而不是从图 2-3 的顶部开始,然后在继续其他步骤之前配置网络。

如上所述,我们不是从列表的顶部开始,然后逐步向下,而是从底部开始,然后向上!让我们首先从选择安装目的地开始,来设置我们将要安装操作系统的位置。

Caution

接下来的几步可能会很危险。如果您在具有现有操作系统或重要数据的主机上安装,您可能会丢失所有现有数据,并且操作系统可能会变得不可用。请谨慎行事,必要时采取必要的后备措施。对于那些刚刚开始使用 Linux 的人,在第三章中,我们将向您介绍 VirtualBox,它是一个虚拟化应用程序,允许您在当前的操作系统中安装 Linux 服务器。执行以下步骤时,使用 VirtualBox 等虚拟化软件不会破坏您当前的操作系统。

在选择如图 2-3 所示的安装目标屏幕后,我们将看到当前的磁盘布局。现在我们需要对我们的磁盘进行分区。

对磁盘进行分区就像切蛋糕一样:你可以根据吃蛋糕的人的胃口来选择每块蛋糕应该有多大。例如,如果您的系统有一个网站,并且该网站有大量的日志记录,您可以选择划分磁盘,以便在保存 web 数据和日志文件的分区中有更多的空间。如果您运行的是文件服务器,您将为用户数据而不是 web 数据或日志保留更多的磁盘空间。我们使用分区而不是将所有数据集中到一个分区中的原因是,您可以完全填充该分区,而不会破坏它周围的其他分区。在前面的场景中,如果我们用数据将日志分区填充到 100%,我们的系统分区和 web 数据分区将不会被日志数据占用。

在图 2-4 中,我们有一个来自 VirtualBox 安装的简单磁盘布局。根据您的系统,您可能有更多的磁盘。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-4。

Automatically configuring and encrypting disks

在图 2-4 中,我们选择了 ATA VBOX 硬盘并加密了我的数据。我们还选择了自动配置分区。安装程序将为您配置一个合理的默认磁盘分区布局。如果您选择我将配置分区,您将必须手动创建磁盘布局。

Note

我们将在第九章解释更多关于分区以及如何定制和改变你的磁盘和存储器。

在有意义的时候加密数据是明智的,但是它有一些你应该知道的缺点。每当系统启动时,您都需要在系统启动时在控制台上输入密码。这意味着无人值守重启是不可能的,您需要控制台访问(物理或虚拟)才能进入。另一个问题是安装的自动化更加困难,因为密码必须在安装时传递,并且该密码可能会被拦截。此外,这只是静态加密,在系统未开机或未输入密码时有效。假设您只有一个磁盘,我们无法将该磁盘安装到另一个系统上并读取其内容。但是,如果我们可以访问已输入加密密码的开机主机,我们就可以读取并可能复制硬盘的内容。它也只和你的密码一样安全。简单的密码可以通过基于字典的攻击来破解您的加密。因此,强烈建议使用长而强的密码。

Note

什么时候加密你的磁盘“有意义”?那得看情况。您可能有法规要求加密您的数据。您的系统可能不经常重启,并且包含敏感数据。你可以在办公室之间运送磁盘。

如果它妨碍了你的工作流程,降低了工作效率,那就没有意义了。最后,安全性是风险和可用性之间的平衡,很难判断界限在哪里。

熟悉我们在这里使用的加密技术也是一个好主意。以下链接将提供更多背景信息。

Tip

对于任何移动设备(如笔记本电脑、USB 闪存盘和运送到其他地方的硬盘)或未经授权的人可以实际访问的系统(如不安全的数据中心、贸易展览或其他活动),加密硬盘几乎是强制性的。

记住所有这些,在图 2-4 中选择完成后,图 2-5 要求我们输入加密磁盘的密码。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-5。

Entering a strong passphrase

输入强密码,并将其安全地存储在加密的密码管理器中。

Tip

您可以使用基于浏览器的著名加密密码管理器,如 1Password、LastPass 或 DashLane。其中一些具有组或团队支持,允许您以授权的方式在团队成员之间共享密码。相信我,这其实是一个很难的问题。在某些时候,您需要在团队中共享密码,共享的帐户和长期密码可能会成为您的一个大问题。但是,可能有一些密码需要更严格的访问和非常有限的共享。像 http://keepass.info 或 GPG 这样的软件安全地存储加密的密码文件可能是你的最佳解决方案。

在图 2-6 中,如果您的磁盘上有将要更改的数据,您将看到以下屏幕:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-6。

Destroying and recreating disk layout

此时,根据您看到的内容,您可以选择继续。但是请记住,这是一个不可逆的操作,数据可能会丢失。如果您有疑问,请取消并返回自定义分区。

如果现有数据没有变化,您将会看到图 2-8 。然而,我们想在图 2-7 中向你展示幕后的一点。为此,我们选择了“我将配置分区”,然后选择“单击此处自动创建分区”。现在它向我们展示了它是如何自动分割我们的磁盘的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-8。

Selecting Network & Host Name

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-7。

How automatic partitioning divides the disks

在图 2-7 中,我们将磁盘分成三个部分。一个/boot分区,一个/或根卷,以及一个swap卷。/ boot分区是我们的内核映像和引导配置文件所在的位置,因此被设置为“标准分区”和一个xfs文件系统。根卷/是一个 LVM(逻辑卷管理)卷,分配给它的空间占 LVM 磁盘大小的百分比最大。主要操作系统程序在/中。最后,swap是一片磁盘,用于写出内存页面以释放系统 RAM。

Note

LVM 允许您管理磁盘卷,并动态扩展、收缩和更改磁盘分区的大小。LVM 软件允许管理员更改磁盘布局、添加新的磁盘存储,或者移除磁盘存储并将其重新用于系统的另一部分,而不必重建系统和重新格式化底层磁盘。Btrfs 也是可用的,它是一个新的 CoW(写时复制)文件系统。像 LVM 一样,它允许你以灵活的方式对你的储物进行分组。但是 Btrfs“子卷”不同于 LVM 中的逻辑卷,它具有 LVM 没有的特性和限制。我们将在第九章更详细地讨论 LVM 和 Btrfs。

如果您有任何特殊需求,您可以改变这个默认结构并创建新的分区,或者您可以删除所有内容并使用安装程序的分区管理器重新开始。我们将在第九章更详细地讨论如何将一个或几个驱动器分割成不同的用途。

同样,在以前版本的安装过程中,您可以通过在安装时提供密码来保护 GRUB2 引导加载程序。这仍可通过 Kickstart 获得,但在此过程中不可用。这显然可以在安装后按照下面的说明进行补救: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sec-GRUB_2_Password_Protection.html

Caution

重申一下,Linux 主机的物理安全非常重要——您不希望任何人窃取您昂贵的物理资产(以及您的数据!).您应该将主机存放在上锁的机柜或机架中,或者存放在您可以控制进入的房间中。如果您将服务器托管在 co-lo 或数据中心,那么您应该确保该位置有适当的物理安全控制来保护您的主机。

在图 2-8 中,我们可以看到,一旦我们的安装目标任务完成,网络&主机名就会出现。

这里最重要的配置项是您的 IP(互联网协议)地址,它是您的主机的网络地址,允许其他主机找到它并与之通信。

Tip

您可以在 http://en.wikipedia.org/wiki/IP_addresshttp://computer.howstuffworks.com/internet/basics/question549.htm 查看 IP 地址和寻址。

根据您的网络设置,接下来的步骤有两种方式。您的网络中可能已经有了 DHCP(动态主机配置协议)服务器。DHCP 服务器是一种将 IP 地址分配给 MAC 地址(网卡上特殊且唯一的地址)的服务。现在,大多数办公室和家庭都在防火墙中安装了 DHCP 服务器,或者在网络中安装了路由器。如果您跟随 VirtualBox,VirtualBox 有自己的 DHCP 服务器,它为自己的内部网络分配地址。在图 2-9 中,我们依靠 DHCP 为我们提供 IP 地址,并手动为我们的主机分配一个名称。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-9。

DHCP and manually assigning a hostname

在图 2-9 中,我们允许 DHCP 通过将右上角的 OFF 按钮切换到 on 来分配 IP 地址 10.0.2.15。

在左下方的主机名部分,我们输入了主机名 au-mel-centos-1。在小型创业公司和家庭网络中,以最喜爱的电视角色、乐队或神话生物命名主机是很常见的。虽然这很有趣,但当您在多个地理位置有多台主机在做特定的工作时,这很快就会变得很烦人。另外,你已经使用了所有你最喜欢的角色,当你不得不杀死你的宠物服务器时,这变得非常困难。我们的主机名是 au-mel-centos-1,因为我们更喜欢描述性命名标准 region-city-OS type-number。作为描述性命名格式的另一个示例,如果您在美国有一个 IP 地址以 155 结尾的文件服务器,您可以选择 us-ny-fileserver-155。最重要的是描述性的,而不是将你的主人命名为“凯蒂”或“索尔”

Note

您可以选择任何适合您的环境的命名标准。我们更喜欢描述性的命名约定。

如果我们将自己的 IP 地址分配给这台服务器,我们将采取以下额外的步骤。通常有两种方法在您的网络上分配 IP 地址。第一种是在配置过程中直接指定每台主机的 IP 地址。这些被称为静态地址。第二种方法使用 DHCP 网络服务。当主机请求 IP 地址时,DHCP 使用网络上的服务器为主机分配 IP 地址。

Note

我们将在第十章告诉你如何配置你自己的 DHCP 服务器。

DHCP 服务器跟踪这些地址,并确保没有冲突。您的网络上可能已经有一个支持 DHCP 的路由器(大多数 ADSL 调制解调器/路由器都是如此)。在下一个屏幕中,您可以选择 DHCP 选项并自动获得一个 IP 地址。

Caution

将您自己的 IP 地址添加到您的网络中可能会导致“冲突”也就是说,网络中出现了两台地址相同的主机,导致无法确定向何处发送流量。

在网络屏幕上,我们点击配置,我们会看到一个类似于图 2-10 的屏幕。我们选择了 IPv4(互联网协议版本 4)设置和方法下拉列表。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-10。

Setting IPv4 settings

连接名称是我们正在配置的设备,它是在系统启动时自动创建的。根据您的设备,您的可能会有所不同。下拉菜单允许我们为网络界面选择不同的选项。DHCP 我们已经讨论过,仅链路本地仅用于与本地网段(通常不使用)中的主机通信,因为它与其他计算机共享。为您的网络接口选择这两个选项将意味着您将不会被分配一个可以路由到 Internet 的 IP 地址。我们希望选择手动,并通过单击右侧的添加来分配我们自己的 IP 地址。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-11。

Default gateway

在确保 IP 地址未被我们的网络占用后,我们输入了 IPv4 地址 192.168.1.150。我们已经添加了网络掩码/24 (192.168.1.0/24 ),我们的网关正在侦听 192.168.1.254。

Note

如果您在本地网络上发出命令 ping 192.168.1.150 并得到响应,则该地址已经被占用,您应该在这里选择一个不同的地址。此外,地址空间 192.168.1.0/24 可能不适合您的网络。我们将在第七章中详细讨论网络。如有疑问,请尝试 DHCP。

接下来,我们添加我们的 DNS 详细信息,如图 2-12 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-12。

DNS details

在我们的例子中,我们的 DNS 服务器也是我们的网关地址。您的网络上可能有一个或多个 DNS 服务器,您可以在此添加它们,用逗号分隔。搜索域也是 DNS 设置,允许您将域名附加到 DNS 搜索查询中。例如,当您查询 au-mel-centos-2 的 IP 地址时,您的网络层会知道为您将域 au-mel-centos-2.example.com 添加到查询中。同样,您可以在这里用逗号分隔多个域,也可以留空。我们将把我们的设置为 example.com,以匹配我们的虚拟网络。

默认网关是所有流量离开网络之前经过的路由。它可以是调制解调器/ADSL 网关,也可以是将您的网络连接到互联网或其他专用网络的物理路由器。主要和辅助 DNS 名称服务器是将 IP 地址解析为完全合格的域名的特殊服务器。例如,完全合格的域名是 au-mel-centos-1.example.com。

Tip

指定主 DNS 服务器和辅助 DNS 服务器会增加网络的冗余。如果一台服务器没有响应,您的主机将尝试另一台服务器。

每当您的主机访问某个网站时,它都会使用默认网关和 DNS 服务器来查找如何到达该网站。例如,如果您在浏览器的地址栏中键入 www.google.com ,您的主机将首先找到 DNS 服务器,它可能在您的网络上,也可能不在您的网络上。如果它不在您的网络上,您的主机将使用默认网关到达它。然后你的主机会向 DNS 服务器询问 www.google.com 的 IP 地址,DNS 服务器会用类似 74.125.19.104 的东西来回答。然后,您的主机将再次使用您的默认网关离开您的网络,并获取由 www.google.com 提供的网页。一般来说,您的 DNS 服务器是 IP 地址到主机名的映射,您的默认网关是您在网络之间穿越的第一个链接。

现在点击保存,弹出如下确认画面,如图 2-13 。如果您满意,可以选择完成。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-13。

Network confirmation screen Note

我们已经向您展示了如何配置 IPv4 IP 地址。还有另一种可以配置的地址,即 IPv6 地址。如果您有 IPv6,您的地址可以使用 IPv6 设置选项卡进行配置。您可以像配置 IPv4 一样配置 IPv6。您设置的 DNS 服务器也需要是 IPv6 地址。

IPV4 AND IPV6

互联网的工作原理是计算机能够相互发送信息。为了能够做到这一点,需要沿着路径在彼此之间有一组唯一的地址。IPv4 是该协议的第一个版本,使这成为可能。

IPv4 中的唯一地址基于 32 位地址空间。这意味着可能有 4,294,967,296 个唯一地址。这个地址空间对于今天的互联网来说太小了,因此 IPv6 的发布解决了这个问题。

IPv6 基于 128 位地址空间,有 2 个 128 唯一地址,比 IPv4 多 7.9×10 28 个地址。一些网络已经迁移到这个新的地址空间。

但是,如果您没有 IPv6 地址,没有必要惊慌。许多 ISP 提供“双栈”,向客户提供 IPv4 和 IPv6,同时他们自己通过 IPv6 连接到其他网络。您的本地网络很可能也是 IPv4 网络,并且您的 DHCP 服务器很可能会为您分配一个动态 IPv4 地址。我们将在第七章中详细讨论网络。

关于 IPv4 和 IPv6 的区别,请看这里: www.networkworld.com/article/2692482/ipv6/infographic-ipv4-vs-ipv6.html

这里也可以参考这个词条: http://en.wikipedia.org/wiki/IPv6

配置好网络后,我们可以继续进行其他一些设置,如日期和时间。通过选择如图 2-14 所示,我们将本地化我们的数据&时间。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-14。

Setting Date & Time

设置正确的时区对于服务器非常重要,因为它会影响日志中的时间戳以及数据库中的创建和更新记录。Linux 内核使用协调世界时(UTC)作为它的时钟源,但是您可以在这里设置您合适的时区。您还可以考虑将所有服务器设置为 UTC,而不是本地时区。

Why Set All Your Servers to UTC?

假设您正在为一个全新的应用程序构建基础架构。大多数人在开始设计他们的服务时没有考虑到全球化的世界。您的系统开始时可能处于您当地的时区,但是随着您的发展,您可能会发现您的系统处于完全不同的时区。这可能会导致问题,当你读一个时间戳,想知道,“是啊,但凌晨 4 点是他们的时间,我们的时间还是 UTC?”

您仍然可以获得本地化的时间信息。您可以在应用程序级别使用标准 UTC 时区偏移量来帮助本地化不同时区的时间。

当然,你可能只是建立了一个本地的文件共享网络,它永远不会覆盖全球。在这种情况下,使用当地时区以外的任何东西都没有意义。将您的时区设置为您的本地时区的另一个非常重要的原因是,您的数据已经设置了该时区,将您的服务器设置为 UTC 将导致您已经拥有的日期字段出现灾难性问题。

Note

不,你不是第一个说“呃?UTC?为什么不剪?”好吧,下面是你的答案: www.timeanddate.com/time/utc-abbreviation.html

在图 2-15 中,我们将向你展示我们将如何设定墨尔本的时间。请记住,如果我们尚未建立网络,您仍可以完成这一部分,但下一部分将会失败。这在屏幕底部突出显示,但可能会让您感到困惑。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-15。

Setting time zone and localizing to Melbourne

但是我们真的应该设置为 UTC,不是吗?所以在图 2-16 中,这就是我们将要做的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-16。

Setting to UTC

完成后,我们可以进入下一步,即设置我们的网络时间服务器。

Note

网络时间是一项帮助您的计算机系统时间与世界上其他时间服务器保持同步的服务。随着时间的推移,计算机的系统时钟将“漂移”失去同步。因此,为了解决这个问题,网络时间服务或 NTP 服务(网络时间协议)将查询时间服务器,并找出它们的时钟。然后,它根据最佳的三个响应调整自己的时钟。我们将在第十章中详细介绍 NTP。

当您的网络设置好后,您将能够打开网络时间,它看起来将如图 2-17 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-17。

Network Time settings

单击右上角的设置选项,您可以看到弹出了一个新窗口,允许我们添加自己的 NTP 服务器。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-18。

Network Time Servers

在这里你可以添加一个本地时间服务器或者选择你喜欢的。你离时间服务器越近越好,因为距离和延迟会影响你的时钟结果。带有绿色勾号的 NTP 服务器可以访问并且正在工作。红色时间服务器不可达。最好至少有三台工作时间服务器。您可以添加自己的 NTP 服务器,方法是单击+并将您的服务器添加到列表中。要返回主屏幕,选择确定和完成。

在摘要屏幕中,我们可以看到安全策略设置。如果选择安全策略,您可以向主机添加安全策略。实施安全策略并不是强制性的,但政府法规或个人安全要求可能会要求您这样做。本节的任务是安装工具,根据预定义的安全策略对您的系统执行安全内容自动化协议(SCAP)扫描和完整性检查。

你应该选择哪个?它们本身并不能让您的系统更加安全,但是它们可以帮助您识别、报告和修复任何漏洞。例如,当您管理数千台服务器时,您希望确保所有主机都符合相同的安全配置文件,并能够向外部审计员证明这一点。

例如,考虑一个非常简单的例子,如果法律要求您的所有主机符合特定的安全标准,该标准规定您的密码长度必须至少为 8 个字符(2 个大写字母,2 个符号),通过运行这些扫描,您可以确定您的网络上没有不符合该要求的主机。然后,您将需要一些方法来补救那些不符合您的需求的离群值。

如果法规遵从性对您的组织很重要,那么您至少应该阅读以下内容:

当然,您还应该阅读您的组织的任何相关标准遵从性文档,并采取适当的措施。

出于本次安装的目的,我们将安装“标准系统安全配置文件”,如图 2-19 所示。这为我们提供了以下最低规则,并安装了 oscap 工具和软件:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-19。

Selecting Security Profile

http://static.open-scap.org/ssg-guides/ssg-rhel7-guide-standard.html

一旦我们完成了系统安装,我们将能够运行一个符合性测试,并了解我们的系统与 DISA STIG 公司的 Red Hat Enterprise Linux 7 基线相比看起来如何。

Note

DISA 代表国防信息系统局,它是美国国防部的一部分,为美国机构运行信息系统。STIG 是标准的技术实施指南。open-oscap 的作用是运行和收集这些合规性报告。你可以在这里查看源代码: https://github.com/OpenSCAP

选择完成后,我们将返回安装摘要屏幕。接下来,我们将选择要安装的软件。从安装摘要中选择软件选择屏幕。

我们将选择安装一个 DNS 服务器,并使它更容易,Gnome 桌面。如果您熟悉 Linux 命令行,这是可选的。随意安装你感兴趣的其他软件。

首先,我们选择基础架构服务器,并选择 DNS 名称服务器,如图 2-20 所示

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-20。

Selecting DNS Name server

我们之前已经讨论过 DNS 域名服务器及其功能。它们帮助计算机将 IP 地址映射到主机名。我们将从基础架构服务器列表中选择它。如您所见,该列表中还有其他服务器,如电子邮件服务器、FTP 服务器以及文件和存储服务器。这将只安装 DNS 名称服务器所需的最低要求,而不会安装 GUI(图形用户界面)。根据您的习惯,这可能会让您感觉有点不舒服,好像我们继续这样做,您将只能使用命令行,而不是一个漂亮的 GUI。

Tip

随着您对 Linux 越来越熟悉,您可能会发现您很少使用 GUI 来配置和使用 Linux。几乎所有东西都可以从命令行运行。只有当你使用像图形编辑器或集成开发环境(ide)这样的桌面应用程序时,你才真正需要使用桌面 GUI。

在图 2-21 中,我们将安装桌面。CentOS 提供了两个标准的 Linux 桌面供你选择,一个是 Gnome,另一个是 KDE。两者都有他们的粉丝,这取决于你个人的喜好。您可以安装这两个软件,并在登录前进行切换,以便选择最适合您的软件。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-21。

Selecting to install a server with a GUI

选择 Done,现在我们将有一个要在新服务器上安装的包的列表。

Note

包是软件应用程序所需的文件包。它们可以是二进制文件或配置文件。在第八章中,我们将解释更多关于软件包以及如何使用它们的内容。

我们现在将快速检查最后一项,安装源。如果我们想为当前媒体(CD/DVD/USB)选择不同的安装源,那么我们可以在这里添加它。您可以从网络 httpd 服务器安装 Linux,或者通过代理服务器运行您的安装。同样,您需要设置安装目的地和网络,然后才能配置任何需要网络的内容。

在图 2-22 中,你可以看到我们已经从builder.example.com主机添加了另一个安装源,它位于我们的网络上。该主机将通过http://提供 ISO 映像的副本。这意味着您不需要将所有物理介质都物理连接到您的主机。您可以选择使用最小安装盘来访问该屏幕,然后通过网络访问更大的媒体——当您使用多台服务器时,这非常有益。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-22。

Adding a network installation source

您还可以配置访问远程存储库所需的任何代理服务器设置。此外,您可以添加其他存储库。存储库是包的集合,通常通过本地或互联网上的http://服务器提供服务。

我们不会在此屏幕上添加任何内容,我们只是通过 Done 退出,现在我们可以开始安装了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-23。

Selecting Begin Installation

选择 Begin Installation 后,您会看到一个屏幕,显示您的安装进度,并让您有机会创建一个“root”密码和一个“user”密码。在 Linux 中,root 用户是可以访问整个系统的超级用户,很像 Windows 操作系统中的 Windows 管理员。在图 2-24 中,您可以再次看到我们使用鼠标点击 ROOT 密码。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-24。

Selecting to create the root user Tip

我们将在章节 5 和 6 中更详细地讨论根用户。

正如我们前面所讨论的,密码应该是复杂的,由大小写字母、数字和特殊标点符号组合而成,如下所示:@!%#*.它们也应该至少有八个字符长。记住要像保存磁盘加密密码一样安全地保存它。

在图 2-25 中,当您输入密码时,会再次显示密码的强度。它也不会接受你的密码,除非你的确认匹配。完成后,选择完成。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-25。

Entering the root password Tip

你可以在 http://en.wikipedia.org/wiki/Password_strength 了解一个好密码的特征。

在您的主机上设置用户帐户是可选的,但建议您设置一个。在 Ubuntu 中,我们将在后面看到,你不能直接访问 root 帐户。root 帐户是一个非常强大的帐户,你不能轻易使用它。我们将在系统上创建一个用户进行初始访问。

在图 2-26 中,我们将通过首先选择用户创建来创建一个名为 JSmith 的用户。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-26。

Selecting User Creation

你会注意到,在图 2-27 中,当我们输入全名时,建议的用户名被创建。您可以将它更改为您希望的任何内容,但是要注意,您可能需要在以后记住这个用户是谁。在本例中,我们将让此人成为管理员。这意味着该用户将拥有与根用户相似的能力,但在执行任何根级命令之前需要确认他或她的密码。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-27。

Creating new user JSmith

在图 2-27 中也选择该用户需要密码的选项;有些帐户是在您不希望用户访问主机或运行需要密码的命令的情况下创建的,例如运行 web 服务器的用户。您还会注意到,在创建这个用户之前,我们需要有正确匹配的密码。您的主机上也可以有系统或服务用户。这些系统或服务用户不需要密码(因为他们永远不会登录到主机,但可能会执行类似数据库服务器的程序)。我们将在第四章和第五章中讨论更多关于用户的内容。

修复密码后,我们将单击高级,然后继续图 2-28 。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-28。

Advanced settings for the user JSmith

在高级设置中,我们可以配置用户的主目录、他们的用户和组 id,以及他们是什么组的成员。在本例中,他们有权访问“车轮”组。这是给予他们同等“根”访问权限的组。我们在第五章中会详细讨论这些高级设置。

这是最后一个安装步骤。选择保存更改,然后在用户屏幕中选择完成。当您执行此操作时,您的服务器已经在后台继续安装过程,安装可能已经完成或即将完成。

在图 2-29 中,我们看到了完成的安装。选择重新启动,您的系统将重新启动并准备好供您使用。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-29。

Completed installation ready for Reboot

您的系统将开始重新启动,并向您呈现 GRUB2 (GRand Unified Bootloader)引导加载程序。引导加载程序是实际加载操作系统的一小段代码。这允许您选择要引导到的操作系统,或者引导到您可能已经安装的其他操作系统。如果您在此倒计时过程中按下任何键,加载将会中断。

按照图 2-30 中屏幕上的指示,您可以选择您希望启动的内核映像或改变它的加载方式(按 e 键)。你可以通过按 c 键访问 GRUB2 Shell。我们在第六章中讨论了更多关于引导加载程序的过程。如果您在上面突出显示的 CentOS Linux 上按 Enter 键,您将被引导到该内核。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-30。

Booting your new host Note

我们在这里互换使用“内核”和“操作系统”这两个词。在这方面它意味着同样的事情,内核是 Linux 操作系统。CentOS 是 Linux 的发行版或版本。

当系统通过引导加载程序时,我们需要输入磁盘加密密码,如图 2-31 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-31。

Disk encryption password

如果我们不知道密码,我们就只能走到这里,如果您忘记了密码,您将不得不重新开始。成功输入密码后,我们的系统现在开始从我们的磁盘加载信息,我们的系统继续启动。

现在,根据你在安装过程中是否选择了 Gnome 包,你会看到一个 EULA(最终用户许可协议)出现。老实说,这有点令人困惑,它是 gnome-initial-setup 包的一部分。这是你应该尝试通过它的顺序。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-32。

Gnome Desktop EULA

这是" 1 “,” 2,“和” c "的记录。如果你没有安装桌面系统,你就不用安装了,你可以继续。假设您安装了桌面,您现在将看到桌面登录屏幕。

在图 2-33 中,输入我们的 JSmith 用户密码。输入密码后,您将看到以下桌面设置屏幕。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-33。

Installation is complete and the system is ready to use

在图 2-34 中,我们选择本地化的桌面语言,并在右上角选择下一步。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-34。

Selecting localized desktop language

现在我们选择图 2-35 中的键盘布局。我们用的是美式键盘。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-35。

Selecting keyboard layout

在图 2-36 中,我们可以登录谷歌,访问谷歌应用程序和存储、ownCloud 甚至 Windows Live。这只有在你运行桌面或者允许通过这个服务器访问这些云存储服务的情况下才真正有用。除非你打算使用这些服务,否则你应该跳过。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-36。

You can sign into your favorite cloud provider or you can skip

在图 2-37 中,你可以看到一个谷歌登录的例子,但是如果你不愿意,你可以不注册任何一个。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-37。

An example of Google sign in

图 2-38 将我们带到桌面配置部分的最后。接下来,我们将快速向您展示如何访问终端控制台。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-38。

The end of the desktop configuration !

如图 2-39 所示,很容易找到应用程序和我们要找的终端应用程序。单击应用程序、实用程序,然后向下滚动到终端。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-40。

Your first terminal session

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-39。

To find the applications, click Applications

我们已经学完了 CentOS 安装部分。你可以进入下一章,我们将向你介绍 Linux 以及如何开始使用你的新主机。或者,你可以继续阅读本章来学习如何安装 Ubuntu。

Ubuntu 安装

Ubuntu 有两种版本:桌面版和服务器版。在本节中,我们将演示如何安装服务器版本。安装 Ubuntu Server 的过程与安装 CentOS 服务器非常相似。主要概念是相同的:选择语言和键盘布局,选择您想要的磁盘分区方式,然后选择您想要安装的软件包。

为了安装 Ubuntu,我们将从 Ubuntu 网站下载一个 ISO 文件,其中包含了我们完成安装所需的大部分数据。在本练习中,我们将使用来自 www.ubuntu.com/download/server 的全尺寸 ISO。

Note

Ubuntu 和 Debian 很好地利用了网络安装程序,提供了安装的灵活性。网络安装程序是操作系统的一个小版本,通常以 ISO 文件的形式提供,您可以将其刻录到 CD/USB 驱动器上并从中启动。它包含一个简单的内核和发行版的安装程序。net installer 为您的主机提供了引导和启动安装过程所需的基础知识,然后可以从在线存储库中下载任何其他软件或应用程序。这意味着您需要连接到互联网来安装新的主机。这也意味着在慢速互联网连接上安装一个完整的 4GB 操作系统可能需要很长时间,但是使用网络安装程序是加载较小系统的一个好方法。我们将在第十九章中进一步探讨网络安装,届时我们将探讨供应多个系统的方法。

我们将在这里做一些假设:

将 CD 放入 CD 驱动器或插入 USB 并打开主机电源后,您将看到的第一个屏幕允许您选择安装过程的语言(图 2-41 )。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-41。

Choose the installer language

然后你会看到一个闪屏(见图 2-42 ),给出几个选项。我们将选择安装 Ubuntu 服务器,但你也会看到一些其他新的选项。Ubuntu 有一个产品叫做 MAAS——或者金属即服务。这是一项针对数据中心规模安装的“零接触”部署服务。只要接通电源,MAAS 就可以安装数千台服务器,而不是只安装一台。我们将在第十九章中讨论这种供应。您还可以看到,我们可以运行一些系统检查或启动进入救援模式。在第九章中,我们将详细讨论系统恢复。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-42。

First installation splash screen

选择安装 Ubuntu 服务器后,我们会看到图 2-43 ,为您的安装选择语言。你应该选择适合你的语言。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-43。

Choosing the language for installation

如图 2-43 所示,我们选择了英语。这也将是最终系统的默认语言。

然后会要求您选择您所在的地区。这是您要安装的服务器所在的地理位置。在图 2-44 中,我们选择了澳大利亚。这有助于安装程序选择最近的 Ubuntu 档案库,以便以后获取额外的包。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-44。

Selecting your region

接下来,选择键盘和键盘布局首选项。如前所述,键盘布局是您正在使用的键盘映射。不同的地区会有不同的映射,因此请选择最适合您所在地区和语言的映射。在这里选择是,如图 2-45 所示,会引出一系列的问题和答案,通过这些问题和答案,Ubuntu 试图通过让你按下不同的键来判断出你使用的是什么类型的键盘。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-45。

Ubuntu attempts to detect your keyboard

选择“否”以节省时间,并直接告诉安装程序您正在使用哪种键盘。这里的默认设置适用于大多数安装,但是您可以自由选择最适合您所在地区的设置。图 2-45 开始显示键盘选择的一系列截图。

选择“否”后,出现图 2-46 中的屏幕,在此选择键盘的原点。我们会选择自己,继续前进。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-46。

Selecting the origin of your keyboard

在图 2-47 中,我们为自己选择了键盘布局,这将为我们提供澳大利亚计算机的标准按键映射。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-47。

Selecting keyboard layout Tip

安装完成后,您可以随时更改键盘设置。

Ubuntu 安装现在需要休息一下来探索你的硬件并发现更多关于目标主机的信息。完成此过程后,系统会提示您输入新主机的主机名。如图 2-48 所示,我们在这里输入 au-mel-ubuntu-1,因为它符合 CentOS 安装一节中讨论的命名标准。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-48。

Setting the hostname

接下来,要求您为此主机创建一个用户。在第五章中,我们将更详细地讨论用户管理,但重要的是要知道 Ubuntu 发行版通过禁用密码来禁用 root 用户帐户。root 用户类似于 Windows 管理员,可以访问主机上的所有内容。在 Ubuntu 中,用户不用像在 CentOS 安装中那样设置 root 用户的密码,而是使用一个名为 sudo 的特殊命令来访问所有与 root 用户相同的权限。我们将在第五章中详细讨论 sudo 命令。

在图 2-49 中,输入新用户的全名。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-49。

Entering the full name of a new user

在下一个屏幕(图 2-50 )中,您为新用户设置用户名。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-50。

Entering the username

最后,你为你的用户设置密码,如图 2-51 所示。同样,正如我们在 CentOS 安装一节中所讨论的,我们建议实施一个强而复杂的密码。您将被要求验证该密码。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-51。

Entering the password for the new user

接下来会询问我们是否希望加密该用户的主目录。这与 CentOS 中的磁盘加密具有相同的含义。我们将在图 2-52 中选择“否”,以便在几个步骤的时间内完成完整的磁盘加密。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-52。

Choosing not to encrypt the home directory

我们现在被要求确认我们的时区。这里我们使用当地时区。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-53。

Confirming time zone

接下来,您需要对您的主机进行分区。这种分区方式与 CentOS 安装示例中描述的方式非常相似。您可以根据主机的要求将磁盘划分为不同大小的分区。同样,在 CentOS 安装中,系统会提示您选择几个默认分区选项之一,或者使用分区工具定制您自己的分区选项。

  • 引导式—使用整个磁盘:此选项要求您选择一个硬盘,该硬盘将被完全擦除。然后,系统创建一个根分区和一个交换分区。
  • 引导式—使用整个磁盘并设置 LVM:此选项还会擦除所有数据。然后,它创建一个小的引导分区,并将剩余的磁盘空间用于 LVM 的根和交换卷。
  • guided—使用整个磁盘并设置加密的 LVM:此选项与前一选项相同,只是 LVM 数据全部加密。系统会要求您提供密码。请注意,您需要在引导时输入该密码,因此该选项不适用于远程或无头服务器。如果您丢失了加密密码,您将无法检索您的数据。
  • 手动:该选项打开分区编辑器,并允许您手动配置分区、软件 raid、加密和 LVM。如果您想要调整预先安装的 Windows 的大小,应该选择这个选项。

对于我们的示例主机,我们有兴趣使用“引导—使用整个磁盘并设置加密 LVM”选项。这使用了我们可用的整个硬盘,并利用了 LVM。如“CentOS 服务器安装”一节所述,

LVM 是一种管理分区和磁盘的强大方法,并为您以后更改分区布局提供了更大的灵活性。

Note

我们将在第九章更详细地讨论 LVM。

图 2-54 显示了我们默认的分区选择。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-54。

Choosing encrypted LVM to partition disks

接下来,选择要执行分区的驱动器。我们只能选择一个磁盘,如图 2-55 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-55。

Choosing the disk to partition Caution

如果磁盘已经包含分区,系统会提示您覆盖它们。如果您确信要这样做,请指定 Yes 并继续。如果您在以前的系统上安装,在此选择“是”将会销毁您可能拥有的任何现有数据。如果您不确定,请指定否。替代方法包括使用类似 GParted 的工具从某个 LiveCD 安装中对主机进行重新分区,安装在没有数据的硬盘上,或者安装在虚拟机上。

下一个屏幕(见图 2-56 )让您确认是否要将分区信息写入所选磁盘。在配置 LVM 之前,需要将分区信息写入磁盘。选择是并转到下一个屏幕。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-56。

Writing partition information to disk

我们现在需要添加一个密码来保护加密的数据。同样,请确保密码很长、很复杂,并且存储安全。

在图 2-57 之后,您还会被要求进行密码验证。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-57。

Providing the disk encryption password

接下来,系统会询问我们希望在 LVM 分区中使用多少卷组。在图 2-58 中,默认是所有可用的 LVM 分区,或 8.1G

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-58。

LV group partitioning

我们将在第九章更好地解释 LVM,但是正如磁盘分区是将磁盘分割成多个部分一样,LVM 组是这个概念的进一步扩展。LVM 卷来自一个称为组的共享存储桶。我们可以将这个组分割成我们的卷,还可以在创建卷后使用奇妙的磁盘魔术来扩展和收缩卷。

在图 2-58 中,我们被问及希望将多少卷组用于此分区,我们将选择默认使用全部,即 8.1 GB。

现在您将看到 LVM 分区布局,它将显示少量的交换空间,其余的用于root或/分区。当我们选择“是”确认该布局时,图 2-59 所示的 LVM 分区被创建并格式化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-59。

. Writing LVM partition changes to disk Note

交换空间是硬盘驱动器上的额外存储空间,用于从 RAM 中“溢出”数据。如果您发现您的主机频繁地使用所有的交换空间或频繁地交换,那么您可能需要调整您的主机,并且通常添加更多的 RAM。我们将在第九章和第十七章中更详细地讨论交换空间。

在安装的这个阶段,Ubuntu 将开始安装安装操作系统其余部分所需的基础软件包。如果您使用网络安装,这可能需要一些时间,取决于您的互联网连接。您将看到一个类似于图 2-60 所示的进度条。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-60。

Installing base system requirements

完成后,系统会询问我们是否需要使用代理服务器来下载完整安装所需的软件包。您可以提供包含用户名和密码的 URL(如果有的话)。我们将保留空白,如图 2-61 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-61。

Proxy server settings

之后,我们现在被问及我们希望如何处理我们系统上的软件更新。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-62。

Automatically install system updates

这可能是一个有争议的问题。有些人不喜欢在他们不知情的情况下更新他们的系统,因为这会导致意想不到的结果。理想情况下,您应该随时了解您的系统的状态,并在您选择的时间部署安全或其他方面的更新。然而,由于我们是刚开始,自动安装这些是首选。

Note

有了 LTS(长期支持)系统,您可以更加确定更新只会对您的系统做出最小的更改。此外,这些变化将在一个大的部署范围内得到很好的测试。对于前沿系统,你并不总是得到同样的确定性。

然后会询问您希望通过选择应用程序组在您的主机上安装哪些应用程序。我们选择了 DNS、LAMP server (Linux、Apache、MySQL 和 PHP)、mail (Postfix)和 OpenSSH,如图 2-63 所示。准备就绪后,选择继续。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-63。

Selecting applications for your host

在这个特殊的安装中,由于你选择安装的应用程序,你会被问一系列的问题来帮助 Ubuntu 配置或保护你选择的应用程序。每次在 Ubuntu 上安装需要配置输入的新应用,都会提示你回答类似的问题。

正如您在图 2-64 中看到的,您首先被要求提供 MySQL 数据库 root 用户的密码。这是您的 MySQL 安装的主密码,您应该输入一个安全且复杂的密码。您将被要求再次输入该密码进行确认。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-64。

Setting the MySQL root password

一旦您提供了该密码,系统会要求您描述您的邮件服务器配置。图 2-65 中的屏幕显示了配置选项,并简要描述了每个选项。我们将只选择默认的 Internet 站点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-65。

Configuring the mail server

我们将在第十二章中解释如何配置和保护邮件服务。选择此处的默认值将为您的域提供发送和接收邮件的基本安全配置。

接下来,您为您的邮件服务器提供域名(参见图 2-66 )。你现在应该输入主机的域名,我们将在第十二章中解释其他可能的选项。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-66。

Setting the mail server domain name

接下来,我们在 CentOS 安装指南中讨论了 GRUB,并讨论了它是如何加载操作系统的。在这个屏幕中,我们被要求将其安装到主引导记录中。MBR 是硬盘上的一小块空间,用于向系统描述分区布局。它还有一个安装 GRUB 引导加载程序的小空间。

Note

您可能看不到 GRUB 安装屏幕(图 2-67 )。运行 UEFI(统一可扩展固件接口)的系统不会显示下一个屏幕。我们将在第六章中讨论 BIOS(基本输入/输出系统)和 UEFI 的区别。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-67。

Installing the GRUB into the boot loader

在图 2-67 中,我们选择 Yes 将引导加载程序安装到 MBR 中。现在你的安装完成了,Ubuntu 会通知你,如图 2-68 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-68。

Installation complete

如果您使用的是 CD 或 DVD,它应该会自动弹出。如果您使用的是 USB 拇指驱动器,请取出并选择继续。您的系统现在将重新启动,您将看到一个密码提示(参见图 2-69 )来解密您的硬盘。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-69。

Decrypting hard drives before boot

现在我们已经完成了安装。系统现在正在启动。很快你会看到如图 2-70 所示的登录控制台。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-70。

Booting to the console screen

你会注意到 Ubuntu 不是引导到 GUI,而是引导到控制台屏幕。这是因为默认的 Ubuntu 服务器安装不安装 GUI。我们将在第四章中更多地讨论命令行和 GUI 的使用。

现在,您已经有了一个运行 Ubuntu 发行版的可用的邮件、DNS 和 web 服务器,可以为您的环境做进一步的定制了。

解决纷争

有时安装会因为某些原因而失败。最常见的原因是安装介质有缺陷;由于不支持或有缺陷的硬件,这种情况很少发生。

如果安装介质有问题,您可能会看到记录的读取错误,或者安装程序可能会显示一个错误,说明它无法读取文件。您应该检查安装 CD 或 DVD 是否有划痕。如果您是从 ISO 文件创建的 CD 或 DVD,那么以较低的速度刻录新盘可能是值得的。介质问题通常在安装过程的同一个步骤中重复出现。

如果连接中断,网络安装也可能会失败,因此请检查电缆是否插好,互联网连接是否正常。

不太常见的故障类型是由不受支持的硬件引起的。例如,如果安装内核不支持磁盘控制器,安装程序将无法访问硬盘。如果发生这种情况,请检查安装盘上包含的内核版本,并验证它确实支持您的硬件。您的发行版可能会有更新的版本,支持更多更新的硬件。现在这已经不太常见了,因为主要的制造商已经开始越来越多地支持 Linux,并积极地为内核贡献驱动程序。

在安装过程中随机出现的不可再现的崩溃通常表示硬件问题,最常见的问题是坏 RAM 或过热。你可以运行一个类似 memtest86 ( www.memtest.org/ ),的 RAM 测试器,你应该验证 CPU 和机箱风扇工作正常。

诊断信息

如果在安装时需要额外的诊断信息,可以从安装过程中访问有限的 shell 和一些日志记录信息。您可以使用这些来进一步诊断您可能遇到的任何问题。这些被称为虚拟控制台(也称为 tty ),我们将在第四章再次讨论它们。

在 Ubuntu 上,Alt+F2 和 Alt+F3 分别提供对有限 shell 的访问。Alt+F4 为安装程序提供详细的安装进度和日志。Alt+F1 组合键切换回安装程序界面。

OnCentOS,图形化安装在 Ctrl-Alt-F1 上运行。在 Ctrl-Alt-F2 上有一个 shell 提示符,安装消息转到 Ctrl-Alt-F3,系统消息转到 Ctrl-Alt-F4,其他消息出现在 Ctrl-Alt-F5 上。

如果安装没有按计划进行,您可以使用这些终端来收集有关您的安装的信息或查看任何可能有帮助的错误信息。

重新启动您的安装

出现问题后,通常应该从头开始重新安装。因为先前安装尝试的文件可能仍然存在于磁盘上,所以最好让安装程序重新初始化分区并从头开始。

疑难解答资源

如果遇到麻烦,不要害怕利用大多数 Linux 发行版周围的社区。很可能其他人也经历过和你一样的问题,并记录了解决方案。以下是一些可供尝试的资源:

摘要

在本章中,我们逐步完成了安装两个流行的 Linux 发行版的过程:

  • CentOS 服务器
  • Ubuntu 服务器

我们还解释了如果在安装过程中出现问题,您可以做些什么。在下一章中,我们将向您介绍一些我们用来帮助快速建立安装原型的工具。我们将在本书的其余部分更多地使用这些工具。

三、VirtualBox、Git 和 Vagrant 简介

在第二章中,我们向您展示了如何从 ISO 映像在物理服务器上安装 Linux。然而,部署 Linux 服务器还有许多其他选择——包括网络供应、部署虚拟机映像或在“云中”启动 Linux 实例现在,与本地或世界各地的其他人共享虚拟机的能力也更强了。我们将向你展示一种可能有助于你理解这本书的方法。

有些人发现刚开始使用 Linux 很难,因为有许多安装选项和选择——拥有所有这些选项我们认为是一件很棒的事情!幸运的是,有一些工具可以让研究和探索 Linux 变得更加容易。我们想借此机会向您介绍一些我们将在本书稍后使用的工具,或者您现在就可以使用它们来跟随我们,因为我们将在接下来的章节中带您了解不同的示例。对你来说,这意味着你可以在你的桌面上跟随,不管发生了什么,如果你犯了一个可怕的错误,你可以快速安全地恢复。另外,在这个过程中,您将熟悉我们使用的一些工具。

我们在原型和测试中每天使用的工具组合是 VirtualBox、vagger 和 Git(在我们试验和测试时跟踪我们配置的变化)。能够在不污染本地主机或其他服务器的情况下构建完整系统的原型是一个真正的好处。能够试用不同类型的操作系统并能够运行快速有效的测试来验证您的工作应该是所有管理员的目标。

一种既便宜又快速地构建服务器的方法是使用虚拟化。虚拟化有许多不同的形式,首先是 KVM、Xen 和 LXC 容器。在这一章中,我们将向您展示我们日常在桌面上进行原型设计和测试的工具——无论是 Linux 服务器、Mac 还是 Windows 主机。可以在 Windows 机器、Mac 和 Linux 上使用的一种虚拟化技术是 VirtualBox。出于这个原因,VirtualBox 是一个很好的入门级虚拟化平台,但它不是一个用于提高性能的平台。但是,如果您来自 Windows 和 Mac 世界,它允许您进一步探索像 Docker 这样的 LXC 容器软件,这需要运行 Linux 内核。

VirtualBox 还允许你在桌面上运行许多不同的操作系统。这样就省去了双启动不同操作系统的时间和麻烦(也就是说你必须关闭一个操作系统才能启动另一个)。它还允许您共享资源,比如客户操作系统和桌面之间的文件系统。

Git 是计算机软件的版本源控制技术。它非常擅长跟踪对基于文本的文件(如配置文件)的更改。与 GitLab、GitHub 或 BitBucket 等资源相结合,这是一种以开放和协作的方式管理组织变革的有效方式。使用 Git,您的配置更改可以与当前配置进行比较,并且您可以让其他管理员能够同意这些更改。您还可以使用 Git 构建测试管道,在部署到生产环境之前测试系统的变更。

虽然您可以使用 VirtualBox GUI 或 VirtualBox CLI 来创建、安装和管理您的 VirtualBox 计算机,但我们将向您介绍一款名为 vagger 的工具。vagger 是 VirtualBox CLI 命令的“包装器”,但它的功能远不止于此。它有基于文本的配置文件,适合跟踪 Git 中的变化。这有助于您原型化和开发主机构建或应用程序。它允许集成许多配置管理工具,如 Puppet、Ansible 或 SaltStack。但是一个主要的好处是你可以和其他开发者共享图片,或者“盒子”和构建指令。这有助于您的团队在一组一致的映像上进行开发,这些映像可以在桌面商用硬件上运行,并且易于创建、重新创建、开发和制作。

系统管理员发现这种快速原型非常有用。在过去,要查看一个新的软件包做了什么,或者操作系统的新更新会做什么,您可能需要找到一些备用服务器并运行新软件。有了 VirtualBox 和 vagger,你可以更快地完成这项工作,而且不会损害你的本地桌面。在本书的后面,我们将使用配置管理工具 Puppet 和 Ansible 来部署我们的服务器配置,我们将使用 VirtualBox、Later 和 Git 的组合来实现和跟踪这一点。

共享和下载 Vagrant 盒子或共享 VirtualBox 机器的能力意味着你可以快速集成或试用不同的技术。例如,您的应用程序中可能需要 memcached 服务。就您的应用程序而言,要用您的应用程序测试 memcached,您只需要 IP(互联网协议)地址和一个到达它的端口。与其为此构建另一个服务器,您可以下载一个由您团队中的其他人创建的带有完全配置的 memcached 服务的 travel box,或者从在线 travel box 存储库中下载一个公共可用的 box。从开发的角度来看,这有助于更快的原型和构建。如果您的应用程序与 memcached 配合得很好,那么您可以在以后的阶段为您的应用程序开发、测试和部署一个合适的 memcached 服务。

有关虚拟化技术的一般信息,请参见以下内容:

VirtualBox 安装

VirtualBox 非常容易安装。有 Windows、Mac、Linux 甚至 Solaris(对于不了解的人来说是 Unix 操作系统)的自安装包。只需进入 www.virtualbox.org/wiki/Downloads ,为您的操作系统选择合适的下载。您应该可以轻松安装 VirtualBox。如果你遇到麻烦,你可能会发现以下 PDF 文件的第二章很有帮助: http://download.virtualbox.org/virtualbox/5.0.14/UserManual.pdf

批准

VirtualBox 是 Oracle 拥有的一个开源虚拟化平台。它是在 GNU 通用公共许可证(GPL)版本 2 许可下发布的。该许可证的全部细节可在 www.gnu.org/licenses/old-licenses/gpl-2.0.html 找到。

如果您还希望使用 VirtualBox Oracle VM VirtualBox 扩展包,您需要同意 VirtualBox 个人使用和评估许可证的条款(参见 www.virtualbox.org/wiki/VirtualBox_PUEL )。本许可证仅允许用于个人或产品评估或学术用途。如果您打算将本产品用于商业用途,请遵守这些许可。

创建新的 VirtualBox 计算机

在我们启动新的 VirtualBox 机器之前,首先确保您已经下载了适用于 CentOS 7 的 ISO 映像文件。可以去 www.CentOS.org/download 取。有三个选项供您下载。DVD ISO 和完整的 ISO 将需要更长的时间来下载,但将包含一切你将需要一个桌面环境。如果你选择最小的 ISO,你的下载会更快,但是当你需要的时候,你必须从网上下载额外的软件包。

在本例中,我们从以下下载链接安装 CentOS:http://isoredirect.CentOS.org/CentOS/7/isos/x86_64/CentOS-7-x86_64-Minimal-1511.iso

VirtualBox 应用程序像桌面上的任何其他应用程序一样运行。找到应用程序并启动它。您将看到一个与此类似的屏幕。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-1。

VirtualBox console

全新安装不会安装任何虚拟机。要创建我们自己的 CentOS 安装,我们选择 New 按钮。在出现的窗口中,我们将为机器命名为 Centos7,并选择 Linux 和 Red Hat (64 位)的类型和版本。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-2。

Naming and setting VirtualBox type

接下来,我们可以配置内存大小。这可以是系统允许的最大值。一般来说,1024Mb 是合适的,或者 512Mb 用于没有图形桌面之类东西的较小系统。您也可以在安装后根据需要进行调整。使用滑块或键入系统所需的内存量。

Note

值得注意的是,您可以“过量使用”内存(即,将超过主机系统可用的内存分配给多个虚拟机),这意味着如果我的主机系统有 8GB RAM,我们可以有一个 2GB、一个 4GB 和一个 6GB 的虚拟机,它们都可以同时正常运行。如果三个虚拟机都使用全部分配的内存,我们就无法同时运行所有这三个虚拟机,或者至少会让主机爬行。在这种情况下,我们也许可以同时运行 2GB 和 4GB 的主机。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-3。

Memory allocation

我们现在被询问是否希望创建一个硬盘。在这里,您可以选择使用现有磁盘,也可以选择不使用磁盘。我们将单击“立即创建虚拟硬盘”,然后单击“继续”。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-4。

Choosing disk

我们可以选择下一步要选择的虚拟磁盘格式。VirtualBox 给了我们六种选择。我们将选择默认值 VDI (VirtualBox 磁盘映像) ,然后继续。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-5。

Selecting Virtual Disk format Note

有许多不同类型的虚拟磁盘格式。VirtualBox 拥有自己的 VDI 格式,并支持 VMWare 的 VMDK(虚拟机磁盘)、微软的 VHD(虚拟硬盘)、Mac OSX 的 HDD (Parallels 硬盘)、QEMU QED (QEMU 增强型磁盘)和 QCOW (QEMU 写入时复制)。这些文件系统都在磁盘文件上(意味着“磁盘”实际上只是文件系统上的文件,可以像任何其他文件一样被复制和移动)。这意味着,您可以创建一个具有特定格式的磁盘,如 VHD,然后将该映像文件移动到另一台主机并将其安装在那里。

我们现在可以选择磁盘是固定大小还是动态分配。简而言之,我们可以创建一个磁盘来分配我们所请求的全部磁盘大小,或者我们现在可以只分配其中的一小部分,当我们需要它时,VirtualBox 会分配更多的空间。动态分配的好处是,您可以过度分配磁盘(这意味着您可以向虚拟主机分配比主机上实际更多的磁盘空间)。缺点是会影响性能,因为 VirtualBox 会在需要时分配空间。一旦分配了磁盘,就不能将其释放回虚拟主机中的可用空间。但是,因为这些虚拟磁盘只是您主机上的文件,所以我们可以将它们移动到其他存储设备上,或者在我们的主机空间开始耗尽时清理它们。

我们将选择动态分配并继续。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-6。

Dynamically allocating disk

默认磁盘大小为 8GB。我们将选择此项,您可以使用滑块或键入您希望虚拟主机使用的磁盘数量。如果您愿意,您也可以在这里通过选择小文件夹图标来更改磁盘的名称和位置。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-7。

Disk amount

这就创建了虚拟主机 Centos7。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-8。

Centos7 VM is almost ready

我们可以更改新虚拟主机的设置或添加更多存储设备。我们需要添加一个存储设备来启动我们的操作系统。因此,我们将选择“Settings”并转到“storage”选项卡。你可以看到我们有一个空的 IDE 控制器。我们可以点击小 DVD 符号并选择选择光学虚拟磁盘文件。导航到之前下载 ISO 映像的目录。选择 CentOS-7 ISO。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-9。

Selecting image

磁盘现在应该显示为连接到 IDE 控制器。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-10。

Selected CentOS ISO is ready

我们现在准备安装我们的操作系统。只需遵循第二章中的步骤。然而,让机器快速启动并运行的另一种方法是使用另一个工具,vagger。我们稍后将向您展示这一点,但首先我们想向您展示 Git(我们实际上只是想要终端模拟器,但让 Git 在您的系统上工作并无大碍)。

安装 Git

在整个开发和系统管理任务中,您会发现一个非常方便的工具是 Git。Git 是一个分布式版本控制系统,它非常擅长将您对配置文件的更改存储在不同的工作块或提交中。您可以为这些提交添加描述,以便关注您的人(并且总是有人关注您)可以查看您所做的更改,并看到描述该更改的注释。您还可以使用 Git 快速查看不同提交之间发生了什么变化。

Note

Git 来自于版本控制系统的悠久传统。过去的主要版本控制系统(VCS)是集中的,这意味着你在一个 VCS 上做所有的修改。Git 将它改为分布式的,这样您就不必再依赖“一个”服务器来为您的所有团队提供服务。这极大地帮助了分布式团队能够在非常复杂的系统(如 Linux 内核)上进行更改,并成为协作、共享代码和项目的一种很好的方式。

下载 Git 是非常无痛的。您可以在大多数(如果不是全部的话)Linux 发行版中以标准包的形式获得它,也可以访问

http://git-scm.com/download

我们将演示在 Windows 机器上的安装,因为这比在 Mac 或 Linux 上安装 Git 更不常见,并且有一些可能难以理解的选项。

Tip

这里的 Git 站点也有 Mac、Linux、Windows 的安装说明: https://git-scm.com/book/en/v1/Getting-Started-Installing-Git

开始,下载并打开安装程序后,我们会被问一些问题。这些对一些人来说可能是新的。其中之一就是在 Windows 中设置%PATH%变量。虽然这些设置由您决定,但我们建议您采取以下措施:

在图 3-11 中,我们选择允许我们在 Windows 命令提示符和 Git Bash 提示符下使用 Git 的设置。这给了我们在处理文件时一点灵活性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-11。

Allow Git commands from the windows command line

下一步可能也需要一些思考。令人困惑的是,Windows 和 Linux 系统(甚至 MAC)有不同的方式来告诉计算机一行的结尾在文件的什么地方。在 Linux 中,文件中一行的结尾被称为 LF(换行),在 Windows 中被称为 CRLF(回车换行)。因此,当您对文件进行更改时,操作系统会将适当的行尾添加到文件中每一行的末尾。当您在另一个操作系统上打开这个文件时,您会在编辑器中看到奇怪的格式。我们在这里所做的是在您提交这个更改时控制 Git 做什么。Git 可以控制这些不可见的行尾应该是什么。

在图 3-12 中,我们允许 Git 将 LF 转换为 CRLF 以进行窗口编辑,但是当我们提交文件时,我们再次将 CRLF 转换为 LF。有了这个选项,您应该能够毫不费力地与 Git 控制的文件进行交互。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-12。

Allow Git to change LF to CRLF on checkout and CRLF to LF on commits

接下来,我们配置哪个终端模拟器用于 Git。Git Bash 是学习和与 Git 交互的好方法。它有许多可用的 Linux 命令和 Git 命令。当然,如果你觉得用 Windows 控制台更舒服,请随意选择。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-13。

Selecting the terminal

下一个屏幕现在不是很重要。通过选择图 3-14 中的复选框,您可以添加一些实验性的性能调整。我们不会选择它,但是如果你喜欢冒险,你可以选择。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-14。

Experimental performance options

去吧,普西

让我们快速浏览一下您需要知道的通用 Git 命令。Git 不同于集中式版本控制软件的地方在于它是去中心化的!这意味着 Git 存储库的每个克隆都相当于存储库的一个“主”副本——包括历史。这相当于每个开发人员的本地副本也是存储库的分布式备份。然而,大多数人使用集中托管的 Git 存储库服务,如 GitLab、GitHub 或 BitBucket,首先要做的事情之一是克隆存储库:

$ git clone git@<githost.com>:<username>/git-repository.git

上述命令将使用 SSH 协议登录到 githost.com 服务器(您也可以使用 HTTPS、Git 或本地协议)。您可以使用 SSH 公钥在 githost.com 服务器上进行身份验证,从而获得对存储库的访问权。然后,Git 将在本地文件系统的同名目录中创建 git-repository.git 存储库的副本。

一旦您有了存储库的副本,您就可以开始进行更改了。第一步是创建一个分支。分支是一组离散的提交,它们都与特定的变更相关。有一个主要分支被认为是主线或主分支(通常称为主)。分支中的更改通常会合并到主分支中。要从主分支创建新分支,请执行以下命令:

$ git branch my_change

您这样做是为了在一个命名的分支中创建包含的和离散的工作分支——而 Git 的分支很便宜(这是卖点之一!).

现在,您已经克隆、创建了一个分支,并且编辑了一些文件。您可以使用以下命令查看您对这些文件所做的更改:

$ git diff

该命令将显示存储库中的所有更改,如果您希望缩小比较的范围,可以在命令行中添加目录或文件名。但是,假设您对您的差异感到满意,并且您现在准备提交这些更改。

$ git commit –v path/to/file/or/directory

您将再次看到您的更改的差异,并且您将能够向提交添加提交消息,以便人们知道更改是什么。好的提交消息让你知道你做了什么——最好是做了什么和为什么做。错误的提交消息是“更新的文件”现在,您的分支中有一个提交,您可能希望将它合并回主分支中(如果您正在处理一个共享项目,您可能不希望直接这样做——您可能希望将您的分支“推”到您克隆的远程存储库中,并让其他人先检查它)。要合并回主服务器,请发出以下命令:

$ git checkout master
$ git pull origin master
$ git merge my_change

我们在上面所做的是,我们首先离开 my_change 分支,并检查主分支——主分支通常是从中提取生产代码的分支。我们首先在源(或者 githost.com 主存储库)上做一个“拉”来拉进任何其他已经被签入的变更。然后,将您的更改合并到主存储库中,并处理由此引起的任何冲突。一旦您对存储库的状态感到满意,您就可以“推”回原点(githost.com 存储库)。

$ git push origin master

您的更改现在可以被任何使用该存储库的 githost.com 副本的人共享。当然,这是一个非常简单而且可能很糟糕的例子。像上面这样的工作流毫无疑问会导致破坏,你应该有一种在合并到 master 之前测试代码的方法。GitHub 在这里提供了一个很好的关于 git 工作流的文档: https://guides.github.com/introduction/flow/

Note

有关 Git 的更多信息,请参见 https://git-scm.com/book/en/v2

对于 Windows 用户,现在已经安装了 Git,可以使用 Git Bash 访问有用的 Linux 实用程序,如 less、vi、grep 和 tail。我们将在下一节向您展示如何使用 Git Bash。

介绍 Vagrant

vagger 是一种在开发人员之间快速方便地共享和分发开发环境的方式。从这个意义上说,“开发环境”是一组虚拟机和运行这些虚拟机的配置。最初,它被设计为通过配置文件和命令行工具的组合来管理 VirtualBox 机器,但后来它扩展到更多方面,并支持其他虚拟化技术。它是由 Mitchell Hashimoto 开发的,他随后凭借该产品的受欢迎程度创建了 HashiCorp。它是用 Ruby 编写的,可以在任何支持 Ruby 的操作系统上运行。目前你可以下载并在 Linux、Mac OSX 和 Windows 上运行它。

安装 Vagrant

您首先可以在此下载适用于您的操作系统的软件:

www.vagrantup.com/downloads.html

Vagrant 的意思是由命令行驱动;它不提供图形用户界面(GUI)。在苹果电脑上,你可以从终端窗口操控一切。在 Windows 机器上,你可以从cmd.exe程序、PowerShell 或者我们刚刚安装的 Git Bash 运行命令。

Tip

有些事情您无法在 Windows 命令或 PowerShell 控制台中直接完成。其中一个是宋承宪。SSH 是一种通过网络访问控制台的安全方式。通过安装 Git Bash,我们可以访问 SSH 客户端。如果您不能让 SSH 工作,您应该检查 SSH 可执行文件的路径是否在您的控制台环境的路径中。Windows 中常见的地方是C:\Program Files\Git\usr\bin。使用$env:path =+'; C:\Program Files\Git\usr\bin'将其添加到您当前的 PowerShell 环境中。对于 Windows 命令提示符,set PATH=%PATH%;C:\Program Files\Git\usr\bin。您需要永久地设置它,因为它只持续您当前的控制台会话。我们会让你自己调查如何做到这一点。

批准

Vagrant 是在麻省理工学院的许可下分发的。这意味着你可以用任何你想要的方式使用这个软件。您可以在以下位置查看许可证

https://raw.githubusercontent.com/mitchellh/vagrant/master/LICENSE

流浪的概念

最初开发的时候,vagger 试图解决的问题空间是虚拟机及其配置在 VirtualBox 下运行的共享。从那时起,它扩展了对虚拟化技术的支持,但其核心租户保持不变。它通过两种方式做到这一点。它提供了分发和下载其他 VirtualBox 虚拟机的机制,以及管理它们的配置和运行的工具。

主要是 Vagrant 用盒子工作。盒子只是预建的 VirtualBox 虚拟机的压缩文件,这些虚拟机配置了一些特殊的东西。他们有一个“流浪”用户,可以访问 root 权限,OpenSSH 已经安装并正在运行。vacant 使用 VirtualBox 命令(或 VBoxManage 命令)来创建、配置、启动和停止这些机器,它通过 vacant 用户结合使用 VirtualBox CLI 和 SSH 访问来完成这些操作。你可以从 HashiCorp 的另一项名为 Atlas 的服务下载盒子,也可以自己制作。你也可以通过 Atlas 存储、分发和发布盒子。Atlas 提供私人和企业服务,并与 HashiCorp 的其他服务整合。

Note

构建你自己的 Vagrant 盒子有点复杂,但是当你更加熟悉 Linux 的时候,你应该尝试一下。当你准备好了,请点击这里查看详情 www.vagrantup.com/docs/boxes/base.html

您也不仅限于使用 VirtualBox 机器。你可以运行亚马逊 AWS 或者 Openstack 实例,LXC 容器,当然还有 Docker 容器。在本练习中,我们将向您展示如何使用 VirtualBox 虚拟机。你可以在闲暇时自由探索他人。

How Vagrant Integrates with Virtualbox

在本练习中,我们将初始化一个浮动配置文件,对该文件进行一些编辑,然后使用浮动 CLI 启动该 VirtualBox 虚拟机。但是这一切是如何运作的呢?

嗯,当你下载一个流浪盒,它基本上是一个压缩的 tarball(类似于压缩文件)的 VirtualBox 虚拟机,包括虚拟磁盘映像。Vagrant 命令将把这些盒子存储在你的主目录的适当的.vagrant.d/boxes目录中。

virtualbox/
total 1029016
drwxr-xr-x  6   dennismatotek  staff             204 12 Dec 16:44 .
drwxr-xr-x  3   dennismatotek  staff             102 12 Dec 16:44 ..
-rw-r--r--  1   dennismatotek  staff             505 12 Dec 16:44 Vagrantfile
-rw-------  1   dennismatotek  staff       526833152 12 Dec 16:44 box-disk1.vmdk
-rw-------  1   dennismatotek  staff           10589 12 Dec 16:44 box.ovf
-rw-r--r--  1   dennismatotek  staff              25 12 Dec 16:44 metadata.json

当您第一次发出 vagrant up 命令时,正如我们马上要做的,variant 将下载指定的 box,存储在一个类似命名的目录中,然后使用 VBoxManage import 命令将下载的 VirtualBox 机器(box.ovf)导入到 VirtualBox 本身。

然后,VirtualBox 将为该虚拟机分配一个 UUID(通用唯一标识符),然后,vagger 可以使用该标识符发出 VBoxManage startvm —headless 命令。类似地,当调用一个 vagrant halt 时,vacant 将使用 vbox manage control VMpower off 命令来停止虚拟机。

vagger 还会做一些事情,比如设置网络端口转发(用于 SSH 访问和其他网络服务,如果配置的话)和在 virtualbox 虚拟机中挂载文件系统(除非您配置为不这样做)。

这些例子是特定于 VirtualBox 虚拟机的——但是,通过发出所需的命令或 API(应用程序编程接口)调用来管理它们,vagger 支持其他虚拟化和基于云的实例。这意味着我们可以使用同一个 lavour up 命令来启动 VirtualBox 虚拟机或 AWS 实例——但是当然要对配置文件(lavour file)进行适当的更改。

流浪汉入门

安装后,您需要做的第一件事是打开一个终端,或者通过cmd.exe、PowerShell 提示符或 Git Bash 提示符进入命令提示符。转到您最喜欢的工作区,创建一个名为 first 的新目录或文件夹。使用cd命令进入新目录。

无论您使用哪种操作系统,命令的输出都是相同的。发出以下命令:

> vagrant
Usage: vagrant [options] <command> [<args>]

   -v, --version                    Print the version and exit.
   -h, --help                       Print this help.

Common commands:
    box             manages boxes: installation, removal, etc.
    connect         connect to a remotely shared Vagrant environment
    destroy         stops and deletes all traces of the vagrant machine
    global-status   outputs status Vagrant environments for this user
    halt            stops the vagrant machine
    help            shows the help for a subcommand
    init            initializes a new Vagrant environment by creating a Vagrantfile
    login           log in to HashiCorp's Atlas
    package         packages a running vagrant environment into a box
    plugin          manages plugins: install, uninstall, update, etc.
    port            displays information about guest port mappings
    powershell      connects to machine via powershell remoting
    provision       provisions the vagrant machine
    push            deploys code in this environment to a configured destination
    rdp             connects to machine via RDP
    reload          restarts vagrant machine, loads new Vagrantfile configuration
    resume          resume a suspended vagrant machine
    share           share your Vagrant environment with anyone in the world
    snapshot        manages snapshots: saving, restoring, etc.
    ssh             connects to machine via SSH
    ssh-config      outputs OpenSSH valid configuration to connect to the machine
    status          outputs status of the vagrant machine
    suspend         suspends the machine
    up              starts and provisions the vagrant environment
    vbguest
    version         prints current and latest Vagrant version

For help on any individual command run `vagrant COMMAND -h`

Additional subcommands

are available, but are either more advanced
or not commonly used. To see all subcommands, run the command
`vagrant list-commands`.

Listing 3-1.Vagrant Options

这将向您显示可用的子命令的完整列表。我们将只向您展示四个,以帮助您入门。我们计划向您展示的任务是

  • 初始化第一个目录
  • 更新 Vagrant 的配置文件
  • 启动我们的流浪盒子
  • 检查状态
  • 最后,SSH 进入控制台

我们需要做的第一项任务是初始化我们的第一个目录。发出如下命令,vagrant init如清单 3-2 所示。

> vagrant init
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
Listing 3-2.Vagrant init

Vagrant 初始化命令只是把一个文件放在你的目录中。这是我们用来配置第一个 Vagrant 图像的文件。如果我们使用ls命令列出我们目录的内容,我们将会看到如下内容(对于 Windows cmd.exe,您可能需要发出dir)。

> ls
Vagrantfile
Listing 3-3.Showing the Vagrantfile

在图 3-3 中,我们有一个名为 Vagrant 文件的文件,这个文件包含了vagrant命令用来创建 Vagrant 主机的配置信息。如果我们查看该文件的内容,它看起来非常像 Ruby 代码。那是因为它是。这个文件使用了 Ruby 代码,在执行 vagger 命令时,vagger 解析并加载这个文件。这意味着您可以在文件中使用 Ruby 语言来创建列表、数组、散列等等。这在以后处理你的 Vagrant 文件中的多个图像时会很有用。现在用你的编辑器打开 Vagrant 文件。如果你使用 Git Bash,你可以使用 vi 程序。我们将在第四章中详细解释 vi。

流浪汉文件的内容看起来类似于清单 3-4 中所示的缩短版本。

Vagrant.configure(2) do |config|
 config.vm.box = "base"

 # config.vm.network "forwarded_port", guest: 80, host: 8080

 # config.vm.network "private_network", ip: "192.168.33.10"

 # config.vm.synced_folder "../data", "/vagrant_data"

 # config.vm.provider "virtualbox" do |vb|
 #   # Display the VirtualBox GUI when booting the machine
 #   vb.gui = true
 #
 #   # Customize the amount of memory on the VM:
 #   vb.memory = "1024"
 # end
end

Listing 3-4.
Vagrantfile

在清单 3-4 中,我们删除了很多注释和建议设置。不用深入 Ruby 语言,你就可以看到我们可以在 do 和 end 语句之间编写代码块。我们将Vagrant.configure(2)的结果传递给配置变量对象。然后我们可以用它来分配我们的 Vagrant 配置。在图 3-4 中,我们将config.vm.box设置为等于“基数”

Tip

Ruby 是一种非常灵活的编程语言。它类似于 Python 语言,另一种非常流行的强大语言。我鼓励你去 http://tryruby.org/ 看看。

因此,让我们为我们的第一个 Vagrant 形象创建一个基本配置。首先,我们可以转到以下链接,查看所有可用的框:

https://atlas.hashicorp.com/boxes/search

Note

记住一个流浪的“盒子”是一个自包含的 Linux 虚拟机,它可以在你的 VirtualBox 虚拟化软件内部运行。HashiCorp 在 Atlas 上托管的盒子是由社区成员或组织创建的,在设计和用途上千差万别。

Ubuntu 团队定期推送一个官方的 Vagrant 盒子供公众下载。我们将把它作为我们的流浪箱。这些 Vagrant 盒子是“基础”图像。你下载它们,并把它们作为你自己的盒子的基础。有很多可供你探索。

在清单 3-5 中,我们添加了ubuntu/xenial64框。当我们启动流浪主机时,流浪会自动从 Atlas 下载这个。

Vagrant.configure(2) do |config|
 config.vm.box = "ubuntu/xenial64"
end
Listing 3-5.Vagrantfile—Adding aBox

在清单 3-5 中,我们将config.vm.box设置为ubuntu/xenial64

Note

此处列出的是 64 位操作系统版本(ubuntu/xenial64)。根据您使用的系统,您可能只有 32 位操作系统。如果是这种情况,可以用ubuntu/xenial32替换上面的框来使用 32 位版本。如果您的系统不支持 64 位操作系统,将弹出一条消息:Vt-x/AMD-V 硬件加速在您的系统上不可用。这表示您的处理器没有启用适当的硬件虚拟化扩展,或者您的处理器不支持虚拟化。你可以启用这些扩展,你可以查看下面的 FAQ 帖子, https://forums.virtualbox.org/viewtopic.php?f=1&t=62339 ,寻找可能的解决方案。

接下来,我们将向您展示如何配置转发端口。转发端口允许从您的主机到 VirtualBox 内部运行的漫游主机的端口连接。在本例中,我们将主机 localhost 地址上的端口 8080 连接到来宾漫游主机的端口 80。这意味着如果我们在我们的漫游客户机上运行一个 web 服务器,我们可以打开我们的浏览器并指向http://localhost:8080,让一个 web 服务器监听我们的漫游主机上的端口 80 进行响应。

Vagrant.configure(2) do |config|
 config.vm.box = "ubuntu/xenial64"
 config.vm.network "forwarded_port", guest: 80, host: 8080
end
Listing 3-6.Vagrantfile—Adding Forwarded Ports

在清单 3-6 中,您可以看到我们通过设置config.vm.network来添加转发端口。我们还可以将文件夹从我们的主机同步到我们的来宾主机。这在开发时是非常宝贵的。默认情况下,vacator 会将当前目录挂载到 guest 的/vagrant目录中。出于本练习的兴趣,让我们将./temp目录挂载到 guest 虚拟机上的 Vagrant 用户的主目录中。

Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/xenial64"
  config.vm.network "forwarded_port", guest: 80, host: 8080
  config.vm.synced_folder "./temp", "/home/vagrant/temp"
end
Listing 3-7.Vagrantfile—Adding Synced Folder

最后,我们可以配置以下内容。在这个代码组中,我们作用于 virtualbox 提供程序。也就是运行我们机器的底层虚拟化平台。有时,启动您的主机并在启动时查看控制台上发生了什么是有用的,尤其是在学习和调试时。下面将启用 VirtualBox GUI,并将 guest 虚拟机的内存设置为 1024Mb。

Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/xenial64"
  config.vm.network "forwarded_port", guest: 80, host: 8080
  config.vm.synced_folder "./temp", "/home/vagrant/temp"
  config.vm.provider "virtualbox" do |vb|
    vb.gui = true
    vb.memory = "1024"
  end
end
Listing 3-8.Vagrantfile—Adding Synced Folder

让我们把这些都保存到我们的流浪档案中,并选出我们的第一位流浪主持人。发出清单 3-9 中所示的命令。

> vagrant up
vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
There are errors in the configuration of this machine. Please fix
the following errors and try again:

vm:
* The host path of the shared folder is missing: ./temp

Listing 3-9.Issuing vagrant up

哦看。在清单 3-9 中,我们有一个错误。Vagrant 在这里告诉我们,出了问题的“虚拟机:*共享文件夹的主机路径丢失:。/temp "。当然,我们没有创建临时文件夹。在我们启动机器之前,travel 将解析 travel file 并确保所有的东西都在适当的位置。继续在第一个目录中创建temp目录,然后再次尝试该命令(mkdir temp)。

> vagrant up
Listing 3-10.Issuing Vagrant up

在第一次“启动”时,您将看到清单 3-11 中所示的内容:

==> default: Importing base box 'ubuntu/xenial64'...
==> default: Setting the name of the VM: first_default_1455714694375_15606
==> default: Clearing any previously set forwarded ports...
==> default: Fixed port collision for 22 => 2222\. Now on port 2203.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 80 (guest) => 8080 (host) (adapter 1)
    default: 22 (guest) => 2203 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2203
    default: SSH username: vagrant
    default: SSH auth method: private key
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
Listing 3-11.
Vagrant up Output

在清单 3-11 中,我们可以看到我们正在导入一个基础盒子(这个已经被下载了,你也可以看到下载步骤)。虚拟机的名称将采用目录 _ 框名 _ 随机数的形式。您将能够在您的 VirtualBox 控制台中查看它(并像任何其他 VirtualBox 一样更改设置)。我们可以看到网络正在建立,包括我们将用于 SSH 的端口(22 = > 2222)。有自动端口冲突检测,所以不使用端口 2222,Vagrant 选择端口 2203。接下来是 80 = > 8080 的端口转发,然后我们等待机器启动。当它启动时,我们创建一组 SSH 密钥,用于登录主机。这个密钥对的公钥被注入到机器中。最后,我们让机器启动并准备好。

==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
    default: /vagrant => /Users/dennismatotek/workspace/source/book/first
    default: /home/vagrant/temp => /Users/dennismatotek/workspace/source/book/first/temp
Listing 3-12.Final Steps of the vagrant up

一旦机器启动,我们就可以挂载我们的目录。我们有一个默认挂载,它将我们的第一个目录挂载到/vagrant中,我们有我们的临时目录,我们已经将它挂载到/home/vagrant/temp.

好了,现在我们的主机已经启动并准备好了,让我们用清单 3-13 中所示的命令检查它的状态。

> vagrant status
Current machine states:

default                   running (virtualbox)

Listing 3-13.
Vagrant Status

默认情况下,我们的主机名是 default。你可以在你的流浪文件中给我们的机器起不同的名字。在清单 3-13 中,我们可以看到我们的处于运行状态。

接下来,让我们看看我们是否可以登录到我们的流浪机器。为此,我们发出清单 3-14 中所示的命令。

> vagrant ssh
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-35-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

  System information as of Wed Feb 17 13:11:35 UTC 2016

  System load:  0.77              Processes:           80
  Usage of /:   2.7% of 39.34GB   Users logged in:     0
  Memory usage: 12%               IP address for eth0: 10.0.2.15
  Swap usage:   0%

  Graph this data and manage this system at:
    https://landscape.canonical.com/

  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud

0 packages can be updated.
0 updates are security updates.

vagrant@vagrant-ubuntu-xenial-64:∼$

Listing 3-14.SSH to the Vagrant

Host

vagrant@vagrant-ubuntu-xenial-64:∼$我们有我们的 Linux Ubuntu 主机的命令提示符。如您所见,这是构建和运行 Linux 服务器的一种非常简单的方法。当您想要停止您的漫游主机时,只需键入 exit 退出终端会话,然后发出 flower halt。

在图 3-15 中,我们展示了运行在 Windows 主机上的 Git Bash 终端的步骤和输出。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-15。

Summary of actions

摘要

本章向您介绍了一些方便的虚拟化软件,它们将帮助您快速、安全地试验和使用 Linux。我们还向您展示了一些用于开发和测试服务器配置代码的工具。这也使得与他人共享您的开发环境变得更加容易。

在概述中,我们展示了以下内容:

  • 如何安装 VirtualBox
  • 如何创建虚拟主机
  • 如何安装 Git(在 Windows 上)
  • 如何安装 Vagrant
  • 如何使用 vagger 和 VirtualBox 调出虚拟主机

在下一章,我们将带你参观一台 Linux 主机。在那一章中,我们将介绍一些基本概念,比如登录、导航和一些基本的 Linux 命令。

四、Linux 基础知识

在第一章,我们谈了一点什么是 Linux,它来自哪里,在第二章,我们安装了我们的第一台 Linux 主机。在这一章中,我们将向你介绍一些基本的 Linux 概念和技能。有些人觉得 Linux 令人生畏,因为它看起来像带有奇怪开关和神秘选项的神秘命令。我们将解码一些你需要知道的神秘命令,并演示这些命令及其功能。

本章重点介绍入门、登录、本地和远程登录,以及使用和导航命令行和文件系统。我们还将介绍一些基本的 Linux 概念:用户、组、包、服务。然后,我们将深入研究文件系统,以及如何处理文件和目录,包括文件类型,如何设置权限,然后读取、编辑和管理它们。在接下来的章节中,我们将扩展这些概念,并向您介绍为了操作和管理您的 Linux 主机您需要知道的关键活动。

在这一章中,我们将主要讨论在命令行上运行的命令。这将向您介绍如何使用命令行,并帮助您熟悉如何操作它。这并不是说 Linux 没有广泛的图形管理工具。如果您更喜欢类似 Windows 的图形化环境,您仍然可以轻松有效地找到管理 Linux 主机的机制。对于我们将要向您展示的大多数命令行工具,都有一个图形等价物。然而,您会发现 Linux shell 在一个或多个 Linux 系统上运行起来更容易、更快。

Note

这一章是对 Linux 的广泛介绍。这不会让你成为专家。相反,它将为您迈出部署 Linux 基础设施的第一步做好准备。

入门指南

如果您还没有安装 Linux 主机,那么在开始安装 Linux 之前,尝试 Linux 命令的最简单方法是尝试一个 LiveCD。LiveCDs 是 CD、DVD 或 USB 上的 Linux 发行版。要使用 LiveCD,您需要下载 ISO 文件格式的图像。您可以选择任何 LiveCD 并将该图像刻录到 CD、DVD 或 USB 上。以下是一些描述如何将 ISO 文件刻录到 CD、DVD 或 USB 上的 URL:

刻录完 LiveCD 后,您可以将光盘或 USB 插入电脑并重新启动。大多数计算机会自动检测 LiveCD,并为您提供从它启动的选项。

Note

如果您的主机不提供从 CD/DVD 启动的选项,您可能需要调整 BIOS(基本输入/输出系统)设置来更改启动顺序,以便 CD、DVD 或 USB 在硬盘启动之前启动。

LiveCD 将加载并向您展示一个可运行的 Linux 发行版,您可以进行试验。默认情况下,这不会在您的主机上安装任何东西,当您取出 CD/DVD 并重新启动计算机时,您的原始桌面配置将可用。

LiveCDs 可用于各种发行版。一些可以尝试使用其 LiveCDs 的好发行版包括:

Tip

http://en.wikipedia.org/wiki/Comparison_of_Linux_LiveDistros 有一些可用的 Linux LiveCDs 的比较列表。

你也可以考虑使用 Vagrant,就像我们在第三章给你展示的那样。使用 vagger 是探索和学习 Linux 的一个很好的方法,不需要安装物理服务器,它运行在 VirtualBox 虚拟化环境中。

登录

在您的 Linux 主机或 LiveCD 启动后,您将看到一个登录提示:命令行或 GUI(图形用户界面)登录提示。

在图 4-1 中,您可以看到 Ubuntu Linux 主机的典型命令行登录提示,在图 4-2 中,您可以看到 CentOS 主机的图形化登录。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-2。

Graphical login prompt

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-1。

Command-line login prompt Note

如果您的初始屏幕与这些略有不同,不要惊慌,因为不同版本之间确实会出现一些微小的变化。

在任一登录提示符下,您都需要提供您的用户名和密码或类似形式的身份验证。(和 Windows 一样,Linux 也可以使用智能卡、令牌或其他机制来验证用户。)

如果您刚刚安装了一个 Linux 主机,系统会提示您创建一个用户,现在您可以使用该用户登录了。如果您正在用 LiveCD 测试 Linux,您可能会看到一个默认的用户名和密码,系统会提示您使用该用户名和密码登录,或者您甚至可以自动登录。例如,Ubuntu LiveCD 的默认用户名为ubuntu,密码为 Ubuntu,它通常会自动让您登录。如果您没有看到默认的用户名和密码,您可能需要查看 LiveCD 的联机文档,或者系统可能会提示您创建用户名和密码。

一旦您的主机验证了您的访问权限,您就可以登录了,根据您的配置,您的主机将显示命令行或 GUI 桌面环境。

Linux 与微软视窗系统

这部分的标题可能听起来有点像我们即将呈现一场职业摔跤比赛。然而,更多的是 Linux 和微软 Windows(以下简称 Windows)之间的相似之处,而不是它们的不同之处。Windows 和 Linux 都是操作系统,虽然在许多技术方面不同,但它们有许多相同的概念。因此,我们将研究这些相似之处,以帮助您利用一些关于 Windows 的现有知识来理解 Linux 中的相关概念。

在这本书里,我们将看看如何与你的 Linux 主机接口。有两个主要的界面:GUI 桌面和命令行。我们将在本书中探索这两种接口。

图形用户界面桌面

Linux 和 Windows 都可以有图形用户界面。与最近的 Windows 版本不同,Linux 总是能够引导到 GUI 或命令行。一旦启动,你也可以在这两种模式之间切换,我们将在本章后面的“Shells”一节中讨论如何切换,在第五章中会有更详细的介绍。

在 Linux 上,GUI 是几个应用程序的组合。基本的应用程序被称为 X 窗口系统(你也会看到它被称为 X11 或简称为 X)。X 应用程序提供了一个底层的“窗口”环境。

Note

您不需要担心安装或管理 x。如果您安装了 GUI 桌面,您的发行版通常会为您安装它。如果你没有安装一个 GUI 桌面,例如,如果你正在安装一个服务器,X 将不会被安装,你通常将通过命令行界面与 Linux 交互。默认情况下不加载 GUI 的发行版的一个例子是我们在第二章安装的 Ubuntu 服务器发行版。

然后在 X 之上添加一个桌面环境来提供“外观”和桌面功能,比如工具栏、图标、按钮等等。Linux 上流行两种主要的桌面环境:Gnome 和 KDE。大多数发行版都将这些桌面环境之一作为默认环境;例如,Gnome 是 Debian、CentOS、Red Hat 和 Fedora 发行版的默认桌面环境,KDE 是 ubuntu 衍生版 Kubuntu 和 SUSE 的默认桌面环境,而 Ubuntu 使用 Unity,这是一个 Gnome shell(基于 Gnome)。

Tip

为了保持 Linux 的灵活性,您可以在所有这些发行版上更改默认的桌面环境。Unity、Gnome 和 KDE 也不是唯一的选择。有关当前可用桌面的讨论,请勾选 www.techradar.com/au/news/software/operating-systems/best-linux-desktop-which-is-ideal-for-you--1194516

在图 4-3 中,你可以看到 Ubuntu 发行版上默认的 Gnome 桌面。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-3。

Ubuntu Unity desktop on the Xenial Xerus release

Unity 桌面提供了许多底层的 Gnome 工具。在本书中,我们将主要讨论例子中的 Gnome 桌面,这些例子也适用于 Unity 桌面。

命令行

在 Linux 世界中,命令行是您可以使用的最强大的工具之一。命令行可以被称为“控制台”、“终端”或“Shell”;每一个都有稍微不同的上下文,但是最终它是您键入 Linux 命令的地方。在本书中,大量的重点将放在命令行上。这是您至少要执行一些管理任务的地方,理解并使用命令行非常重要。事实上,在某些情况下,您将没有可用的 GUI 环境。如果您的 GUI 环境不起作用,您将需要能够使用命令行管理您的主机。命令行还提供了一些强大的工具,可以使您的管理任务更快、更有效。

Note

这并不是说我们要忽略 GUI。我们还将向您展示如何使用 GUI 工具管理您的 Linux 主机。

让我们来看看 Linux 命令行。您可以通过几种方式之一访问命令行。如果您的主机已经引导至命令行提示符,如图 4-1 所示,您可以简单地登录并使用该提示符。

在 Gnome 或 KDE GUI 中,您有两种选择。第一种是使用虚拟控制台——一种默认运行在大多数 Linux 发行版上的 Linux 管理控制台。或者您可以启动一个终端模拟器应用程序,如 Gnome 终端或 Konsole。在图 4-3 中,你可以看到我们如何在 Unity 桌面中访问终端仿真器。

Note

终端模拟器是一种在另一个应用程序中模拟文本终端的工具。例如,当您在 Windows 中启动命令提示符或命令行 shell 时,您已经启动了一个 Windows 终端模拟器。

要从 Gnome 或 KDE GUI 中启动虚拟控制台,请使用组合键 Ctrl+Alt 和 F1 到 F7 中的一个键。每个可以打开的窗口都是一个新的虚拟控制台。有六个虚拟控制台可用。您可以使用 Crtl+Alt+F1 到 F7 键在控制台之间切换。每个终端都是独立和分离的。Ubuntu 和 CentOS 在不同的控制台上有 GUI。使用 Ctrl+Alt+F7 访问 Ubuntu GUI,使用 Ctrl+Alt+F1 访问 CentOS。

Tip

如果您没有运行 GUI 界面,虚拟控制台仍然可用,您可以使用 Alt+F1 到 F6 键以及 Alt+左箭头键和 Alt+右箭头键来导航它们。

您也可以启动终端模拟器。例如,在 Gnome 中,你点击应用程序菜单,打开附件标签,选择终端应用程序。这将启动 Gnome 终端应用程序,如图 4-4 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-4。

Launching the Gnome Terminal application

在 KDE,情况略有不同。在早期版本的 KDE 上,您可以通过单击应用程序,打开系统工具,然后选择 Konsole 应用程序来启动 Konsole 应用程序。在 KDE 版本 4 和更高版本上,您可以通过单击应用程序,然后单击系统,并选择 Konsole 应用程序来启动 Konsole。在图 4-3 中,我们可以看到我们需要通过选择 Ubuntu 符号并键入 Terminal 来调出 Unity 中的搜索。在图 4-3 中,我们可以看到它已经出现,无需我们搜索终端,因为它是最近使用的应用程序。

贝壳

向您显示什么命令行取决于为您的用户运行什么 shell。Shells 是操作系统和主机内核的接口。例如,Windows 主机上的命令行也是一个 shell。每个 shell 都包含一组内置命令,这些命令允许您与您的主机进行交互(这些命令由您的发行版安装的附加工具进行补充)。

有多种 shell 可供使用,其中最常见的是 Bash(或 Bourne-again) shell,它默认用于许多发行版,包括流行的 Red Hat、Ubuntu 和 Debian 发行版。

Note

我们在第一章和第二章中更多地谈到了一些具体的发行版。

我们将在本章的所有例子中使用 Bash shell,因为它很可能是您默认找到的 shell。

命令行提示符

登录到 Linux 主机后,您应该会看到如下所示的提示:

jsmith@au-mel-centos-1 ∼$

那么这意味着什么呢?好吧,让我们来分析一下。

user@host directory$

在大多数 Linux 发行版中,基本提示由您登录时的用户名、主机名、当前目录和$符号构成,该符号表示您登录时的用户类型。

Tip

您可以自定义提示以包括附加信息、添加或更改颜色,或者实现各种其他选项。点击 http://tldp.org/HOWTO/Bash-Prompt-HOWTO/ 了解更多信息。

在我们的例子中,jsmith 是我们登录的用户名;接下来是@符号,后面是我们登录的主机名称,即 au-mel-centos-1 上的jsmith

Note

这部分提示看起来像一个电子邮件地址,这是有原因的。电子邮件就是这样开始的——在相连的 Unix 机器上拥有登录帐户的人们互相发送信息。@符号首次用于此目的是在 1971 年!你可以在 http://openmap.bbn.com/~tomlinso/ray/ firstemailframe.html 了解一下。

接下来你会看到一个符号,这是一个引用你的主目录的缩写方法。在 Linux 主机上,大多数用户都有一个特殊的目录,称为主目录,它是在创建用户时创建的。像 Microsoft Window 的用户配置文件一样,用户的首选项、配置文件和数据都存储在这个目录中。任何时候你看到使用的符号,它表示一个快捷方式,意思是主目录。我们之前讨论过主目录,它们大致等同于 Windows 文档和设置配置文件的概念和My Documents文件夹的组合。您通常会在名为/home的目录下找到主目录。

Note

Linux 是一个多用户操作系统,多个用户可以多次登录并同时工作。与 Windows 一样,用户可以拥有自己的环境、存储、访问控制和权限。

最后,您会看到$符号。这个符号告诉你你是什么类型的用户;默认情况下,主机上的所有普通用户都会将$作为他们的提示。有一个特殊的用户,叫做root,他的提示使用了#符号:

root@au-mel-centos-1 ∼#

root用户是超级用户。在 Windows 上,我们称这个用户为管理员。与 Windows 上的管理员用户一样,root用户可以控制和配置一切。因此,如果您看到#符号,您就知道您是以root用户的身份登录的。

在某些发行版中,您可以作为根用户登录,在安装过程中,通常会提示您为root用户指定一个密码。其他发行版,最著名的是 Ubuntu 发行版,禁用了root用户的密码。在 Ubuntu 上,假设你从来不使用root用户,而是使用一个叫做sudo的特殊命令。sudo命令允许您以root用户的权限运行命令,而无需以该用户的身份登录。我们将在第五章中讨论sudo命令。要使用sudo命令,您只需键入 sudo 和您希望运行的命令。通常会提示您输入密码,如果您输入了正确的密码,就会执行该命令。

$ sudo passwd root

这个命令将改变root用户的密码,这是在 Ubuntu 上启用root用户的一种方法。

用户是全能的,可以在你的主机上做任何事情。因此,当以root用户身份登录时,很容易意外出错,这可能会删除数据或中断您的应用程序和服务。因此,出于安全原因,您永远不应该以root用户的身份登录。我们将在第五章的后面讨论不使用root用户管理你的主机的其他方法。

Note

近年来,已经引入了其他安全控制来帮助减少对root用户的依赖,并提供更细粒度的安全控制。这些控件包括像 SELinux 和 AppArmor 这样的工具,我们在第二章中简要讨论过。

键入您的第一个命令

现在是时候尝试输入命令了。命令可以是二进制可执行文件(如 Windows 可执行文件或 EXE 文件),或者命令可以作为 shell 的一部分提供。让我们键入一个名为whoami的命令,并按回车键执行它:

$ whoami
jsmith

whoami命令返回您登录的用户名。你可以看到我们的主机已经返回jsmith。这告诉我们,我们以用户jsmith的身份登录到我们的主机。

每个 shell 都包含一系列内置命令和函数来帮助您使用命令行。现在让我们试一试这些。我们从再次运行whoami命令开始。但是这一次,我们犯了一个拼写错误,键入了错误的命令名:

$ whoamii

Note

在本书中,我们将把 shell 提示符缩写成最后一个提示符字符,或者是$或者是#

然后,我们按 Enter 键运行命令,发现 Bash 返回了以下响应:

-bash: whoamii: command not found

发生了什么?嗯,Bash 告诉我们主机上不存在名为whoami的命令。我们可以解决。让我们从更正命令开始。我们可以通过使用向上箭头键返回先前键入的命令。现在这样做,您可以看到前面的命令已经返回到命令行:

$ whoamii

Bash 有一个有用的命令历史,它记录了以前输入的许多命令。Bash 允许您使用上下箭头键浏览这些命令。

Tip

保留的历史数量可由用户配置,并可使用history命令进行操作。现在输入命令history查看您的命令历史。如果您刚刚登录,您可能会发现此历史记录为空。在这种情况下,使用几个命令并重试。您将看到一个编号行列表,显示您之前键入的命令。您可以通过在命令旁边输入前缀为!的数字来检索这些命令中的任何一个。符号。例如,!12会检索并执行你历史中的第 12 条命令。如果您键入!!,您将重新运行您上次输入的命令。

您也可以使用左右箭头键沿着命令行移动光标来编辑命令。使用箭头键移动到命令的末尾,删除多余的 I,留下

$ whoami

现在按 Enter 键,您将在命令行上看到结果:

jsmith

这一次,更正后的命令whoami再次返回登录用户的名称。

Tip

另一个有用的 Bash 特性是自动完成。开始输入命令,然后按 Tab 键,Bash 将搜索您的路径,试图找到您试图发出的命令。键入更多字符,Tab 键将进一步缩小搜索范围。

The Path

当 Linux 通知您它找不到二进制文件或命令时,可能是您拼错了命令的名称,或者它找不到那个特定的命令。像 Windows 一样,当执行命令时,Linux 搜索目录列表,试图找到那个特定的命令。默认情况下,大多数发行版都设置了默认路径,通常包含包含可执行二进制文件的典型位置。大多数时候你不需要设定你的道路;默认路径将是合适的。如果你想改变路径,你需要更新一个名为$PATH的环境变量。您可以通过键入$ echo $PATH来查看它当前的设置。我们将在第五章中讨论环境变量。

远程存取

在上两节中,我们已经讨论了 GUI 桌面和命令行。在这两种情况下,我们都假设您在本地登录到您的主机(即,坐在屏幕前,用键盘直接向主机键入命令)。但是在很多情况下,人们远程访问 Linux 主机。对于作为服务器运行的 Linux 主机来说尤其如此,这些服务器可能托管在数据中心或其他地理位置,或者存储在机架或机柜中。在许多情况下,这些主机甚至没有屏幕或键盘,只能通过网络访问。

使用 Linux,很容易远程连接到这些主机,这样您就可以管理它们。您可以使用许多不同的方法来完成这个远程连接。这些包括桌面共享协议,如虚拟网络计算(通常称为 VNC)、远程桌面协议(RDP),它通常用于提供对 Windows 主机的远程访问,以及广泛使用的安全 Shell(SSH)。

使用 SSH

我们很快就会看到使用 SSH 来提供对 Linux 主机的远程命令行访问。你也可以用 SSH 访问你的 GUI 桌面,但是我们会在第十章讨论这个。

SSH 既是一个应用程序,也是一个安全协议,用于多种目的,但主要用于主机的远程管理。在 Linux 主机上,SSH 由一个名为 OpenSSH 的开源版本的应用程序提供(参见 www.openssh.com/ ).

SSH 在客户端-服务器模型中通过 TCP/IP(传输控制协议/互联网协议)网络进行连接。您的连接主机是客户端。例如,如果您从笔记本电脑连接到远程主机,那么您的笔记本电脑就是客户端。您正在连接的主机称为服务器,它接收和管理您的连接。

使用 SSH 的远程连接是加密的,需要身份验证,要么是密码,要么是公钥加密。要建立 SSH 连接,您需要知道远程主机的 IP 地址或主机名。然后在客户端启动一个连接,并通过 TCP 在端口 22 上连接到服务器(您可以更改这个端口,我们将在第十章中讨论如何更改)。

Note

您可能以前遇到过 IP 地址和主机名,但是您可能没有遇到过端口。端口是 SSH 等服务使用的通信端点。端口号范围从 0 到 65535,一些常见的端口是 HTTP 端口 80、SMTP 端口 25 和 FTP 端口 21。1 到 1023 之间的端口通常是为系统服务保留的,而 1024 和更高的端口(也称为临时端口)是更随意分配的。我们将在第七章对此进行更详细的讨论。

初始连接后,服务器会提示客户端输入用户名和身份验证凭证,如密码。如果用户存在于服务器上,并且提供了正确的凭据,则允许客户端连接到服务器。

在大多数发行版中,SSH 是作为默认应用程序之一安装的,默认情况下会启动一个服务器。这个 SSH 服务器或 SSH 守护进程(服务器在 Linux 世界中也称为守护进程)允许远程连接到您的主机的命令行或 GUI。

您可以通过命令行或从多个客户端之一使用 SSH。通过命令行,使用名为ssh的命令建立客户端连接。大多数 Linux 和类 Unix 操作系统(例如,Mac OS X)都安装了 SSH,并提供了ssh命令。要使用ssh命令,您需要指定您的用户名和您想要连接的主机,用@符号隔开,如清单 4-1 所示。

$ ssh  jsmith@us-ny-server-1.example.com
Password:
Listing 4-1.SSH Connections

在清单 4-1 中,我们以用户jsmith的身份连接到一个名为us-ny-server-1.example.com的主机。然后系统会提示我们输入密码。如果我们输入了正确的密码,我们将登录到远程主机的命令行。

Caution

实际上,如果您运行这个确切的命令,它不会工作,因为主机us-ny-server-1.example.com不存在。如果您想测试这一点,您需要指定一个实际的活动主机。

还有各种 SSH 客户端或终端模拟器可用,例如,流行的免费 PuTTY 客户端(可从 www.chiark.greenend.org.uk/~sgtatham/putty/ 获得),它运行在 Windows 上(也运行在 Linux 上)。你也可以使用 Git Bash 自带的,我们在第三章安装了它,当然,它运行在 Windows 上。

SSH 客户端允许您从 GUI 向 Unix 或 Linux 主机的命令行运行文本终端。您可以在图 4-5 中看到 PuTTY 客户端的配置屏幕。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-5。

The PuTTY client

使用像 PuTTY 这样的 GUI 客户端非常简单。与命令行一样,您需要指定希望连接的主机的主机名(或 IP 地址)和端口。有了像 PuTTY 这样的客户端,您还可以做一些有用的事情,比如保存连接,这样您就不需要再次输入您的主机名。

使用 Git Bash,我们可以从 Bash 终端访问 ssh。我们在第三章中展示了如何安装 Git Bash。看一下图 4-6 ,我们在这里连接到us-ny-server-1.example.com

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-6。

Using Git Bash to make an ssh connection

如清单 4-1 所示,我们正在连接美国服务器。您会注意到,当我们第一次连接到从未连接过的主机时,系统会要求我们接受 RSA 密钥指纹。这来自您正在连接的 SSH 服务器。接受该密钥后,它将根据服务器名称存储在一个名为 known_hosts 的文件中。到该主机的每个后续 SSH 连接都将检查指纹以查看它是否被更改。如果有,您将被要求在重新连接前清理密钥。这使您有机会验证主机或您的通信是否已被篡改。同样,我们将在第十章中详细讨论这一点。

在图 4-6 中,我们在理想情况下首先检查我们正在连接到我们认为正在连接的主机之后接受指纹(在网络世界中,这很难做到,因为您可能会连接到域外的主机)。完成后,我们存储指纹,然后提示我们输入密码。

如果您打算从 Windows 管理 Linux 服务器,我们建议您下载一个像 PuTTY 这样的客户端,如果您更喜欢 GUI 的话;否则你可以安装并使用 Git Bash 终端,就像我们在第三章中展示的那样。这两种方式都将有效地允许您从自己熟悉的环境中远程连接和管理您的 Linux 主机。基于 Unix 的 Mac OS 内置了一个 SSH 客户端。

Tip

SSH 客户端也适用于 Windows Mobile、Android、Symbian 和 Apple iPhone 等操作系统,允许出差族在旅途中连接到他们的 Linux 主机!

获得帮助

那么,如何在 Linux 主机上获得帮助呢?你可能在想,“我不能用 F1 键,对吧?”事实上你可以。在 Gnome 和 KDE 的 GUI 中,F1 键会显示界面的帮助文本。但是在命令行上,也有各种各样的工具来告诉您事情是如何工作的,帮助您找到您想要的命令,然后解释该命令可用的选项。

最简单的方法就是查看命令或者应用的man页面(手动页面的简称)。一个man页面告诉您该命令可以做什么,有哪些选项可用,以及关于它的各种其他信息。您可以通过键入 man 和您希望查看其man页面的命令的名称来访问man页面,如清单 4-2 所示。

$ man ls
Listing 4-2.The man Command

man命令将返回一个描述ls(或 list)命令及其各种选项的文档。

Note

ls或 list 命令列出主机上的文件和目录。在本章的后面,我们将向您展示更多关于使用ls命令的文件,敬请关注。

如果你在一个命令上有困难,它的man页面是你应该寻求帮助的第一个地方。不是所有的命令都有man页面,如果某个命令的man页面不存在,您会得到一条错误消息。在这种情况下,尝试在命令中添加--help开关通常很有用,如清单 4-3 所示。

Note

开关是可以添加到特定命令中的命令行选项。它们使用一个破折号(-)或两个破折号(--)和单字母缩写或交换机名称来指定,例如-l--name。您可以使用缩写或更长的版本。在编写脚本时,较长的版本有时会更有帮助,而且不那么模糊。比如,确保人们知道您在使用–v 时指的是–version,而不是–verbose。

$ ls --help
Listing 4-3.The --help Switch

Tip

通过man命令还可以获得对 Linux 的一般性介绍。要查看这个介绍,使用命令man intro

您可以搜索与简短描述中的单词相匹配的相关man页面。

$ man –k user
adduser (8)                   - create a new user or update default new user information
applygnupgdefaults (8) - Run gpgconf - apply-defaults for all users.
arpd (8)                         - userspace arp daemon.

或者您也可以使用-K选项在主机上的所有man页面中搜索关键字。

$ man -K user

这将在所有的man页面中搜索关键字user,并返回包含该关键字的所有man页面的列表。然后会提示您查看返回的每一页,跳过一页并转到下一页,或者退出搜索。

这个搜索可能有点慢,因为你的主机通常有很多man页面,所以有两个更简单的搜索命令可以提供你所寻找的快捷方式:whatisaproposwhatis命令搜索大多数 Linux 发行版上都有的命令摘要数据库,以获得完整的单词匹配,如下所示:

$ whatis useradd
useradd(8) – create a new user or update default new user information

whatis搜索返回了useradd命令,并包含了该命令的简要描述。

apropos命令也搜索whatis数据库,但是搜索字符串而不是完整的单词。

$ apropos whoam
ldapwhoami(1) – LDAP who am i? tool
whoami(1) – print effective userid

apropos搜索已经在whatis数据库中搜索了对字符串whoami的所有引用,并返回了许多包含该字符串的命令和函数。

还有一些其他有用的命令可以告诉您主机上的命令。例如,info命令有时会对命令的功能和选项提供更详细的解释;尝试info ls来阅读关于ls命令的更多细节。

Note

info界面不是很直观。它,以及man页面,出现在互联网(或者优秀的 UX 设计)无处不在之前。它们被设计成在本地系统上有尽可能多的信息,以防你不能连接到互联网,但这并不意味着是漂亮的。

用户和组

Linux 是多用户操作系统。这意味着它允许多个用户通过多个命令行或 GUI 会话同时连接。Linux 通过用户和组帐户控制对主机及其资源的访问。还为特定的系统组件创建用户,并用于运行服务;例如,如果您安装了一个mail服务器,也可能会创建一个名为 mail 的用户来使用该服务,或者一个名为lp(行式打印机)的用户来控制打印机资源。

Linux 也依赖于组,组是相似用户的集合。用户可以是一个或多个组的成员,通常被放在一个组中,以便他们可以访问某种资源。例如,所有需要访问应付账款系统的用户可能会被添加到一个名为accounts的组中。

Tip

您的用户和组信息主要包含在两个文件中:/etc/passwd保存您的用户信息,/etc/group保存您的组信息。我们将在第六章中详细讨论这些文件。

用户和组很重要,我们将在第六章解释它们是如何工作的以及如何创建它们。从概念上讲,用户和组的操作方式与他们在 Windows 主机上的操作方式非常相似。每个用户都有一个通常用密码保护的帐户。创建大多数普通用户时,也会创建一个类似于 Windows 配置文件的主目录。这个主目录为用户提供了一个存储数据的地方,也是许多应用程序存储用户特定配置的默认位置。用户也属于组,就像他们在 Windows 上一样,这为他们提供了对附加资源或服务的访问。

服务和流程

在 Windows 主机上,许多后台活动和服务器应用程序作为服务运行。服务可以启动和停止,当应用程序重新配置时,通常必须重新启动。这些服务通常通过控制面板中的服务管理器来控制。在 Linux 主机上,服务的概念也存在。服务也称为守护程序,在您的主机上运行许多关键功能。

Note

术语“Daemon”是 demon 的希腊文拼写,基于在热力学第二定律的麦克斯韦妖思想实验中对分子进行分类的假想存在。更多信息,请参见 [https://en.wikipedia.org/wiki/Daemon_(computing](https://en.wikipedia.org/wiki/Daemon_(computing) )

像在 Windows 主机上一样,每个服务或守护进程都是在您的主机上运行的一个或多个进程。这些过程都有名字;例如,我们前面讨论的安全 Shell 守护进程通常作为一个名为 sshd 的进程运行。其他常见的守护进程包括master(Postfix 邮件服务器)、httpd(Apache web 服务器)和mysqld(MySQL 数据库服务器)。默认情况下,这些进程中的一些可能与执行各种系统和应用程序功能的许多其他进程一起在您的主机上运行。大多数守护进程的名称通常以“d”结尾。

在清单 4-4 中,我们使用了带有-A标志的 ps 命令(针对所有)来列出我们的主机上当前运行的所有进程。

$ ps -A
  PID TTY          TIME CMD
    1 ?        00:00:00 systemd
    2 ?        00:00:00 kthreadd
    3 ?        00:00:00 ksoftirqd/0
    4 ?        00:00:00 kworker/0:0
    5 ?        00:00:00 kworker/0:0H
    6 ?        00:00:00 kworker/u4:0
...<snip>...
    445 ?    00:00:00 crond
    1571 ?  00:00:00 sshd
Listing 4‑4.The ps Command

在清单 4-4 中,您可以看到在我们的主机上运行的进程的删减列表。这个列表是使用带有-A(或列出所有进程)选项的ps命令生成的。主机上运行的每个进程按照其进程 ID (PID)的顺序列出,在清单 4-4 中由左边的列表示。PID 用于控制进程,我们将在第六章中查看启动和停止进程时使用它们。你的主机上最重要的进程叫做systemdsystemd进程是 Linux 主机上的基础进程,它派生出主机上的所有其他进程。此主进程始终使用 PID 1,并且必须运行才能使您的主机正常工作。

Note

根据您选择的操作系统,您可能会注意到在 PID 1中没有systemd进程,而是有一个init进程。Systemd 是主流 Linux 操作系统的新成员,已经被 Fedora 和 Debian 等不稳定的操作系统接受了一段时间。在较旧的系统上,您会看到init。我们在第六章中帮助解释这两者的区别。

很多名字以“k”开头的进程并不是真正的进程,而是内核线程。这些线程是一种特殊的服务,在操作系统的核心——内核中执行管理任务。这些“轻量级进程”允许内核进程在后台处理不同的任务,比如处理当有人插入 USB 驱动器时发生的事情。清单<thread>/0表示线程的名称,而/0是它运行的处理器。

清单 4-4 中的进程4451571是在您的系统上运行的守护进程的例子。我们看到了 crond 和 SSHd 守护进程,crond 是一个作业调度服务,sshd 是 OpenSSH 守护进程,用于处理来自 ssh 客户端的连接。

还有另一个有用的命令可以告诉您哪些进程正在您的主机上运行,哪些进程消耗了最多的 CPU 和内存。这个命令叫做top,我们在清单 4-5 中运行它。

$ top
Listing 4-5.The top Command

top命令启动一个交互式监控工具,该工具每隔几秒钟更新一次您主机上正在运行的顶级进程。你可以在图 4-7 中看到top命令输出的快照。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-7。

The top process-monitoring command

这是一个非常安静的系统的输出。顶部显示了许多详细信息,包括系统正常运行时间、系统平均负载、CPU 使用率和内存利用率。默认情况下,Top 每三分钟刷新一次,当进程消耗资源时,它们会在列表中时隐时现。大量消耗资源的进程,如 CPU,将始终列在列表的顶部,但您也可以按其他资源(如内存使用)列出。

包装

Microsoft Windows 世界中的应用程序通常通过运行二进制应用程序并遵循安装过程来安装。有些应用程序还附带卸载程序,如果您不再需要它们,卸载程序会将其删除。在某些情况下,您可以使用控制面板中的“添加或删除程序”工具来添加或删除应用程序。

在 Linux 世界中,包管理器相当于添加或删除程序工具。包管理器包含一组预打包的应用程序,例如 Apache web 服务器或 LibreOffice 套件。毫不奇怪,这些预打包的应用程序被称为包。打包成包的应用程序包含所需的二进制文件、支持文件,通常还包含配置文件,它们在安装后可以直接运行。

在第八章中,我们将广泛涵盖两种常用的包管理系统:RPM 和 Deb。它们分别由基于 Red Hat 和 Debian 发行版的发行版使用。所以 Red Hat Enterprise Linux,CentOS,Fedora Project,甚至 SUSE(一个基于非 Red Hat 的发行版)都是使用 RPM 的发行版。使用 Deb 的发行版包括 Ubuntu、Debian 和许多其他发行版。

文件和文件系统

在 UNIX 中,有一句话是这样说的,“Unix 中的所有东西要么是文件,要么是进程。”Linux 也坚持这种说法。文件有几种类型,但我们将从文件和目录开始。在 Linux 中,目录只是包含其他文件名称的文件。让我们仔细看看 Linux 文件和文件系统。

我们将从使用一个名为pwd的命令开始,或者打印工作目录。

$ pwd
/home/jsmith

pwd命令允许您通过识别我们的工作目录或当前目录来确定自己在文件系统中的位置。从这里,您可以导航文件系统;首先使用cd或更改目录命令将目录更改为根目录,如清单 4-6 所示。

user@host:∼$ cd /
user@host:/$
Listing 4-6.Changing Directories

如果您可以暂时忽略清单 4-6 中的user@host,您可以看到我们已经从当前目录转移到了/,它被称为根目录。把∼$改成/$就知道了。根目录是目录树的基础。Linux 文件系统是一个单一的目录。这意味着,与 Windows 不同,Linux 有一个单一的层次目录结构。不同于多个驱动器,例如C:\D:\,它们下面有单独的目录树,所有的驱动器、分区和存储都位于根目录或/目录之外。

这是如何工作的?安装 Linux 驱动器和设备(这可以在引导时自动进行,也可以手动进行)。这些挂载的驱动器和设备在文件系统中显示为“/”根目录下的子目录。我们在第六章解释了“/”目录最初是如何挂载的。

Note

我们还将在第九章中讨论更多关于存储和安装设备的内容。

使用cd命令,您可以遍历其他目录和子目录。Linux 将遍历文件系统的步骤称为路径。有两种类型的路径—绝对路径和相对路径。绝对路径总是以斜杠符号(/)开始,代表根目录,并指定您所描述的位置的最终位置;例如,/home/jsmith/是绝对路径。

相对路径允许您指定相对于当前位置或起点的位置。例如,该命令

$ cd foobar

尝试从当前目录切换到名为 foobar 的目录。如果不存在这样的目录,cd命令将失败。

还有几个符号经常与相对路径一起使用:

$ cd ..

这…表示我们希望在目录树上向上遍历一级(如果我们已经在顶部,我们就不会再去任何地方)。

我们还可以使用这种机制以其他方式遍历目录树,正如您在下面一行中看到的:

$ cd ../foo/bar

在这个例子中,我们有

  1. 如符号..所示,向上遍历一个目录级别
  2. 改变到上一级的一个名为foo的目录中
  3. 然后改成了foo目录下的一个名为bar的目录

让我们在图 4-8 中对此进行说明。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-8。

Directory traversal to …/foo/bar Note

如果您习惯使用 Microsoft Windows 命令行,您可能会注意到分隔目录的斜杠是正斜杠或/,而不是反斜杠或\。这确实需要一点时间来适应,但你很快就会适应的!

我们还可以使用以下结构引用目录中的相对对象:

$ ./make

在命令前面添加的./在我们当前的目录中执行 make 命令。

您可以遍历哪些目录取决于它们的权限。许多目录只允许特定用户和组访问(用户可以去任何地方)。如果您尝试更改到您没有适当权限的目录,您将会收到一条错误消息:

$ cd /root
-bash: cd: /root: Permission denied

Note

我们将在本章后面的“权限”一节中讨论权限。

现在您知道如何在目录树中移动了。但是你的主机上的所有东西都在哪里呢?大多数 Linux 发行版都遵循非常相似的目录结构。这并不是说所有的发行版都是相同的,但是一般来说,文件和目录都位于一个逻辑和一致的模型中。在表 4-1 中可以看到根目录下的典型目录结构。每个条目都有每个目录的简短描述。

表 4-1。

Linux Directory Structure

| 目录 | 描述 | | --- | --- | | `/bin/` | 用户命令和二进制文件。 | | `/boot/` | 引导加载程序使用的文件。(我们将在第六章中讨论引导加载程序。) | | `/dev/` | 设备文件。 | | `/etc/` | 系统配置文件。 | | `/home/` | 用户的主目录。 | | `/lib/` | 共享库和内核模块。 | | `/media/` | 可移动媒体通常安装在这里(参见第八章)。 | | `/mnt/` | 临时安装的文件系统通常安装在这里(参见第八章)。 | | `/opt/` | 附加应用软件包。 | | `/proc/` | 内核和进程状态数据以文本文件格式存储在这里。 | | `/root/` | root 用户的主目录。 | | `/run/` | 应用程序可以存储操作所需数据的目录。 | | `/sbin/` | 系统二进制文件。 | | `/srv/` | 此主机提供的服务的数据。 | | `/sys` | 虚拟文件系统,包含信息和对 Linux 内核子系统的访问。 | | `/tmp/` | 临时文件的目录。 | | `/usr/` | 用户实用程序、库和应用程序。 | | `/var/` | 可变或瞬时文件和数据,例如日志、邮件队列和打印作业。 |

Note

不是每个发行版都有这些目录(其他发行版可能有附加目录),但通常这个列表是准确的。

让我们看看根(/)目录下的一些关键目录,这些目录在表 4-1 中列出。第一个,也是最重要的一个,是/etc/。以 etcetera 命名的/etc/目录是主机上大多数重要配置文件所在的位置。在向主机添加应用程序和服务时,您将经常使用位于此目录中的文件。

接下来,/home/目录包含用户的所有主目录(除了根用户——其主目录通常是/root/)。/tmp目录是你通常会找到临时文件的地方。类似的还有/var目录,其中存储了临时数据,比如日志。您将经常看到包含在/var/log/目录中的日志文件,这些文件是由应用程序或通过主机的 syslog(或系统日志程序)守护进程创建的。这些日志文件包含关于应用程序、守护程序和服务状态的各种信息。

让我们仔细看看文件和目录,以及如何使用它们。首先转到根目录或/,目录:

$ cd /

现在你在根目录,你想看看目录中包含了什么。为此,您可以使用ls或 list directory 命令,如清单 4-7 所示。

$ ls
bin dev etc lib lost+found mnt proc root sys usr
boot home  lib64  media opt sbin srv tmp var
Listing 4-7.Listing the Contents of a Directory

在清单 4-7 中,您可以看到ls命令返回了根目录中的文件和目录列表。你会看到它看起来非常接近表 4-1 中的列表。

默认情况下,ls列出一个目录中的所有文件,但是您可以通过在命令行中列出该文件,将其限制为显示单个文件名或多个文件名,如下所示:

$ ls foobar

该命令将显示任何名为foobar的文件或目录。我们也可以使用通配符或星号来选择文件。

$ ls foo*

这将返回任何名为foo的文件加上任何以foo开头的文件,比如foobar,以及任何名称以foo开头的目录的内容。单独指定星号符号会列出所有文件和所有目录及其内容。

Tip

您将会看到更多的*符号,因为它在 Linux 上的使用与在 Windows 上一样多。它表示用于替换一个或多个字符的通配符;例如,您刚刚看到了foo*,它表示以foo开头的任何东西。使用?符号匹配单个字符;例如,指定?at将匹配cat, mat, bat,等等。这个活动统称为 globbing,你可以在 www.faqs.org/docs/abs/HTML/globbingref.html 阅读它在 Linux shells 中的使用。

您也可以通过指定目录名来列出其他目录中的文件:

$ ls /usr/local/bin

这将列出/usr/local/bin目录中的所有文件。

不过,在清单 4-7 中,您看不到关于这些文件和目录的很多细节。它只显示一个名单。要找到关于这个列表的更多信息,您可以在ls命令中添加开关,如清单 4-8 所示,以显示更多信息。

$ ls -la
total 192
drwxr-xr-x      25  root  root         4096  2016-07-22 12:47  .
drwxr-xr x      25  root  root         4096  2016-07-22 12:47  ..
-rw-r--r--          1   root  root              0  2016-07-15 20:47  .autofsck
drwxr-xr-x       2   root  root         4096  2016-05-18 04:11  bin
drwxr-xr-x       6   root  root         3072  2016-05-25 21:57  boot
drwxr-xr-x     14   root  root         4100  2016-07-19 12:26  dev
drwxr-xr-x   116   root  root       12288  2016-07-22 12:47  etc
drwxr-xr-x      7   smtpd smtpd    4096  2016-05-02 12:00  home
drwxr-xr-x    12   root  root          4096  2016-05-17 18:14  lib
drwxr-xr-x      8   root  root          4096  2016-06-06 10:19  lib64
drwx------       2   root  root        16384  2016-06-11 16:01  lost+found
drwxr-xr-x      2   root  root          4096  2016-06-11 16:14  media
drwxr-xr-x      4   root  root          4096  2016-06-12 11:28  mnt
...
Listing 4-8.Getting More Information from ls

在清单 4-8 中,la开关被添加到ls命令中。l开关是 long 的缩写,它使用长列表格式,如您所见,它显示了更多信息。a开关告诉ls列出所有文件和目录,甚至是“隐藏的”文件,也就是众所周知的“点”文件。

Tip

在 Linux(和 Unix)中,“隐藏”或“点”文件以句号或句号为前缀(例如清单 4-8 中的.autofsck文件),通常用于保存配置和历史信息或作为临时文件。它们是普通文件,但是有些实用程序,比如ls,默认情况下不显示它们。当您在目录中查找占用大量空间的文件时,它们也会让您大吃一惊。一个ls -lh将显示人类可读大小的正常文件(-h),一个ls -lah将显示文件大小,包括点文件。稍后我们会详细讨论这一点。

通过阅读命令的man页面,你可以看到ls命令可用开关的完整列表——只需输入man ls

那么长的列表格式告诉你关于你的文件和目录什么呢?在清单 4-8 中,每一项都有一个小的信息集合。在清单 4-9 中,您可以看到该清单的一个子集,显示了一个文件和一个目录,我们将对此进行更详细的研究。

-rw-r--r--      1 root  root        0  2016-07-15 20:47 .autofsck
drwxr-xr-x   2 root  root   4096  2016-05-18 04:11  bin
Listing 4-9.File Listing Subset

清单的每一行都包含关于每个对象的七条信息:

  • Unix 文件类型
  • 许可
  • 硬链接的数量
  • 用户和组所有权
  • 大小
  • 日期和时间
  • 名字

清单中包含的一些信息还介绍了一些关键的 Linux 概念,比如权限和用户、组和所有权。我们将利用这一介绍,不仅解释每一项,而且探索它们所代表的一些更广泛的概念。

文件类型和权限

文件类型和权限包含在前十个字符中,类似于-rw-r--r--。这个潜在的令人生畏的字符集合实际上很容易破译:第一个字符描述文件的类型,接下来的九个字符描述文件的权限。

文件类型

Linux 文件系统上的几乎所有东西都可以被描述为一个文件。清单的第一个字符告诉我们文件的确切类型。这里的破折号(-)表示可能包含数据或文本的常规文件,或者是二进制可执行文件。一个d表示一个目录,本质上是一个列出其他文件的文件。一个l表示一个符号链接。符号链接允许您在文件系统的多个位置显示文件和目录。它们很像微软视窗中使用的快捷方式。

表 4-2 列出了可用的文件类型。

表 4-2。

File Types

| 类型 | 描述 | | --- | --- | | `-` | 文件 | | `d` | 目录 | | `l` | 环 | | `c` | 字符设备 | | `b` | 阻止设备 | | `s` | 窝 | | `p` | 命名管道 |

我们将在这里简要介绍其他类型。你不会经常需要大多数类型,但它们会在后面的章节中偶尔出现。bc文件类型用于不同类型的输入和输出设备(如果你查看/dev目录,你会看到这些设备文件的例子)。设备允许操作系统与特定的硬件设备交互;例如,许多发行版都有一个名为/dev/usb的设备,代表连接到主机的 USB 驱动器。

Tip

当我们向您展示如何在您的主机上加载 USB 时,您将在第九章中了解更多关于设备的信息。

最后,套接字和命名管道是允许不同类型的进程间通信的文件。它们允许进程之间相互通信。您将在本书的后面看到一些套接字和命名管道。

许可

接下来的九个字符详细说明了分配给文件或目录的访问权限。在 Linux 上,权限用于确定用户和组对文件的访问权限。控制您对文件和应用程序的权限和访问对于您的 Linux 主机的安全性至关重要,在本书中,我们将经常使用权限来提供对文件的适当访问。因此,理解权限如何工作以及如何更改它们是很重要的。

有三种通常分配的文件权限类型:

  • 阅读,由字母r表示
  • 写,用字母w表示
  • 执行,由字母x表示

Note

还有另外两种类型的权限,sticky 和 setuid/setgid 权限,分别用ts字符表示。我们将在本章后面的边栏“Setuid、Setgid 和粘性权限”中讨论这些内容。

读取权限允许读取或查看文件,但不允许编辑。如果在目录上设置,则可以读取目录中的文件名,但看不到其他详细信息,如权限和大小。写权限允许您对文件进行更改或写入。如果在目录上设置了写权限,您可以在该目录中创建、删除和重命名文件。执行权限允许您运行文件;例如,所有二进制文件和命令(二进制文件类似于 Windows 可执行文件)都必须标记为可执行,这样您才能运行它们。如果在一个目录上设置了该权限,您就能够遍历该目录,例如,通过使用cd命令来访问子目录。因此,对目录设置的读取和执行权限的组合允许您遍历目录并查看其内容的详细信息。

主机上的每个文件都有三类权限:

  • 用户
  • 其他(其他所有人)

每个类代表一个不同的文件访问类别。User 类描述了拥有该文件的用户的权限。这是我们清单中的前三个字符。Group 类描述拥有该文件的组的权限。这些是我们清单中的第二组三个字符。

Note

Linux 中的组是用户的集合。组允许出于允许访问应用和服务的目的将相似的用户聚集在一起;例如,会计部门的所有用户可以属于同一个组,以允许他们访问您的应付帐款应用程序。我们将在第六章讨论群组。

最后,另一个类描述了所有其他人对该文件拥有的权限。这是清单中最后一组三个字符。

图 4-9 描述了这些等级及其位置。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-9。

File permission breakdown Note

任何位置的破折号都意味着根本没有设置特定的权限。

您可以在清单 4-10 中看到一个文件,我们将更详细地检查它的权限,然后您将了解如何对这些权限进行一些更改。

-rw-r--r--   1 root  root     0 2016-07-15 20:47 myfile
Listing 4-10.Permissions

在清单 4-10 中,我们有一个文件,如清单开头的破折号(-)所示。该文件归root用户和root组所有。前三个权限是rw-,表示root用户可以读写文件,但是破折号表示没有设置执行权限,用户不能执行文件。接下来的三个权限,r--,表示属于root组的任何人都可以读取该文件,但是不能对其做任何其他事情。最后,我们有最后三个权限的r--,它告诉我们另一个类有什么权限。在这种情况下,其他人可以读取该文件,但不能写入或执行它。

现在您已经看到了权限的样子,但是您如何着手更改它们呢?使用chmod(更改文件模式位)命令更改权限。更改权限的关键是只有拥有文件的用户或root用户才能更改文件的权限。因此,在清单 4-10 中,只有root用户可以更改myfile文件的权限。

chmod命令的语法很简单。在清单 4-11 中,您可以看到一些权限被更改了。

# chmod u+x myfile
# chmod u-x,og+w myfile
# chmod 654 myfile
Listing 4-11.Changing Permissions

在清单 4-11 中,我们已经三次更改了myfile文件的权限。权限更改是通过指定类、要执行的操作、权限本身以及要更改的文件来执行的。在我们的第一个例子中,你可以看到u+x。这相当于向用户类添加执行权限。

Note

执行权限通常只在本质上可执行的文件上设置,如脚本和二进制文件(也称为应用程序或程序)以及目录。On directories】的意思是遍历,也就是说你可以列出父目录中的目录,但是不能再往前了。

更新后,我们文件的权限将如下所示:

-rwxr--r--   1 root  root      0  2016-07-15 20:47 myfile

您可以看到在 User 类中添加了 x。那么chmod是如何知道这样做的呢?嗯,我们的变化中的 u 代表用户类。使用chmod,每个类都被缩写成一个字母:

  • u:用户
  • g:组
  • 其他人或所有人
  • a:全部

课后,您可以指定希望对该课程采取的行动。在清单 4-11 的第一行中,+号代表添加一个权限。您可以指定-符号来删除某个类的权限,或者指定=符号来设置该类的绝对权限。最后,指定动作的权限,在本例中是x

您还可以在一个命令中指定多个权限更改,如清单 4-11 的第二行所示。在第二行,我们有变化u-x,go+w。这将从用户类中删除x或执行权限,并向组和其他类添加w或写入权限。您可以看到,我们用逗号分隔了每个权限更改,并且我们可以列出多个要操作的类。(也可以列出多个权限;例如,u+rw会将读写权限添加到 User 类。)

因此,清单 4-11 中的第二行将我们的文件权限保留为

-rw-rw-rw-   1 root  root      0  2016-07-15 20:47 myfile

对于chmod,还可以使用a类的缩写,表示一个动作应该应用于所有的类;例如,a+r将向所有类添加读取权限:用户、组和其他。

我们还可以通过使用=符号将一个类的权限应用到另一个类。

# chmod u=g myfile

在前一行中,我们已经将用户类权限设置为与组类权限相同。

您还可以为多个文件设置权限,方法是列出每个文件,用空格分隔,如下所示:

# chmod u+r file1 file2 file3

ls命令一样,您也可以引用其他位置的文件,如下所示:

# chmod u+x /usr/local/bin/foobar

前一行为位于/usr/local/bin目录中的 foobar 文件的 User 类添加了执行权限。

您还可以使用星号来指定所有文件,并添加-R开关来递归到更低的目录,如下所示:

# chmod -R u+x /usr/local/bin/*

前一行中的chmod命令会将用户类的执行权限添加到/usr/local/bin目录中的每个文件。

清单 4-11 中的最后一行略有不同。我们指定了一个数字654,而不是类和权限。这个数字被称为八进制记数法。每个数字代表三个类别之一:用户、组和其他。此外,每个数字是分配给该类的权限的总和。在表 4-3 中,您可以看到分配给每个权限类型的值。

表 4-3。

Octal Permission Values

| 同意 | 价值 | 描述 | | --- | --- | --- | | `r` | four | 阅读 | | `W` | Two | 写 | | `x` | one | 执行 |

每个权限值加在一起,得到每个类的一个从17的数字。因此清单 4-11 中654的值将代表以下权限:

-rw-r-xr-- 1 root root 0  2016-08- 14 22:37 myfile

第一个值6,相当于为用户类分配值为 4 的读权限和值为2的写权限。第二个值5,为组类分配值为4的读取权限和值为1的执行权限。最后一个值4,只将读取权限分配给另一个类。为了更清楚起见,您可以在表 4-4 中看到从07的可能值列表。

表 4-4。

The Octal Values

| 八进制的 | 许可 | 描述 | | --- | --- | --- | | `0` | `---` | 没有人 | | `1` | `--x` | 执行 | | `2` | `-w-` | 写 | | `3` | `-wx` | 编写并执行 | | `4` | `r--` | 阅读 | | `5` | `r-x` | 阅读并执行 | | `6` | `rw-` | 直读式记录 | | `7` | `rwx` | 读取、写入和执行 |

在表 4-5 中,可以看到一些常用的八进制数以及它们所代表的相应权限。

表 4-5。

Octal Permissions

| 八进制数 | 许可 | | --- | --- | | `600` | `rw-r--r--` | | `644` | `rw-r--r--` | | `664` | `rw-rw-r--` | | `666` | `rw-rw-rw-` | | `755` | `rwxr-xr-x` | | `777` | `rwxrwxrwx` |

Tip

chmod命令有一些改变权限的附加语法,你可以在命令的man页面中读到它们。

最后,有一个叫做 umask 的重要概念,您也需要理解它才能完全理解权限是如何工作的。umask 规定了创建文件时分配给文件的默认权限集。默认情况下,如果没有设置 umask,创建文件的权限为0666(或者设置所有者、组和其他人的读写权限),创建目录的权限为0777(或者所有者、组和其他人的读写权限)。您可以使用 umask 命令修改这些默认权限。我们来看一个例子。

# umask 0022

这里我们指定了一个 umask 为0022。这看起来很熟悉,不是吗?是的,这是一种八进制记数法。在这种情况下,它表明什么没有被授予。因此,这里我们将获取文件的默认权限0666,并减去0022值,得到的权限为 0644。使用 umask0022,将创建一个新文件,文件所有者拥有读和写权限,组和其他人拥有读权限。新创建的目录(默认权限为 0777)现在将拥有0755 with a umask of 0022的权限。另一个常用的 umask 是0002,它导致文件的默认权限为0664,目录的默认权限为 0 775。这也允许对组进行写访问,此 umask 通常用于位于共享目录或文件共享中的文件。

在大多数主机上,umask 是由 shell 中的设置自动设置的。对于 Bash shells,您通常可以在/etc/bashrc文件中找到全局 umask,但是您也可以使用umask命令或使用pam_umask模块在每个用户的基础上覆盖它(我们将在第五章中提供关于 PAM 的更多信息)。

Tip

umask命令也可以使用替代语法设置 umasks。我们刚刚描述了最简单和最容易的。您可以在umask man页面找到更多详细信息。

Setuid, Setgid, and Sticky Permissions

还有另外两种类型的权限,setuid/setgid 和 sticky,理解它们也很重要。

setuid 和 setgid 权限允许用户运行命令,就好像他是拥有该命令的用户或组一样。那么,为什么需要这样做呢?这允许用户执行他们通常被限制执行的特定任务,或者允许用户共享资源,例如使用相同的组 id 访问文件服务器上的共享文件。

一个很好的例子就是passwd命令。passwd命令允许用户更改自己的密码。为此,该命令需要写入密码文件,这是一个限制访问的文件。通过添加 setuid 权限,用户可以执行passwd命令并运行它,就像她是root用户一样,因此允许她修改自己的密码。

您可以通过使用权限列表中的sS来识别 setuid 和 setgid 权限。例如,passwd 命令的权限是

-rwsr-xr-x 1 root root 25708  2016-09- 25 17:32 /usr/bin/passwd

在 User 类的执行位置可以看到s,这表示passwd命令设置了 setuid 权限。现在看一下下面的目录清单。

-rwSrwSr-- 1 jsmith jsmith     0 Jun  5 09:55 adirectory

这也说明“adirectory”目录的 setuid 和 setgid 已经设置,但这次是用“S”指定的。这意味着该目录没有与用户和组相关联的“执行”权限。换句话说,这个目录(和一个文件)的权限应该已经用‘u+rws,g+rws,o+r’.设置好了

在大多数发行版中,setuid/setgid 权限被用来允许这种类型的访问。很少使用它们,因为你通常不希望一个用户能够以另一个用户的身份运行应用程序或者拥有特殊的特权(另一种方法是通过susudo命令,我们将在第六章中进一步描述)。由于它们也有可能被滥用,并带来安全风险,因此不应该不加选择地使用它们。在本书中,您可能会看到一两个使用 setuid/setgid 权限的应用程序。

粘性权限略有不同,用于目录(对文件没有影响)。当在目录上设置粘滞位时,该目录中的文件只能由拥有它们的用户、目录的所有者或根用户删除,而不管在该目录上设置的任何其他权限。这允许创建公共目录,其中每个用户都可以创建文件,但只能删除他们自己的文件。你可以从另一个类的执行位置的t中识别出一个带有粘性权限的目录。最常见的是在/tmp目录下设置:

drwxrwxrwt 4 root root 4096 2016-08-15 03:10 tmp

在八进制表示法中,setuid/setgid 和 sticky 权限由表示法前面的第四个数字表示,例如,6755。和其他权限一样,每个特殊权限也有一个数值:setuid 用4,setgid 用2,sticky 用1。所以要在目录上设置粘滞位,你可以使用类似1755的八进制符号。如果没有设置 setuid/setgid 或 sticky 权限,则该前缀数字为 0,如下所示:

# chmod 0644 /etc/grub.conf

链接

让我们再来看看清单 4-9 中的例子:

-rw-r--r--        1 root  root        0   2016-07-15 20:47   .autofsck
drwxr-xr-x     2 root  root   4096  2016-05-18  04:11   bin

在我们的清单中,文件类型和权限之后是文件的硬链接数量。硬链接是将文件连接到存储卷上的物理数据的引用。一个特定的数据可以有多个链接。然而,硬链接不同于我们前面介绍的符号链接(由文件类型l表示),尽管这两种链接都是用同一个命令ln创建的。我们将在本章后面的“链接文件”一节中讨论ln命令

用户、组和所有权

清单中的下一项是文件的所有权。每个对象由一个用户和一个组拥有;在清单 4-9 中,根用户和根组拥有对象。在讨论权限时,我们简要讨论了用户和组的所有权。我们解释了只有拥有文件的用户才能更改其权限,而组是用户的集合。组通常用于允许访问资源;例如,需要访问打印机或文件共享的所有用户可能属于提供对这些资源的访问的组。正如我们在本章前面所讨论的,在 Linux 主机上,用户必须至少属于一个组,称为主要组,但是也可以属于一个或多个附加组,称为补充组。

您可以使用chown命令更改文件的用户和组所有权。只有根用户有权更改文件的用户所有权(尽管您可以使用我们在本章前面讨论过的sudo命令来获得这一权限,并将在第六章中更详细地介绍)。

在清单 4-12 中,我们展示了一些如何使用chown命令来改变用户和组所有权的例子。

# chown jsmith myfile
# chown jsmith:admin myfile
# chown -R jsmith:admin /home/jsmith/*
Listing 4-12.Changing Ownership

在清单 4-12 中,我们有三个chown命令。第一个命令将拥有myfile文件的用户更改为jsmith。第二个命令更改文件的用户和组的所有权,用户更改为jsmith,组更改为admin,所有者和组用冒号分隔。第三个也是最后一个命令使用-R开关来启用递归。该命令会将/home/jsmith目录中每个文件和目录的所有者更改为jsmith,将组更改为admin

Note

也可以使用chgrp命令。它允许用户更改他们拥有的文件组。用户只能将组所有权更改为该用户所属的组。你像使用chgrp groupname 文件一样使用它。

尺寸和空间

接下来,在我们的列表中,您将看到磁盘上对象的大小。文件的大小以字节为单位列出(1024 字节是一千比字节,即 K)。我们还可以通过添加如下的-h开关,以更易于阅读的格式显示尺寸:

$ ls -lh
-rw-rw-r--  1 jsmith jsmith  51K  2016-08- 17 23:47 myfile

在前一行中,您可以看到myfile文件的大小为 51 千比字节。

在清单中,目录旁边的大小不是其总大小,而是目录元数据的大小。要获得一个目录中所有文件的总大小,可以使用du或 disk usage 命令。指定(或切换到)您想要查找其总大小的目录,并使用-s-h开关运行命令。-s开关汇总总数,-h开关以人类可读的形式显示大小。

$ du -sh /usr/local/bin
4.7M     /usr/local/bin

du工具有许多额外的开关和选项,你可以通过查看它的man页面看到。

除了文件和目录的大小,您还可以使用另一个命令df查看主机上已用和可用的总磁盘空间。此命令显示所有磁盘和存储设备以及它们的可用空间。您可以在清单 4-13 中看到df命令。

$ df -h
Filesystem                                           Size     Used  Avail   Use%  Mounted on
/dev/mapper/VolGroup00-LogVol01  178G     11G   159G    6%      /
/dev/sda1                                             99M     37M    58M    39%    /boot
tmpfs                                                  910M       0     910M    0%      /dev/shm
Listing 4-13.Displaying Disk Space

我们已经执行了命令并添加了-h开关,它返回人类可读的尺寸。它显示了我们当前的文件系统及其已用和可用空间,以及已用的百分比。还有一些额外的选项可以和df命令一起使用,你可以在命令的man页面查看这些选项。我们将在第九章中重温dfdu命令。

日期和时间

清单中的倒数第二项和最后一项是文件上次修改的日期和时间(称为 mtime)以及文件或目录的名称。Linux 还跟踪文件的最后访问时间(称为 atime)和创建时间(称为 ctime)。您可以使用-u开关列出文件的最后访问时间,如下所示:

$ ls -lu

您可以使用-c开关列出创建日期:

$ ls -lc

Note

我们将在第十七章中重温 atime。

如果您想知道当前主机上的实际时间和日期,您可以使用有用且强大的 date 命令。在没有任何选项的命令行上使用date将返回当前时间和日期,如下所示:

$ date
Tue Aug 19 13:01:20 EST 2016

您还可以在date命令中添加开关,将输出格式化为不同的日期或时间格式;例如,要显示 Unix 纪元时间(自 1970 年 1 月 1 日以来的秒数),您可以如下执行date命令:

$ date +%s
1219116319

这里我们使用+符号添加了一个格式,然后指定了格式,在本例中是%s,以显示纪元时间。在计算时差或作为后缀添加到文件以获得唯一性时,纪元时间会很有用。您可以在date命令的man页面中看到其他格式。您也可以使用date命令来设置时间。键入 date,然后以 MMDDhhmm[[CC]YY]格式指定所需的日期和时间。你可以在 http://en.wikipedia.org/wiki/Unix_time 找到更多关于 Unix 纪元时间的信息。

Note

这只是设置时间的一种方法,我们将在第十章讨论其他更有效的方法,如网络时间协议。

使用文件

因此,在探索我们的简单文件列表的过程中,我们涵盖了许多概念,向您介绍了一些 Linux 命令,并教您如何执行一些关键的管理任务。从这些任务开始,我们将通过讲述如何查看、编辑、搜索、复制、移动和删除文件来结束本章。为了管理您的 Linux 主机,您需要知道如何处理所有这些任务。

读取文件

你要学的第一件事是如何读取文件。Linux 主机上的许多文件,尤其是配置文件,都是基于文本的,可以使用一些简单的命令行工具来读取。

Note

请始终记住,为了读取文件,您必须拥有该文件的读取权限。这意味着您需要拥有该文件,或者属于对该文件具有读取权限的组,或者该文件为其他类设置了读取权限。

这些工具中的第一个是catcat命令如此命名是因为它“连接并打印文件”在清单 4-14 中,您可以看到cat命令在文本文件中的使用。

$ cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1               localhost.localdomain localhost localhost
::1             localhost6.localdomain6 localhost6
Listing 4-14.Using the cat Command

在清单 4-14 中,我们已经将/etc/hosts文件输出到屏幕上。/etc/hosts文件包含我们的 Linux 主机的主机条目(就像 Windows 下的\WINDOWS\System32\services\etc\hosts文件),它们将主机名与 IP 地址相匹配。但是cat命令是一个非常简单的工具,它直接输出文本。如果文件非常大,文本将继续输出并在屏幕上向下滚动,这意味着如果您想查看文件开头的内容,您需要向后滚动。

Tip

您可以通过 Shift+Page Up 和 Shift+Page Down 组合键上下滚动虚拟控制台。

为了解决这个问题,我们将看看另一个名为less的命令。

Note

您可以在/etc/passwd/etc/group文件上尝试使用cat命令来查看您的主机上的用户和组的完整列表。

less命令允许你向前和向后滚动文件,一次滚动一个屏幕。每次显示页面时,都会提示您如何继续。我们通过如下指定文件名来运行less:

$ less /etc/services

less界面内部,您可以滚动浏览文件。要转到下一页,可以使用空格键,要一次前进一行,可以使用Enter键。要向后滚动,可以使用 B 键。你也可以使用箭头键滚动,要退出less命令,你可以使用 Q 键。

Note

通过查看命令的man页面,您可以看到使用less导航文件的其他方法。

除了在文件中导航之外,还可以在一个或多个文件中搜索特定信息。为此,我们可以使用非常强大的grep命令。grep命令允许您在一个或多个文件中搜索字符串或模式(使用正则表达式)并返回搜索结果。

Note

“grep”一词已经成为 IT 界常用的搜索术语,就像“google”一词用于在线搜索引擎一样。2003 年,牛津英语词典增加了“grep”这个词,它既是名词又是动词(例如,“John grep ’ ed his mailbox to find the e-mail”)。

在清单 4-15 中,您可以看到一个非常简单的grep搜索文件/etc/hosts中的字符串localhost

$ grep localhost /etc/hosts
127.0.0.1      localhost.localdomain localhost localhost
::1                 localhost6.localdomain6 localhost6
Listing 4-15.Introducing grep

要使用grep,您需要指定您要搜索的字符串,在本例中是localhost ( grep区分大小写,所以它只会找到这个小写的字符串),然后是您要搜索的文件的名称。

Note

您可以通过在命令中添加-i开关来使grep不区分大小写。

默认情况下,grep返回文件中包含我们正在搜索的字符串的那些行。您还可以使用星号来搜索多个文件,就像我们在本章前面对其他命令所做的演示一样,例如:

$ grep localhost /etc/host*
$ grep localhost /etc/*

第一个命令将搜索/etc/目录中以host*开始的所有文件,第二个命令将搜索/etc/目录中的所有文件。两次搜索都是针对字符串localhost

您还可以通过添加-r开关递归地向下搜索到更低的目录,如下所示:

$ grep -r localhost /etc

Tip

在 Ubuntu 和 Debian 主机上,rgrep命令自动递归到目录中。

您还可以指定更复杂的搜索词,例如多个单词,如下所示:

$ grep "local host" /etc/hosts

您可以看到,我们指定了单词“local”和“host ”,它们之间有一个空格。为了告诉grep这些单词被组合在一起并正确解析,我们需要用引号将它们括起来。引号通常用在许多命令上,以防止输入被不恰当地解析。在本例中,我们正在搜索精确的字符串“local host”,而grep没有返回任何结果,因为该字符串不在/etc/hosts文件中。

命令的功能远不止这些简单的例子。您可以使用grep在文件中进行复杂的正则表达式搜索,例如:

$ grep 'J[oO][bB]' *

这将在当前目录的所有文件中找到字符串JOB, Job, JOb,JoB(记住,grep在默认情况下是区分大小写的,所以我们的正则表达式已经明确指定了大写和小写的变体)。正则表达式允许你在你的主机上做一些非常强大的搜索。

让我们看看其他一些使用grep的有用的正则表达式搜索。

$ grep 'job$' *

在前一行中,我们搜索了当前目录中的所有文件,寻找以job结尾的字符串。符号$告诉grep在字符串末尾搜索文本。

您可以使用^符号依次搜索以特定字符串开始的字符串,如下所示:

$ grep '^job' *

这将返回任何以job开头的字符串。你会发现有无数其他的正则表达式可以经常使用。

Regular Expressions

正则表达式是一种用于识别文本字符串的正式语言;例如,正则表达式可能标识文件中对字符串job的所有引用。各种非常相似的正则表达式语言被像grep这样的工具和编程语言使用,例如 Perl。大多数正则表达式语言的语法非常相似,但偶尔也会有细微的差别。你可以在 http://en.wikipedia.org/wiki/Regular_expression 进一步了解正则表达式。

您可以使用三种版本的正则表达式,BRE(基本正则表达式)、ere(扩展正则表达式)和 PCRE (Perl 正则表达式)。根据你对grep的理解,BRE 和 ere 没有区别。要使用 PCRE,您需要 Perl 中的以下包:libpcre3-dev (Ubuntu)或 pcre-devel (CentOS)。

要测试正则表达式,可以使用以下两种正则表达式编辑器之一:

了解一些常见的模式非常有用:

grep –o –E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" /var/log/auth.log

以上将匹配/var/log/auth.log (Ubuntu 日志文件)中的所有 IP 地址。–o表示只打印比赛的结果,否则你将看到整行比赛的结果。–E说使用 ERE 版本(尽管我们已经说过 ERE 和 BRE 在这里是一样的)。看看表达式本身,首先我们寻找 1 到 3 个出现在 0 到 9 之间的数字{1,3}``[0-9],后面跟一个点。

[0-9]{1,3}\.

这将匹配 0。高达 999。我们期待看到这些:

([0-9]{1,3}[\.]){3}

然后,我们希望看到后面没有点的另一组八位字节。

([0-9]{1,3}[\.]){3}[0-9]{1,3}

将所有这些放在一起,实际上将匹配从 000.000.000.000 到 999.999.999.999 的任何 IP 地址,我们知道这在技术上是错误的,但选择它是因为它更清楚地解释了只匹配 0 到 255 之间的数字是一个更复杂和长的正则表达式(但在互联网上广泛记录)。

另一个有用的正则表达式是在邮件日志中搜索电子邮件地址。

egrep -o "[A-Za-z0-9._-]+@example.com" /var/log/mail.log

这里你可以看到我们正在使用egrep命令,它只是执行带有–E标志的grep。在本例中,我们正在搜索与<username>@example.com匹配的电子邮件地址。我们首先查找任何字母(仅拉丁文),大写或非大写、[A-Za-z...],、数字、[...0-9]、点、[.]或破折号、[...-]

[A-Za-z0-9._-]

这些可以出现一次或多次[...]+

[A-Za-z0-9._-]+

其次是我们感兴趣的领域:

[A-Za-z0-9._-]+@example.com

为了改进我们的匹配,让我们考虑下面的示例文本文件:

email: root@example.com
email: jsmith@example.com
iam a sentence with somewordroot@example.comsomeotherword
email: bjuice@example.com

使用“[A-Za-z0-9._-]+@example.com”正则表达式,我们将在“somewordroot@example.com”上得到一个匹配,这不是我们想要的。我们可以使用一个单词边界锚’ \b ‘,它将只捕获’root@example.com’。这将使正则表达式如下所示:

"\b[A-Za-z0-9._-]+@example.com\b"

现在,如果我们对文本文件示例运行grep,我们只匹配我们想要的电子邮件地址:

$ egrep -o "\b[A-Za-z0-9._%+-]+@example.com\b" file.txt
root@example.com
jsmith@example.com
bjuice@example.com

带有正则表达式的grep命令可能非常强大,您可以执行一些非常复杂的表达式,但是请记住这个老笑话:

“我用正则表达式解决了我的问题。。。现在我有两个问题,”这意味着复杂的正则表达式可能很难维护。

对于进一步的阅读,我们建议拿起一本书,如 Jeffrey Friedl (O’Reilly,2006)的《掌握正则表达式》来帮助你学习正则表达式。

搜索文件

我们已经向您展示了如何读取文件,但是如果您需要找到文件的位置呢?Linux 主机上的许多命令和工具允许您以与 Windows 搜索功能非常相似的方式查找文件。在图 4-10 中,可以看到 Gnome 搜索功能。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-10。

Gnome search function

在命令行上,您也可以使用find命令搜索文件。让我们使用find命令在/home目录中搜索一个名为myfile的文件:

$ find /home/ -type f -iname myfile*

find 命令使用起来非常简单。首先指定要搜索的位置,在本例中是在/home/目录中。您还可以指定/作为根目录(从而搜索整个目录树),或者您可以访问的任何其他位置。

Note

如果您没有搜索特定目录的权限,您会收到一条错误消息,指出您的搜索已被拒绝。

接下来,我们指定了两个选项,-type-iname。第一个选项,-type,指定了我们要搜索的文件类型;在这种情况下,正常文件由f表示。例如,您还可以为目录指定d或为套接字指定s(用于进程间通信的特殊文件)(参见man页面,了解您可以搜索的所有可能类型)。-iname选项搜索不区分大小写的模式,在本例中,是以myfile开头的所有文件。这些选项只是可能的搜索选项中非常小的一部分;您还可以按所有者、组、权限、创建或修改的日期和时间以及大小等进行搜索。然后,find命令将搜索指定的位置,并返回符合搜索标准的文件列表。

您还可以使用find命令来定位不属于任何用户或组的文件和目录。如果用户或组已被删除,并且相关文件没有随该用户或组一起重新分配或删除,则通常会出现这些问题。我们将在第六章中详细讨论这一点。使用下面的find命令,您可以列出处于这种状态的所有文件:

# find / -nouser -o -nogroup

这个命令作为root运行,将在整个目录树中搜索不属于有效用户或组的任何文件。

Tip

您可能还想看看其他一些与搜索相关的命令,包括locatewhereiswhich。你应该阅读他们的man页面了解更多信息。

复制文件

除了查看文件之外,管理主机时需要执行的最常见操作之一是复制文件。关于复制文件,首先要理解的是,像读取文件一样,为了复制,你需要有适当的权限。要复制文件,您需要两种权限:对要复制的文件的读取权限和对要复制到的目标的写入权限。

要复制文件,使用cp命令(复制的简称)。在清单 4-16 中,您可以看到一个简单的cp命令。

$ cp /home/jsmith/myfile /home/jsmith/yourfile
Listing 4-16.Copying Files

在清单 4-16 中,我们已经将文件/home/jsmith/myfile复制到了/home/jsmith/yourfile。你需要小心使用cp命令。默认情况下,cp命令会在不提示您的情况下复制现有文件。如果您已经有一个与要复制到的文件同名的文件,这可能会很糟糕。您可以通过添加-i开关来改变这种行为。-i开关启用交互模式,如果您要复制的文件已经存在,系统会提示您是或否。您回答y覆盖或 n 中止复制。

Note

在一些较老的 Red Hat、Fedora 和 CentOS 发行版上,cp, mv,rm命令的-i开关是通过别名化每个命令自动设置的;例如,cp -i别名为cp。您可以使用alias命令在其他发行版上这样做;详见 www.ss64.com/bash/alias.html

如果我们没有权限读取该文件,我们会得到如下错误:

cp: cannot open `/home/jsmith/myfile' for reading: Permission denied

如果我们不能写入目标,我们会得到一个类似的错误。

cp: cannot stat `/home/jsmith/yourfile': Permission denied

还可以用cp多做几件事。您可以使用星号复制多个文件,如下所示:

$ cp /home/jsmith/* /home/jsmith/backup/

前一行中的目标/home/jsmith/backup/必须是一个目录,我们将把/home/jsmith目录中的所有文件复制到这个目录中。

您也可以选择文件的子集。

$ cp -i /home/jsmith/*.c ./

在前一行,我们复制了所有后缀为。c到当前目录(使用。/快捷方式)。我们还添加了-i开关,以确保如果文件已经存在,我们会得到提示。

您还可以通过添加–r开关,使用 cp 复制目录及其内容。

$ cp -r /home/jsmith /backup

前一行将/home/jsmith目录及其下的所有文件和目录复制到/backup目录。

Caution

使用-r开关时,注意不要像在 Windows 上一样使用*.*通配符。当在 Linux 上使用时…目录也将被递归复制,这可能不是你的意图!

最后,当使用cp命令复制文件时,一些关于文件的项目,如日期、时间和权限,可以被更改或更新。如果您想在副本上保留原始值,您可以使用-p开关。

$ cp -p /home/jsmith/myfile /home/jsmith/yourfile

Working with Directories

除了文件,您还可以操作目录。要创建一个目录,使用mkdir命令。您必须对创建目录的位置拥有写权限。如果你想复制目录并递归地复制它们的内容,你可以通过添加-r开关用cp命令来完成。

您也可以使用mv命令移动目录,就像移动文件一样。

最后,如果你想删除一个目录,使用rmdir命令。rmdir命令将只删除空目录(即其中没有文件的目录)。

我们之前研究过的cat命令也可以通过一个名为重定向的命令行功能来复制文件。

$ cat /home/jsmith/myfile > /home/jsmith/yourfile

使用>符号将一个命令的输出发送到>符号另一侧的命令或动作。在这种情况下,cat命令的输出被重定向到一个名为yourfile的文件中。如果该文件不存在,将会创建它。如果它确实存在,其内容将被覆盖。

Caution

使用重定向时要小心,因为你的目标文件会被覆盖而没有警告。

您还可以使用相同的机制向文件追加内容。

$ cat /home/jsmith/myfile >> /home/jsmith/yourfile

使用>>语法将把来自myfilecat的输出附加到yourfile的末尾。如果yourfile不存在,它将被创建。

Tip

许多其他命令也可以使用重定向来将输出从一个命令定向到另一个命令。它还与另一个 Bash 功能 piping 紧密相关(参见侧栏“Piping 和其他 Bash 技巧”)。

Piping and Other Bash Tips

您已经快速浏览了 Bash 命令行以及使用它可以做的一些事情。这包括使用带有>或>>符号的重定向将输出从一个命令重定向到另一个命令。这个概念可以使用|或管道符号来扩展。例如,管道将一个命令的输出传递给另一个命令

$ cat /etc/passwd | grep ataylor

在前一行中,我们已经输出了/etc/passwd文件的内容,然后将结果传送给grep命令来搜索术语ataylor。这将输出包含术语ataylor的任何一行或多行。您几乎可以用任何在命令行上接受输入的命令来做到这一点。可以与管道一起使用的一些有用的命令有sort(以各种方式对输入进行排序)、uniq(生成唯一的列表)和wc(计算行数、字数等)。).你可以在他们的man页面中读到这些命令。

您还可以进一步进行重定向,多次重定向,或者同时使用管道和重定向。让我们看一个例子。

$ cat *.txt | sort | uniq > text

在本例中,我们要求主机输出所有带有后缀.txt的文件,按字母顺序对它们进行排序,删除重复的行(使用uniq命令),然后将结果输出到一个名为text的文件(如果不存在,将创建该文件,如果存在,将覆盖该文件)。

您还可以重定向输入和输出。

$ grep accounts < /etc/group > matched_accounts

在前面的例子中,我们使用<符号将文件/etc/group导入 grep 命令。然后,我们告诉grep搜索术语accounts,并使用>符号将该命令的输出指向一个名为matched_accounts的文件。

另一个有用的技巧是能够在一个命令行上运行多个命令,用分号分隔每个命令。

$ ./configure; make; make test

这个命令行将运行当前目录中的configure脚本,然后运行makemake test命令。这些命令将依次运行,一个接一个。

这些只是 Bash 命令行、重定向和管道功能的一些非常简单的例子。通过查看 Bash 的man页面、man bash,或者查看在线 Bash 教程之一,如 www.hypexr.org/bash_tutorial.phphttp://tldp.org/LDP/Bash-Beginners-Guide/html/ ,或者查看位于 www.gnu.org/software/bash/manual/bashref.html 的 Bash 参考手册,可以发现更多 Bash 功能。

移动和重命名文件

在 Linux 中移动文件非常简单。使用mv命令,您可以将文件或目录从一个位置移动到另一个位置。要移动文件,您必须对该文件具有写权限,并且对要将其移动到的位置具有写权限。

清单 4-17 演示了如何移动文件。

$ mv -i ∼/myfile /home/bjones/yourfile
Listing 4-17.Moving Files

清单 4-17 中的命令将名为myfile的文件从主目录移动到/home/bjones,并将其重命名为yourfile-i选项再次确保我们在目标文件已经存在时得到提示。你也可以用mv命令来重命名文件。

$ mv -i ∼/myfile ∼/mynewfile

您可以对目录做同样的事情。

删除文件

使用rm(删除)命令删除文件。与任何主机一样,删除文件应该小心谨慎。然而,在 Linux 上,与 Windows 不同,没有快速简单的方法来恢复删除的文件,所以在删除文件之前,您需要小心谨慎,采取一些预防措施。第一个预防措施是使用带有rm命令的-i开关。-i开关启用交互模式,每次删除文件时都会提示您。您必须用一个yY来响应,以删除文件或中止任何其他操作,如清单 4-18 所示。

$ rm -i /home/jsmith/myfile
rm: remove regular file `/home/jsmith/myfile'? n
Listing 4-18.The rm -i Switch

Tip

许多发行版使用别名命令rmrm -i来强制删除检查。您可以输入命令alias来查看您的主机上所有当前别名的列表。您也可以创建自己的别名。有关说明,请查看alias命令的手册页。

您也可以使用-r开关递归删除目录及其内容,如下所示:

$ rm -r /home/jsmith/backup

这将删除/home/jsmith/backup目录及其所有内容。

您也可以使用-f或强制开关来覆盖-i开关,如下所示:

$ rm -fr /home/jsmith/backup

这也将删除备份目录及其所有内容,但不会提示您确认删除。使用该开关时要小心,并且在执行命令时要始终意识到自己在目录树中的位置——不恰当使用该命令的结果可能是毁灭性的!

Caution

与 Windows 的回收站不同,在 Linux 上删除文件往往是相当持久的,除非你有备份。有一些方法可以恢复文件,例如: http://unix.stackexchange.com/questions/80270/unix-linux-undelete-recover-deleted-files 。你用这些方法的成功会有很大的不同。您应该非常小心地删除文件,并且应该确保您有一个适当的备份。这在编辑配置文件时尤其重要。在编辑、移动或删除文件之前,请务必备份文件。有时最好移动文件或目录,等待一段时间,然后在确定不需要时删除。

链接文件

在 Linux 主机上,您还可以创建指向文件的链接。链接可以像 Windows 快捷方式一样使用,但有两种形式——硬链接和软链接或符号链接。硬链接不像 Windows 快捷方式。它们是对物理文件的实际引用。如果删除文件的所有硬链接,它们引用的文件也会被删除。

Note

因此,只能在物理分区或硬盘上创建硬链接;您不能链接到位于另一个驱动器或分区上的文件。

软链接或符号链接更像 Windows 快捷方式:如果它们被删除,原始文件仍然存在,只有链接被删除。

使用ln命令创建链接。默认情况下创建硬链接,通过添加-s开关创建软链接。有几种方法可以使用ln命令,但最简单的是创建一个到目标文件的链接,如下所示:

$ ln -s /home/jsmith/myfile

前一行将创建一个名为myfile的符号链接到/home/jsmith/myfile文件。通过查看其手册页,您可以看到其他可以与ln命令一起使用的选项。

编辑文件

Linux 提供了各种各样的文件编辑工具,包括 GUI 和命令行工具。在 GUI 中,您可以找到类似于kate或更简单的gedit的编辑器。这些是简单的编辑器,但它们不是文字处理器——很像 Windows 记事本。还有一些工具允许你从命令行编辑文件,比如流行的vim, nano, joe,或者奇怪的流行的emacs

我们将从快速浏览一下vim开始,这是一个文本编辑器,是一个名为vi的旧 Unix 编辑器的增强版。要编辑一个文件,运行vim命令并指定要编辑的文件名。

$ vim ∼/newfile

Tip

一些发行版还将vim命令别名为vi,以方便习惯旧名称的人使用。

这将在您的主目录中打开一个名为newfile的文件。要在文件中插入一些文本,请键入 I,它是 insert 的缩写。您将看到屏幕底部出现单词-- INSERT --。这意味着您处于插入模式,这允许您添加到文件中。现在,您可以输入文件了。我们输入 hello jsmith。您也可以使用箭头键在文件行和文件间移动。回车键可用于向文件中添加行。

Tip

您可以使用touch命令创建空文件。只需输入touch和您想要创建的文件名,即可创建一个空文件,例如touch /home/jsmith/newfile

完成后,按下 Esc 键。Esc 键使您退出插入模式(您将看到文本--   INSERT  --从屏幕底部消失)。您现在可以通过输入冒号(:)和字母wq作为:wq的组合来保存您添加到文件中的内容。这意味着写和退出。您也可以只指定w,它会写但不会退出。如果您退出回到命令行,您现在可以查看您的文件并看到您键入的文本:

$ cat newfile
hello jsmith

Tip

你可以在 www.openvim.com/ ,找到关于 vim 的介绍,或者你也可以在命令行上运行vimtutor来开始一个vim教程(取决于你是否安装了 vim 增强包)。

各种 GUI 编辑器也是可用的。有些是简单的,风格类似于微软窗口的记事本或写字板应用程序,而其他的是完全成熟的文字处理器和文本编辑器。

Gnome 默认文本编辑器gedit就是一个例子。您可以在 Gnome 中启动gedit,方法是点击应用程序菜单,打开附件标签,然后选择文本编辑器应用程序。这将启动gedit编辑器,如图 4-11 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-11。

The gedit editor

这些编辑器的另一个例子是 KDE GUI 附带的凯特( http://kateeditor.org/ ),。在图 4-12 中,你可以看到一个kate打开的 KDE 桌面。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-12。

The kate editor

摘要

你学到了什么?首先,Linux 并不难理解,命令行是一个非常强大的工具。与 Window 或 MAC 相比,它包含了许多相似的概念和原则,这将帮助您开始使用 Linux。你应该从本章中吸取的一些重要的东西如下:

  • 您可以使用 LiveCDs 测试很多东西,而不会对您现有的主机和数据带来任何风险,或者使用虚拟机。
  • 学会使用命令行——它有用而且强大(有时你别无选择!).Bash shell 特别强大,您会发现自己不知道没有命令 shell 是怎么过的。
  • 了解更多关于 globbing 和正则表达式的知识——在管理您的主机时,您会发现您的武器库中既有用又强大的工具。
  • 不要使用root用户来管理你的主机。相反,可以使用 sudo 命令。下一章将详细介绍sudo命令。
  • 使用 Linux man页面找到关于每个命令的更多信息。这些都是有用的信息资源。
  • 学习使用vim编辑器(或者您选择的其他编辑器)来帮助您在命令行上处理配置文件。
  • 如果你需要帮助,不要忘记在线资源或 Linux 社区。很多人都在使用 Linux,有人可能已经找到了解决您遇到的问题的方法。使用谷歌或你最喜欢的搜索引擎找到这些解决方案。

在下一章,我们将更多地讨论用户和组,以及如何在您的主机上管理它们。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值