1. Linux系统概述与核心特性
Linux是一种开源的类Unix操作系统内核,由林纳斯·托瓦兹(Linus Torvalds)于1991年首次发布。作为现代计算领域最重要的基础设施之一,Linux以其稳定性、安全性和灵活性著称。与传统的商业操作系统不同,Linux遵循GNU通用公共许可证(GPL),这意味着任何人都可以自由使用、修改和分发它的源代码。
Linux系统的核心特性包括:
- 多用户多任务:支持多个用户同时登录并运行各自的程序
- 分时处理:通过时间片轮转机制实现多任务并发执行
- 虚拟内存管理:使用交换空间扩展物理内存容量
- 模块化设计:内核支持动态加载和卸载驱动模块
- 完善的网络协议栈:原生支持TCP/IP等现代网络协议
提示:Linux严格区分大小写,这与Windows系统有本质区别。例如"File.txt"和"file.txt"在Linux中会被视为两个不同的文件。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Linux文件系统结构解析
Linux采用单一的树状目录结构,所有文件和设备都挂载在根目录(/)下。这种设计哲学与Windows的盘符划分(C:、D:等)形成鲜明对比。以下是关键目录及其作用:
| 目录路径 | 主要用途 |
|---|---|
| /bin | 存放系统基本命令(如ls, cp等) |
| /etc | 系统配置文件存放位置 |
| /home | 普通用户的家目录 |
| /root | 管理员(root)的家目录 |
| /usr | 用户安装的应用程序和文件 |
| /var | 经常变化的文件(如日志) |
| /dev | 设备文件接口 |
| /proc | 虚拟文件系统,反映系统运行状态 |
2.1 文件权限管理机制
Linux采用三位一组的权限控制模型,通过9个字符表示文件的访问权限:
code复制-rwxr-xr--
这组权限可以分解为:
- 第一个字符表示文件类型(-表示普通文件,d表示目录)
- 接下来三组(rwx、r-x、r--)分别表示:
- 所有者(owner)权限
- 所属组(group)权限
- 其他用户(other)权限
修改权限的chmod命令支持两种模式:
bash复制# 数字模式(755表示rwxr-xr-x)
chmod 755 filename
# 符号模式(u=用户,g=组,o=其他,a=所有)
chmod u+x,g-w,o=r filename
3. 基础命令与实用技巧
3.1 文件操作命令集
bash复制# 列出目录内容(添加-l显示详情,-a显示隐藏文件)
ls -la /path
# 复制文件(-r参数递归复制目录)
cp -r source destination
# 移动/重命名文件
mv oldname newname
# 创建目录
mkdir newdir
# 删除文件(-f强制删除,-r递归删除目录)
rm -rf /path/to/delete
3.2 文本处理三剑客
- grep - 文本搜索工具
bash复制# 在文件中搜索包含"error"的行
grep "error" /var/log/syslog
# 使用正则表达式搜索IP地址
grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" access.log
- awk - 文本分析工具
bash复制# 打印/etc/passwd中第一列(用户名)和第三列(用户ID)
awk -F: '{print $1,$3}' /etc/passwd
# 统计nginx日志中每个IP的访问次数
awk '{ip[$1]++} END {for(i in ip) print i,ip[i]}' access.log
- sed - 流编辑器
bash复制# 替换文件中的文本
sed 's/old/new/g' filename
# 删除空白行
sed '/^$/d' filename
4. 系统管理与维护
4.1 用户和组管理
bash复制# 创建新用户
useradd -m -s /bin/bash username
# 设置密码
passwd username
# 将用户添加到sudo组
usermod -aG sudo username
# 创建新组
groupadd groupname
# 查看用户所属组
groups username
4.2 进程管理命令
bash复制# 查看系统进程(动态刷新)
top
# 查看指定进程信息
ps aux | grep nginx
# 终止进程
kill -9 PID
# 按名称杀死所有匹配进程
pkill -f "process_name"
4.3 软件包管理
不同Linux发行版使用不同的包管理工具:
| 发行版 | 安装命令 | 更新命令 |
|---|---|---|
| Debian/Ubuntu | apt install package |
apt update && apt upgrade |
| RedHat/CentOS | yum install package |
yum update |
| Arch Linux | pacman -S package |
pacman -Syu |
注意:在生产环境中执行系统更新前,务必先测试关键应用程序的兼容性,并确保有完整的备份方案。
5. Shell脚本编程基础
5.1 基本脚本结构
bash复制#!/bin/bash
# 这是一个注释
echo "当前用户: $(whoami)"
echo "系统负载: $(uptime)"
5.2 条件判断与循环
bash复制# if条件判断
if [ -f "/path/to/file" ]; then
echo "文件存在"
elif [ -d "/path/to/dir" ]; then
echo "目录存在"
else
echo "都不存在"
fi
# for循环示例
for i in {1..5}; do
echo "迭代 $i"
done
# while循环读取文件
while read line; do
echo "行内容: $line"
done < filename
5.3 函数定义与使用
bash复制# 定义函数
function greet() {
local name=$1
echo "Hello, $name!"
}
# 调用函数
greet "World"
# 带返回值的函数
function add() {
local sum=$(($1 + $2))
return $sum
}
add 3 5
echo "3 + 5 = $?"
6. 网络配置与故障排查
6.1 基本网络命令
bash复制# 查看IP地址
ip addr show
# 测试网络连通性
ping -c 4 google.com
# 跟踪网络路径
traceroute google.com
# 查看网络连接状态
netstat -tulnp
# 更现代的替代方案
ss -tulnp
6.2 SSH远程管理
bash复制# 连接到远程服务器
ssh username@hostname
# 使用特定端口连接
ssh -p 2222 username@hostname
# 免密码登录(需要配置公钥认证)
ssh-copy-id username@hostname
# 执行远程命令
ssh username@hostname "ls -l /tmp"
7. 系统监控与性能优化
7.1 资源监控工具
bash复制# 实时监控系统资源
htop
# 磁盘使用情况
df -h
# 目录大小分析
du -sh /path/*
# 内存使用情况
free -m
# IO监控
iostat -x 1
7.2 日志分析技巧
bash复制# 查看系统日志
journalctl -xe
# 实时查看日志更新
tail -f /var/log/syslog
# 按时间筛选日志
grep "May 15" /var/log/auth.log
# 使用awk分析日志
awk '/Failed password/ {print $11}' /var/log/auth.log | sort | uniq -c | sort -nr
8. 安全最佳实践
8.1 基础安全配置
bash复制# 禁用root SSH登录
sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
# 配置防火墙规则(UFW示例)
ufw allow 22/tcp
ufw allow 80/tcp
ufw enable
# 定期更新系统
apt update && apt upgrade -y
# 检查SUID/SGID文件
find / -perm /4000 -o -perm /2000 -type f -exec ls -ld {} \;
8.2 备份策略
bash复制# 使用tar创建完整备份
tar -czvf backup-$(date +%Y%m%d).tar.gz /path/to/backup
# 增量备份示例(需要配合find和rsync)
rsync -avz --delete --link-dest=/path/to/last/backup /source /destination
# 自动备份脚本示例
#!/bin/bash
BACKUP_DIR="/backups"
DATE=$(date +%Y%m%d)
tar -czf "$BACKUP_DIR/backup-$DATE.tar.gz" /etc /home
find "$BACKUP_DIR" -type f -mtime +30 -delete
