如何检查 Linux 中是否正在使用特定的 shell

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何确定 Linux 环境中当前正在使用的 shell。你将探索不同的方法来检查活动的 shell,包括使用 echo $SHELL 命令显示当前会话的 shell,检查 /etc/passwd 文件以验证用户的默认登录 shell,以及使用 ps 命令检查正在运行的进程以识别 shell 进程。

通过完成这些步骤,你将获得识别和理解 shell 环境的实用技能,这对于在 Linux 中进行有效的命令行交互和脚本编写至关重要。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") linux/SystemInformationandMonitoringGroup -.-> linux/ps("Process Displaying") linux/UserandGroupManagementGroup -.-> linux/env("Environment Managing") subgraph Lab Skills linux/echo -.-> lab-558763{{"如何检查 Linux 中是否正在使用特定的 shell"}} linux/cat -.-> lab-558763{{"如何检查 Linux 中是否正在使用特定的 shell"}} linux/grep -.-> lab-558763{{"如何检查 Linux 中是否正在使用特定的 shell"}} linux/ps -.-> lab-558763{{"如何检查 Linux 中是否正在使用特定的 shell"}} linux/env -.-> lab-558763{{"如何检查 Linux 中是否正在使用特定的 shell"}} end

使用 echo $SHELL 检查当前 shell

在这一步中,你将学习如何识别你在终端中当前使用的 shell。shell 是处理你输入命令的命令行解释器。不同的 shell 具有不同的特性和语法,尽管许多基本命令在它们之间的工作方式是相同的。

LabEx 环境默认使用 zsh 作为 shell。你可以通过检查 $SHELL 环境变量的值来验证这一点。环境变量是影响计算机上进程行为的动态值。$SHELL 变量专门存储用户默认 shell 的路径。

要显示 $SHELL 变量的值,请使用 echo 命令,后跟前缀为美元符号 ($) 的变量名。

在你的终端中输入以下命令并按回车键:

echo $SHELL

你应该会看到类似以下的输出,表明你当前使用的 shell 是 zsh

/usr/bin/zsh

这证实了终端当前正在运行 zsh shell,这是你 LabEx 环境的默认配置。了解你正在使用的 shell 很重要,因为在你学习 Linux 的过程中,一些高级特性或脚本可能特定于某个 shell。

点击 继续 进入下一步。

在 /etc/passwd 中验证用户 shell

在上一步中,你使用 echo $SHELL 查看了你当前使用的 shell。这是为你当前终端会话启动的 shell。然而,系统还会在一个配置文件中记录每个用户的 默认 登录 shell。

这个配置文件是 /etc/passwd,它包含了系统上所有用户的信息。/etc/passwd 中的每一行代表一个用户账户,并且被冒号 (:) 分隔成多个字段。每行的最后一个字段指定了用户的默认登录 shell。

要查看 /etc/passwd 的内容,你可以使用 cat 命令。由于我们只对 labex 用户的那一行感兴趣,我们可以将 catgrep 命令结合使用来过滤输出。grep 是一个用于在文件中搜索文本模式的强大工具。

在你的终端中输入以下命令并按回车键:

cat /etc/passwd | grep labex

让我们来分解一下这个命令:

  • cat /etc/passwd:此命令读取 /etc/passwd 文件的内容并将其打印到标准输出。
  • |:这是一个管道符号。它将左边命令 (cat /etc/passwd) 的输出作为输入传递给右边的命令 (grep labex)。
  • grep labex:此命令在接收到的输入中搜索包含字符串 "labex" 的行,并打印这些行。

你应该会看到类似以下的单行输出:

labex:x:5000:5000:LabEx user,,,:/home/labex:/usr/bin/zsh

这一行包含了关于 labex 用户的几条信息,由冒号分隔。这些字段(按顺序)分别是:

  1. 用户名 (labex)
  2. 密码(用 x 表示,实际的密码哈希出于安全考虑存储在其他地方)
  3. 用户 ID (UID) (5000)
  4. 组 ID (GID) (5000)
  5. 用户信息 (GECOS 字段) (LabEx user,,,)
  6. 主目录 (/home/labex)
  7. 默认登录 shell (/usr/bin/zsh)

最后一个字段 /usr/bin/zsh 证实了 labex 用户的默认登录 shell 确实是 zsh,这与你使用 echo $SHELL 看到的结果一致。

点击 继续 以继续。

使用 ps 检查 shell 进程

在前面的步骤中,你使用 echo $SHELL 识别了当前的 shell,并在 /etc/passwd 中验证了默认登录 shell。现在,让我们查看系统上正在运行的进程,以了解 shell 进程本身。

在 Linux 中,每个正在运行的程序都是一个进程。ps 命令(“process status”的缩写)用于查看当前正在运行的进程的信息。

要查看与你当前终端会话相关的进程,你可以使用带有 -f 选项的 ps 命令,该选项会提供完整格式的列表。

在你的终端中输入以下命令并按回车键:

ps -f

你应该会看到类似以下的输出:

UID          PID    PPID  C STIME TTY          TIME CMD
labex       XXXX    XXXX  0 HH:MM pts/0    00:00:00 zsh
labex       YYYY    XXXX  0 HH:MM pts/0    00:00:00 ps -f

让我们来看看这些列的含义:

  • UID:进程所有者的用户 ID (labex)。
  • PID:进程 ID,每个进程的唯一编号。
  • PPID:父进程 ID。这是启动此进程的进程的 PID。
  • C:CPU 利用率。
  • STIME:进程启动的时间。
  • TTY:与进程关联的终端 (pts/0 表示伪终端,就像你正在使用的这个)。
  • TIME:进程累积使用的 CPU 时间。
  • CMD:启动该进程的命令。

在输出中,你应该会看到一行 CMDzsh 的记录。这一行代表正在运行你当前终端会话的 zsh shell 进程。你还会看到 ps -f 命令本身的一行记录,因为在你执行它时,它也是一个正在运行的进程。

这一步向你展示了如何使用 ps 检查正在运行的进程,并确认你的 shell 确实作为系统上的一个进程在运行。

点击 继续 完成此实验。

总结

在这个实验中,你学习了如何检查你在 Linux 中当前使用的 shell。你首先使用 echo $SHELL 命令显示了当前终端会话中运行的 shell 的路径。这表明 LabEx 环境默认使用 zsh

然后,你探索了 /etc/passwd 文件,该文件存储了系统用户的信息,包括他们的默认登录 shell。通过查看该文件中你用户条目的最后一个字段,你可以验证登录时分配给你账户的 shell。这些方法提供了不同的方式来确定正在使用的 shell,无论是针对当前会话还是作为用户的默认设置。