1. Linux基础概念与核心特性
Linux作为开源操作系统的代表,其设计哲学与Windows等商业系统有着本质区别。我第一次接触Linux是在大学实验室的服务器上,当时被其纯命令行界面和权限管理机制深深震撼。经过多年使用,我认为理解Linux需要从三个维度入手:文件系统视角、进程管理视角和用户权限视角。
Linux采用单一根目录结构,所有设备、分区都以文件形式挂载在/目录下。这种设计带来的直接好处是:
- 硬件抽象化:打印机、磁盘等设备通过
/dev目录下的设备文件操作 - 配置集中化:系统配置集中在
/etc,用户数据在/home - 路径标准化:所有程序都遵循FHS(文件系统层次标准)
进程管理方面,Linux采用经典的fork-exec模型。通过ps -ef命令可以看到,所有进程都以init/systemd为根形成树状结构。我曾遇到过一个内存泄漏案例,正是通过pstree命令发现某个子进程没有正常退出。
权限系统是Linux安全性的基石。每个文件都有rwx三组权限位,配合chmod/chown命令使用。实际工作中最常见的权限问题是:
bash复制chmod 755 script.sh # 所有者可读写执行,其他人只读执行
chown user:group file # 修改属主和属组
经验提示:使用
ls -l时注意第一列的字符,比如d表示目录,l是软链接,s是setuid位。这些特殊属性经常在面试中被问到。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心命令与实用技巧
2.1 文件操作命令集
ls、cd、cp、mv这些基础命令看似简单,但隐藏着许多实用技巧。比如:
bash复制ls -lh # 人类可读的文件大小显示
cp -a src dst # 保留所有属性复制
mv -i file1 file2 # 覆盖前提示
处理文本文件时,grep、awk、sed三剑客必须掌握。我曾用一行命令统计Nginx日志中的IP访问量:
bash复制awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10
2.2 系统监控与进程管理
top命令的增强版htop提供了更直观的进程监控界面。关键指标包括:
- load average:三个数值分别代表1/5/15分钟的平均负载
- %CPU:注意us(用户态)和sy(内核态)的比例
- RES:进程实际占用的物理内存
排查进程问题时,信号机制尤为重要。常用信号有:
bash复制kill -9 PID # SIGKILL,强制终止
kill -15 PID # SIGTERM,优雅退出
kill -HUP PID # 重载配置
2.3 网络工具链
ifconfig已被ip命令取代,现代Linux发行版推荐使用:
bash复制ip addr show # 查看IP地址
ip route show # 查看路由表
网络连通性测试工具链:
bash复制ping -c 4 example.com # 基本连通性
traceroute example.com # 路由追踪
nc -zv example.com 80 # 端口检测
ss -tulnp # 查看监听端口(比netstat更高效)
3. Shell编程精髓
3.1 变量与条件判断
Shell变量有几点易错之处:
bash复制name="value" # 等号两边不能有空格
echo ${name} # 大括号明确变量边界
条件判断中,[ ]和[[ ]]的区别:
bash复制if [ -f "/path/file" ]; then # 传统test命令
if [[ $str == pattern ]]; then # 支持模式匹配
3.2 循环与函数
for循环的几种写法:
bash复制for i in {1..10}; do
for ((i=0; i<10; i++)); do
while read line; do
函数定义与参数处理:
bash复制function greet() {
local name=$1 # 局部变量
echo "Hello, $name"
}
greet "World"
3.3 实用脚本案例
日志清理脚本示例:
bash复制#!/bin/bash
LOG_DIR="/var/log/app"
DAYS_TO_KEEP=7
find "$LOG_DIR" -type f -name "*.log" -mtime +$DAYS_TO_KEEP -exec rm -f {} \;
echo "$(date): 清理完成" >> "$LOG_DIR/cleanup.log"
避坑指南:脚本开头务必加
set -euo pipefail,这样任何错误都会立即退出,避免隐藏问题。
4. 系统管理与进阶配置
4.1 用户与权限体系
/etc/passwd文件结构解析:
code复制username:x:UID:GID:描述:家目录:登录shell
sudoers文件的安全配置:
bash复制# 允许用户执行特定命令无需密码
username ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
4.2 服务管理
systemd的常用操作:
bash复制systemctl list-units --type=service # 查看所有服务
journalctl -u nginx -f # 查看服务日志
systemctl daemon-reload # 重载配置
创建自定义服务示例:
ini复制# /etc/systemd/system/myapp.service
[Unit]
Description=My Application
[Service]
ExecStart=/usr/local/bin/myapp
Restart=always
User=appuser
[Install]
WantedBy=multi-user.target
4.3 存储管理
LVM的基本操作流程:
bash复制pvcreate /dev/sdb1 # 创建物理卷
vgcreate vg0 /dev/sdb1 # 创建卷组
lvcreate -L 10G -n lv0 vg0 # 创建逻辑卷
mkfs.ext4 /dev/vg0/lv0 # 格式化
mount /dev/vg0/lv0 /mnt/data # 挂载
磁盘空间排查技巧:
bash复制df -h # 查看挂载点使用情况
du -sh * | sort -h # 排序显示目录大小
ncdu # 交互式磁盘分析工具
5. 网络与安全配置
5.1 防火墙管理
ufw的基本用法:
bash复制ufw allow 22/tcp # 开放SSH端口
ufw enable # 启用防火墙
ufw status numbered # 查看规则
更底层的iptables示例:
bash复制iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT 1 -i lo -j ACCEPT # 允许回环接口
5.2 SSH安全加固
/etc/ssh/sshd_config关键配置:
code复制PermitRootLogin no
PasswordAuthentication no # 强制密钥登录
AllowUsers alice bob
密钥对管理技巧:
bash复制ssh-keygen -t ed25519 # 生成更安全的密钥
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host # 自动部署公钥
5.3 日志审计
关键日志文件位置:
code复制/var/log/auth.log # 认证日志
/var/log/syslog # 系统日志
/var/log/apt/ # 包管理日志
使用auditd进行高级审计:
bash复制auditctl -a always,exit -F arch=b64 -S open -F path=/etc/passwd # 监控文件访问
ausearch -k mykey # 查询审计事件
6. 性能调优与问题排查
6.1 系统监控工具
vmstat输出解析:
code复制procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
iostat关注指标:
- %util:设备利用率
- await:I/O平均等待时间
- svctm:服务时间
6.2 内存问题排查
OOM killer相关日志查看:
bash复制dmesg | grep -i oom
手动释放缓存:
bash复制echo 3 > /proc/sys/vm/drop_caches # 释放pagecache, dentries, inodes
6.3 网络性能分析
tcptdump常用命令:
bash复制tcpdump -i eth0 -nn 'tcp port 80' # 抓取HTTP流量
tcpdump -w capture.pcap -c 1000 # 保存1000个包
带宽测试工具:
bash复制iperf3 -s # 服务端
iperf3 -c server_ip # 客户端
7. 开发环境配置
7.1 编译工具链
GCC常用编译选项:
bash复制gcc -o program -Wall -Wextra -O2 -g source.c # 带调试信息的优化编译
库文件管理:
bash复制ldd /usr/bin/program # 查看依赖库
LD_LIBRARY_PATH=/path/to/libs ./program # 临时指定库路径
7.2 容器化基础
Docker核心命令:
bash复制docker build -t myapp . # 构建镜像
docker run -d -p 8080:80 --name web myapp # 运行容器
docker exec -it web bash # 进入容器
Podman的无守护进程特性:
bash复制podman run --rm alpine echo "Hello" # 自动清理的临时容器
7.3 版本控制集成
Git工作流示例:
bash复制git init
git remote add origin git@example.com:repo.git
git add -A
git commit -m "Initial commit"
git push -u origin main
.gitconfig实用配置:
ini复制[alias]
co = checkout
br = branch
ci = commit
st = status
[core]
editor = vim
