1.su方式
前提:使用su切换到其他账号,需要输入其他账号的密码。但是如果从root账户切换到其他账号时,就不需要输入其他账号的密码了。
使用方式:
(1)切换用户有两种效果,login-shell和non-login-shell
(a)login-shell方式:su - 和su -l是一样的,后面接要切换的账户名,如果不接任何账户名,表示切换到root账户。注意的是,su - 中的-不要理解成普通命令的option前的-;
(b)non-login-shell方式:su后直接加账户名,表示是non-login-shell的方式登录Linux。如果su后不加任何账户名,表示切换到root账户;
su方式切换身份时,要输入对方身份的密码
(2)在上面的过程中,是直接切换到其他账户,然后以新账户进行各种操作。如果想要执行一次命令,就返回到原有的账户,那么就需要用-c选项了。
使用形式是:(su的种种)-c "命令"。记得后面的命令(尤其在命令带有选项的时候)要加上双引号。
(3)如果想返回原有账号,那么使用exit命令
2.sudo方式
前提:一个账户是否可以使用sudo命令来进行用户的切换,就是要看/etc/shadow文件中是否配置了当前用户。可以使用root账户,用visudo工具进行添加。使用sudo执行命令的时候,需要输入自己的账户密码,也可以通过配置不用输入密码也可以。值得注意的是,当使用sudo之后的的五分钟内再次使用sudo,就不用输入自己账户的密码啦。
使用 形式:sudo -u account command 表示切换到account账户,并以account账户执行一次命令后,返回原来的账户。注意的是,如果后面没接account表示切换到root账户。
Remarks:
(1)使用sudo -u account command 来执行命令是non-login-shell方式,因此后面的command命令有时需要输入绝对路径,不然会提示找不到命令。原因是PATH的缘故哦!(这个要看sudo版本哦,见options)
(2)使用sudo切换为其他账户进行命令执行的时候,只能执行一次,就返回为原来的账户啦,注意与su的区别(这个要看sudo版本哦,见options)。既然这样的话,在实际应用中就会有一定的局限性。我们可以使用sudo和su配置使用,来解决这个问题。通过执行命令sudo su -就可以切换到指定的账户,这时只需要输入自己的密码就可以了,而不是要输入root账户的密码了。
更新:
sudo的几个重要选项如下,
(1)-u user 表示指定目标用户,如果没有这个参数表示切换到root
(2)-i [command] 表示要加载目标用户的环境变量,而成为一个login shell。如果没有command,那么就直接切换到目标用户,即得到一个交互式的shell。如果有command,那么就以login shell的方式去执行命令(应该是较新版本的sudo才有-i选项)
(3)-H 表示取得的shll要生效目标用户的HOME环境变量
(4)-s [command] 如果有command,那么使用取得的shell去执行command。如果没有command,那么就获得一个交互式的shell
备注:
通过sudo获得交互式shell的方法:
(1)sudo su - testwork (2)sudo -i -u testwork (3)sudo -s -H -u testwork