这位仁兄的回答 豁然开朗!
#sudo -s 我只是从结果看 切换到了root ,我狐疑的是sudo -s 是否等于sudo su – 其实执行的动作是不一样的
做个试验来验证,我修改了我普通用户的$SHELL(改成csh,而root的还是默认的bash)
# tail -n 2 /etc/passwd
zhenqiang:20003:20003::/home/zhenqiang:/bin/csh
仔细看如下命令执行:
[zhenqiang@www ~]$ id
uid=20003(zhenqiang) gid=20003(zhenqiang) groups=20003(zhenqiang)
[zhenqiang@www ~]$ echo $SHELL
/bin/csh
[zhenqiang@www ~]$ sudo -s
[root@www ~]# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
[root@www ~]# echo $SHELL
/bin/csh@@@@@@@@@@还是zhenqiang用户的shell
[root@www ~]# exit
[zhenqiang@www ~]$ sudo su –
[root@www ~]# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
[root@www ~]# echo $SHELL
/bin/bash@@@@@@@@@这回是root用户自己的shell
结案!
sudo,以其他用户身份执行一个命令。
常見用法
手冊
用法
- sudo -h | -K | -V
- sudo -v [-Akns] [-g group] [-h host] [-p prompt] [-u user]
- sudo -l [-Akns] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command]
- sudo [-AbEHknPS] [-r role] [-t type] [-C num] [-g group] [-h host] [p prompt] [-u user] [VAR=value] [-i|-s] [<command>]
- sudo -e [-Akns] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-u user] file …
選項全表
-A, –askpass | 使用一个辅助程序以提示密码。 |
-b, –background | 在后台运行命令。 |
-C, –close-from=num | 关闭所有大于等于num的文件描述。 |
-E, –preserve-env | 运行命令时保存用户环境。 |
-e, –edit | 编辑文件而非运行一个命令。 |
-g, –group=group | 以指定的组名或组ID运行一个命令。 |
-H, –set-home | 设置 HOME 变量以指向用户的 HOME 目录。 |
-h, –help | 显示帮助信息并且退出。 |
-h, –host=host | 在主机上运行命令(如果插件支持)。 |
-i, –login | 以目标用户运行登录shell;也可以指定一个命令。 |
-K, –remove-timestamp | 完全删除时间戳文件。 |
-k, –reset-timestamp | 失效时间戳文件。 |
-l, –list | 列出用户特权或检查一个特定的命令;长格式使用两次。 |
-n, — non-interactive | 非交互方式,无提示被使用。 |
-P, –preserve-groups | 保存组向量而非设置指定的目标。 |
-P, –prompt=prompt | 使用指定的密码提示。 |
-r, –role=role | 用指定的角色创建SELinux安全上下文。 |
-S, –stdin | 从变准输入读取密码。 |
-s, –shell | 以目标用户运行 shell;也可以指定一个命令。 |
-t, –type=type | 使用指定的类型创建 SELinux 安全上下文。 |
-U, –other-user=user | 在列表模式中,显示用户特权。 |
-u, –user=user | 以指定的用户或用户ID运行命令(或编辑文件)。 |
-V, –version | 显示版本信息并且退出。 |
-v, –validate | 更新用户的时间戳而不运行一个命令。 |
— | 停止处理命令行参数。 |