Linux命令行入门

介绍

注意: 本教程中的交互式终端目前已禁用,因为我们正在改进我们的交互式学习体验。您仍然可以使用本教程学习命令行并练习Linux命令,但您需要使用您计算机上的终端或虚拟机。

今天,我们许多人熟悉具有图形用户界面(也称为 GUI)的计算机(台式机和笔记本电脑)、智能手机和平板电脑,使我们能够通过视觉体验导航应用程序、网络和文件(如文档和照片)。 Windows、macOS 和 Linux 操作系统分别提供各种桌面环境(例如文件夹和文件的图像)和下拉菜单,所有这些都提供对计算机程序、应用程序和我们自己媒体的访问。

尽管对于许多用户来说,GUI 可能是使用计算机的直观方式,但它们通常不会为我们提供对计算机的最大控制权,并且它们可能会阻止我们完全在计算机上拥有管理访问权限,包括安装、修改或删除软件或文件。此外,由于 GUI 主要是视觉化的,因此对于所有用户来说,它们通常不够易于访问。

在没有 GUI 的情况下导航您自己的个人计算机和远程云服务器的一种方法是通过基于文本的终端或命令行界面(CLI)。

终端界面存在于几乎所有的计算机操作系统上,终端仿真器也可以作为平板电脑和智能手机的应用程序使用。终端通过增加管理员访问权限、更大程度的环境定制能力和自动化流程的机会,为用户提供了更全面的对计算机的访问。它们还为用户提供了访问远程计算机(如云服务器)的能力。

本教程将为对终端环境尚不熟悉的用户提供通过浏览器中的嵌入式 Web 终端使用命令行界面的基础知识,您可以在下方启动。如果您已经对终端有一定了解,您可能更喜欢浏览我们的Linux 终端入门教程。完成本教程后,您应该能够理解如何在 Linux(或 macOS)计算机或服务器上使用终端。

理解终端窗口

当您首次获得新的计算机或智能手机的访问权限时,您可能希望打开它并熟悉如何使用,通过检查可用的应用程序并了解它们的位置,以便根据您的需求进行定制。您可以通过终端类似地熟悉计算机。

您通过点击上方的 启动交互式终端! 按钮在此浏览器窗口中启动的交互式终端,会在浏览器窗口底部显示一个白色矩形框:

如果您尚未启动终端,请立即使用本教程开头的按钮进行启动。

在您的交互式浏览器终端中,应该会有一个美元符号 $ 和一个闪烁的光标。这是您开始输入命令告诉终端要做什么的地方。

您启动的终端是一个 Ubuntu 20.04 终端。Ubuntu 是一种流行的 Linux 发行版,最初是基于 Unix 操作系统的。 macOS 操作系统也是基于 Unix 的。如果您正在使用 Linux 或 macOS 计算机阅读本教程,则应该在您的操作系统上有一个类似于我们将在本指南中使用的嵌入式终端的终端。

在许多这些 Unix(或 *nix 基于)操作系统中,提示符的末尾可能是一个 $ 符号或一个 # 符号,它们的含义如下:

  • $ 或美元符号 — 您以普通用户身份登录
  • # 或井号/散列符号 — 您以拥有提升权限的用户身份登录

# 环境中标记的用户也被称为 root 用户, 默认情况下被视为超级用户或管理员。

对于以下浏览器终端内的目的,您已经以普通用户登录,但您也通过sudo命令拥有管理员权限。由于这是一个临时终端,您无需担心您在终端中输入的内容,因为我们完成任务后将销毁所有内容。同样,对于云服务器,如果出现问题,可以销毁服务器并重新开始。

请注意,在本地计算机的终端上工作时最好更加谨慎,因为您可能以管理员身份在终端上进行的更改可能会对您正在使用的计算机造成永久性更改。

此时,在浏览器中启动终端后,您可以开始使用本地计算机在其中输入文本。您输入的文本将显示在闪烁的光标处。我们将在接下来的部分了解可以在此处输入的内容。

熟悉目录

我们将通过输入命令开始使用终端。命令是用户发出的指令,用于传达用户希望计算机执行的操作。您将在终端中键入您的命令,然后在准备好计算机执行给定命令时按下ENTERRETURN

让我们输入以下命令,然后按 ENTER 键。您也可以复制命令,或者通过单击下面代码块上方的相关链接,在启动的交互式终端中运行它。

  1. pwd

运行此命令后,您将收到以下输出:

Output
/home/sammy

命令 pwd 代表“present working directory”,它让您知道您目前位于当前文件系统中的位置。

在此示例中,您位于名为 /home/sammy 的目录(或文件夹)中,该目录代表名为 sammy 的用户。如果您以具有提升权限的用户 root 登录,则目录将被称为 /root。在个人计算机上,此目录可能称为拥有计算机的用户的名称。Sammy Shark 的计算机可能将 /sammy/sammy-shark/home/sammy 作为其主用户目录。

现在,此目录为空。让我们创建一个目录来存储我们将在本教程中创建的文件,我们可以将其命名为 files,例如。

为了做到这一点,我们将使用mkdir命令,它代表“录”。在输入该命令后,我们需要写入文件夹的名称,这将传递值给命令,以便命令能够执行创建此目录的操作。这个值(文件夹的名称)被称为参数,它是被命令所作用的输入。如果你熟悉自然语言的语法,你可以将参数看作是被命令的动词所作用的对象。

为了创建一个名为files的新目录,我们将写入以下内容,其中mkdir是命令,files是参数:

  1. mkdir files

运行此命令后,你将不会收到任何输出,只会得到一个带有闪烁光标的新行。有了这个新的终端提示符,你就准备好执行下一个命令了。

列出内容并了解权限

由于我们还没有收到关于新目录的具体反馈,我们将使用一个命令来了解当前工作目录中的内容。通过使用ls命令(表示“出”)来列出目录中的文件,您可以确认新目录确实存在:

  1. ls

您将收到确认 files 目录存在的输出:

Output
files

这为我们提供了关于当前工作目录中内容的一般信息。如果我们想要更多详细信息,可以运行带有所谓的标志的 ls 命令。在 Linux 命令中,标志 用连字符 - 和字母编写,传递额外的选项(和更多参数)给命令。在我们的示例中,我们将添加 -l 标志,它 —— 当与 ls 配对时 —— 表示我们想要使用命令的长列表格式选项。

让我们输入此命令和标志,就像这样:

  1. ls -l

按下 ENTER 键后,我们将在终端中收到以下输出:

Output
total 4 drwxr-xr-x 2 sammy sammy 4096 Nov 13 18:06 files

这里,有两行输出。第一行是指向为该目录分配的计算机内存块,第二行大多是指文件的用户权限。

为了获得稍微更易读的输出,我们还可以传递 -h--human-readable 标志,它会以人类可读的格式打印内存大小,如下所示。一般来说,一个连字符 - 表示单个字母选项,而两个连字符 -- 表示以文字形式写出的选项。请注意,有些选项可以同时使用这两种格式。我们可以通过将标志链接在一起来将多个选项构建到一个命令中,就像 -lh 中那样。

例如,下面的两个命令即使写法不同,也会产生相同的结果:

  1. ls -lh
  1. ls -l --human-readable

这两个命令都会返回以下输出,类似于上面的输出,但提供了更多关于内存块的上下文:

Output
total 4.0K drwxr-xr-x 2 sammy sammy 4.0K Nov 13 18:06 files

输出的第一行告诉我们,4K的计算机内存被分配给了该文件夹。输出的第二行有更多的细节,我们将更详细地介绍。我们将涵盖的所有信息的一般高级参考如下表所示。

File type Permissions Link count Owner Group File size Last modified date File name
d rwxr-xr-x 2 sammy sammy 4.0K Nov 13 18:06 files

您会注意到我们目录的名称files在输出的第二行末尾。这个名称表示输出行描述了/home/sammy用户目录中的哪个特定项目。如果我们在目录中有另一个文件,我们将有另一行输出,详细说明该文件。

在行的开头,有一个字符和破折号的列表。让我们分解每个字符的含义:

Character Description
d directory (or folder) — a type of file that can hold other files, useful for organizing a file system; if this were - instead, this would refer to a non-directory file
r read — permission to open and read a file, or list the contents of a directory
w write — permission to modify the content of a file; and to add, remove, rename files in a directory
x execute — permission to run a file that is a program, or to enter and access files within a directory

在字符串的前drwx个字符中,第一个字母d表示项目files是一个目录。如果这不是一个目录而是一个文件,那么这个字符串将以连字符开头,例如-rwx,其中第一个连字符表示一个非目录文件。接下来的三个字母rwx表示目录files的所有者的权限,意味着目录files可以被文件的所有者读取、写入和执行。如果其中任何一个字符被替换为连字符,那么表示该字符代表的权限所有者没有这种类型的权限。我们将在稍后讨论如何识别文件的所有者。

输出中的下一个三个字符是r-x,它们代表files目录的权限。在这种情况下,组具有读取和执行权限,但没有写入权限,因为w-替换了。我们将在稍后讨论如何识别组。

第一个字符串的最后三个字符r-x表示任何其他具有对该机器的访问权限的用户组的权限。在这种情况下,这些用户组也可以读取和执行,但不能写入。

输出中的数字2指的是指向该文件的链接数量。在Linux中,链接提供了一种创建快捷方式的方法,以帮助用户浏览文件系统。当您创建此文件时,Linux会进行一些后台工作,创建文件的绝对链接和自引用链接,以允许用户沿着相对路径导航。我们将在下一部分讨论绝对路径和相对路径。

在数字2之后,单词sammy被显示了两次。输出的这部分提供了与files目录关联的所有者和组的信息。此行中sammy的第一个实例指的是目录的所有者,其权限我们之前看到是rwxsammy用户是所有者,因为我们是以sammy用户创建files目录,并且是文件的当前所有者。尽管sammy用户是我们当前环境中唯一的用户,但类Unix操作系统通常有多个用户,因此了解哪个用户拥有文件的所有权是有用的。

sammy的第二个实例是指具有访问files目录权限的组,其权限我们之前看到是r-x。在这种情况下,组名与所有者用户名sammy相同。在实际环境中,操作系统上可能有其他具有访问该目录权限的组,例如staff或类似admin的用户名。

该输出行的其余细节是分配给机器上目录的内存为4.0K,以及目录上次修改的日期(到目前为止,我们刚刚创建了它)。

通过对文件系统和权限有了更深入的了解,我们可以继续学习如何在Linux终端中导航文件系统。

到目前为止,我们已经学会了如何确定我们在文件系统中的位置,如何创建新目录,如何列出文件,以及如何确定权限。

接下来让我们学习如何在文件系统中移动。我们已经创建了一个新目录,但我们仍然在主目录/home/sammy中。为了进入我们创建的/home/sammy/files目录,我们将使用cd命令,并将要进入的目录名称作为参数传递。命令cd代表“change directory”,我们将构造如下:

  1. cd files

同样,您将不会收到除了一个带有闪烁光标的新行之外的任何输出,但我们可以使用之前使用过的pwd命令来检查我们是否在/home/sammy/files目录中:

  1. pwd

您将收到以下输出,确认您所在的位置:

Output
/home/sammy/files

这证实你正在/home/sammy用户目录下的/home/sammy/files目录中。这种语法看起来对你来说熟悉吗?它可能让你想起了网站的URL,因为它也有正斜杠,事实上,网站也是在服务器上的目录中构建的。

让我们移动到服务器的主目录。无论我们在文件系统的哪个位置,我们都可以使用命令cd /来移动到主目录:

  1. cd /

为了确认我们已经移动并了解这个目录中有什么,让我们运行我们的列表命令:

  1. ls

我们将收到以下输出:

Output
bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run s sbin srv sys tmp usr var

里面有很多文件!/目录是Linux服务器的主目录,被称为“根”目录。请注意,根目录与默认的“root”用户不同。你可以将/目录看作是Linux机器的主要动脉,因为它包含了运行计算机所需的所有文件夹。例如,sys目录保存了Linux内核和系统信息虚拟文件系统。如果你想了解每个目录的更多信息,可以访问Linux Foundation文档

你还会注意到我们已经进入过的一个目录,即/home用户文件夹。从/目录,我们可以返回到/home,然后返回到files,或者可以直接通过cd键入绝对路径返回到那个文件夹:

  1. cd /home/sammy/files

现在,如果您运行pwd,您将收到/home/sammy/files作为输出。

A file path is the representation of where a file or directory is located on your computer or server. You can call a path to a file or directory in either a relative or absolute way. A relative path would be when we move to a location relative to our current working directory, like we did when we were already in /home/sammy/ and then moved into files/. An absolute path is when we call the direct line to a location, as we did above with /home/sammy/files, showing that we started in the / directory, called the /home/sammy/ user directory and then the nested files/ directory.

此外,Linux利用点符号来帮助用户通过相对路径进行导航。单个.代表您当前所在的目录,双..代表父目录。因此,从我们当前所在的位置(/home/sammy/files),我们可以使用两个点返回到父/home/sammy用户目录,如下所示:

  1. cd ..

如果您运行pwd,您将收到/home/sammy作为输出,如果您运行ls,您将收到files作为输出。

另一个重要的符号要熟悉的是~,它代表您机器的主目录。在这里,我们的主目录称为/home/sammy,用于sammy用户,但在本地机器上,它可能是您自己的名字,如sammy-shark/

您可以在您的机器的任何地方键入以下内容并返回到这个主目录:

  1. cd ~

在这一点上,请随意使用您学到的命令在文件系统中进行导航。在下一节中,我们将开始处理文本文件。

创建和修改文本文件

现在我们已经对Linux文件系统有了一定的了解,并且知道如何在其中进行操作,让我们开始创建新文件并学习如何在命令行中操作文本。

首先确保我们位于/home/sammy用户文件夹的files/目录中,我们可以通过验证pwd或者在绝对路径上更改目录来做到这一点:

  1. cd /home/sammy/files

现在,我们将创建一个新的文本文件。我们将创建一个.txt文件,这是一种可以在各种操作系统中阅读的标准文件。与.doc文件不同,.txt文件由未格式化的文本组成。未格式化的文本,包括.txt文件中的文本,在命令行上可以直接使用,因此在以编程方式处理文本数据时(如自动化文本分析、从文本中提取信息等)可以使用它们。

我们将首先使用touch命令,它可以创建一个新文件或修改现有文件。要使用它,您可以使用touch命令并将要创建的文本文件的名称作为参数传递,如下所示。

  1. touch ocean.txt

按下ENTER后,您将收到一个新的命令提示符行,您可以列出files/的当前内容以确保它已被创建。

  1. ls
Output
ocean.txt

到目前为止,我们已经创建了一个名为ocean.txt的文件,该文件在创建时不包含任何文本。

如果我们想要创建一个已初始化文本的文本文件,我们可以使用echo命令,该命令用于在Linux中显示文本字符串。

我们可以直接在命令行上使用echo来让界面重复我们的输入。传统的第一个程序,”Hello, World!“,可以用echo来写成:

  1. echo Hello, World!
Output
Hello, World!

以奥维德的《变形记》中的回声(Echo)命名,echo命令会返回我们请求的内容。在这种情况下,它会回显“Hello, World!”然而,echo命令本身并不允许我们将文本的值存储到文本文件中。为了做到这一点,我们需要输入以下命令:

  1. echo "Sammy the Shark" > sammy.txt

上述命令使用echo,然后是我们想要添加到文件中的文本,用引号括起来,然后是重定向运算符>,最后是我们新文本文件的名称sammy.txt

我们可以使用ls再次检查我们的新文件是否存在。

  1. ls
Output
ocean.txt sammy.txt

现在我们的/home/sammy/files用户文件夹中有两个文本文件。接下来,我们可以确认文件sammy.txt确实包含了我们要求终端回显到其中的文本。我们可以使用cat命令来做到这一点。cat命令是concatenate的缩写,非常适用于处理文件。它的功能之一是显示文件的内容。

  1. cat sammy.txt

一旦我们运行该命令,我们将收到以下输出:

Output
Sammy the Shark

如果我们对空文件ocean.txt运行cat,我们将收到空输出,因为该文件中没有文本。我们也可以使用echo向这个现有文件添加文本。让我们向文件中添加一句Zora Neale Hurston的引文。

  1. echo "Some people could look at a mud puddle and see an ocean with ships." > ocean.txt

现在,如果我们在文件上运行cat,我们将收到刚刚输入的文本的输出。

  1. cat ocean.txt
Output
Some people could look at a mud puddle and see an ocean with ships.

到目前为止,我们已经创建了文本文件并向这些文件添加了文本,但我们还没有修改这些文件。如果我们想要这样做,我们可以使用命令行文本编辑器。有几种流行的选择,包括Vim和Emacs。对于我们的目的,我们将使用nano,这是一个较不复杂的CLI文本编辑器程序,我们可以用它来开始我们的探索。

nano文本编辑器可以通过nano命令调用。如果我们想要编辑现有的sammy.txt文件,我们可以通过将文件名作为参数传递来执行此操作。

  1. nano sammy.txt

文件将在您的终端上打开:

sammy.txt
Sammy the Shark

使用键盘的箭头键,将光标移动到行的末尾,并开始以Sammy的视角输入几行。

注意:在命令行上,您不能使用鼠标或其他指针来导航,无论是在文件系统中还是在文件内部。您需要使用键盘,特别是箭头键,来在文本文件中移动。

当您完成文件时,它可能会读取类似于以下内容:

sammy.txt
Sammy the Shark

Hello, I am Sammy.
I am studying computer science.
Nice to meet you!

现在,您的文件包含您想要的文本,我们现在可以保存并关闭文件。您可能会注意到在终端窗口底部有一些指导:

^G Get Help   ^O WriteOut   ^R Read File  ^Y Prev Page  ^K Cut Text   ^C Cur Pos
^X Exit       ^J Justify    ^W Where Is   ^V Next Page  ^U UnCut Text ^T To Spell

因为我们目前已经完成了对这个文件的工作,我们想要退出这个文件。在这里,^符号指的是您键盘上的ControlCTRL键,上面的输出告诉我们,我们需要将该键与X组合在一起(使用小写,不要按SHIFT键)以退出文件。让我们同时按下这两个键:

CTRL x

以上内容通常在技术文档中内联写为CTRL + XCtrl+x

在此时,您将收到以下提示:

Output
Save modified buffer? Y Yes N No ^C Cancel

为了保存它,我们将按下字母y以确认:

y

您将收到以下反馈:

Output
File Name to Write: sammy.txt

还有其他选项,包括使用CTRL + C取消,但如果您确定关闭文件,您可以在这一点上按ENTER来保存文件并退出。

假设我们想要创建一些DigitalOcean大学的学生文件。让我们在files/中创建一个名为students的新目录:

  1. mkdir students

接下来,让我们将sammy.txt移动到新的students/目录中。mv命令,代表move,将允许我们改变文件的位置。该命令构建方式是将我们要移动的文件作为第一个参数,新位置作为第二个参数。以下两种执行方式将产生相同的结果。

  1. mv sammy.txt students
  1. mv sammy.txt students/sammy.txt

这个后选项在我们想要更改文件名时会很有用,比如 mv sammy.txt students/sammy-the-shark.txt

现在,如果我们运行 ls 命令,我们会看到当前目录(files/)中只有 ocean.txtstudents/ 目录。让我们进入 students/ 文件夹。

  1. cd students

为了为其他学生准备一个模板,我们可以复制 sammy.txt 文件以创建更多文件。要做到这一点,我们可以使用 cp 命令,它代表着copy。这个命令的工作方式类似于 mv 命令,以原始文件作为第一个参数,以新文件作为第二个参数。我们将为 Alex the Leafy Seadragon 创建一个文件:

  1. cp sammy.txt alex.txt

现在,我们可以打开 alex.txt 并检查它。

  1. nano alex.txt

到目前为止,alex.txt 看起来与 sammy.txt 完全相同。通过替换一些词语,我们可以修改此文件,使其读起来像下面这样。请注意,您可以使用 CTRL + K 来删除整行。

alex.txt
Alex the Leafy Seadragon

Hello, I am Alex.
I am studying oceanography.
Nice to meet you!

您可以按下 CTRL + X 然后 y 然后 ENTER 来保存并关闭文件。

如果您想要更多练习文本文件,请考虑为 Jamie the Mantis Shrimp、Jesse the Octopus、Drew the Squid 或 Taylor the Yellowfin Tuna 创建文件。

一旦您对创建、编辑、复制和移动文本文件感到熟悉,我们可以继续下一节。

自动完成和历史记录

许多版本的命令行,包括嵌入在本教程中的交互式终端,都允许您在使用过程中自动完成和重复使用命令。这样可以帮助您更快地移动,因为它节省了输入时间。

尝试输入cat以及您一直在处理的文本文件的前几个字母,例如cat sa。在您输入完整的sammy.txt文件名之前,按下TAB键。这应该会自动完成完整的文件名,以便您的终端提示显示如下:

  1. cat sammy.txt

现在,如果您按ENTER,终端应该会将文件内容返回到命令行。

另一个快捷键是按下UP箭头键,这将让您循环浏览您最近运行的命令。在具有闪烁光标的新行上,按几次UP箭头键,以便快速访问以前的命令。

如果您需要复制您在终端中执行的所有命令,还可以使用名为history的命令召唤此会话的整个历史记录:

  1. history

根据您的练习程度,您应该会收到30行或更多行的命令,以以下输出开头:

Output
1 pwd 2 mkdir files 3 ls 4 ls -l ...

熟悉这些快捷方式将有助于您在逐渐熟练使用命令行界面时提供支持。

从网络中获取文件

在与互联网连接的命令行界面上工作最令人兴奋的一个方面是,您可以访问网络上的所有资源,并可以以自动化的方式对其进行操作。通过终端,您还可以直接访问您拥有凭据的云服务器,管理和编排云基础设施,构建自己的网络应用程序等等。目前,由于我们已经学会如何在终端上处理文本文件,我们将介绍如何从网络下载一个文本文件,以便我们正在使用的计算机可以访问该文本文件。

让我们返回到 files/ 目录:

  1. cd /home/sammy/files

从这里,我们将使用 curl 命令将数据从网络传输到我们在浏览器上的个人交互式终端。命令 curl 代表 客户端(网址)URL

我们已经在云服务器上上传了《海底两万里》中的一小段文字。我们将该文件的URL传递给 curl 命令,如下所示。

  1. curl https://assets.digitalocean.com/articles/command-line-intro/verne_twenty-thousand-leagues.txt

一旦我们按下 ENTER,我们将在终端上收到段落的文本(如下摘录)

Output
"You like the sea, Captain?" "Yes; I love it! The sea is everything. It covers seven tenths of the terrestrial globe. ... "Captain Nemo," said I to my host, who had just thrown himself on one of the divans, "this is a library which would do honor to more than one of the continental palaces, and I am absolutely astounded when I consider that it can follow you to the bottom of the seas."

虽然在我们的终端窗口上显示文本很有趣,但我们没有该文件可用,我们只是传输了数据,但没有存储它。(您可以通过运行ls来验证文件是否不存在)。

为了将文本保存到文件中,我们需要使用curl命令加上-O标志运行,这使我们能够将文本输出到文件中,以远程文件的相同名称作为我们的本地副本。

  1. curl -O https://assets.digitalocean.com/articles/command-line-intro/verne_twenty-thousand-leagues.txt

您将从终端收到文件已下载的反馈。

Output
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 2671 100 2671 0 0 68487 0 --:--:-- --:--:-- --:--:-- 68487

如果您想使用特定的替代文件名称,您可以使用-o标志,并将新文件的名称作为参数传递(在本例中,jules.txt)。

  1. curl -o jules.txt https://assets.digitalocean.com/articles/command-line-intro/verne_twenty-thousand-leagues.txt

现在我们可以像处理任何其他文本文件一样处理此文件。尝试使用cat或使用nano进行编辑。

在接下来的部分中,我们将清理一些文件并退出我们的终端。

删除文件和终止命令

与任何其他计算机一样,我们有时需要删除不再相关的文件和文件夹,并退出我们正在使用的程序。

假设我们认识的DigitalOcean大学的学生已经毕业,我们需要清理他们的文件和相关文件夹。确保您在students/目录中:

  1. cd /home/sammy/files/students

如果你运行ls,你的文件夹可能有一些文件,如下所示:

Output
alex.txt drew.txt jamie.txt jesse.txt sammy.txt taylor.txt

我们可以使用rm命令来移除单个文件,remove的缩写。我们需要将要移除的文件作为参数传递。

警告:请注意,一旦删除文件,就无法撤销。在按下ENTER之前,请确保你想要删除该文件。

  1. rm sammy.txt

现在,如果我们运行ls,我们会注意到sammy.txt不再在文件夹中:

Output
alex.txt drew.txt jamie.txt jesse.txt taylor.txt

现在,我们知道可以使用rm移除单个文件,但如果我们想要移除整个students/目录及其所有内容,这并不是很高效。

用于删除目录的命令称为rmdir,即remove directory。让我们切换到files的父文件夹,这样我们就可以从那里操作students/目录(我们无法删除我们当前所在的文件夹)。

  1. cd ..

/home/sammy/用户目录,我们可以对students运行rmdir

  1. rmdir students

然而,这不起作用,因为我们收到以下反馈:

Output
rmdir: failed to remove 'students': Directory not empty

命令不起作用,因为rmdir只能用于空目录,而students目录仍然有文件。(在这里,你可以创建一个新的空文件夹,并尝试在其上运行rmdir。空文件夹可以使用rmdir删除。)

要删除还有文件的目录,我们需要尝试另一种选项。在计算机科学中,递归通常用于迭代自引用;因此,我们可以调用主项目及其所有依赖项。使用rm命令,我们可以递归删除主目录students及其所有内容依赖项。我们将使用-r标志,它代表r递归,并将文件夹students作为参数传递。

  1. rm -r students

此时,如果我们运行ls,我们会注意到students/不再存在于当前目录中,它所包含的所有文件也不可用,因为它们都已被删除。

当您完成终端会话,尤其是当您在远程服务器上工作时,可以使用exit命令退出终端。一旦您对本次会话中取得的成果感到满意(因为您将无法恢复它),您可以输入以下内容,然后按ENTER键离开终端。

  1. exit

在我们的交互式终端上,我们将收到以下输出,确认我们的会话已结束。

Output
Session ended

完成此会话后,您可以刷新此页面,然后启动一个新终端以尝试其他命令,或者创建一个新的文件系统进行探索。

结论

恭喜!您现在已经熟悉了终端界面,并且正在向着在计算机和服务器上做更多事情的方向迈进。

要继续学习,您可以参加我们的云计算简介课程,了解如何设置和管理远程服务器。

Source:
https://www.digitalocean.com/community/tutorials/a-linux-command-line-primer