RHCE(第二周用户管理和io输入输出)
一:初识用户和用户组
一:用户
用户:就是能够登录系统,获得系统中的资源。执行命令,每一个用户都有唯一的uid,系统识别的是uid,不是用户名
1:linux中用户的分类
超级管理员:root用户,拥有最高的权限 uid为0
普通用户:有一定的权限,可以通过root用户分配 用户的uid为 1000到60000
系统用户:不能登录,为服务而生的,专门运行服务的 uid为 1到999
uid:就是用户的身份标识符
可以修改/etc/login.defs来修改最大的uid
2:用户信息保存的文件
/etc/passwd
字段的介绍:
root:x:0:0:root:/root:/bin/bash
root:用户名
x:密码占位符,去掉x就不需要输入密码了
0:uid
0:gid
root:用户描述信息
/root:用户的家目录
/bin/bash:用户登录的shell
2-1)登陆shell
/bin/bash就是登录shell
/sbin/nologin就是非登录shell,但是可以通过 su - apache -s /bin/bash 临时登录
3:用户密码存放的文件/etc/shadow
经过加密后的密码保存到这里了
q2:!!:19744:0:99999:7:::
字段解释:
q2:用户名
!!:表示没有密码,*也表示没有密码,!表示账户被锁定了,
19744:表示最近一次修改密码的日期(从1970年1月1日开始到现在)
0:表示密码的最短期限,0表示没有期限
99999:表示密码的最长期限,99999表示没有期限
7:表示密码过期前的警告天数,就是在最长期限的7天前
第7个字段:密码的锁定日期(就是过期后还能用多少天,才被锁定,不能登录了)
第8个字段:账户的失效日期,从1970年开始算,就是不能用了
所以密码的有效时间=最长期限+密码的锁定日期
二:用户组
用户组就是为了更加的方便管理用户
1:用户组的分类
私有组:创建用户时,会自动的创建私有组, 该私有组是用户的唯一的私有组
附加组:同时也会创建附加组,就是允许有多个用户加入附加组中
2:用户组存放的文件/etc/group
root:x:0:
root:用户组
x:密码占位符
0:用户的gid
:这个就是附加组
2-1)关于这个附加组的说法
第一种:a是it组里面的成员
第二种:it组是a的附加组
2-2)为什么没有显示自己的用户root
因为最后一个字段显示的是这个组里面的成员,显示的是附加组,默认的情况下,自己不会加入到自己的附加组里面去的
2-3)可以临时获得其他组里面的权限
[root@server /]# gpasswd q7 正在修改 q7 组的密码 新密码: 请重新输入新密码: [root@server /]# su - q10 fedora [q10@server ~]$ newgrp q7 密码: [q10@server ~]$ id 用户id=1001(q10) 组id=1002(q7) 组=1002(q7),1001(q10) 上下文=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [q10@server ~]$
通过临时登录用户组,获得了q7附加组的权限,就是一种临时获得的权限 q10这个用户临时加入到q7这个组内了
3:用户组密码存放文件
用户组密码保存到/etc/gshadow
q1:!::q2
字段的解释:
q1:用户组名字
!:表示用户组的密码
第三个字段:表示用户组的管理员,就是使用普通用户来管理用户组
q2:表示这个组内的成员
二:用户和用户组的管理
一:用户管理
1:创建用户(useradd)
选项:
| -u | 用户的uid |
| -g | 用户的gid |
| -G | 用户的附加组 |
| -s | 用户登录的shell |
| -c | 用户的描述信息 |
| -d | 用户的家目录 |
说明:-d这个家目录没有的话,会自动的创建出来,如果之前已经创建好了家目录,那么有可能会造成用户在用户的家目录下创建不了文件,因为是在之前创建的,有可能是root的权限,所以,一般如果有家目录的话,删除掉已经存在的家目录,再来指定家目录
没有指定uid的话,会默认以最大的uid+1来创建
2:修改用户(usermod)
useradd上面的选项都有
| -l | 修改用户名 |
| -aG | 添加附加组中去,不带上a的话,就是覆盖的加入 |
| -md | 就是会自动的创建家目录,并且之前有的话,移动家目录的位置,并且里面的文件也还在 |
| -L | 锁定了用户,普通用户不能登录 |
| -U | 解锁了用户,可以登录 |
| -o | 指定重复的uid |
3:删除用户(userdel)
最频繁的使用是userdel -r 用户名
没有带上-r的话,会遗留用户的家目录和邮箱文件,在次创建用户的时候,会报错,所以一般带上-r这个选项
4:修改密码(chage)
常用的选项:
[root@server ~]# chage --help
用法:chage [选项] 登录名
选项:
-d, --lastday 最近日期 将最近一次密码设置时间设为“最近日期”
-E, --expiredate 过期日期 将帐户过期时间设为“过期日期”
-h, --help 显示此帮助信息并退出
-i, --iso8601 use YYYY-MM-DD when printing dates
-I, --inactive INACITVE 过期 INACTIVE 天数后,设定密码为失效状态
-l, --list 显示帐户年龄信息
-m, --mindays 最小天数 将两次改变密码之间相距的最小天数设为“最小天数”
-M, --maxdays MAX_DAYS set maximum number of days before password
change to MAX_DAYS
-R, --root CHROOT_DIR chroot 到的目录
-W, --warndays 警告天数 将过期警告天数设为“警告天数”
[root@server ~]#
修改的是/etc/shadow这个配置文件
5:用户的总结
上面的创建和修改和删除都是在操作文件/etc/passwd和/etc/shadow
二:用户组的管理
1:创建用户组(groupadd)
-g:指定用户的gid,这个是私有组
-o:可以使用重复的gid
2:修改用户组(groupmod)
-n:修改组名
-g:修改gid,这个是私有组
3:删除组(groupdel)
groupdel 组名
如果这个组是是其他用户的私有组,则删除这个用户,再来删除这个组,否则会报错
4:管理组内成员(gpasswd)
gpasswd 组名 设置用户组密码
newgrp 组名 就可以登录上去了
-a 添加到新组里面去
-d 从组里面删除这个用户
-r 删除这个用户组的密码
-A 设置组的管理员(是普通用户能够管理用户组)
5:groupmems(只有root用户使用)
[root@server /]# groupmems --help 用法:groupmems [选项] [动作] 选项: -g, --group groupname 更改组 groupname,而不是用户的组(仅限 root) -R, --root CHROOT_DIR chroot 到的目录 动作: -a, --add username 将用户 username 添加到组成员中 -d, --delete username 从组的成员中删除用户 username -h, --help 显示此帮助信息并退出 -p, --purge 从组中移除所有成员 -l, --list 列出组中的所有成员
1)流程
[root@server /]# groupmems -g root -a q7 [root@server /]# groupmems -g root -l q7 [root@server /]# groupmems -g root -d q7 [root@server /]# groupmems -g root -l [root@server /]#
三:总结
用户和用户组在linux中非常的重要,在系统中拥有一定资源,就是敲的这些命令其实就是在修改他们的配置文件
id命令和groups命令可以快速的查看用户和用户组的信息
[root@server /]# id root 用户id=0(root) 组id=0(root) 组=0(root) [root@server /]#
显示的用户,用户得到私有组,用户的附加组,后面就是附加组的成员
[root@server /]# usermod -G root q7 [root@server /]# groups q7 q7 : q7 root
显示的用户组,q7加入的附加组
四:IO管道输入输出
1:Linux中的输入输出
输入设备:键盘,输入命令
输出设备:显示屏显示命令的结果
linux的IO管道:
| 标准输入(stdin) | < |
| 标准输出(stdout) | > |
| 标准错误输出(stderror) | 2> |
2:详细介绍
>:覆盖的写入
>>:追加
&>:正确的和错误的都能输出
1:输出重定向
将命令的结果不显示在屏幕上,显示在文件中去
eg:将ifconfig命令显示的结果输入到ip.txt文件中去
[root@server opt]# ifconfig > ip.txt
[root@server opt]# cat ip.txt
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.20.10 netmask 255.255.255.0 broadcast 192.168.20.255
inet6 fe80::9c9c:3782:47c2:f44d prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:6c:7d:b6 txqueuelen 1000 (Ethernet)
RX packets 352 bytes 33012 (32.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 302 bytes 29723 (29.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens224: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 00:0c:29:6c:7d:c0 txqueuelen 1000 (Ethernet)
RX packets 11 bytes 1015 (1015.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
2:输入重定向(从文件中读取数据)
将原来的键盘输入的内容改为通过文件进行输入,例如修改密码,提高了效率
就是提前将内容写到文件中去,然后作为输入
eg:修改密码
[root@server opt]# cat passwd.txt redhat redhat [root@server opt]# passwd q7 < passwd.txt 更改用户 q7 的密码 。 新的密码: 无效的密码: 密码少于 8 个字符 重新输入新的密码: passwd:所有的身份验证令牌已经成功更新。 [root@server opt]#
eg:通过stdin也可以修改密码,只用输入一次密码就行了
[root@server opt]# cat user1.txt redhat [root@server opt]# cat user1.txt | passwd --stdin q7 更改用户 q7 的密码 。 passwd:所有的身份验证令牌已经成功更新。 [root@server opt]#
将前面的内容作为输入到修改密码的参数了
3:错误的输出重定向
2>
[root@server opt]# LS 2> error.txt [root@server opt]# cat error.txt bash: LS: command not found... Similar command is: 'ls' [root@server opt]#
4:管道符(|)
连接多条命令的,将前面一个命令的输出结果作为后面的命令的输入
[root@server opt]# ifconfig | grep netmask
inet 192.168.20.10 netmask 255.255.255.0 broadcast 192.168.20.255
inet 127.0.0.1 netmask 255.0.0.0
[root@server opt]#
管道符只能接受标准的输出,不能接受标准错误输出,否则不执行
三通管道:就是命令1将结果保存到文件中去,然后在来给命令2使用
[root@server opt]# ifconfig | tee test.txt |grep netmask
inet 192.168.20.10 netmask 255.255.255.0 broadcast 192.168.20.255
inet 127.0.0.1 netmask 255.0.0.0
[root@server opt]# cat test.txt
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.20.10 netmask 255.255.255.0 broadcast 192.168.20.255
inet6 fe80::9c9c:3782:47c2:f44d prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:6c:7d:b6 txqueuelen 1000 (Ethernet)
RX packets 1134 bytes 101401 (99.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
5:发送多行到stdin
用于一键生成配置文件,配置yum源的时候非常的好用
[root@server yum.repos.d]# cat >> local.repo <<E [rhel] name=rhel baseurl=file:///media gpgcheck=0 enable=1 E [root@server yum.repos.d]# cat local.repo [rhel] name=rhel baseurl=file:///media gpgcheck=0 enable=1 [root@server yum.repos.d]#
以什么开头的字符,就以什么结尾,就是将输入的内容重定向到这个文件了

浙公网安备 33010602011771号