-1 linux bash terminal linux-mint
好的,首先,我是 Linux 新手,我正在使用 Linux Mint。
我了解到当我想向我的PATH(特别是我的主目录)添加更多目录时,我需要一个看起来像 的 Bash 命令PATH=$PATH:~,对吗?
问题是我为什么要放在$PATH那里?它代表系统路径,对吗?如果我只输入它会起作用PATH=~吗?我的意思是我只想将我的主目录添加到现有PATH目录中。
在 Unix 中,某些环境变量$PATH是特殊的,因为它们是项目列表,而不仅仅是单个项目。对于这些类型的列表,冒号 ( :) 分隔列表中的项目。
因为$PATH如果您只是打印它,您就可以看到这一点:
$ printenv PATH
/sbin:/bin:/usr/sbin:/usr/bin
Run Code Online (Sandbox Code Playgroud)
如果您想为此添加其他项目,则必须包括上一个列表和新项目。当你说PATH=$PATH:<new item>.
$ PATH=$PATH:/path/to/some/dir
$ printenv PATH
/sbin:/bin:/usr/sbin:/usr/bin:/path/to/some/dir
Run Code Online (Sandbox Code Playgroud)
请记住,这些更改仅在您运行它们的 shell 中是本地的。如果您希望您的更改$PATH在重新启动之间保持不变,或显示在您的 shell 的其他实例中,您需要将它们添加到配置文件中,以便将它们设置为默认值的一部分。
通常对于用户的,这是你该怎么做才能将这些文件是什么~/.bashrc&~/.bash_profile:
export PATH=$PATH:$HOME/bin:$HOME/somedir
Run Code Online (Sandbox Code Playgroud)
添加这样的一行将修改您的$PATH.
$PATH用法如果您只是希望能够运行不在您的脚本和可执行文件中,则$PATH可以通过使用此方法而不是添加到$PATH.
这是一个场景,假设我们有一个这样的可执行文件:
$ ls -l helloexec.bash
-rwxr-xr-x 1 user1 user1 31 Aug 12 07:45 helloexec.bash
Run Code Online (Sandbox Code Playgroud)
但它不在,$PATH所以我们不能运行它:
$ helloexec.bash
bash: helloexec.bash: command not found...
Run Code Online (Sandbox Code Playgroud)
所以你在想,哦,我必须把它添加到我的$PATH才能运行它。但是,您可以像这样运行当前目录中的任何可执行文件:
$ ./helloexec.bash
hello bash
Run Code Online (Sandbox Code Playgroud)
在 Unix 类型的操作系统中,您必须将这种与脚本和可执行文件交互的方法内在化,而不是坚持将它们都放在$PATH.
$PATH在您的示例中,您表明您想添加~到您的$PATH. 多年来,我看到许多用户这样做,或者想这样做,认为将这个目录直接放在他们的$PATH.
这通常不是处理事情的好方法。相反,您应该仔细考虑要在 Linux/Unix 中存储可执行文件的位置,并且只添加对于拥有如此显眼的位置(例如位于$PATH.
最通常会添加系统目录,然后添加$HOME/bin到$PATH并留在这一点。将更多东西放在上面$PATH可能会导致意想不到的后果,例如命令无法按预期工作,甚至更糟,从而造成系统更容易受到损害的情况。
例如,假设您从网站下载了一些脚本,但没有意识到您的 Web 浏览器已更改为将文件保存到$HOME. 这个下载的文件现在处于可以被潜在攻击者调用的位置。
或者,如果您的订单处于其他目录之前$PATH的状态~,例如:
$ printenv PATH
/home/vagrant:/sbin:/bin:/usr/sbin:/usr/bin
Run Code Online (Sandbox Code Playgroud)
我们不小心下载了一个可执行文件,例如:
$ cat ps
#!/bin/bash
/bin/ps -eaf | grep -v "spyware"
Run Code Online (Sandbox Code Playgroud)
现在,当有人运行 时ps,他们使用的是这个版本而不是预期的/bin/ps.