IBM-数据工程-VI-笔记-全-

IBM 数据工程 VI 笔记(全)

001:《Linux命令和Shell脚本入门实践》|课程介绍

在本节课中,我们将要学习Linux命令和Shell脚本的基础知识。课程将介绍Linux操作系统、常用命令以及如何编写Shell脚本来自动化任务。掌握这些技能对于软件开发者、数据科学家、数据工程师、系统管理员等角色都至关重要。

课程概述

本课程由三位讲师共同教授:来自Skill Up Technologies的资深专家Rammesh Sanarreti、IBM全球项目总监Ravahucha,以及IBM的数据科学家兼软件开发者Sam Praopchuk。课程内容涵盖Linux基础、常用命令和Bash Shell脚本编写。

学习Linux命令和Shell脚本能提升你的工作灵活性。无论你是软件开发者、数据科学家、数据工程师、系统管理员、DevOps专业人员、系统架构师还是软件工程师,一旦掌握了Bash命令,编写脚本以简化各类数据管道和应用程序工作流的构建过程就会相对容易。

课程内容结构

上一节我们介绍了课程的整体目标,本节中我们来看看课程的具体内容安排。

课程首先介绍Linux。你将了解Unix和Linux的起源、Linux发行版的架构,以及如何在Linux终端中完成简单任务。

接着,你将探索用于收集用户信息、访问变量值以及向终端窗口打印有用输出的命令。

你将学习如何通过以下方式导航文件系统:列出目录及其内容、随时确定你在目录树中的位置、轻松移动到其他目录,以及快速找到所需文件。你还将学习如何管理文件和目录,包括创建新目录、删除不需要的目录、创建新文件以及复制和移动文件与目录。

你将学习以各种方式查看文件内容,例如使用cat命令和more命令。你还将发现如何获取文件内容的有用摘要信息,并获得创建文件内容自定义视图的经验,例如按行排序内容、从视图中排除重复行以及从每行中提取特定部分。

你将通过实践获得以下经验:归档目录树中的文件和目录、从归档中提取文件和文件夹、从压缩归档中提取和解压文件。你还将通过应用网络命令获得技能,例如确定主机名、获取网络配置的详细信息以及方便地从网络下载文件。

我们将继续介绍Shell脚本。你将探索脚本和Bash Shell脚本的各个方面,包括Shell脚本的用途、如何创建和运行自己的Shell脚本。你还将获得关于过滤命令以及使用管道命令将过滤器链接在一起的宝贵知识。此外,你将学习定义Shell变量和环境变量。在此过程中,你将发现Bash Shell的有用功能,包括元字符的使用、输入输出重定向以及将命令行上指定的参数传递给Shell脚本。

你还将通过全面了解用于运行作业的Cron服务、使用crontab调度作业以及查看和编辑当前在系统上运行的Cron作业,来学习如何将Shell脚本投入生产。

最后,你将通过完成一个涉及各种Linux命令和构建Shell脚本的实践项目来测试新获得的技能。

学习建议

为了从本课程中获得最大收益,请观看每个视频并通过测验检查学习效果,使用讨论论坛与同学和助教联系,最重要的是,确保完成实践实验以练习新技能并展示你的能力。

祝贺你开启这段激动人心的旅程的下一步,祝你好运!

总结

本节课中我们一起学习了《Linux命令和Shell脚本入门实践》课程的介绍部分。我们了解了课程目标、讲师团队、核心内容结构以及学习建议。课程将从Linux基础开始,逐步深入到常用命令和Shell脚本编写,最终通过实践项目巩固所学知识。

002:Linux与Unix介绍 🐧

在本节课中,我们将学习操作系统的基本概念,并追溯Linux与Unix操作系统的起源与发展。我们将了解它们是什么,以及它们在现代计算中的核心地位。

什么是操作系统?

操作系统是一种软件,它管理计算机的硬件和资源,并允许用户与硬件交互以执行有用的任务。你可以将操作系统视为计算机硬件与用户或应用程序之间的中介

Unix是什么?

Unix实际上是一个操作系统家族。一些流行的基于Unix的操作系统包括Oracle Solaris、OpenSolaris、FreeBSD、HP-UX、IBM AIX以及当今最流行的桌面操作系统之一——Apple Mac OS。

在20世纪60年代,最初的Unix操作系统在AT&T贝尔实验室被创造出来。然而,与当时的许多操作系统一样,它是为特定的硬件系统(PDP-7计算机)设计的。

到了70年代,Unix操作系统用C语言进行了重写,这使其区别于其他系统,并使其能够移植到多种硬件架构上。

随后在70年代末,加州大学伯克利分校开发了伯克利软件发行版,即BSD。它是Unix的一个附加组件,提供了额外的软件和功能。著名的Mac OS后来就是从BSD衍生而来的。

Linux是什么?

Linux是一个类Unix的操作系统家族。不过,当人们提到Linux时,通常指的是某个特定的发行版或“风味”。Linux的开发初衷是为了创建一个免费、开源的Unix操作系统版本。

以下是Linux的关键特性:

  • 免费且开源:这意味着任何人都可以查看其源代码。由于有无数双眼睛审视着代码,Linux多年来已成为最安全的操作系统。
  • 多用户:Linux设计用于支持多个用户同时访问系统。
  • 多任务:支持同时运行多个作业和应用程序。
  • 可移植性:Linux已被移植到许多不同类型的设备和硬件平台上运行,从台式机到服务器再到各种设备。

Linux是如何诞生的?

在20世纪80年代,GNU项目在麻省理工学院启动。GNU代表“GNU‘s Not Unix”,它旨在创建一套免费、开源的现有Unix系统工具。

1991年,林纳斯·托瓦兹开发了一个免费、开源的Unix内核版本,命名为Linux。内核是操作系统的核心组件,它使各个组件能够与机器的硬件进行通信。

这是林纳斯·托瓦兹著名的帖子,他在其中分享了自己制作开源类Unix内核的进展。他提到了Minix,那是当时另一个类Unix的内核。

不久之后,在1992年,人们意识到了将GNU项目与Linux内核结合起来的潜力,流行的Linux操作系统开始出现。

1996年,一位名叫拉里·尤因的计算机科学家创作了Tux the Penguin,后来被林纳斯·托瓦兹采纳为Linux的官方吉祥物。

Linux的现代应用

如今,基于BSD的Mac OS运行在全球数百万台设备上。数十亿个Linux实例运行在服务器上,为我们提供着现代网络服务。特别是在开发者群体中,Ubuntu等现代Linux操作系统开始在个人电脑领域越来越受欢迎。

那么,Linux在今天最常见的用途有哪些呢?以下是其主要应用场景:

  • 智能手机:通过使用基于Linux内核的Android操作系统,Linux运行在全球数十亿部智能手机上。
  • 超级计算机:Linux被广泛应用于超级计算机领域,许多由Linux驱动的服务器集群在一起,用于高性能计算应用。
  • 企业与云数据中心:企业和云数据中心也在数百万台服务器上使用Linux,运行着各种应用程序、Web服务器、数据库等。
  • 个人电脑:Linux的各个版本可以轻松用作个人电脑的操作系统。如今,许多人安装Linux是为了学习体验,或将其作为日常使用的主力系统。

在本节课中,我们一起学习了:Unix是一个起源于20世纪60年代的操作系统家族;Linux最初在80年代被开发,作为Unix的免费开源替代品;Linux具有多用户、可移植和支持多任务的特性;以及Linux如今被广泛应用于移动设备、超级计算机、数据中心和云服务器中。

003:Linux发行版

在本节课中,我们将要学习什么是Linux发行版,了解几种常见发行版之间的区别,并认识一些流行发行版的主要应用场景。

什么是Linux发行版?

Linux发行版是Linux操作系统的特定“风味”,也常被称为“发行版”或“distro”。所有Linux发行版都必须使用Linux内核。内核是Linux操作系统的核心组件,它使得系统能够正确使用计算机的硬件。如今,有数百种Linux发行版,每一种都针对特定的用户群体或任务进行了定制。

Linux发行版之间有何不同?

上一节我们介绍了Linux发行版的基本概念,本节中我们来看看它们之间的主要区别。以下是区分不同发行版的关键因素:

  • 默认工具集:每个发行版都包含一套独特的默认工具,这些工具是操作系统的一部分,例如预装在发行版中的命令和应用程序。
  • 图形用户界面:每个发行版都有自己的图形用户界面,用于与操作系统交互。
  • 支持的Shell命令:每个发行版支持一组特定的命令,可以在Shell窗口中使用这些命令进行输入和接收输出。
  • 支持模式:发行版的支持模式各不相同。它可能是一个社区支持的项目,也可能由商业企业维护;它可能是长期支持版本,也可能是滚动更新版本。

常见的Linux发行版

了解了发行版之间的区别后,我们来看看一些具体且流行的Linux发行版。

Debian

Debian是最早的发行版之一,首个版本(0.01版)于1993年发布,首个官方稳定版(1.1版)于1996年发布。它以稳定、可靠和完全开源而闻名。它支持多种计算机架构,这些特性使得Debian在服务器领域备受推崇。此外,Debian是目前最大的社区运营发行版。

Ubuntu

另一个流行的发行版是Ubuntu。它也是一个早期发行版,首个官方版本于2004年发布。Ubuntu是基于Debian的,这意味着它构建在Debian之上,并使用了许多与Debian相同的工具。Ubuntu由Canonical公司开发和管理。Ubuntu有三个官方版本:桌面版、服务器版和核心版。

以下是Ubuntu的官方版本:

  • 桌面版:用于个人电脑、笔记本电脑和工作站。
  • 服务器版:用于简单的文件服务器或多节点云。
  • 核心版:用于物联网设备。

Red Hat Enterprise Linux

与Debian一样,Red Hat Linux是一个核心Linux发行版,这意味着它不是从其他Linux发行版派生而来。Red Hat以稳定、可靠和完全开源而闻名,它由Red Hat(IBM的子公司)管理。如今,它以Red Hat Enterprise Linux的形式发布,这是一个完全专注于企业客户的版本。

Fedora

接下来是Fedora,它以一个支持多种架构的稳定操作系统而闻名。它也非常可靠和安全,提供独特的防火墙和安全功能。它由一个庞大且不断增长的社区积极开发,并由Red Hat赞助。值得注意的是,Red Hat在测试后会使用Fedora的大量代码库。

SUSE Linux Enterprise

另一个Linux发行版是SUSE Linux Enterprise。SUSE Linux Enterprise有两个版本:服务器版和桌面版。它支持多种架构,并使用SUSE包中心,使用户能够安装不属于SUSE Linux Enterprise官方部分的软件包。它由德国开源软件公司SUSE维护。

以下是SUSE Linux Enterprise的版本:

  • 服务器版:用于企业服务器环境。
  • 桌面版:用于企业桌面环境。

Arch Linux

最后,我们还有Arch Linux。Arch Linux独特的“自己动手”方法允许用户自定义系统的每个部分。这使其具有高度可配置性,这种自由度使得Arch非常受欢迎,但这也意味着你需要对Linux和系统工具有深入的了解才能有效使用Arch。此外,由于Arch不像其他发行版那样专注于稳定性,它可以轻松获取最新的软件,但这些软件几乎没有完全稳定的保证。

总结

本节课中我们一起学习了Linux发行版。你了解到Linux发行版可以通过其用户界面、Shell应用程序以及操作系统的支持和构建方式来区分。Linux发行版的设计是针对特定受众的:Debian因其稳定性、可靠性和开源特性在服务器领域备受推崇;Red Hat Enterprise Linux完全专注于企业客户;而SUSE Linux Enterprise支持多种架构。

004:Linux架构概述 🏗️

在本节课中,我们将要学习Linux系统的整体架构。通过了解其层次结构、各层功能以及文件系统组织,你将能够清晰地理解Linux是如何工作的。


概述

Linux系统由五个不同的层次构成,从最外层的用户交互界面到最内层的物理硬件。理解这些层次及其相互关系,是掌握Linux操作系统的第一步。


Linux系统的五层架构

Linux架构可以形象地看作一个五层的模型,每一层都有其特定的职责。

第一层:用户界面

用户界面是Linux架构的最外层,它允许用户通过键盘或鼠标等控制设备与系统进行交互。

桌面版的Linux通常包含一个图形用户界面,其功能类似于微软的Windows系统。这使得用户可以使用鼠标等设备来操作应用程序。例如,你可能会在Linux机器上使用网页浏览器给朋友发送电子邮件,或者使用音乐播放器听你最喜欢的歌曲。

第二层:应用程序层

应用程序层包含了用于在Linux系统中执行任务的软件。

以下是应用程序层可能包含的内容:

  • 系统工具:例如编译器和编程语言。
  • Shell:一种特殊的应用程序,通常是操作系统本身的一部分。
  • 用户应用程序:可以是任何类型的应用,从浏览器、文本编辑器到游戏。

应用程序通过与操作系统通信来执行任务。

第三层:操作系统

操作系统负责对系统健康和稳定至关重要的作业和程序。

它的功能还包括:

  • 为用户分配软件。
  • 检测错误并采取措施防止系统完全崩溃。
  • 执行文件管理。

第四层:Linux内核

在Linux系统中,操作系统构建在Linux内核之上,内核执行最核心、最底层的操作。

内核是Linux系统中最低级别的软件,对系统拥有完全的控制权。它在计算机启动时就开始运行,并在系统运行时一直驻留在内存中。内核还充当应用程序和机器硬件之间的桥梁,通过系统调用使两者能够有效通信。

内核有四个关键任务:

  1. 内存管理
  2. 进程管理
  3. 管理设备驱动程序以提供正确的硬件支持
  4. 确保系统安全

第五层:硬件层

Linux系统的最后一层是硬件层,它由构成计算机的物理或电子设备组成。

硬件层可以包括以下组件:

  • 中央处理器:负责执行大部分计算。
  • 随机存取存储器:一种快速存储单元,用于保存应用程序运行所需的临时信息。
  • 持久存储设备:用于在计算机关闭后保存需要持久化的数据。
  • 计算机屏幕。
  • 任何USB设备,如键盘、鼠标或U盘。

Linux文件系统

上一节我们介绍了系统的层次结构,本节中我们来看看Linux如何组织和管理所有数据——即文件系统。

Linux文件系统是你机器上所有文件的集合。它包括运行机器和应用程序所需的文件,以及包含你工作内容的个人文件。

文件系统的顶层是根目录,用一个正斜杠 / 表示。根目录之下是一个树状结构,包含了系统中的所有目录和文件。文件系统会为这些目录和文件分配合适的访问权限。

关键目录介绍

根目录位于Linux文件系统的最顶端,包含许多其他目录和文件。

以下是几个关键目录:

  • /bin:包含用户二进制文件。二进制文件包含机器读取以运行程序和执行命令的代码。它被称为 /bin 表示它直接存在于根目录之下。
  • /usr:包含用户程序。
  • /home:这是你的个人工作目录,你应该在这里存储所有个人文件。
  • /boot:包含系统启动文件,即对系统启动至关重要的指令。
  • /media:包含与临时媒体相关的文件,例如连接到系统的CD或USB驱动器。

根目录中还有其他几个目录,但在本课程中你不需要访问它们。Linux系统中的所有文件和目录都根据其用途,被组织到这些指定的文件夹中。


总结

本节课中我们一起学习了Linux系统的核心架构。我们了解到,一个Linux系统由五个关键层次构成:用户界面使用户能够通过控制设备与应用程序交互;应用程序使用户能够在系统内执行特定任务;操作系统运行在Linux内核之上,对系统健康和稳定至关重要;内核是最低级别的软件,使应用程序能够与你的硬件交互;硬件包括你PC的所有物理和电子组件。此外,我们还了解了Linux文件系统是一个包含系统上所有目录和文件的树状结构。掌握这些基础知识,将为后续学习具体的Linux命令和操作打下坚实的基础。

005:Linux终端概述 🖥️

在本节课中,我们将学习Linux终端的基础知识。你将了解什么是Linux Shell和终端,它们如何协同工作,并掌握使用终端进行目录导航的基本方法。


什么是Linux Shell? 🐚

Linux Shell是一个操作系统级别的应用程序,用于解释用户输入的命令。在早期的Unix和Linux版本中,Shell是与操作系统交互的唯一方式。如今,虽然图形用户界面(GUI)也被广泛使用,但Shell因其灵活性和高效性,仍然是运行脚本文件和执行系统任务的流行选择。

通过Shell命令,你可以执行多种任务,例如:

  • 移动和复制文件
  • 写入和读取文件
  • 提取和过滤数据
  • 搜索数据

Shell有多种版本,例如bashcsh,但它们的基本功能大多相同。


什么是Linux终端? 💻

上一节我们介绍了Shell,本节中我们来看看如何与Shell交互。用户通过Linux终端与Shell进行交互。终端是一个应用程序或用户界面,你可以在其中输入要运行的命令,并接收这些命令产生的任何输出。

例如,要启动Python应用程序并运行一个名为my_program.py的程序,你可以在终端中输入:

python my_program.py

当你按下回车键时,Shell就会运行这个命令。该程序可能会将“Hello world”这样的文字打印到终端上。


终端与Shell如何协同工作? ⚙️

现在,我们来看看命令是如何被执行的。整个过程遵循以下步骤:

  1. 用户输入命令:用户在终端中输入命令。
  2. 终端传递命令:终端将命令传递给Shell。
  3. 内核翻译命令:操作系统的核心组件——内核,将命令翻译成硬件可以执行的指令。
  4. 硬件执行:硬件执行该命令。
  5. 内核读取结果:命令执行完毕后,内核读取任何变化或结果。
  6. 结果返回用户:内核通过Shell将结果发送回终端,最终呈现给用户。

终端是与机器交互、运行应用程序的强大方式。


终端界面与路径 📍

大多数终端都有一个类似的用户界面供你输入命令。输入命令的区域称为命令行,闪烁的竖线或光标称为命令提示符,它指示你键入的文本将显示的位置。

在命令提示符前,通常会显示当前工作目录。例如,提示符可能显示为/home/me/documents$,这表示当前位于home目录下的me目录中的documents目录里。当前工作目录是Shell寻找你指定要运行的命令的位置(例如上一节提到的python程序)。并非所有终端都显示完整路径,有些可能只显示documents

路径是Linux文件系统中目录或文件的人类可读位置。斜杠/用于分隔目录层级,结构A/B表示名为B的文件或目录位于名为A的目录内。

以下是几个特殊的路径符号:

  • ~:代表当前用户的主目录
  • /:位于路径开头时,代表根目录
  • ..:代表当前目录的父目录
  • .:代表当前目录

使用终端导航目录 🧭

了解了路径的概念后,我们就可以学习如何在文件系统中移动了。你可以使用cd命令来改变当前工作目录。

以下是使用cd命令导航的示例:

  • 输入cd /可以进入根目录
  • 输入cd bin可以从根目录进入bin目录。bin目录包含系统所需的程序。
  • bin目录中,有一个名为ls的可执行文件。你可以通过输入./ls来运行它,以在终端窗口中显示当前目录内所有文件和目录的名称。

许多位于bin文件夹中的命令也被内置到了Shell中,因此你也可以从其他位置运行它们。例如,使用cd ~导航到你的主目录,即使当前工作目录/home/me不包含ls程序,你仍然可以成功运行ls命令。

让我们看更多例子。假设从/home目录开始:

  • 输入cd ..可以将当前工作目录更改为现有目录的父目录。在这个例子中,/home的父目录是/(根目录)。
  • 要导航到/media目录下名为MyUSBDrive的USB驱动器,可以输入cd /media/MyUSBDrive
  • 你也可以用一个命令在目录树中向上和向下导航。要向上导航到/media目录,再向上到根目录,可以输入cd ../..
  • 要向下导航到/home/me/documents目录,可以输入cd /home/me/documents,按回车提交命令即可移动到documents文件夹。

最后,让我们移动到/home/me目录,启动Python应用程序并运行该目录下的my_program.py程序:

cd /home/me
python my_program.py

这个程序会向终端窗口返回一条消息。


总结 📝

本节课中,我们一起学习了Linux终端的基础知识。我们了解到:

  • Linux Shell是一个操作系统级别的应用程序,可用于输入命令并查看命令输出。
  • 我们使用终端向Shell发送命令。
  • 我们可以使用cd命令在Linux文件系统中进行导航。

掌握这些基础知识是有效使用Linux命令行环境的第一步。

006:创建和编辑文本文件

在本节课中,我们将学习如何在Linux环境中创建和编辑文本文件。文本编辑器是编写代码和脚本的基础工具,掌握它们的使用对于数据工程师至关重要。

Linux提供了多种文本编辑器,主要分为两大类:命令行文本编辑器和图形用户界面(GUI)文本编辑器。

以下是几种常见的文本编辑器:

  • GNU Nano:一个小巧友好的非模态命令行文本编辑器。
  • VI:为Unix系统设计的传统命令行编辑器。
  • VIM:基于VI的、功能强大的模态命令行编辑器。
  • Gedit:GNOME桌面环境的默认GUI文本编辑器。
  • Emacs:一个历史悠久且仍在开发中的开源文本编辑器,可在GUI或命令行模式下使用。

🖥️ GUI文本编辑器:Gedit

上一节我们介绍了文本编辑器的分类,本节中我们来看看一个流行的GUI编辑器——Gedit。

Gedit是一个现代的通用文本编辑器,预装在大多数Linux发行版中。它遵循GNOME项目的理念,强调简洁易用。Gedit提供了许多功能来提升文本编辑体验。

以下是Gedit的主要功能:

  • 集成的文件浏览器。
  • 撤销与重做功能。
  • 支持在搜索字符串中使用正则表达式的查找与替换功能。
  • 通过Gedit插件包实现功能扩展。
  • 语法高亮显示,帮助解读代码的不同部分。

⌨️ 命令行文本编辑器:GNU Nano

了解了GUI编辑器后,我们转向命令行环境。GNU Nano是一个命令行文本编辑器,在终端中提供了丰富的编辑功能。

Nano提供了以下功能:

  • 撤销与重做。
  • 支持在搜索字符串中使用正则表达式的查找与替换。
  • 语法高亮。
  • 代码自动缩进。
  • 显示行号。
  • 逐行滚动。
  • 多缓冲区支持,可同时处理多个文件。

要在Nano中打开一个文本文件,请在终端输入以下命令:

nano 文件名

这将打开一个新的文本编辑器窗口,你可以在其中编辑文件。

Nano应用程序界面主要分为两个区域。主区域显示打开文件的文本内容。窗口底部列出了可以在编辑器中使用的命令列表。

要使用这些命令,需同时按下Control键和对应的字母键。例如,按Control + G可以获取帮助。

让我们看看如何使用其中几个编辑选项。

要搜索文本字符串,可以按Control + W使用“Where is”选项。这会在应用窗口底部打开一个新面板。在方括号内,可以看到最近搜索的字符串。输入你想要查找的字符串,例如HTTPS,然后按Enter键。光标将移动到从当前位置起找到的第一个匹配字符串处。

Nano支持许多其他编辑功能,你将在本课程的一个实验环节中进行探索。

⚡ 命令行文本编辑器:VIM

另一个强大但略有不同的命令行编辑器是VIM。它是一个传统且功能非常强大的命令行编辑器,需要一些时间来适应其工作方式,但通过练习,你可以快速完成所有文本编辑任务。

在命令提示符下输入vim即可打开VIM应用程序。你也可以指定文件名来编辑一个新文件或现有文件。

VIM有两种基本模式:插入模式用于输入文本,命令模式用于执行其他所有操作。

启动VIM会话后,按i键进入插入模式。输入一些文本,例如some text,然后按Esc键退出插入模式并切换到命令模式。文本会被写入当前光标位置的缓冲区中。

现在你回到了命令模式,可以使用:save命令加上文件名(例如:save example.txt)来保存文件。缓冲区内容将被写入文件,并显示一条消息,表明文件已成功写入。

现在你的文件已经存在,你可以使用更常见的:w命令将任何更改写入文件。

要退出VIM会话,请输入:q。要退出并放弃自上次写入操作以来的所有更改,请加上感叹号,即:q!

这只是对VIM的一个简短介绍,但你可以使用许多命令来导航文本缓冲区并执行搜索、复制、粘贴和移动文本等操作。你将在接下来的实验课中练习其中一些命令。

📚 总结

本节课中我们一起学习了如何在Linux中使用各种命令行或基于GUI的文本编辑器来处理代码。

  • Gedit是一个基于GUI的编辑器,提供了许多简化工作的功能。
  • GNU Nano是一个命令行编辑器,以命令行格式提供了类似的功能。
  • VIM是另一个命令行编辑器,它使用插入模式输入数据,使用命令模式处理文件。

你已经了解了如何使用文本编辑器处理现有文件,这将有助于你学习如何使用Linux命令创建文件并向其中追加文本。

007:安装软件与更新

在本节课中,我们将学习Linux系统中软件包和包管理器的基本概念,掌握如何使用包管理器来安装软件和更新系统。我们将了解两种主要的软件包格式(Deb和RPM),并分别介绍基于图形界面和命令行的包管理工具。


软件包与包管理器

Linux操作系统的软件更新和安装文件通过一种称为“软件包”的文件进行分发。软件包是归档文件,包含了安装新软件或更新现有软件所需的全部组件。您需要使用“包管理器”来管理这些软件包的下载和安装。

不同的Linux发行版提供了不同的包管理器,有些是基于图形界面的,有些则是命令行工具。


Deb与RPM软件包

Deb和RPM是Linux操作系统中包管理器使用的两种主要软件包格式。它们是包含不同Linux发行版软件或更新的不同文件类型。

  • .deb文件用于基于Debian的发行版,例如Debian、Ubuntu和Mint。Deb代表Debian。
  • .rpm文件用于基于Red Hat的发行版,例如CentOS、Red Hat Enterprise Linux、Fedora和openSUSE。RPM代表Red Hat Package Manager。

Deb和RPM格式在功能上是等效的,但通常不能直接互换使用。


软件包格式转换

如果您发现所需的软件包仅提供另一种格式,可以使用alien工具进行转换。

以下是转换命令示例:

  • 将RPM格式包转换为Deb格式:
    sudo alien package-name.rpm
    
  • 将Deb格式包转换为RPM格式:
    sudo alien -r package-name.deb
    

包管理器的优势

包管理器提供了多项便利功能:

  • 自动解析软件包之间的依赖关系。
  • 在有可用更新时通知您。
  • 基于图形界面的包管理器可以定期自动检查安全和软件更新。
  • 可以自动安装更新,或让您选择并安装特定的更新。

基于Debian系统的包管理器

上一节我们介绍了包管理器的通用概念,本节中我们来看看针对Debian系统的具体工具。

图形界面工具:更新管理器

更新管理器是用于更新基于Debian的Linux系统的图形界面工具。

默认情况下,更新管理器每天检查软件更新,并自动下载和安装所有安全更新。其他更新每周显示一次。您也可以随时手动检查更新。

以下是使用更新管理器的步骤:

  1. 当有软件更新可用时,更新管理器会通知您。
  2. 选择您想要安装的更新。
  3. 点击“安装更新”。
  4. 如果提示,请输入您的用户密码并点击“确定”。
  5. 更新管理器将在后台安装更新,您可以继续工作。

命令行工具:APT

APT是用于更新基于Debian的Linux系统的命令行工具。

  • 使用以下命令查找适用于您发行版的可用软件包:
    sudo apt update
    
    此命令的输出会列出每个可用软件包,构建依赖关系树,并告知您有多少个软件包可以升级。
  • 要安装所有可升级的软件包,请使用:
    sudo apt upgrade
    
  • 如果只想安装特定的软件包,可以使用:
    sudo apt upgrade package-name
    


基于RPM系统的包管理器

了解了Debian系统的工具后,我们再来看看RPM系统的包管理器。

图形界面工具:PackageKit

PackageKit是用于更新基于RPM的Linux系统的图形界面工具。

当有更新可用时,PackageKit会在通知区域显示一个星形图标。它会在可配置的时间间隔自动检查更新,您也可以随时手动检查。

以下是使用PackageKit的步骤:

  1. 点击星形图标打开“软件更新”窗口,该窗口会列出所有可用的软件更新。
  2. 选择您想要安装的更新。
  3. 然后点击“安装更新”。
  4. 如果需要,请输入密码并点击“确定”。
  5. PackageKit将在后台安装更新,您可以继续工作。

命令行工具:YUM

YUM是用于更新基于RPM的系统的命令行工具。YUM代表Yellowdog Updater, Modified。

要更新系统中的所有软件包,请按以下步骤操作:

  1. 输入命令:
    sudo yum update
    
  2. 输入密码后,YUM会获取所有可用的软件包更新。
  3. 然后,它会显示更新摘要并要求您确认下载。
  4. 如果确认,YUM将下载所有软件包更新并更新您系统中的软件包。
  5. 完成后,它会显示成功消息“Complete!”。

安装新软件

您也可以使用命令行工具来安装新软件。

  • 在基于Debian的系统上,使用带有install参数的apt命令来安装软件包:
    sudo apt install package-name
    
  • 在基于RPM的系统上,使用带有install参数的yum命令来安装软件:
    sudo yum install package-name
    

其他包管理器示例

许多软件应用程序使用自己的包管理器,例如用于管理Python环境的流行工具PIP或Conda。

例如,假设您已经有一个Python环境和相关的PIP包,您可以轻松安装用于Python数据处理的流行pandas库。

输入以下命令,指示PIP包管理器执行以下操作:

pip install pandas
  1. 搜索最新的pandas软件包。
  2. 下载pandas软件包。
  3. 检查依赖关系并根据需要进行更新。
  4. 安装pandas软件包。

安装完成后,包管理器会显示新软件的版本号。


总结

本节课中我们一起学习了以下核心内容:

  • .deb.rpm是Linux操作系统中包管理器使用的两种不同的文件类型。
  • Deb和RPM格式可以使用alien工具相互转换。
  • 更新管理器PackageKit分别是基于Deb和RPM的发行版中流行的图形界面包管理器。
  • APTYUM分别是基于Deb和RPM的发行版中流行的命令行包管理器。

通过掌握这些工具,您将能够有效地在Linux系统上管理软件安装和系统更新。

008:常见Linux Shell命令概述

在本节课中,我们将学习Linux Shell的基本概念,并概述一系列常用的Shell命令及其应用场景。通过本课,你将能够理解Shell是什么,列举其应用,并回忆常见的Shell命令。


🐚 什么是Shell?

Shell是类Unix操作系统的一个强大用户界面。它可以解释命令并运行其他程序。Shell不仅是一个能够访问文件、实用程序和应用程序的交互式语言,也是一种脚本语言,可用于自动化任务。

Linux系统上默认的Shell通常是bash。其他Shell包括B shell、C shell、Korn shell、Z shell和fish等。

在本课程中,我们将只使用bash(Bourne Again Shell)。要查看你的默认Shell,可以在命令行中输入以下命令:

printenv SHELL

该命令会返回默认Shell程序的路径。如果你的默认Shell不是bash,可以通过在命令行中输入 bash 来切换到它。

在本课程中,我们将使用美元符号 $ 来代表命令提示符。在其他地方,你可能会看到使用大于符号 > 达到相同目的。


🛠️ Shell命令的应用

Shell命令的应用范围广泛,主要包括以下几个方面:

  • 获取信息
  • 导航和处理文件与目录
  • 打印文件和字符串内容
  • 文件压缩与归档
  • 执行网络操作
  • 监控系统、组件及应用程序的性能和状态
  • 运行批处理作业,例如ETL操作

接下来,我们将逐一介绍这些类别中的常见命令。


ℹ️ 获取信息的命令

以下是一些用于获取系统或用户信息的常见Shell命令:

  • whoami:返回当前用户的用户名。
  • id:返回当前用户和所属组的信息。
  • uname:返回操作系统名称。
  • ps:显示正在运行的进程及其ID。
  • top:显示正在运行的进程及资源使用情况,包括内存、CPU和I/O。
  • df:显示已挂载文件系统的信息。
  • man:获取任何Shell命令的参考手册。
  • date:打印当前日期。

📄 处理文件的命令

上一节我们了解了如何获取系统信息,本节中我们来看看如何操作文件。以下是用于处理文件的常见命令:

  • cp:复制文件。
  • mv:移动文件或重命名文件。
  • rm:删除文件。
  • touch:创建空文件或更新文件的时间戳。
  • chmod:更改或修改文件权限。
  • wc:获取文件的行数、单词数和字符数。
  • grep:返回文件中匹配指定模式的行。

📁 导航和处理目录的命令

处理文件离不开目录操作。以下是用于导航和处理目录的非常常见的命令:

  • ls:列出当前目录中的文件和目录。
  • find:用于在当前目录树中查找匹配模式的文件。
  • pwd:打印当前工作目录。
  • mkdir:创建新目录。
  • cd:将当前目录更改为另一个目录。
  • rmdir:删除整个目录。

🖨️ 打印文件内容或字符串的命令

有时我们需要查看文件内容或输出文本。以下是相关的常见命令:

  • cat:打印文件的全部内容。
  • more:逐页打印文件内容。
  • head:仅打印文件的前N行。
  • tail:打印文件的最后N行。
  • echo:一个非常常用的命令,它通过打印来“回显”输入的字符串。它也可以回显变量的值。

📦 文件压缩与归档的命令

对于文件管理,压缩和归档是重要功能。以下是相关的Shell命令:

  • tar:用于归档一组文件。
  • gzip:压缩一组文件。
  • unzip:从压缩的zip归档文件中提取文件。


🌐 网络操作命令

Shell同样能胜任基本的网络任务。网络应用包括以下命令:

  • hostname:打印主机名。
  • ping:向URL发送数据包并打印响应。
  • ifconfig:显示或配置系统上的网络接口。
  • curl:显示位于URL的文件内容。
  • wget:可用于从URL下载文件。

💻 在Windows上运行Linux的说明

我们应该提到,如果你在Windows机器上运行并希望使用Linux,可以通过多种方式实现。

  • Linux可以安装在单独的硬盘分区上,但这需要在两个操作系统之间重启以进行切换。
  • 或者,你可以在虚拟机上安装Linux。
  • 也可以安装Linux模拟器,如Cygwin。
  • 或者使用Windows Subsystem for Linux (WSL),这是一个在Windows上原生运行Linux二进制可执行文件的兼容层。


📝 总结

本节课中我们一起学习了Shell的核心概念和常用命令。

你了解到,Shell是一个用于运行命令的交互式用户界面,同时也是一种脚本语言和交互式语言。

Shell命令可用于导航和处理文件与目录、进行文件压缩。curlwget命令分别用于显示和从URL下载文件,echo命令用于打印字符串或变量值,而cattail命令则用于显示文件内容。

009:信息命令 📊

在本节课中,我们将学习一系列用于获取系统信息的Linux命令。这些命令能帮助我们查看用户身份、操作系统详情、磁盘使用情况、运行进程,以及打印文本和日期信息。掌握这些命令是有效管理和排查Linux系统问题的基础。

用户与系统信息 👤

上一节我们介绍了课程概述,本节中我们来看看如何获取用户和操作系统的基本信息。信息命令在需要验证当前用户身份或确定特定命令由哪个账户运行时非常有用。

以下是获取用户信息的命令:

  • whoami:此命令显示当前用户的用户名。它不接受任何参数或选项。
    whoami
    
  • id:此命令返回用户或组的ID(UID/GID),这是Linux系统中分配给每个用户或组的数字标识。
    • 使用 -u 选项可返回用户的数字ID。
      id -u
      
    • 若想查看与数字ID对应的用户名,可添加 -n 选项。
      id -un
      

接下来,我们可以使用 uname 命令来获取操作系统信息。uname 代表“Unix名称”,它可以返回内核名称和版本号等信息,有助于识别系统类型或诊断相关问题。

以下是 uname 命令的用法:

  • uname:单独使用可返回操作系统名称(例如 Darwin、Linux)。
    uname
    
  • uname -sr:结合 -s(系统名称)和 -r(内核版本)选项,可同时显示操作系统名称及其版本。
    uname -sr
    
  • uname -v:使用 -v 选项可以查看更详细的版本信息。
    uname -v
    

磁盘使用情况 💾

了解了如何查看系统身份后,我们来看看如何监控磁盘空间。df(disk free)命令用于显示系统的磁盘使用情况,在需要监控磁盘使用率或检查特定文件系统的可用空间时非常有用。

以下是 df 命令的示例:

  • df -h ~:此命令显示用户家目录(由 ~ 符号表示)的磁盘使用情况表。-h 选项使输出更易读,使用GB、TB等单位而非字节。在Linux中,磁盘可以挂载到目录上,这意味着该磁盘的文件系统可通过该目录访问。该表还会显示每个磁盘已使用的存储百分比。
    df -h ~
    
  • df -h:如果不指定目录,此命令将显示所有文件系统的磁盘使用情况。输出包括每个文件系统的大小、已用容量和可用空间。
    df -h
    

进程监控 🔍

查看完磁盘状态,我们转向系统运行的动态部分——进程。ps(process status)命令用于查看系统上当前运行的进程,这在需要监控或管理进程时很有帮助。

以下是 ps 命令的用法:

  • ps -e:结合 -e 选项,ps 会列出系统上运行的所有进程,无论启动它们的用户是谁。该命令显示的信息包括每个运行进程的名称、进程ID(PID)以及每个进程已运行的时间(分和秒)。
    ps -e
    

top(table of processes)命令则像一个任务管理器,它会显示一个运行进程及其资源使用情况的动态表格。当需要监控系统性能或识别消耗大量资源的进程时,这个命令就派上用场了。

以下是 top 命令的示例:

  • top -n 3:此示例使用 -n 选项和数字3来显示前三个运行任务(例如 Chrome, top, Spotify)。默认情况下,任务按CPU使用率排序。top 命令还提供许多其他细节,如内存使用情况和可执行文件位置。
    top -n 3
    

打印与日期 📅

监控进程让我们了解了系统的实时状态,现在我们来学习一些用于输出信息的实用命令。Linux中的 echo 命令是一个强大的工具,用于在终端或Shell脚本中显示文本或变量。

以下是 echo 命令的用法:

  • echo:单独使用 echo 会输出一个空行。
    echo
    
  • echo hello:打印单个单词。
    echo hello
    
  • echo "Learn Linux is fun!":打印带空格的字符串。虽然不加引号 echo 也能工作,但最佳实践是加上引号。
    echo "Learn Linux is fun!"
    
  • echo $PATH:查看变量的值,例如系统的 PATH 变量。这在故障排除或脚本编写时很有帮助。输出中,路径由冒号分隔。
    echo $PATH
    

另一个有用的命令是 date,它用于显示当前系统日期和时间。

以下是 date 命令的用法:

  • date:返回默认日期格式,包括星期几、日、月、年、时间和时区。
    date
    
  • date "+%j day of %Y":可以提取日期的特定部分进行打印。要格式化输出,需在引号内使用以加号开头的文本和控制字符组合。格式控制符以百分号 % 指示。此例中,%j%Y 分别输出一年中的第几天和年份本身。该命令会打印类似“97 day of 2023”的结果。
    date "+%j day of %Y"
    
  • date "+Today is %A, day %j of %Y.":此示例展示了如何进一步将格式控制符与文本结合,打印出独特的字符串。%A 代表完整的星期几名称。
    date "+Today is %A, day %j of %Y."
    

命令手册 📖

最后,如果你想深入了解任何命令的用法,可以使用 man(manual)命令。所有默认的Linux命令都附带一个手册,你可以使用 man 来显示它。

以下是 man 命令的示例:

  • man id:输入此命令将显示 id 命令的手册。手册会提供命令功能的基本摘要(例如“返回用户身份”),列出命令的选项(方括号 [] 表示可选参数,如 [user] 允许你指定用户名),并提供更详细的描述。
    man id
    
  • man manman 命令甚至有自己的手册页,你可以用它来了解更多关于手册命令本身及其用途的信息。
    man man
    

总结 ✨

本节课中我们一起学习了多个关键的Linux信息命令。我们掌握了如何使用 whoamiid 命令获取用户信息;使用 uname 命令获取操作系统信息;使用 df 命令检查系统磁盘使用情况;使用 pstop 命令监控进程及其资源使用情况;使用 echo 命令打印字符串或变量值;使用 date 命令打印和提取日期信息;以及使用 man 命令阅读任何命令的手册。这些命令是日常系统管理和故障诊断的基石,希望你通过实践能熟练运用它们。

010:文件和目录导航命令

在本节课中,我们将学习如何使用Linux命令来浏览和管理文件系统。具体内容包括:使用ls命令列出目录内容,使用cd命令在不同目录间切换,理解相对路径与绝对路径的区别,以及使用find命令查找文件。


📄 列出目录内容:ls命令

ls(list)命令用于列出指定目录中的文件和子目录。

如果直接在终端输入ls,它会显示当前工作目录下的所有文件和目录。

ls

你也可以将目录名作为参数传递给ls命令,以查看特定目录的内容。例如,要查看“下载”文件夹的内容,可以输入:

ls downloads


🔍 获取详细信息:ls -l选项

ls命令支持多种选项,用于显示额外信息。例如,-l选项可以以长格式列出文件和目录的详细信息。

假设你当前位于“文档”文件夹,并希望查看该文件夹内文件的详细信息,可以输入:

ls -l

终端将列出所有子文件和目录,并显示详细信息,如权限、最后修改日期和所有者。


🗺️ 查看当前目录:pwd命令

有时,你需要知道当前正在哪个目录中工作。这时,可以使用pwd(print working directory)命令。

在命令行中输入pwd,终端会显示当前工作目录的完整路径。

pwd

例如,输出可能是:/home/yourusername


🚶 切换目录:cd命令

cd(change directory)命令用于更改当前工作目录。

假设你当前在用户主目录,并希望切换到其中的“文档”子目录,只需输入:

cd documents

现在,如果你再次输入pwd,会发现当前目录已变为“文档”文件夹。

cd命令允许你使用相对路径或绝对路径来切换目录。


🧭 理解路径:相对路径与绝对路径

相对路径是相对于你当前所在目录的路径。例如,从“文档/笔记”文件夹切换到其父目录“文档”,可以使用:

cd ..

这里的..代表上一级目录。

绝对路径则是从根目录开始的完整路径。要直接切换到用户主目录,可以使用波浪号~

cd ~

~符号代表用户主目录的绝对路径。

你也可以直接提供完整的绝对路径来切换目录:

cd /home/yourusername/documents/notes

🔎 查找文件:find命令

find命令是一个强大的工具,用于根据用户指定的条件查找文件并返回其路径。

假设你的“文档”文件夹结构如下:包含两个子文件夹,每个子文件夹中有几个文件。

如果你在“文档”文件夹中工作,并希望查找当前目录下所有名为“a.txt”的文件,可以输入:

find . -name a.txt

这里的.参数表示“在当前目录中搜索”。

要进行不区分大小写的搜索,可以使用-iname选项:

find . -iname a.txt

这将找到所有名为“a.txt”或“A.txt”的文件。


📝 总结

在本节课中,我们一起学习了Linux中用于文件和目录导航的核心命令:

  • ls命令用于列出目录中的文件和子目录。
  • cd命令用于在不同目录之间导航。
  • 相对路径是相对于当前工作目录的路径,而绝对路径是从根目录开始的完整路径。
  • find命令用于在目录树中根据名称或其他条件查找文件。

掌握这些命令是有效使用Linux命令行环境的基础。

011:文件和目录管理命令

在本节课中,我们将学习Linux系统中用于管理文件和目录的核心命令。你将掌握如何创建、删除、复制、移动文件和目录,以及如何管理文件权限。


🗂️ 创建和删除目录

mkdir 命令用于创建目录。假设你当前位于空的 Documents 文件夹中,要创建一个名为 test 的文件夹,只需输入 mkdir test。现在,你的当前目录下就有一个名为 test 的子文件夹了。

rm 命令允许你删除文件或目录。假设你有一个如左图所示的文件结构,并且你当前位于 Documents 文件夹中,希望删除 file1。你可以通过输入 rm file1 来实现。现在,你可以看到只剩下 folder1

你不能简单地删除 folder1,因为它可能包含其他文件。然而,你可以通过使用带 -r 选项的 rm 命令来轻松解决这个问题。-r 选项表示你想删除目录及其所有子文件对象。现在你的 Documents 文件夹是空的了。因此,在使用带 -r 选项的 rm 命令时,你应该始终小心。很容易意外删除包含重要数据的文件夹。

现在,假设你使用 mkdir 命令创建了一个空目录,然后决定删除它。不推荐使用 rm -rf 命令。相反,你应该使用 rmdir 命令,它专门用于删除空目录。这确保了你永远不会意外删除任何重要的文件或目录。输入 ls 显示当前目录确实是空的。


📄 创建和更新文件

touch 命令可用于创建空文件。假设你位于空的 Documents 文件夹中,并希望创建一些空的文本文件。你可以通过输入 touch 后跟一些文件名(例如 A.txtB.txtC.txtD.txt)来实现。现在,你可以看到你的 Documents 文件夹包含了你创建的四个文件。

你可能想知道 touch 命令对现有文件有什么作用。假设你的当前目录包含一个名为 notes.txt 的文件。你可以使用 date -r notes.txt 查看它最后修改的时间。如果你对 notes.txt 使用 touch 命令,你可以看到它的最后修改日期更新为当前时间。


📋 复制文件和目录

cp 命令允许你将文件或目录复制到另一个位置。要复制文件,你可以从源目录复制文件,并在目标目录中指定文件名,或者直接省略目标文件名,默认保持相同的文件名。要复制整个目录,你需要给 cp 命令加上 -r 选项,以便它知道递归地复制所有子目录和文件。

让我们看一些例子。假设你的工作目录中有一个名为 notes.txt 的文件和一个名为 documents 的文件夹。你可以使用 cp notes.txt documents/notes.txt 复制到你的 documents 文件夹中。现在你可以看到你的 documents 文件夹包含了一份 notes.txt 的副本。注意,你不需要指定源目录,因为 cp 默认使用你的当前目录。

接下来,你可以使用左侧的语法创建一个名为 docs_copydocuments 文件夹副本。正如预期的那样,你现在有了一个 docs_copy 文件夹,其内容与原始的 documents 文件夹相同。


🚚 移动文件和目录

mv 命令允许你移动文件或目录。要移动文件,你可以输入 mv,后跟要移动的文件路径,然后是你要移动到的文件夹路径。同样,要移动目录,你可以输入 mv,后跟要移动的目录路径,然后是你要移动到的路径和目录。

让我们看一个例子。假设你有一个名为 my_script.sh 的文件,以及三个名为 scriptsnotesdocuments 的文件夹。你可以使用左侧的语法将 my_script.sh 移动到你的 scripts 文件夹中。因此,输入 ls my_script.sh 没有返回结果,但输入 ls scripts/ 显示你已成功将 my_script.sh 移动到了 scripts 文件夹中。

接下来,你可以使用左侧的语法将你的 notesscripts 文件夹移动到你的 documents 文件夹中。你可以看到你的目录现在只包含你的 documents 文件夹,并且你的 documents 文件夹包含了你刚刚移动的 scriptsnotes 文件夹。


🔐 管理文件权限

chmod 代表 “change mode”,用于更改文件的读、写和执行权限。假设你的当前目录中有一个名为 my_script.sh 的 Shell 脚本文件,其内容为 echo "Learning Linux is fun"。输入 ls -l my_script.sh 显示你的 Shell 脚本具有读和写权限(由 rw 字符表示),但如果你尝试执行该文件,你会得到一个 “permission denied” 错误。

为了使你的脚本可执行,你可以使用 chmod +x my_script.sh 命令调用 chmod。现在输入 ls -l my_script.sh 显示 my_script.sh 具有可执行权限(由 x 字符表示)。很好,现在运行脚本可以正常工作了。


📝 总结

本节课中,我们一起学习了以下核心的Linux文件和目录管理命令:

  • 你学会了使用 touch 命令创建新文件或更新现有文件的最后修改日期。
  • 你学会了使用 mkdir 命令创建目录,以及使用 rmdir 命令删除空目录。
  • 你学会了使用 cpmv 命令来复制、移动和重命名文件与目录。
  • 你学会了使用 chmod 命令来更改文件的读、写和执行权限。

掌握这些命令是有效使用Linux系统进行日常文件操作的基础。

012:查看文件内容

在本节课中,我们将学习如何应用操作文件的命令,以多种有用的方式查看文件内容,并确定文件的行数、单词数和字符数。


🖨️ 使用 cat 命令查看完整文件

首先,你可以使用 cat 命令将整个文件内容打印到标准输出。

假设你的当前目录下有一个名为 numbers.txt 的文件,你可以通过输入 ls 命令来确认它的存在。要打印这个文件的内容到标准输出,你可以输入:

cat numbers.txt

这将产生如下所示的输出,包含数字 0 到 99。你可以看到输出占满了整个终端窗口。实际上,这个文件比这里显示的 12 行长得多,因此你可能并不总是想用 cat 来查看内容。幸运的是,针对这种情况,还有其他替代命令。


📄 使用 more 命令分页查看

more 命令允许你以逐页格式查看文件内容。输入 more numbers.txt,你将在第一页看到数字 0 到 8。这里的“页”指的是当前终端窗口的显示区域。如果你垂直扩展终端窗口,页的大小也会增加。按下空格键,你将看到下一页,显示数字 9 到 17。输入 q 可以退出 more 程序并返回到命令提示符。


🔝 使用 head 命令查看文件开头

你可以使用 head 命令来打印文件的前 10 行。输入 head numbers.txt 会返回前 10 行,即数字 0 到 9。

你可以使用 -n 选项来指定 head 命令返回的行数。例如,输入:

head -n 3 numbers.txt

你将得到 numbers.txt 文件的前三行:0, 1, 2。


🔚 使用 tail 命令查看文件末尾

tail 命令用于打印文件的最后 10 行。输入 tail numbers.txt 会返回 numbers.txt 文件的最后 10 行,即数字 90 到 99。

head 命令类似,你也可以使用 -n 选项来改变返回的行数。输入:

tail -n 3 numbers.txt

你将得到 numbers.txt 文件的最后三行:97, 98, 99。


📊 使用 wc 命令统计文件信息

你可以使用 wc 命令来统计文件中的字符数、单词数或行数。

假设你有一个名为 pets.txt 的文件。输入 cat pets.txt 显示该文件每行包含单词“cat”或“dog”。输入 wc pets.txt,你会得到结果 7 7 28 pets.txt。这表示你的文件包含 7 行7 个单词28 个字符

你可能会疑惑:7 个单词乘以 3 个字母等于 21,为什么 wc 会统计出 28 个字符?因为它也计算了换行符。虽然你看不见,但文件中有 7 个换行符,每个换行符在文件中都表示为一个字符。

以下是 wc 命令的常用选项:

  • 要仅查看行数,可以使用 -l 选项:wc -l pets.txt 返回 7 pets.txt
  • 要仅查看单词数,可以使用 -w 选项。
  • 要仅查看字符数,可以使用 -c 选项。


📝 课程总结

在本节课中,我们一起学习了如何应用 catmoreheadtail 命令以多种方式查看文件内容,并使用 wc 命令来确定文件的行数、单词数和字符数。

013:12个用于整理文本文件的有用命令 📝

在本节课中,我们将学习如何运用一系列命令来高效地整理和操作文本文件。具体来说,我们将掌握如何对文件内容进行逐行排序、去除重复行、筛选特定模式的行、从每行中提取特定部分,以及合并来自多个文件的行。


使用 sort 命令进行排序

上一节我们介绍了课程概述,本节中我们来看看如何对文本文件的内容进行排序。sort 命令能够按字母数字顺序对文件的行进行排序,并将结果输出到标准输出。

命令格式

sort [选项] 文件名

例如,输入 sort pets.txt,你将得到按字母顺序排序的输出。假设 pets.txt 的内容中 cat 重复了五次,dog 重复了两次,排序后它们会按顺序排列。

如果你想进行反向排序,可以使用 -r 选项。输入 sort -r pets.txt,你会得到反向排序的结果,dog 行会出现在 cat 行之前。


使用 uniq 命令去除重复行

了解了排序之后,我们来看看如何清理文件中的重复内容。uniq 命令可以过滤掉文件中重复的行。

命令格式

uniq [选项] 文件名

首先,通过输入 cat pets.txt 来回顾文件内容。然后,输入 uniq pets.txt,你将得到 catdogcat。需要注意的是,uniq 命令仅会移除连续出现的重复行。因此,单词 cat 在这里出现了两次,因为它被两行 dog 隔开,打断了连续的序列。


使用 grep 命令搜索模式

处理完重复行,我们常常需要从文件中筛选出包含特定内容的行。grep(全局正则表达式打印)命令可以返回文件中匹配指定模式(如正则表达式)的行。

假设你有一个存储名人姓名的文件,可以通过输入 cat people.txt 来查看。

以下是使用 grep 的基本步骤:

  • 你可以使用 grep 来查找 people.txt 中包含连续字符 “ch” 的所有行。
  • 为此,你输入 grep ch people.txt。输出返回两个结果:Dennis RitchieIrwin Schrodinger,它们都包含小写的 “ch”。
  • 如果执行相同的操作,但这次加上 -i 选项(grep -i ch people.txt),则会返回一个额外结果:Charles Babbage,它包含大写的 “C”。-i 选项通过使搜索不区分大小写来扩展模式匹配。

使用 cut 命令提取字段

有时我们需要从每行中提取特定的部分,这时 cut 命令就派上用场了。它可以从文件的每一行中提取指定的字符或字段。

再次看到名人列表,例如 Alan TuringCharles Babbage

提取字符切片
你可以使用 cut 命令提取每行的第2到第9个字符。输入 cut -c 2-9 people.txt,可以看到 Alan Turing 被返回为 lan Tur

提取字段(更实用的例子)
假设你只想提取列表中每个人的姓氏。你知道列表的每一行都由两个字段组成:名和姓,它们之间用一个空格分隔。

以下是提取第二个字段(姓氏)的方法:

  • 使用 -d ‘ ‘ 选项指定字段分隔符(即表示字段间分隔的字符)为空格。
  • 使用 -f 2 选项返回每行的第二个字段。
  • 完整的命令是:cut -d ‘ ‘ -f 2 people.txt。这将返回列表中每个人的姓氏。

使用 paste 命令合并文件

最后,我们学习如何将多个文件的内容合并到一起。paste 命令可以合并来自多个文件的行。

想象你有以下三个行数相同的文本文件:

  1. 名为 first.txt 的文本文件,包含人名。
  2. 名为 last.txt 的文本文件,包含对应人物的姓氏。
  3. 第三个文本文件 yob.txt,列出了每个人的出生年份。

你可以通过输入 paste first.txt last.txt yob.txt,以表格形式查看这些文件。注意,这三列是对齐的,因为 paste 默认使用制表符作为分隔符。通过这个表格,你可以看到,例如,Charles Babbage 出生于1791年。

指定自定义分隔符
你可以使用 -d 选项为 paste 命令指定制表符以外的分隔符。

例如,你可以使用逗号作为分隔符,输入命令:

paste -d ‘,‘ first.txt last.txt yob.txt

正如你所见,这将创建一个用逗号分隔每个字段的表格,例如 Dennis,Ritchie,1941


总结 🎯

本节课中我们一起学习了五个强大的文本处理命令:

  1. 使用 sort 按字母数字顺序查看文件行。
  2. 使用 uniq 从视图中移除重复行。
  3. 使用 grep 获取文件中符合指定条件的行。
  4. 使用 cut 从行中提取字符切片和字段。
  5. 使用 paste 合并来自不同文件的行。

掌握这些命令将极大地提升你在Linux环境下处理和分析文本数据的效率。

014:网络命令 🌐

在本节课中,我们将学习几个关键的Linux网络命令。你将学会如何检查网络配置、测试网络连接的稳定性,以及如何从互联网上获取数据。


检查主机信息 🖥️

hostname 命令用于获取或设置主机名,这是唯一标识你计算机的信息。

输入不带任何选项的 hostname 命令,会返回你机器的主机名。例如,结果可能是 my-linux-machine.local。如果你的机器设置了本地域,主机名会包含 .local 后缀。

要省略域名后缀,可以使用 -s 选项。

如果你想获取主机名对应的IP地址,可以使用 -I 选项。


查看网络接口配置 🔧

ifconfig 命令(接口配置)用于显示你计算机上所有通信设备的信息。

直接输入 ifconfig 会输出大量信息,包括IP地址、MAC地址以及网络硬件的规格。这些信息对系统管理员非常有用,但超出了本课程的范围。

你也可以指定一个具体的设备来查看其信息。例如,输入 ifconfig eth0 会返回名为 eth0 的以太网适配器的详细信息,包括其IP地址、接收和发送的数据包数量(含错误和丢包统计),以及总的数据收发量。


测试网络连通性 📡

ping 命令用于测试与某个主机或IP地址的连接是否通畅。它通过向目标服务器发送ICMP(互联网控制消息协议)请求包,并监听响应来实现。

例如,输入 ping google.comping 会为每个成功的响应打印一行信息,并持续运行,直到你使用 Ctrl+C 中止。中止后,它会打印本次测试的统计摘要。

对于每个请求,ping 会报告有用的信息,包括目标URL的IP地址(例如 142.250.1.46)以及往返时间(以毫秒为单位)。最后的统计信息包括:发送和接收的数据包数量、丢包百分比,以及往返时间的最小值、平均值、最大值和标准差。

如果你想限制 ping 发送的请求次数,可以使用 -c 选项。例如,输入 ping -c5 google.com 会发送5个请求,然后自动停止并打印统计信息。


使用Curl传输数据 🔄

curl 是一个强大的工具,支持多种协议,允许你与URL之间传输数据。

输入 curl www.google.com 会使用默认的HTTP协议,返回Google首页的全部HTML内容。例如,你可以在输出中看到Google G标志的PNG文件路径。在浏览器中访问该路径,就能看到这个标志。

你还可以使用 -O 选项,让 curl 将URL的内容保存到本地文件。例如,输入 curl -O google.txt www.google.com。之后,你可以使用 head 命令查看 google.txt 文件的内容,以验证其与之前 curl 的直接输出是否一致。


使用Wget下载文件 📥

curl 类似,wget 命令也用于从URL获取文件。

wgetcurl 一样,可以获取URL指向的文件或网页的HTML代码。但 wget 在协议支持上更专业,并具备递归下载能力。当一个URL指向一个包含多个文件的文件夹时,这个功能非常有用。

这里,我们使用 wget 下载一个由 w3.org 托管的测试文件 ISO-8859-1.txtwget 在下载过程中会返回信息,例如解析并连接到目标服务器、发送HTTP请求、等待响应,以及将文件自动保存到当前目录。

作为参考,在浏览器中查看该URL时,你会看到一个简单的文本文件。

输入 head -12 ISO-8859-1.txt,你可以看到已下载文件的前12行内容。正如预期,文件内容与之前幻灯片上看到的数据完全一致。


总结 📝

本节课中,我们一起学习了几个重要的Linux网络命令:

  • hostname 命令用于获取或设置主机名。
  • ifconfig 命令用于显示所有网络设备的信息。
  • ping 命令用于测试与主机或IP地址的网络连通性。
  • curl 命令支持你与URL之间传输数据。
  • wget 命令用于从URL获取文件。

015:文件存档与压缩命令

在本节课中,我们将学习Linux系统中文件存档与压缩的核心概念和实用命令。我们将了解存档与压缩的区别,并掌握如何使用 tarzip 命令来创建、解压、压缩和解压缩文件。


概述:存档与压缩的区别

存档与压缩是两个不同但常结合使用的过程。

存档是将不经常使用但希望保留的信息存储起来的过程。一个存档文件是多个数据文件和目录的集合,它们被存储为一个单一文件。存档使文件集合更便于携带,并可作为丢失或损坏时的备份。

文件压缩则是通过利用文件信息内容中的冗余来减小文件大小。压缩的主要优点包括节省存储空间、加快文件传输速度以及减少带宽负载。


创建与查看存档文件

假设你创建了一个名为 notes 的目录来存放课程资料,并决定将其存档以备将来使用。该目录结构如下:它包含两个名为 mathphysics 的子文件夹,每个子文件夹内都有名为 week1week2 的文件。

使用带 -R 选项的 ls 命令,可以递归地列出当前目录树中的所有目录和文件,其结构与图形表示一致。

使用 tar 命令存档

tar(磁带存档)命令可用于存档和解档文件及目录。一个已存档的 tar 文件常被称为“tarball”。

要存档整个 notes 目录(包括其子目录和所有文件),请输入以下命令:

tar -cf notes.tar notes

其中,-c 选项表示创建新存档,-f 标志告诉 tar 从文件(而非默认的标准输入)读取输入。

执行 ls 命令后,可以看到当前目录中既包含原始的 notes 文件夹,也包含新创建的 notes.tar 存档文件。

创建压缩存档

如果你还希望存档被压缩,可以输入相同的命令,但额外加上 -z 选项。该选项会通过名为 gzip 的压缩程序过滤存档。为输出文件名添加 .gz 后缀有助于其他系统(如Windows)正确识别文件类型。

tar -czf notes.tar.gz notes

执行 ls 命令后,可以看到已创建压缩的 notes.tar.gz 文件。

查看存档内容

你可以使用 tar 命令的 -t(列表)选项来检查存档文件的内容:

tar -tf notes.tar

这会列出 tarball 中的所有文件和目录。正如预期,其结构与原始 notes 文件夹相同。


解压与提取存档文件

上一节我们介绍了如何创建存档,本节中我们来看看如何解包或解档存档文件。

解档 tar 文件

使用 tar 命令解档存档文件。输入以下命令:

tar -xf notes.tar

-x 选项告诉 tar 从存档中提取文件和目录对象。命令后的 notes 是可选的目标文件夹名称(此处为默认值)。

输入 ls -R,可以看到存档的 notes 文件夹已被解档到一个名为 notes 的父文件夹中,其中包含 mathphysics 子文件夹以及最初的四个周文件。这验证了原始目录结构的完整性。

解压并提取 .tar.gz 文件

同样,你可以解压缩 .tar.gz 文件并从中提取文件。要解包并解压缩 notes.tar.gz 文件,请输入:

tar -xzf notes.tar.gz

再次输入 ls -R,可以看到目录和文件已按预期解包。


使用 zipunzip 命令

zip 命令用于压缩文件目录并将其打包成单个存档。请注意 zip 实现的操作顺序:它先压缩文件,然后再打包。而 tar-z 选项则是先打包整个 tarball,然后再对其应用 gzip 压缩。

创建 zip 存档

要压缩 notes 目录并将其打包成 zip 文件,请输入:

zip -r notes.zip notes

输入 ls 后,可以看到已创建 notes.zip 存档。

解压 zip 存档

unzip 命令,顾名思义,用于从 zip 存档中提取压缩文件并解压缩它们。

要解压 notes.zip 文件,只需输入:

unzip notes.zip

输入 ls -R 后,可以看到 unzip 已创建 notes 文件夹,并按预期解包了目录和周文件。


总结

本节课中我们一起学习了文件压缩的主要优点,包括节省存储空间、加快文件传输速度和减少带宽负载。

我们掌握了以下关键命令:

  • 使用 zip 命令压缩文件目录并将其打包成单个压缩文件存档。
  • 使用 tar 命令将文件目录存档成 tarball,并可选择使用 gzip 压缩该 tarball 文件。
  • 使用 unzip 命令解包和解压缩 zip 存档。
  • 使用 tar 命令解压缩和解包 .tar.gz 存档。

通过掌握这些命令,你可以有效地在Linux系统中管理、备份和传输文件集合。

016:Shell脚本基础入门

在本节课中,我们将学习Shell脚本的基础知识。我们将了解什么是脚本、脚本的常见用途、如何编写一个简单的Shell脚本,以及如何运行它。通过本课的学习,你将能够掌握Shell脚本的基本概念和操作步骤。


什么是脚本?

脚本是一系列命令的列表,可以由一种称为脚本语言的程序解释并运行。这些命令可以交互式地在命令行中输入,也可以逐行列在文本文件中。

脚本语言通常不需要编译,它们在运行时被解释。因此,脚本的运行速度通常比编译型语言慢,但开发和修改脚本更加容易和快速。


脚本的常见用途

脚本被广泛用于自动化各种过程。以下是脚本的一些常见用途:

  • ETL作业:用于数据的提取、转换和加载。
  • 文件备份和归档:自动化文件的备份和整理。
  • 系统管理任务:执行日常的系统维护和管理操作。
  • 应用程序集成:连接不同的应用程序或服务。
  • 插件和Web应用开发:用于开发扩展功能或Web应用。

你可以使用脚本来完成几乎任何计算任务。


Shebang解释器指令

Shell脚本是一个可执行的文本文件,其第一行通常是一个解释器指令,也称为Shebang指令。

Shebang指令的形式如下:
#! interpreter [optional-argument]

其中:

  • interpreter 是一个可执行程序的绝对路径。
  • [optional-argument] 是一个可选的字符串参数。

Shell脚本是调用Shell程序的脚本。例如:

  • #!/bin/sh 调用位于/bin目录下的Bourne Shell或其他兼容的Shell程序。
  • #!/bin/bash 调用Bash Shell。

Shebang指令不仅限于Shell程序。例如,你可以创建一个Python脚本,其指令为:#!/usr/bin/env python3


创建并运行一个简单的Shell脚本

上一节我们介绍了Shebang指令,本节中我们来看看如何创建一个简单的“Hello World”Shell脚本并运行它。

以下是创建和运行脚本的步骤:

  1. 创建脚本文件:使用touch命令创建一个名为hello_world.sh的空文本文件。.sh扩展名是一种约定,用于表明该文件是一个Shell脚本。

    touch hello_world.sh
    
  2. 添加Shebang指令:通过echo命令输出Bash的Shebang指令,并使用双大于号>>(Bash的输出重定向追加操作符)将其添加到文件中。

    echo ‘#!/bin/bash’ >> hello_world.sh
    
  3. 添加脚本内容:再次使用echo命令,将打印“Hello World”的语句添加到脚本中。

    echo ‘echo “Hello world”’ >> hello_world.sh
    

  1. 设置执行权限:在运行脚本之前,需要使其可执行。首先,使用ls -l命令检查脚本当前的权限设置。
    ls -l hello_world.sh
    
    输出中的rw表示文件可读和可写,但没有x意味着它不可执行。这些权限适用于三个用户组:所有者(你)、所属组和其他所有用户。使用chmod +x命令为所有用户添加执行权限。
    chmod +x hello_world.sh
    
    再次检查权限,现在所有三个权限组都有了x条目,表示脚本对所有用户都可执行。

  1. 运行脚本:最后,通过输入./hello_world.sh并按回车键来运行你的Bash脚本。命令行将显示文本“Hello world”。
    ./hello_world.sh
    


总结

本节课中我们一起学习了Shell脚本的基础知识。我们了解到:

  • Shell脚本是一个以Shebang解释器指令开头的可执行文本文件。
  • Shell脚本可用于执行命令以及运行其他程序。
  • 脚本语言不需要编译,它们在运行时被解释。
  • 编译型语言可能比脚本语言运行得更快,但通常需要更多的开发时间。

通过掌握这些基础,你已经迈出了使用Shell脚本自动化任务的第一步。

017:管道、变量和过滤器 📖

在本节课中,我们将要学习Bash Shell脚本的三个核心特性:过滤器、管道以及Shell变量与环境变量。掌握这些概念是编写高效Shell脚本的基础。

概述

本节内容将分为三个主要部分。首先,我们将介绍什么是过滤器及其作用。接着,我们将探讨如何使用管道将多个过滤器命令连接起来。最后,我们会讲解Shell变量与环境变量的定义、设置和使用方法。

过滤器 🔍

过滤器是Shell命令或程序,它们从标准输入(通常是键盘)读取数据,并将处理结果输出到标准输出(通常是终端)。我们可以将过滤器视为一个数据转换器。

以下是常见的过滤器命令示例:

  • wc (word count):统计字数、行数。
  • cat:连接并显示文件内容。
  • more:分页显示文件内容。
  • head:显示文件开头部分。
  • sort:对文本行进行排序。
  • grep:在文件中搜索指定模式。

过滤器的强大之处在于它们可以被串联使用,这就引出了“管道”的概念。

管道操作符 | 🔗

管道操作符由一个竖线符号 | 表示,它极大地扩展了Shell的功能。管道允许你将一系列过滤器命令连接成一个处理链。其使用模式如下:

command1 | command2 | command3

相应地,command1 的输出会成为 command2 的输入,依此类推。顾名思义,“pipe”就是“管道”或“流水线”的意思。

例如,你可以将 ls 命令的输出通过管道传递给带 -r 选项的 sort 命令,从而得到一个反向排序的目录内容列表。

ls | sort -r

Shell变量 💾

Shell变量是其作用域仅限于创建它的Shell本身的变量。根据定义,不同的Shell进程无法看到彼此的Shell变量。你可以使用 set 命令来列出当前Shell可见的所有变量及其定义。

set

由于该命令会列出大量信息,你可以将其输出通过管道传递给 head 命令,以便只显示前几个变量定义。

set | head -4

要定义一个新的Shell变量,只需使用等号为你选择的变量名赋值。请注意,等号周围不能有空格。

变量名=值

例如,我们定义一个名为 greetings 的Shell变量,用于存储字符串 “Hello”。

greetings=Hello

要查看新变量 greetings 的内容,需要使用美元符号 $ 来访问其值,然后通过 echo 命令将其回显出来。

echo $greetings

你也可以同时显示多个变量。让我们再定义一个变量 audience,其值为 “world”。

audience=world

然后同时回显这两个变量,将得到 “Hello world”。

echo $greetings $audience

要清除一个变量,请使用 unset 命令。例如,unset audience 会删除变量 audience

unset audience

环境变量 🌍

环境变量与Shell变量类似,但它们的作用域更广。环境变量会持续存在于由创建它的Shell所派生的任何子进程中。

你可以通过 export 命令将任何Shell变量扩展为环境变量。例如,export greetings 会使 greetings 成为一个环境变量。

export greetings

要列出所有环境变量,请使用 env 命令。让我们通过将 env 的输出传递给 grep 命令,并使用模式 “greet” 过滤结果,来检查 greetings 是否已被导出为环境变量。

env | grep greet

结果显示,greetings 现在确实是一个环境变量。

总结

本节课中我们一起学习了:

  1. 过滤器是如 wccatsort 等的Shell命令或程序,它们对提供的输入数据进行转换。
  2. 管道操作符 | 可用于创建过滤器命令链(管道),使一个命令的输出成为另一个命令的输入。
  3. Shell变量可以通过简单的等号赋值,使用 set 命令列出,其作用域限于当前Shell。
  4. 环境变量是作用域扩展到其所在Shell的所有子进程的Shell变量,它们使用 export 命令创建,并使用 env 命令列出。

掌握管道、变量和过滤器是构建复杂且自动化Shell脚本的关键步骤。

018:Bash Shell 实用功能 🛠️

在本节课中,我们将学习Bash Shell脚本的几个核心功能。掌握这些功能将帮助你更高效地编写和运行Shell脚本。

概述

Bash Shell提供了一系列强大的功能,包括元字符、引用、输入输出重定向、命令替换、命令行参数以及批处理与并发执行模式。理解这些概念是编写有效Shell脚本的基础。

元字符

元字符是对Shell具有特殊含义的字符。

以下是几种常见的元字符及其用途:

  • 井号 #:用于添加注释,Shell会忽略注释内容。
    • 例如:# 这是一个注释 不会返回任何结果。
  • 分号 ;:用于在同一行中分隔多个命令。
    • 例如:echo “第一行”; echo “第二行” 会分两行输出结果。
  • 星号 *:在文件名模式中,代表任意数量的连续字符。
    • 例如:ls /bin/ba* 会列出 /bin 目录下所有以 ba 开头的文件,例如 bash
  • 问号 ?:在文件名模式中,代表任意单个字符。
    • 例如:ls /bin/b?sh 会列出 /bin 目录下符合 b?sh 模式的文件,例如 bashdash

引用

引用用于指定Shell是否应将特殊字符解释为元字符,或者将其转义。

  • 反斜杠 \:用于转义单个字符,使其不被解释为元字符。
    • 例如:echo \$1 each 中的 \$ 会让Bash将美元符号 $ 视为普通文本,而不是变量名。因此输出是字面量的 $1 each
  • 双引号 :会按字面解释文本,但其中的元字符(如 $)仍保留其特殊含义。
    • 例如:echo “$1 each” 中的 $1 会被解释为一个变量。如果变量 $1 未定义或为空,则输出仅为 each
  • 单引号 :会将所有内容都解释为字面字符,不进行任何特殊解释。
    • 例如:echo ‘$1 each’ 会直接输出 $1 each

输入输出重定向

输入输出重定向是一组用于重定向标准输入或标准输出的功能。

以下是几种重定向操作符:

  • 大于号 >:将命令的标准输出重定向到文件。如果文件不存在则创建,如果存在则覆盖其内容。
    • 例如:echo “内容” > file.txt
  • 双大于号 >>:将命令的标准输出追加到文件末尾,避免覆盖原有内容。
    • 例如:echo “新内容” >> file.txt
  • 2>:将错误信息重定向到文件。
    • 例如:command_not_found 2> error.log
  • 2>>:将错误信息追加到文件。
    • 例如:command_not_found 2>> error.log
  • 小于号 <:将文件内容作为标准输入传递给命令。
    • 例如:sort < input.txt

现在,让我们通过一些例子来实践。你可以先创建一个文件并写入文本:

echo “第一行” > example.txt

然后查看文件内容:

cat example.txt

接下来,尝试向文件追加另一行:

echo “第二行” >> example.txt

再次查看,可以看到文件包含了你添加的两行。

输入一个不存在的命令会产生错误:

garbage_command 2> error.txt

这个表达式捕获了错误信息并将其重定向到 error.txt 文件。

命令替换

当你希望用命令的输出结果来替换该命令本身时,可以使用命令替换。

有两种等效的表示方法:

  1. $(command)
  2. `command`(反引号)

假设你想将当前目录路径存储在一个名为 here 的变量中,你可以对 pwd 命令使用命令替换来捕获其输出:

here=$(pwd)

或者:

here=`pwd`

然后,输出该变量的值:

echo $here

这将显示当前目录的路径。

命令行参数

命令行参数是在命令行上为程序指定的参数。它们提供了一种向Shell脚本传递参数的方式。

Bash脚本的命令行参数按以下方式引用:

  • $0:脚本名称
  • $1:第一个参数
  • $2:第二个参数
  • … 以此类推

例如,如果你这样运行脚本:

./mybashscript.sh arg1 arg2

那么在脚本内部,$1 的值是 arg1$2 的值是 arg2

执行模式

Bash主要有两种操作模式:

  • 批处理模式:这是通常的模式,命令按顺序执行。
    • 例如:command1; command2command2 只有在 command1 完成后才会运行。
  • 并发模式:命令并行运行。在 command1 后面加上 & 运算符,会使 command1 在后台运行,同时将控制权交给前台的 command2
    • 例如:command1 & command2command1command2 会同时开始执行。

总结

本节课我们一起学习了Bash Shell的几项实用功能。我们了解了元字符是Shell中的特殊字符;引用用于控制Shell对特殊字符的解释方式;输入输出重定向可以改变命令的输入源和输出目标;命令替换允许我们将命令的输出作为值来使用;命令行参数使得我们可以向脚本传递信息;最后,并发模式让多个命令能够同时运行。掌握这些功能是成为高效Shell脚本用户的关键一步。

019:使用Cron调度作业 ⏰

在本节课中,我们将学习如何使用Cron工具在Linux和类Unix操作系统上自动调度和运行任务。这对于系统管理员、数据工程师或开发者来说,是一项非常有用的技能。


概述

Cron是一个强大的工具,允许你安排脚本或命令在特定时间自动执行。例如,你可以设置一个数据加载脚本每天午夜运行,或者一个备份脚本每周日凌晨2点运行。接下来,我们将了解Cron的核心组件、语法以及如何管理这些定时任务。


Cron的核心概念

Cron系统主要由以下几个部分组成:

  • Cron:这是运行调度作业的工具的总称。
  • Crond:这是一个守护进程或服务,它每分钟检查一次CronTab文件,并在预定时间提交相应的作业给Cron执行。
  • CronTab:这既是一个包含作业和调度数据的文件,也是一个用于编辑该文件的命令。

编辑Cron作业

要创建或编辑Cron作业,我们需要使用 crontab 命令。

在命令行中输入 crontab -e 会打开默认的文本编辑器(例如 nanovi)。在编辑器中,你可以指定新的调度时间和要执行的命令。

Cron作业的语法格式如下:

* * * * * command_to_execute

这五个星号位置分别代表:

  • 分钟 (0-59)
  • 小时 (0-23)
  • 月份中的日期 (1-31)
  • 月份 (1-12)
  • 星期几 (0-7,其中0和7都代表星期日)

每个位置必须填入一个数字,或者使用星号 *(这是一个通配符,表示“任何”值)。

命令可以是任何Shell命令,包括调用一个Shell脚本。

例如,以下语法表示在每个星期日的15点30分,将当前日期追加到文件 Sundays.txt 中:

30 15 * * 0 date >> Sundays.txt

一个CronTab编辑示例

上一节我们介绍了Cron的基本语法,本节中我们来看看一个具体的编辑示例。

输入 crontab -e 后,编辑器会打开。为了方便用户,文件中通常包含一些以 # 开头的注释行作为使用说明。

以下是一个CronTab文件内容的例子。为了提升可读性,可以将条目与表头对齐成列(额外的空格会被忽略):

# m h  dom mon dow   command
30 15 * * 0   date >> Sundays.txt
0 0 * * *     /home/user/scripts/load_data.sh
0 2 * * 0     /home/user/scripts/backup_data.sh

以下是这三个条目的解释:

  1. 第一行:在每个星期日的15:30,将当前日期追加到 Sundays.txt 文件。
  2. 第二行:在每天午夜(00:00),运行 load_data.sh 脚本。
  3. 第三行:在每个星期日的02:00,运行 backup_data.sh 脚本。

编辑完成后,按 Ctrl+X 退出编辑器,然后输入 Y 确认保存更改。这样,作业就进入生产状态,会按照设定时间自动执行。


查看和删除Cron作业

学会了如何创建Cron作业后,管理已有的作业同样重要。以下是查看和删除作业的方法。

运行 crontab -l 命令可以列出当前用户的所有Cron作业及其调度时间。

crontab -l

如果要删除某个作业,只需再次运行 crontab -e 打开编辑器,删除对应的任务行,然后保存并退出即可。


总结

本节课中,我们一起学习了如何使用Cron调度周期性任务。我们了解到,Cron作业可以通过 分钟 小时 日 月 星期 命令 的语法格式进行定义。使用 crontab -e 命令可以编辑作业列表,而 crontab -l 命令则可以列出Cron表中的所有作业。掌握这些技能,将帮助你自动化日常的系统管理或数据处理任务。

posted @ 2026-03-26 08:50  布客飞龙II  阅读(7)  评论(0)    收藏  举报