练习 - 试用 Bash

已完成

在你自己的 Linux 计算机上,你可以本地运行 Bash 命令。 如果你有权访问 Linux 服务器,可以远程登录到服务器并在其中运行 Bash 命令。 但没有人愿意在实时生产系统上进行试验,特别是在入职 Northwind 的第一天。

在本单元中,你将使用右侧的 Azure Cloud Shell 作为 Linux 终端。 Azure Cloud Shell 是可以通过 Azure 门户或 https://shell.azure.com 访问的 Shell。 无需在电脑或笔记本电脑上安装任何内容即可使用。

请熟悉 Cloud Shell

首先,使用我们所学的 Bash 命令了解一下 Cloud Shell 中的内容。

  1. 使用 ls 命令列出当前目录中的所有文件和子目录:

    ls
    
  2. 应看到与以下内容类似的输出:

    yourname@Azure:~$ ls
    clouddrive
    

    clouddrive 是当前目录的子目录。 它是你使用自己帐户中的 Cloud Shell 时所保存的已装载文件共享。 现在,你在 Microsoft Learn 沙盒中使用它。

  3. 等等,当前目录是什么? 让我们使用 pwd 命令来了解一下。pwd 表示“print working directory”。它会输出你目前所在目录的长格式路径。

    pwd
    
  4. 应该会看到如下输出:

    yourname@Azure:~$ pwd
    /home/yourname
    

    此输出意味着你位于 Linux 文件系统根目录下 home 目录的 yourname 目录中。

  5. 当前目录中的内容似乎不多。 接下来使用 Bash 标志打印出所有隐藏的文件和目录,以便仔细检查其是否正确。

    ls -a
    
  6. 哇! 该输出所显示的此目录中的内容比我们最初预想的要多得多。

    yourname@Azure:~$ ls -a
    .  ..  .azure  .bash_history  .bash_logout  .bashrc  clouddrive  .profile  .tmux.conf  .viminfo
    
  7. 这些文件和子目录是什么? 一些是用于支持 Cloud Shell 运行的后台文件。 接下来讨论一下其余部分。

    • . 指的是当前目录,.. 指的是父目录。 无论位于哪个目录,如果你打印出所有隐藏的文件和目录,你就会看到打印出的 ...
    • .bash_history 是特殊的 Bash 文件,其中存储了在 shell 中输入的所有命令。 Bash 保存命令历史记录,稍后我们将会用到这些记录。
    • .bash_logout 是另一种特殊的 Bash 文件,每次登录 shell 存在时都会读取并运行该文件。 Linux 超级用户可以对其进行修改,以便自定义环境。
    • .bashrc 是重要的 Bash 配置文件,每次启动新 shell 时都会运行该文件。 如果决定打开此文件查看,请谨慎进行更改,因为可能会产生意想不到的后果。

调用历史记录和自动完成命令

输入类似此命令的复杂命令时,很容易犯错误:

ls -a .azure/commands/202?*.log

幸运的是,Bash 提供了多项帮助功能。

调用之前的命令

  1. 尝试输入以下包含打字错误的命令203?而不是 202?)的此命令:

    ls -a .azure/commands/203?*.log
    
  2. 应看到以下输出,该输出告知不存在与该模式匹配的任何文件:

    ls: cannot access '.azure/commands/203?*.log': No such file or directory
    
  3. 可以使用“向上箭头”键和“向下箭头”键调用之前输入的命令,而不是为更正错误而再次输入所有内容。 尝试使用“向上箭头”键调回错误命令。 然后,使用“向左箭头”键,再将末尾的 3 替换为 2 以更正错误。 再次选择“Enter”,提交已更正的命令。

    如果在一行中多次使用“向上箭头”键,则会多次上移到前面的命令。 使用“向下箭头”键可移动到后面的命令。

  4. 现在应看到类似以下输出的内容。 它告知命令已正确运行并列出了与给定模式相匹配的文件。

    .azure/commands/2020-01-29.21-56-35.login.103.log
    .azure/commands/2020-01-29.21-56-38.account_set.112.log
    

自动完成

假设要读取刚查找到的文件之一的内容。 可以使用 cat(“catenate”的缩写)命令将文件内容打印到屏幕。

  1. 若要使用此命令,可以使用完整的文件名,如下所示:

    cat .azure/commands/2020-01-29.21-56-35.login.103.log
    
  2. 但这需要输入很多内容,而且非常容易出错。 可以改用 Bash 的基本自动完成来完成大部分此类工作。 尝试键入以下内容:

    cat .a
    

    然后选择“Tab”键。 发生什么情况?

  3. 应会看到字词“azure/”的其余部分显示在命令中:

    cat .azure/
    

    继续键入字词的开头部分,并使用“Tab”以自动完成。 请记住,如果不明确,Bash 将不会填充任何内容。 可以选择“Tab”两次,使 Bash 打印出给定路径中与已键入的字母相匹配的所有文件和目录。

  4. 重复尝试,直到转到命令目录中的 .log 文件。 然后选择“Enter”,使用 cat 命令将其内容打印到屏幕。 它应如下所示:

    CMD-LOG-LINE-BEGIN 103 | 2020-01-29 21:56:35,426 | INFO | az_command_data_logger | command args: login --identity
    CMD-LOG-LINE-BEGIN 103 | 2020-01-29 21:56:37,604 | INFO | az_command_data_logger | exit code: 0
    

    请记住,如果键入了错误字母,Bash 将无法正确推测出你想要键入的字母。

使用 man

我们刚使用了 cat 命令,但你对它还不太了解。 练习使用 man 以获得有关 cat 命令的详细信息。

  1. 输入以下命令,详细了解什么是 cat 及其用法:

    man cat
    

    就是这样,你已在 shell 中输入了“man cat”。 Bash 命令既晦涩又有趣!

  2. 应该会看到如下输出:

    CAT(1)                                       User Commands                                       CAT(1)
    
    NAME
           cat - concatenate files and print on the standard output
    
    SYNOPSIS
           cat [OPTION]... [FILE]...
    
    DESCRIPTION
           Concatenate FILE(s) to standard output.
    
           With no FILE, or when FILE is -, read standard input.
    
           -A, --show-all
                  equivalent to -vET
    
           -b, --number-nonblank
                  number nonempty output lines, overrides -n
    
           -e     equivalent to -vE
    
    ...
    
  3. 使用向上和向下箭头浏览手册页,然后输入 q 即可退出。

更改目录

接下来再练习一个基本的 Bash 命令:cd

使用 shell 时,你始终位于目录中,目录就像电脑或 Mac 中的文件夹。 若要更改文件夹,可以使用 cd (change directory) 命令。

这很简单,但还是要练习一下。

  1. 首先,输入此命令以确保你位于正确位置:

    cd ~
    

    如果你不在 shell 的特殊 home 目录中,此命令会将你移回到该目录。

  2. 再次使用 pwd 命令进行检查:

    pwd
    
  3. 应该会看到如下输出:

    /home/yourname
    

    ~ 是 Bash 中另一种引用此 home 目录的特殊字符。 无论你在 shell 中的哪个位置,都可以使用 ~ 引用 /home/yourname 位置。

  4. 接下来,转到保存日志文件的目录(我们之前所在位置):

    cd .azure/commands/
    

    可以自行输入完整命令,也可以使用“Tab”来自动完成。

    现在,应看到输入命令的行发生了变化,显示了你在 shell 中的位置:

    yourname@Azure:~/.azure/commands$
    
  5. 尝试使用特殊 .. 语法向上移动一个目录:

    cd ..
    

    现在,你应在目录结构中上移了一个级别,命令行应如下所示:

    yourname@Azure:~/.azure$
    

做得不错! 你已迈出了成为 Bash 专家的第一步。 让我们继续学习。

知识检查

1.

如果输入了 cd . 作为 Bash 命令,你将切换到哪个目录?