系统管理
本章介绍 Linux 系统管理相关的内容,包括服务管理、日志查看、用户管理等。
服务管理
systemctl (Systemd)
Systemd 是现代 Linux 发行版的标准初始化系统和服务管理器。
服务管理
# 启动服务
systemctl start nginx
# 停止服务
systemctl stop nginx
# 重启服务
systemctl restart nginx
# 重新加载配置
systemctl reload nginx
# 查看服务状态
systemctl status nginx
# 开机自启
systemctl enable nginx
# 禁用开机自启
systemctl disable nginx
# 查看是否开机自启
systemctl is-enabled nginx
查看服务
# 列出所有服务
systemctl list-units --type=service
# 列出正在运行的服务
systemctl list-units --type=service --state=running
# 列出所有已安装的服务
systemctl list-unit-files --type=service
# 查看服务详情
systemctl show nginx
系统管理
# 重启系统
systemctl reboot
# 关机
systemctl poweroff
# 挂起
systemctl suspend
# 休眠
systemctl hibernate
service (传统方式)
旧版本的 Linux 使用 service 命令:
# 启动服务
service nginx start
# 停止服务
service nginx stop
# 重启服务
service nginx restart
# 查看状态
service nginx status
日志管理
journalctl
journalctl 是 Systemd 的日志查看工具:
# 查看所有日志
journalctl
# 查看最新的日志
journalctl -n 100
# 实时查看日志
journalctl -f
# 查看特定服务的日志
journalctl -u nginx
# 查看特定时间的日志
journalctl --since "2024-01-01"
journalctl --since "2024-01-01 10:00:00"
journalctl --until "2024-01-02"
journalctl --since yesterday
journalctl --since "1 hour ago"
# 查看内核日志
journalctl -k
# 按优先级过滤
journalctl -p err # 错误级别
journalctl -p warning # 警告级别
# 显示日志来源
journalctl -o verbose
日志文件
传统日志文件存放在 /var/log/ 目录:
# 系统日志
/var/log/syslog # Ubuntu/Debian
/var/log/messages # CentOS/RHEL
# 认证日志
/var/log/auth.log # Ubuntu/Debian
/var/log/secure # CentOS/RHEL
# 其他常用日志
/var/log/kern.log # 内核日志
/var/log/dmesg # 启动日志
/var/log/cron # 定时任务日志
/var/log/mail.log # 邮件日志
查看日志文件
# 查看日志
cat /var/log/syslog
# 查看最近的日志
tail -f /var/log/syslog
# 搜索日志
grep "error" /var/log/syslog
# 查看登录记录
last
lastb # 失败的登录
# 查看当前登录用户
w
who
日志轮转
logrotate 自动管理日志文件大小:
# 配置文件
/etc/logrotate.conf
/etc/logrotate.d/
# 手动执行
logrotate -f /etc/logrotate.conf
# 测试配置
logrotate -d /etc/logrotate.conf
用户管理
用户操作
# 添加用户
useradd username
# 添加用户并创建主目录
useradd -m username
# 设置密码
passwd username
# 删除用户
userdel username
# 删除用户及其主目录
userdel -r username
# 修改用户
usermod -l newname oldname # 修改用户名
usermod -d /new/home username # 修改主目录
usermod -s /bin/bash username # 修改默认 shell
usermod -aG group username # 添加到附加组
用户信息查看
# 查看用户信息
id username
# 查看用户所属组
groups username
# 查看所有用户
cat /etc/passwd
# 查看当前用户
whoami
# 查看用户登录历史
last username
组管理
# 创建组
groupadd groupname
# 删除组
groupdel groupname
# 修改组名
groupmod -n newname oldname
# 查看所有组
cat /etc/group
# 添加用户到组
gpasswd -a username groupname
# 从组中移除用户
gpasswd -d username groupname
sudo 权限管理
# 添加用户到 sudo 组(Ubuntu/Debian)
usermod -aG sudo username
# 添加用户到 wheel 组(CentOS/RHEL)
usermod -aG wheel username
# 编辑 sudoers 文件
visudo
# sudoers 配置示例
username ALL=(ALL:ALL) ALL # 完全权限
username ALL=(ALL) NOPASSWD: ALL # 无需密码
磁盘管理
磁盘信息
# 查看磁盘使用情况
df -h
# 查看目录大小
du -sh /path/to/dir
# 查看目录下各子目录大小
du -h --max-depth=1 /path/to/dir
# 查看磁盘分区
fdisk -l
# 查看 block 设备
lsblk
# 查看磁盘 UUID
blkid
磁盘分区
# 分区工具
fdisk /dev/sda
# 常用 fdisk 命令
# p - 打印分区表
# n - 新建分区
# d - 删除分区
# w - 保存并退出
# q - 不保存退出
文件系统
# 格式化分区
mkfs.ext4 /dev/sda1
mkfs.xfs /dev/sda1
# 挂载分区
mount /dev/sda1 /mnt
# 卸载分区
umount /mnt
# 查看挂载信息
mount
findmnt
# 开机自动挂载(编辑 /etc/fstab)
/dev/sda1 /mnt ext4 defaults 0 2
LVM 逻辑卷
# 创建物理卷
pvcreate /dev/sda1
# 创建卷组
vgcreate vg01 /dev/sda1
# 创建逻辑卷
lvcreate -L 10G -n lv01 vg01
# 扩展逻辑卷
lvextend -L +5G /dev/vg01/lv01
# 扩展文件系统
resize2fs /dev/vg01/lv01 # ext4
xfs_growfs /mount/point # xfs
系统监控
top 和 htop
# 动态查看进程
top
# htop(增强版,需要安装)
htop
# top 快捷键
# P - 按 CPU 排序
# M - 按内存排序
# T - 按时间排序
# q - 退出
free - 内存查看
# 查看内存使用
free -h
# 持续显示
free -s 1
vmstat - 系统统计
# 查看系统统计
vmstat
# 持续监控
vmstat 1 5 # 每秒显示,共 5 次
iostat - IO 统计
# 查看 IO 统计
iostat
# 持续监控
iostat -x 1
uptime - 系统运行时间
# 查看系统运行时间和负载
uptime
系统信息
# 查看内核版本
uname -r
uname -a
# 查看系统版本
cat /etc/os-release
# 查看 CPU 信息
lscpu
cat /proc/cpuinfo
# 查看内存信息
cat /proc/meminfo
定时任务
crontab
# 编辑当前用户的定时任务
crontab -e
# 查看定时任务
crontab -l
# 删除定时任务
crontab -r
# 编辑指定用户的定时任务
crontab -u username -e
cron 表达式
* * * * * command
┬ ┬ ┬ ┬ ┬
│ │ │ │ └───── 星期几 (0-7, 0 和 7 都表示周日)
│ │ │ └────────── 月份 (1-12)
│ │ └─────────────── 日期 (1-31)
│ └──────────────────── 小时 (0-23)
└───────────────────────── 分钟 (0-59)
常用示例
# 每分钟执行
* * * * * /path/to/command
# 每小时执行
0 * * * * /path/to/command
# 每天凌晨 2 点执行
0 2 * * * /path/to/command
# 每周一凌晨 3 点执行
0 3 * * 1 /path/to/command
# 每月 1 号凌晨执行
0 0 1 * * /path/to/command
# 每 5 分钟执行
*/5 * * * * /path/to/command
# 每小时第 0 分和第 30 分执行
0,30 * * * * /path/to/command
# 工作日每天早上 9 点执行
0 9 * * 1-5 /path/to/command
at - 一次性任务
# 在指定时间执行
at 10:00
at> /path/to/command
at> Ctrl+D
# 在指定日期时间执行
at 10:00 2024-12-25
# 查看待执行任务
atq
# 删除任务
atrm job_number
系统备份
tar 归档
# 创建归档
tar -cvf archive.tar /path/to/dir
# 创建压缩归档
tar -czvf archive.tar.gz /path/to/dir
tar -cjvf archive.tar.bz2 /path/to/dir
# 解压归档
tar -xvf archive.tar
tar -xzvf archive.tar.gz
# 解压到指定目录
tar -xzvf archive.tar.gz -C /target/path
# 查看归档内容
tar -tvf archive.tar
rsync 备份
# 本地备份
rsync -avz /source/ /backup/
# 远程备份
rsync -avz /source/ user@backup-server:/backup/
# 增量备份
rsync -avz --backup --backup-dir=/backup/incremental /source/ /backup/current/
# 定时备份(配合 cron)
0 2 * * * rsync -avz /important/data/ /backup/daily/
环境变量
查看和设置
# 查看所有环境变量
env
printenv
# 查看特定变量
echo $PATH
echo $HOME
# 设置临时变量
export MY_VAR="value"
# 设置永久变量(写入配置文件)
echo 'export MY_VAR="value"' >> ~/.bashrc
source ~/.bashrc
配置文件
# 系统级
/etc/environment # 系统环境变量
/etc/profile # 登录时执行
/etc/bash.bashrc # 非登录 shell 执行
# 用户级
~/.profile # 登录时执行
~/.bashrc # 非登录 shell 执行
~/.bash_profile # 用户登录时执行
小结
本章我们学习了:
- 服务管理:systemctl 管理系统服务
- 日志管理:journalctl 和日志文件查看
- 用户管理:用户和组的创建、修改、删除
- 磁盘管理:分区、格式化、挂载
- 系统监控:top、free、vmstat 等工具
- 定时任务:crontab 和 at
- 系统备份:tar 和 rsync
- 环境变量:查看和配置
练习
- 创建一个新用户并赋予 sudo 权限
- 配置一个每天凌晨执行的定时备份任务
- 查看系统日志找出最近的错误信息
- 使用 tar 创建一个压缩备份并恢复