Linux su命令详解

在本教程中,我们将学习什么是Unix/Linux中的su命令(switch user),以及su和su命令之间的区别。Linux是一个多用户操作系统内核,这意味着多个用户可以同时登录到Linux系统。您可以使用su命令在命令行本身的不同用户之间切换。su命令代表“替换用户”,或者可以在用户之间切换。此命令将用户凭据更改为指定用户或根用户的凭据(默认情况下)。

su命令作用

如上所述,su命令将用户的凭据更改为其他用户的凭据。让我们看一个例子

[raghu@redhat-server ~]$ su jack
Password:
[jack@redhat-server raghu]$ id
uid=501(jack) gid=501(jack) groups=501(jack),504(javaproject) context=root:system_r:unconfined_t:SystemLow-SystemHigh

命令输出关于当前用户的信息。在上面的输出中,您可以看到已更改的用户。当su命令没有参数时,默认情况下它将更改为root用户。Ubuntu手册页解释了更多信息。

[jack@redhat-server raghu]$ su
Password:
[root@redhat-server raghu]# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=root:system_r:unconfined_t:SystemLow-SystemHigh

用su模拟登录

使用su–login或su-l或“su-”命令,您可以像从终端登录一样切换用户。

[raghu@redhat-server ~]$ su - jack
Password:
[jack@redhat-server ~]$ id
uid=501(jack) gid=501(jack) groups=501(jack),504(javaproject) context=root:system_r:unconfined_t:SystemLow-SystemHigh

su vs su-

“su”和“su-”之间的区别在于,一些环境变量(如路径变量)不会仅使用su更改值(即,如果使用了-l选项或-选项)。如果未正确设置路径,某些命令可能无法运行。例如,考虑下面的场景:

[jack@redhat-server ~]$ su root
Password:
[root@redhat-server jack]# fdisk -l
bash: fdisk: command not found
[root@redhat-server jack]# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/jack/bin

您可以看到,根用户的路径中不包括sbin目录。因此它不运行fdisk命令。现在我们尝试使用su命令登录:

[jack@redhat-server ~]$ su -
Password:
[root@redhat-server ~]# fdisk -l

Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 1044 8281507+ 8e Linux LVM
[root@redhat-server ~]# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

这两个命令之间的另一个区别是登录脚本。首先,让我们讨论一些登录脚本:

当用户登录到系统时,如果用户的凭据合法,将执行以下4个文件:

/etc/profile
/etc/bashrc
~/.bashrc
~/.bash_profile

使用“su-”命令登录时,将执行所有这些脚本。但是对于su,只执行bashrc脚本,即执行/etc/bashrc和~./bashrc脚本。

在ubuntu中,当您运行su命令时,您可能会收到身份验证失败。您收到此错误是因为ubuntu中的根帐户在默认情况下被禁用。

user@host:~$ su
Password:
su: Authentication failure

使用sudo-i或sudo来代替su,然后使用命令。

总结

在本教程中,我们学习了Linux中“su”和“su-”命令之间的区别。

linux grep命令详解
linux w命令详解:查看登录用户和操作
标签:

发表我的评论

电子邮件地址不会被公开。 必填项已用*标注

39 + 1 =

ajax-loader