Jam*_*ith 3 command-line alias symbolic-link
我希望用户能够安装我的命令行工具...
https://github.com/occam-proof-assistant/Open-CLI
...全局并通过键入从终端运行它open。NodeJS 包管理器,npm,提供此功能,在您全局安装包时创建必要的符号链接。所以在/usr/bin目录中,我看到确实创建了以下符号链接:
open -> ../lib/node_modules/occam-open-cli/open.js
Run Code Online (Sandbox Code Playgroud)
但是,这仅在我是 root 时才有效,否则我会得到:
Couldn't get a file descriptor referring to the console
Run Code Online (Sandbox Code Playgroud)
我知道这是什么,有点。如果我输入openvt,我会收到相同的消息。
所以我需要能够删除允许openvt使用open. 我认为这是一件安全的事情,因为openvt如果你愿意,你总是可以回到打字。
但是,我无法找到一种方法来做到这一点。我以为有某种别名,但打字unalias open不起作用。
那么这个神秘open命令、别名、符号链接或其他什么/在哪里?我怎样才能安全地删除它,并建议其他人也这样做?
在您的系统上/bin/open优先的原因/usr/bin/open可能/bin是/usr/bin在您的 PATH之前。要检查您的 PATH,您可以运行echo $PATH. 元素用冒号分隔。
当您使用(我假设)sudo运行open或启动运行它的 root shell 时,您得到了您想要的命令,因为sudo使用它自己的 PATH,定义在/etc/sudoersas 中secure_path,在我的系统上是
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
Run Code Online (Sandbox Code Playgroud)
如您所见,/usr/bin在/bin.
我认为你的发现很奇怪,因为据我所知,/usr/bin通常在/bin. 您的用户可能不会遇到与您相同的问题。
但是,为了安全起见,您可以将程序安装在 中/usr/local/bin,它应该始终位于用户的 PATH之前/usr/bin和/bin中,以便本地构建的软件优先于其他同名命令。
更安全的是,正如steeldriver 建议的那样,让您的用户(或您的安装脚本)在 shell 配置文件中为您的工具定义一个别名,例如~/.bashrc. 别名总是优先于其他命令。通过在您的别名中添加别名,您~/.bashrc可以确保它只会被交互式 shell 知道,并且不会干扰其他程序。
如果程序尝试执行/bin/openexpecting openvt,删除符号链接可能会导致问题,并且可能不可靠,正如 steeldriver 所指出的,因为当提供符号链接的包更新或重新安装时(即相当不可预测),符号链接可能会重新创建。
| 归档时间: |
|
| 查看次数: |
600 次 |
| 最近记录: |