好的,首先,我是Linux的新手,正在使用Linux Mint。
我了解到,当我想向我的目录PATH
(特别是我的主目录)添加更多目录时,我需要一个看起来像的Bash命令PATH=$PATH:~
,对吗?
问题是为什么我需要放在$PATH
那儿?它代表系统路径,对吗?如果我只打字会行PATH=~
吗?我的意思是我只想将我的主目录添加到现有PATH
目录中。
在Unix中,某些环境变量$PATH
是特殊的,例如它们是项目列表,而不仅仅是单个项目。对于这些类型的列表,冒号(:
)分隔列表中的项目。
因为$PATH
您仅打印它就可以看到它:
$ printenv PATH
/sbin:/bin:/usr/sbin:/usr/bin
如果要添加其他项目,则必须包括上一个列表以及新项目。实际上,这就是您说的话PATH=$PATH:<new item>
。
$ PATH=$PATH:/path/to/some/dir
$ printenv PATH
/sbin:/bin:/usr/sbin:/usr/bin:/path/to/some/dir
请记住,这些更改仅在运行它们的外壳上是本地的。如果您希望更改$PATH
在重新启动之间保持不变,或在其他Shell实例中显示,则需要将其添加到配置文件中,以便将其作为默认设置的一部分进行设置。
通常,对于用户而言,这就是您对这些文件~/.bashrc
&所做的操作~/.bash_profile
:
export PATH=$PATH:$HOME/bin:$HOME/somedir
添加这样的行会修改您的$PATH
。
$PATH
用法如果您只是希望能够运行不在您自己范围内的脚本和可执行文件,则$PATH
可以使用此方法而不是将其添加到来轻松解决$PATH
。
这是一个场景,可以说我们有一个这样的可执行文件:
$ ls -l helloexec.bash
-rwxr-xr-x 1 user1 user1 31 Aug 12 07:45 helloexec.bash
但是它不在,$PATH
因此我们无法运行它:
$ helloexec.bash
bash: helloexec.bash: command not found...
所以您在想,哦,我必须将其添加到我的$PATH
程序中才能运行它。但是,您可以运行当前目录中的任何可执行文件,如下所示:
$ ./helloexec.bash
hello bash
在Unix类型的操作系统中,必须内部化与脚本和可执行文件进行交互的方法,而不是坚持将它们全部放在$PATH
。
$PATH
在示例中,您表明您想添加~
到中$PATH
。多年来,我已经看到很多用户想要这样做,或者想这样做,直接将目录放在他们的目录上将为您带来极大的便利和时间的节省$PATH
。
这通常不是解决问题的好方法。相反,您应该认真思考要在Linux / Unix中存储可执行文件的位置,并且只添加对关键位置至关重要的目录,例如on $PATH
。
大多数将通常添加系统目录,然后将添加$HOME/bin
到$PATH
并保留该目录。将更多的内容放在设备上$PATH
可能会导致意想不到的后果,例如命令无法按预期运行,甚至更糟,从而导致使系统更容易受到威胁的情况。
例如,假设您从网站上下载了一些脚本,却没有意识到您的网络浏览器已更改为将文件保存到$HOME
。现在,已下载的文件处于可以被攻击者调用的位置。
或者,如果您的命令处于其他目录之前$PATH
的状态~
,例如:
$ printenv PATH
/home/vagrant:/sbin:/bin:/usr/sbin:/usr/bin
而且我们不小心下载了这样的可执行文件:
$ cat ps
#!/bin/bash
/bin/ps -eaf | grep -v "spyware"
现在,当有人跑步时ps
,他们正在使用的是该版本,而不是预期的版本/bin/ps
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句