Linux是目前最流行的服务器操作系统,几乎所有的互联网公司都在使用Linux。作为程序员,掌握Linux系统管理是必备技能。今天就来分享Linux系统管理的实战知识,包括进程管理、服务管理、性能监控、日志分析等内容。
进程管理
进程是程序运行时的实例,是系统资源分配的基本单位。管理进程是Linux系统管理的核心内容之一。
1. 查看进程:
# 查看当前终端的进程
ps
# 查看所有进程(BSD风格)
ps aux
# 查看所有进程(标准风格)
ps -ef
# 查看进程树
pstree
# 实时查看进程(类似Windows任务管理器)
top
# 更友好的top(需要安装)
htop
# 查看指定用户的进程
ps -u username
# 查看指定命令的进程
ps -C nginx
# 查看进程的详细信息
ps -p PID -o pid,ppid,user,stat,%cpu,%mem,cmdps aux输出字段说明:
USER:进程所属用户PID:进程ID%CPU:CPU使用率%MEM:内存使用率VSZ:虚拟内存大小(KB)RSS:物理内存大小(KB)TTY:进程所在终端STAT:进程状态(R运行、S睡眠、D不可中断睡眠、Z僵尸、T停止)START:进程启动时间TIME:进程占用CPU时间COMMAND:启动进程的命令
2. 终止进程:
# 终止指定PID的进程(发送TERM信号,优雅终止)
kill PID
# 强制终止进程(发送KILL信号,立即终止)
kill -9 PID
# 终止指定名称的进程
killall nginx
# 强制终止指定名称的进程
killall -9 nginx
# 根据模式终止进程
pkill -f "php-fpm"
# 查看可用信号
kill -l常用信号:
1 (HUP):挂起,通常用于让进程重新加载配置2 (INT):中断,相当于Ctrl+C9 (KILL):强制终止,不可被捕获或忽略15 (TERM):终止,默认信号,进程可以优雅退出18 (CONT):继续被停止的进程19 (STOP):停止进程,不可被捕获或忽略
3. 进程优先级:
# 查看进程优先级(NI列)
ps -l
# 以指定优先级启动进程(nice值范围-20到19,值越小优先级越高)
nice -n 10 command
# 修改已运行进程的优先级
renice -n 5 -p PID
# 修改指定用户所有进程的优先级
renice -n 5 -u username4. 后台运行和作业控制:
# 后台运行进程
command &
# 查看后台作业
jobs
# 将后台作业放到前台
fg %1
# 将前台作业放到后台(先按Ctrl+Z暂停,再用bg)
bg %1
# 终止后台作业
kill %1
# 不挂断地运行命令(退出终端后进程继续运行)
nohup command &
# 更强大的终端复用工具(需要安装)
screen
tmux服务管理
服务是在后台运行的进程,通常在系统启动时自动启动,提供各种网络服务(如Web服务、数据库服务等)。
1. systemd服务管理(CentOS 7+/Ubuntu 16.04+): systemd是目前主流的系统和服务管理器,替代了传统的SysV init。
# 启动服务
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 is-active nginx
# 查看所有已启动的服务
systemctl list-units --type=service
# 查看所有服务(包括未启动的)
systemctl list-unit-files --type=service
# 查看服务的依赖关系
systemctl list-dependencies nginx
# 查看服务日志
journalctl -u nginx
# 实时查看服务日志
journalctl -u nginx -f
# 查看系统启动耗时
systemd-analyze
# 查看各服务启动耗时
systemd-analyze blame2. service命令(兼容SysV init):
# 启动服务
service nginx start
# 停止服务
service nginx stop
# 重启服务
service nginx restart
# 重新加载配置
service nginx reload
# 查看服务状态
service nginx status
# 查看所有服务状态
service --status-all3. chkconfig(CentOS 6及以前):
# 查看服务开机自启状态
chkconfig --list
# 设置服务开机自启
chkconfig nginx on
# 取消服务开机自启
chkconfig nginx off
# 设置服务在指定运行级别开机自启
chkconfig --level 35 nginx on4. update-rc.d(Debian/Ubuntu):
# 设置服务开机自启
update-rc.d nginx defaults
# 取消服务开机自启
update-rc.d -f nginx remove5. 自定义systemd服务: 创建服务文件 /etc/systemd/system/myapp.service:
[Unit]
Description=My Application
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/myapp
ExecStart=/usr/bin/php /var/www/myapp/server.php
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target然后启用和启动服务:
# 重新加载systemd配置
systemctl daemon-reload
# 设置开机自启
systemctl enable myapp
# 启动服务
systemctl start myapp
# 查看服务状态
systemctl status myapp性能监控
性能监控是Linux系统管理的重要内容,通过监控可以了解系统的运行状态,发现性能瓶颈,及时处理问题。
1. CPU监控:
# 实时查看CPU使用情况
top
# 更友好的top
htop
# 查看CPU信息
cat /proc/cpuinfo
# 查看CPU核心数
nproc
# 查看系统负载(1分钟、5分钟、15分钟平均负载)
uptime
# 查看CPU使用情况统计(每秒刷新,共5次)
vmstat 1 5
# 查看每个CPU核心的使用情况
mpstat -P ALL 1
# 查看进程CPU使用排名
ps aux --sort=-%cpu | head负载(Load Average)说明:
- 负载表示系统中正在运行和等待CPU的进程数
- 对于单核CPU,负载1.0表示CPU满负荷
- 对于多核CPU,负载等于核心数表示满负荷
- 一般来说,负载持续超过核心数的70%就需要关注
2. 内存监控:
# 查看内存使用情况
free -h
# 查看内存详细信息
cat /proc/meminfo
# 实时查看内存使用
top
htop
# 查看虚拟内存统计
vmstat 1 5
# 查看进程内存使用排名
ps aux --sort=-%mem | head
# 查看指定进程的内存使用
pmap -d PID
# 查看内存使用情况(更详细)
smemfree输出字段说明:
total:总内存used:已使用内存free:空闲内存shared:共享内存buff/cache:缓冲区和缓存(Linux会用空闲内存做缓存,提高性能,这部分内存可以被回收)available:可用内存(包括可回收的缓存)
3. 磁盘监控:
# 查看磁盘使用情况
df -h
# 查看inode使用情况
df -i
# 查看目录大小
du -sh /path/to/directory
# 查看当前目录下各子目录大小
du -sh */
# 查看磁盘IO统计
iostat -x 1
# 查看进程IO使用
iotop
# 查看磁盘挂载情况
mount
# 查看磁盘分区情况
fdisk -l
lsblk
# 查看文件系统类型
df -T
# 检查和修复文件系统
fsck /dev/sda14. 网络监控:
# 查看网络接口信息
ifconfig
ip addr
# 查看网络接口统计
netstat -i
ip -s link
# 查看网络连接
netstat -tunlp
# 查看TCP连接状态统计
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
# 查看监听端口
ss -tunlp
# 实时查看网络流量
iftop
# 查看进程网络使用
nethogs
# 查看网络路由
route -n
ip route
# 测试网络连通性
ping baidu.com
# 测试端口连通性
telnet baidu.com 80
nc -zv baidu.com 80
# 查看DNS解析
nslookup baidu.com
dig baidu.com
# 查看网络请求路径
traceroute baidu.com
# 下载测试
wget -O /dev/null http://speedtest.tele2.net/10MB.zip
curl -o /dev/null http://speedtest.tele2.net/10MB.zip5. 系统整体监控:
# 查看系统信息
uname -a
# 查看系统版本
cat /etc/os-release
# 查看系统运行时间
uptime
# 查看系统负载
w
# 查看登录用户
who
# 查看用户登录历史
last
# 查看系统资源使用(综合)
vmstat 1 5
# 查看系统性能(综合,需要安装)
dstat
# 查看系统启动信息
dmesg
# 查看系统日志
journalctl
# 实时查看系统日志
journalctl -f日志分析
日志是排查问题的重要依据,Linux系统和各种服务都会生成日志。
1. 系统日志:
# 查看系统日志(systemd系统)
journalctl
# 查看最近的系统日志
journalctl -n 100
# 实时查看系统日志
journalctl -f
# 查看指定服务的日志
journalctl -u nginx
# 查看指定时间的日志
journalctl --since "2016-04-01" --until "2016-04-10"
# 查看内核日志
dmesg
# 查看传统系统日志(SysV系统)
cat /var/log/messages
cat /var/log/syslog
# 查看认证日志
cat /var/log/secure
cat /var/log/auth.log
# 查看系统启动日志
cat /var/log/boot.log2. 常用日志查看命令:
# 查看文件内容
cat /var/log/nginx/access.log
# 分页查看
less /var/log/nginx/access.log
# 查看文件末尾(默认10行)
tail /var/log/nginx/access.log
# 查看文件末尾指定行数
tail -n 100 /var/log/nginx/access.log
# 实时查看文件末尾
tail -f /var/log/nginx/access.log
# 查看文件开头
head /var/log/nginx/access.log
# 搜索文件内容
grep "error" /var/log/nginx/error.log
# 搜索时忽略大小写
grep -i "error" /var/log/nginx/error.log
# 显示匹配行的行号
grep -n "error" /var/log/nginx/error.log
# 显示匹配行的前后几行
grep -C 5 "error" /var/log/nginx/error.log
# 统计匹配行数
grep -c "error" /var/log/nginx/error.log
# 反向匹配(显示不包含的行)
grep -v "200" /var/log/nginx/access.log
# 多文件搜索
grep "error" /var/log/nginx/*.log
# 递归搜索目录
grep -r "error" /var/log/
# 组合使用(搜索错误并实时查看)
tail -f /var/log/nginx/error.log | grep "error"
# 日志统计(统计访问量前10的IP)
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
# 统计访问量前10的URL
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
# 统计HTTP状态码
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn3. 日志轮转: 日志文件会越来越大,需要定期轮转和清理。logrotate是Linux系统常用的日志轮转工具。
配置文件 /etc/logrotate.conf 和 /etc/logrotate.d/ 目录下的文件。
示例配置 /etc/logrotate.d/nginx:
/var/log/nginx/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}配置说明:
daily:每天轮转weekly:每周轮转monthly:每月轮转rotate 30:保留30个轮转文件compress:压缩轮转文件delaycompress:延迟压缩(下一次轮转时压缩)missingok:日志文件不存在不报错notifempty:空文件不轮转create:创建新日志文件的权限和所有者postrotate:轮转后执行的脚本
系统安全
1. 用户和权限管理:
# 查看当前用户
whoami
# 查看用户信息
id
# 切换用户
su - username
# 以管理员身份执行命令
sudo command
# 创建用户
useradd username
# 创建用户并指定家目录和shell
useradd -m -s /bin/bash username
# 设置用户密码
passwd username
# 删除用户
userdel username
# 删除用户并删除家目录
userdel -r username
# 修改用户信息
usermod -aG groupname username
# 查看用户组
groups
# 创建用户组
groupadd groupname
# 删除用户组
groupdel groupname
# 修改文件所有者
chown username:groupname file
# 递归修改目录所有者
chown -R username:groupname directory
# 修改文件权限
chmod 755 file
# 递归修改目录权限
chmod -R 755 directory
# 查看文件权限
ls -l2. SSH安全:
# SSH配置文件
/etc/ssh/sshd_config
# 常用安全配置:
# 修改SSH端口(避免被扫描)
Port 2222
# 禁止root登录
PermitRootLogin no
# 禁止密码登录(使用密钥登录)
PasswordAuthentication no
# 允许的用户
AllowUsers username
# 重启SSH服务
systemctl restart sshd3. 防火墙:
# firewalld(CentOS 7+)
# 查看防火墙状态
systemctl status firewalld
# 启动防火墙
systemctl start firewalld
# 设置开机自启
systemctl enable firewalld
# 查看开放的端口
firewall-cmd --list-ports
# 开放端口
firewall-cmd --permanent --add-port=80/tcp
# 移除端口
firewall-cmd --permanent --remove-port=80/tcp
# 重新加载配置
firewall-cmd --reload
# iptables(通用)
# 查看规则
iptables -L -n
# 开放端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 保存规则
service iptables save
# ufw(Ubuntu)
# 查看状态
ufw status
# 启用防火墙
ufw enable
# 开放端口
ufw allow 80/tcp
# 关闭端口
ufw delete allow 80/tcp实战经验和最佳实践
1. 定期更新系统:
# CentOS
yum update
# Ubuntu/Debian
apt-get update && apt-get upgrade2. 监控系统状态:
- 使用监控工具(如Zabbix、Prometheus、Grafana)监控系统状态
- 设置告警,及时发现和处理问题
- 定期查看系统日志,发现潜在问题
3. 定期备份:
- 定期备份重要数据和配置文件
- 使用rsync、tar等工具备份
- 备份文件要存放在不同的位置,最好异地备份
- 定期测试备份的可用性
4. 性能优化:
- 根据应用特点调整系统参数(如文件描述符、网络参数等)
- 使用缓存(如Redis、Memcached)提高性能
- 优化数据库配置和查询
- 使用CDN加速静态资源
5. 安全加固:
- 及时更新系统和软件,修复安全漏洞
- 配置防火墙,只开放必要的端口
- 使用强密码,定期更换密码
- 禁止root远程登录,使用密钥登录
- 定期检查系统日志,发现异常登录和攻击
- 安装防病毒软件(如ClamAV)
总结
Linux系统管理是程序员的必备技能,掌握进程管理、服务管理、性能监控、日志分析、系统安全等知识,能让我们更好地管理和维护服务器,保障系统的稳定运行。
本文介绍了Linux系统管理的实战知识,包括进程管理(查看、终止、优先级、作业控制)、服务管理(systemd、service、自定义服务)、性能监控(CPU、内存、磁盘、网络、系统整体)、日志分析(系统日志、常用命令、日志轮转)、系统安全(用户权限、SSH安全、防火墙)以及实战经验和最佳实践。
Linux系统管理是一个需要不断学习和实践的领域,本文只是入门,还有很多高级知识等待我们去探索。希望这篇文章能帮助大家更好地使用和管理Linux系统,让服务器更加稳定、高效、安全。
评论(0)
暂无评论,快来抢沙发~
评论功能仅对会员开放,请先登录
登录