7.20-7.26学习笔记
目录
一、软件包管理
1.在 Rocky Linux 上使用 dnf 安装 nginx
2.在 Rocky Linux 上使用 rpm 查询 nginx 安装的文件列表
3.在 Ubuntu 上使用 apt 安装 nginx
4.配置 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 软件源通用吗?
二、find+xargs命令的使用
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.txt
2.将 date 命令的输出追加写入 date.txt
3.将 ls /etc/passwd /etc/xxx.txt 的错误输出重定向到 error.log
4.使用 grep -vE '^#|^$' /etc/ssh/sshd_config 查看有效配置,并用 tee 同时保存到 sshd_config.txt
5.统计 /etc/passwd 中有多少用户使用 /bin/bash 作为 Shell
6. > 和 >> 有什么区别?
7. 2>&1 是什么意思?
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 文件?
八、时间同步(chrony)
1.安装 chrony
2.配置阿里云时间服务器
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的# #baseurl=https://mirrors.aliyun.com/rockylinuxRocky方法二
# 备份源文件 cp -r /etc/yum.repos.d /etc/yum.repos.d.bak # 执行镜像站配置 sed -e 's|^mirrorlist=|#mirrorlist=|g' \ -e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://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|^#baseurl=https://download.example/pub|baseurl=https://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是上层,运行的时候会调用底层rpm;
2.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是Noble,26.04是Resolute。
二、find+xargs命令的使用
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.-print0+xargs -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}\b'5.grep -i root和grep root有什么区别?
grep -i root 忽略大小写,匹配root、Root、ROOT;grep root区分大小写,只匹配root。
6.^和$分别表示什么?
^ 匹配行首,$匹配行尾。
7.*和+有什么区别?
* 表示前导字符出现0次或多次;+表示前导字符出现1次或多次。
8.为什么要用grep -E?
使用扩展正则不需要转义, {n}、|、()直接写就行,更简洁,不容易出错。日常使用推荐grep -E。
9.排障时,为什么-C选项很有用?
只看错误行不够,需要看错误前后的上下文才知道发生了什么。 -C 5可以同时显示匹配行及前后各5行。
四、管道与IO重定向
1.将date命令的输出覆盖写入date.txt
date > date.txt2.将date命令的输出追加写入date.txt
date >> date.txt3.将ls /etc/passwd /etc/xxx.txt的错误输出重定向到error.log
ls /etc/passwd /etc/xxx.txt 2> error.log4.使用grep -vE '^#|^$' /etc/ssh/sshd_config查看有效配置,并用tee同时保存到sshd_config.txt
grep -vE '^#|^$' /etc/ssh/sshd_config | tee sshd_config.txt5.统计/etc/passwd中有多少用户使用/bin/bash作为Shell
grep -E 'bash$' /etc/passwd | wc -l6.>和>>有什么区别?
> 覆盖写入,文件原有内容被清空;>>追加写入,新内容加在文件末尾。
7.2>&1是什么意思?
将标准错误(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的SUID
head加SUID后普通用户执行是以root身份执行
2.给/usr/bin/rm设置SUID,尝试删除/root/下的文件,观察是否成功,思考为什么
普通用户没有权限删除root用户下的文件
查询修改rm的SUID
rm加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可能失效,修复起来非常麻烦。
八、时间同步(chrony)
1.安装chrony
dnf install -y chrony2.配置阿里云时间服务器
vim /etc/chrony.conf3.启动服务,用chronyc sources -v查看同步状态
4.用chronyc tracking查看同步精度
5.为什么服务器时间需要同步?
日志分析、HTTPS证书、JWT Token验证、数据库事务都依赖准确时间。时间不准会导致用户无法登录、证书报错、 排查困难。
6.chronyc sources -v中^*和^?分别表示什么?
^* 表示当前正在使用的同步源;^?表示该时间服务器不可达。