LINUX核心命令实战总结八——用户管理及用户信息查询命令

1.1 useradd:创建用户

【功能说明】

命令useradd可用于创建新的用户或者更改用户的信息

【语法格式】

useradd   [options] [login]
useradd   [选项] [用户名]
useradd  -D  [options]

在使用useradd命令时,若不加任何参数选项,后面直接跟所添加的用户名,那么系统首先会读取/etc/login.defs(用户定义文件)和/etc/default/useradd(用户默认配置文件)文件中所定义的参数和规则,然后根据所设置的规则添加

【选项说明】

参数选项

解释说明(带*的为重点)

-c comment

新用户password文件中的说明栏(冒号分隔后的第五列)

-d home_dir

新用户每次登入时所使用的家目录

-e expire_data

用户终止日期。日期的指定格式为YYYY-MM-DD

-f inactive_days

用户过期几日后永久停权。当值为0时用户立即被停权,而当值为-1时则关闭此功能,预设值为-1.

-g initial_group

指定用户对应的用户组,用户组名必须为系统现已存在的名称(*

-G group,[...]

定义此用户为多个不同组的成员,每个用户组使用逗号(,)分隔。用户组名同-g选项的限制。默认值为用户的起始用户组。

-m

用户目录如不存在则自动建立

-M

不建立家目录,优先于/etc/login.dfs文件设定。创建虚拟化用户时一般不需要建立家目录,部署应用服务时则需要创建虚拟用户。

-n

默认情况下用户的用户与组用户的名称是相同的,如果命令添加了-n参数,就不会生成与用户同名的用户组了。

-r

此参数是用来建立

-s shell

用户登录后使用的shell名称,默认值为不填写,这样系统会帮助指定预设的登录shell(根据/etc/default/useradd预设的值)

-u uid

用户的ID值,这个值必须是唯一的,除非用-o选项,数字不可为负值(*

不加选项-D的参数选项及说明

命令useradd-D选项参数及说明:改变新建用户的预设值

参数选项

解释说明(带*的为重点)

-b default_home

定义用户家目录的基本目录,当前用户家目录不存在时,此目录将作为家目录生效

-e default_expire_data

用户账号停止日期,格式为YYYY-MM-DD,同useradd-e参数

-f default_inactive

用户过期后几日停权。同useradd -f参数

-g default_group

新用户起始用户名或ID,用户组名必须为现已存在的名称。用户组ID也必须为现已存在的用户组。同useradd-g参数

-s default_shell

用户登录后使用的shell名称,修改后新加入的用户都将使用此shell类型,同useradd -s

 【使用范例】

不加任何参数添加用户

[root@A ~]# useradd yanhh
[root@A ~]# ls -ld /home/yanhh
drwx------ 3 yanhh yanhh 4096 1月  29 10:34 /home/yanhh
[root@A ~]# grep -w yanhh /etc/passwd
yanhh:x:506:506::/home/yanhh:/bin/bash
[root@A ~]# grep -w yanhh /etc/shadow
yanhh:!!:17560:0:99999:7:::
[root@A ~]# grep -w yanhh /etc/group
yanhh:x:506:
[root@A ~]# grep -w yanhh /etc/gs
gshadow           gshadow-          gssapi_mech.conf  
[root@A ~]# grep -w yanhh /etc/gshadow
yanhh:!::
View Code

命令useradd-g-u参数,执行useradd[参数] username添加用户。

[root@A ~]# groupadd -g 801 sb
[root@A ~]# useradd -g sb -u 901 yanhuih
[root@A ~]# id yanhuih
uid=901(yanhuih) gid=801(sb) 组=801(sb)

命令useradd-M-s参数的例子

[root@A ~]# useradd -M -s /sbin/nologin yanyan
[root@A ~]# ls -ld /home/yanyan
ls: 无法访问/home/yanyan: 没有那个文件或目录
[root@A ~]# grep -w yanyan /etc/passwd
yanyan:x:902:902::/home/yanyan:/sbin/nologin

命令useradd-c-u-G-s-d-m-e-f等多个参数组合的综合例子

添加用户inca,并设置用户注释信息为“SYSUser”,UID指定为806,归属为用户组rootsb组成员,其shell类型为/bin/sh,设置家目录为/tmp/inca,用户过期时间为20180202,过期两天后停权。

[root@A ~]# useradd -u 806 -s /bin/sh -c SysUser -G root,sb -e "2018/02/02" -f 2 -d /tmp/inca inca
[root@A ~]# tail -1 /etc/passwd
inca:x:806:806:SysUser:/tmp/inca:/bin/sh

inca

x

:806

:1002

:SysUser

:/tmp/inca

:/bin/sh

账号名称

:账号密码

:账号UID

:账户组GID

:用户说明

:用户家目录

shell解释器

[root@A ~]# id inca
uid=806(inca) gid=806(inca) 组=806(inca),0(root),801(sb)
[root@A ~]# change -l inca
-bash: change: command not found
[root@A ~]# id inca
uid=806(inca) gid=806(inca) 组=806(inca),0(root),801(sb)
[root@A ~]# chage -l inca 
Last password change                                    : Jan 29, 2018
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : Feb 02, 2018
Minimum number of days between password change          : 0
Maximum number of days between password change          : 99999
Number of days of warning before password expires       : 7
[root@A ~]# tail -1 /etc/passwd
inca:x:806:806:SysUser:/tmp/inca:/bin/sh
[root@A ~]# tail -1 /etc/shadow
inca:!!:17560:0:99999:7:2:17564:
View Code

命令useradd -D参数的使用说明及案例实践

[root@A ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100                #依赖于/etc/login.defs的USERGROUPS_ENAB参数,如果为no,则此处控制
HOME=/home                #把用户的家目录建立在/home中
INACTIVE=-1                #是否启用用户过期停权,-1表示不启用
EXPIRE=                    #用户终止日期,不设置表示不启用
SHELL=/bin/bash                #新用户默认所用的shell类用
SKEL=/etc/skel                #配置新用户家目录的默认文件存放路径。前文提到的/etc/skell,就是在这                        里配置生效的,即当我们用useradd添加用户时,家目录下的文件,都是                        从这里配置的目录中复制过去的
CREATE_MAIL_SPOOL=yes        #创建mail文件
View Code

修改实践

[root@A ~]# cp /etc/default/useradd{,.bak}
[root@A ~]# useradd -D  -s /bin/sh
[root@A ~]# diff /etc/default/useradd{,.bak}
6c6
< SHELL=/bin/sh
---
> SHELL=/bin/bash
[root@A ~]# useradd -D -e "2018/07/12"
[root@A ~]# diff /etc/default/useradd{,.bak}
5,6c5,6
< EXPIRE=2018/07/12
< SHELL=/bin/sh
---
> EXPIRE=
> SHELL=/bin/bash
View Code

添加一个新用户

[root@A ~]# useradd nihao
[root@A ~]# tail -1 /etc/passwd
nihao:x:903:903::/home/nihao:/bin/sh
[root@A ~]# chage -l nihao
Last password change                                    : Jan 29, 2018
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : Jul 12, 2018
Minimum number of days between password change          : 0
Maximum number of days between password change          : 99999
Number of days of warning before password expires       : 7
[root@A ~]# cp /etc/default/useradd{.bak,}
View Code

1.2命令usermod:修改用户信息

【功能说明】

命令usermod用于修改系统用户已经存在的账户信息

【语法格式】

useradd   [options] [login]
useradd   [选项] [用户名]

【选项说明】

命令usermod的参数选项及说明

参数选项

解释说明(带*的为重点)

-c comment

修改password文件中的说明栏(冒号分隔后的第五列)

-d home_dir

修改户每次登入时所使用的家目录

-e expire_data

修改用户终止日期。日期的指定格式为YYYY-MM-DD

-f inactive_days

修改用户过期几日后永久停权。当值为0时用户立即被停权,而当值为-1时则关闭此功能,预设值为-1.

-g initial_group

修改指定用户对应的用户组,用户组名必须为系统现已存在的名称(*

-G group,[...]

定义此用户为多个不同组的成员,每个用户组使用逗号(,)分隔。用户组名同-g选项的限制。默认值为用户的起始用户组。

-m

用户目录如不存在则自动建立

-M

不建立家目录,优先于/etc/login.dfs文件设定。创建虚拟化用户时一般不需要建立家目录,部署应用服务时则需要创建虚拟用户。

-n

默认情况下用户的用户与组用户的名称是相同的,如果命令添加了-n参数,就不会生成与用户同名的用户组了。

-r

此参数是用来建立

-s shell

修改用户登录后使用的shell名称,默认值为不填写,这样系统会帮助指定预设的登录shell(根据/etc/default/useradd预设的值)

-u uid

修改用户的ID值,这个值必须是唯一的,除非用-o选项,数字不可为负值(*

-a

追加用户到用户组,仅与-G参数连用

-l

修改用户的账号名称

-L

锁定用户密码,不让用户修改密码

-U

解除密码锁定

【使用范例】

命令useradd-c-u-G-s-d-m-e-f等多个参数组合的综合例子

修改用户inca,并设置用户注释信息为“TmpUser”,UID指定为999,归属为用户组rootsbtech组成员,其shell类型为/sbin/nologin,设置家目录为/homeinca,用户过期时间为20190202,过期30天后停权。

[root@A ~]# groupadd tech 
[root@A ~]# usermod -u 999 -s /sbin/nologin -c TmpUser -G root,sb,tech -e "2019/02/02" -f 30 -d /home/inca inca
[root@A ~]# grep -w inca /etc/passwd
inca:x:999:806:TmpUser:/home/inca:/sbin/nologin
[root@A ~]# id inca
uid=999(inca) gid=806(inca) 组=806(inca),0(root),801(sb),904(tech)
[root@A ~]# grep -w inca /etc/shadow
inca:!!:17560:0:99999:7:30:17929:
[root@A ~]# chage -l
Usage: chage [options] [LOGIN]

Options:
  -d, --lastday LAST_DAY        set date of last password change to LAST_DAY
  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE
  -h, --help                    display this help message and exit
  -I, --inactive INACTIVE       set password inactive after expiration
                                to INACTIVE
  -l, --list                    show account aging information
  -m, --mindays MIN_DAYS        set minimum number of days before password
                                change to MIN_DAYS
  -M, --maxdays MAX_DAYS        set maximim number of days before password
                                change to MAX_DAYS
  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS
View Code

1.3 命令userdel:删除用户

【功能说明】

命令userdel命令用于删除指定的用户及与该用户相关的文件

【语法格式】

useradd   [options] [login]
useradd   [选项] [用户名]

命令userdel参数选项及说明

参数选项

解释说明(带*的为重点)

-f

强制删除用户,即使用户当前已登录

-r

删除用户的同时,删除与用户相关的所有文件

 【使用案例】

不加参数删除用户

[root@A ~]# tail -4 /etc/passwd
yanhuih:x:901:801::/home/yanhuih:/bin/bash
yanyan:x:902:902::/home/yanyan:/sbin/nologin
inca:x:999:806:TmpUser:/home/inca:/sbin/nologin
nihao:x:903:903::/home/nihao:/bin/sh
[root@A ~]# ll -d /home/yanhuih
drwx------ 3 yanhuih sb 4096 1月  29 10:51 /home/yanhuih
[root@A ~]# userdel yanhuih 
[root@A ~]# grep -w yanhuih /etc/passwd
[root@A ~]# ll -d /home/yanhuih
drwx------ 3 901 sb 4096 1月  29 10:51 /home/yanhuih
View Code

加参数-r删除用户及家目录

root@A ~]# tail -6 /etc/passwd
yhh2:x:504:504::/home/yhh2:/bin/bash
yhh3:x:505:505::/home/yhh3:/bin/bash
yanhh:x:506:506::/home/yanhh:/bin/bash
yanyan:x:902:902::/home/yanyan:/sbin/nologin
inca:x:999:806:TmpUser:/home/inca:/sbin/nologin
nihao:x:903:903::/home/nihao:/bin/sh
[root@A ~]# userdel -r yhh3
[root@A ~]# grep -w yhh3 /etc/paaswd
grep: /etc/paaswd: 没有那个文件或目录
[root@A ~]# ll -d /home/yhh3
ls: 无法访问/home/yhh3: 没有那个文件或目录
View Code

1.4 命令groupadd:创建新的用户组

【功能说明】

命令groupadd用于创建新的用户组。

【语法格式】

groupadd   [options] [login]
groupadd   [选项] [用户名]

【选项说明】

命令groupadd参数选项及说明

参数选项

解释说明(带*的为重点)

-g  gid

指定用户GID,除非接-o参数,否则GID值唯一且不为负,如果不指定-gGID500开始

-f

新增一个账户,强制覆盖一个已经存在的组账户

【使用范例】

[root@A ~]# tail -1 /etc/group
tech:x:904:inca
[root@A ~]# groupadd -g 666 test1
[root@A ~]# tail -1 /etc/group
test1:x:666:
[root@A ~]# tail -1 /etc/gshadow
test1:!::

1.5 命令groupdel:删除用户组

【功能说明】

命令groupdel用于删除指定的用户组,此命令的使用频率极低。

【语法格式】

groupadd    [login]
groupadd [用户名]

【使用案例】

[root@A ~]# groupdel root
groupdel: cannot remove the primary group of user 'root'
[root@A ~]# groupdel test1
[root@A ~]# grep -w test1 /etc/group

1.6 命令passwd:修改用户密码

【功能说明】

命令passwd可以修改用户及密码过期时间等内容,是工作中经常用到的命令,普通用户和超级用户都可以运行passwd命令,但普通用户只能更改自身的用户密码,超级用户root则可以设置或所有用户密码。

【语法格式】

passwd   [options] [username]
passwd   [选项] [用户名]

【选项说明】

参数选项

解释说明(带*的为重点)

-k

为密码已经过期的用户更新有效期

-l

锁定用户,被锁定的用户将不能登录,仅root用户有权使用该选项

--stdin

从标准输入读取密码字符串(*

-u

解除对用户的锁定。仅root用户有权使用该选项

-d

删除用户密码,使密码为空,仅root权限使用

-e

使用用户密码立即过期,将在用户下次登录时强制要求用户修改密码,仅root使用

-n

设置修改密码的最短天数,仅root用户使用

-x

设置修改密码的最长天数,仅root使用

-w

设置用户在密码过期前收到警告信息的天数,仅root使用

-i

设置密码过期多少天数禁用用户,仅root使用

-S

显示用户密码相关的简单描述,仅root使用

 【使用范例】

修改用户自身密码

[root@A ~]# passwd
更改用户 root 的密码 。
新的 密码:
无效的密码: 过于简单化/系统化
无效的密码: 过于简单
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新

设置及修改普通用户的密码

[root@A ~]# passwdyhh2
-bash: passwdyhh2: command not found
[root@A ~]# passwd yhh2
更改用户 yhh2 的密码 。
新的 密码:
无效的密码: 过于简单化/系统化
无效的密码: 过于简单
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新。
[root@A ~]# su - yhh2
[yhh2@A ~]$ passwd
更改用户 yhh2 的密码 。
为 yhh2 更改 STRESS 密码。
(当前)UNIX 密码:
新的 密码:
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新。
View Code

显示密码的信息

[root@A ~]# su - yhh2
[yhh2@A ~]$ passwd -S yhh2
只有根用户才能进行此操作。
[yhh2@A ~]$ su - root
密码:
[root@A ~]# passwd -S yhh2
yhh2 PS 2018-01-29 0 99999 7 -1 (密码已设置,使用 SHA512 加密。)
View Code

一条命令设置密码(批量设置密码)

[root@A ~]# echo "123456"|passwd --stdin yhh2
更改用户 yhh2 的密码 。
passwd: 所有的身份验证令牌已经成功更新。

要求yhh1用户7天内不能更改密码,60天以后必须修改密码,过期前10天通知用户,过期后30天禁止用户登录。

[root@A ~]# passwd -n 7 -x 60 -w 10 -i 30 yhh1
调整用户密码老化数据yhh1。
passwd: 操作成功
[root@A ~]# chage -l yhh1
Last password change                                    : Jan 23, 2018
Password expires                                        : Mar 24, 2018
Password inactive                                       : Apr 23, 2018
Account expires                                         : never
Minimum number of days between password change          : 7
Maximum number of days between password change          : 60
Number of days of warning before password expires       : 10
View Code

【生产案例】

批量建立10个用户stu01-stu10,并设置8位随机密码,要求不能使用shell的循环,只能使用命令及管道

第一步:生成符合题意10个用户名

[root@A ~]# echo stu{01..10}
stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10

第二步:使用tr命令将上述10个用户名竖行显示

[root@A ~]# echo stu{01..10}|tr " " "
"
stu01
stu02
stu03
stu04
stu05
stu06
stu07
stu08
stu09
stu10

第三步:在每行的前面加上useradd命令。既可以拼出添加用户的所有命令

[root@A ~]# echo stu{01..10}|tr " " "
"|sed 's#(.*)#useradd 1#g'
sed:-e 表达式 #1,字符 19:“s”命令的RHS非法引用1
[root@A ~]# echo stu{01..10}|tr " " "
"|sed  -r 's#(.*)#useradd 1#g'
useradd stu01
useradd stu02
useradd stu03
useradd stu04
useradd stu05
useradd stu06
useradd stu07
useradd stu08
useradd stu09
useradd stu10
View Code

第四步:定义随机8位随机变量

[root@A ~]# pass=$((RANDOM+88888888))
[root@A ~]# echo $pass
88904790

第五步:以第三步为基础,拼出 echo "随机密码"|passwd --stdin 用户名

[root@A ~]# echo stu{01..10}|tr " " "
"|sed  -r 's#(.*)#useradd 1 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin 1 #g'
useradd stu01 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu01 
useradd stu02 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu02 
useradd stu03 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu03 
useradd stu04 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu04 
useradd stu05 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu05 
useradd stu06 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu06 
useradd stu07 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu07 
useradd stu08 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu08 
useradd stu09 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu09 
useradd stu10 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu10

第六步:为了建立用户后更好登录,把用户和密码重定向保存在文件中(红色)

[root@A ~]# echo stu{01..10}|tr " " "
"|sed  -r 's#(.*)#useradd 1 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin 1;echo -e "1`echo "$pass"`">>/tmp/test #g'
useradd stu01 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu01;echo -e "stu01`echo "$pass"`">>/tmp/test 
useradd stu02 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu02;echo -e "stu02`echo "$pass"`">>/tmp/test 
useradd stu03 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu03;echo -e "stu03`echo "$pass"`">>/tmp/test 
useradd stu04 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu04;echo -e "stu04`echo "$pass"`">>/tmp/test 
useradd stu05 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu05;echo -e "stu05`echo "$pass"`">>/tmp/test 
useradd stu06 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu06;echo -e "stu06`echo "$pass"`">>/tmp/test 
useradd stu07 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu07;echo -e "stu07`echo "$pass"`">>/tmp/test 
useradd stu08 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu08;echo -e "stu08`echo "$pass"`">>/tmp/test 
useradd stu09 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu09;echo -e "stu09`echo "$pass"`">>/tmp/test 
useradd stu10 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu10;echo -e "stu10`echo "$pass"`">>/tmp/test 

第七步把拼出的命令交给bash运行

[root@A ~]# echo stu{01..10}|tr " " "
"|sed  -r 's#(.*)#useradd 1 ; pass=$((RANDOM+10000000));echo "$pass"|passwd --stdin 1;echo -e "1`echo "$pass"`">>/tmp/test #g'|bash
更改用户 stu01 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
更改用户 stu02 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
更改用户 stu03 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
更改用户 stu04 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
更改用户 stu05 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
更改用户 stu06 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
更改用户 stu07 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
更改用户 stu08 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
更改用户 stu09 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
更改用户 stu10 的密码 。
passwd: 所有的身份验证令牌已经成功更新。

拼接后命令解析

拼接后的命令拆解解析(最终命令)

解释说明

echo stu{01..10}

添加用户

pass=$((RANDOM+10000000)

密码随机数定义

echo "$pass"|passwd --stdin 1

非交互式设置密码

echo -e "1`echo "$pass"`">>/tmp/test

将密码生成到文件并记录

1.7命令chage:修改用户密码的有效期

 【功能说明】

 命令chage用于查看修改密码有效期,和passwd命令一样。

 【语法格式】

chage   [options] [username]
chage   [选项] [用户名]

【选项说明】

 命令chage的参数选项及说明

参数选项

解释说明(带*的为重点)

-d

设置上一次密码更改日期

-E

账号过期的日期。日期格式为YYYY-MM-DD

-I

设置密码过期多少天后禁用账号

-l

显示账号有效期的信息(*

-m

密码可更改的最小天数。默认为0,表示任何时候都可以更改密码

-M

密码保持有效的最大天数

-W

密码到期前,提前收到警告信息的天数

 【使用范例】

 要求yhh用户7天内不能更改密码,60天以后必须修改密码,过期前10天通知用户,过期后30天禁止用户登录。

[root@A ~]# chage -m 7 -M 60 -W 10 -I 30 yhh  
[root@A ~]# chage -l yhh
Last password change                                    : Jan 20, 2018
Password expires                                        : Mar 21, 2018
Password inactive                                       : Apr 20, 2018
Account expires                                         : never
Minimum number of days between password change          : 7
Maximum number of days between password change          : 60
Number of days of warning before password expires       : 10

1.8 命令chpasswd:批量更新新用户密码

 【功能说明】

命令chpasswd用于从标准输入中读取一定格式的用户名,密码来批量更新新用户的密码

【语法格式】

chpasswd   [options]
chpasswd   [选项] 

【选项说明】

命令chpasswd的参数选项及说明

参数选项

解释说明(带*的为重点)

-e

默认格式是明文密码,使用-e参数则需要加密的密码

【使用范例】

命令批量修密码

[root@A ~]# chpasswd 
root:5tgb%TGB
yhh:123456
yhh1:123456
yhh2:123456     #Ctrl+D结束

【生产案例】

批量建立10个用户stu01-stu10,并设置8位随机密码,要求不能使用shell的循环,只能使用命令及管道

第一步:生成符合题意10个用户名

第一步:添加10个用户

[root@client ~]# echo stu{01..10}|xargs -n 1 useradd 
[root@client ~]# tail /etc/passwd
stu01:x:501:501::/home/stu01:/bin/bash
stu02:x:502:502::/home/stu02:/bin/bash
stu03:x:503:503::/home/stu03:/bin/bash
stu04:x:504:504::/home/stu04:/bin/bash
stu05:x:505:505::/home/stu05:/bin/bash
stu06:x:506:506::/home/stu06:/bin/bash
stu07:x:507:507::/home/stu07:/bin/bash
stu08:x:508:508::/home/stu08:/bin/bash
stu09:x:509:509::/home/stu09:/bin/bash
stu10:x:510:510::/home/stu10:/bin/bash

“用户名”:密码的格式将添加的用户写入pass.txt

[root@client ~]# echo stu{01..10}:$((RANDOM+10000000))|tr " " "
">pass.txt 
[root@client ~]# cat pass.txt
stu01:10009601
stu02:10028735
stu03:10027066
stu04:10025467
stu05:10018531
stu06:10001398
stu07:10013916
stu08:10025178
stu09:10002575
stu10:10024838
View Code

第三步:chpasswd将文件pass.txt中读取相关的数据,为对应的用户设置冒号后免得密码

[root@client ~]# chpasswd <pass.txt
[root@client ~]# su - stu01
[stu01@client ~]$ su - stu02
密码:
[stu02@client ~]$ 

1.9 su:切换用户

【功能说明】

命令su 用于将当前用户切换到指定用户或者以指定用户的身份执行命令或程序

【语法格式】

su   [options] [username]
su   [选项] [用户名]

【选项说明】

参数选项

解释说明(带*的为重点)

--l--login

切换用户的同时,将用户的家目录、系统环境等重新按切换后的用户初始化(*

-c

shell传递单个命令(*

【使用范例】

切换用户例子

[root@A ~]# whoami
root
[root@A ~]# su yhh
[yhh@A root]$ pwd
/root
[yhh@A root]$ env|egrep "USER|MALL|PWD|LOGNAME"  
USER=yhh
PWD=/root
LOGNAME=yhh
View Code

- 切换后再测试

[root@A ~]# su - yhh
[yhh@A ~]$ env|egrep "USER|MALL|PWD|LOGNAME" 
USER=yhh
PWD=/home/yhh
LOGNAME=yhh

如何让系统在每一天开机时都能自动以普通用户启动指定的服务脚本

[root@A ~]#  echo "su - yhh -c " /bin/sh  /service/scripts/mac.py>> /etc/rc.local
[root@A ~]# tail -1 /etc/rc.local
su - yhh -c  /bin/sh /service/scripts/mac.py

1.10 命令visudo:编辑sudoers文件

【功能说明】

命令visudo是专门用来编辑/etc/sudoers这个文件的,同时提供语法检查等功能。/etc/sudoers文件是sudo命令的配置文件。

【语法格式】

visudo   [options]
visudo    [选项] 

【选项说明】

命令visudo的参数选项及说明

参数选项

解释说明(带*的为重点)

-c

手动执行语法检查

【使用范例】

执行visudo命令,既可以打开sudo的配置文件进行编辑。

[root@A ~]# visudo
root    ALL=(ALL)       ALL
stu01   ALL=(ALL)       /usr/sbin/useradd,/usr/sbin/userdel
stu02   ALL=(ALL)       ALL

命令sudo提权配置说明

待授权的用户或组

机器=(授权)

可执行的命令

user

MACHINE=

COMMANDS

Stu02

ALL=(ALL)

/usr/sbin/useradd,/usr/sbin/userdel

检查sudoer文件语法的例子

[root@A ~]# echo "su - yhh -c " /bin/sh  /service/scripts/mac.py
su - yhh -c  /bin/sh /service/scripts/mac.py
[root@A ~]#  echo "su - yhh -c " /bin/sh  /service/scripts/mac.py>> /etc/rc.local
[root@A ~]# tail -1 /etc/rc.local
su - yhh -c  /bin/sh /service/scripts/mac.py
[root@A ~]# visudo -c
/etc/sudoers:解析正确

1.11 命令sudo:以另外用户身份执行命令

【功能说明】

通过sudo命令,可以让普通用户在执行指令的命令或程序上,拥有超级用户的授权,进行分类,并且有针对地将不同的命令授予指定的普通用户,同时普通用户不需要知道root密码就可以得到授权,这个授权可以用visudo配置管理。

【语法格式】

sudo   [options]
sudo    [选项] 

命令sudo的参数选项及说明

参数选项

解释说明(带*的为重点)

-l

列出当前用户可以执行的命令,只有在sudoer文件里的用户才能使用该选项(*

-h

列出使用方法,并退出

-H

将环境变量的HOME(家目录)指定为要变更身份的使用者家目录(如果不加-u参数就是系统管理者root

-V

显示版本信息,并退出

-v

Sudo在第一次执行时,或者在N分钟内没有执行(N预设为五),则会询问密码,这个参数用于重新做一次确认

-u

以指定用户的身份执行命令,后面是除root以外用户,可以是用户,也是可以uid

-k

清除时间戳上的时间,下次再使用sudo时要再次输入密码

-K

-k类似,同时还要删除时间戳文件

-b

在后台执行指令的命令

-p

可以更改询问密码时的提示语

-e

不执行命令,而是修改文件,相当于命令sudo edit

【使用范例】

查看用户被visudo授权后拥有的权限

[yhh@A ~]$ ls /root
ls: 无法打开目录/root: 权限不够
[yhh@A ~]$ sudo ls /root
aa               data3  eth0   file2  hard_link    install.log.syslog  test       test.txt     yanhuihuang1
anaconda-ks.cfg  dir1   eth1   file3  hello.txt    md5.log             test1      yan          yanhuihuang2
data             dir2   file1  g      install.log  soft_link           test2.txt  yanhuihuang  yhh

1.12命令id:显示用户与用户组的信息

【功能说明】

命令id能够显示指定用户真实有效的用户IDUID)和组IDGID)等信息

【语法格式】

id   [options] [username]
id   [选项] [用户名]

【选项说明】

命令id的参数选项及说明

参数选项

解释说明(带*的为重点)

-g

显示用户组ID

-G

显示用户所属附加群组ID

-n

显示用户,所属群组或附加群组的名称,不显示数字

-r

显示实际ID

-u

显示用户ID

【使用范例】

[root@A ~]# id
uid=0(root) gid=0(root) 组=0(root)
[root@A ~]# id yhh
uid=500(yhh) gid=500(yhh) 组=500(yhh)
[root@A ~]# id -gn
root
[root@A ~]# id -u
0
[root@A ~]# id -un
root

1.13命令w:显示已登录用户信息

【功能说明】

命令w可以显示已经登录系统的用户,并显示用户正在执行的命令

【选项说明】

命令w的参数选项及说明

参数选项

解释说明(带*的为重点)

-h

不显示前面行标题信息

-u

忽略执行程序的名称,以及CPU时间的信息

-s

使用短输入格式

【使用范例】

[root@A ~]# w
 10:02:20 up 12 days, 13:36,  2 users,  load average: 0.07, 0.06, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    10.16.50.4       23Jan18 11:24m  0.34s  0.34s -bash
root     pts/1    10.16.50.4       24Jan18  0.00s  0.83s  0.00s w
[root@A ~]# w -h
root     pts/0    10.16.50.4       23Jan18 11:24m  0.34s  0.34s -bash
root     pts/1    10.16.50.4       24Jan18  0.00s  0.83s  0.00s w -h

1.14 命令who:显示已登录用户信息

【功能说明】

命令who能够显示已登录系统的用户,以及系统的启动时间等信息

【语法格式】

who    [options]
who   [选项] 

【选项说明】

命令who的参数及说明

参数选项

解释说明(带*的为重点)

-a

显示所有信息,相当于-b-d --login -p -r-t-T-u

-b

显示系统的启动时间

-d

显示已死进程

-H

显示标题,默认不显示

-l

显示登录进程

【使用范例】

[root@A ~]# who
root     pts/0        2018-01-23 17:25 (10.16.50.4)
root     pts/1        2018-01-24 09:20 (10.16.50.4)
[root@A ~]# who -b
         系统引导 2018-01-17 20:26
[root@A ~]# who -l
登录   tty1         2018-01-17 20:26              1946 id=1
登录   tty2         2018-01-17 20:26              1949 id=2
登录   tty3         2018-01-17 20:26              1956 id=3
登录   tty4         2018-01-17 20:26              1959 id=4
登录   tty5         2018-01-17 20:26              1962 id=5
登录   tty6         2018-01-17 20:26              1964 id=6
[root@A ~]# who -H
名称   线路       时间           备注
root     pts/0        2018-01-23 17:25 (10.16.50.4)
root     pts/1        2018-01-24 09:20 (10.16.50.4)
[root@A ~]# who -H -a
名称     线路       时间           空闲  进程号 备注   退出
           系统引导 2018-01-17 20:26
           运行级别 3 2018-01-17 20:26
登录     tty1         2018-01-17 20:26              1946 id=1
登录     tty2         2018-01-17 20:26              1949 id=2
登录     tty3         2018-01-17 20:26              1956 id=3
登录     tty4         2018-01-17 20:26              1959 id=4
登录     tty5         2018-01-17 20:26              1962 id=5
登录     tty6         2018-01-17 20:26              1964 id=6
root     + pts/0        2018-01-23 17:25 11:34       31982 (10.16.50.4)
root     + pts/1        2018-01-24 09:20   .          2820 (10.16.50.4)
[root@A ~]# who -d
[root@A ~]# 
View Code

1.15 users:显示已登录用户

【功能说明】

命令users可以显示已经登录系统的用户,如果是同一用户登录多次,则登录几次就会显示几次用户名

【使用范例】

显示已经登录用户

[root@A ~]# users
root root

1.16 whoami:显示当前登录的用户名

【功能说明】

命令whoami用于显示当前登录的用户名。

【使用范例】

[root@A ~]# whoami
root

1.17 命令last:显示用户登录列表

【功能说明】

命令last能够从日志文件/var/log/wtmp读取信息并显示用户最近的登录列表

【语法格式】

last   [options]
last   [选项] 

【选项说明】

命令last的参数及说明

参数选项

解释说明(带*的为重点)

-num

-n num

指定显示结果的行数(*

【使用范例】

显示用户最近登录的列表

[root@A ~]# last -10
root     pts/1        10.16.50.4       Wed Jan 24 09:20   still logged in   
root     pts/0        10.16.50.4       Tue Jan 23 17:25   still logged in   
root     pts/1        10.16.50.4       Sun Jan 21 21:07 - 17:25 (1+20:17)   
root     pts/0        10.16.50.4       Sat Jan 20 20:53 - 16:59 (1+20:05)   
root     pts/0        10.16.50.4       Thu Jan 18 09:29 - 20:47 (2+11:17)   
reboot   system boot  2.6.32-504.el6.x Wed Jan 17 20:26 - 10:25 (12+13:59)  
root     pts/0        10.16.50.4       Wed Jan 17 20:24 - down   (00:01)    
reboot   system boot  2.6.32-504.el6.x Wed Jan 17 20:22 - 20:25  (00:03)    
root     pts/0        10.16.50.4       Wed Jan 17 20:02 - down   (00:16)    
root     pts/1        10.16.50.4       Sun Dec 24 23:25 - 15:57 (9+16:32)   

wtmp begins Tue Jul  5 11:12:08 2016

1.18 命令lastab:显示用户登录失败的记录

【功能说明】

命令lastab可以从日志文件/var/log/btmp中读取信息,并显示用户登录失败的记录,用于发现系统登录异常

【语法格式】

lastb   [options]
lastb   [选项] 

【选项说明】

命令lastb的参数及说明

参数选项

解释说明(带*的为重点)

-num

-n num

指定显示结果的行数(*

【使用范例】

显示用户登录失败的列表

[root@A ~]# lastb
root     ssh:notty    10.16.50.4       Tue Jan 30 10:31 - 10:31  (00:00)    

btmp begins Tue Jan 30 10:31:04 2018

1.19 命令lastlog:显示所有用户的最近登录记录

【功能说明】

命令lastlog从日志文件/var/log/lastlog中读取信息,并显示所有用户的最近登录信息,用于查看系统是否有异常登录。

【使用范例】

显示所有用户的最近登陆记录

[root@A ~]# lastb
root     ssh:notty    10.16.50.4       Tue Jan 30 10:31 - 10:31  (00:00)    

btmp begins Tue Jan 30 10:31:04 2018
[root@A ~]# lastlog
用户名           端口     来自             最后登陆时间
root             pts/2    10.16.50.4       二 1月 30 10:30:34 +0800 2018
bin                                        **从未登录过**
daemon                                     **从未登录过**
adm                                        **从未登录过**
lp                                         **从未登录过**
sync                           
原文地址:https://www.cnblogs.com/huihuangyan/p/13690536.html