1. Linux服务器操作命令概述
作为项目部署的基础环境,Linux服务器的高效管理离不开命令行操作。与图形界面相比,命令行工具提供了更直接、更强大的系统控制能力,尤其适合远程服务器管理、自动化脚本编写等场景。对于开发者而言,掌握这些命令就像木匠熟悉自己的工具一样重要。
在实际项目部署过程中,我们经常需要完成以下典型操作:查看系统资源使用情况、管理服务进程、监控网络连接、处理文件权限、排查性能瓶颈等。这些操作如果通过图形界面完成,不仅效率低下,在远程连接时还可能遇到界面卡顿的问题。而命令行工具则能完美解决这些痛点。
提示:建议所有服务器管理员都建立自己的命令备忘录,将常用命令按场景分类整理。随着经验积累,这个清单会成为你最宝贵的工作资产。
2. 系统监控与性能分析命令
2.1 进程管理三剑客
ps命令是查看进程状态的瑞士军刀。我最常用的组合是ps -aux或ps -ef,前者以用户友好的格式显示所有进程,后者则以完整格式列出进程信息。在排查内存泄漏问题时,可以加上--sort=-%mem参数按内存使用排序:
ps -aux --sort=-%mem | head -10这个命令会显示内存占用最高的10个进程,帮助快速定位问题源头。
top命令提供了动态的实时系统监控视图。按1键可以展开显示每个CPU核心的使用情况,这在多核服务器上特别有用。我习惯用-d参数调整刷新间隔(如top -d 2设置为2秒刷新),避免频繁刷新影响问题排查。
htop是top的增强版(需额外安装),提供了彩色显示、鼠标操作和更直观的布局。它最实用的功能是可以用方向键和回车键直接操作进程,比如结束进程或调整优先级。
2.2 内存与CPU监控
free -h命令以人类可读的格式(GB/MB)显示内存使用情况。关键要看available列,它表示系统实际可用的内存量,比free列更准确反映内存状态。
vmstat 1 5命令每隔1秒输出一次系统状态,共输出5次。重点关注以下列:
r:运行队列长度,持续大于CPU核心数说明系统过载us和sy:用户态和内核态CPU使用率wa:IO等待时间,过高说明磁盘是瓶颈
mpstat -P ALL 1命令可以显示每个CPU核心的详细使用情况,在多核服务器上排查CPU负载不均衡问题时特别有用。
2.3 磁盘IO监控
iostat -x 1命令提供详细的磁盘IO统计信息。关键指标包括:
%util:设备利用率,接近100%说明磁盘饱和await:IO平均等待时间,过高说明磁盘响应慢svctm:服务时间,反映磁盘本身性能
iotop(需安装)类似于top,但专门用于监控磁盘IO,可以直观看到哪些进程在大量读写磁盘。
3. 文件与目录操作命令
3.1 基础文件操作
ls -alh是我最常用的文件列表命令组合:
-a显示隐藏文件-l长格式显示详细信息-h人类可读的文件大小
find命令功能强大但语法复杂。一个实用例子是查找最近修改的日志文件:
find /var/log -name "*.log" -mtime -1 -exec ls -lh {} \;这个命令会列出/var/log目录下24小时内修改过的所有.log文件,并显示详细信息。
3.2 文件传输与归档
rsync -avzP是我推荐的文件同步命令:
-a归档模式,保留文件属性-v详细输出-z压缩传输-P显示进度和断点续传
例如将本地目录同步到远程服务器:
rsync -avzP ./project/ user@remote:/path/to/destination/tar命令处理归档文件时,我习惯用以下组合:
tar -czvf archive.tar.gz /path/to/directory # 压缩 tar -xzvf archive.tar.gz -C /extract/path # 解压3.3 权限与属性管理
chmod修改文件权限时,数字模式比符号模式更精确。例如:
chmod 750 script.sh # 所有者:rwx,组:r-x,其他:---chown改变文件所有者时,可以同时修改用户和组:
chown user:group file.txtsetfacl命令设置ACL(访问控制列表),实现更精细的权限控制:
setfacl -m u:testuser:rwx /shared/directory4. 网络管理与服务控制
4.1 网络状态查看
netstat -tulnp显示所有监听端口及相关进程,在排查端口冲突时非常有用。现在更推荐使用ss -tulnp,它来自iproute2套件,速度更快。
lsof -i :80可以查看哪些进程在使用80端口。当遇到"Address already in use"错误时,这个命令能快速定位问题进程。
tcpdump是网络抓包利器,基本用法:
tcpdump -i eth0 -nn 'port 80' -w capture.pcap4.2 防火墙管理
在CentOS/RHEL上,firewall-cmd是管理firewalld的主要工具:
firewall-cmd --zone=public --add-port=8080/tcp --permanent firewall-cmd --reload在Ubuntu上,ufw提供了更简单的接口:
ufw allow 22/tcp ufw enable4.3 服务管理
systemctl是现代Linux系统管理服务的标准工具:
systemctl start nginx # 启动服务 systemctl stop nginx # 停止服务 systemctl restart nginx # 重启服务 systemctl status nginx # 查看状态 systemctl enable nginx # 设置开机启动查看所有已启动的服务:
systemctl list-units --type=service --state=running5. 用户与权限管理
5.1 用户账户操作
创建用户时,推荐使用adduser而非useradd,因为它会交互式地创建主目录和设置密码:
adduser newuser usermod -aG sudo newuser # 授予sudo权限锁定和解锁用户账户:
passwd -l username # 锁定 passwd -u username # 解锁5.2 密码策略设置
修改密码有效期:
chage -M 90 username # 设置密码90天后过期查看密码状态:
chage -l username5.3 sudo权限配置
编辑sudoers文件的安全方式是使用visudo命令。典型的授权配置:
%developers ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx这表示developers组的成员可以无需密码执行nginx服务重启操作。
6. 日志查看与分析
6.1 系统日志查看
journalctl是systemd系统的日志查看工具,强大但复杂。几个实用命令:
journalctl -u nginx -f # 实时查看nginx日志 journalctl --since "1 hour ago" # 查看最近1小时日志 journalctl -p err -b # 本次启动的所有错误日志6.2 文本日志处理
grep是最常用的日志过滤工具。查找错误日志:
grep -i error /var/log/syslogtail -f实时跟踪日志文件变化:
tail -f /var/log/nginx/access.logawk可以提取特定字段。例如统计nginx访问日志的HTTP状态码:
awk '{print $9}' access.log | sort | uniq -c6.3 日志轮转配置
logrotate是管理日志轮转的标准工具。典型配置(/etc/logrotate.d/nginx):
/var/log/nginx/*.log { daily missingok rotate 14 compress delaycompress notifempty create 0640 www-data adm sharedscripts postrotate /usr/bin/systemctl reload nginx >/dev/null 2>&1 || true endscript }7. 实用技巧与高级用法
7.1 命令组合技巧
将多个命令通过管道组合可以实现强大功能。例如找出占用内存最多的5个进程:
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -6统计当前目录下各种类型文件的数量:
find . -type f | awk -F. '{print $NF}' | sort | uniq -c7.2 后台任务管理
nohup和&让命令在后台持续运行:
nohup ./long_running_script.sh > output.log 2>&1 &tmux或screen是更专业的终端复用工具,可以创建持久会话。
7.3 环境变量配置
查看所有环境变量:
printenv设置临时环境变量:
export PATH=$PATH:/new/path永久生效需要写入~/.bashrc或/etc/profile文件。
7.4 定时任务管理
crontab -e编辑当前用户的定时任务。典型格式:
* * * * * command_to_execute | | | | | | | | | +----- 星期几 (0 - 6) (周日=0) | | | +------- 月份 (1 - 12) | | +--------- 日 (1 - 31) | +----------- 小时 (0 - 23) +------------- 分钟 (0 - 59)系统级定时任务放在/etc/cron.*目录下。
8. 安全加固与故障排查
8.1 SSH安全配置
编辑/etc/ssh/sshd_config提高安全性:
PermitRootLogin no PasswordAuthentication no AllowUsers yourusername然后重启SSH服务:
systemctl restart sshd8.2 文件完整性检查
使用md5sum或sha256sum创建校验和:
sha256sum important_file > checksums.sha256 sha256sum -c checksums.sha256 # 验证8.3 系统信息收集
当服务器出现问题时,首先收集以下信息:
uname -a # 内核版本 lsb_release -a # 发行版信息 df -h # 磁盘空间 free -h # 内存使用 uptime # 负载情况 journalctl -b # 本次启动日志8.4 性能瓶颈分析
系统响应慢时,按顺序检查:
uptime看负载free -h看内存iostat -x 1看磁盘IOtop看CPU使用iftop(需安装)看网络流量
9. 自动化与脚本编写
9.1 Shell脚本基础
一个简单的备份脚本示例:
#!/bin/bash # 定义变量 BACKUP_DIR="/backups" DATE=$(date +%Y%m%d) # 创建备份目录 mkdir -p $BACKUP_DIR/$DATE # 执行备份 tar -czf $BACKUP_DIR/$DATE/home_backup.tar.gz /home # 删除7天前的备份 find $BACKUP_DIR -type d -mtime +7 -exec rm -rf {} \;9.2 脚本调试技巧
启用调试模式:
#!/bin/bash -x或者在脚本中插入调试命令:
set -x # 开启调试 command1 command2 set +x # 关闭调试9.3 参数处理
处理命令行参数:
while getopts ":a:b:" opt; do case $opt in a) arg1="$OPTARG" ;; b) arg2="$OPTARG" ;; \?) echo "无效选项: -$OPTARG" >&2 ;; esac done10. 容器化环境下的命令变化
10.1 Docker常用命令
查看运行中的容器:
docker ps查看容器日志:
docker logs -f container_name进入容器shell:
docker exec -it container_name /bin/bash10.2 Kubernetes常用命令
查看pod状态:
kubectl get pods -A查看pod日志:
kubectl logs -f pod_name描述服务详情:
kubectl describe svc service_name10.3 容器与主机调试
从主机查看容器的网络命名空间:
nsenter -t $(docker inspect -f '{{.State.Pid}}' container_name) -n ip a检查容器的cgroup限制:
docker inspect -f '{{.HostConfig.Memory}}' container_name