鸟哥笔记1

鸟哥笔记

主机规划与磁盘分区

linux文件权限与目录配置

ll 命令出现的7个字段的含义

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8lNEVAMd-1690211030729)(C:\Users\prefixD\Documents\myTypora\myTyporaImage/1688997549901549406.png)]

  • 第一栏代表文件的类型和权限

    • d 代表目录、- 代表文件、b 代表块设备、l 代表链接文件
    • R 读取、w 写入、x 执行
  • 第二栏代表这个文件指向的inode,总共有几个文件都指向这个inode,与硬链接有关

  • 第三栏代表文件所属用户

  • 第四栏代表文件所属用户组

  • 第五栏代表文件的大小,单位为bytes

  • 第六栏代表文件创建的时间或者近期修改的时间

  • 第七栏代表文件的名称

修改文件的属组与权限
  • 修改属组与所属用户

    • chgrp:修改用户组,使用 -R 参数可以递归修改,如 chgrp -R root /etc
    • Chown:修改所属用户,使用 -R 参数可以递归修改,chown同时也可以修改属组,如 chown -R big:big /etc
  • 修改权限

    • chmod:修改文件的权限,使用 -R 参数可以递归,r:4 、w:2、x:1
目录与文件的权限的区别
  • rwx权限对于文件来说,是对文件内容的权限

    • r:对文件内容的读取权限,w:对文件内容的修改权限,x:对文件的执行权限
  • rwx权限对于目录来说,是对目录中的文件名的权限

    • r:对目录内文件名的读取权限
    • w:对目录内文件增删和修改文件名的权限
    • x:进入目录的权限,没有x权限就不能cd进去
  • rwx权限对与目录的比喻

    • 假如目录是一个抽屉,抽屉的表面贴了一张纸,上面只写了文件的名称(仅名称)。那么x权限就是抽屉的钥匙,如果没有x权限,即使有w权限也没什么用,如果没有x权限,即使有r权限,也只能读取抽屉表面上写的文件名称(仅名称),读取不到文件的详细信息如创建时间、属组等等
目录和文件的相关操作
  • Cd :进入某个目录

    • Cd - :返回上一个目录

    • Cd ~ :进入当前用户家目录

    • Cd ~account :进入account的家目录

  • ls:列出目录的文件

    • -a:列出所有文件,包含隐藏文件
    • -l:列出文件的详细信息
    • -i:列出文件的inode号码
    • -h:以易读的单位显示文件的大小
    • -R:递归显示,文件夹中的文件也一并列出
    • -n:列出UID与GID而非用户与用户组
  • Cp:拷贝文件或者目录

    • -a:保持被复制文件的所有特性不变(包括selinx、links等等),一般备份时使用cp都要加-a参数,使用-a参数时复制文件夹不需要加-r,cp命令一个-a参数就够了
文件的时间
  • 文件有以下三种时间

    • Mtime:文件内容的修改时间

    • Ctime:文件状态的改变时间,比如文件的权限、属组被改变了,这个时间就会刷新

    • Atime:文件的最近一次读取时间,如使用cat命令就会刷新这个时间

  • Ll 命令默认显示的是mtime

文件与目录的默认权限
  • 文件的默认权限是666(rw-rw-rw-)

  • 目录的默认权限是777(rwxrwxrwx)

  • 文件与目录真正的权限是默认权限减去umask的权限,root用户默认的umask为0022,普通用户的umask为0002

    • 此时如果root创建一个文件,则权限为rw-r–r–,如果普通用户创建一个文件则权限为rw-rw-r

    • 文件真正的权限是默认权限减去umask的权限,不是默认权限的值减去umask权限的值,如下

    • umask为0003,创建的文件的权限为rw-rw-r–,文件默认就没有x权限,就不可能从默认权限中减去x权限

  • umask的值设置的设置方式为umask 0000,umask后面直接加值即可

文件的隐藏属性
  • 文件的隐藏属性如chattr,每个文件系统的支持情况都不一样,其中ext4支持最完善,xfs部分支持,但是这两个文件系统都支持以下最常用的参数

    • -a:该参数使文件内容只能增加,不能修改以前已经存在的内容,且文件不能被删除和改名

    • -i:该参数使文件内容不能被修改,文件不能被删除和改名

  • 隐藏属性的查询与设置

    • chattr:设置隐藏属性,chattr -+= 【a/i】filename,-是减去属性,+是加上属性,=是直接设置为某属性
    • lsattr:查看文件的隐藏属性
SUID、SGID、SBIT
  • SUID

    • 只能作用与二进制文件

    • 执行者需要具有x权限

    • 执行者将具有该程序拥有者的权限,且权限二进制文件执行过程中有效,如 /usr/bin/passwd

  • SGID

    • SGID可以作用于二进制文件和目录
      • 作用于二进制文件

        • 执行者需要具有x权限,

        • 执行者将具有该程序用户组的权限,且权限二进制文件执行过程中有效

      • 作用于目录

        • 用户若对此目录有rx权限,则用户就可以进入该目录,进入该目录后用户的有效用户组就是该目录的用户组了,如果在该目录创建一个文件,则文件的用户组不是用户的用户组,而是目录的用户组,SGID在目录的应用对于项目开发十分重要
  • SBIT

    • 当用户对此目录有wx权限时,即具有写入权限
    • 当用户在该目录创建文件或者目录时,仅有root和自己才有权力删除、修改文件名,即使其他用户对该文件所在的文件夹具有rwx权限也不能修改不是自己的文件,如 /tmp
  • 设置 SUID、SGID、SBIT

    • SUID:4、SGID:2、SBIT:1

    • 跟设置普通权限一样,比如以下设置文件拥有SGID

    • Chmod 2777 test.txt

文件查找命令find
  • 常用参数

    • 按照文件相关的时间查找文件,-5表示第五天的文件,-5表示5天之内的文件,+5表示5天之前的文件

      • find path [-mtime -ctime -atime] [n -n +n]
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QQdBZOZc-1690211030730)(…/myTyporaImage/1688997582693700816.png)]
  • 用户相关的用法

    • find path [-user name、-group group、-nouser、-nogroup]
  • 按照文件名称查找

    • find path -name name
  • 按照文件大小查找

    • find path [+size -size]:表示查找大于或小于某个大小的文件,大小后面可以跟单位 find / +100k
  • 按照文件权限找

    • find path [-perm mode 、 -perm -mode 、-perm /mode]: -perm mode表示文件权限等于这个权限,-perm -mode表示文件权限全部包含mode权限,-perm /mode表示文件权限可以部分包含mode权限,比如 -perm 755 会列出权限为r--------权限的文件,因为7包含r

linux目录与文件管理

linux磁盘与文件系统管理

linux磁盘与文件系统管理

文件系统特性
  • linux的ext系列的文件系统通常由以下三部分组成

    • 数据区块:实际存储文件的内容
    • inode表:存储文件的权限与属性
    • 超级区块:记录文件系统的整体信息,比如数据区块和inode表的使用量和剩余量
  • ext系列文件系统是索引式文件系统,inode与数据区块都有自己唯一的编号,inode储着数据区块的编号,因此通过inode可以找到文件的内容

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f7wITLRW-1690211030731)(…/myTyporaImage/image-20230709224138266.png)]
  • 当文件系统格式化后,inode与数据区块的大小就不会再变动了,除非(或者使用resize2fs调整其大小)重新格式化修改其大小

  • 当文件系统过大时比如超过100G,这时候文件系统会被分为多个区块群组,每个区块群组都有独立的数据区块、inode、超级区块,

    • 数据区块
      • 数据区块的大小在ext2文件系统中有1k、2k、4k,不同的数据区块大小对应着不同能够支持的最大单文件大小和文件系统大小
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7XlhuyRM-1690211030731)(…/myTyporaImage/image-20230709224643406.png)]
      • 原则上数据区块大小在文件系统格式化时已经确定了,不能修改。一个区块只能放置一个文件的内容(如果区块过大会造成空间浪费、如果过小会造成频繁读写),所以格式化时应考虑使用场景
    • inode表
      • inode表主要记录文件的属性与数据区块存放的位置,如文件的rwx属性、文件的用户和用户组属性、文件的大小、文件的mtime ctime atime等等
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2R3FFj07-1690211030731)(…/myTyporaImage/image-20230709225059589.png)]
    • 超级区块
      • 超级区块主要记录inode与数据区块的总量和使用量、文件系统的挂载时间、文件系统的挂载状态等等
      • 一个文件系统中只有一个超级区块,在大的文件系统中会分为多个区块群组,区块群组中可能含有多个超级区块,但是只有第一个区块群组的超级区块在用,其它区块群组的超级区块是第一个区块群组超级区块的备份
  • 目录和文件系统的关系

    • 文件系统会为目录分配一个inode,用来记录目录权限与属性,并为目录分配数据区块用来记录目录中文件与文件对应的inode,所以文件内容的存储与文件名无关,文件名只是目录的一个内容
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9rREZdxD-1690211030731)(…/myTyporaImage/image-20230709230006351.png)]
  • 挂载点的意义

    • 挂载点是文件系统的入口,这也就是为啥iso镜像文件必须要挂载到某个路径,才能读取里面的内容
  • 查看支持的文件系统

    • 查看linux支持的文件系统

      • ll /lib/modules/3.10.0-1160.90.1.el7.x86_64/kernel/fs
        
    • 查看已经加载到内存中支持的文件系统

      • cat /proc/filesystems
        
  • linux文件系统与VFS

    • linux只对接VFS,VFS好比做一个driver
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AlqCJibc-1690211030732)(…/myTyporaImage/image-20230709231552388.png)]
XFS文件系统
xfs文件系统简介
  • xfs相对于ext系列的优势

    • ext系列文件系统在格式化的时候,会预先规划出所有的inode、数据区块、超级区块等数据,如果文件系统非常大比如TB以上,则格式化的时间会非常久。xfs的inode与数据区块都是系统需要时才格式化的,所以xfs在创建和备份比etx文件系统快很多
  • xfs文件系统主要分为三个部分:资料区、文件系统活动登录区、实时运作区

    • 资料区与ext家族的区块群组类似,里面含有超级区块、inode、数据区块
    • 文件系统活动登录区用来被记录文件系统的变化,相当于日志区。当文件系统异常时,可以用文件系统活动登录区来进行修复,xfs可以指定外部磁盘来存储文件系统活动登录区,比如存到SSD盘上,这样可以更快速的工作
    • 实时运作区相当于数据存储到资料的缓冲,文件数据先放置到运作区,让后再写入资料区
  • xfs常用命令

    • xfs_info dev:获取xfs文件系统的详细信息

    • xfs_growfs devname:当磁盘由100G扩容到200G时,文件系统的大小不会自动变成200G,需要使用xfs_growfs devname对文件系统进行扩容,ext系列文件系统使用resize2fs进行扩容

    • xfs_repair dev:当文件系统异常时,用来修复xfs文件系统

    • xfsdump:对xfs文件系统进行备份

      • 对xfs文件系统的备份分为全量备份和增量备份,当进行过一次全量备份后才能进行增量备份,全量备份的level为0,增量备份的level大于0,备份的相关信息保存在 /var/lib/xfsdump/invertory中

      • 全量备份命令

        • xfsdump -l 0 -L label -M label -f 备份到哪个文件中  待备份的xfs文件系统
          
        • -L:备份的简易说明 -M:也是备份的简易说明 -l:指定备份等级

      • 查询linux中xfs文件系统的备份情况

        • xfsdump -I
          
      • 增量备份命令

        • xfsdump -l 1  -L label  -M label  -f 备份到哪个文件  待备份的xfs文件系统
          
    • xfsrestore:对xfs文件系统的备份进行恢复

      • xfs文件系统的备份恢复也分为全量恢复和增量恢复,必须在全量恢复的基础上进行增量恢复,同时必须按照备份顺序进行文件系统的恢复,如level0 --> level1 --> level2

        • xfsrestore  -f 备份的文件  -L 备份时指定的label  待恢复的xfs文件系统挂载点 
          
      • xfsrestore对文件系统的恢复,同名的文件会覆盖,文件系统内新的文件会保留不会被删除

      • xfsrestore 恢复备份中的某个文件

        • xfsrestore  -f /tmp/backup.dump  -L boot_all  -s test.txt  待恢复的xfs文件系统挂载点 
          
          • -s:指定从备份的文件系统中恢复test.txt文件,当然如果不知道备份的文件系统中有什么文件可以使用 -i 参数进入交互模式,按照提示进行操作即可

            • xfsrestore  -f /tmp/backup.dump  -i  待恢复的xfs文件系统挂载点 
              
文件系统的建单操作
  • df:直接读取文件系统的超级区块,速度较快
    • df -Th :以易读的单位显示文件系统的使用情况,并显示文件系统名称
  • du:会去文件系统内搜寻文件数据,速度较慢
    • du -sh * :统计当前目录磁盘使用情况,默认是递归到子目录的
软硬链接
  • ln:默认不加参数是硬链接
    • ln -i target filename:建立硬链接,硬链接不能对目录建立,硬链接不能跨文件系统
    • ln -s target filename:建立软连接,软连接可以对目录建立,软连接可以跨文件系统
磁盘分区、格式化、检验、挂载
  • 磁盘分区步骤

    • 先使用lsblk查找出要进行分区的块设备
    • parted devname print:查看块设备使用的分区表是MBR还是GPT
    • MBR分区表使用fdisk,GPT分区表使用gdisk,不可混用,否则容易造成磁盘分区表损坏
    • 使用gdisk或者fdisk对磁盘进行分区后,内核可能不会自动更新磁盘的分区信息,需要手动使用partprobe -s更新内核的磁盘分区信息
  • 磁盘格式化

    • mkfs
      • mkfs.xfs devname:格式化xfs文件系统
      • mkfs.ext4 devname:格式化ext4文件系统
      • 如果分区内已经有文件系统,需要使用 -f 参数来强制格式化,如:mkfs.xfs -f /dev/vda
  • 文件系统校验

    • 如果文件系统损坏了,需要用以下命令尝试挽救
      • xfs_repair 挂载点:针对xfs文件系统的修复命令,xfs文件系统不能被挂载
        • -f:强制对文件系统进行检查修复
        • -n:单纯的检查文件系统,不动文件系统的数据
        • -d:当 / 挂载点的xfs文件系统损坏时,需要进入单用户模式后,并且加上 -d 参数才能对xfs文件系统进行检查修复,这时xfs文件系统可以不用卸载(-d参数会强制对该设备进行检查修复)
      • fsck 挂载点:针对ext系列文件系统的修复命令,ext文件系统不能被挂载
        • -p:如果检查期间需要输入yes,则会自动输入
        • -f:强制检查,一般fsck没有发现unclean的旗标,不会主动进入细部进行检查,-f参数会强制fsck进入细部检查
  • 文件系统的挂载与卸载

    • 文件系统与挂载点的注意事项
      • 一个文件系统不能被多个挂载点挂载,一个挂载点只能挂载一个文件系统
      • 挂载点在挂载文件系统前应为空目录,否则挂载文件系统后,原本存在的文件则会被隐藏起来,等到文件系统卸载后才能显示
    • 挂载命令mount
      • mount [ -t 文件系统 ] 装置文件名 挂载点
        • -t:指定要挂载的文件系统,有时不用-t指定文件系统也行,mount指令会自动识别设备的文件系统
      • mount -a
        • -a:按照 /etc/fstab文件进行检查,将文件中没挂载的设备挂载上来(已经挂载完成的不会动)
      • mount -o rw,remount 装置文件名 挂载点
        • -o参数可以在挂载时指定很多特性
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UFGqciMR-1690211030732)(…/myTyporaImage/1688986692765437149.png)]
  • 卸载命令umount

    • umount 装置文件名或者挂载点
      • -f:强制卸载,当使用网络文件系统时(NFS),如果网络文件系统有问题了,在卸载时会被卡主,这时就需要-f参数了
      • -l:立刻卸载文件系统,比-f还强
  • 文件系统信息修改

    • xfs
      • xfs_admin [ -lu ] [ -L label ] [ -U uuid ] 挂载点
        • 小写的 l 和 u 是查询label和uuid的,大写的 L 和 U 是设置label和uuid的,磁盘设备的uuid非常重要,一块磁盘在多个linux系统中文件名称是不固定的,但是uuid在多个linux系统中是固定的。当使用xfsdump对xfs文件系统进行备份后,把数据还原到另一个磁盘上,这个备份设备的uuid和还原设备的uuid就会相同,造成冲突,这时就需要修改设备的uuid然后再进行相应的挂载
    • ext4
      • tune2fs [ -L label ] [ -U uuid ] 装置文件名
        • -L修改标签,-U修改uuid
设置开机挂载
  • 把需要开机挂载的设备添加到 /etc/fstab,fstab文件的内容解析如下

    • [装置/UUID]  [挂载点]  [文件系统]  [文件系统参数]  [dump]  [fsck]
      
    • dump代表备份,一般对文件系统使用其它的备份方案,不用这个dump,填 0 即可

    • fsck代表对磁盘进行开机检查,这个方式只适用于ext系列文件系统,xfs文件系统不能使用,一般也只填 0

  • /etc/fstab文件是记录开机时需要挂载的文件系统,/etc/mtab和/proc/mounts是记录文件系统的挂载情况,挂载或者卸载文件系统时这两个文件会同时变动的,可以用这两个文件查看linux当时文件系统的挂载情况

交换内存设置
  • 交换内存:当物理内存不足的时候,会额外使用一些磁盘空间来当内存使用,这些磁盘空间被称为交换分区
  • 将磁盘分区格式化成swap格式: mkswap /dev/vda6
  • 将格式化好的swap文件系统添加到交换分区:swapon /dev/vda6
  • 查询交换分区使用了哪些swap文件系统:swapon -s
  • 将swap文件系统移出交换分区:swapoff /dev/vda6

学习shell script

Shell Scripts

shell的书写
  • shell脚本第一行默认都是指定shell程序,如下,这行的含义是本脚本文件内使用/bin/bash的语法,并且在执行脚本时如果不指定shell程序,则默认使用/bin/bash进行执行

    • #!/bin/bash
      
  • “ # ” 号代表注释的开始

shell与用户交互的命令
  • read:与用户交互的同时,获取用户的输入给变量

    • read  -p "enter your name"  yourname
      
shell时间相关的命令
  • date

    • date +"%Y-%m-%d-%H:%M:%S"	:2023-07-12-15:11:40		+号代表使用格式化
      
      • %Y:年份
      • %m:月份
      • %d:天
      • %H/h:大写的H是24小时制,小写的h是12小时制
      • %S:秒数
      • %s:从1970-01-01 00:00:00 UTC 到现在的秒数
    • date  -d  "2023-07-12-15:11:40"  +"%Y-%m-%d-%H:%M:%S"		对指定时间进行格式化
      date  -d  "[+ -]5  year/month/day/hour/second"  +"%Y-%m-%d-%H:%M:%S"		以当前时间为基准,将时间向 前/后 进行调整,并格式化显示
      
shell 获取随机数
  • cat /proc/sys/kernel/random/uuid :会获得一个32位的随机数

  • echo $RANDOM :获取一个[0,32767] 范围的随机数

shell变量的获取
  • 有两种方式

    • echo $env
      
    • echo ${env}
      
shell命令值的获取
  • 有两种方式

    • echo $(cat /etc/resolve.conf)
      
    • echo `cat /etc/resolve.conf`
      
shell的数值运算
  • shell中默认变量的类型是字符串,进行数值运算的话需要特定的格式

    • max=10
      min=5
      sum=$(( max + min ))			# 等号周边不能有空格,运算符周边有没有空格都可以,加减乘除都可以算,精确到整数
      
    • max=10
      min=5
      declare -i sum=${max}+${min}		# 等号和运算符周边不能有空格,加减乘除都可以算,精确到整数
      
    • max=10
      min=5
      echo "scale=${num}; 4/3" | bc			# bc 可以进行小数点的运算,scale为保留的小数位数
      
shell的判断
  • shell的判断主要使用test和 [](中括号),在判断中使用 = (一个等号) 和 ==(两个等号)效果是一样的,不过考虑到其它语言的使用方法,建议使用 == 进行相等判断

  • test: 使用时要在符号两端有空格,不然会有问题

    • image-20230711201742584.png
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q9R7HZSK-1690211030732)(…/myTyporaImage/1689222954929473173.png)]
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-26zcQiOd-1690211030733)(…/myTyporaImage/1689222938533146298.png)]
  • []:跟test的使用方法基本一样,就是有些格式要注意,如下

    • 要注意的空格
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KE02UdFc-1690211030733)(…/myTyporaImage/1689222921353140898.png)]
  • 在使用shell判断时,要注意变量值中间有没有空格,如果有空格需要用双引号引起来,不然变量值替换的时候会在原本命令上多出一个空格,造成歧义

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DoZKOiaP-1690211030733)(C:\Users\zwx1098406\AppData\Roaming\Typora\typora-user-images\image-20230712110229648.png)]
shell的默认变量
  • $ 0 1 2 3 … 变量的意义如下
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VZpV9qZE-1690211030733)(…/myTyporaImage/1689222813836903955.png)]
  • 特殊变量
    • @ 和 @和 @*和的差别在于双引号, @ 能够当做数组用, @能够当做数组用, @能够当做数组用,*因为中间没有双引号分割,只能当做一个整体用
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sKAMBR23-1690211030734)(…/myTyporaImage/1689222798340456484.png)]
    • shift n:将shell脚本接收的参数左移(最前面的变量会被移除掉),n代表左移的位数,不写n默认左移一位,效果如下
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cPQaHdqV-1690211030734)(…/myTyporaImage/1689222780668156672.png)]
shell 条件判断
  • if

    • if [ Condition judgment ]; then
      cmd
      fi
      
    • if [ Condition judgment ]; then
        cmd
      else
        cmd
      fi
      
    • if [ Condition judgment ]; then
        cmd
      elif [ Condition judgment ]; then
        cmd
      else
        cmd
      fi
      
  • case

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-osOsDykK-1690211030734)(…/myTyporaImage/1689222759032160669.png)]
shell函数
  • shell函数的格式
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sms4u0Hg-1690211030734)(…/myTyporaImage/1689222691835842417.png)]
  • shell函数的默认变量
    • $0:脚本的名称,不论在脚本中还是在函数中,$0都代表脚本名称
    • 123... :代表函数的入参,即使函数没有入参,也不能使用 1 2 3... :代表函数的入参,即使函数没有入参,也不能使用 123...:代表函数的入参,即使函数没有入参,也不能使用n 获取脚本的入参,函数没有入参时其值为空
    • $#:函数入参个数
    • @ / ¥ ∗ :函数的所有入参, @ / ¥*:函数的所有入参, @/¥:函数的所有入参,@代表每个变量用双引号包住以空格分割,$*代表所有变量用一个双引号包住,变量中间以空格分割
shell 循环
  • while:当条件成立,就执行

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jzSTb4vX-1690211030735)(…/myTyporaImage/1689222670447728560.png)]
  • for…do…done

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MTMEexxt-1690211030735)(…/myTyporaImage/1689222646810246912.png)]

      • for循环中的数组,用空格分开就行

        • for i in 1 2 3 4
          for i in {1..10}
          for i in $(seq 1 100)
          
    • for与其它程序相似的用法

      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uk5ctqyO-1690211030735)(…/myTyporaImage/1689222627183887625.png)]
shell脚本调试模式
  • sh -x test.sh -x就是进入调试模式,执行过程会打印到屏幕

linux账号管理与acl权限设置

linux账号管理与acl权限设置

用户账号介绍
  • 与用户相关的两个重要文件

    • /etc/passwd

      • 该文件中主要介绍账号的一些基本信息,共有7个字段,意义如下

        • root:x:0:0:root:/root:/bin/bash
          bin:x:1:1:bin:/bin:/sbin/nologin
          daemon:x:2:2:daemon:/sbin:/sbin/nologin
          
          • 1:账号名称,与UID相对应
          • 2:账号密码,由于安全原因,密码被移到了/etc/shadow中,这里用 x 进行占位,无意义
          • 3:UID
          • 4:GID
          • 5:用户信息说明栏,用途不大,用来解释这个账号的意义而已
          • 6:用户的家目录
          • 7:用户登陆系统后取得的shell
    • /etc/shadow

      • 该文件主要与用户的密码相关,主要有9个字段,意义如下

        • bb:$6$DPLnFwXo$qA6CVulWBbvJuJOOpXDEG1dV4.meHpjSEyfjo.fAgIPU8Np7l40AkgfTZt3crKIdHGsR7m9F.mFdrUdHrtcEi0:19547:0:99999:7:::
          k:$6$CfULBNUR$v.hlpJXnGHh4rSE1uLJaXmzK.YfzcJqNnjH1QgxOBm2TDJUlnBjMr.grUX1xprz3yHxqx469IrV6tNuerg0bl0:19547:0:99999:7:::
          l:$6$grEIDHiV$mp.uJu9o0P7N6vzUr3V4UR7N5M2E/BNXDckcj5rgqTAwNZioff239Im1F5j1LmDcpRbU6oWqXoxSu8jnRkZ9X/:19547:0:99999:7:::
          
          • 1:账号名称
          • 2:加密后的密码,修改这个值可以让某个账号无法登陆
          • 3:最近修改密码的时间,这个时间是从1970年1月1日累加的,1971年1月1日则为366
          • 4:密码不可被修改的天数,0表示无限制
          • 5:密码需要重新修改的天数,相对于最近修改密码的时间计算的,99999基本为无限制
          • 6:密码需要修改期限前的告警天数,相对于5字段而言的,如【再过 n 天密码就要过期了,尽快设置新的】
          • 7:密码过期后账号的宽限时间,在宽限时间内账号还是可以登陆的,但是会要求强制改密码,如果过了宽限期则账号就无法登陆了
          • 8:账号失效日志,这个字段与第3个字段一样,从1970年开始计算天数,账号失效后账号就不能使用了
          • 9:保留,无意义
      • chage 命令可以操作 /etc/shadow中具体的设置,详细信息可以–help查看

  • 与用户组相关的两个重要的文件

    • /etc/group

      • 该文件主要与用户组有关,组要有4个字段,意义如下

        • root:x:0:k,l
          bin:x:1:
          daemon:x:2:
          
        • 1:用户组名称

        • 2:用户组密码,用到用户组管理员才会需要用户组密码,同样为了安全密码转移至 /etc/gshadow中了

        • 3:GID

        • 4:此用户组支持的用户,如果想要某个用户加入某个用户组,可以直接将用户名称写到这个字段,以逗号分隔

    • /etc/gshadow

      • 该文件主要与用户组密码有关,有四个字段,意义如下

        • root:::k
          bin:::
          daemon:::
          
        • 1:用户组名称

        • 2:用户组密码,只有有用户组管理员才会有用户组密码,现在一般不用用户组管理员了,这个字段一般为空

        • 3:用户组管理员的账号

        • 4:该用户组关联的用户账号

    • 初始用户组和有效用户组

      • 初始用户组指的是在创建用户的时候创建的用户组就是初始用户组,有效用户组指的是一个用户加入了多个用户组,这个用户会拥有所加入的用户组的所有权限,但是在创建文件时文件的用户组属性所关联的用户组是有效用户组
      • 查询有效用户组,id命令显示的用户组中,第一个用户组就是有效用户组
        • id user
      • 切换有效用户组,将当前用户的有效用户组切换为usergroup,可使用newgrp命令。newgrp切换有效用户组的方式是重新打开一个shell,在新shell中有效用户组为切换后的用户组,exit可返回原来的shell中
        • newgrp usergroup
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lI1oTUnT-1690211030735)(…/myTyporaImage/1689069296524548932.png)]
    • 将用户加入某个用户组的两种方式

      • 直接修改 /etc/group 文件,将用户添加到用户组
      • usermod -G usergroup user :添加用户到用户组
用户账号管理
  • useradd:添加用户,使用以下的参数可以在创建用户时进行特殊定制

    • 使用useradd刚创建的用户是没有密码的,具体可以查看 /etc/shadow文件的内容,密码字段内容为 “ !”,因此一个完整的用户创建流程必须要包含密码的设置
    • 使用 -g 指定了初始用户组的话,就不会自动创建与用户名同名的用户组了
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0nblQUW4-1690211030735)(C:\Users\zwx1098406\AppData\Roaming\Typora\typora-user-images\image-20230711092059124.png)]
  • useradd的默认值

    • 在使用useradd添加用户时,默认会有一些默认值,这些默认值可以使用useradd -D 查看,或者直接查看 /etc/default/useradd 文件,useradd -D命令的内容是来自 /etc/default/useradd 文件
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ubhxp3oS-1690211030736)(…/myTyporaImage/1689069379204380117.png)]

        • GROUP:指定新建账号的初始用户组的GID,linux用户组的机制有以下两种
          • 私有用户组机制
            • 私有用户组机制就是创建账号时创建一个名称一样的用户组作为初始用户组,这样私密性比较好,在私有用户组机制下GROUP字段不起作用,CentOS、RHEL等使用私有用户组机制
          • 公有用户组机制
            • 公有用户组机制就是创建账号时默认指定初始用户组的GID,这个GID就是GROUP的值,SUSE等使用公有用户组机制
        • HOME:用户家目录的基准目录,用户家目录会建在这个目录
        • INACTIVE:密码过期后的宽限期,相当于/etc/shadow的第七个字段
        • EXPIRE:账号的失效日志
        • SHELL:创建账号的默认shell
        • SKEL:用户家目录参考的基准目录,新创建用户的家目录中的文件就是从 /etc/skel中复制过去的
        • CREATE_MAIL_SPOOL:是否主动帮用户建立邮箱
    • 创建用户时,用户的UID/GID 和密码等参数,参考的是/etc/login.defs 文件,里面规定了UID与GID的范围、密码的安全设置等等
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-POdfEGPT-1690211030736)(…/myTyporaImage/1689069400457782840.png)]

        • UMASK:用户家目录的UMASK,因为是077,所以建出来的用户家目录是rwx------
        • USERGROUPS_ENAB:使用userdel删除用户时,是否删除用户的初始用户组(前提是初始用户组没有用户在使用)
        • ENCRYPT_METHOD:密码的加密方式
  • passwd:修改设置密码

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b0pZviVe-1690211030736)(…/myTyporaImage/1689069417860198867.png)]
  • chage:设置密码的额外参数

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zWsNIdPD-1690211030736)(…/myTyporaImage/1689069437099996860.png)]
  • usermod:修改用户的信息

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-STgjDTGJ-1690211030737)(…/myTyporaImage/1689069452782400448.png)]
  • userdel:删除用户

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7ozStuVm-1690211030737)(…/myTyporaImage/1689069472733762103.png)]

      • 一般不会对用户直接使用userdel删除,如果账号不用刻意将账号设置为过期,这样可以保留用户的数据,防止误删数据,如果需要彻底删除用户,userdel时需要加上 -r 参数,把家目录也删掉,同事find下这个用户的文件,如果存在也一并清除掉
  • id:查询用户的UID GID

    • id  username
      
用户组管理
  • groupadd:添加用户组

  • groupmod:修改用户组

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2KpFNapM-1690211030737)(…/myTyporaImage/1689073534554869223.png)]
  • groupdel:删除用户组,被删除的用户组不能被用户正在使用,否则会删除失败

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rI3VwIcZ-1690211030737)(…/myTyporaImage/1689073590818390379.png)]
linux权限ACL的使用
  • linxu权限ACL是对目录的访问空控制,ACL的支持情况跟文件系统有关,常用的ext4和xfs都是支持ACL的,文件系统是否支持acl通常是挂载参数决定的,在xfs和ext4的默认挂载参数中都是支持acl的

  • setfacl:设置acl权限

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UiaOGlpO-1690211030737)(…/myTyporaImage/1689073635730285048.png)]

      • setfacl  -m  u:big:rw  /root/test.txt			#  u/g:指定用户/用户组,为空时代表文件拥有者
        setfacl  -b  /root/test.txt			# 删除acl设置
        setfacl  -x  u:big			# 删除某个acl,不需要加上权限
        setfacl  -m  d:u:big:rwx  /root		# 使用 d 参数可以使设置到目录的acl递归到目录中的目录和文件
        setfacl  -m  u:big:-  /root/test.txt		# big用户对test.txt没有任何权限
        
  • getfacl:获取设置的acl

    • getfacl  /root/test.txt
      
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xhWokSPe-1690211030738)(…/myTyporaImage/1689073688741737408.png)]

        • user::rwx		# 用户为空时代表文件拥有者的权限,同理用户组也一样
          
        • mask:代表有效权限,表示用户、用户组的权限必须要在有效权限之内,超出mask权限的设置没有用

  • 设置过acl的文件权限字段最后会有一个 + 号,如下

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kx9faBmS-1690211030738)(…/myTyporaImage/1689073501060933341.png)]
su和sudo
  • su:用来切换用户的命令,直接su big的话会以nologin-shell的方式加载环境信息,su - big的话会以login-shell的方式加载环境信息,直接 su - 或者su 的话默认切换到root用户

  • sudo:让用户可以以其他用户的身份执行某些命令,用户能不能使用sudo命令,与/etc/sudoers配置文件有关,里面规定了具体配置

    • sudoers文件详情

      • root    ALL=(ALL)       ALL
        %wheel  ALL=(ALL)       ALL			% 标志着配置的是用户组
        
      • 字段1:代表能使用sudo这个命令的账号/用户组,如果是用户组,则代表在这个用户组下的用户都能使用这条sudo的配置

      • 字段2:登录者的源ip,ALL代表允许所有

      • 字段3:可切换的身份,ALL代表所有

      • 字段4:可下达的指令,ALL

    • 限制用户sudo使用的命令

      • big  ALL=(root)  !/usr/bin/passwd,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root     代表big能以root执行特定的passwd命令
        
        • ! 代表不可执行的意思,命令中也可以使用正则来规范命令的入参
    • 使用sudo时免密执行

      • big  ALL=(ALL)  NOPASSWD:ALL		NOPASSWD关键字可以让sudo时不用输入密码
        
    • sudo的别名设置

      • User_Alias  AU = big1,big2,big3
        Cmnd_Alias  CM = !/usr/bin/passwd,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root
        AU  ALL=(root)  CM
        
        • 可以对用户和命令使用别名的形式抽取出来单独维护,账号别名和命令别名都必须使用大写字母表示
  • sudo命令参数

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j8eVRRs6-1690211030738)(…/myTyporaImage/1689073662193675436.png)]
linux上用户直接交流
  • who:查询linux上已经登录的用户
  • lastlog:查询linux上用户的登录记录
  • wall “msg”:对已经登录的用户进行广播信息

磁盘配额与进阶文件系统管理

磁盘配额与高级文件系统管理

磁盘配额简介
  • 磁盘配额是文件系统的功能,每个文件系统支持的磁盘配额功能也不相同,如xfs文件系统支持用户、用户组、文件夹三个维度的磁盘配额,ext4文件系统支持用户、用户组两个维度的磁盘配额
  • 磁盘配额限制标准主要有inode(文件数量)与block(文件大小),限制值主要分为soft和hard,soft限制为软限制,当用户超过软限制时,用户登陆系统时会主动告警磁盘容量即将耗尽,在超过soft限制时会有一个grace time(宽限期),在grace time时期,用户可以继续使用磁盘,但当grace time到期后磁盘使用量还没有降下去,这时soft的限制值就会变成hard,这时就无法新增文件了,只有磁盘空间使用量降低到soft以下,这种状态才会结束
xfs磁盘配额使用
  • xfs磁盘配额的开启要在磁盘挂载的时候添加相应的参数如usrquota(用户配额)、grpquota(用户组配额)、prjquota(目录配额),并且这些挂载参数需要写到fstab文件中才能生效,单纯使用remount命名是不行的,把这些参数写入fstab,然后把xfs文件系统卸载掉,然后再用mount -a将xfs文件系统挂载上即可

  • xfs磁盘配额的用户组配额与目录配额不能同时使用

  • 开启xfs的用户和用户组配额(编辑/etc/fstab文件)

    • /dev/sdb               /root/xfs        xfs     defaults,usrquota,grpquota              0       0
      
  • xfs磁盘配额的控制命令

    • xfs_quota

      • xfs_quota -x -c "命令" 挂载点
        	-x:专家模式,使用-x后续才能使用-c
        	-c:后面接的就是命令
        	命令:
        		report:列出当前挂载点设置的磁盘配额report -[ugp]bih,u用户、g用户组、p目录、bblock、iinode、h以易理解单位显示数据
        		state:当前系统上xfs文件系统磁盘配额的开关状态
        		limit:设置磁盘配额,如limit [-ugp] b[soft|hard]=N i[soft|hard]=N name
        					ugp:u代表用户,g代表用户组,p是目录配额时使用的
        					b/i:b代表block,i代表inode
        					name:代表用户/用户组
        		timer:grace time的设置,宽限期只能针对当前系统上所有用户或用户组设置,不能对单个用户进行设置,timer -u -bi 14days
        
      • xfs_quota -x -c "limit -u bsoft=200M bhard=300M  bbig" /root/xfs			用户磁盘限制
        xfs_quota -x -c "limit -g bsoft=200M bhard=300M  bbig" /root/xfs			用户组磁盘限制
        
        xfs_quota -x -c "timer -u -bi 14days" /root/xfs	  宽限期的设置只能区分用户和用户组,不能区分其它的,并且不能区分单个的用户/用户组
        
      • 目录磁盘配额的设置

        • 首先开启xfs的目录磁盘配额
          /dev/sdb               /root/xfs        xfs     defaults,usrquota,prjquota              0       0
          
          目录磁盘配额的设置比较奇特,其中涉及三个概念(规范目录、选项名称、现选id)
          	首先将选项id与规范目录进行对应
          	echo "11:/root/xfs/dir" >> /etc/projects
          	将选项名称与选项id进行对应
          	echo "quotaprj:11" >> /etc/projid
          	
          	初始化选项名称到xfs文件系统
          	xfs_quota -x -c "project -s quotaprj"
          	
          	设置目录的磁盘配额 
          	xfs_quota -x -c "limit -p bhard=300M quotaprj" /root/xfs
          
    • xfs_quota的额外命令

      • xfs_quota  -x  -c  "命令  -[ug/p]"  挂载点
        	命令:
        		disbale:暂停某个种类磁盘配额的限制,只是暂停限制,但是磁盘配额还是在实时计算中的
        		enable:恢复某个种类磁盘配额的限制,与disable相互使用
        		off:关闭某个种类磁盘配额的限制,关闭之后只能卸载然后重新挂载才能开启
        		remove:remove -[ugp],移除磁盘配额中某个种类的限制,remove必须在off状态下才能使用,移除后不能恢复
        
RAID磁盘阵列
  • raid0

    • raid0是先将文件分成块,然后将数据均匀的分配到每个磁盘,raid0模式磁盘越多性能越好,因为每块盘负责的数据量降低了,但是raid0没有容错能力,坏一块盘整体就不能用了
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-haKSWmgj-1690211030738)(…/myTyporaImage/1689175591350631697.png)]
  • raid1

    • raid1是镜像模式,同一份数据会保存在两块磁盘上,性能与硬件有关,容错能力好,但是存储容量会减少一半
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VUm9iiwz-1690211030738)(…/myTyporaImage/1689175612175246120.png)]
  • raid5

    • raid5最少使用3块磁盘,两块用来存放数据,另一块用来对前两块存数据磁盘做校验
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Iaiiz2rw-1690211030739)(…/myTyporaImage/1689175627956367797.png)]
  • raid10

    • raid10 就是raid1 + raid0
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CNHbcZPS-1690211030739)(…/myTyporaImage/1689175645203163079.png)]
  • 生产环境中raid5用来做备份,raid10用来承载业务

逻辑卷管理器
  • lvm的重点不在于性能与安全,lvm最大的优点是可以动态的调整文件系统的大小

  • lvm的相关名词

    • 物理卷(Physical Volume,PV)
    • 卷组(Volume Group,VG)
    • 物理扩展块(Physical Extent,PE)
      • 是LVM中最小的数据存储单元,有点像文件系统中的block
    • 逻辑卷(Logical Volume,LV)
      • 逻辑卷的设备文件名通常为 /dev/vgname/lvname
  • LVM可以弹性的修改文件系统的容量,是如何办到的呢,其实是通过【交换PE】来进行数据转换的,将原本lv中的PE转移到其它设备来降低LV的容量,或者将其它设备中的PE加入到PV中来增加PV的容量,VG、LV、PE的关系如下

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YWf2PN6N-1690211030739)(…/myTyporaImage/1689175664157738042.png)]
  • LVM相关命令介绍

    • PV

      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xyL5WzHQ-1690211030739)(…/myTyporaImage/1689175680575161585.png)]

        • PV常用命令

          • pvcreate /dev/vda1		创建pv
            pvs/pvdisplay			查询所有pv,pvdisplay显示的更详细
            pvremove /dev/vda1		删除pv
            
    • VG

      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e45bGPzV-1690211030739)(…/myTyporaImage/1689175696915936427.png)]

        • vg常用命令

          • vgcreate  -s 16M  vgtest  /dev/vda{1,2,3}		创建vg,-s指定pe大小,不指定直接使用默认的也行
            vgs/vgdisplay						查询vg,vgdisplay显示的更详细
            vgextend  vgtest  /dev/vda5			扩容vg
            vgremove  vgtest					删除vg
            
    • LV

      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KmR8ZPC9-1690211030740)(…/myTyporaImage/1689175718407839168.png)]

      • lv常用命令

        • lvcreate [-L N] [-n lvname] vgname
          	-L:指定lv的容量
          	-n:指定lv的名称
          	
          lvcreate  -L 10G  -n lvtest  vgtest  	创建一个10G的lv,命名为lvtest
          lvs/lvdispaly							查询lv,lvdisplay显示的更详细
          lvresize  -L [-+]500M  /dev/vgtest/lvtest		对lv的容量 扩容/缩小 500M
          
        • 需要注意,当lv的容量进行调整后,一般都需要刷新文件系统的容量,刷新xfs文件系统使用xfs_growfs,刷新ext系列文件系统使用resize2fs,需要注意xfs文件系统不支持缩容,如果需要缩容功能需要使用ext4

  • thin volume:精简卷

    • 我们可以在vg中创建thin pool,然后再在thin pool的基础上创建thin volume,thin volume的容量是可以超量分配的。比如thin pool的实际容量为5G,但是thin volume可以申请10G的容量。被thin volume申请的容量并不会在thin pool中真实分配,thin volume实际使用中容量是用多少分配多少的,故5G的thin pool可以创建10G的thin volume

    • thin pool的具体操作

      • lvcreate  -L 1G  -T vgtest/testtp		创建一个thinpool,大小为1G,名称为testtp
        lvcreate  -V 10G  -T vgtest/testtp  -n testthin1		创建一个thin volume,大小为10G,名称为testthin1
        
  • LVM快照

    • lv的快照原理如下,被修改的数据放置在被快照的lv中,旧的数据转移到快照区,未被修改的数据lv与快照区共享

      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hdIjqHya-1690211030740)(…/myTyporaImage/1689175740347189849.png)]
    • 由于快照区与被快照的lv共享了很多的PE,所以快照区与被快照的lv必须要在一个vg

    • 创建快照

      • lvcreate -s -L 1G  -n lvsnap1  /dev/testvg/testlv	创建一个名为lvsnap1的快照,快照的容量为1G
        
    • 挂载创建的快照

      • mount -o nouuid /dev/testvg/lvsnap1  /root/snap		挂载时要加上nouuid,因为快照的xfs文件系统与被快照的lv的xfs文件系统的uuid相同,xfs不允许相同uuid的文件系统挂载,所以要加nouuid进行忽略uuid挂载
        
    • 利用快照恢复

      • lvconvert  --merge  testvg/lvsnap1			将快照lvsnap1恢复到原本的lv,恢复之前被快照的lv不能挂载在目录树上,恢复成功之后lvsnap1会被自动删除掉
        

例行性工作排程

例行性工作排程

单次作业:at
  • at是仅执行一次就结束的指令,要执行at必须要有atd这个服务才行

  • 能执行at命令的用户按照以下方式获取

    • 如果存在/etc/at.allow,则写在/etc/at.allow中的用户才能执行at
    • 如果不存在/etc/at.allow,则会获取/etc/at.deny文件,不写在/etc/at.deny中的用户都可以执行at
    • 如果/etc/at.allow和/etc/at.deny两个文件都不存在,则只有root能执行at
  • at指令的使用

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mCLjapJN-1690211030740)(C:\Users\zwx1098406\AppData\Roaming\Typora\typora-user-images\image-20230713141708337.png)]

    • [root@yyyy-18370 ~]# at 16:00						# at指令必须要加时间,立即执行使用now
      warning: commands will be executed using /bin/sh
      at> cat /etc/resolve.conf
      at> <EOT>											#命令输入完毕后执行ctrl + d 结束执行
      job 3 at Thu Jul 13 16:00:00 2023
      [root@yyyy-18370 ~]#
      
      at  -l:	查询所有作业项
      at  -c: 详细查询单个工作项
      at  -d  2:取消某个工作项
      
    • at命令产生的工作项都会有一个文件进行记录,默认放在/var/spool/at/,文件中的内容与at -c jid 显示的一样,at最小的时间单位为分钟,会在每分钟开始的第0秒开始执行

  • 等待cpu负载低时自动执行:batch

    • batch可以让cpu的工作负载小于0.8时再执行任务,batch本质上还是利用的at,使用batch产生的任务可以使用at命令查询、删除等

    • top命令可以查看cpu工作负载在1、5、15分钟内的平均工作负载,如下

      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AjtuTtdD-1690211030740)(…/myTyporaImage/1689321430127624522.png)]
    • batch使用的时候不支持设置时间,只能是基于当前时间然后在cpu负载低的时候随机时间执行

      • [root@yyyy-18370 ~]# batch
        warning: commands will be executed using /bin/sh
        at> cat /etc/resolve.conf
        at> <EOT>								ctrl+d结束命令的输入
        job 6 at Thu Jul 13 16:01:00 2023
        [root@yyyy-18370 ~]#
        
循环作业:cron
  • cron可以让命令循环执行,cron是由crond这个服务提供的,cron与at的鉴权机制类似,首先检查/etc/cron.allow文件中允许的用户,其次检查/etc/cron.deny文件中不允许的用户,如果前两个用户都不存在,则默认只有root能用cron

  • 用户使用cron的方式

    • cron的语法如下
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QCfJ5Quf-1690211030741)(…/myTyporaImage/1689321506843864588.png)]
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZRRlXQZT-1690211030741)(C:\Users\zwx1098406\AppData\Roaming\Typora\typora-user-images\image-20230713201526276.png)]
    • 用户使用crontab -e进行设置的规则默认会保存在/var/spool/cron/{user} 中,不同用户设置的cron规则保存在以不同用户为文件名的文件中。cron程序的执行日志放在/var/log/cron中
  • 系统使用cron程序的方式

    • crontab -e 命令是针对用户设计的,crontab -l只能查询用户自己设置的cron任务(/var/spool/cron/{user}的内容)。系统的例行性任务可以直接编辑/etc/crontab文件,cron任务最小的时间单位也是分钟,在每分钟的第0秒执行

    • /etc/crontab文件解析如下

      • 由于/etc/crontab是系统配置的cron任务,因此会比用户设置的cron任务多一个用户的选项,/etc/crontab中的任务可以指定任务执行的身份
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-46BHXDcU-1690211030741)(…/myTyporaImage/1689321790458120734.png)]
    • /etc/cron.d

      • 该文件夹中经常用来放置用户自己开发的软件的cron任务,比如logrotate

      • /etc/cron.d中的 0hourly 内容如下

        • [root@yyyy-18370 cron.d]# cat 0hourly
          # Run the hourly jobs
          SHELL=/bin/bash
          PATH=/sbin:/bin:/usr/sbin:/usr/bin
          MAILTO=root
          01 * * * * root run-parts /etc/cron.hourly
          
          • 0hourly文件内容是每小时的前5分钟内随机执行 run-parts /etc/cron.hourly
            • run-parts脚本会在5分钟内随机选个时间执行后面文件夹内的脚本,如 run-parts /etc/cron.hourly,代表每小时的前五分钟内随机选个时间执行 /etc/cron.hourly中的脚本
anacron
  • anacron的主要作用是可以检测linux系统关机时没有被执行的任务,并主动执行这些未被执行的任务

  • cron的/etc/cron.hourly中的0anacron文件,会以小时为周期进行执行anacron,0anacron文件内容如下

    • [root@yyyy-18370 cron.hourly]# cat 0anacron |grep -v '^#' |grep -v '^$'
      if test -r /var/spool/anacron/cron.daily; then		anacron程序执行后会刷新/var/spool/anacron中记录的时间
          day=`cat /var/spool/anacron/cron.daily`
      fi
      if [ `date +%Y%m%d` = "$day" ]; then				比较上次执行的时间与现在的时间
          exit 0
      fi
      online=1
      for psupply in AC ADP{0..9} ; do
          sysfile="/sys/class/power_supply/$psupply/online"
          if [ -f $sysfile ] ; then
              if [ `cat $sysfile 2>/dev/null`x = 1x ]; then
                  online=1
                  break
              else
                  online=0
              fi
          fi
      done
      if [ $online = 0 ]; then
          exit 0
      fi
      /usr/sbin/anacron -s			开始按照配置文件执行任务
      
  • anacron命令的语法如下

  • anacron的配置文件:/etc/anacrontab

    • [root@yyyy-18370 anacron]# cat /etc/anacrontab |grep -v '^#'|grep -v '^$'
      SHELL=/bin/sh
      PATH=/sbin:/bin:/usr/sbin:/usr/bin
      MAILTO=root
      RANDOM_DELAY=45		随机延迟时间范围,单位是分钟
      START_HOURS_RANGE=3-22		延迟多少个小时内应该要执行的任务时间
      1       5       cron.daily              nice run-parts /etc/cron.daily
      7       25      cron.weekly             nice run-parts /etc/cron.weekly
      @monthly 45     cron.monthly            nice run-parts /etc/cron.monthly
      
      • 上面四列的意义
        • 1:天数,上次执行的时间与现在时间相差的天数大于这个天数,就会执行任务
        • 2:延迟时间,确定执行任务时,延迟多久后再执行,单位是分钟,防止刚开机时负载过重
        • 3:工作名称定义,这个只是一个名称
        • 4:任务实际要执行的命令
    • 由anacron的配置文件可知,anacron程序只支持linux程序关机后再开机时,在cron.daily、cron.weekly、cron.monthly中未被执行的程序

进程管理与selinux初探

进程管理

进程和程序
  • 程序:程序通常为二进制状态,存储在磁盘上
  • 进程:程序被触发后,执行者的权限与属性、程序的代码与所需要的数据等都会被加载进内存,操作系统会给予内存中的单元一个标识符(PID),可以说,进程就是一个正在运作的程序
fork and exec
  • linux通常使用fork-and-exec的形式创建新的子进程

  • fork:fork是linux的系统调用,用来创建子进程(child process)。子进程是父进程(parent process)的一个副本,从父进程那里获得一定的资源分配以及继承父进程的环境。子进程与父进程唯一不同的地方在于pid(process id)。

  • exec:系统调用exec是以新的进程去代替原来的进程,但进程的PID保持不变。因此,可以这样认为,exec系统调用并没有创建新的进程,只是替换了原来进程上下文的内容。原进程的代码段,数据段,堆栈段被新的进程所代替。

工作管理
  • 将任务丢到当前bash环境的后台执行,如果任务在后台执行时有输出,将直接打印到当前bash窗口

    • sleep 300 &			# &:代表将任务丢到后台执行
      [1] 1352545			# 回显表示这个任务的任务号是1,pid为1352545	
      
      sleep 300 > /var/log/sleep.log 2>&1 &	# 将任务后台执行,并且将输出导入sleep.log文件
      
  • ctrl + z:将前台任务暂停并且丢到后台中

  • jobs:查看当前shell中的后台任务

      • jobs命令查出的任务的 + 代表最近被放入后台的任务,- 代表最后第二个放入后台的任务
  • fg:将后台命令拿到前台执行

    • fg 3 :将任务号为3的命令拿到前台执行,如果fg不加任务号,默认将最近放入后台的任务拿到前台执行
      
  • bg:将后台stop的任务在后台run起来

    • bg  任务号
      
  • kill -signal pid

    • 1:重新读取配置文件(类似reload)
    • 9:立刻强制删除工作
    • 15:以正常的方式终止一项工作
  • nohup:nohup可以将工作任务放到系统后台执行,即使关闭当前shell,工作也可以继续执行

    • nohup java xxx  > /var/log/xxx.log 2>&1
      
进程管理
  • ps

    • ps aux:查询当前系统所有的进程

    • ps -l:查询当前bash相关的进程(当前bash以及当前bash的子进程)

      • [root@yyyy-18370 cron.hourly]# ps -l
        F S   UID     PID    PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
        0 S     0 1361060 3200077  0  80   0 - 53017 arm64_ pts/3    00:00:00 sleep
        0 S     0 1361188 3200077  0  80   0 - 53017 hrtime pts/3    00:00:00 sleep
        0 S     0 1361216 3200077  0  80   0 - 53017 arm64_ pts/3    00:00:00 sleep
        0 R     0 1379071 3200077  0  80   0 - 53993 -      pts/3    00:00:00 ps
        0 S     0 3200077 3200051  0  80   0 - 53730 do_wai pts/3    00:00:00 bash
        [root@yyyy-18370 cron.hourly]#
        
        • S:代表这个进程的状态
          • R:代表Running
          • S:代表Sleep
          • D:不可被唤醒的睡眠状态,通常这支程序可能在等待IO
          • T:停止状态,如ctrl -z就可以让任务停止
          • Z:僵尸状态,表示进程已经结束但是没有被父进程回收
  • top

    • top可以持续观察进程的运作状态
      • -d:进程数据刷新的秒数
      • -p:指定某个pid进行观察
  • ps -pu

    • 以进程树形式展示进程
  • free -m

    • [root@yyyy-18370 cron.hourly]# free -m
                    total        used        free      shared  buff/cache   available
      Mem:           7443         945         635         117        5862        6242
      Swap:             0           0           0
      [root@yyyy-18370 cron.hourly]#
      
      • total:总内存大小
      • used:已经使用的内存大小
      • free:空闲的内存大小
      • share:多进程共享的内存大小
      • buff/cache:被buffer和cache使用的内存大小
      • available:还可以被应用程序使用的内存大小
        • free和available的区别
          • free是尚未被使用的物理内存的大小,available是程序认为可以使用的内存大小,通常available = free + buff/cache
  • uname -a

    • 查询系统的相关信息,如内核
  • uptime

    • 查询系统已经使用的时间
  • netstat -anlp

    • 查询当前系统上的网络连接
  • dmesg

    • 分析内核产生的信息,主要是内核对硬件的检测信息
  • vmstat

    • vmstat命令比较综合,可以查询虚拟机的整体状态(cpu、内存、磁盘等)

    • [root@yyyy-18370 cron.hourly]# vmstat
      procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
       r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
       5  0      0 651968 837560 5167036    0    0    41     6    3    2  1  1 97  0  0
      [root@yyyy-18370 cron.hourly]#
      
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1VI8JZsw-1690211030741)(C:\Users\zwx1098406\AppData\Roaming\Typora\typora-user-images\image-20230717110222004.png)]
  • fuser:找出正在使用该文件的进程

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-78ukcCza-1690211030741)(…/myTyporaImage/1689564175271645198.png)]

    • fuser -uvm /root  找出使用/root所在文件系统的所有进程
      
  • lsof:列出进程打开的文件

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NofU4kZl-1690211030742)(…/myTyporaImage/1689564196819550768.png)]

认识系统服务

认识系统服务

早期的system V
  • 早期system v启动方式是内核启动后,第一个执行的程序是init,然后init再去唤醒其它服务启动,现在已经不用systemV了
  • system v服务的启动与关闭
    • system v的所有服务启动脚本放置在/etc/init.d目录下,里面的启动脚本基本都是bash shell写的。如果需要启动、暂停服务则需要执行
      • /etc/init.d/daemon start
      • /etc/init.d/daemon stop
  • system v服务启动分为;两大类
    • 独立启动模式:服务独立启动,常驻内存中,反应速度快
    • 总管程序:由特殊的xinetd或inetd这两个总管程序控制,需要的时候才加载进内存,不需要的时候会结束程序,这样的话可以节省资源,但是服务启动需要时间,调用者需要等待
  • system v服务的依赖性问题
    • system v没有解决服务的依赖性问题,需要手动解决
  • system v执行等级的分类
    • system v主要分为1(单用户模式)、3(命令行模式)、5(图形界面模式)三个等级。每个等级的启动主要是靠/etc/rc.d/rc[0-6].d/SXXdaemon连接到/etc/init.d/daemon的连接文件,连接文件名称为SXXdaemon:S代表启动该服务,XX是数字代表启动顺序(用来解决启动依赖问题)
  • 设置每个等级默认启动的服务,需要在相应的等级下执行
    • chkconfig daemon on
    • chkconfig daemon off
    • chkconfig --list daemon
  • 切换执行等级:init [0-6]
systemd
  • systemd相对于systemv的优势

    • 平行处理所有服务,加速开机,systemd可以让没有依赖关系的服务同时启动,加速开机
    • 取消总管程序,systemd所有应用都是on-daemon模式,所有应用都常驻于内存
    • 服务依赖性检查:systemd会主动检查服务依赖性关系,如果A依赖于B,A启动时systemd会主动唤醒B
    • 依daemon功能进行分类,将daemon分为多个种类
    • 将多个daemon集合成一个群组,与systemv的runlevel类似
    • 向下兼容init的启动脚本,旧的init启动脚本也可以使用systemd来管理,但是高级的systemd的用法是不支持的
  • systemd的限制

    • systemd服务的启动脚本要遵从systemd的语法,其语法不是bash shell
    • 如果服务不是使用systemd启动的,则systemd无法管理该服务
    • systemd启动的应用不能接收标准输入,也就是服务不能与前台进行交互
  • systemd以不同的扩展名来区分不同类型的unit

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RpRKooEE-1690211030742)(…/myTyporaImage/image-20230722230839594.png)]
  • systemd的命令介绍

    • [root@yyyy-18370 rc3.d]# systemctl status kubelet
      ● kubelet.service - Cloud Container Engine Kubelet Service
         Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled)
         Active: active (running) since Sat 2023-07-01 15:06:27 CST; 2 weeks 1 days ago
       Main PID: 5277 (srvkubelet)
          Tasks: 18
         Memory: 179.0M
            CPU: 11h 35min 57.776s
         CGroup: /reserved.slice/kubelet.service
                 ├─5277 /bin/bash /var/script/kubelet/srvkubelet start
                 └─5526 /usr/local/bin/kubelet --bootstrap-kubeconfig=/opt/cloud/cce/kubernetes/kubelet/boot.conf --cert-dir=/opt/cloud/cce/kubernetes/kubelet/pki --rotate-certificates=true --network-plugin=cn
      
      • 第二行代表服务的预设状态
        • enabled:开机自启
        • disabled:开机不自启
        • static:这个daemon不可以自己启动,不过可以被其它daemon唤醒
        • mask:强制注销状态,该daemon无论如何都无法被启动,unmask:取消mask状态
      • 第三行:代表当前服务的状态,服务状态有以下四种
        • active(running):服务正有一个或者多个进程正在运行,如vsftpd
        • active(exited):仅执行一次就正常结束的服务,目前没有进程在系统中执行
        • active(waiting):正在执行当中,不过还在等待其它的事件才能继续处理,如打印服务
        • inactive:服务目前没有运行
    • systemctl list-units        	    列出目前启动的unit,加上--all 显示所有的unit,--type=TYPE指定查询的unit类型
      systemctl list-unit-files			依据/usr/lib/systemd/system/内的文件,将所有文件列表说明, --type=TYPE,TYPE为unit的类型
      
  • systemd运行target的切换

    • 查询当前虚机支持的target

      • systemctl list-units --all --type=target
        
      • 常见target介绍

        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MSZYSUV9-1690211030742)(C:\Users\zwx1098406\AppData\Roaming\Typora\typora-user-images\image-20230717150534632.png)]
    • 查询当前target

      • systemctl get-default
        
    • 切换target,isolate切换target系统不会重启

      • systemctl isolate  multi-user.target
        
    • systemctl常用target的指令

      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fiTwrHvv-1690211030742)(…/myTyporaImage/1689581156589513982.png)]
        • suspend:将系统状态保存入内存
        • hibernate:将系统状态保存入磁盘
  • 查看unit的依赖关系

    • 查询unit的依赖关系,systemctl list-dependencies如果不加参数则代表查询当前的target

      • systemctl list-dependencies docker
        
    • 反向查询依赖关系

      • systemctl list-dependencies docker  --reverse
        
  • systemd服务的配置文件目录介绍

    • /usr/lib/systemd/system
      • 软件安装后,其默认的启动脚本放置在这里,如果要修改软件的启动参数,建议直接修改这个文件
    • /run/systemd/system
      • 系统执行过程中产生的服务脚本,这些脚本的优先级比/usr/lib/systemd/system高
    • /etc/systemd/system
      • 这个目录与systemv的/etc/rc.d/rc5.d/SXX 类似,建立启动服务的软连接,其优先级比/etc/systemd/system
  • systemd的service类型unit配置文件介绍

    • [root@yyyy-18370 system]# cat sshd.service
      [Unit]
      Description=OpenSSH server daemon
      Documentation=man:sshd(8) man:sshd_config(5)
      After=network-online.target sshd-keygen.target
      Wants=sshd-keygen.target
      
      [Service]
      Type=notify
      EnvironmentFile=-/etc/crypto-policies/back-ends/opensshserver.config
      EnvironmentFile=-/etc/sysconfig/sshd-permitrootlogin
      EnvironmentFile=-/etc/sysconfig/sshd
      ExecStart=/usr/sbin/sshd -D $OPTIONS $CRYPTO_POLICY $PERMITROOTLOGIN
      ExecReload=/bin/kill -HUP $MAINPID
      KillMode=process
      Restart=on-failure
      RestartSec=42s
      
      [Install]
      WantedBy=multi-user.target
      
    • service unit的配置文件可以分为三大块

      • Unit:unit本身的说明,主要起介绍的作用
      • Service:unit的主要配置字段
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bBpyRAJC-1690211030743)(…/myTyporaImage/image-20230722230939844.png)]
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NqP9KTK5-1690211030743)(…/myTyporaImage/image-20230722230951978.png)]
      • Install:这个unit安装到哪个target中去
        • WantedBy:这个unit安装到哪个target中

开机流程、模块管理与loader

开机流程、模块管理与Loader

开机流程
  • 加载BIOS信息并进行自我检测,并依据设定取得第一个可开机的装置
  • 读取并执行第一个开机装置内的MBR的boot loader(grub2、spfdisk)
  • 依据boot loader的设定读取kernel。kernel会开始检测硬件并加载驱动
    • 一般核心文件都放置在/boot/中,并取名vmlinuz,linux的核心模块不是都放在核心中的,linux可以动态加载模块,动态加载的模块放置在/lib/moduler/version/kernel中,开机过程中 /lib 与 / 不能放在不同的分区,因为开机过程中必须要挂载根目录(/)和读取一些核心模块 (/lib)
    • 一般来说非必要的功能都可以编译为模块,让linux需要的时候再加载相应的模块。目前linux发行版都会将USB、SATA、SCSI等硬件的驱动都编译为模块,使用的时候再加载进核心
    • 开机时BIOS可以通过INT 13取得boot loader和kernel文件进行开机,然后kernel会开始接管系统并检测硬件、加载驱动并挂载根目录。但是磁盘(如SATA)的驱动已经被编译成模块放到了/lib/moduler中,这时是无法挂载根目录的
    • initramfs(虚拟文件系统),一般放置在/boot/中,取名为initramfs,这个文件可以通过boot loader加载到内存中并解压缩,并且在内存中仿真成一个根目录,此仿真成根目录中的文件系统会提供一个可执行的程序,通过该程序可以加载开机过程中最需要的核心模块,如SATA、USB、LVM等,等载入完成后会重新呼叫systemd来完成后续的开机流程
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f3oNkbcZ-1690211030743)(…/myTyporaImage/image-20230722231041462.png)]
  • systemd执行初始化
核心与模块
  • linux的核心放置在/boot/vmlinuz,模块放置在/lib/moduler/version/kernel
  • 让操作系统支持新硬件的方法
    • 重新编译核心,并加入该硬件驱动程序的原始码
    • 将该硬件的驱动程序编译为模块,在开机时加载该模块
  • depmod:分析模块的依赖性关系,将分析结果放到 /lib/moduler/version/moduler.dep文件中
  • lsmod:查询已经加载到内核的模块
  • modinfo:查询模块的详细信息
  • modprobe:modprobe会主动分析 /lib/moduler/version/moduler.dep中的模块依赖性问题,只有满足了依赖性问题才会加载模块
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XZQiT64i-1690211030743)(…/myTyporaImage/image-20230722231128458.png)]
grub2
  • grub2的两个stage

    • 由于第一个扇区的446字节很小,无法存储grub2的所有数据,所以grub2的执行分为两个阶段,如下
      • 阶段1:阶段1的数据放置在MBR的前446字节中,这一阶段为grub2的主程序,并没有loader的相关配置文件
      • 阶段2:加载所有配置文件和相关的环境参数文件,一般来说都在/boot/grub2目录下
  • grub2的配置文件

    • 磁盘与分区在grub2中的代号
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xksxoz4Z-1690211030743)(…/myTyporaImage/image-20230722231207277.png)]
        • hd表示硬盘,hd0表示第一块硬盘,后面的1表示第一个分区
  • /boot/grub2/grub.cnf文件

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y7RRXxOa-1690211030744)(…/myTyporaImage/image-20230722231434606.png)]
    • grub.cfg文件一般不要直接修改,可以通过其它方式生成一个新的grub.cfg文件
    • set root=‘hd0,gpt2’ :表示grub2配置文件所在的装置
    • linux16 /vmlinuz-… root=/dev/mapper/centos-root…:这个就是linux核心文件以及核心执行时下达的参数
    • initrd16 /initramfs-3.10…:指定initramfs文件所在的位置
  • /etc/default/grub 与 /etc/grub.d

    • 如果修改了/etc/default/grub 或 /etc/grub.d/*,必须使用grub2-mkconfig来重建grub.cfe,如grub2-mkconfig -o /boot/grub2/grub.cfg

    • /etc/default/grub是主要环境配置文件

      • [root@yyyy-18370 grub2]# cat /etc/default/grub
        GRUB_TIMEOUT=5				倒数读秒的秒数
        GRUB_DEFAULT=saved			默认的启动选项,saved默认使用第一个选项开机,这里还可以设置选项的id、序号(序号从0开始)
        GRUB_DISABLE_SUBMENU=true		是否要隐藏选单
        GRUB_TERMINAL_OUTPUT="console"		开机数据输出到哪,默认直接打在屏幕上(console)
        GRUB_CMDLINE_LINUX="net.ifnames=0 consoleblank=600"		开机时核心的额外参数
        GRUB_DISABLE_RECOVERY="true"		取消救援选项
        [root@yyyy-18370 grub2]#
        
    • /etc/grub.d/*里面的文件意义如下

      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T1zVBcDC-1690211030744)(C:\Users\zwx1098406\AppData\Roaming\Typora\typora-user-images\image-20230718141242140.png)]
        • 依据10_linux和30_os-prober两个脚本,grub2可以自动探测在/boot下的所有内核和自动探测其它分区的启动扇区,并自动做成选单
      • 自定义开机选单:在/boot下的linux核心一般可以直接被grub2检测到,但是如果想在核心启动时加些参数,那就涉及到自定义选单了,一般自定义选单的步骤是:1. 在grub.cfg文件中复制你想要自定义的menuentry 2. 进入40_custom文件把粘贴的内容复制进来进行自定义 ,案例如下
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IsRgAKdR-1690211030744)(C:\Users\zwx1098406\AppData\Roaming\Typora\typora-user-images\image-20230718142535080.png)]
          • 如果需要自定义核心启动时使用的target,直接在linux16 后面加systemd.unit=xxx.target 即可
      • 通过chainloader移交控制权
        • 通过chainloader可以将控制权移交给指定的boot loader,如下
          • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mXBUZFpb-1690211030744)(C:\Users\zwx1098406\AppData\Roaming\Typora\typora-user-images\image-20230718144439435.png)]
          • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-frOaNX4M-1690211030744)(C:\Users\zwx1098406\AppData\Roaming\Typora\typora-user-images\image-20230718145242221.png)]
  • 测试与安装grub2

    • 安装grub2
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wxwq28zw-1690211030745)(C:\Users\zwx1098406\AppData\Roaming\Typora\typora-user-images\image-20230718145657102.png)]
    • 在xfs文件系统中安装grub2时可能有问题,需要强制安装,使用 grub2-install --force --recheck --skip-fs-probe /dev/vda4
    • 如果是使用其它boot loader转到grub2,需要先使用grub2-install进行安装
  • 开机前的额外功能修改

    • 开机时在选单界面按 e 进入编辑模式,里面的内容就是grub.cfg的内容,可以直接编辑,修改完毕后ctrl + x 进行开机
  • 为某个选项设置用户密码

    • grub2中用户分为两类
      • superusers:系统管理员,具有所有权限(进入所有选项、按 e 进入编辑模式)
      • users:一般账号,没有编辑权限,只有进入某个选项的权限
    • 在 /etc/grub.d/01_users 中添加用户,01_users的内容需要echo进去
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ar8ioooa-1690211030745)(C:\Users\zwx1098406\AppData\Roaming\Typora\typora-user-images\image-20230718153118251.png)]
        • 密码生成的两种方式
          • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kd7MCycn-1690211030745)(C:\Users\zwx1098406\AppData\Roaming\Typora\typora-user-images\image-20230718153847134.png)]
    • 为选单设置可访问用户
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GWwLulcx-1690211030745)(C:\Users\zwx1098406\AppData\Roaming\Typora\typora-user-images\image-20230718153144063.png)]
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a74CeaLu-1690211030746)(C:\Users\zwx1098406\AppData\Roaming\Typora\typora-user-images\image-20230718153153188.png)]
  • 忘记密码的解决

    • 在核心启动的时候加上 rd.break参数,ctrl + x 进行启动

      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B7JqGsvf-1690211030746)(C:\Users\zwx1098406\AppData\Roaming\Typora\typora-user-images\image-20230718160040537.png)]
    • 系统启动后是在RAM Disk环境,不是原本的环境,原本的根目录应该是挂载 /sysroot目录下,进行以下操作修改密码

      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kddfPYxO-1690211030746)(C:\Users\zwx1098406\AppData\Roaming\Typora\typora-user-images\image-20230718160307418.png)]
        • chroot:切换根目录
        • touch /.autorelabel:selinux开启的时候才需要,修改密码会让/etc/passwd文件selinux type消失,创建.autorelabel让系统开机时使用预设的selinux type写入到每个文件中

认识与分析日志

认识与分析日志文件

logrotate
  • logrotate的主配置文件/etc/logrotate.conf内容如下

    • [root@yyyy-18370 ~]# cat /etc/logrotate.conf |grep -v '#'|grep -v '^$'
      weekly
      rotate 4
      create
      compress
      include /etc/logrotate.d
      [root@yyyy-18370 ~]#
      
      • logrotate.conf中经常设置些通用的参数,并且将/etc/logrotate.d文件夹中的设置包含进来。/etc/logrotate.d用来设置每个服务单独的logrotate脚本

      • logrotate.conf配置文件

        • daily,weekly,monthly --> 按指定计划轮换日志文件,最小单位为天
          rotate  4		保留几个日志文件
          create     - 轮换原始文件并创建具有指定权限、用户和组的新文件。
          dateext    - 这个参数很重要!就是切割后的日志文件以当前日期为格式结尾,如xxx.log-20131216这样,如果注释掉,切割出来是按数字递增,即前面说的 xxx.log-1这种格式.
          size='logsize'       --> 在日志大小大于 logsize(例如 100K,4M)时轮换
          
          compress             --> 压缩日志文件的所有非当前版本
          errors "emailid"     --> 给指定邮箱发送错误通知
          missingok            --> 如果日志文件丢失,不要显示错误
          notifempty           --> 如果日志文件为空,则不轮换日志文件
          
          prerotate            --> 引入一个在日志被轮换前执行的脚本
          
          # 执行轮替前/后 执行脚本的方式
          sharedscripts        --> 对于整个日志组只运行一次脚本
            postrotate           --> 引入一个在日志被轮换后执行的脚本
               cmd xxx	--> 执行的命令
          postrotate           --> 引入一个在日志被轮换后执行的脚本
          
      • logrotate的命令格式

        • logrotate [OPTION...] <configfile>
          -f, --force :强制转储文件。
          -v, --verbose :显示转储过程。
          

软件安装rpm与yum

  • 时区设置

    • timedatectl
      • list-timezones:列出支持的时区
      • set-timezone zone:设置时区
      • set-time “2023-09-01 12:02”:这种设置时间的方法可以同时更新系统时间(date)和硬件时间(hwclock)
    • ntp s2m.time.edu.cn:使用ntp服务器进行对时
  • 语系设置

    • 语系的设置分为系统语系和当前环境语系,系统语系就是整个系统的语系,当前环境语系比如bash中

      • localectl:查询系统语系

      • locale:查询当前环境语系

        • LANG=en_US.UTF-8					以下参数如果没设置值,则以LANG的值进行填充
          LC_CTYPE="en_US.UTF-8"
          LC_NUMERIC="en_US.UTF-8"
          LC_TIME="en_US.UTF-8"
          LC_COLLATE="en_US.UTF-8"
          LC_MONETARY="en_US.UTF-8"
          LC_MESSAGES="en_US.UTF-8"
          LC_PAPER="en_US.UTF-8"
          LC_NAME="en_US.UTF-8"
          LC_ADDRESS="en_US.UTF-8"
          LC_TELEPHONE="en_US.UTF-8"
          LC_MEASUREMENT="en_US.UTF-8"
          LC_IDENTIFICATION="en_US.UTF-8"
          LC_ALL=								LC_ALL如果设置值,则其值会强制覆盖LC_*的值
          
  • 硬件设备查看

    • lspci:列出整个系统的pci接口设备,可以查看是否有显卡设备,如lspci |grep -i nvi

    • lsusb:列出系统上usb端口的状态

    • iostat:默认没有安装,可以使用yum install sysstat安装,isstat主要查询磁盘的状况

  • 源码编译的流程

    • 程序源代码
    • 使用configure/config检测程序对环境进行检测,检测内容大致如下,检测完毕后会主动生成makefile文件
      • 是否有合适的编译器编译源代码
      • 是否有源代码需要的函数库,或其它需要依赖的软件
      • 等等
    • 使用make命令依照makefile文件对源代码进行编译
  • rpm

    • 将软件事先在某个linux内核上编译好,并且打包成rpm机制的文件。并通过rpm包里的数据库文件记录该软件所依赖的软件,这个包就是rpm包

    • 由于rpm包的制作是基于特定的内核,所以rpm包通常在不同内核上不能通用

    • rpm命令

      • rpm  -ivh   /path/pkgname			安装rpm包
        rpm  -e     rpmname					卸载rpm
        rpm -Uvh    /path/pkgname			升级rpm包,如果rpm包还没有安装,那就直接安装rpm包 
        rpm -Fvh							升级rpm包,如果rpm包还没有安装,那就退出不做任何操作
        
        rpm  -qa						    查询已安装的rpm包
        rpm  -qc	rpmname					查询该软件的所有配置文件
        rpm  -ql    rpmname					列出该软件所有相关的文件
        
  • yum

    • 在使用rpm的时候通常会遇到依赖性问题,使用yum可以主动分析rpm包的依赖,并进行下载安装依赖,yum解决了rpm包的依赖性问题

    • yum常用命令

      • yum  info  name		查询软件的详细信息
        yum  search  name		在当前yum源内查找相应的软件
        yum  list			查询当前已经安装的软件和yum源内所有的软件
        yum  list  update		列出目前可以升级的软件
        
        yum  install  name		安装软件
        yum  remove   name   	卸载软件
        yum  update   name		更新软件
        yum  update   name		更新所有软件
        
        yum  repolist  all   查询当前使用的软件源有哪些,状态为enabled的才为启动
        yum  clean  all     清除yum缓存,一般在修改yum源后都要清除缓存并重新生成缓存
        yum  makecache		生成缓存
        
    • yum的配置文件

      • yum 源的配置文件路径:/etc/yum.repos.d

      • [base]			软件源的名称,中括号一定要存在,名字随便取,不重复即可
        name=CentOS-$releasever - Base - mirrors.aliyun.com			# 说明下这个软件源的意义,重要性不高
        baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/		# 镜像站地址,这个最重要
                http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
                http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
        enabled=1			# 是否启用该yum源
        gpgcheck=1			# 指定是否要查看rpm的数字签名
        gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7		# 数字签名公钥所在的位置
        
        [updates]
        name=CentOS-$releasever - Updates - mirrors.aliyun.com
        baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
                http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/
                http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
        gpgcheck=1
        gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
        
        [extras]
        name=CentOS-$releasever - Extras - mirrors.aliyun.com
        baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
                http://mirrors.aliyuncs.com/centos/$releasever/extras/$basearch/
                http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
        gpgcheck=1
        gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值