sudo -H是做什么的?

尝试使用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标志。

回答:

通常

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

-H

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

那么,为什么这甚至是一个选择呢?

例如:

 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拒绝写入另一个用户拥有的目录。

以上是 sudo -H是做什么的? 的全部内容, 来源链接: utcz.com/qa/406391.html

回到顶部