Linux中su命令与sudo命令

时间:2022-07-19 17:00:51

ps:前几天,实验室的同学问到为什么sudo cd命令不行,我当时帮他解决了这个问题,但是我想了想我自己也不太清楚为什么sudo cd不行,而需要用到su root然后再使用cd命令。所以自己在网上找了一些资料,并整理了一下发表出来,在自己忘了的时候自己也可以查阅一下!

一、Linux下的su命令

su命令的全称就是switch user,顾名思义,其意思就是切换用户身份,使得用户可以在shell中以其他身份运行程序。除非该用户自己是超级用户,那么切换用户身份时均需要密码。该命令的语法一般如下:

su[-flmp][--help][--version][-][-c<指令>][-s<shell>][欲切换账户]。

参数解释:

-c<指令>或--command=<指令>:执行一个指令后就恢复原来的身份;
-f或--fast:使shell不用读取启动文件,适用于csh和tsch;
-,-l,--login:切换用户时,使环境变量(home,shell,user,logname,path等)和欲切换的用户相同、不使用则取得用户的临时权限,环境变量不发生变化;
-m,-p,:变更身份时,保留环境变量不变;
-s<shell>,--shell=<shell>:指定执行命令的shell;
--help:显示帮助;
--version:显示版本信息;
用户 账户:指定欲切换用户,默认切换为root。
注:root权限极高,几乎可以做任何事,谨慎使用,平时使用普通用户登录,必要时临时切换为root,用完即切换回普通用户。


简单示例:
假设一个普通用户trunk,首先以trunk登陆:
su root 临时切换到root用户,需要输入密码,切换后环境变量不变,取得root的部分权限,且只能使用trunk用户path路径中的命令,不能使用root用户path路径中的独有命令。
su - root 切换为root用户,需要输入密码,切换后环境变量改变,几乎可以不受限制的做任何事。
su - trunk 从root切换回普通用户,无需输入密码,切换后只拥有trunk权限。


su 与 su - 的区别:
su username
shell会切换到username的身份,但是shell的环境变量还是切换前的一样,注意,这样可能会运行不了username的某些程序。
su - username shell会切换到username的身份,但是shell的环境变量会变成username身份下的环境变量
所以建议在切换用户时使用后一种用法。

二、Linux下的sudo命令

sudo命令的允许系统管理员让普通用户执行一些或全部的需要root权限的命令的工具。该工具可以减少root用户的登录和管理时间,提高了系统安全性。因为sudo命令不需要root的密码,只需要用户输入其自身的密码即可临时获得root权限来运行一些外部命令。该权限是临时的,一般命令执行完之后shell就会回到当前的用户身份。

sudo的语法一般如下

sudo [ -Vhl LvkKsHPSb ] │ [ -p prompt ] [ -c class│- ] [ -a auth_type ] [-u username│#uid ] command

参数解释:

-V 显示版本编号
-h 会显示版本编号及指令的使用方式说明
-l 显示出自己(执行 sudo 的使用者)的权限
-v 因为 sudo 在第一次执行时或是在 N 分钟内没有执行(N 预设为五)会问密码,这个参数是重新做一次确认,如果超过 N 分钟,也会问密码
-k 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟)
-b 将要执行的指令放在背景执行
-p prompt 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称
-u username/#uid 不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 username 的身份执行指令(#uid 为该 username 的使用者号码)
-s 执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell
-H 将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录(如不加 -u 参数就是系统管理者 root )
command 要以系统管理者身份(或以 -u 更改为其他人)执行的指令
简单示例:

1. sudo -l 列出目前的权限
若用户不在sudoers中会提示不能运行sudo命令,存在则会显示详细的权限。
  2. sudo -V 列出 sudo 的版本资讯
  3. 指令名称:sudoers(在fc5下显示不能找到此命令,但用man可以查到其用法。)用来显示可以使用sudo的用户

常见错误:

sudo cd /xxx   提示command not found

因为cd是shell自带的命令,是属于内部命令,而sudo只能以临时的root身份来调用外部命令,所以会提示command not found这个错误。