这是一个困扰我一段时间的 linux 问题。在我的工作 linux 机器上(运行 RedHat),我试图安装一些 Python 包。然而,一些有趣的事情正在发生,见下文:
这是我的目标和第一个命令
pip install scrapylib
这会产生“权限被拒绝”错误
OSError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/site-packages/scrapylib'
我本能的 react 是将“sudo”放在完全相同的命令前......
sudo pip install scrapylib
产生这个异常,
sudo: pip: command not found
为了解决这个问题,我输入
sudo su - root
现在这个命令 100% 成功运行
pip2.7 install scrapylib
终于变回我了
sudo su - uspowpow
谁能给我解释一下这个现象?我是一名刚毕业的大学毕业生,除了基本的 Linux 知识外什么都没有,如果有人能解释为什么在有效命令前放置“sudo”会使其无效,我将非常感激(修复和知识)。
最佳答案
发生这种情况的原因有多种。挑几个:
- 您的命令可能不在
sudo
强制执行的 PATH 中。对于/usr/local/bin
(您的pip
似乎所在的位置)中的命令,这是完全可能的。 - 您的命令可能需要别名或 shell 函数才能有效(也许您将
pip
别名为pip2.7
?),或者本身可能是内置的 shell(尽管pip
不是这种情况)。默认情况下,sudo
使用 execv* 系统调用家族的成员直接调用子级,没有 shell,因此 (1) shell 函数和别名不会在其下全部调用; (2) 即使您正在使用一个 shell,该 shell 也不会运行您当前用户的点文件(作为一个非交互式 shell,如果给出一个运行命令,它不会运行 大多数点文件)。
要了解实际 原因是什么,首先要找出pip
是什么命令。为此,请运行:
$ type pip
如果你得到的答案是:
pip is /usr/local/bin/pip
...那么您应该查看 /etc/sudoers
中设置的 secure_path
值,以确保它包含 /usr/local/bin
,或者运行 sudo/usr/local/bin/pip
来回避这个问题。相比之下,如果您得到:
pip is aliased to `pip2.7'
...那么你就知道问题是它是一个别名,你需要运行 sudo pip2.7
(如果 PATH 不是也是一个问题) .
关于python - 在命令前添加 "sudo"使命令未知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30538784/