299 lines
5.4 KiB
Markdown
Executable File
299 lines
5.4 KiB
Markdown
Executable File
---
|
||
title: Linux 系统管理指南
|
||
tags:
|
||
- Linux
|
||
- Shell
|
||
- Bash
|
||
- 系统管理
|
||
- Ubuntu
|
||
created: 2026-04-21
|
||
---
|
||
|
||
# Linux 系统管理指南
|
||
|
||
## 基础命令
|
||
|
||
### 文件与目录
|
||
|
||
```bash
|
||
# 目录操作
|
||
ls -la # 列出所有文件(含隐藏)
|
||
cd /path # 切换目录
|
||
pwd # 显示当前目录
|
||
mkdir -p a/b/c # 递归创建目录
|
||
rm -rf directory # 强制删除目录
|
||
|
||
# 文件操作
|
||
cp file1 file2 # 复制
|
||
mv file1 file2 # 移动/重命名
|
||
rm file # 删除
|
||
touch file # 创建空文件
|
||
|
||
# 查看文件
|
||
cat file # 全文显示
|
||
head -n 20 file # 前20行
|
||
tail -n 50 file # 后50行
|
||
tail -f log # 实时跟踪日志
|
||
less file # 分页查看
|
||
|
||
# 搜索
|
||
grep "pattern" file
|
||
find / -name "*.log"
|
||
locate filename
|
||
```
|
||
|
||
### 用户与权限
|
||
|
||
```bash
|
||
# 用户管理
|
||
sudo useradd -m -s /bin/bash username
|
||
sudo passwd username
|
||
sudo usermod -aG sudo username
|
||
sudo deluser username
|
||
|
||
# 权限
|
||
chmod 755 file # 数字形式
|
||
chmod +x script.sh # 添加执行权限
|
||
chown user:group file # 修改所有者
|
||
|
||
# 权限数字
|
||
# 4 = r, 2 = w, 1 = x
|
||
# 755 = rwxr-xr-x (所有者全部, 其他读+执行)
|
||
# 644 = rw-r--r--
|
||
# 600 = rw-------
|
||
```
|
||
|
||
### 进程管理
|
||
|
||
```bash
|
||
# 查看进程
|
||
ps aux | grep nginx
|
||
top # 实时监控(退出按 q)
|
||
htop # 更友好的 top(需安装)
|
||
|
||
# 管理进程
|
||
kill PID # 温柔终止
|
||
kill -9 PID # 强制终止
|
||
killall nginx # 按名字终止
|
||
|
||
# 后台运行
|
||
nohup command & # 忽略挂断信号后台运行
|
||
command & # 后台运行
|
||
jobs # 查看后台任务
|
||
fg %1 # 调到前台
|
||
```
|
||
|
||
## 软件安装
|
||
|
||
### APT(Debian/Ubuntu)
|
||
|
||
```bash
|
||
# 更新源
|
||
sudo apt update
|
||
sudo apt upgrade
|
||
|
||
# 安装软件
|
||
sudo apt install nginx
|
||
sudo apt install docker.io
|
||
|
||
# 搜索
|
||
apt search nginx
|
||
|
||
# 卸载
|
||
sudo apt remove nginx
|
||
sudo apt autoremove
|
||
```
|
||
|
||
### YUM/DNF(CentOS/RHEL)
|
||
|
||
```bash
|
||
sudo dnf install nginx
|
||
sudo dnf update
|
||
sudo dnf remove nginx
|
||
```
|
||
|
||
### 系统服务(systemd)
|
||
|
||
```bash
|
||
# 管理服务
|
||
sudo systemctl start nginx
|
||
sudo systemctl stop nginx
|
||
sudo systemctl restart nginx
|
||
sudo systemctl status nginx
|
||
sudo systemctl enable nginx # 开机自启
|
||
sudo systemctl disable nginx # 禁用开机自启
|
||
|
||
# 查看服务
|
||
systemctl list-units --type=service --state=running
|
||
```
|
||
|
||
## 网络命令
|
||
|
||
```bash
|
||
# 查看网络
|
||
ip addr show
|
||
ip link set eth0 up/down
|
||
ss -tuln # 查看监听端口
|
||
netstat -tuln
|
||
|
||
# 网络测试
|
||
ping -c 4 google.com
|
||
curl -I https://example.com
|
||
wget https://example.com/file
|
||
|
||
# 端口转发
|
||
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3000
|
||
|
||
# 防火墙
|
||
sudo ufw allow 22 # 开放SSH
|
||
sudo ufw allow 80/tcp # 开放HTTP
|
||
sudo ufw allow 443/tcp # 开放HTTPS
|
||
sudo ufw enable
|
||
sudo ufw status
|
||
```
|
||
|
||
## 磁盘管理
|
||
|
||
```bash
|
||
# 查看磁盘使用
|
||
df -h
|
||
du -sh /var/log/*
|
||
|
||
# 挂载
|
||
sudo mount /dev/sdb1 /mnt/usb
|
||
sudo umount /mnt/usb
|
||
|
||
# 分区
|
||
sudo fdisk /dev/sdb
|
||
# 或使用 parted
|
||
|
||
# 创建文件系统
|
||
sudo mkfs.ext4 /dev/sdb1
|
||
sudo mkfs.xfs /dev/sdb1
|
||
```
|
||
|
||
## Shell 脚本
|
||
|
||
```bash
|
||
#!/bin/bash
|
||
|
||
# 变量
|
||
NAME="World"
|
||
echo "Hello, $NAME!"
|
||
echo "当前目录: $(pwd)"
|
||
|
||
# 条件
|
||
if [ -f "file.txt" ]; then
|
||
echo "文件存在"
|
||
elif [ $age -ge 18 ]; then
|
||
echo "成年"
|
||
else
|
||
echo "未成年"
|
||
fi
|
||
|
||
# 循环
|
||
for file in *.txt; do
|
||
echo "处理: $file"
|
||
done
|
||
|
||
# 函数
|
||
function greet() {
|
||
echo "Hello, $1!"
|
||
}
|
||
greet "张三"
|
||
|
||
# 常用判断
|
||
# -f file 文件存在
|
||
# -d dir 目录存在
|
||
# -z string 字符串为空
|
||
# -n string 字符串非空
|
||
# -eq, -ne 数字相等/不等
|
||
# -lt, -gt 数字小于/大于
|
||
|
||
# 读取输入
|
||
read -p "请输入名称: " name
|
||
echo "你输入了: $name"
|
||
|
||
# 函数返回状态
|
||
function check() {
|
||
if [ $1 -gt 10 ]; then
|
||
return 0 # 成功
|
||
else
|
||
return 1 # 失败
|
||
fi
|
||
}
|
||
```
|
||
|
||
## 日志查看
|
||
|
||
```bash
|
||
# 系统日志
|
||
journalctl -u nginx # 查看nginx服务日志
|
||
journalctl -f # 实时跟踪
|
||
journalctl --since "1 hour ago"
|
||
|
||
# 应用日志
|
||
tail -f /var/log/nginx/access.log
|
||
tail -f /var/log/syslog
|
||
|
||
# 历史命令
|
||
history | grep apt
|
||
```
|
||
|
||
## 常用配置
|
||
|
||
### SSH
|
||
|
||
```bash
|
||
# 生成密钥
|
||
ssh-keygen -t ed25519 -C "your_email@example.com"
|
||
|
||
# 复制公钥到服务器
|
||
ssh-copy-id user@hostname
|
||
|
||
# SSH 配置 (~/.ssh/config)
|
||
Host myserver
|
||
HostName 192.168.1.100
|
||
User ubuntu
|
||
Port 22
|
||
IdentityFile ~/.ssh/id_ed25519
|
||
```
|
||
|
||
### Crontab 定时任务
|
||
|
||
```bash
|
||
# 编辑 crontab
|
||
crontab -e
|
||
|
||
# 格式: 分 时 日 月 周 命令
|
||
# 示例:
|
||
# 0 9 * * 1-5 # 每周一到周五9点
|
||
# */15 * * * * # 每15分钟
|
||
# 0 2 * * * # 每天凌晨2点
|
||
# @reboot # 开机运行
|
||
```
|
||
|
||
## Docker(Linux)
|
||
|
||
```bash
|
||
# 安装 Docker
|
||
curl -fsSL https://get.docker.com | sudo sh
|
||
sudo usermod -aG docker $USER
|
||
|
||
# Docker Compose
|
||
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" \
|
||
-o /usr/local/bin/docker-compose
|
||
sudo chmod +x /usr/local/bin/docker-compose
|
||
```
|
||
|
||
## 故障排查
|
||
|
||
| 问题 | 命令 |
|
||
|------|------|
|
||
| 端口占用 | `lsof -i :8080` 或 `ss -tulpn \| grep 8080` |
|
||
| 磁盘满 | `df -h` + `du -sh /*` |
|
||
| 内存满 | `free -h` + `top` |
|
||
| CPU 高 | `top` 或 `htop` |
|
||
| 服务起不来 | `systemctl status xxx` + `journalctl -u xxx` |
|
||
| 网络不通 | `ping 8.8.8.8` + `curl -I url` |
|