su与sudo这两个命令几乎是linux里面最常用的,然而这两个命令却并不简单.
su
su [选项]... [-] [USER [ARG]...]
su主要参数
-f , --fast:不必读启动文件(如 csh.cshrc 等),仅用于csh或tcsh两种Shell。
-l , --login:加了这个参数之后,就似乎是重新登陆为该使用者一样,大部分环境变量(例如HOME、SHELL和USER等)都是以该使用者(USER)为主,并且工作目录也会改变。假如没有指定USER,缺省情况是root。
-m, -p ,--preserve-environment:执行su时不改变环境变数。
-c command:变更账号为USER的使用者,并执行指令(command)后再变回原来使用者。
USER:欲变更的使用者账号,ARG传入新的Shell参数。
变更账号为超级用户,并在执行fdisk命令后还原使用者。 su -c fdisk root
最容易混淆的莫过于 su - username1与su username2这两种用法
su - username1 这种用法其实是将username1的环境变量加载进来。而su username2 是在保持当前环境变量的情况下,切换到username2.
具体地说:
加上'-'是为了切换环境变量,这是在用户登陆时切换为该用户默认的环境变量。例如:
su - root 等价于 su - 意味着登陆后会加载root用户的环境变量。 最常用的环境变量莫过于登陆后系统会将所处目录设为/home/username
[linux@localhost]$pwd
/home/linux
[linux@localhost]$ su - username
Password: 此时输入密码
[username@localhost]$ passwd
[username@localhost]$pwd
/home/username
[linux@localhost]$ su username2
Password: 此时输入密码
[username2@localhost]$ passwd
/home/username
上述例子说明,su - username 后home目录变成了username的home目录。然而使用 su username2后,用户依然处于/home/username目录下。
sudo
sudo是最常用的用来暂时提升权限的命令.
sudo [-D level] -h | -K | -k | -V
sudo -v [-AknS] [-D level] [-g group name|#gid] [-p prompt]
[-u user name|#uid]
sudo -l[l] [-AknS] [-D level] [-g group name|#gid] [-p prompt]
[-U user name] [-u user name|#uid] [command]
sudo [-AbEHnPS] [-C fd] [-D level] [-g group name|#gid] [-p prompt]
[-u user name|#uid] [VAR=value] [-i | -s] [command]
sudoedit [-AnS] [-C fd] [-D level] [-g group name|#gid] [-p prompt]
[-u user name|#uid] file ...
常用用法
sudo -l :列出当前用户可以执行的命令。只有在sudoers里的用户才能使用该选项。
sudo -u 用户名 命令:以指定用户的身份执行命令。后面的用户是除root以外的,可以是用户名,也可以是#uid。
sudo -k:清除“入场卷”上的时间,下次再使用sudo时要再输入密码。
sudo -b 命令:在后台执行指定的命令。
sudo -p 提示语:可以更改询问密码的提示语,其中%u会代换为使用者帐号名称,%h会显示主机名称。非常人性化的设计。
sudo -e 文件名:不是执行命令,而是修改文件,相当于命令sudoedit。