nodejs 覆盖了 /usr/bin/which,如何修复?

nodejs 覆盖了 /usr/bin/which,如何修复?

我刚安装了 centos 7,里面只有一些 nodejs 项目。然后我发现which命令无法正常工作。

# which ls
which: illegal option -- -
usage: which [-as] program ...

# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

但这有效:

# /usr/bin/which ls
/usr/bin/ls

然后我执行了一下cat /usr/bin/which,发现它已经被替换成nodejs程序了!

#!/usr/bin/env node
var which = require("../")
if (process.argv.length < 3)
  usage()

function usage () {
  console.error('usage: which [-as] program ...')
  process.exit(1)
}
... ...

which命令是一个节点程序

# ls -la /usr/bin/which
lrwxrwxrwx 1 root root 63 Jul  5 20:43 /usr/bin/which -> ../local/share/.config/yarn/global/node_modules/which/bin/which

我非常困惑,nodejs 为什么要取代一个完美运行的系统命令呢?

现在的问题是,修复它的正确方法是什么?我可以删除该文件并which从另一台计算机(vm)复制吗?

更新:

这是我安装 nodejs 和 yarn 的方法。其他模块安装在项目目录中。

curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -
yum install nodejs

sudo wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo
yum install yarn

yarn global add nuxt
yarn global add cross-env
npm install pm2 -g

答案1

我在 Fedora 中安装 yarn 时遇到了同样的问题。

我意识到这个命令哪个,不使用绝对路径调用,实际上是一个别名。

# alias which
alias which='(alias; declare -f) | /usr/bin/which --tty-only --read-alias --read-functions --show-tilde --show-dot'

在 Fedora 中使用以下 rpm 命令,我还可以确认/usr/bin/哪个软链接已被替换。

# rpm -V which
....L....    /usr/bin/which

我重新安装后解决了这个问题哪个包裹。

sudo yum reinstall which

我不认为这是正确的,nodejs 应该取代一个重要的系统程序,所以对于客人来说,这是nodejs开发团队的一个问题。

附言:抱歉我的英语不好。

相关内容