定义你自己的 bin 目录

定义你自己的 bin 目录

我有很多经常使用的命令行工具。我使用常规方法通过终端遍历该命令的完整路径,然后执行./命令名称但这是一份繁琐且耗时的任务。

研究“如何通过终端从任何地方执行命令”这一主题后,我最终找到解决方案,将路径包含在环境变量中(通过编辑 ./bashrc)。

这很好用。

我甚至发现所有全局有效的命令(如 mkdir、ifconfig、cp 等)都放在“/bin”目录中。

将我的命令的“符号链接”包含在“/bin”目录中后,一切运行正常,我可以从终端的任何位置执行命令。

我的问题

  1. 直接将符号链接放在 /bin 目录中是否安全?我问这个问题是因为在放置符号链接时,它要求我输入管理员密码。

  2. 如果我将命令的符号链接放在 /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目录的可变顺序是重要的. 首先指定优先级最高的路径名。

现在回答你的问题:

  1. 是的,在 中创建符号链接是安全的/bin。当然,如果你不要重写其他可执行文件。但您应该更喜欢使用/usr/local/bin。它也必须在您的 中PATH

  2. 是的。取决于 中的顺序PATH。例如,如果您将不同文件但同名的符号链接放入 和/bin/usr/bin/usr/bin包含在PATH之前/bin,则它将使用 中的符号链接/usr/bin

您可以阅读有关文件系统层次结构这里

关于 Ubuntu 环境变量这里

答案3

不!!! 不要触碰系统目录。您编写的每个脚本或程序通常都应放在/usr/local/bin目录中/usr/local/sbin。将目录添加到 PATH 并不是一个好主意,因为它存在安全风险。

此外,这些目录之间的区别在于超级用户程式。

答案4

  1. 直接将符号链接放在 /bin 目录中是否安全?我问这个问题是因为在放置符号链接时,它要求我输入管理员密码。

    存在安全风险。我真的不认为将自己的符号链接放在 /bin 目录中是明智之举,因为不仅您的命令会变成全局命令,而且符号链接也很容易被破坏。bash PATH 环境变量是一种更强大的解决方案。

  2. 如果我将命令的符号链接放在 /bin 中与 /usr/bin 目录中相比,会产生什么区别吗?

    不。尽管根据文件系统层次标准 (FHS)/bin 和 /usr/bin 之间存在差异。

    /bin需要在单用户模式下可用的基本命令二进制文件;适用于所有用户,例如 cat、ls、cp。
    /usr/bin 非基本命令二进制文件(在单用户模式下不需要);适用于所有用户。

    但如今这种区别已经不那么重要了。实际上,一些发行版(尤其是 Fedora)有淡化 /bin 目录的趋势。

相关内容