什么sudo -H做什么?

时间:2017-04-26 00:26:32

标签: python terminal pip virtualenv sudo

尝试使用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标志有什么作用?

2 个答案:

答案 0 :(得分:51)

一般

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" to" root",而不是$ HOME设置的内容,而sudo -H也改变了" my"主目录到root的主目录。

在你的案例中

pip警告你它是以root用户身份执行的,并希望修改$ HOME中的内容,该内容设置为' / Users / petertao&#39 ;,这不是root所有(很可能是" petertao"用户)。 警告表明pip使用$ HOME来缓存文件,但由于文件夹所有权不一致而禁用了自己的缓存。

当然,以root为基础执行时,可以修改' / Users / petertao / Library / Caches / pip'因为根(几乎)是全能的。 这可能会变得麻烦,因为没有root运行的程序不能再覆盖或修改这些文件。 相反,pip拒绝写入另一个用户拥有的目录。

答案 1 :(得分:-7)

-h标志通常表示人类可读的格式,它是Linux操作系统中内置的便捷转换。例如,如果您进入Linux的命令终端(在本例中为raspberry pi)并键入df。这将显示您已使用和可用的内存。它将显示类似您的448336字节的内容。您可能喜欢,令人困惑。现在,键入df -h(使用-h标志),您应该会得到类似448M而不是4488336字节的结果。