usp*_*pow 0 python linux sudo redhat root
这是一个linux问题,一直困扰着我.在我的工作linux框(运行RedHat)我试图安装一些Python包.然而,正在发生一些有趣的业务,见下文:
这是我的目标和第一个命令
pip install scrapylib
Run Code Online (Sandbox Code Playgroud)这会创建"权限被拒绝"错误
OSError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/site-packages/scrapylib'
Run Code Online (Sandbox Code Playgroud)我的下意识反应是将"sudo"放在完全相同的命令面前......
sudo pip install scrapylib
Run Code Online (Sandbox Code Playgroud)这会产生这个异常,
sudo: pip: command not found
Run Code Online (Sandbox Code Playgroud)为了解决这个问题,我打字
sudo su - root
Run Code Online (Sandbox Code Playgroud)现在,此命令成功运行100%
pip2.7 install scrapylib
Run Code Online (Sandbox Code Playgroud)最后,我回到了我身边
sudo su - uspowpow
Run Code Online (Sandbox Code Playgroud)谁能向我解释这个现象?我是最近的大学毕业生,只有基本的Linux知识,如果有人能解释为什么在有效命令前面放置"sudo"使其无效,我将非常感激(无论是修复还是知识).
这可能由于几个原因而发生.选几个:
sudo
.对于/usr/local/bin
(在你pip
看起来像是)的命令,这很可能是彻头彻尾的.pip
别名pip2.7
?),或者可能是内置的shell(虽然情况并非如此pip
).默认情况下,sudo
使用execv*系列syscalls的成员直接调用子进程,没有shell,因此(1)shell函数和别名不会被调用; (2)即使你是用贝壳,壳牌不会(如果给出一个命令来运行,它不会运行是一个非交互式的外壳,运行当前用户的点文件最点文件).要知道实际原因是什么,开始的地方是找出什么样的命令pip
.为此,请运行:
$ type pip
Run Code Online (Sandbox Code Playgroud)
如果您得到的答案是:
pip is /usr/local/bin/pip
Run Code Online (Sandbox Code Playgroud)
...然后你应该查看你secure_path
设置的值/etc/sudoers
以确保它包含/usr/local/bin
,或者只是跑来sudo /usr/local/bin/pip
回避问题.相比之下,如果你得到:
pip is aliased to `pip2.7'
Run Code Online (Sandbox Code Playgroud)
...那么你知道的问题是,它是一个别名,你需要运行sudo pip2.7
(如果路径是不是也有问题).
归档时间: |
|
查看次数: |
450 次 |
最近记录: |