58 votes

Que fait sudo -H?

Après avoir essayé d'installer virtualenv avec pip

$ pip install virtualenv

J'ai eu une erreur permission denied

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

J'ai donc utilisé sudo installer virtualenv

$ sudo pip install virtualenv

Mais alors un message d'alerte a montré:

Le répertoire '/Users/petertao/Library/Caches/pip/http " ou de ses parents le répertoire n'est pas détenue par l'utilisateur actuel et le cache a été désactivée. Veuillez vérifier les autorisations et propriétaire de ce répertoire. Si l'exécution du pip avec sudo, vous pouvez sudo -H drapeau.

Le répertoire '/Users/petertao/Library/Caches/pip " ou de sa mère le répertoire n'est pas détenue par l'utilisateur en cours et la mise en cache des roues a été désactivée. vérifiez les permissions et propriétaire de ce répertoire. Si l'exécution du pip avec sudo, vous pouvez sudo -H drapeau.

Ce n'sudo -H pavillon faire?

89voto

user3141593 Points 606

En général

man sudo (le texte exact peut varier, mais ce sera le même):

-H

L'-H (MAISON) option demande que la politique de sécurité de définir la variable d'environnement HOME le répertoire home de l'utilisateur cible (root par défaut) comme spécifié par le mot de passe de la base de données. Selon la politique, ce peut être le comportement par défaut.

Alors pourquoi est-ce même une option? Normalement à l'aide de "sudo" ne change pas le $variable d'environnement HOME.

par exemple:

 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

Vous pouvez voir que la normale sudo changements d'utilisateur que je suis de "testuser" à "root", mais pas ce que $HOME est réglé, alors qu'un sudo -H également les changements de la variable à partir de "ma" maison répertoire à la racine du répertoire d'accueil.

Dans votre Cas

le pip est un programme pour vous avertir qu'il a été exécuté en tant qu'utilisateur root et je voulais modifier des choses dans $HOME, qui a la valeur '/Users/petertao", ce qui n'est pas détenue par la racine (le plus probable de la "petertao de l'utilisateur"). le message d'avertissement indique que le pip utilise $à la MAISON de fichiers de cache, mais a désactivé sa propre mise en cache en raison de la propriétaire du dossier de divergence.

Bien sûr, lors de l'exécution en tant que root pip pouvez modifier '/Users/petertao/Library/Caches/pip " parce que la racine est (presque) tout-puissant. Cela peut devenir gênant plus tard, parce que un programme en cours d'exécution sans racine ne pouvait plus s'écraser ou de modifier ces fichiers. Au lieu de cela pip refuse d'écrire dans un répertoire appartenant à un autre utilisateur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X