Skip to content

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) = 4
  • w (write) = 2
  • x (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                 # 现代版 netstat

4. 用户和权限

用户管理:

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
done

2. 脚本示例

备份脚本:

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 -c

3. 性能优化

系统参数优化:

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 sshd

SSH 密钥认证:

bash
# 生成密钥对
ssh-keygen -t rsa -b 4096

# 复制公钥到服务器
ssh-copy-id user@server

# 使用密钥登录
ssh -i ~/.ssh/id_rsa user@server

2. 防火墙配置

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 --reload

ufw (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 status

3. 安全加固

禁用不必要的服务:

bash
systemctl disable service    # 禁用服务
systemctl stop service       # 停止服务

定期更新:

bash
# Ubuntu/Debian
sudo apt update
sudo apt upgrade

# CentOS/RHEL
sudo yum update
# 或
sudo dnf update

SELinux(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 -h

Q3: 如何查看进程占用的端口?

bash
# 方法 1
netstat -tulpn | grep :80

# 方法 2(推荐)
ss -tulpn | grep :80

# 方法 3
lsof -i :80

Q4: 如何实现 Linux 服务开机自启?

systemd:

bash
systemctl enable service

传统方式(已废弃):

bash
chkconfig service on    # CentOS 6
update-rc.d service defaults    # Debian/Ubuntu

Q5: 如何实现 Linux 负载均衡?

方案:

  1. Nginx - 反向代理和负载均衡
  2. HAProxy - 专业的负载均衡器
  3. LVS (Linux Virtual Server) - 内核级负载均衡
  4. Keepalived - 实现高可用

八、最佳实践

  1. 定期更新 - 安装安全补丁
  2. 最小权限 - 使用普通用户运行服务
  3. 启用防火墙 - 只开放必要端口
  4. SSH 安全 - 使用密钥认证,禁用 root 登录
  5. 监控系统 - 监控资源使用和日志
  6. 备份数据 - 定期备份重要数据
  7. 日志管理 - 配置日志轮转
  8. 文档记录 - 记录配置和变更
  9. 不要使用 root - 避免使用 root 用户
  10. 不要忽略日志 - 定期查看系统日志

基于 VitePress 构建 | Copyright © 2026-present