每次开机都有一个新的root密码。我们可以在终端输入命令 sudo passwd,然后输入当前用户的密码,enter,终端会提示我们输入新的密码并确认,此时的密码就是root新密码。修改成功后,输入命令 su root,再输入新的密码就ok了。

 

sudo passwd 提示输入的是当前用户的密码,修改的是root的密码,当前用户的密码并没有更改

sudo passwd == passwd root

su = switch user 

su - root  和   su root 的区别 

su - root  is   the same as su -

just like login as root, then the shell is login shell,
which mean it will expericene a login process,
usually .bash_profile and .bashrc will be sourced

su  root    is    the same as su
like you open an interactive shell in root name,
then only .bashrc will be sourced.

su  后面不加用户是默认切到 root
su  是不改变当前变量
su - 是改变为切换到用户的变量 
也就是说su只能获得root的执行权限,不能获得环境变量

而su -是切换到root并获得root的环境变量及执行权限

 

 如何查看一个用户的所有环境变量???

变量的划分

1.全局变量 通过export命令将局部变量变成全局变量

2.局部变量 单个shell进程的私有变量

至于 set,env,export 命令的区别个

网上说 set 显示的是用户变量和shell私有变量等价于set显示局部和全局变量

env 显示的是用户变量  用户变量:个人理解是跟用户绑定的,但是重启另一个终端之前终端设置的用户变量并不生效,用户变量有点歧义,还是叫全局变量好理解 

printenv 显示全局变量

export 显示的是导出成用户变量的shell变量--这种说法也有问题,shell变量 也有全局的 ,所以export显示的是全局变量

所以将变量分这么多,蛋疼吗,全局和局部即可

所以查看一个用户的所有环境变量=全局变量+用户在shell设置的局部变量 。。。。

所以上面说的 su 只能获取root的执行权限而不能获取root的环境变量有问题

su - root 多读取了一个文件 和登录shell读取的文件一样

su root 读取的是交互式shell读取的文件

两个文件 各自设置的环境变量肯定不一样,并不是su不能获取环境变量,只是变量不一样

 

su 和  sudo的区别

su 切换用户

sudo 暂时获得root权限