Linux su命令详解
嘻嘻发布于2021-10-27
最后更新于2021年10月18日
浏览在本教程中,我们将学习什么是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-”命令之间的区别。