一、用户和用户组管理

  1. linux是多用户多任务的操作系统,由于多个用户使用同一个操作系统,必然就涉及用户的添加、删除、修改等操作,同样的也会涉及相对应的权限分配问题。
  2. 在linux中,一切都是文件。
  3. 用户和用户组的主要配置文件:
    1. /etc/passwd 存储着用户及属性信息(名称、UID、主组ID等)
      1. root:x:0:0:Super User:/root:/bin/bash
      2. root–用户名, x–密码位,0–用户id, 0–用户组id,Super User–注释信息,/root–家目录, /bin/bas–登录成功后的命令解释器。
        1. 登录用/bin/bash, 禁止登录用/usr/bin/nologin
    2. /etc/shadow:用户密码及相关属性,以分号隔开。
      1. nihao:$y$j9T$5OyrOXKEFHYPpKbfpecGw.$v9J9Q4tTBE2uTQNqtDv2W3A8OLYIg/kIBLIaTxxtcT9:20545:0:99999:7:::
      2. 第一列:用户名, 第二列:密码值(密文)。
    3. /etc/group: 存储组及属性信息
      1. ```nihao❌1001:``
      2. nihao–组名, x–组密码, 1001–组标识,最后一列–组内用户列表。
    4. /etc/gshadow 存储着组密码及相关属性
      1. nihao:!::
      2. nihao – 组名,! – 没有设置有效密码,第三列–这里为空,表示该组没有指定的管理员,第四列–这里为空,表示该组除了初始用户外,没有其他附加成

用户

  1. 在Linux中每个用户,是通过 User Id (UID)来唯一标识的。
  2. 用户的分类:
    1. 管理员:root, 0
    2. 普通用户:1-60000 自动分配
      1. 系统用户:对守护进程获取资源进行权限分配
        1. 1-999 (CentOS 7以后)
      2. 登录用户:给用户进行交互式登录使用
        1. 1000+(CentOS7以后)
  3. 关于用户的命令:
    命令作用参数以及作用示例
    useradd创建用户-u|–uid UID #指定UID, -g|–gid GID #指定用户组,-m|–create-home #创建家目录,一般用于登录用户,-p|–password PASSWORD #设置密码,这里用的是明文,useradd -s 创建用户并指定shelluseradd -m
    userdel删除用户userdel -r: 加上 -r 参数,它可以直接删除对应的家目录和邮箱。不然的话删的不干净。-f|–force #强制删除,哪怕用户正在登录状userdel -r nihao
    passwd更改用户密码在rhel系列里面有 --stdin 参数,可以直接使用标准输入作为passwd的输入cho “123456”
    chpasswd批量更改用户密码的工具chpasswd < file, echo “用户名:密码” | chpasswdecho “zhangsan:123456”
    id查看用户的基本信息-a #显示详细信息,默认选项,-Z|–context #仅显示安全上下文信息,-n|–name #显示用户名或组名,要组合使用 -nu|-ng|-n, -g|–group #仅显示GID,就是只显示主组ID, -u|–user #仅显示UIDid -ng nihao
    getent查询用户信息、组信息或网络配置getent root

用户组

  1. 在Linux系统中,为了方便批量对一个或多个用户进行快捷的操作,我们一般会将用户加入用户组中,通过对用户组的操作,从而实现对普通用户的属性的批量操作能力。
  2. 用户组是通过Group ID(GID) 来唯一标识的。
  3. 用户组分类:
    1. 管理员组:root, 0
    2. 普通用户组:
      1. 系统用户:对守护进程获取资源进行权限分配。
        1. 1-999(CentOS7以后)
      2. 普通用户:给用户使用
        1. 1000+(CentOS7以后)
  4. 用户的主要组(primary group)
    1. 用户必须属于一个且只有一个主组
    2. 默认创建用户时会自动创建和用户名同名的组,做为用户的主要组,由于此组中只有一个用户,又称为私有组.
      1. 而如果在创建用的时候,指定一个现有的组加入,那么就不会自动创建同名的用户组。
  5. 用户的附加组(supplementary group):
    1. 一个用户可以属于零个或多个辅助组,附属组。
  6. 关于用户组的成员管理
    1. 自动创建用户和用户组,默认情况下,该组的成员自己不显示。
  7. 关于用户组的命令:
    命令作用参数以及作用示例
    groupadd创建用户组-g|–gid GID #新建组时指定组ID,默认是系统分配groupadd -g num
    groupmod修改用户组属性-g|–gid GID #将组 ID 改为 GID, -n|–new-name NEW_GROUP #改名为 NEW_GROUP,-p|–password PASSWORD #将密码更改为(加密过的) PASSWORDgroupmod -g 10086 group4
    groupdel删除用户组-f|–force #强制删除groupdel -f nihao

二、上下文 – Context

  1. 程序所处的环境
    1. 在 Linux 中,安全上下文就像是给系统里的 “人”(进程)和 “东西”(文件、目录)都发了张 “身份卡”。
    2. 对于进程(运行的程序)来说,这张 “身份卡” 规定了它能干啥、不能干啥,就像保安会根据身份卡决定让不让你进某些地方。
    3. 普通用户程序和管理员程序的 “身份卡” 不同,权限也不一样。
    4. 对于文件和目录,“身份卡” 决定了谁能碰它、能怎么碰(读、写、改)。重要文件的 “身份卡” 限制很多,只有特定身份的进程才能动
  2. rhel系列os:rhel,centos,rocky,openeuler…
    1. 使用的是selinux
      1. 管理比较紧,限制比较多。
      2. 查看状态: getentforce
      3. 临时关闭:setentforce 0
      4. 永久关闭:去 /etc/selinux/config 里面把 SELINUX=disabled
  3. debian 系列
    1. debian, ubuntu, xx
    2. 使用的是apparmor
      1. 管理比较松,限制比较少

三、权限操作:

  1. Linux系统下的文件权限体系是控制对文件和目录访问权限的重要机制,它决定了谁可以读取、修改或执行文件。这一体系是Linux系统安全性和数据保护的基础。

  2. 在linux系统中,文件的权限,主要体现在两个方面:文件属性、操作权限。
    在这里插入图片描述

  3. 我创建的文件的归属

    1. 所有者:user
    2. 归属组:group
    3. 其他人: other
  4. 文件归属:
    在这里插入图片描述

  5. 数字标识:

    1. r:4, w:2,x:1
    2. rwx=7, r-x=6,r-x=5,—=0
  6. 默认权限

    1. linux系统在创建文件的时候,会有一个默认的权限。
    2. 普通文件的权限是 644,普通目录文件的权限是755。
    3. 在Linux系统中,文件创建时的默认权限与umask(用户文件创建掩码)相关
    4. 权限的算法:顶格的权限 - 掩码
    5. 掩码查看: umask
  7. 权限相关命令。

    命令作用参数以及作用示例
    chown修改文件的属主,也可以修改文件属组-R 递归操[OPTION]… [OWNER][:[GROUP]] FILE…, owner 表示所有者,:group 和 .group 表示归属组,owner. 和 owner: 表示所有者和归属组一样
    chmod修改文件的操作权限-R 递归操作+ 增加某些权限,- 删除某些权限,= 只保留某些权限,覆盖写法, chmod 005 -R /chown/dir1/
  8. 特殊权限
    在这里插入图片描述

    1. SUID:
      1. 任何一个普通用户,在使用具有SUID权限的 命令 的时候,都会临时具有root的身份(比如 /usr/bin/passwd)。
      2. 能够让一个普通用户,临时具有root身份的能力。
      3. 比较危险,能不用就不用。
    2. SGID:
      1. 如果在xx目录,组权限里面包含了SGID权限,那么无论谁在xx目录下创建的文件,它的属组都是目录的权限组。
    3. Stickbit 粘滞位
      1. 如果一个目录拥有stickbit 权限,那么谁在这个目录下创建的权限,只能自己管理[删|改].
      2. 以上对root无用。

四、vim

  1. 关于内容检索 — 可以被箭头替代。
  2. 关于内容变化 — 可以被sed命令替代。
  3. 需要学习的内容。
    1. 编辑文件的模式变化
    2. 查看文件的快捷属性
      1. 全局的配置文件,让文件更好看一点。
    3. 常用编辑内容的快捷键。
  4. 在vim中,光标虽然是占了一个字符,但可以把它看成是一个插入在字符左侧的竖线。
  5. 进入编辑模式
    1. i 编辑的时候,在光标指的字符前面插入。
    2. a 编辑的时候,在光标所指的字符的后面插入,追加。
    3. o 编辑的时候,在光标所指的字符的下一行,插入,空行开头。
    4. O 编辑的时候,在光标所指的字符的上一行,插入,空行开头。
    5. I 编辑的时候,在光标所指的字符的行首插入
    6. A 编辑的时候,在光标所指的字符的行尾插入。
    7. w 编辑的时候,定位到下一个字符的首部。
    8. e 编辑的时候,定位到下一个字符的尾部。
    9. b 编辑的时候,定位到上一个字符的首部
  6. 定位内容,未编辑模式下
    1. 查找内容
      1. /关键字 向下查找
      2. ?关键字 向上查找
      3. n 与命令同方向 往下查找
      4. N 与命令反方向 往上查找
    2. 定位:
      1. 行首部 shit + 6 ^
      2. 行尾部 shift + 4 &
      3. 跳转到行首(不带空格) 0
      4. 指定行 :数字
      5. 首行 gg
      6. 尾行 G
  7. 定位完毕后,整体编辑.未编辑状态
    1. dd 光标所在行
    2. 2dd 删除2行[包括光标所在行]
    3. u 撤销刚才的动作。
    4. uuuuuu… 连续撤销,直到未编辑状态。
    5. ctrl+r 撤销掉撤销,相当于windows中的ctrl + y
    6. yy 复制光标所在行
    7. 6yy 复制6行[包括光标所在行]
    8. p 如果为整行,则粘贴当前光标所在行的下方,否则,则粘贴至光标所在处的后面。
    9. P 大P,如果为整行,则粘贴当前光标所在行的上方,否则,则粘贴至光标所在处的前面。
    10. x 剪切当前字符
    11. X 剪切前一个字符
    12. 4pp 将复制的内容粘贴4次。
    13. dG 删除,光标所在行到尾行
    14. dgg 删除,光标所在行到首行
    15. d$ 删除, 光标到行尾[包括光标所在字符]
    16. d^ 删除,光标到行首[不包括光标所在字符]
  8. 整体编辑,命令行模式下。
    1. 6;+4 d 第6行 + 4行 删除
    2. 6,8 d 第6,7,8行删除
    3. ,9 d 光标所在行,到第9行删除
    4. ,$ d 光标所在行,到行尾删除
    5. w filename 写文件内容到当前文件中,可以配合范围的来搞。
    6. r filename 将文件内容读取到当前文件中。
    7. t行号 将前面指定的行复制到N行后
    8. m行号 将前面指定的行移动到N行后。
    9. 选择范围:
      1. % 代表全文
      2. 替换操作:
        1. 范围 s/源内容/替换后内容/g
          1. s是行,如果不写其他则认为是当前行。
          2. g表示:所有匹配到的源内容,g不写,代表的是每行的第一个匹配到的原内容
          3. / 可以替换成 # 或者@,免得有/在目标字符里。
          4. i 忽略大小写
          5. gc 全局替换,每次替换前询问。
      3. 全文替换
        1. % s/源内容/替换后内容/g
        2. 行1, 行2 s/源内容/替换后内容/g
  9. 分块操作
    1. 选择范围:
      1. ctrl + v, 然后方向箭头 左右
    2. 操作:
      1. 删除 delete
      2. 插入:
        1. shift + i
        2. 输入内容
        3. Esc [部分OS,有可能需要两次ESC]

五、三剑客

  1. grep
    1. 命令作用参数以及作用示例
      grep信息过滤-n:显示行号,-i:不区分大小写,-r:逐层遍历目录查找,-v:查找不包含指定内容的行,反向选择,-E:使用拓展正则匹配grep -n a.txt
    2. grep -nir: 在当前目录或指定目录下,递归搜索所有文件,查找包含某个特定字符串的行,忽略大小写,并显示匹配行的行号和所在文件名。
    3. grep -E 也是 egrep
      1. grep -E '关键字a|关键字b;
  2. sed:
    1. 命令作用参数以及作用示例
      sed内容编辑-n:不输出模式空间内容到屏幕,即不自动打印所有内容,-e:基于命令对实现文件的多点编辑操作,-i:对文件进行边界sed -i ‘操作’ a.txt
    2. 在这里插入图片描述
      在这里插入图片描述
  3. awk:
    1. 命令作用参数以及作用示例
      awk内容格式输出-F:指定列的分隔符,默认一行数据的列分割符是空格,-f 指定读取程序的文件名awk -F:“:” ‘{print $1,$4} a.txt’
    2. awk 本质是一种编程语言,内部提供了很多环境变量,可以直接拿过来用。
      1. NF – 每一行有多少列,列的总数
      2. FS – 输入时候的列分隔符
        1. awk -v FS=“:” ‘{print $7}’ passwd
      3. OFS – 输出时候的列分隔符
        1. awk -F":" -v OFS=“--------” ‘{print $7,$1}’ passwd
    3. 0 为一整行, 0 为一整行, 0为一整行,(NF-1)倒数第二列。
    4. {print 打印动作进阶}
      1. 多内容打印,使用逗号隔开 $1,$4
        1. 如果输出的列分隔符不想用空格
        2. 方法1:OFS=“xxx” 全局更改
        3. 方法2:{$1"分隔符"$4} 临时使用拼接
      2. 行号打印
        1. NR – 代表当前行的行号
          1. awk -F":" -v OFS=“--------” ‘{print NR,$7,$1}’ passwd
      3. ‘范围条件{print}’
        1. /关键字/ 确定所在行
          1. awk ‘/awk5/{print NR,$1,$3}’ awk.txt
        2. 行号 确定所在行
          1. NR==2
          2. awk ‘NR==2{print NR,$1,$3}’ awk.txt
    5. 格式显示:
      1. BEGIN{}:读入第一行文本之前执行的语句,一般用来初始化操作。
      2. {}:逐行处理的执行命令
      3. END{}:处理完最后以行文本后执行,一般用来处理输出的结果。

六、正则表达式

在这里插入图片描述

  1. 基本正则表达式(BRE)

    1. 与拓展正则表达式的主要区别在于元字符是否需要转义,以及支持的功能范围。
    2. 基本正则表达式元字符需要用 \转移才能作为元字符使用。还是使用拓展正则表达式吧,太麻烦了。
    3. grep(默认),sed(默认)
  2. 扩展正则表达式(ERE)

    1. grep -E, sed -r/-E、awk、egrep
  3. 字符匹配

      • 匹配任意单个字符,包含中文
    1. [] 匹配指定范围内的单个字符
      1. [shuiji]、[0-9]、[a-z]、[a-zA-Z]
    2. [^] 匹配指定范围外的任意单个字符
      1. [^shuiji]
    3. | 匹配管道符左侧或者右侧的内容。
  4. 锚定匹配:

    1. 主要是在字符匹配的前提下,增加了字符位置的匹配。
    2. ^ 行首锚定,用于模式的最左侧
    3. $ 行尾锚定,用于模式的最右侧
    4. ^PATTERN$, 用于匹配整行
    5. ^$ 空行
    6. 1*$ 空白行
    7. \< 或 \b 词首锚定,用于单词模式的左侧
    8. \> 或 \b 词尾锚定,用于单词模式的右侧
    9. \<PATTERN\>, 匹配整个单词
    10. 单词是由字母,数字,下划线组成。
  5. 分组符号:

    1. 当我们使用正则模式匹配到的内容有很多项的时候,默认会全部输出。如果我们仅仅需要特定顺序的一个匹配内容的话,就用到我们这一节的知识点 – 分组。
    2. 所谓的分组,其实指的是将我们正则匹配到的内容放到一个()里面
      1. 每一个匹配的内容都会在一个独立的()范围中
      2. 按照匹配的先后顺序,为每个()划分编号
      3. 第一个()里的内容,用 \1代替,第二个()里的内容,用\2代替,依次类推
      4. \0 代表正则表达式匹配到的所有内容
    3. 注意:
      1. () 范围中支持|等字符匹配内容。从而匹配更多范围的信息
      2. 关于()信息的分组提取依赖于文件的编辑工具,我们可以借助于 sed、awk功能来实现
      3. 提示: sed -r ‘s/原内容/修改后内容/’
    4. 示例:
      1. (M|m)any 可以标识 Many 或者 many
  6. 通配符和正则

    1. 正则表达式用来在文件中匹配符合条件的字符串,主要的目的是包含匹配。
      1. grep、awk、sed等命令可以支持正则表达式
    2. 通配符用来匹配符合条件的文件名那,通配符是完全匹配。
      1. -ls、find、cp之类命令不支持正则表达式,可以借助shell通配符来进行匹配。
        1. .: 匹配任意一个字符
        2. *: 匹配任意内容
        3. ?: 匹配任意一个内容
        4. []: 匹配括号中的一个字符。

七、文件管理

  1. 只要涉及文件数据信息的命令查看,用以下的样式
    1. 数据源 | 命令 cat 文件 | grep xxx
    2. 命令 数据源 grep xxx 文件
  2. cut命令
    命令作用参数以及作用示例
    cut提取文本文件或STDIN数据的指定列-c:只选中指定的这些字符, -d: 使用指定分界符代替制表符作为区域分界, -f:提取文本中指定的列cut -f1 test.txt
  3. tr命令
    命令作用参数以及作用示例
    tr字符转换、替换、删-d 删除指定字符echo “this-2026-Job” | tr -d ‘0-9’
  4. sort 命令
    1. 命令作用参数以及作用示例
      sort将文件的每一行作为一个单位,从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出-u: 去除重复行, -r:降序排列,默认是升序,-n:以数字排序,默认是按字符排序。sort -r at.xt
    2. tip:只要是涉及xxx信息统计排序的场景,用下面的方法进行统计
      1. 信息来源 | sort | uniq -c | sort -r
  5. 文件查找命令 – 查找普通文件
    1. 查找很久以前的文件 – 离线查找 local
      1. local 就相当于一个图书馆,对文件的路径属性进行登记造册。
        1. 将新的文件更新上去 updatedb.
        2. 删掉的文件也是updateda 更新一下。
    2. 实时在线查找文件 – find
      1. 命令作用参数以及作用示例
        find实时在线查找文件-name:按文件名查找,-type:按文件类型查找,-size:按文件大小查找, -time:按天数查找文件最后修改时间find -name a.txt
      2. 如果不写路径,就默认在当前路径查找。如果写了路径,就按照路径来查找。

      3. 文件大小属性解读。

        1. 在这里插入图片描述
      4. 文件时间解读。

        1. 在这里插入图片描述
      5. 进阶动作解读 :

        1. 在这里插入图片描述
    3. 关于find常使用的命令样式
      1. find 路径 -name “文件名关键字”
      2. find -name “关键字” | xargs linux命令
      3. find -name “关键字” exec linux命令 ;

  1. [:space:] ↩︎

更多推荐