print color change bcolors python terminal pip virtualenv sudo

python - color - ¿Qué hace sudo-H?



python colors console (1)

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) según lo especificado por 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 de inicio de root.

En tu caso

pip te 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 programa que se ejecuta sin root ya no podría sobrescribir o modificar estos archivos. En su lugar, pip se niega a escribir en un directorio propiedad de otro usuario.

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 el indicador -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 el indicador -H de sudo.

¿Qué hace la bandera de sudo -H?