Linux 开发与运维命令终极手册
封面与使用说明
适用人群:PHP开发者、后端工程师、运维人员
核心价值:从日常开发到应急调试的全场景命令参考,兼顾效率与安全
使用方法:按「场景速查」快速定位,按「功能分类」系统学习,注意「安全警告」规避风险
一、场景速查索引(紧急情况优先看)
问题场景 | 核心命令链 | 功能分类 |
---|---|---|
网站突然卡顿/502错误 | top (看CPU/内存)→ ss -s (连接数)→ systemctl status php-fpm (服务状态) | 五、一 |
... | ... | ... |
二、系统基础与环境监控
系统信息
uname
:查看系统信息uname -a # 完整信息 uname -r # 内核版本(确认Docker/Kernel兼容性)
lsb_release
:发行版信息lsb_release -a # 所有信息 lsb_release -c # 版本代号(适配apt/yum源)
磁盘与存储
df
:磁盘空间df -h # 人类可读格式 df -i # inode使用情况(紧急清理时,满需删除大量小文件)
du
:目录大小分析du -sh * # 当前目录各项目大小 du -h --max-depth=1 /var # 一级目录分析 du -sh * \| sort -hr # 从大到小排列
内存与负载
free
:内存监控free -h # 易读格式 free -m # MB单位 watch -n 5 "free -h" # 每5秒刷新(内存泄漏排查)
uptime
:系统负载uptime # 显示1/5/15分钟平均负载(负载>CPU核心数时需排查进程)
高级监控
iostat
:磁盘IO监控iostat -x 5 # 每5秒显示IO详情(%util接近100%表示IO饱和)
which/whereis
:命令路径查找which php # 检查php路径 whereis mysql # 查找mysql(区分系统自带与手动安装的程序)
三、文件与目录操作
基本操作
ls
:列出内容ls -lh # 详细+大小 ls -lt # 按修改时间排序 # 现代替代:exa -l --git(带Git状态和颜色)
cd
:切换目录cd ~ # 家目录 cd - # 返回上一目录 # 技巧:cd .. 可简写为 ..(需配置bash)
mkdir
:创建目录mkdir -p app/{ctrl,model,view} # 递归创建多级目录(一次性创建项目结构)
文件操作
rm
:删除文件 ⚠️极度危险rm file.txt # 删除文件 rm -rf dir/ # 递归强制删除目录 # ⚠️ 安全准则: # 1. 禁止执行 rm -rf / 或 rm -rf /* # 2. 删前先用 ls 确认路径:ls dir/ # 3. 替代方案:trash-put file(移到回收站,需安装trash-cli)
cp
:复制文件cp -a src/ dest/ # 保留权限复制 cp config.php{,.bak} # 备份(生成config.php.bak) cp *.conf{,.bak} # 批量备份(给所有conf文件加备份后缀)
高级文件操作
find
:查找文件find ./ -name "*.php" -mtime -1 # 1天内修改的PHP文件 find ./ -name "*.log" -mtime +30 -print0 | xargs -0 rm -f # 安全批量处理(处理含空格的文件名)
ln
:创建链接ln -s /usr/local/php/bin/php /usr/bin/php # 创建软链接(解决命令路径问题)
rsync
:增量同步rsync -avz --delete ./local/ user@server:/remote/ # 镜像同步(部署代码比scp快)
四、文件内容处理
查看内容
cat
:查看文件内容cat config.php # 查看文件 # 现代替代:bat config.php(代码高亮+行号)
tail
:查看尾部tail -f error.log # 实时监控 tail -n 50 access.log # 最后50行 tail -F error.log # 日志轮转必备(文件重建后仍跟踪)
文本处理
grep
:文本搜索grep -rni "数据库" ./app # 递归+行号+忽略大小写搜索 find ./ -name "*.php" | xargs grep "function getUser" # 结合find搜索
sed
:文本替换sed -i 's/old/new/g' file.php # 批量替换 sed -i '/^#/d' nginx.conf # 删除注释行 sed -i 's/debug=true/debug=false/g' *.php # 批量修改配置
awk
:按列处理awk '$9==500 {print $0}' access.log # 筛选500错误 # 统计分析黄金链: awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10 # Top 10访问IP
wc
:统计行数wc -l *.php # 统计PHP文件行数 grep "error" log.txt | wc -l # 错误数统计 find ./ -name "*.php" | xargs wc -l # 快速估算代码量
五、进程与服务管理
进程监控
ps
:查看进程ps aux --sort=-%cpu # 按CPU排序 ps aux | grep -v grep | grep php-fpm # 筛选特定进程
top/htop
:实时监控top # 基础监控 htop # 交互式增强版(支持鼠标操作) # 技巧:按P(CPU)/M(内存)排序,k键终止进程
kill
:终止进程kill 1234 # 正常终止 kill -9 1234 # 强制终止 pkill -f "php server.php" # 按命令名批量终止
服务管理
systemctl
:服务管理systemctl restart nginx # 重启服务 systemctl enable mysql # 开机自启 systemctl status php-fpm -l # 查看状态及完整日志(启动失败排查)
网络与调试
netstat/ss
:网络连接ss -lntup # 监听的端口及进程 ss -ant | grep :80 | wc -l # 统计80端口连接数
lsof
:文件占用lsof -i :80 # 查看80端口占用 lsof -p 1234 # 查看进程打开的文件 lsof +D /var/www # 查看目录相关进程(解决"文件被占用无法删除")
strace
:系统调用跟踪strace -p 1234 # 调试卡死进程(定位程序卡住原因)
六、网络操作
网络诊断
ping
:连通性测试ping -c 4 google.com # 发送4个包 # 现代替代:mtr google.com(持续跟踪丢包和延迟)
curl
:HTTP请求curl -X POST -d "name=test" http://api.com # POST请求 curl -I https://example.com # 仅获取头部 curl -v https://example.com # 详细输出(显示HTTPS握手过程)
文件传输
wget
:文件下载wget -c https://file.com/big.tar.gz # 断点续传 wget -i url_list.txt # 批量下载(从文件读URL)
ssh
:远程登录ssh -p 2222 user@server.com # 指定端口登录 ssh user@server "command" # 远程执行命令 ssh-copy-id user@server # 免密登录(上传公钥)
scp
:远程传输scp -r dir/ user@server:/path/ # 递归上传目录 # 大文件传输技巧:pv file.tar.gz | ssh user@server "cat > file.tar.gz"(显示进度)
nc
:网络调试nc -zv 192.168.1.1 3306 # 测试MySQL端口连通性 # 临时文件传输: # 接收端:nc -l 8080 > recv.txt # 发送端:nc server 8080 < send.txt
七、MySQL数据库
基本操作
mysql
:登录数据库mysql -u root -p # 本地登录 mysql -h 10.0.0.5 -P 3307 -u user -p dbname # 远程连接 # 安全提示:生产环境禁止用root直接登录,创建专用用户
mysqldump
:备份数据库mysqldump -u root -p --single-transaction blog > blog.sql # 热备份(避免锁表)
管理操作
mysqladmin
:数据库管理mysqladmin -u root -p processlist # 查看连接进程 mysqladmin -u root -p kill 123 # 杀死进程ID 123(终止慢查询)
数据导入:恢复备份
mysql -u root -p blog < blog.sql # ⚠️ 警告:导入前确认目标库正确,避免覆盖生产数据
日志查看:调试问题
tail -f /var/log/mysql/error.log # 实时错误日志 # 技巧:开启慢查询日志(临时生效): set global slow_query_log=1
八、Docker容器管理
镜像管理
镜像操作:
docker pull php:7.4-fpm # 拉取镜像 docker build -t myphp:v1 . # 构建镜像 docker image prune -a # 清理无用镜像
容器管理
容器操作:
docker run -d -p 80:80 --name mynginx nginx # 后台运行容器 docker ps -a # 查看所有容器 docker exec -it myphp bash # 进入容器交互终端
数据与网络
数据卷:持久化存储
docker volume create phpdata # 创建数据卷 docker run -v phpdata:/var/www/html php:7.4-fpm # 使用数据卷 # 备注:避免用 -v /host/path:/container/path(权限问题多),优先用数据卷
网络管理:容器通信
docker network create mynet # 创建网络 docker run --network mynet --name db mysql # 容器加入网络 # 技巧:自定义网络避免端口冲突,容器间用名称通信(如mysql://db:3306)
九、Swoole扩展
安装与验证
安装Swoole:
pecl install swoole # 安装最新版 pecl install swoole-4.8.12 # 安装指定版本(稳定版) echo "extension=swoole.so" >> php.ini # 启用扩展
验证安装:
php -m | grep swoole # 检查是否加载 php --ri swoole # 查看扩展信息(确认enable_coroutine等关键特性)
服务管理
服务管理:
php server.php start # 启动服务 php server.php reload # 平滑重启(不中断连接,适合生产环境)
进程监控:
ps aux | grep server.php # 查看进程 netstat -tulpn | grep 9501 # 查看端口监听 # 备注:配置daemonize=1后台运行,通过ps确认进程数是否符合预期
十、编程工具与环境
开发工具
php
:PHP解释器php -l file.php # 语法检查 php -S 0.0.0.0:8000 -t public # 启动内置服务器 php -d display_errors=On index.php # 临时调整配置(显示错误)
composer
:依赖管理composer install --no-dev # 生产环境安装 composer dump-autoload -o # 优化自动加载 # 加速下载:切换国内镜像 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
git
:版本控制git stash # 暂存修改 git bisect start # 二分查找bug git log -S "function_name" # 搜索历史提交(查找引入函数的提交)
现代工具
jq
:JSON处理curl api.com | jq '.data[].name' # 提取数据 jq '.users[] | select(.age>18)' data.json # 条件筛选 cat messy.json | jq . # 格式化JSON
ag
:代码搜索ag "function_name" app/ # 快速搜索 ag -G "*.php" "database" # 指定文件类型搜索 # 备注:比grep -r快10倍,自动忽略.git和vendor目录
十一、压缩与归档
压缩解压
tar
:打包/压缩tar -zcvf backup.tar.gz --exclude=vendor ./project # 打包并排除目录 tar -tf backup.tar.gz # 查看内容不解压
zip/unzip
:ZIP处理zip -r docs.zip ./docs -x "*.git*" # 压缩并排除Git文件 unzip -O GBK chinese.zip # 解压中文文件(避免乱码)
gzip
:GZIP压缩gzip large.log # 压缩文件(替换原文件) gzip -c file > file.gz # 压缩但保留原文件 gunzip file.gz # 解压
十二、包管理与软件安装
包管理命令
系统 | 更新软件源 | 安装软件 | 搜索软件 | 实用技巧 |
---|---|---|---|---|
Debian/Ubuntu | apt update | apt install <pkg> | apt search <pkg> | 加速:替换国内镜像源 |
CentOS/RHEL | yum update | yum install <pkg> | yum search <pkg> | 批量安装:yum install php-fpm nginx mysql-server |
十三、安全警告与最佳实践
操作安全
rm -rf
安全准则- 永远不要在根目录
/
或系统目录执行递归删除 - 删前用
ls
确认路径:ls /path/to/delete/*
- 推荐用
trash-cli
(trash-put
/trash-empty
)替代rm
,支持回收站恢复
- 永远不要在根目录
权限操作禁忌
- ⚠️ 禁止执行
chmod -R 777 /
或chown -R root:root /home/
,会导致系统崩溃 - 正确权限:PHP文件
644
,目录755
,Web可写目录属主设为www-data
- ⚠️ 禁止执行
数据库操作安全
- 生产环境执行
DROP
/TRUNCATE
前必须备份 - 禁止直接在生产库执行
UPDATE
/DELETE
不带WHERE
的SQL
- 生产环境执行
命令执行确认
- 复杂命令先用
echo
测试:echo rm -rf /path/to/dir/*
- 批量操作前先处理1个样本验证:
find ./ -name "*.log" \| head -1 \| xargs rm -f
- 复杂命令先用
附录:现代工具安装指南
工具 | 功能 | Ubuntu安装命令 | 使用示例 |
---|---|---|---|
bat | 增强版cat | sudo apt install bat | bat config.php (代码高亮) |
exa | 增强版ls | sudo apt install exa | exa -l --git (带Git状态) |
htop | 增强版top | sudo apt install htop | htop (交互式监控) |
mtr | 网络诊断 | sudo apt install mtr | mtr google.com (路由追踪) |
jq | JSON处理 | sudo apt install jq | curl api.com \ jq '.data' |
ag | 代码搜索 | sudo apt install silversearcher-ag | ag "function" app/ |
fzf | 模糊查找 | sudo apt install fzf | Ctrl+R 搜索历史命令 |
trash-cli | 回收站工具 | sudo apt install trash-cli | trash-put file (安全删除) |
使用提示:遇到任何命令不清楚时,使用man <命令>
查看详细手册,如man grep
。
评论 (0)