Linux
一、Linux 基础
1. Linux 发行版
主要发行版:
- Ubuntu - 用户友好,适合初学者
- CentOS/RHEL - 企业级,稳定可靠
- Debian - 稳定,软件包丰富
- Fedora - 最新特性,适合开发
- SUSE - 企业级,欧洲流行
选择建议:
- 生产环境:CentOS、RHEL、Ubuntu LTS
- 开发环境:Ubuntu、Fedora
- 容器环境:Alpine(轻量级)
2. Linux 目录结构
/ 根目录
├── /bin 基本命令(所有用户)
├── /sbin 系统命令(管理员)
├── /etc 配置文件
├── /home 用户主目录
├── /root 管理员主目录
├── /usr 用户程序
├── /var 可变数据(日志、缓存)
├── /tmp 临时文件
├── /opt 可选软件
├── /proc 进程信息(虚拟文件系统)
├── /sys 系统信息(虚拟文件系统)
└── /dev 设备文件3. 文件权限
权限表示:
-rw-r--r-- 1 user group 1024 Oct 21 12:00 file.txt权限位:
- 第 1 位:文件类型(- 普通文件,d 目录,l 链接)
- 2-4 位:所有者权限(rwx)
- 5-7 位:组权限(rwx)
- 8-10 位:其他用户权限(rwx)
权限值:
r(read) = 4w(write) = 2x(execute) = 1
修改权限:
bash
# 数字方式
chmod 755 file.txt # rwxr-xr-x
chmod 644 file.txt # rw-r--r--
# 符号方式
chmod u+x file.txt # 所有者添加执行权限
chmod g-w file.txt # 组移除写权限
chmod o+r file.txt # 其他用户添加读权限
chmod a+x file.txt # 所有人添加执行权限二、常用命令
1. 文件操作
查看文件:
bash
cat file.txt # 显示整个文件
less file.txt # 分页显示
head -n 10 file.txt # 显示前 10 行
tail -n 10 file.txt # 显示后 10 行
tail -f file.txt # 实时查看(日志)文件操作:
bash
cp source dest # 复制
mv source dest # 移动/重命名
rm file.txt # 删除文件
rm -r directory # 删除目录
mkdir dir # 创建目录
rmdir dir # 删除空目录查找文件:
bash
find /path -name "*.txt" # 按名称查找
find /path -type f -size +100M # 查找大于 100M 的文件
find /path -mtime -7 # 查找 7 天内修改的文件
locate filename # 快速查找(需要 updatedb)
which command # 查找命令路径
whereis command # 查找命令、源码、手册2. 文本处理
grep:
bash
grep "pattern" file.txt # 搜索文本
grep -r "pattern" /path # 递归搜索
grep -i "pattern" file.txt # 忽略大小写
grep -v "pattern" file.txt # 反向匹配
grep -E "pattern1|pattern2" # 正则表达式sed:
bash
sed 's/old/new/g' file.txt # 替换
sed -i 's/old/new/g' file.txt # 原地替换
sed -n '10,20p' file.txt # 显示 10-20 行
sed '/pattern/d' file.txt # 删除匹配行awk:
bash
awk '{print $1}' file.txt # 打印第一列
awk -F: '{print $1}' /etc/passwd # 指定分隔符
awk '/pattern/ {print $0}' # 匹配模式3. 进程管理
查看进程:
bash
ps aux # 查看所有进程
ps -ef # 另一种格式
top # 实时查看进程
htop # 增强版 top进程操作:
bash
kill PID # 终止进程
kill -9 PID # 强制终止
killall process_name # 终止所有同名进程
pkill pattern # 按模式终止
# 后台运行
nohup command & # 后台运行,忽略挂断信号系统资源:
bash
free -h # 查看内存
df -h # 查看磁盘
du -sh /path # 查看目录大小
iostat # I/O 统计
netstat -tulpn # 网络连接
ss -tulpn # 现代版 netstat4. 用户和权限
用户管理:
bash
useradd username # 创建用户
userdel username # 删除用户
usermod -aG group user # 添加用户到组
passwd username # 修改密码组管理:
bash
groupadd groupname # 创建组
groupdel groupname # 删除组
groups username # 查看用户所属组sudo:
bash
sudo command # 以管理员身份执行
sudo -u user command # 以指定用户执行
visudo # 编辑 sudo 配置5. 网络命令
网络配置:
bash
ifconfig # 查看网络接口(已废弃)
ip addr # 查看 IP 地址
ip link # 查看网络接口
ip route # 查看路由表
# 网络连接
ping host # 测试连通性
traceroute host # 追踪路由
netstat -tulpn # 查看端口
ss -tulpn # 查看端口(推荐)防火墙:
bash
# firewalld (CentOS/RHEL)
firewall-cmd --list-all
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload
# ufw (Ubuntu)
ufw status
ufw allow 80/tcp
ufw enable三、服务管理
1. systemd
systemd 是现代的 Linux 初始化系统。
服务管理:
bash
systemctl start service # 启动服务
systemctl stop service # 停止服务
systemctl restart service # 重启服务
systemctl status service # 查看状态
systemctl enable service # 开机自启
systemctl disable service # 禁用自启
systemctl list-units # 列出所有单元查看日志:
bash
journalctl -u service # 查看服务日志
journalctl -f # 实时查看日志
journalctl --since today # 查看今天的日志2. 创建 systemd 服务
创建服务文件:
bash
sudo nano /etc/systemd/system/myservice.service服务配置:
ini
[Unit]
Description=My Service
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/myservice
ExecStart=/usr/bin/dotnet /opt/myservice/MyApp.dll
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target启用服务:
bash
sudo systemctl daemon-reload
sudo systemctl enable myservice
sudo systemctl start myservice四、Shell 脚本
1. 基本语法
变量:
bash
name="Alice"
echo $name
echo ${name}
# 环境变量
export PATH=$PATH:/usr/local/bin条件判断:
bash
if [ condition ]; then
commands
elif [ condition ]; then
commands
else
commands
fi
# 条件运算符
[ -f file ] # 文件存在
[ -d dir ] # 目录存在
[ -r file ] # 可读
[ -w file ] # 可写
[ -x file ] # 可执行
[ $a -eq $b ] # 相等
[ $a -ne $b ] # 不等
[ $a -gt $b ] # 大于循环:
bash
# for 循环
for i in 1 2 3; do
echo $i
done
for file in *.txt; do
echo $file
done
# while 循环
while [ condition ]; do
commands
done2. 脚本示例
备份脚本:
bash
#!/bin/bash
BACKUP_DIR="/backup"
SOURCE_DIR="/var/www"
DATE=$(date +%Y%m%d_%H%M%S)
# 创建备份目录
mkdir -p $BACKUP_DIR
# 备份
tar -czf $BACKUP_DIR/backup_$DATE.tar.gz $SOURCE_DIR
# 删除 7 天前的备份
find $BACKUP_DIR -name "backup_*.tar.gz" -mtime +7 -delete
echo "Backup completed: backup_$DATE.tar.gz"监控脚本:
bash
#!/bin/bash
THRESHOLD=80
# 检查磁盘使用率
DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ $DISK_USAGE -gt $THRESHOLD ]; then
echo "Warning: Disk usage is ${DISK_USAGE}%"
# 发送告警
fi五、性能监控
1. 系统监控
top:
bash
top # 实时查看进程
# 快捷键:P(CPU排序)、M(内存排序)、q(退出)htop:
bash
htop # 增强版 top,更友好vmstat:
bash
vmstat 1 10 # 每秒采样,共 10 次iostat:
bash
iostat -x 1 # 每秒显示 I/O 统计2. 日志分析
查看日志:
bash
# 系统日志
tail -f /var/log/syslog # Ubuntu/Debian
tail -f /var/log/messages # CentOS/RHEL
# 应用日志
tail -f /var/log/nginx/access.log
tail -f /var/log/apache2/access.log日志分析:
bash
# 统计访问最多的 IP
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10
# 统计状态码
awk '{print $9}' access.log | sort | uniq -c | sort -rn
# 统计访问时间
awk '{print $4}' access.log | cut -d: -f1 | uniq -c3. 性能优化
系统参数优化:
bash
# 编辑 /etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.ip_local_port_range = 1024 65535
# 应用配置
sysctl -p六、安全配置
1. SSH 安全
SSH 配置:
bash
# 编辑 /etc/ssh/sshd_config
Port 2222 # 修改默认端口
PermitRootLogin no # 禁止 root 登录
PasswordAuthentication no # 禁用密码认证(使用密钥)
AllowUsers user1 user2 # 只允许指定用户
# 重启 SSH
sudo systemctl restart sshdSSH 密钥认证:
bash
# 生成密钥对
ssh-keygen -t rsa -b 4096
# 复制公钥到服务器
ssh-copy-id user@server
# 使用密钥登录
ssh -i ~/.ssh/id_rsa user@server2. 防火墙配置
firewalld (CentOS/RHEL):
bash
# 查看状态
firewall-cmd --state
# 开放端口
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=443/tcp --permanent
# 允许服务
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
# 重载配置
firewall-cmd --reloadufw (Ubuntu):
bash
# 启用防火墙
sudo ufw enable
# 开放端口
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 允许服务
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
# 查看状态
sudo ufw status3. 安全加固
禁用不必要的服务:
bash
systemctl disable service # 禁用服务
systemctl stop service # 停止服务定期更新:
bash
# Ubuntu/Debian
sudo apt update
sudo apt upgrade
# CentOS/RHEL
sudo yum update
# 或
sudo dnf updateSELinux(CentOS/RHEL):
bash
# 查看状态
getenforce
# 临时禁用
setenforce 0
# 永久禁用(编辑 /etc/selinux/config)
SELINUX=disabled七、常见面试题
Q1: Linux 文件权限如何计算?
示例:
rwxr-xr-x = 755
rw-r--r-- = 644
rwxrwxrwx = 777计算:
- r = 4, w = 2, x = 1
- 所有者:rwx = 4+2+1 = 7
- 组:r-x = 4+0+1 = 5
- 其他:r-x = 4+0+1 = 5
- 结果:755
Q2: 如何查找占用磁盘空间的文件?
bash
# 查找大文件
find / -type f -size +100M
# 查看目录大小
du -sh /* | sort -h
# 查看磁盘使用
df -hQ3: 如何查看进程占用的端口?
bash
# 方法 1
netstat -tulpn | grep :80
# 方法 2(推荐)
ss -tulpn | grep :80
# 方法 3
lsof -i :80Q4: 如何实现 Linux 服务开机自启?
systemd:
bash
systemctl enable service传统方式(已废弃):
bash
chkconfig service on # CentOS 6
update-rc.d service defaults # Debian/UbuntuQ5: 如何实现 Linux 负载均衡?
方案:
- Nginx - 反向代理和负载均衡
- HAProxy - 专业的负载均衡器
- LVS (Linux Virtual Server) - 内核级负载均衡
- Keepalived - 实现高可用
八、最佳实践
- ✅ 定期更新 - 安装安全补丁
- ✅ 最小权限 - 使用普通用户运行服务
- ✅ 启用防火墙 - 只开放必要端口
- ✅ SSH 安全 - 使用密钥认证,禁用 root 登录
- ✅ 监控系统 - 监控资源使用和日志
- ✅ 备份数据 - 定期备份重要数据
- ✅ 日志管理 - 配置日志轮转
- ✅ 文档记录 - 记录配置和变更
- ❌ 不要使用 root - 避免使用 root 用户
- ❌ 不要忽略日志 - 定期查看系统日志