在命令行上键入命令时,基本上是告诉 shell 运行具有给定名称的可执行文件。在 Linux 中,这些可执行程序,如 ls , find , file 和其他命令,他们都位于你的系统上几个不同的目录中。存储在这些目录中的任何具有可执行权限的文件都可以从任何位置运行。持有可执行程序最常用的目录是 /bin , /sbin , /usr/sbin , /usr/local/bin 和 /usr/local/sbin 。
但是 shell 如何知道在什么目录搜索可执行程序的呢,或者 shell 搜索整个文件系统? 答案很简单。键入命令时, shell 将搜索用户 $PATH 变量中指定的所有目录,以查找该名称的可执行文件。
本文展示了如何将目录添加到Linux系统的$PATH中。
什么是 $PATH
该 $PATH 环境变量是一个冒号分隔的列表,告诉哪些目录搜索可执行文件的外壳。
要查看环境变量 $PATH ,可以使用 printenv 或 echo 命令:
echo $PATH
输出看起来像这样:
Output/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
如果您有两个同名的可执行文件,位于两个不同的目录中,则 shell 将运行 $PATH 中的第一个所在的目录的程序。
添加目录到您的 $PATH
在某些情况下,您可能希望在 $PATH 变量中添加其他目录。例如,某些程序可能安装在不同的位置,或者您可能希望为您的个人文档设置专用目录,但能够在不指定可执行文件的绝对路径的情况下运行它们。要做到这一点,您只需要将目录添加到您的 $PATH 。
假设您有一个位于主目录中的名为 bin 的目录,您可以在其中保存 shell 脚本。要将目录添加到您的 $PATH 类型:
export PATH=”$HOME/bin:$PATH”
该 export 命令将修改后的变量导出到 shell 子进程环境。
您现在可以通过键入可执行脚本名称来运行脚本,而无需指定可执行完整路径。
但是,此更改仅是临时的,仅在当前 shell 会话中有效。
要使更改成为永久更改,您需要在 shell 配置文件中定义 $PATH 变量。在大多数 Linux 发行版中,当您启动新会话时,将从以下文件中读取环境变量:
•全局 shell 特定配置文件,如 /etc/environment 和 /etc/profile 。如果要将新目录添加到所有的系统用户,请使用此文件 $PATH 。
•每用户 shell 特定的配置文件。例如,如果您正在使用 Bash ,则可以在 ~/.bashrc 文件中设置 $PATH 变量,如果您使用的是 Zsh ,则文件名为 ~/.zshrc 。
在这个例子中,我们将在 ~/.bashrc 文件中设置变量。使用文本编辑器打开文件,并在其末尾添加以下行:
nano ~/.bashrc
文件 〜/.bashrc
export PATH=”$HOME/bin:$PATH”
使用以下 source 命令保存文件并将新文件中的 $PATH 加载到当前 shell 会话中:
source ~/.bashrc
要确认目录已成功添加,请 $PATH 键入以下内容以打印您的值:
echo $PATH
结论
向用户或全局 $PATH 变量添加新目录非常简单。这让您无需键入可执行文件的完整路径就能执行存储在非标准位置的命令和脚本。
相同的说明适用于任何 Linux 发行版,包括 Ubuntu , CentOS , RHEL , Debian 和 Linux Mint 。
如果您有任何问题,请随时发表评论。
本文永久更新链接地址:https://www.linuxidc.com/Linux/2019-08/159846.htm