如何定位不在 PATH 中的可执行文件

LinuxLinuxBeginner
立即练习

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

简介

本教程将指导你了解 Linux PATH 变量,在 PATH 之外查找和运行可执行文件,以及配置和排查 PATH 变量故障。学习结束时,你将更好地掌握如何在 Linux 系统上有效地管理和运行可执行文件。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux/FileandDirectoryManagementGroup -.-> linux/which("Command Locating") linux/FileandDirectoryManagementGroup -.-> linux/whereis("File/Command Finding") linux/UserandGroupManagementGroup -.-> linux/env("Environment Managing") linux/UserandGroupManagementGroup -.-> linux/set("Shell Setting") linux/UserandGroupManagementGroup -.-> linux/export("Variable Exporting") linux/UserandGroupManagementGroup -.-> linux/unset("Variable Unsetting") subgraph Lab Skills linux/which -.-> lab-417379{{"如何定位不在 PATH 中的可执行文件"}} linux/whereis -.-> lab-417379{{"如何定位不在 PATH 中的可执行文件"}} linux/env -.-> lab-417379{{"如何定位不在 PATH 中的可执行文件"}} linux/set -.-> lab-417379{{"如何定位不在 PATH 中的可执行文件"}} linux/export -.-> lab-417379{{"如何定位不在 PATH 中的可执行文件"}} linux/unset -.-> lab-417379{{"如何定位不在 PATH 中的可执行文件"}} end

理解 Linux PATH 变量

Linux 中的 PATH 变量是一个环境变量,用于指定 shell 应在其中搜索可执行文件的目录。当你在终端中运行命令时,shell 会在 PATH 变量指定的目录中查找与该命令对应的可执行文件。

PATH 变量是一个由冒号分隔的目录列表。例如,Ubuntu 22.04 上的默认 PATH 变量可能如下所示:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

这意味着当你运行命令时,shell 将按以下顺序在以下目录中搜索可执行文件:

  1. /usr/local/sbin
  2. /usr/local/bin
  3. /usr/sbin
  4. /usr/bin
  5. /sbin
  6. /bin
  7. /usr/games
  8. /usr/local/games
  9. /snap/bin

PATH 变量是 Linux 系统的重要组成部分,因为它允许你运行可执行文件而无需指定文件的完整路径。例如,如果你在 /home/user/scripts 目录中有一个名为 my_script.sh 的脚本,只要 /home/user/scripts 目录包含在 PATH 变量中,你就可以在终端中输入 my_script.sh 来运行它。

以下是在 Ubuntu 22.04 中查看和修改 PATH 变量的示例:

## 查看当前 PATH 变量
echo $PATH

## 将新目录添加到 PATH 变量
export PATH=$PATH:/home/user/scripts

通过理解 Linux PATH 变量及其工作原理,你可以更有效地在系统上管理和运行可执行文件。

在 PATH 之外查找和运行可执行文件

虽然使用 PATH 变量是运行可执行文件的便捷方式,但有时你可能需要运行一个不在 PATH 变量指定目录中的可执行文件。在这种情况下,你可以使用 whichwhereis 命令来查找可执行文件,然后使用完整路径运行它。

which 命令会在 PATH 变量指定的目录中搜索可执行文件,如果找到则返回该文件的完整路径。例如,要查找 ls 命令的位置,你可以运行:

which ls

这将输出 ls 可执行文件的完整路径,通常是 /usr/bin/ls

whereis 命令与 which 类似,但它会在更广泛的目录中搜索可执行文件,包括系统目录和手册页。例如,要查找 gcc 编译器的位置,你可以运行:

whereis gcc

这将输出 gcc 可执行文件的完整路径,以及任何相关文件(如手册页)的位置。

找到可执行文件后,你可以使用完整路径运行它。例如,要从 /usr/bin 目录运行 ls 命令,你可以使用以下命令:

/usr/bin/ls

这将像不使用完整路径运行 ls 命令一样运行它,但即使该可执行文件不在 PATH 变量指定的目录中,也能运行它。

通过了解如何在 PATH 之外查找和运行可执行文件,你可以更有效地管理和使用 Linux 系统上可用的各种工具和实用程序。

配置和排查 PATH 变量故障

配置 PATH 变量对于 Linux 用户和管理员来说是一项重要任务。你可能需要向 PATH 中添加新目录、移除目录,或者在找不到命令时排查问题。

要向 PATH 中添加新目录,可以使用 export 命令。例如,要将 /home/user/scripts 目录添加到 PATH 中:

export PATH=$PATH:/home/user/scripts

这会将该目录临时添加到当前会话的 PATH 中。要使更改永久生效,可以将 export 命令添加到 shell 的启动文件中,比如 ~/.bashrc~/.bash_profile

要从 PATH 中移除一个目录,可以使用带有 -d 选项的 export 命令。例如,要从 PATH 中移除 /usr/local/games 目录:

export PATH=$(echo $PATH | tr ":" "\n" | grep -v "/usr/local/games" | tr "\n" ":")

此命令使用了一系列 shell 工具来从 PATH 中移除指定目录。

如果你在尝试运行命令时遇到 “command not found”(命令未找到)错误,这可能是由于 PATH 变量存在问题。你可以使用 whichwhereis 命令来排查问题。例如:

which my_command

如果 which 命令没有返回路径,这意味着该命令不在 PATH 中。然后你可以使用 whereis 命令来搜索该命令:

whereis my_command

如果 whereis 命令返回了一个路径,你可以尝试使用完整路径运行该命令:

/path/to/my_command

通过了解如何配置和排查 PATH 变量故障,你可以更有效地管理和使用 Linux 系统上的各种工具和实用程序。

总结

PATH 变量是 Linux 系统的关键部分,它使你无需指定可执行文件的完整路径就能运行它们。然而,有时你可能需要运行一个不在 PATH 变量指定目录中的可执行文件。在这种情况下,你可以使用 “which” 和 “whereis” 命令来找到该可执行文件,然后使用完整路径运行它。通过理解 PATH 变量以及如何处理其之外的可执行文件,你将能够在 Linux 系统上更高效地管理和运行程序。