1. Linux系统重要配置文件与核心命令深度解析
作为一名运维工程师,掌握Linux系统的核心配置文件和常用命令是基本功。今天我将分享一些在实际工作中频繁使用的重要配置文件和命令,这些内容不仅在日常运维中必不可少,也是面试中的高频考点。
1.1 系统开机与运行级别核心配置
1.1.1 /etc/rc.local开机自启详解
/etc/rc.local文件是Linux系统实现开机自启动的传统方式之一。在实际生产环境中,我们经常需要某些服务或脚本在系统启动时自动运行,这时就可以利用这个文件。
使用要点:
- 权限设置:CentOS7及以后版本默认没有执行权限,必须先执行
chmod +x /etc/rc.local - 内容编写:建议使用绝对路径,因为开机时环境变量可能尚未完全加载
- 执行顺序:该文件会在系统启动过程的最后阶段执行
典型应用场景:
- 创建必要的目录结构
- 启动自定义服务
- 同步系统时间
- 挂载特殊文件系统
注意:在现代Linux系统中,更推荐使用systemd服务单元来实现开机自启,但了解rc.local仍然很有必要,特别是在维护老旧系统时。
1.1.2 运行级别深度解析
Linux系统有7个预定义的运行级别,每个级别对应不同的系统状态:
| 运行级别 | 名称 | 用途说明 |
|---|---|---|
| 0 | 关机 | 系统关机状态 |
| 1 | 单用户模式 | 用于系统维护,无网络服务 |
| 2 | 多用户模式 | 支持多用户登录,但不支持NFS |
| 3 | 完整多用户模式 | 标准命令行界面,生产服务器常用 |
| 4 | 保留 | 未使用 |
| 5 | 图形界面模式 | 带图形用户界面 |
| 6 | 重启 | 系统重启 |
关键操作命令:
- 查看当前运行级别:
runlevel - 切换运行级别:
init [级别号] - 设置默认运行级别:在/etc/inittab中修改
id:3:initdefault:
现代系统变化:
在采用systemd的新版Linux中,运行级别被target替代:
- runlevel 3 → multi-user.target
- runlevel 5 → graphical.target
可以使用systemctl get-default查看当前默认target,用systemctl set-default设置默认target。
1.2 登录信息配置文件
1.2.1 /etc/motd文件
这个文件用于设置用户登录后显示的信息。在实际工作中,我经常用它来显示:
- 系统维护通知
- 使用规范提醒
- 重要变更公告
使用技巧:
- 内容支持ANSI颜色代码,可以制作彩色提示
- 可以使用figlet等工具生成ASCII艺术字
- 重要提示应该放在文件开头位置
1.2.2 /etc/issue和/etc/issue.net
这两个文件控制登录前显示的提示信息。从安全角度考虑,建议:
- 生产环境清空文件内容,避免泄露系统信息
- 如果需要显示信息,不要包含敏感系统详情
- 可以添加法律声明或访问警告
清空命令:
bash复制> /etc/issue
> /etc/issue.net
2. 系统状态监控与硬件信息查看
2.1 /proc虚拟文件系统
/proc是Linux内核提供的虚拟文件系统,它不占用磁盘空间,而是实时反映系统和进程状态。以下是一些关键文件:
| 文件路径 | 作用描述 |
|---|---|
| /proc/cpuinfo | CPU详细信息 |
| /proc/meminfo | 内存使用情况 |
| /proc/loadavg | 系统负载平均值 |
| /proc/mounts | 当前挂载的文件系统 |
| /proc/net/dev | 网络接口统计信息 |
| /proc/version | 内核版本信息 |
实用技巧:
- 使用
cat命令查看这些文件内容 - 信息是实时更新的,适合编写监控脚本
- 某些参数可以通过echo命令直接修改来调整内核行为
2.2 硬件信息查看命令
2.2.1 lscpu - CPU信息查看
这个命令提供了CPU架构的详细信息。输出中的关键字段:
- Architecture:CPU架构(如x86_64)
- CPU(s):逻辑CPU核心总数
- Core(s) per socket:每个物理CPU的核心数
- Socket(s):物理CPU数量
- Thread(s) per core:每个核心的线程数(超线程)
典型输出示例:
code复制Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
CPU(s): 8
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
2.2.2 free - 内存信息查看
free -h是最常用的内存查看方式(-h表示人类可读格式)。输出解读:
- total:物理内存总量
- used:已使用内存(包括buffers/cache)
- free:完全空闲的内存
- shared:共享内存
- buff/cache:缓冲和缓存使用的内存
- available:实际可用的内存(估算值)
重要概念:
Linux会利用空闲内存做磁盘缓存,所以看到used很高不必惊慌,这部分缓存可以在需要时被释放。
2.2.3 df - 磁盘空间查看
df -h显示磁盘分区使用情况。关键列:
- Filesystem:文件系统/分区
- Size:总容量
- Used:已用空间
- Avail:可用空间
- Use%:使用百分比
- Mounted on:挂载点
监控建议:
- 设置监控告警,当使用率超过85%时通知
- 对于关键分区(如/),建议保留更多空间
2.2.4 uptime - 系统负载查看
这个简洁的命令显示:
- 当前时间
- 系统运行时长
- 登录用户数
- 系统平均负载(1分钟、5分钟、15分钟)
负载解读:
负载值表示等待CPU处理的进程数。理想情况下,负载应小于CPU核心数。例如4核CPU:
- 负载4表示CPU满负荷
- 负载持续高于4表示CPU资源不足
2.2.5 w - 综合系统状态
比uptime更详细,额外显示:
- 当前登录用户
- 登录来源
- 登录时间
- 空闲时间
- 用户当前进程
安全应用:
定期检查可以及时发现异常登录:
bash复制w | grep -v 'pts/.*tmux' | grep -v 'pts/.*screen'
这个命令可以过滤掉常见的终端复用会话,突出显示可能的异常登录。
3. 系统日志与文本处理技巧
3.1 核心日志文件
Linux系统日志主要存放在/var/log目录下:
| 日志文件 | 主要用途 |
|---|---|
| /var/log/messages | 系统通用日志 |
| /var/log/secure | 认证和安全相关日志 |
| /var/log/cron | 计划任务日志 |
| /var/log/maillog | 邮件系统日志 |
| /var/log/boot.log | 系统启动日志 |
| /var/log/dmesg | 内核环缓冲区日志 |
| /var/log/audit/audit.log | SELinux审计日志 |
日志分析技巧:
- 使用
tail -f实时监控日志变化 - 结合grep过滤关键信息
- 使用
journalctl查看systemd日志 - 对日志文件进行定期轮转和归档
3.2 文本处理三剑客
3.2.1 tail - 查看文件尾部
常用参数:
-n [行数]:显示最后N行-f:实时跟踪文件变化-F:类似-f,但会跟踪文件重建
实用组合:
bash复制tail -n 100 -f /var/log/messages | grep -i error
这个命令实时监控日志最后100行中的错误信息。
3.2.2 head - 查看文件头部
与tail相反,head显示文件开头部分。常用方式:
bash复制head -n 20 filename # 显示前20行
实用技巧:
结合tail可以提取文件中段:
bash复制head -n 50 filename | tail -n 20 # 显示第31-50行
3.2.3 grep - 文本搜索
grep是Linux下最强大的文本搜索工具。高级用法:
- 正则表达式搜索:
bash复制grep '^[0-9]{3}-[0-9]{2}-[0-9]{4}' file # 匹配美国社保号格式
- 上下文显示:
bash复制grep -A 2 -B 2 'error' logfile # 显示匹配行及前后各2行
- 递归搜索:
bash复制grep -r 'function_name' /path/to/code # 递归搜索目录
- 统计匹配次数:
bash复制grep -c 'pattern' file # 统计匹配行数
性能优化:
- 对大文件使用
--mmap选项 - 使用
-m [数字]限制匹配数量 - 简单匹配时用
fgrep(等同于grep -F)更快
4. 实战经验与故障排查
4.1 常见问题排查流程
-
系统无法启动
- 检查/boot分区空间
- 查看grub配置
- 尝试单用户模式修复
-
服务无法启动
- 查看服务日志:
journalctl -u service_name - 检查端口占用:
ss -tulnp | grep port - 验证配置文件:
service_name -t(如nginx -t)
- 查看服务日志:
-
性能问题
- 使用top/htop查看资源使用
- 检查IO等待:
iostat -x 1 - 分析内存使用:
free -m
4.2 实用脚本示例
监控磁盘空间脚本:
bash复制#!/bin/bash
THRESHOLD=85
df -h | awk '0+$5 >= '$THRESHOLD' {print $1 " is at " $5}'
查找大文件:
bash复制find / -type f -size +100M -exec ls -lh {} \;
批量杀进程:
bash复制ps aux | grep 'pattern' | awk '{print $2}' | xargs kill -9
4.3 安全加固建议
- 定期检查异常登录:
bash复制grep 'Failed password' /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr
- 禁用不必要的服务:
bash复制systemctl list-unit-files --type=service | grep enabled
- 检查SUID/SGID文件:
bash复制find / -perm /4000 -o -perm /2000 -type f -exec ls -ld {} \;
掌握这些配置文件和命令,能够帮助运维工程师快速定位和解决系统问题。在实际工作中,建议:
- 建立自己的命令备忘清单
- 编写常用检查脚本
- 定期复习系统文档
- 参与实际故障排查积累经验
记住,熟练使用这些工具需要时间和实践,不要期望一次性掌握所有内容。从基础开始,逐步深入,你会逐渐成长为一名高效的Linux运维工程师。