我如何禁用“open”命令,知道它只是“openvt”二进制文件的链接?

我如何禁用“open”命令,知道它只是“openvt”二进制文件的链接?

我希望用户能够安装我的命令行工具......

https://github.com/occam-proof-assistant/Open-CLI

...全局安装并通过输入 来从终端运行它open。NodeJS 包管理器npm提供了此功能,可在您全局安装包时创建必要的符号链接。因此在目录中/usr/bin,我看到确实已创建以下符号链接:

open -> ../lib/node_modules/occam-open-cli/open.js

但是,这只有当我是 root 时才有效,否则我会得到:

Couldn't get a file descriptor referring to the console

我知道这是什么,大概是这样。如果我输入openvt,我会得到同样的消息。

因此,我需要能够删除允许openvt使用 调用的别名或其他任何内容。我认为这是一件安全的事情,因为如果您愿意,open您可以随时返回到键入。openvt

但是,我不知道该怎么做。我以为有某种别名,但输入unalias open无效。

那么这个神秘的命令、别名、符号链接或什么的是什么/在哪里open?我如何安全地删除它,并建议其他人也这样做?

答案1

/bin/open在您的系统中,优先于的原因/usr/bin/open大概是在您的 PATH 中/bin位于 之前/usr/bin。要检查您的 PATH,您可以运行echo $PATH。元素之间用冒号分隔。

sudo当你使用(我假设)运行open或启动运行它的 root shell时,你得到了你想要的命令,因为sudo它使用它自己的 PATH,定义/etc/sudoerssecure_path,在我的系统上是

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

正如您所见,/usr/bin在 之前/bin

我认为您的发现很奇怪,因为据我所知,/usr/bin通常出现在之前/bin。您的用户可能不会遇到与您相同的问题。

但是,为了安全起见,您可以将程序安装在中/usr/local/bin,它应该始终位于用户的 PATH 之前/usr/bin/bin之中,以便本地构建的软件优先于具有相同名称的其他命令。

更安全,因为steeldriver 建议,让您的用户(或您的安装脚本)在 shell 配置文件(例如)中为您的工具定义一个别名~/.bashrc。别名始终优先于其他命令。通过在您的命令中放置别名,~/.bashrc您可以确保只有交互式 shell 才能识别它,并且不会干扰其他程序。

如果程序尝试执行/bin/open预期,则删除符号链接可能会导致问题openvt,并且可能不可靠,正如steeldriver指出的那样,因为在提供它的软件包更新或重新安装时(即相当不可预测),符号链接可能会被重新创建。

答案2

事实上目录open -> openvt中有一个符号链接/bin。删除此链接可以解决问题。但是,正如其他地方提到的,迄今为止最好的解决方案是创建文件别名.bashrc...

导航到您的主目录:

cd ~

编辑您的.bashrc(这里我已经使用过nano但还有很多选项):

nano .bashrc

将以下内容放在某处(例如在脚下):

alias open='/usr/lib/node_modules/occam-open-cli/open.js'

您可以通过键入来重新加载文件source .bashrc,这样就可以了,而不会影响其他任何内容。

相关内容