sudo与su的区别
一、 su需要输入root用户的密码,sudo只需要输入当前用户的密码。
二、 通过不同的方式切到root后,pwd目录的变化
su ; sudo su ;su root;切到root后,pwd目录不变
su - ; su - root; sudo -i 切到root后,pwd目录变成/root
三、 sudo和su的权限区别
例如给系统清除缓存的命令,echo 3 > /proc/sys/vm/drop_caches;如果用sudo执行就会提示权限不够,但是利用“sh -c”命令就可以;这是因为echo 和 > 命令在bash眼里是两条命令,但是sudo只给echo赋予了root权限,但是却没给 > 赋予权限,但是利用“sh -c”让bash将一个字串作为完整的命令来执行,这样就可以将 sudo 的影响范围扩展到整条命令。
四、 环境变量的继承问题
给普通用户zy添加了一个环境变量”gaga=I’m zy.”,通过不同的方式切到root,查看是否保留了gaga这个环境变量;
保留了gaga环境变量 |
没有保留gaga环境变量 |
su、su root、sudo -E su |
sudo su、su -、su - root、sudo -i |
“sudo -E su”当加上-E参数时,sudo -E su也是可以保留原来的环境变量的,-E参数的含义:-E, --preserve-env 在执行命令时保留用户环境。
su - 相当于创建一个新的环境(由 root 用户 ~/.bashrc 文件所设置的环境),相当于使用 root 用户正常登录(从登录屏幕登录),是login shell方式,它是先以root身份登录然后再执行别的操作;su命令在切换到 root 用户之后仍然保持旧的(或者说原始用户的)环境,读取变量的方式是non-login shell。
五、 其他
1.如果希望可以不输入密码执行sudo命令,可以将/etc/sudoer文件按照下面格式更改,