用户管理

Linux的用户管理,如同QQ群

群主,想干啥干啥,去案例最大,相当于系统的root用户
群成员,权限低,Linux的普通用户
群管理员,如同sudo命令,提升权限的
权限篇 - 图1
/home/ 统一的用户家目录
/home/xiayu/ 普通的用户家目录
/home/xiaochao/

root为什么叫做root

在Linux系统中,引入了uid和gid的概念。当身份证号为0的时候,是Linux系统的超级用户,uid为0.
普通用户由root创建,uid号码从1000开始。慢慢累积。
系统中的虚拟用户,uid是1~99之间,由操作系统创建。

  • UID,user Identify,好比身份证号
  • GID,group Identify,好比户口本的家庭编号
  • 在Linux系统中,用户也有自己的UID身份账号且唯一
  • 在Linux中UID为0,就是超级用户,如要设置管理员用户,可以改UID为0,建议用sudo
  • 系统用户UID为1~999 Linux安装的服务程序都会创建独有的用户负责运行。
  • 普通用户UID从1000开始:由管理员创建(centos7),最大值1000~60000范围
  • centos6创建普通用户是500开始

UID 用户id号,身份证号
GID 用户组id号,部门编号
root 用户、组、id都为0,属于老板

常用命令解释器

shell解释器解释的过程:是通过解释器,进行翻译,再传达给操作系统。
/bin/sh 默认
/bin/bash 默认
/sbin/nologin 虚拟用户
/dash ubuntu
csh unix
tsh unix

用户信息配置文件

/etc/passwd 新创建的用户,信息回追加到这个文件的结尾
useradd 用户名 # 创建普通用户,创建用户的同时,会创建一样的用户组
/etc/shadow # 存放用户加密后的密码
/etc/group # 存放用户组的信息
用户指定了/bin/bash解释器,代表可以登录机器,进行命令翻译
/sbin/nologin # 禁止登录机器
权限篇 - 图2

字段名 解释
用户名 对应UID,是用户登录系统的名字,系统中唯一不得重复
用户密码 存放在/etc/shadow文件中进行保护密码
用户UID 用户ID号,由一个整数表示
用户组GID 范围、最大值和UID一样,默认创建用户会创建用户组
用户说明 对此用户描述
用户家目录 用户登录后默认进去的家目录,一般是【/home/用户名】
shell解释器 当前登录用户使用的解释器。centos/redhat系统中,默认的都是bash。若是禁止此用户登录机器,改为/sbin/nologin即可

用户管理命令

命令 作用
useradd 创建用户
usermod 修改用户信息
userdel 删除用户及配置文件
passwd 更改用户密码
chpasswd 批量更新用户密码
chage 修改用户密码属性
id 查看用户UID、GID、组信息
su 切换用户
sudo 用root身份执行命令
visudo 编辑sudoers配置文件
  1. -c<备注>:加上备注文字。备注文字会保存在passwd的备注栏位中;
  2. -d<登入目录>:指定用户登入时的启始目录;
  3. -D:变更预设值;
  4. -e<有效期限>:指定帐号的有效期限;
  5. -f<缓冲天数>:指定在密码过期后多少天即关闭该帐号;
  6. -g<群组>:指定用户所属的群组;
  7. -G<群组>:指定用户所属的附加群组;
  8. -m:自动建立用户的登入目录;
  9. -M:不要自动建立用户的登入目录; 不在/home中创建家目录
  10. -n:取消建立以用户名称为名的群组;
  11. -r:建立系统帐号;
  12. -s<shell>:指定用户登入后所使用的shell
  13. -u<uid>:指定用户id

/root/home/yuchao中的文件
.bash_profile 用户个人的配置文件
useradd 用户名 # 创建用户
passwd 用户名 # 更改用户密码
id yuchao 查看用户具体信息
103258159
groupadd yunwei # 创建一个运维的组 查看:tail /etc/group
whoami # 显示当前用户
w # 显示当前已经登录的用户
who # 与w一样,但是消息更全
last、lastlog命令查看用户详细的登录信息

useradd

  1. #创建用户禁止登陆,且不创建家目录
  2. [root@luffycity ~]# useradd -M -s /sbin/nologin oldyu
  3. [root@luffycity ~]# grep -w oldyu /etc/passwd
  4. oldyu:x:1003:1003::/home/oldyu:/sbin/nologin
  5. [root@luffycity ~]# ls /home/ #没有oldyu
  6. alex chaoge oldchao yu
  7. #
  8. useradd -u 789 -s /bin/sh -c learn_linux -G root,old -e "2019/10/18" -f 2 -d /tmp/luffychao luffychao
  9. [root@luffycity ~]# id luffychao #检查用户信息
  10. uid=789(luffychao) gid=1004(luffychao) groups=1004(luffychao),0(root),801(old)

usermod

  1. 语法
  2. usermod(选项)(参数)
  3. 选项
  4. -c<备注>:修改用户帐号的备注文字;
  5. -d<登入目录>:修改用户登入时的目录;
  6. -e<有效期限>:修改帐号的有效期限;
  7. -f<缓冲天数>:修改在密码过期后多少天即关闭该帐号;
  8. -g<群组>:修改用户所属的群组;
  9. -G<群组>;修改用户所属的附加群组;
  10. -l<帐号名称>:修改用户帐号名称;
  11. -L:锁定用户密码,使密码无效;
  12. -s<shell>:修改用户登入后所使用的shell
  13. -u<uid>:修改用户ID
  14. -U:解除密码锁定。
  1. 案例
  2. #-u 更改uid为788
  3. #-s 更改用户shell
  4. #-c 加上注释changeUser
  5. #-G 加上old组
  6. #-e 修改账号有限期时间
  7. #-f 密码到期后10天关闭该账号
  8. #-d 修改账号登录时的目录
  9. [root@luffycity ~]# usermod -u 788 -s /sbin/nologin -c changeUser -G old -e "2020/10/10" -f 10 -d /home/luffychao luffychao
  10. [root@luffycity ~]#
  11. [root@luffycity ~]# id luffychao
  12. uid=788(luffychao) gid=1004(luffychao) groups=1004(luffychao),801(old)
  13. [root@luffycity ~]#
  14. [root@luffycity ~]# grep -w luffychao /etc/passwd
  15. luffychao:x:788:1004:changeUser:/home/luffychao:/sbin/nologin

passwd

  1. #7天内用户不得改密码,60天后可以修改,过期前10天通知用户,过期30天后禁止用户登录
  2. [root@luffycity ~]# passwd -n 7 -x 60 -w 10 -i 30 luffychao
  3. Adjusting aging data for user luffychao.
  4. passwd: Success
  5. [root@luffycity ~]# passwd -S luffychao
  6. luffychao PS 2019-10-17 7 60 10 30 (Password set, SHA512 crypt.)

visudo

使用sudo命令,以root身份执行命令,提权命令
visudo
image.png
image.png

文件权限管理

属主:这个文件属于谁
属组:这个文件属于哪个组
其他人身份
权限篇 - 图5
-是一个普通文件,通过touch命令创建
d是一个文件夹,通过mkdir命令创建
l是软连接,快捷方式类型

对于文件的读写执行是如下意思:
r cat more less 命令
w vim 写入
x 可以执行如shell等脚本

对于文件夹的读写可执行是如下意思:
r ls命令,可读
w 文件夹必须先有x权限,才可以在文件夹中,创建新文件,touch,mkdir等
x 可以cd进入文件夹

chown

语法:
chown    新属主的名字    文件/文件夹

chown alex    test.txt    #文件属于alex
chown :组     test.txt    #修改文件属组
chown 用户:组             #同时修改文件的属主、属组

参数
  -R, --recursive               递归处理所有的文件及子目录
  -v, --verbose                 为处理的所有文件显示诊断信息
chown  -R   root:root   yu2     #抢走yu2的内容,改为root属主、属组

chgrp命令

chgrp命令用来改变文件或目录所属的用户组。
该命令用来改变指定文件所属的用户组。
其中,组名可以是用户组的id,也可以是用户组的组名。
案例

-c或——changes:效果类似“-v”参数,但仅回报更改的部分;
-f或--quiet或——silent:不显示错误信息;
-h或--no-dereference:只对符号连接的文件作修改,而不是该其他任何相关文件;
-R或——recursive:递归处理,将指令目录下的所有文件及子目录一并处理;
-v或——verbose:显示指令执行过程;
--reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;


chgrp -R  alex  /data   #把/data目录下所有文件的属组改为alex

umask权限控制

umask 命令用来限制新文件权限的掩码。也称之为遮罩码,防止文件、文件夹创建的时候,权限过大
当新文件被创建时,其最初的权限由文件创建掩码决定。
用户每次注册进入系统时,umask命令都被执行,并自动设置掩码改变默认值,新的权限将会把旧的覆盖。

  • umask默认配置在/etc/profile 61-64行

文件、文件夹的最高权限是777,Linux默认设置创建文件的最大权限的666,文件夹的权限最大的777

umask值就是指“Linux文件的默认属性需要减掉的权限”。
比如Linux普通文件的最大默认属性是666,目录文件的最大属性是777。但是我们不想要用户在新建立文件时,文件的属性是666或777,那么我们就要设置umask值。
Linux系统预置的umask值是022,那么用户在新建立普通文件时,普通文件的属性就是666-022=644,新建立目录文件时,目录文件的属性就是777-022=755。
  1. 用root用户创建文件夹

755

  1. 用root用户创建文本

644

  1. 通过普通用户yu2创建文件

775

  1. 通过普通用户yu2创建文件夹

664

umask # 通过执行umask,可以查看源码的值

计算umask文件权限

系统默认umask数值对应的权限
记住公式

默认的文件、文件夹权限,减去umaks的值等于最终的权限值

文件最大777  文件夹最大777

 666        777
-022        022
 644        755

chattr给予文件特殊的权限

chattr命令用于更改文件的扩展属性,比chmod更改的rwx权限更底层
参数

a:只能向文件中添加数据,不得删除
-R:递归更改目录属性
-V:显示命令执行过程

模式
+ 增加参数
- 移除参数
= 更新为指定参数
A 不让系统修改文件最后访问时间
a 只能追加文件数据,不得删除
i 文件不能被删除、改名、修改内容      用来保护服务器上的重要资料

lsattr列出文件的特殊权限

-R
    递归地列出目录以及其下内容的属性.
-V
    显示程序版本.
-a
    列出目录中的所有文件,包括以`.'开头的文件的属性.
-d
    以列出其它文件的方式那样列出目录的属性, 而不列出其下的内容.
-v
    显示文件版本.

用户文件小练习

useradd练习

  1. 创建用户pyyu,且uid为1500

useradd pyyu # 用户信息写入/etc/passwd文件
useradd -u 1500 pyyu

  1. 新建用户tom,默认属于pyyu组,且同时属于bob组

useradd alex -g pyyu -G bob

  1. 新建用户jerry,无法登录,且设置用户家目录是/var/jerry

useradd jerry -s /sbin/nologin -d /var/jerry

  1. 创建用户eva,注释信息是“the girl eva userinfo”,默认shell是/bin/bash

useradd -c "the girl eva userinfo" eva

chmod练习

  1. 设置文件nginx.conf所有人可读

chmod ugo=r file
chmod 444 file

  1. 设置文件按redis.conf所有人都可以写入

chmod ugo+w file

  1. 设置文件my.conf的文件拥有者user,所属组gruop可读可写,其他人只读other

chmod ug=rw,o=r file

  1. 把/data/下所有文件及子目录设置为任何人都只能写

chmod -R ugo=w /data/

  1. 设置文件所有人可读可写可执行

chmod 777 file
chmod ugo=rwx file

linux通配符

文件名 通配符 模糊匹配
luffy * luffyalex
luffychao
luffycunzhang
oldboy ? oldboy1
oldboy2
oldboyz
oldboyx

常见通配符

符号 作用
* 匹配任意,0或多个字符,字符串
? 匹配任意1个字符,有且只有一个字符
符号集合 匹配一堆字符或文本
[abcd] 匹配abcd中任意一个字符,abcd也可以是不连续任意字符
[a-z] 匹配a到z之间任意一个字符,要求连续字符,也可以连续数字,匹配[1-9]
[!abcd] 不匹配括号中任意一个字符,也可以书写[!a-d],同于写法
[^abcd] 同上,!可以换成 ^,取反的意思

特殊通配符

符号 作用
[[:upper:]] 所有大写字母
[[:lower:]] 所有小写字母
[[:alpha:]] 所有字母
[[:digit:]] 所有数字
[[:alnum:]] 所有的字母和数字
[[:space:]] 所有的空白字符
[[:punct:]] 所有标点符号

练习题

1.找出根目录下最大文件夹深度是3,且所有以l开头的文件,且以小写字母结尾,中间出现任意一个字符的文本文件,
[root@chaogelinux luffy_data]# 
find / -maxdepth 3 -type f -name "l?[[:lower:]]"
find / -maxdepth 3 -type f -name "l?[a-z]"
/usr/bin/ldd
/usr/bin/lua
/usr/sbin/lvm
/usr/sbin/lid

2.找出/tmp下以任意一位数字开头,且以非数字结尾的文件
[root@chaogelinux luffy_data]# 
find /tmp  -type f -name '[0-9][^0-9]'
find /tmp  -type f -name '[0-9][!0-9]'

3.显示/tmp下以非字母开头,后面跟着一个字母以及其他任意长度的字符的文件
find /tmp -type f -name "[^a-zA-Z][a-z]*"

4.mv/tmp/下,所有以非字母开头的文件,复制到/tmp/allNum/目录下
mv /tmp/[^a-zA-Z]* /tmp/allNum/

5.复制/tmp目录下所有的.txt文件结尾的文件,且以y、t开头的文件,放入/data目录
[root@chaogelinux tmp]# 
cp -r /tmp/[y,t]*.txt /data/

常用通配符练习

[root@pylinux tmp]# 
find /tmp  -type f  -name "[a-z].txt"        #找出a到z之间单个字符的文件
/tmp/b.txt
/tmp/e.txt
/tmp/a.txt
/tmp/l.txt
/tmp/d.txt
/tmp/c.txt

[root@pylinux tmp]# 
find /tmp  -type f  -name "[!a-d].txt"        #找出除了a到d之间单个字符的文件
/tmp/e.txt
/tmp/2.txt
/tmp/1.txt
/tmp/l.txt

[root@pylinux tmp]# 
find /tmp  -type f  -name "?.txt"            #找出所有单个字符的文件
/tmp/b.txt
/tmp/e.txt
/tmp/2.txt
/tmp/a.txt
/tmp/1.txt
/tmp/l.txt
/tmp/d.txt
/tmp/c.txt

[root@pylinux tmp]# 
find /tmp  -type f  -name "*.txt"            #找出所有的txt文本

特殊引号

名称 解释
单引号 ‘’ 所见即所得,强引用,单引号中内容会原样输出
双引号 “” 弱引用,能够识别各种特殊符号、变量、转义符等,解析后再输出结果
没有引号 一般连续字符串、数字、路径可以省略双引号,遇见特殊字符,空格、变量等,必须加上双引号
反引号 `` 常用于引用命令结果,同于$(命令)

date +%F # 显示年月日
date +%T # 显示时分秒
date +"date +%T" # 创建以时间命名的文件

重定向符号

符号 特殊符号 简介
标准输入stdin 代码为0,配合< 或<< 数据流从右向左 👈 数据发送给命令
标准输出stdout 代码1,配合>或>> 数据从左向右👉
标准错误stderr 代码2,配合>或>> 数据从左向右👉
重定向符号 数据流是箭头方向
标准输入重定向 0< 或 < 覆盖 数据一般从文件流向处理命令
追加输入重定向 0<<或<< 数据一般从文件流向处理命令
标准输出重定向 1>或> 正常输出重定向给文件,默认覆盖
标准输出追加重定向 1>>或>> 内容追加重定向到文件底部,追加
标准错误输出重定向 2> 讲标准错误内容重定向到文件,默认覆盖
标准错误输出追加重定向 2>> 标准错误内容追加到文件底部

输入重定向

[root@chaogelinux tmp]# cat < yu2.txt
我是 yu2,你是谁,想偷看我?

#mysql数据导入
mysql -uroot -p < db.sql

[root@chaogelinux ~]# cat chaoge.txt
a b c d e f g
[root@chaogelinux ~]# tr -d 'a-c' < chaoge.txt
   d e f g

[root@chaogelinux ~]# wc -l < chaoge.txt
1

ls /tmp > /dev/null 2>&1 # 把命令的正确或者错误的信息都输出到黑洞文件,这样就不会有提示信息干扰

其他特殊符号

符号 解释
; 分号,命令分隔符或是结束符
# 1.文件中注释的内容 2.root身份提示符
管道符,传递命令结果给下一个命令
$ 1.$变量,取出变量的值
2.普通用户身份提示符
\ 转义符,将特殊含义的字符还原成普通字符
{} 1.生成序列
2.引用变量作为变量与普通字符的分割
命令 解释
&& 前一个命令成功,再执行下一个命令
\ \
|| 前一个命令失败了,再执行下一个命令
! 1.在bash中取反
2.在vim中强制性
3.历史命令中 !ls找出最近一次以ls开头的命令
!! 执行上一次敲打的命令

练习题

  1. linux命令格式是什么样?
  2. linux命令必须添加参数才能执行吗
  3. 解释linux的命令提示符,如何用linux命令解析 [root@pylinux opt]#
  4. linux的目录分隔符是?
  5. 简述Linux的目录结构
  6. 切换到上一级目录
  7. 切换到上一次目录
  8. 切换到用户家目录
  9. 查看当前工作目录
  10. 当前目录是/home,以绝对、相对两种路径方式进入/opt目录
  11. 列出/opt/下所有文件,包含隐藏文件,且显示详细信息(时间、文件大小)
  12. 以树状结构显示文件夹内容
  13. 一条命令创建/tmp/chaoge/linux文件夹
  14. 创建python脚本first.py
  15. 一条命令创建/tmp/chaoge1.txt 、 /tmp/chaoge2.txt 、/tmp/chaoge3.txt
  16. 复制/opt/下所有内容到/tmp/下
  17. 更改文件名first.txt为second.txt
  18. 把/opt/下所有内容移动到/tmp下
  19. 强制删除/tmp下所有内容
  20. 查看ls命令的帮助信息
  21. 立即重启的命令
  22. 如何永久设置linux环境变量
  23. linux的常见配置文件目录是
  24. vim三种模式是?使用流程是?
  25. 查看文件且显示行号
  26. 如何清空文件内容,注意是空内容,而非空格
  27. 显示文件前30行
  28. 显示文件后50行
  29. 实时刷新文件内容
  30. 读取文件内容且倒序排序
  31. 读取文件内容进行排序后去重
  32. 读取文件内容且排序后,统计重复行的次数
  33. 统计文件一共有多少行
  34. 如何查看文件的详细信息(inode号,访问、修改时间、链接数)
  35. 找出服务器上所有以”.py”结尾的文件
  36. 找出服务器2天内被访问过的文件
  37. 找出服务器大于50M的文件
  38. 找出/tmp/目录下所有的txt文件,然后删除
  39. 把/data/html/文件夹打包压缩成data_html.tgz文件
  40. 如何解压缩alltmp.gz文件
  41. 如何解压缩data.zip文件
  42. 显示具体的系统时间,时:分:秒
  43. 如何彻底粉碎文件