sudo -H是做什么的?

发布于 2021-01-29 17:56:38

尝试使用pip安装virtualenv之后

$ pip install virtualenv

我收到一个权限被拒绝的错误

IOError: [Errno 13] Permission denied: '/Library/Python/2.7/site-packages/virtualenv.py'

所以我用sudo安装virtualenv

$ sudo pip install virtualenv

但是随后出现警告:

目录“ / Users / petertao / Library / Caches / pip /
http”或其父目录不属于当前用户,并且缓存已被禁用。请检查该目录的权限和所有者。如果使用sudo执行pip,则可能需要sudo的-H标志。

目录“ / Users / petertao / Library / Caches /
pip”或其父目录不属于当前用户,并且缓存轮已被禁用。检查该目录的权限和所有者。如果使用sudo执行pip,则可能需要sudo的-H标志。

sudo的-H标志有什么作用?

关注者
0
被浏览
326
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    通常

    man sudo (确切的文本可能会有所不同,但是会相似):

    -H

    -H(HOME)选项请求安全策略将HOME环境变量设置为密码数据库指定的目标用户的主目录(默认为root)。根据策略,这可能是默认行为。

    那么,为什么这甚至是一个选择呢? 通常,使用“ sudo”不会更改$ HOME环境变量。

    例如:

     echo $HOME $USER
    /home/testuser testuser
    
     sudo bash -c 'echo $HOME $USER'
    /home/testuser root
    
     sudo -H bash -c 'echo $HOME $USER'
    /home/root root
    

    您可以看到普通的sudo会将我的用户从“ testuser”更改为“ root”,但不会将$ HOME设置为什么,而sudo -H还将变量从“
    my”主目录更改为root的主目录。

    就你而言

    pip警告您它是作为root用户执行的,并且想要修改$ HOME中的内容,该内容设置为’/ Users /
    petertao’,该用户不是root用户(很可能是“ petertao”用户)。该警告表明pip使用$
    HOME缓存文件,但由于文件夹所有权差异而已禁用其自身的缓存。

    当然,以root pip身份执行时可以修改’/ Users / petertao / Library / Caches /
    pip’,因为root(几乎)是万能的。稍后可能会造成麻烦,因为在没有root用户的情况下运行的程序将无法再覆盖或修改这些文件。而是pip拒绝写入另一个用户拥有的目录。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看