su,就是switch user,即转换用户的意思。

sudo的出现只是为了让su安全一点,rm命令用起来爽,代价可大了。

gyz是home下的一个用户。

1,先看终端表面上的区别:

a,从普通用户gyz切换到超级用户root(后面不跟root用户名)

a1.........su:(允许操作)

[gyz@archlinux ~]$ ls
公共 模板 视频 图片 文档 下载 音乐 桌面 job work
[gyz@archlinux ~]$ su
密码:
[root@archlinux gyz]# ls
公共 模板 视频 图片 文档 下载 音乐 桌面 job work
[root@archlinux gyz]# pwd
/home/gyz
[root@archlinux gyz]#

a2.........su -:(允许操作)

[gyz@archlinux ~]$ ls
公共 模板 视频 图片 文档 下载 音乐 桌面 job work
[gyz@archlinux ~]$ su -
密码:
[root@archlinux ~]# ls
[root@archlinux ~]# pwd
/root
[root@archlinux ~]#

 a3.........sudo:(半允许操作)

[gyz@archlinux ~]$ ls
公共 模板 视频 图片 文档 下载 音乐 桌面 job work
[gyz@archlinux ~]$ sudo
usage: sudo -h | -K | -k | -V
usage: sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]
usage: sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user]
[command]
usage: sudo [-AbEHknPS] [-C num] [-g group] [-h host] [-p prompt] [-T timeout]
[-u user] [VAR=value] [-i|-s] [<command>]
usage: sudo -e [-AknS] [-C num] [-g group] [-h host] [-p prompt] [-T timeout]
[-u user] file ...
[gyz@archlinux ~]$

b,从普通用户gyz切换到超级用户root(后面跟root用户名)

b1.........su root:(允许操作)

[gyz@archlinux ~]$ ls
公共 模板 视频 图片 文档 下载 音乐 桌面 job work
[gyz@archlinux ~]$ su root
密码:
[root@archlinux gyz]# ls
公共 模板 视频 图片 文档 下载 音乐 桌面 job work
[root@archlinux gyz]# pwd
/home/gyz
[root@archlinux gyz]#

b2.........su - root:(允许操作)

[gyz@archlinux ~]$ ls
job work 下载 公共 图片 文档 桌面 模板 视频 音乐
[gyz@archlinux ~]$ su - root
Password:
[root@archlinux ~]# ls
[root@archlinux ~]# pwd
/root
[root@archlinux ~]#

b3.........sudo root:(无此操作)

[gyz@archlinux ~]$ ls
job work 下载 公共 图片 文档 桌面 模板 视频 音乐
[gyz@archlinux ~]$ sudo root
[sudo] password for gyz:
sudo: root: command not found
[gyz@archlinux ~]$

从上面的a1和b1是等效的,a2和b2也是等效的,事实上,su和su -后面不加root的话,默认就是root。

2,从普通用户gyz到普通用户tester

home下没有tester这个用户的,可以添加一个tester:

[gyz@archlinux home]$ ls
gyz tester
[gyz@archlinux home]$ mkdir tester
mkdir: 无法创建目录 “tester”: 文件已存在
[gyz@archlinux home]$ sudo useradd -d /home/tester -s /bin/bash tester
useradd:用户“tester”已存在
[gyz@archlinux home]$ sudo passwd tester
新的 密码:
重新输入新的 密码:
passwd:已成功更新密码
[gyz@archlinux home]$

-d是指定/home/tester 为主目录,-s是指定shell 脚本。

a1.........su tester:(允许操作)

[gyz@archlinux home]$ su tester
密码:
[tester@archlinux home]$ ls
gyz tester
[tester@archlinux home]$ pwd
/home
[tester@archlinux home]$

a2.........su  - tester:(允许操作)

[gyz@archlinux home]$ su - tester
Password:
[tester@archlinux ~]$ ls
[tester@archlinux ~]$ pwd
/home/tester
[tester@archlinux ~]$

a3.........sudo tester:(不允许操作)

[gyz@archlinux home]$ sudo tester
sudo: tester:找不到命令
[gyz@archlinux home]$

3,本质区别:

a,“su 用户”只是用户身份切换了,但是环境没有变,比如bash的配置,用的是切换前的用户的,我们pwd的时候,也发现了,切换前后,路径并没有变;

b,“su -  用户”不但用户身份切换了,而且环境也跟着变了,此时bash的配置,使用的root的配置,pwd的时候,发现它跑到了它的主目录下了,即我们cd ~的那个目录;

c,“sudo 命令”只是允许用户以root身份执行该命令,权利仅仅限于此次命令的执行,在/etc/sudoers(这个文件是only read的,可以先给个写权限,写完保存,再取消写权限,不过我看到说sudo visudo会保证该文件的读写安全性,即你在修改时,别人不能修改)里面修改;

d,“su 用户”“su - 用户”这里输入的密码是要切换到的用户的密码(如果是root,则输入root的密码),"sudo 命令"只是当且用户的密码;

e,“sudo 命令”也不牵扯切换用户的说法,所以sudo虽然麻烦,但是比较安全;

f,su -比su多了一些操作,主要是读取了root和系统的bash的配置文件;

g,sudo在部分脚本或者软甲内是不能用的,会看是不是全部的root身份;

h,su -等同于su过去后执行: bash /etc/profile和bash /root/.bashrc;

l,如果切换身份最好使用su - xxx。

 

推荐一个QQ群:374738050