我有很多经常使用的命令行工具。我使用常规方法通过终端遍历该命令的完整路径,然后执行./命令名称但这是一份繁琐且耗时的任务。
研究“如何通过终端从任何地方执行命令”这一主题后,我最终找到解决方案,将路径包含在环境变量中(通过编辑 ./bashrc)。
这很好用。
我甚至发现所有全局有效的命令(如 mkdir、ifconfig、cp 等)都放在“/bin”目录中。
将我的命令的“符号链接”包含在“/bin”目录中后,一切运行正常,我可以从终端的任何位置执行命令。
我的问题
直接将符号链接放在 /bin 目录中是否安全?我问这个问题是因为在放置符号链接时,它要求我输入管理员密码。
如果我将命令的符号链接放在 /bin 中与 /usr/bin 目录中相比,会产生什么区别吗?
环境(如果重要的话):
Ubuntu 13.10,32 位。
答案1
不建议乱用/bin
,/usr/bin
尽管这可行,但有点不安全。另外,你不要需要将您的符号链接放在那里。
./myscript
我遇到了和你提到的同样的问题。每次导航到你的脚本并调用它们很麻烦。这是我所做的。
定义你自己的 bin 目录
你可以创建自己的 bin 目录并将脚本放在那里。使用以下命令创建它
mkdir ~/bin
现在你需要修改 PATH 环境变量。这是一个敏感区域。如果你弄乱了 PATH 变量,你将无法再使用相对路径执行命令。如果发生这种情况,ls
可能就无法再工作/bin/ls
了。
我现在要展示的内容只会影响当前正在运行的终端会话。因此,如果出现任何问题,您只需使用Ctrl+退出D,一切就和以前一样。
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
export PATH=$PATH:~/bin
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:/home/madmike/bin
-命令echo
显示之前和之后 $PATH 中的内容。export
允许您更改环境变量。您的附加 bin 目录将附加到变量的末尾。这意味着您的命令具有至少如果有多个同名命令,则优先级会提高。这很好,因为您不想覆盖必要的系统命令。
要使更改永久生效,请编辑您的 ~/.bashrc 文件。
nano ~/.bashrc
添加export PATH=$PATH:~/bin
到该文件的末尾。
现在每个新的终端会话都会有随您的目录扩展的 $PATH 变量。
答案2
在回答您的问题之前,让我先稍微解释一下“它是如何工作的”。
在你的系统中你有Environment Variables
。其中一个PATH
变量存储可执行程序和脚本所在的目录集。在 Linux 中,默认情况下,PATH
存储几个目录。其中一个/bin
。这就是为什么您可以执行位于的任何程序/bin
。您可以PATH
通过执行以下命令检查变量:
echo $PATH
PATH
目录的可变顺序是重要的. 首先指定优先级最高的路径名。
现在回答你的问题:
是的,在 中创建符号链接是安全的
/bin
。当然,如果你不要重写其他可执行文件。但您应该更喜欢使用/usr/local/bin
。它也必须在您的 中PATH
。是的。取决于 中的顺序
PATH
。例如,如果您将不同文件但同名的符号链接放入 和/bin
,/usr/bin
并/usr/bin
包含在PATH
之前/bin
,则它将使用 中的符号链接/usr/bin
。
您可以阅读有关文件系统层次结构这里
关于 Ubuntu 环境变量这里
答案3
不!!!
不要触碰系统目录。您编写的每个脚本或程序通常都应放在/usr/local/bin
目录中/usr/local/sbin
。将目录添加到 PATH 并不是一个好主意,因为它存在安全风险。
此外,这些目录之间的区别在于超级用户程式。
答案4
直接将符号链接放在 /bin 目录中是否安全?我问这个问题是因为在放置符号链接时,它要求我输入管理员密码。
存在安全风险。我真的不认为将自己的符号链接放在 /bin 目录中是明智之举,因为不仅您的命令会变成全局命令,而且符号链接也很容易被破坏。bash PATH 环境变量是一种更强大的解决方案。
如果我将命令的符号链接放在 /bin 中与 /usr/bin 目录中相比,会产生什么区别吗?
不。尽管根据文件系统层次标准 (FHS)/bin 和 /usr/bin 之间存在差异。
/bin
需要在单用户模式下可用的基本命令二进制文件;适用于所有用户,例如 cat、ls、cp。
/usr/bin
非基本命令二进制文件(在单用户模式下不需要);适用于所有用户。但如今这种区别已经不那么重要了。实际上,一些发行版(尤其是 Fedora)有淡化 /bin 目录的趋势。