Linux
本文最后更新于 2026年3月18日 下午
Linux有关知识点
目录结构说明
1 | |
全选命令
1 | |
VIM
vim方向键
| 移动方向 | 普通模式(高效,推荐) | 插入模式(输入时) | 补充说明 |
|---|---|---|---|
| 向下(下一行) | j(核心) +(下一行开头) N+j(跳 N 行,如 10j) | Enter(换行到下一行开头) Ctrl+j / Ctrl+n(仅下移光标) | j 是 Vim 最核心的下移键,单手操作,比↓快 |
| 向上(上一行) | k(核心) -(上一行开头) N+k(跳 N 行,如 3k) | Ctrl+k / Ctrl+p | k 对应上移,和 j 配对,主键区单手操作 |
| 向右(右一列) | l(小写 L,核心) 空格 N+l(跳 N 列,如 5l) | →(方向键) Ctrl+f | l 对应右移,主键区(jkl 分别对应下上右,像游戏方向键) |
| 向左(左一列) | h(核心) Backspace(退格键) N+h(跳 N 列,如 4h) | ←(方向键) Ctrl+b | h 对应左移,jklh 是 Vim 最基础的方向键 |
| 操作场景 | 模式 | 按键(仅移动光标) | 效果 | 优点 |
|---|---|---|---|---|
| 输入时想下移光标(不换行) | 插入模式 | Ctrl + j / Ctrl + n | 光标下移一行(同↓) | 不用挪手,单手按,比方向键快 |
| 输入时想上移光标(不换行) | 插入模式 | Ctrl + k / Ctrl + p | 光标上移一行(同↑) | 同上 |
| 输入时想左 / 右移光标 | 插入模式 | ← / →(方向键) | 光标左 / 右移一列 | 直观,新手最易接受 |
| 退出输入后高效移动光标 | 普通模式 | j(下)k(上)h(左)l(右) | 光标仅移动,无任何修改 | 主键区,不用挪手,最快 |
高阶移动
| 需求 | 普通模式按键 | 说明 |
|---|---|---|
| 移动到当前行开头 | 0(数字 0) | 一键到行首,比←快 |
| 移动到当前行结尾 | $(美元符) | 一键到行尾 |
| 移动到文件第一行 | gg | 全局开头 |
| 移动到文件最后一行 | G(大写) | 全局结尾 |
| 移动到第 N 行 | N+G(如 50G) | 直接跳到第 50 行 |
定时任务
CentOS
| 路径 | 核心职能 | 层级 | 典型场景 |
|---|---|---|---|
/etc/rsyslog.conf | 日志收集与分发 | 「源头」 | 决定日志写到哪个文件,比如把认证日志存到 secure |
/etc/logrotate.conf | 全局轮替默认规则 | 「兜底模板」 | 所有日志默认每周轮替、保留 4 份 |
/etc/logrotate.d/ | 应用专属轮替规则 | 「个性化覆盖」 | 给 nginx 日志单独配置「每天轮替、保留 30 份」 |
logrotate 核心配置规则全解析
| 规则分类 | 配置规则 | 核心含义 | 典型使用场景 |
|---|---|---|---|
| 🔴 基础轮替策略 | daily | 按天执行日志轮替 | 高频产生的应用日志(如 Nginx/MySQL 日志) |
weekly | 按周执行日志轮替(默认) | 系统低频日志(如 /var/log/messages) | |
monthly | 按月执行日志轮替 | 归档类日志(如财务 / 审计日志) | |
yearly | 按年执行日志轮替 | 极少更新的核心系统日志 | |
rotate N | 保留 N 份归档日志,超过则自动删除(N 为数字) | rotate 7 → 保留 7 天 / 周 / 月的日志,旧的自动清理 | |
size 大小 | 不按时间,按文件大小触发轮替(支持 K/M/G,如 size 100M) | 日志产生速度不稳定的场景(比如突发流量导致日志暴涨) | |
minsize 大小 | 日志达到指定大小且满足时间规则,才触发轮替(避免空日志频繁轮转) | weekly + minsize 10M → 每周轮替,但日志至少 10M 才执行 | |
maxsize 大小 | 日志未到时间规则,但达到指定大小也触发轮替(避免日志过大) | monthly + maxsize 1G → 每月轮替,但日志超 1G 就提前轮转 | |
| 🟡 文件处理规则 | create | 轮替后自动创建空的新日志文件(权限 / 属主和原文件一致) | 绝大多数场景必配(避免进程写日志时文件不存在) |
create 权限 属主 属组 | 轮替后创建指定权限 / 属主的新日志(如 create 0640 root adm) | 安全敏感日志(如 /var/log/secure,限制普通用户读取) | |
dateext | 归档日志添加日期后缀(格式 YYYYMMDD,如 hsp.log-20260318) | 需要按日期回溯日志的场景(替代默认的数字后缀 hsp.log.1) | |
dateformat -%Y%m%d_%H | 自定义日期后缀格式(支持 % Y/% m/% d/% H 等) | dateformat -%Y%m%d_%H%M → 精确到分(如 hsp.log-20260318_2130) | |
compress | 归档日志自动gzip 压缩(生成 .log-20260318.gz) | 节省磁盘空间(推荐对非实时查看的旧日志启用) | |
compresscmd 命令 | 指定压缩命令(默认 gzip,可改为 bzip2/xz 等) | compresscmd /usr/bin/bzip2 → 用更高压缩率的 bzip2 压缩 | |
delaycompress | 延迟压缩(只压缩上一轮的归档,当前归档不压缩) | 需要临时查看最新归档日志的场景(避免刚轮转的日志就被压缩) | |
nocompress | 不压缩归档日志 | 实时需要读取归档日志的场景(如监控告警分析) | |
copytruncate | 先复制原日志为归档,再截断原日志为 0 字节(不改变文件句柄) | 进程无法重启的场景(如 Java 应用、Nginx 不重启重新打开日志) | |
nocreate | 轮替后不创建新日志文件 | 仅归档旧日志,新日志由应用自行创建的场景 | |
missingok | 日志文件不存在时,不报错、不中断轮替 | 非必现的临时日志(如调试日志,可能被手动删除) | |
notifempty | 日志文件为空时,跳过轮替操作 | 避免空日志生成大量无用归档 | |
| 🟢 高级控制规则 | sharedscripts | 多个日志文件轮替时,脚本只执行一次(而非每个文件执行一次) | 轮替后重启服务的场景(如 postrotate 重启 rsyslog,避免重复重启) |
postrotate ... endscript | 轮替完成后执行指定脚本 / 命令(包裹在两者之间) | postrotate + systemctl reload nginx → 轮替后让 Nginx 重新加载日志文件 | |
prerotate ... endscript | 轮替开始前执行指定脚本 / 命令 | 轮替前备份日志到远程存储、校验日志完整性等 | |
su 属主 属组 | 以指定用户 / 组身份执行轮替(避免 root 权限过高) | 应用日志属主为非 root 时(如 su www www 处理 Nginx 日志) | |
olddir 目录 | 归档日志移动到指定目录(需和原日志同分区) | 归档日志单独归类(如 olddir /var/log/archive) | |
nomail | 日志轮替 / 删除时不发送邮件通知(默认) | 无需关注日志清理的普通场景 | |
mail 邮箱 | 日志超过保留数被删除时,发送归档日志到指定邮箱 | 审计 / 合规场景(需留存删除日志的记录) |
示例
1 | |
定时任务触发方式的区别
| 系统 | 定时触发方式 | 对应文件 / 服务 |
|---|---|---|
| CentOS | 传统 cron 任务 | /etc/cron.daily/logrotate(shell 脚本) |
| Ubuntu | 现代 systemd 定时器 | logrotate.timer + logrotate.service(真正执行日志轮替的服务) |
Ubuntu 中的具体对应:
不再使用
/etc/cron.daily/logrotate脚本,而是通过systemd定时器来调度。查看状态:
1
2
3
4
5
6# 查看定时器状态
systemctl list-timers logrotate.timer
# 查看服务定义
systemctl cat logrotate.service
# 手动触发一次轮替(和 CentOS 执行 /etc/cron.daily/logrotate 效果一样)
sudo logrotate /etc/logrotate.conf软件本身:Ubuntu 中对应的依然是
logrotate软件包。定时调度:CentOS 用
cron.daily脚本,Ubuntu 用logrotate.timersystemd 定时器。功能等价:两者最终都是每天自动执行
logrotate来轮替日志。
Ubuntu和 CentOS 的核心对比
| 维度 | CentOS(传统 cron 方式) | Ubuntu 24.04(systemd 方式) |
|---|---|---|
| 触发方式 | /etc/cron.daily/logrotate 脚本(由 cron 每天执行) | logrotate.timer 定时器(由 systemd 每天触发) |
| 执行命令 | /usr/sbin/logrotate /etc/logrotate.conf | 完全相同:/usr/sbin/logrotate /etc/logrotate.conf |
| 配置文件 | /etc/logrotate.conf + /etc/logrotate.d/ | 完全相同,配置规则通用 |
| 手动触发 | sudo /etc/cron.daily/logrotate | sudo systemctl start logrotate.service 或 sudo logrotate /etc/logrotate.conf |