¿Qué hace sudo -H?

Después de intentar instalar virtualenv con pip

$ pip install virtualenv 

Obtuve un permiso negado error

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

Así que usé sudo para instalar virtualenv

 $ sudo pip install virtualenv 

Pero entonces apareció una advertencia:

El directorio ‘/ Users / petertao / Library / Caches / pip / http’ o su directorio principal no es propiedad del usuario actual y el caché ha sido deshabilitado. Por favor, compruebe los permisos y el propietario de ese directorio. Si ejecuta pip con sudo, es posible que desee la marca -H de sudo.

El directorio ‘/ Users / petertao / Library / Caches / pip’ o su directorio principal no es propiedad del usuario actual y las ruedas de almacenamiento en caché se han deshabilitado. Compruebe los permisos y el propietario de ese directorio. Si ejecuta pip con sudo, es posible que desee la marca -H de sudo.

¿Qué hace la bandera de sudo -H?

Generalmente

man sudo (el texto exacto puede variar, pero será similar):

-H

La opción -H (INICIO) solicita que la política de seguridad establezca la variable de entorno de INICIO en el directorio de inicio del usuario de destino (raíz de forma predeterminada) como se especifica en la base de datos de contraseñas. Dependiendo de la política, este puede ser el comportamiento predeterminado.

Entonces, ¿por qué es esto incluso una opción? Normalmente el uso de “sudo” no cambia la variable de entorno $ HOME.

por ejemplo:

  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 

Puede ver que un sudo normal cambia el usuario que soy de “testuser” a “root”, pero no la configuración de $ HOME, mientras que un sudo -H también cambia la variable de “my” home directory al directorio home de root.

En tu caso

pip le advierte que se ejecutó como usuario root y quería modificar las cosas en $ HOME, que se configuró en ‘/ Users / petertao’, que no es propiedad de root (probablemente el usuario “petertao”). la advertencia indica que pip usa $ HOME para almacenar en caché los archivos, pero ha deshabilitado su propio almacenamiento en caché debido a la discrepancia de propiedad de la carpeta.

Por supuesto, mientras se ejecuta como root pip puede modificar ‘/ Users / petertao / Library / Caches / pip’ porque root es (casi) todopoderoso. Esto puede volverse problemático más adelante porque un progtwig que se ejecuta sin root ya no puede sobrescribir o modificar estos archivos. En su lugar, pip se niega a escribir en un directorio propiedad de otro usuario.