6.1、compgen语法
compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]compgen用法: compgen [-abcdefgjksuv] [-o 选项] [-A 动作] [-G 全局模式] [-W 词语列表] [-F 函数] [-C 命令] [-X 过滤模式] [-P 前缀] [-S 后缀] [词语]
选项:
-a 列出所有别名;相关:alias
-b 列出bash内置命令
-c 列出所有可用命令
-d 列出当前目录下所有目录
-e 列出全局变量;相关:export
-f 列出当前目录所有文件
-g 列出系统所有的组
-j 列出后台执行的作业
-k 列出shell保留字
-s 列出所有的service
-u 列出系统所有的用户
-v 列出shell所有变量
6.2、compgen用户相关选项
# 列出系统所有的用户
compgen -u
# 列出系统所有的组
compgen -g
切换用户登录
前言
① Linux 操作系统有不同类型的用户,用户有不同类型的权限。
②并非所有用户都可以执行所有命令,也不是所有用户都可以切换到其他用户。
③ su 命令用于切换当前用户身份到指定用户或者以指定用户的身份执行命令或程序。
④ su 是最简单的用户切换命令,通过该命令可以实现任何身份的切换,包括从普通用户切换为 root 用户、从 root 用户切换为普通用户以及普通用户之间的切换。
⑤普通用户切换到root用户,可以使用su -- 或su root,但是必须输入root密码才能完成切换;
⑥root用户切换到普通用户,可以直接使用su username,不需要输入任何密码即可完成切换。
⑦su 和 su - 的区别:
注意,使用 su 命令时,有 - 和没有 - 的命令执行效果是完全不同的;(理解:即有 - 选项,切换用户身份更彻底;反之,只切换了一部分,这会导致某些命令运行出现问题或错误(例如无法使用 service 命令))
- 选项表示在切换用户身份的同时,连当前使用的环境变量也切换成指定用户的。(环境变量是用来定义操作系统环境的,因此如果系统环境没有随用户身份切换,很多命令无法正确执行。)
⑧Linux 中的各种用户类型:
一般来说,Linux 系统中有三种类型的用户。
系统用户:这些用户是在 Linux 系统中自动创建的,以便能够运行服务或应用系统,且不会登录系统(一般来说,我们不能使用这些用户登录)。
常规用户:可以登录到系统中的用户,这些用户中的每一个在系统中都拥有不同的权限和级别,这些权限和级别是由他们所属的组授予的。
超级用户:可以执行高级任务或关键任务的系统管理员用户。
语法格式
su [选项] [用户名]
常用参数:
-
当前用户不仅切换为指定用户的身份,同时所用的工作环境也切换为此用户的环境(包括 PATH 变量、MAIL 变量等);使用 - 选项可省略用户名,默认会切换为 root 用户。
-c或--command
执行完指定的指令后,即恢复原来的身份
-f或--fast
适用于csh与tsch,使shell不用去读取启动文件
-l或--login
改变身份时,也同时变更工作目录,以及HOME,SHELL,USER,logname,此外,也会变更PATH变量
-m,-p或--preserve-environment
变更身份时,不要变更环境变量
-s或--shell
指定要执行的shell
--help
显示帮助信息
--version
显示版本信息
实例
1、
[lamp@localhost ~]$ su -root
密码: <-- 此处输入 root 用户的密码
# "-" 代表连带环境变量一起切换,不能省略
2、
[lamp@localhost ~]$ whoami
lamp
#当前我是lamp
[lamp@localhost ~]$ su - -c "useradd user1" root
密码:
#不切换成root,但是执行useradd命令添加user1用户
[lamp@localhost ~]$ whoami
lamp
#我还是lamp
[lamp@localhost ~]$ grep "user1' /etc/passwd
userl:x:502:504::/home/user1:/bin/bash
#user用户已经添加了
3、终端命令行切换普通用户
当使用 Linux 系统时,我们使用一个用户登录,然后在同一个命令行会话中切换到另一个用户。要切换到另一个用户,可以使用命令 su -
$ su - janedoe Password:
在上面的示例中,你需要知道 janedoe用户 的密码才能切换到该用户。这是必须的,否则的话将存在安全风险。
4、终端命令行切换root用户
出于安全原因,一些系统的 root 用户会被阻止直接登录,不管是本地还是远程。也就是说,Linux操作系统不会接受使用 root 用户登录系统,即使密码正确。
如果想要以root角色在终端命令行中执行操作,可以使用sudo命令。
sudo 命令可以允许我们像 root 用户一样执行任何操作,而不需要知道 root 用户的密码。你只需要知道自己用户的密码,且该用户需要在 sudo 组中即可。
同样出于安全考虑,即使在某些允许 root 用户登录的系统中,也最好使用 sudo 来运行 root 权限的操作,如下所示:
sudo
但如果要更改为 root 用户,以便所有后续命令都以 root 用户身份运行,则可以使用:
sudo -i
在这里需要使用自己用户的密码,而不是 root 账户的密码:
作为一个 sudo 用户,可以将其他用户添加到 sudo 组中来创建一个 sudo 用户。
Linux 系统可以让我们使用 su 或者 sudo 命令切换用户或执行高级命令。但是需要记住,拥有超级用户(sudo)的权限,需要有更强的安全意识。
5、su username切换登录用户与su -切换登录用户的区别
普通用户 lamp 通过 su 命令切换成 root 用户,但没有使用 - 选项,这样情况下,虽然看似是 root 用户,但系统中的 $PATH 环境变量依然是 lamp 的(而不是 root 的),因此当前工作环境中,并不包含 /sbin、/usr/sbin等超级用户命令的保存路径,这就导致很多管理员命令根本无法使用。不仅如此,当 root 用户接受邮件时,会发现收到的是 lamp 用户的邮件,因为环境变量 $MAIL 也没有切换。
即在不使用 su - 的情况下,虽然用户身份成功切换,但环境变量依旧用的是原用户的,切换并不完整。