1. sudo 和 root不完全等效,继承的环境变量不一样,最主要的区别还是输入的密码不同。
2. 使用sudo去执行一个程序时,出于安全的考虑,这个程序将在一个新的、最小化的环境中执行,也就是说,诸如PATH这样的环境变量,在sudo命令下已经被重置成默认状态了。由于环境变量的原因,比如pip可以执行,但是sudo pip不一定可以执行(PATH改变了,除非加上完整路径)。
3. 默认情况下sudo会重置PATH环境变量,赋给PATH的值在/etc/sudoers文件中的“Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin”中设定。所以如果使用sudo运行程序,最好补全完整路径。
4. /etc/sudoers文件中的“Defaults env_reset”控制了sudo默认不会继承原有环境。如果改成“Defaults !env_reset”则会继承原有环境(可以在普通账号的”.bashrc”中建立一个测试环境变量TESTV,然后使用“sudo bash”,再测试不同设置下,是否能看到TESTV的值)。同时,如果是“Defaults env_reset”,那么可以在下方的“”env_keep”里设置需要保留的环境变量。
5. 如果使用“sudo bash”。那么相当于运行了一个“ interactive bash
shell”,会“source /root/.bashrc”,也就会有root的环境变量。sudo成root之后,uid/gid和root账户一致。
6. 运行如“sudo echo $PATH”看到的仍然是当前普通用户的PATH,这是因为shell在执行命令之前会先替换$PATH,所以这个命令最后变成了“sudo echo /home/testuse/.......”,输出的仍然是用户的PATH。
7. python运行时,遇到import module,会依次在当前目录、环境变量PYTHONPATH、python的安装设置相关的默认路径中查找。如果module内也有import A,也会按照这个次序搜寻文件。所以函数库发布时,会提示需要预先安装的库,并指定文件位置或环境变量。