7.20-7.26学习笔记

📅 2026/7/27 7:39:56
7.20-7.26学习笔记
目录一、软件包管理1.在 Rocky Linux 上使用 dnf 安装 nginx2.在 Rocky Linux 上使用 rpm 查询 nginx 安装的文件列表3.在 Ubuntu 上使用 apt 安装 nginx4.配置 Rocky使用阿里源Rocky方法一Rocky方法二Rocky替换阿里EPEL源5.配置Ubuntu使用清华源6.dnf install 和 rpm -ivh 有什么区别7.为什么要更换镜像源8.apt remove 和 apt purge 有什么区别9.Rocky 9 和 Rocky 10 能使用相同的软件源仓库吗Rocky 9.5 和 Rocky 9.7呢10.Ubuntu 24.04 和 26.04 软件源通用吗二、findxargs命令的使用1.find的基础应用2.使用xargs查找删除3.使用xargs查找拷贝4.-print0 xargs -0替换分隔符三、grep 与正则表达式1. 从 /etc/passwd 中查找以 root 开头的行2. 从 /etc/passwd 中查找以 bash 结尾的行3. 查看 /etc/ssh/sshd_config 的有效配置4. 查看本机 IP 地址5. grep -i root 和 grep root 有什么区别6. ^ 和 $ 分别表示什么7. * 和 有什么区别8. 为什么要用 grep -E 9. 排障时为什么 -C 选项很有用四、管道与IO重定向1.将 date 命令的输出覆盖写入 date.txt2.将 date 命令的输出追加写入 date.txt3.将 ls /etc/passwd /etc/xxx.txt 的错误输出重定向到 error.log4.使用 grep -vE ^#|^$ /etc/ssh/sshd_config 查看有效配置并用 tee 同时保存到 sshd_config.txt5.统计 /etc/passwd 中有多少用户使用 /bin/bash 作为 Shell6. 和 有什么区别7. 21 是什么意思8. 管道 | 和重定向 有什么区别五、grep 与 find 综合实战日志分析六、特殊权限与文件属性1. 给 /usr/bin/cat 设置 SUID用普通用户读取 /etc/shadow 观察变化2. 给 /usr/bin/rm 设置 SUID尝试删除 /root/ 下的文件观察是否成功思考为什么3. 创建共享目录设置 SGID验证新文件继承目录属组4. 给 /etc/hosts 设置 i 属性尝试修改和删除观察报错5. 给日志文件设置 a 属性验证只能追加不能覆盖1. SUID、SGID、Sticky Bit 分别作用于什么对象有什么效果2. chattr i 和 chmod 000 有什么区别七、sudo权限委派1.为若依项目团队配置权限1环境准备2配置文件3验证权限2. sudoers 配置中 % 前缀代表什么3. NOPASSWD 有什么风险什么场景适合使用4. 为什么必须使用 visudo 编辑 sudoers 文件八、时间同步chrony1.安装 chrony2.配置阿里云时间服务器3.启动服务用 chronyc sources -v 查看同步状态4.用 chronyc tracking 查看同步精度5. 为什么服务器时间需要同步6. chronyc sources -v 中 ^* 和 ^? 分别表示什么一、软件包管理1.在Rocky Linux上使用dnf安装nginx# 在Rocky上使用dnf安装nginx dnf -y install nginx2.在Rocky Linux上使用rpm查询nginx安装的文件列表# 在Rocky上使用rpm查询nginx安装的文件列表 rpm -ql nginx3.在Ubuntu上使用apt安装nginx# 在Ubuntu上使用apt安装nginx apt -y install nginx4.配置Rocky使用阿里源Rocky方法一# 备份现有原文件 cp -r /etc/yum.repos.d /etc/yum.repos.d.bak # 修改配置文件 vim /etc/yum.repos.d/rocky.repo # 注释掉mirrorlist删掉baseurl的# #baseurlhttps://mirrors.aliyun.com/rockylinuxRocky方法二# 备份源文件 cp -r /etc/yum.repos.d /etc/yum.repos.d.bak # 执行镜像站配置 sed -e s|^mirrorlist|#mirrorlist|g \ -e s|^#baseurlhttp://dl.rockylinux.org/$contentdir|baseurlhttps://mirrors.aliyun.com/rockylinux|g \ -i.bak \ /etc/yum.repos.d/rocky*.repo dnf makecacheRocky替换阿里EPEL源# 安装阿里EPEL源 dnf -y install epel-release # 查看仓库 dnf repolist # 替换EPEL源 sed -e s|^metalink|#metalink|g \ -e s|^#baseurlhttps://download.example/pub|baseurlhttps://mirrors.aliyun.com|g \ -i.bak \ /etc/yum.repos.d/epel*.repo dnf makecache5.配置Ubuntu使用清华源# 备份配置文件 cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak # 修改配置文件24.04 cat /etc/apt/sources.list.d/ubuntu.sources EOF Types: deb URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ Suites: noble noble-updates noble-backports Components: main restricted universe multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg Types: deb URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ Suites: noble-security Components: main restricted universe multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg EOF # 修改配置文件26.04 cat /etc/apt/sources.list.d/ubuntu.sources EOF Types: deb URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ Suites: resolute resolute-updates resolute-backports Components: main restricted universe multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg Types: deb URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ Suites: resolute-security Components: main restricted universe multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg EOF6.dnf install和rpm -ivh有什么区别1.dnf是上层运行的时候会调用底层rpm2.dnf安装的时候会把依赖包一同安装rpm安装的时候没有依赖包会提醒安装失败需要手动安装依赖包3.如果在断网并且提前下载好包和依赖包的的情况下rpm非常适用。7.为什么要更换镜像源为了解决访问速度和软件获取问题8.apt remove和apt purge有什么区别apt remove删除程序保留配置文件apt purge删除程序会把配置文件一并删除。9.Rocky 9和Rocky 10 能使用相同的软件源仓库吗Rocky 9.5和Rocky 9.7呢9和10不能使用相同软件源大版本不能使用相同的9.5和9.7可以使用相同软件源。10.Ubuntu 24.04 和 26.04 软件源通用吗Ubuntu 24.04 和 26.04 软件源不通用因为24.04和26.04的仓库代号是不一样的24.04是Noble26.04是Resolute。二、findxargs命令的使用1.find的基础应用# 在 /var/log 目录下查找所有 .log 文件 find /var/log -type f -iname *.log # 查找 /etc 目录下大于 1MB 的文件 find /etc -type f -size 10M # 查找 7 天前修改的日志文件 find /var/log -type f -mtime 72.使用xargs查找删除# 准备测试环境 mkdir dir1 touch dir1/file{1..10}.txt # 查看测试环境 ls dir1 # 先用 ls -l 预览要操作的文件安全习惯 find dir1 -name file*.txt | xargs ls -l # 确认无误后再删除 find dir1 -name file*.txt | xargs rm # 验证删除结果 ls dir1/3.使用xargs查找拷贝# 准备测试环境 mkdir dir2 touch dir2/file{1..10}.txt # 查看测试环境 ls dir2 # 方式一使用 {} 作为占位符 find dir2 -name file*.txt | xargs -I {} cp -ra {} /var/tmp/ # 方式二自定义占位符任意字符串都可以 find dir2 -name file*.txt | xargs -I niu cp -ra niu /tmp/ # 验证复制结果 ls -lh /var/tmp/file*.txt ls -lh /tmp/file*.txt4.-print0xargs -0替换分隔符# 在 dir2 下创建一个含空格的文件名 touch dir2/file niu.txt # xargs 无法查看带有空格的文件名 find dir2 -name *.txt | xargs ls -l # 使用 -print0 和 xargs -0 搭配可以 # 管道传输时空格会被当成分隔符 find dir2 -name *.txt -print0 | xargs -0 ls -l三、grep与正则表达式1.从/etc/passwd中查找以root开头的行grep -E ^root /etc/passwd2.从/etc/passwd中查找以bash结尾的行grep -E bash$ /etc/passwd3.查看/etc/ssh/sshd_config的有效配置grep -vE ^ *#|^$ /etc/ssh/sshd_config4.查看本机IP地址ip a | grep -E \b([0-9]{1,3}\.){3}[0-9]{1,3}\b5.grep -i root和grep root有什么区别grep -i root 忽略大小写匹配root、Root、ROOTgrep root区分大小写只匹配root。6.^和$分别表示什么^ 匹配行首$匹配行尾。7.*和有什么区别* 表示前导字符出现0次或多次表示前导字符出现1次或多次。8.为什么要用grep -E使用扩展正则不需要转义 {n}、|、()直接写就行更简洁不容易出错。日常使用推荐grep -E。9.排障时为什么-C选项很有用只看错误行不够需要看错误前后的上下文才知道发生了什么。 -C 5可以同时显示匹配行及前后各5行。四、管道与IO重定向1.将date命令的输出覆盖写入date.txtdate date.txt2.将date命令的输出追加写入date.txtdate date.txt3.将ls /etc/passwd /etc/xxx.txt的错误输出重定向到error.logls /etc/passwd /etc/xxx.txt 2 error.log4.使用grep -vE ^#|^$ /etc/ssh/sshd_config查看有效配置并用tee同时保存到sshd_config.txtgrep -vE ^#|^$ /etc/ssh/sshd_config | tee sshd_config.txt5.统计/etc/passwd中有多少用户使用/bin/bash作为Shellgrep -E bash$ /etc/passwd | wc -l6.和有什么区别 覆盖写入文件原有内容被清空追加写入新内容加在文件末尾。7.21是什么意思将标准错误FD 2重定向到标准输出FD 1当前指向的位置实现正确和错误输出到同一个地方。8.管道|和重定向有什么区别 将命令输出写入文件|将命令输出传递给另一个命令作为输入。管道用于命令组合重定向用于文件读写。五、grep与find综合实战日志分析从 /var/log目录找出最近7天内包含error或failed的日志文件提取前10条生成摘要报告并 统计各文件的错误出现次数。# 核心命令 # 查找最近 7 天修改的文件把错误信息丢掉传给 grep 通过正则表达式搜索包含error和failed的日志不论大小写只输出前10条 find /var/log/ -type f -mtime -7 2 /dev/null | xargs grep -iE error|failed | head -10 # 查找最近 7 天修改的文件把错误信息丢掉传给 grep 通过正则表达式搜索包含error和failed的日志不论大小写并统计匹配行数再通过管道过滤掉行尾是0的结果。 find /var/log/ -type f -mtime -7 2/dev/null | xargs grep -icE error|failed | grep -v 0$# 新建一个脚本用来生成报告 vim /root/gen_report.sh # 脚本内容 #!/bin/bash REPORT/root/error_report.txt echo 日志错误摘要报告 $REPORT echo 生成时间: $(date) $REPORT echo $REPORT echo $REPORT echo 【各文件错误次数统计】 $REPORT find /var/log/ -type f -mtime -7 2/dev/null | xargs grep -icE error|failed | grep -v 0$ $REPORT echo $REPORT echo 【前 10 条错误详情文件名行号】 $REPORT find /var/log/ -type f -mtime -7 2/dev/null | xargs grep -inE error|failed | head -10 $REPORT echo echo 报告已生成: $REPORT六、特殊权限与文件属性1.给/usr/bin/cat设置SUID用普通用户读取/etc/shadow观察变化普通用户权限不够无法读取shadow查询修改head的SUIDhead加SUID后普通用户执行是以root身份执行2.给/usr/bin/rm设置SUID尝试删除/root/下的文件观察是否成功思考为什么普通用户没有权限删除root用户下的文件查询修改rm的SUIDrm加SUID后普通用户执行是以root身份执行3.创建共享目录设置SGID验证新文件继承目录属组在设置SGID之前目录下新建的文件和目录属组都是创建者的主组设置SGID后目录下新建的文件和目录会集成目录属组4.给/etc/hosts设置i属性尝试修改和删除观察报错给/etc/hosts设置i 属性防止修改删除和写入都无法执行5.给日志文件设置a属性验证只能追加不能覆盖设置a属性只能追加不能覆盖1. SUID、SGID、Sticky Bit分别作用于什么对象有什么效果SUID 作用于可执行文件用户执行时临时获得文件属主权限SGID作用于目录新文件继承目录属组Sticky Bit作 用于目录仅文件属主可删除。2.chattr i和chmod 000有什么区别chmod 000 设置普通权限root可以无视chattr i是更底层的扩展属性root也无法修改或删除需要先解 除 -i。七、sudo权限委派1.为若依项目团队配置权限场景需求角色成员权限需求运维组ruoyi-ops可以重启Nginx可以查看所有日志DBA组ruoyi-dba可管理MySQL开发组ruoyi-dev可以查看应用日志1环境准备# 环境准备 # 创建用户组 groupadd ops groupadd dba groupadd dev # 创建用户 useradd ruoyi-ops -G ops useradd ruoyi-dba -G dba useradd ruoyi-dev -G dev # 设置用户密码 echo ruoyi-ops:yjbb521 |chpasswd echo ruoyi-dba:yjbb521 |chpasswd echo ruoyi-dev:yjbb521 |chpasswd # 安装 Nginx 和 MySQL dnf -y install nginx mysql-server systemctl start nginx mysqld ps aux |grep -E nginx|mysqld # 设置立刻启动和开机自启动 systemctl enable --now nginx mariadb2配置文件# 通过 visudo 写配置文件 visudo -f /etc/sudoers.d/ruoyi # 配置文件 # 用户别名 User_Alias OPS ruoyi-ops User_Alias DBA ruoyi-dba User_Alias DEV ruoyi-dev # 命令别名 Cmnd_Alias NGINX_CMDS /usr/bin/systemctl restart nginx, /usr/bin/systemctl status nginx Cmnd_Alias MYSQL_CMDS /usr/bin/systemctl start mysqld, /usr/bin/systemctl stop mysqld, /usr/bin/systemctl status mysqld Cmnd_Alias LOG_CMDS /usr/bin/tail -f /var/log/ruoyi/access.log, /usr/bin/tail -f /var/log/ruoyi/error.log, /usr/bin/cat /var/log/ruoyi/access.log, /usr/bin/cat /var/log/ruoyi/error.log, /usr/bin/tail -f /var/log/secure, /usr/bin/cat /var/log/secure # 权限配置 # 运维组管理 Nginx 查看日志需要密码 OPS ALL(ALL) NGINX_CMDS, LOG_CMDS # DBA 组管理 MySQL需要密码 DBA ALL(ALL) MYSQL_CMDS # 开发组查看日志免密码低风险 DEV ALL(ALL) NOPASSWD: LOG_CMDS3验证权限2. sudoers配置中%前缀代表什么% 表示后面跟的是组名。%devops ALL(ALL) ALL表示devops组的所有成员都有sudo权限。3.NOPASSWD有什么风险什么场景适合使用风险用户执行 sudo命令时不需要输入密码如果账号被盗攻击者可以直接执行特权命令。适合对低风险命令如 systemctl status、查看日志等只读操作使用且用户应该是可信的。4.为什么必须使用visudo编辑sudoers文件visudo 会在保存前检查语法错误防止配置错误导致sudo完全无法使用。如果直接编辑/etc/sudoers出现语法错误整个系统的 sudo可能失效修复起来非常麻烦。八、时间同步chrony1.安装chronydnf install -y chrony2.配置阿里云时间服务器vim /etc/chrony.conf3.启动服务用chronyc sources -v查看同步状态4.用chronyc tracking查看同步精度5.为什么服务器时间需要同步日志分析、HTTPS证书、JWT Token验证、数据库事务都依赖准确时间。时间不准会导致用户无法登录、证书报错、 排查困难。6.chronyc sources -v中^*和^?分别表示什么^* 表示当前正在使用的同步源^?表示该时间服务器不可达。