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