当前位置: 首页 > 面试题库 >

sudo -H是做什么的?

赫连正初
2023-03-14
问题内容

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


问题答案:

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



 类似资料:
  • JavaDoc说: 我知道 C# 中的 是什么,但这个标量和 C# 标量似乎完全不同。

  • 本文向大家介绍eval是做什么的?相关面试题,主要包含被问及eval是做什么的?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 它的功能是将对应的字符串解析成js并执行,应该避免使用js,因为非常消耗性能(2次,一次解析成js,一次执行)

  • 问题内容: 大约有一百万次问答,解释了诸如之类的选项,但是如果没有任何选择,它会自己做什么呢?它只是过滤标签吗? 问题答案: 根据PHP手册: 剥离标签,可选择剥离或编码特殊字符。 根据W3Schools: 过滤条或编码不需要的字符。 该过滤器将删除可能对您的应用程序有害的数据。它用于剥离标签并删除或编码不需要的字符。 现在,这并不能告诉我们太多。我们来看一些PHP源代码。 : 现在,让我们看看如

  • 问题内容: 有时我会创建一个函数,稍后再调用该函数。 例: 不知何故,某些功能无法调用。我必须在内部调用这些函数: 做什么和意味着,什么是这些区别/目的是什么? 问题答案: 只是jQuery的简写 它的设计目的(除其他事项外)是确保一旦页面的所有DOM元素准备就绪即可使用您的函数。 但是,我不认为这是您遇到的问题-您能否弄清楚“以某种方式,某些函数无法调用,而我必须在内部调用这些函数”的意思吗?也

  • 我一直在努力学习什么是EJB bean,这意味着他们的实例在池中被管理,等等。真的不能很好地掌握它们。 你能给我解释一下它们到底是什么吗(实际上对于一个Java程序员来说)?他们是做什么的?他们的目的是什么?为什么要真正使用它们?(为什么不坚持?)也许是一个示例应用程序? 请仅参考更新的信息,即。关于EJB的过时信息可能具有误导性。 对于EJB学习初学者,请注意: EJB基于分布式对象,这是指运行

  • 问题内容: 在对另一个问题的答案发表评论时,有人说他们不确定自己在做什么。所以,我问这个问题,以便在上有它的记录,以备将来参考:到底是做什么的? 问题答案: 使用装饰器时,你将一个功能替换为另一个。换句话说,如果你有一个装饰器 然后当你说 并且你的函数f将替换为。不幸的是,这意味着如果你然后说 它会打印出来,因为那是新功能的名称。实际上,如果你查看的文档字符串f,则将为空,因为没有文档字符串,因此