linux su 的含义,linux su命令的真正含义,linuxsu命令

linux su命令的真正含义,linuxsu命令

linux中,我以root登录,和以其他用户登录然后使用su命令切换至root用户,有什么不一样,如果一样的话,我执行su命令之后,其他的用户还在不在系统中?本人在执行su后,试图删除其他用户,linux提示,其他用户logged in?why

原问:linux中,我以root登录,和以其他用户登录然后使用su命令切换至root用户,有什么不一样,如果一样的话,我执行su命令之后,其他的用户还在不在系统中?本人在执行su后,试图删除其他用户,linux提示,其他用户logged in?why

回答:我来为你解释吧! unix系统里,当用户登录时会为每个用户创建一个shell进程,提供交互功能,如果你使用的是bash,那么这个shell进程就是bash,使用的ksh,这个进程就是ksh,其他shell也是一样。

而对于进程而言,在它的进程PCB(进程控制块)里,有实际用户ID和有效用户ID这两个值,所谓实际用户ID是指该进程是以什么身份创建的,比如:我当前是root用户,我创建的进程的实际用户ID就是root的ID,一般为0。而有效用户ID是指对该进程当前拥有使用权限的用户的ID,比如我有一辆车,我把它组出去了,这个车的拥有者是我,但是使用权限却不是我的。

一般情况下实际用户ID和有效用户ID都是相同的,su命令就是拥有这样的功能,让一个进程可以以命令拥有者的权限运行,即可以使进程的实际用户ID和有效用户ID不相同。你可以用ls -l去查看su这个命令,在它的拥有者的x权限位上写的一定是个s(小s),passwd命令也是一样,他们拥有相同的功能。这个s位的意思是 执行该命令的用户可以以该命令的拥有者权限来执行,如果你把这个s位取消了,也就只有su的拥有者可以su了。

现在来进一步解释下吧,希望你能看的懂。

当我们以root执行su时,su命令会以当前shell进程为父进程来创建一个新的shell进程,这个shell进程是提供给我们所要su到的那个用户使用的,而root的shell进程仍然存在,反过来也是一样的,这就是你所问的问题的原因,因为之前那个用户的shell进程还没关闭,你可以使用exit退出一下,可以看到,并不是退出登录了,而是回到之前的那个用户去了。因为它们是父子进程的关系,子进程的结束当然 不会影响到父进程的执行了。但是我们如果强行杀死父进程,那就直接退出了。

其实很多人并不了解,whoami和who am i的区别,他们的作用是不同的。

who am i 显示当前shell进程的实际用户ID。

whomai 显示当前shell进程的有效用户ID。

很多时候,这两个输出是一样的,以至于我们以为这两个命令的作用是相同的。

实例:root@yunhw-Aspire-4750G:~# who am i

root pts/0 2011-12-10 13:13 (:0.0)

root@yunhw-Aspire-4750G:~# whoami

root

root@yunhw-Aspire-4750G:~#ps -ef

root 2939 2935 0 13:18 pts/0 00:00:00 bash

root@yunhw-Aspire-4750G:~# su - yunhw

yunhw@yunhw-Aspire-4750G:~$ who am i

root pts/0 2011-12-10 13:13 (:0.0)

yunhw@yunhw-Aspire-4750G:~$ whoami

yunhw

root@yunhw-Aspire-4750G:~#ps -ef

root 2939 2935 0 13:18 pts/0 00:00:00 bash

yunhw 2958 2939 0 13:19 pts/0 00:00:00 su - yunhw

yunhw 2966 2958 7 13:19 pts/0 00:00:00 -su

root@yunhw-Aspire-4750G:~#sudo kill -9 2939

这条命令一执行,也就完全退出了。

linux中 su - 的含义,及其作用是什?

su命令和su -命令最大的本质区别就是:前者只是切换了root身份,但Shell环境仍然是普通用户的Shell;而后者连用户和Shell环境一起切换成root身份了。只有切换了Shell环境才不会出现PATH环境变量错误。su切换成root用户以后,pwd一下,发现工作目录仍然是普通用户的工作目录;而用su -命令切换以后,工作目录变成root的工作目录了。用echo $PATH命令看一下su和su -以后的环境变量有何不同。以此类推,要从当前用户切换到其它用户也一样,应该使用su -命令。如图:

Linux下 su命令与su - 命令有什不同?

su 是切换到其他用户,但是不切换环境变量(比如说那些你用export命令查看一下,就知道两个命令的区别了)

su - 是完整的切换到一个用户环境

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值