一、Linux 基础:玩转命令行工具
命令行是 Linux 开发的 "入口",掌握常用命令及组合技巧,能大幅提升操作效率。以下为高频命令与核心用法梳理:
1. 基础文件操作命令
| 命令 | 功能 | 示例 |
|---|---|---|
ls |
列出目录内容 | ls -l(长格式显示)、ls -a(显示隐藏文件) |
cd |
切换目录 | cd ~(回到家目录)、cd ../(返回上级目录) |
mkdir/rmdir |
创建 / 删除空目录 | mkdir -p a/b/c(递归创建多级目录) |
touch |
创建空文件或修改时间戳 | touch test.txt |
cp/mv |
复制 / 移动文件 | cp -r src/ dst/(递归复制目录)、mv old.txt new.txt(重命名) |
rm |
删除文件 / 目录 | rm -rf dir/(强制删除目录,慎用) |
2. 文件查看与搜索
- 查看内容 :
cat filename(全量查看)、head -n 10 filename(查看前 10 行)、tail -f log.txt(实时跟踪日志)。 - 搜索关键字 :
grep "ERROR" log.txt(搜索文件中的 "ERROR"),结合管道更高效,如tail -100 log.txt | grep "ERROR"(从最后 100 行中搜索)。
3. 权限与用户管理
Linux 文件权限分为 "读(r=4)、写(w=2)、执行(x=1)",对应所有者、同组用户、其他用户三类角色:
- 修改权限:
chmod 755 filename(所有者 rwx,其他 rx)、chmod +x script.sh(添加执行权限)。 - 修改归属:
chown user:group filename(修改文件所有者与组)、chgrp group filename(仅修改组)。
4. 压缩与软件管理
- 压缩 / 解压缩 :
.tar.gz格式:tar -zcvf package.tar.gz dir/(压缩)、tar -zxvf package.tar.gz(解压缩)。.tar.bz2格式:将上述命令中的z替换为j即可。
- 软件安装 :
dpkg工具(Debian/Ubuntu):sudo dpkg -i xxx.deb(安装 deb 包)、sudo dpkg -P xxx(彻底卸载)。apt-get工具:sudo apt-get install xxx(自动解决依赖安装)、sudo apt-get remove xxx --purge(卸载并清除配置)。
二、Linux 内核:理解系统核心架构
Linux 内核是操作系统的 "大脑",负责硬件抽象、进程调度、内存管理等核心功能。其模块化架构与子系统设计,支撑了从嵌入式设备到云服务器的全场景部署。
1. 内核核心目录结构(Linux 6.x+)
内核源码通过清晰的目录划分实现功能解耦,关键目录及作用如下:
arch/:硬件架构适配目录,支持 x86、ARM 等 30 余种架构,如arch/arm64/kernel/存放 ARM64 架构的调度逻辑。drivers/:设备驱动总目录,按硬件类型分类(如net/、gpu/),新版新增rust/子目录支持 Rust 安全驱动开发。kernel/:内核核心逻辑,含进程调度(sched/)、中断处理(irq/),新版优化多核负载均衡与实时性(PREEMPT_RT 补丁)。mm/:内存管理,实现 Buddy 算法(大块内存分配)、SLUB 分配器(小块内存优化),新版引入 Memory Folios 减少碎片。fs/:文件系统,提供 VFS 统一抽象层,支持 Ext4、Btrfs 等,新版优化 IO 性能(如 io_uring 异步 IO)。
2. 内核架构核心特性
Linux 采用宏内核(Monolithic Kernel) 设计,所有核心服务(进程调度、内存管理等)运行在同一地址空间,优势在于高效(零拷贝、低上下文切换),同时通过模块化设计保证灵活性:
- 系统调用机制 :用户态通过系统调用接口(如
read()、write())进入内核态,流程为 "用户态封装参数→CPU 特权级切换(Ring3→Ring0)→内核态处理→返回结果"。 - 开源优势:内核遵循 GPL 协议,全球开发者协同迭代,截至 2026 年,最新内核代码量超 2500 万行,支持 Rust 驱动、eBPF 增强等前沿特性。
三、Shell 编程:实现自动化运维与开发辅助
Shell 是 Linux 的命令行解释器,通过脚本串联命令、实现逻辑判断与循环,可大幅简化重复性工作。以下为 Shell 编程核心知识点与实战案例:
1. 脚本基础:结构与执行
一个标准的 Shell 脚本需包含三部分:
bash
运行
#!/bin/bash # 声明解释器(Shebang,内核通过此调用bash执行)
# 注释:批量重命名.txt文件为.md
for file in *.txt; do
mv "$file" "${file%.txt}.md" # 替换文件后缀
done
- 执行方式 :
- 赋予权限:
chmod +x rename.sh,直接运行:./rename.sh。 - 无需权限:
bash rename.sh(通过 bash 解释器直接执行)。
- 赋予权限:
2. 核心语法:变量与逻辑
- 变量 :无需声明类型,赋值时等号前后无空格,如
NAME="Linux",引用时加$,如echo "Hello, $NAME"。- 环境变量:
$PWD(当前目录)、$HOME(家目录)、$PATH(命令搜索路径)。 - 位置变量:
$0(脚本名)、$1-$n(传入参数)、$#(参数个数),如./test.sh a b中,$1=a、$2=b。
- 环境变量:
- 条件判断 :使用
if-else结合测试表达式,常用测试条件:- 文件相关:
-f file(是否为普通文件)、-d dir(是否为目录)、-r file(是否可读)。 - 数值比较:
-eq(等于)、-gt(大于),如if [ $num -gt 10 ]; then ... fi。
- 文件相关:
3. 实战案例:高频脚本场景
案例 1:日志分析 ------ 统计错误次数
#!/bin/bash
LOG_FILE="error.log"
# 统计ERROR出现次数
ERROR_COUNT=$(grep -c "ERROR" "$LOG_FILE")
echo "错误总数:$ERROR_COUNT"
# 输出错误行及行号
echo "错误详情:"
grep -n "ERROR" "$LOG_FILE"
案例 2:自动备份 ------ 保留 7 天数据
#!/bin/bash
SOURCE_DIR="/home/data" # 源目录
BACKUP_DIR="/home/backup" # 备份目录
DATE=$(date +%Y%m%d) # 日期格式:20240520
# 压缩备份
tar -zcf "$BACKUP_DIR/data_$DATE.tar.gz" "$SOURCE_DIR"
# 删除7天前的备份
find "$BACKUP_DIR" -name "data_*.tar.gz" -mtime +7 -delete
echo "备份完成:$BACKUP_DIR/data_$DATE.tar.gz"
案例 3:系统监控 ------ 查看 CPU / 内存使用率
#!/bin/bash
echo "=== 系统监控报告($(date +%H:%M:%S))==="
# CPU使用率(100 - 空闲率)
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
# 内存使用率
MEM_USAGE=$(free | grep Mem | awk '{print $3/$2 * 100.0}')
# 磁盘使用率(根目录)
DISK_USAGE=$(df -h / | grep / | awk '{print $5}')
echo "CPU使用率:$CPU_USAGE%"
echo "内存使用率:$MEM_USAGE%"
echo "磁盘使用率:$DISK_USAGE"