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]# 

 以什么开头的字符,就以什么结尾,就是将输入的内容重定向到这个文件了 

  

 

 

 

 

 

 

 

posted @ 2024-01-22 11:53  q_7  阅读(11)  评论(0)    收藏  举报