Linux下用户管理
㈠ 用户概念及作用
用户:指的是Linux操作系统中用于管理系统或者服务的人
一问:管理系统到底在管理什么?
- 答:Linux下一切皆文件,所以用户管理的是相应的文件
二问:如何管理文件呢?
答:
- 1. 文件基本管理,比如文件的创建、删除、复制、查找、打包压缩等;文件的权限增加、减少等;
- 2. 文件高级管理,比如程序文件的安装、卸载、配置等。终极目的是对外提供稳定的服务。
㈡ 用户的分类
1、超级用户
- 超级用户,也叫管理员,root。该用户(root)具有所有权限,UID=0并且绝对只能是0。
2、系统用户
- 系统用户,也叫程序用户。一般都是由程序创建,用于程序或者服务运行时候的身份。
- 默认不允许登录系统。1<=UID<=499
- 比如后面要学的web服务的管理用户apache,文件共享ftp服务的管理用户ftp等
- 注意:Centos7/RHEL8中,系统用户UID范围:1<=UID<=999
3、普通用户
- 普通用户,一般都是由管理员创建,用于对系统进行有限的管理维护操作。
- 默认可以登录系统。500<=UID<=60000
- 注意:Centos7/RHEL8中,普通用户UID范围:1000<=UID<=60000
特别说明:
- 1. 用户指的是操作系统上管理系统或服务的人,是人,就有相关的属性信息
- 2. 用户的属性信息包括但不限于,如:家目录、唯一身份标识(UID)、所属组(GID)等
- 3. 今天我们讨论的用户指的是普通用户,即由管理员创建的用户
㈢ 用户的基本管理
1、创建用户(useradd)
- (1) 基本语法和选项
useradd [选项] 用户名
常用选项:
-u 指定用户uid,唯一标识,必须唯一
-g 指定用户的默认组(主组)
-G 指定用户附加组(一个用户可以加入多个组,但是默认组只有一个)
-d 指定用户家目录(每个用户都有一个自己的家,并且默认在/home/xxx)
-s 指定用户默认shell
查看系统支持的shell(命令解释器)
[root@heima ~]# cat /etc/shells
/bin/sh 软连接文件
/bin/bash 系统默认的解释器
/usr/bin/sh 软连接文件
/usr/bin/bash 系统默认的解释器
其他shell:
/sbin/nologin 不能登录操作系统,也叫非交互式shell
/bin/dash
/bin/tcsh
/bin/csh
- (2) 举例说明
- ① 创建默认用户
创建一个用户stu1
[root@plantwo ~]# useradd stu1
查看用户信息
[root@plantwo ~]# id stu1
uid=501(stu1) gid=501(stu1) groups=501(stu1)
注意:当创建一个默认用户时,系统会给该用户以下东西,以stu1为例说明
1)用户的UID(唯一标识) 501(系统自动分配)
2)用户的默认组(主组) stu1组,默认跟该用户的用户名一致;组ID(501),默认和用户UID一致
3)用户的家目录 /home/stu1
4)拷贝相应的文件到用户的家里
[root@plantwo ~]# su - stu1
[stu1@localhost ~]$ ls -a
. .. .bash_logout .bash_profile .bashrc .gnome2 .mozilla
- ② 根据需求创建用户
1. 创建用户stu2,但是不能登录操作系统
注意:-s 指定用户的默认shell,/sbin/nologin表示不能登录系统,也叫非交互
[root@plantwo ~]# useradd -s /sbin/nologin stu2
验证:
[root@plantwo ~]# id stu2
uid=502(stu2) gid=502(stu2) groups=502(stu2)
切换用户失败,说明该用户不能登录系统
[root@plantwo ~]# su - stu2
This account is currently not available.
2. 创建用户stu2,同时指定该用户的家目录为/rhome/stu2
注意:-d 指定用户的家目录,前提该用户家目录的上一级目录/rhome必须存在
[root@heima ~]# mkdir /rhome
[root@heima ~]# useradd -d /rhome/stu2 stu2
[root@heima ~]# id stu2
uid=502(stu2) gid=502(stu2) groups=502(stu2)
说明:指定stu2家目录/rhome/stu2时,只需要/rhome存在即可,系统会默认在/rhome下创建stu2目录
补充:
useradd user #默认创建用户
#useradd默认创建用户是 会默认创建同名用户组 user
#useradd默认创建用户,有时会默认创建家目录 /home/user 及目录下隐藏文件,环境变量文件.bashrc、.bash_profile等
#默认创建用户时会创建对应用户的邮箱目录 /var/spool/mail/user
#可通过加参数的方式创建指定用户
useradd -d /rhome/stu2 stu2 #创建用户时需用户上层目录(/rhome)须存在,否则用户家目录创建失败
[root@localhost ~]# useradd -d /rhome/stu2 stu2 useradd:无法创建目录 /rhome/stu2 [root@localhost ~]# id stu2 uid=1003(stu2) gid=1003(stu2) 组=1003(stu2) [root@localhost ~]# su - stu2 su: 警告:无法更改到 /rhome/stu2 目录: 没有那个文件或目录若用户家目录创建失败可手工自动创建 mkdir /rhome/stu2
然后把目录/etc/skel/下内容复制到/rhome/stu2家目录
并修改/rhome/stu2家目录及目录下文件所属的用户和属组
[root@localhost ~]# mkdir -p /rhome/stu2 [root@localhost ~]# cp -a /etc/skel/. /rhome/stu2/ [root@localhost ~]# chown -R stu2:stu2 /rhome/stu2/useradd -u 1200 stu12 #创建用户并指定用uid, 后续创建的用户会按新uid顺序后延
[root@localhost ~]# useradd -u 1200 stu12 [root@localhost ~]# id stu12 uid=1200(stu12) gid=1200(stu12) 组=1200(stu12)useradd -g test5 stu5 #创建用户并指定所属组,所属组必须存在,可用groupadd创建组
[root@localhost ~]# useradd -g test5 stu5 useradd:“test5”组不存在 [root@localhost ~]# groupadd test5 [root@localhost ~]# useradd -g test5 stu5 [root@localhost ~]# id stu5 uid=1201(stu5) gid=1201(test5) 组=1201(test5)useradd -g test5 stu5 #创建用户并指定所属组及附加组,组必须存在,可用groupadd创建组
[root@localhost ~]# useradd -g test6 -G test7 stu6 useradd:“test6”组不存在 [root@localhost ~]# groupadd test6 [root@localhost ~]# useradd -g test6 -G test7 stu6 useradd:“test7”组不存在 [root@localhost ~]# groupadd test7 [root@localhost ~]# useradd -g test6 -G test7 stu6 [root@localhost ~]# id stu6 uid=1202(stu6) gid=1202(test6) 组=1202(test6),1203(test7)useradd -s /sbin/nologin stu2 #创建用户stu2,但是不能登录操作系统
注意:-s 指定用户的默认shell,/sbin/nologin表示不能登录系统,也叫非交互
[root@localhost ~]# useradd -s /sbin/nologin stu2 [root@localhost ~]# id stu2 #验证: uid=502(stu2) gid=502(stu2) groups=502(stu2) [root@localhost ~]# su - stu2 #切换用户失败,说明该用户不能登录系统 This account is currently not available.
2、用户密码设置(passwd)
passwd:单个用户设置密码
echo 123|passwd –stdin stu2:可批量执行设置密码
- 1)保存用户信息的文件(/etc/passwd和/etc/shadow)
- 2)更改用户的账号信息(chage)
补充:
chage -d 0 stu1 #修改用户登录后必须修改密码
chage -E $(date -d ‘+30days’ +%F) stu2 #修改用户的过期时间为30天以后
chage -E 2023-02-02 stu2 #修改用户的过期时间为指定日期
3、修改用户信息(usermod)
- ① 基本语法选项
usermod [选项] 用户名
常用选项:
-u 指定用户uid,唯一标识,必须唯一
-g 指定用户的默认组(主组)
-G 指定用户附加组(一个用户可以加入多个组,但是默认组只有一个)
-d 指定用户家目录(每个用户都有一个自己的家,并且默认在/home/xxx)
-s 指定用户默认shell
-m 移动用户家目录,和-d一起使用
- ② 举例说明
1. 修改stu3用户的UID为1100
[root@plantwo ~]# usermod -u 1100 stu3
[root@plantwo ~]# tail -5 /etc/passwd
yunwei:x:1001:1001::/home/yunwei:/sbin/nologin
stu1:x:1002:1002::/home/stu1:/bin/bash
stu2:x:1003:1003::/rhome/stu2:/bin/bash
stu3:x:1100:1004::/rhome/stu3:/bin/bash
stu4:x:1005:1005::/home/stu4:/sbin/nologin
2.修改stu4用户的默认shell为可登录系统
[root@plantwo ~]# su - stu4
This account is currently not available.
[root@plantwo ~]# usermod -s /bin/sh stu4
[root@plantwo ~]# tail -5 /etc/passwd
yunwei:x:1001:1001::/home/yunwei:/sbin/nologin
stu1:x:1002:1002::/home/stu1:/bin/bash
stu2:x:1003:1003::/rhome/stu2:/bin/bash
stu3:x:1100:1004::/rhome/stu3:/bin/bash
stu4:x:1005:1005::/home/stu4:/bin/sh
3.修改stu5用户的家目录
[root@plantwo ~]# useradd -d /rhome/stu5 stu5
[root@plantwo ~]# usermod -md /home/stu5 stu5
补充:
usermod 和 useradd 常用基本用法相似,可参考useradd
usermod -md /home/stu7 stu7 # 当-m选项须与-d一起使用,可直接把家目录及目录下信息转换
4、删除用户(userdel)
- ① 基本语法选项
userdel [选项] 用户名
常用选项:
-r 删除用户并且移除其家目录和邮箱
-f 强制删除正在登录的用户
- ② 举例说明
说明:
创建完用户后,家目录默认在/home/用户名下;用户的邮箱在/var/spool/mail/用户名
1. 删除stu4用户以及家目录
[root@plantwo ~]# userdel -r stu4
[root@plantwo ~]# id stu4
id: stu4: No such user
2.强制删除一个正在登录的用户
[root@plantwo ~]# userdel -r stu5
userdel: user stu5 is currently used by process 7998
[root@plantwo ~]# id stu5
uid=1101(stu5) gid=1101(stu5) 组=1101(stu5)
[root@plantwo ~]# userdel -rf stu5
userdel: user stu5 is currently used by process 7998
[root@plantwo ~]# id stu5
id: “stu5”:无此用户
3. 只删除用户user02,不删除其家目录
[root@heima ~]# userdel stu1
㈣ 总结
1、创建用户(useradd)
- 1)useradd 用户名——>家目录/home/用户名、邮箱、UID、默认组(GID)[用户主组]
- 2)useradd [选项] 用户名字——>常用选项:-d/-s/-u/-g/-G
2、设置用户密码(passwd)
- 1)passwd 用户名——>给指定的用户(管理员可以给任何人设置任何密码)
- 2)echo 密码|passwd –stdin 用户名——>非交互式(用于脚本中)
- 3)用户基本信息和用户密码信息保存文件——>/etc/passwd和/etc/shadow
- 4)扩展chage命令——>用来修改用户密码信息(账号过期时间、密码最小生存周期等)
3、修改用户信息(usermod)
- 1) usermod [选项] 用户名——>usermod -md 新家 用户名
- 2) usermod [选项] 用户名字——>常用选项:-d/-s/-u/-g/-G
4、删除用户(userdel)
- 1)userdel 用户名——>只删除用户,不删除用户家目录、邮箱等信息
- 2)userdel -r 用户名——>删除用户以及用户其他信息
- 3)userdel -f 用户名——>强制删除用户(删除正在登录的用户)
Linux下组管理
㈠ 组和用户的关系
核心:组的目的是为了方便管理用户
- 用户是操作系统上管理维护系统或服务的人
- 组是用户的一个属性信息
- 任何一个用户默认都会有一个主组(默认组)
- 一个用户除了主组也可以有多个其他组(附加组)
一问:用户的主组和附加组到底有啥关系呢?
- 答:用户的主组和附加组半毛钱关系都木有
二问:那要这个主组或者附加组有啥用呢?
- 答:肯定是有用的,组的目的是方便管理用户,用户的目的是管理操作文件,文件就有权限这个属性。
- 1. 用户要操作一些文件,文件是由用户创建,不同用户创建的文件的属性信息也就不一样
- 2. 文件的属性都有啥呢?比如,文件的创建者,文件属于哪个组,文件大小,文件时间等
- 3. 其中,不同用户所创建的文件的属组就是该用户的主组(默认组)
- 4. A用户附加组也有可能是其他用户的主组,道理同上(权限章节再细细体会组的作用)
㈡ 组的管理
1、创建组(groupadd)
① 基本语法
groupadd [选项] 组名 常用选项: -g 指定组的GID(编号),默认唯一
② 举例说明
#1.创建一个组admin [root@qiheo ~]# groupadd admin #2.查看组信息 [root@qiheo ~]# tail -1 /etc/group admin:x:1005: ###说明:关于/etc/group配置文件说明,可以man 5 group找帮助 #3.创建一个组sysadmin,指定组的GID为1111 [root@qiheo~]# groupadd -g 1111 sysadmin [root@qiheo~]# tail -1 /etc/group sysadmin:x:1111:
2、删除组(groupdel)
① 基本语法
groupdel 组名
② 举例说明
[root@qiheo ~]# groupdel admin [root@qiheo ~]# groupdel stu2 groupdel: cannot remove the primary group of user 'stu2' 注意:以上信息说明不能删除属于其他用户的主组
3、组成员管理(gpasswd)
① 基本语法
gpasswd [选项] 组名 常见选项: -a 添加用户到组 -d 从组中删除成员 -A 指定管理员 -M 指定组成员,可以批量添加用户到组中 -r 删除密码 gpasswd 组名 给组设置密码
② 举例说明
- 添加用户到组里
1. 创建3个用户user01~user03 2. 将user01添加到sysadmin组里 方法:1:指定user01用户的附加组为sysadmin(站在用户角度) # usermod -G sysadmin user01 方法2:使用gpasswd命令添加用户到组里 # gpasswd -a user01 sysadmin -a选项:表示往组里追加用户 # gpasswd -M user02,user03 sysadmin 设置sysadmin组成员为user02,user03 -M选项:表示覆盖设置组成员(会覆盖原来的成员列表)
- 删除组成员
将user03用户从组sysadmin里移除 # gpasswd -d user03 sysadmin
- 设置组管理员
将user03用户设置为sysadmin组的管理员,管理员可添加用户到组里 # gpasswd -A user03 sysadmin
- 设置组密码
1.为sysadmin组设置密码 # gpasswd sysadmin 2.查看组密码信息/etc/gshadow # tail -1 /etc/gshadow
㈢ 总结
1、创建组(groupadd)
- 组的信息保存文件——>/etc/group和/etc/gshadow
2、删除组(groupdel)
- 什么样的组不能删除?——>不能删除属于其他用户的主组
3、管理组成员(gpasswd)
- 1)添加用户到组里——>gpasswd -a user1 组名 或 gpasswd -M user1,user2,… 组名
- 2)从组里移除用户——>gpasswd -d user1 组名
㈣实施
一、创建组
# groupadd coding # groupadd test
二、创建用户
# useradd -g coding coding # useradd -g test -G coding test # useradd -G coding lidamao # useradd -G coding wangergou
三、给用户设置密码
# passwd lidamao # echo 123|passwd --stdin wangergou
文件编辑工具(vim)
Linux平台下的文本编辑器: emacs、nano、gedit、vi、vim
vi(visual editor)编辑器通常被简称为vi,它是Linux和Unix系统上最基本的文本编辑器,类似于Windows 系统下
的记事本。学会它后,我们将在Linux 的世界里游刃有余。
为什么要学习vim?
- 1. 所有的Unix like系统都会内置vi文本编辑器,其他的文本编辑器则不一定会存在
- 2. 很多软件的编辑接口都会主动调用vi
- 3. vim具有程序编辑的能力,可以主动以字体颜色辨别语法的正确性,方便程序设计
- 4. 程序简单,编辑速度快
- 5. vim是vi的升级版
㈠ vim编辑器三种模式
1、命令行模式
- 问:命令行可以干什么?
- 答:可以进行一些基本的复制、删除、跳转、撤销、移动等操作
命令 | 含义 | 备注 |
yy | 复制光标所在行 | 3yy表示复制3行 |
p(小写p) | 光标所在行后面粘贴 | |
P(大写P) | 光标所在行前面粘贴 | |
gg | 光标快速跳到文件首行,并且定位到首字符 | 3gg表示快速跳到文件第3行行首字符 |
G | 光标快速跳到文件尾行,并且定位到首字符 | |
home | 跳转到行首 | Shift+6 即 ^ 符号表示行首 |
end | 跳转到行尾 | Shitf+4 即 $ 符号表示行尾 |
dd | 删除光标所在行 | 3dd表示删除3行(包括光标所在行) |
d^ | 从光标位置删至行首,不包括光标位 | |
d$ | 从光标位置删至行尾,包括光标位,与D作用相同 | |
dG | 删除光标所在行以及下面所有行 | |
dgg | 删除光标所在行以及上面所有行 | |
x(小写) | 删除光标所在字符后面一个字符,3x删除3个字符 | 类似于windows下的delete键 |
X(大写) | 删除光标所在字符前面一个字符,3X删除3个字符 | 类似windows下的backspace键 |
u | 撤销操作 | ctrl+r 取消撤销 |
举例说明
① 环境准备
1. 删除/tmp/目录里的所有内容
2. 将/etc/passwd文件拷贝到/tmp目录里
# rm -rf /tmp/* # cp /etc/passwd /tmp/
② 使用vim工具打开文件
用法1: vim 文件名 默认会进入命令行模式
[root@localhost ~]# vim /tmp/passwd
用法2: vim +数字 文件名 打开指定的文件,并且将光标移动到指定行
[root@localhost ~]# vim +5 /tmp/passwd
用法3: vim +/关键字 文件名 打开指定的文件,并且高亮显示关键词
[root@localhost ~]# vim +/shutdown /tmp/passwd
2、编辑模式
功能:编辑文件内容。
3、底行模式
① 如何进入底行模式?
- 命令模式进入底行模式:按冒号 :
- 编辑模式进入底行模式:先按 Esc键 退出到命令模式,然后再按冒号 :
② 底行模式能做什么?
1. 保存和退出
- 保存文件,命令 :w ;另存为到其他文件,命令 :w 文件名
- 保存退出,命令 :wq ;强制保存退出 :wq!
- 退出不保存,命令 :q ;强制退出 :q!
- 命令 😡 在文件没有修改的情况下,表示直接退出(等价于:q),在文件修改的情况下表示保存并退出(:wq)
2. 搜索替换
#搜索摸索 :/root #n往下匹配;N往上匹配 #命令模式 /root 也是搜索功能 #替换模式 :%s/root/ROOT/ #全文搜索,替换每一行匹配到的第一个关键字 :%s/root/ROOT/g #全文搜索,替换每一行所有匹配的关键字 :%s/root/ROOT/gc #交互式替换 :%s/\/sbin\/nologin/\/bin\/bash/ #\转义符 :%s#/sbin/nologin#/bin/bash#g #更换分隔符 :7s/shutdown/SHUTDOWN/g #只替换第7行的内容 #取消高亮 :noh #(no highlight)
3. 其他功能
#临时设置行号 :set number 或 :set nu #永久设置行号 即在文件/etc/vimrc 追加 set number 或 set nu echo "set number" >> /etc/vimrc :set list #查看控制符 #地址定位 :1,5 w /tmp/5.txt #保存前5行内容到/tmp/5.txt :r /tmp/5.txt #在光标所在行下面读取/tmp/5.txt文件内容 :3r /tmp/5.txt #在当前文本的第3行后读取/tmp/5.txt文件 :1,8d #删掉文本的1到8行 :nr !command #在第n行下面读取命令所执行的结果 :n! command #用命令的执行结果替换第n行内容
㈡ vim编辑器三种模式切换
㈢ 多窗口编辑问题
当两个终端同时打开或者意外结束文件时,会产生一个.swap文件 (交换文件)
举例说明:
- 你在两个终端同时打开/tmp/passwd文件,会产生/tmp/.passwd.swp。这时,有六个按钮可以使用:
O(pen for Read-Only) :打开成只读文件。 E(dit) :用正常方式打开要编辑的文件,并不会载入暂存文件的内容。这很容易出现两个用户相互改变对方的文件的问题。 R(ecover) :加载暂存文件的内容。 D(elete) :如果你确定这个暂存文件是没有用的,则可以删除。 Q(uit) :不进行任何操作,回到命令行。 A(bort) :忽略这个编辑行为,和Q类似。 需要注意的是: 这个暂存文件不会因为你结束vim后自动删除,必须要手动删除。否则每次打开对应的文件时都会出现这样的提示。
㈣可视化模式(了解)
按键:ctrl + v(可视块)或V(可视行),然后按下↑ ↓ ← →方向键来选中需要
复制的区块,按下y 键进行复制(不要按下yy),最后按下p 键粘贴
退出可视模式按下Esc
发表回复