文件及内容处理 - id、su

1. id:查看用户的uid,gid及归属的用户组

id命令的功能说明

id 命令用于显示用户的 ID,以及所属群组的 ID。id 会显示用户以及所属群组的实际与有效ID 。若两个 ID 相同,则仅显示实际 ID 。若仅指定用户名称,则显示目前用户的 ID。

id命令的语法格式

id [OPTION]... [USER]
id [-gGnru][--help][--version][用户名称]

id命令的常用参数说明:

id 参数不多,表1为 id 命令的参数及说明:

表1: id 命令的参数及说明

参数选项 解释说明
-g或--group 显示用户所属群组的ID。
-G或--groups 显示用户所属附加群组的ID。
-n或--name 显示用户,所属群组或附加群组的名称。
-r或--real 显示实际ID。
-u或--user 显示用户ID。
-help 显示帮助。
-version 显示版本信息。

id命令的实践操作

范例1: 不加参数,默认当前用户

[root@m01 ~]# id
uid=0(root) gid=0(root) groups=0(root)

范例2: 显示当前用户的GID

[root@m01 ~]# id -g
0

范例3: 显示当前用户的UID

[root@m01 ~]# id -u
0

范例4: 显示指定用户信息

[root@m01 ~]# id usertest
uid=1005(usertest) gid=1005(usertest) groups=1005(usertest)

2. su:切换用户身份

su命令的功能说明

 su 命令用于变更为其他使用者的身份,除 root 外,需要键入该使用者的密码。使用权限:所有使用者。

su命令的语法格式

su [options...] [-] [user [args...]]
su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]]

su命令的常用参数说明:

su 参数不多,表1为 su 命令的参数及说明:

表1: su 命令的参数及说明

参数选项 解释说明
-f 或 --fast 不必读启动档(如 csh.cshrc 等),仅用于 csh 或 tcsh
-m -p 或 --preserve-environment 执行 su 时不改变环境变数
-c command 或 --command=command 变更为帐号为 USER 的使用者并执行指令(command)后再变回原来使用者
-s shell 或 --shell=shell 指定要执行的 shell (bash csh tcsh 等),预设值为 /etc/passwd 内的该使用者(USER) shell
--help 显示说明文件
--version 显示版本资讯
- -l 或 --login 这个参数加了之后,就好像是重新 login 为该使用者一样,大部份环境变数(HOME SHELL USER等等)都是以该使用者(USER)为主,并且工作目录也会改变,如果没有指定 USER ,内定是 root
USER 欲变更的使用者帐号
ARG 传入新的 shell 参数

su命令的实践操作

范例1: 由超级用户root 切换到普通用户 usertest(加参数 -)

[root@m01 ~]# whoami
root #当前用户为root
[root@m01 ~]# su - usertest
Last login: Thu May 23 15:07:22 CST 2019 on pts/0
[usertest@m01 ~]$ whoami
usertest #切换到普通用户
[usertest@m01 ~]$ env |grep "^PWD"
PWD=/home/usertest #家目录改变了, 是因为加了参数 -

范例2: 由普通用户 usertest 切换到超级用户root (不加参数 -)

[usertest@m01 ~]$ whoami
usertest
[usertest@m01 ~]$ su root
Password: #需要输入root密码
[root@m01 /home/usertest]# whoami
root
[root@m01 /home/usertest]# env |grep "^PWD"
PWD=/home/usertest #家目录没有变,环境变量也没有变

退到普通用户重新测试一下:

[usertest@m01 ~]$ whoami
usertest
[usertest@m01 ~]$ su - root
Password:
Last login: Thu May 23 15:16:39 CST 2019 on pts/0
[root@m01 ~]# env |grep "^PWD"
PWD=/root #连环境变量一起切换了

范例3: 普通用户使用 root 身份执行命令

[usertest@m01 ~]$ whoami
usertest #当前用户
[usertest@m01 ~]$ ls -l /root #先直接查看
ls: cannot open directory /root: Permission denied #没有权限
[usertest@m01 ~]$ su - -c "ls -l /root" #使用参数
Password: #输入root密码
total 0
drwxr-xr-x 4 root root 128 May 17 09:55 key_client #显示内容
drwxr-xr-x 4 root root 147 May 17 14:39 key_server

范例4: 让系统开机时自动以普通用户启动指定的服务脚本

[root@m01 ~]# tail -1 /etc/rc.local
su - usertest -c '/bin/sh /server/scripts/deploy.sh'

企业面试案例:

使用 oldboy用户登录到 Linux系统后,发现提示符为如下所示异常情况,请问该如何恢复到正常的 Linux命令行提示符情况?

-bash-4.2$
-bash-4.2$

解答:
首先模拟故障重现,如下步骤:

[root@oldboyedu  ~]# su - oldboy          <--> 切换oldboy用户下
Last login: Sat Mar 30 09:42:31 CST 2019 from 10.0.0.1 on pts/0
[oldboy@oldboyedu  ~]$ rm -f .bash*       <-->故障原因就是用户家目录下的环境变量不存在了
[oldboy@oldboyedu  ~]$ logout             <-->快捷键(Ctrl+d)退出当前环境
[root@oldboyedu  ~]# su - oldboy          <-->重新切到oldboy用户下
Last login: Sat Mar 30 12:19:06 CST 2019 on pts/0
-bash-4.2$                                <-->故障重现

下面是故障恢复方案及步骤:
方法1:永久生效(正确方法)

-bash-4.2$ cp /etc/skel/.bash* ~/            <-->从/etc/skel中将所有环境变量文件复制回来,注意用户
-bash-4.2$ logout                            <-->快捷键(Ctrl+d)退出当前环境
[root@oldboyedu  ~]# su - oldboy             <-->重新切到oldboy用户下
Last login: Sat Mar 30 12:19:55 CST 2019 on pts/0
[oldboy@oldboyedu  ~]$                       <-->故障排除
-bash-4.2$ source ./.bash_profile ./.bashrc  <-->若还未生效,则执行此命令。
[oldboy@oldboyedu  ~]$                       <-->故障排除
-bash-4.2$ cp /etc/skel/.bash* .             <-->没权限拷贝怎么办
cp: cannot create regular file ‘./.bash_logout’: Permission denied
cp: cannot create regular file ‘./.bash_profile’: Permission denied
cp: cannot create regular file ‘./.bashrc’: Permission denied
-bash-4.2$ logout                            <-->重新切到oldboy用户下
[root@oldboyedu  ~]# cd /home/oldboy
[root@oldboyedu  /home/oldboy# cp /etc/skel/.bash* .
[root@oldboyedu  /home/oldboy]# su - oldboy
Last login: Sat Mar 30 17:00:52 CST 2019 on pts/0
[oldboy@oldboyedu  ~]$ 

方法2:临时生效(不推荐)
执行以下命令:

export PS1='[\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\] \[\e[31;1m\] \w\[\e[0m\]]\$'

今天就写到这里,有什么疑问或出现什么错误,随时欢迎大神们发表评论指点迷津

Shell命令-用户用户组管理之id、su的更多相关文章

  1. Shell命令-用户用户组管理之useradd、usermod

    文件及内容处理 - useradd.usermod 1. useradd:添加用户 useradd命令的功能说明 useradd 命令用于建立用户帐号.useradd 可用来建立用户帐号.帐号建好之后 ...

  2. Shell命令-用户用户组管理之visudo、sudo

    文件及内容处理 - visudo.sudo 1. visudo:编辑/etc/sudoers文件的专属命令 visudo命令的功能说明 visudo命令专门用来编辑/etc/sudoers这个文件的. ...

  3. Shell命令-用户用户组管理之userdel、groupadd

    文件及内容处理 - userdel.groupadd 1. userdel:删除用户 userdel命令的功能说明 userdel 命令用于删除用户帐号.userdel 可删除用户帐号与相关的文件.若 ...

  4. Shell命令-用户用户组管理之passwd、chage

    文件及内容处理 - passwd.chage 1. passwd:修改用户密码 passwd命令的功能说明 passwd命令用来更改使用者的密码 passwd命令的语法格式 passwd [-k] [ ...

  5. Linux命令--用户用户组管理

    新增用户组 : groupadd groupadd [-g GID] 组名 不加-g 则按照系统默认的gid创建组,跟用户一样,gid也是从500开始的 修改用户组信息 : groupmod grou ...

  6. 数据仓库003 - 复习Linux shell命令 - 用户用户组 sudo 权限 du-sh find 

    一.用户用户组 [root@localhost ~]# ll /usr/sbin/user* -rwxr-x--- root root -- /usr/sbin/useradd -rwxr-x--- ...

  7. Linux学习之用户管理命令与用户组管理命令(十五)

    Linux学习之用户管理命令与用户组管理命令 目录 用户管理命令 用户添加命令useradd 修改用户密码passwd 修改用户信息usermod 修改用户密码状态chage 删除用户userdel ...

  8. linux笔记:用户管理命令和用户组管理命令

    用户管理命令 命令名称:useradd功能:添加用户(添加完后不能立即使用,必须用passwd修改用户密码后才能使用)用法:useradd [选项] 用户名选项参数:-u 手工指定用户的UID-d 手 ...

  9. linux下用户管理命令、用户组管理命令

    useradd 添加新用户 1.基本语法 useradd 用户名                   (功能描述:添加新用户) useradd -g 组名 用户名      (功能描述:添加新用户到某 ...

随机推荐

  1. iOS常用算法之单链表查找倒数第n个节点(图解)

    拿到题目, 首先要先了解链表数据结构, 如下图: 常规思路: 利用数组, 遍历整个单链表, 将每个节点装入数组中, 最终拿到数组根据索引(数组长度-1-n)就得到了倒数第n个元素, 这里要注意从数组中 ...

  2. QT--HTTP文件下载器

    QT--HTTP文件下载器 1.pro文件添加 QT       += core gui network 2.头文件 #include <QNetworkAccessManager> #i ...

  3. SQL Prompt提示和SQL默认智能提示冲突解决

  4. python3 邮件方式发送测试报告

    以邮件方式发送测试报告 import smtplib from email.mime.text import MIMEText class SendEmail: """邮 ...

  5. SPA项目之CRUD+表单验证

    1. 表单验证 Form组件提供了表单验证的功能,只需要通过 rules 属性传入约定的验证规则, 并将Form-Item的prop属性设置为需校验的字段名即可 <el-dialog :titl ...

  6. 设计模式-Facade(结构型模式) 针对 最终类的实现通过一系列类的相关操作,重点关注 起始与结尾的操作。

    以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码 //Facade.h #pragma once class Subsystem1 { public: Subsystem1() ...

  7. 第05组 Alpha冲刺(3/4)

    第05组 Alpha冲刺(3/4) 队名:天码行空 组长博客连接 作业博客连接 团队燃尽图(共享): GitHub当日代码/文档签入记录展示(共享): 组员情况: 组员1:卢欢(组长) 过去两天完成了 ...

  8. IT兄弟连 Java语法教程 流程控制语句 分支结构语句3

    3  if-else if-else条件语句 if-else if-else的完整形式如下: if(判断条件A){ A语句块(判断条件A的值为true,执行) }else if(判断条件B){ B语句 ...

  9. 常用的js、java编码解码方法

    前言 前后端直接传输数据进行交互不就行了吗,为什么还要进行编码解码?正常情况下直接交互没问题,但当有类似以下情况出现时就需要进行编码再进行传输: 1.编码格式难以统一,导致数据交互过程出现中文乱码等问 ...

  10. 面试官,我会写二分查找法!对,没有 bug 的那种!

    前言科普 第一篇二分搜索论文是 1946 年发表,然而第一个没有 bug 的二分查找法却是在 1962 年才出现,中间用了 16 年的时间. 2019 年的你,在面试的过程中能手写出没有 bug 的二 ...