应手动下载官方 PHAR 安装:curl -sS https://getcomposer.org/installer | php 获取 composer.phar,校验 SHA384 后 chmod +x,再 sudo mv 至 /usr/local/bin/composer 并确保该路径在 $PATH 中。

Composer 在 Ubuntu 上不是用 apt install composer 装官方包就能直接用的——系统源里的版本老旧、不带 composer 命令别名,且默认不写入全局 PATH。必须手动下载 PHAR、设可执行权限、并显式放入系统级 bin 目录或用户 PATH 中。
怎么下载并验证 Composer PHAR 文件
Ubuntu 官方仓库的 composer 包(如 php-composer)通常滞后 1–2 年,且安装后是 /usr/bin/composer 但实际指向一个包装脚本,容易和本地项目中的 composer.phar 冲突。推荐直接使用官方分发方式:
- 运行
curl -sS https://getcomposer.org/installer | php下载到当前目录的composer.phar - 立即校验完整性:
php -r "echo hash_file('sha384', 'composer.phar');",比对官网首页显示的 SHA384 值 - 加执行权限:
chmod +x composer.phar
如何让 composer 命令全局可用
仅把 composer.phar 放进 ~/bin/ 或 /usr/local/bin/ 不够,还要确保该路径在你的 shell 的 $PATH 中。常见错误是只改了 ~/.bashrc 却没重载,或用了 zsh 却去改 bashrc:
- 推荐放系统级位置:
sudo mv composer.phar /usr/local/bin/composer - 检查是否生效:
which composer应输出/usr/local/bin/composer - 若提示“command not found”,运行
echo $PATH确认/usr/local/bin在其中;不在就补:echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc(zsh用户改~/.zshrc)
为什么不能用 sudo apt install composer
Ubuntu 22.04/24.04 源中 composer 包版本固定为 2.0.x 或 2.2.x,而 Composer 官方已进入 2.7+,缺失关键特性(如 composer require --interactive、PHP 8.3 兼容、插件签名验证)。更严重的是:
- 它依赖系统 PHP 包,会强制安装
php-cli和一堆扩展,可能覆盖你用ondrej/phpPPA 装的高版本 PHP - 命令实际是
/usr/bin/composer,但本质是调用/usr/share/php/composer/composer—— 这个路径下文件不可写,升级失败率极高 -
composer self-update会报错:Cannot update, permission denied,因为没权限写系统目录
#!/bin/bash
# 推荐的一键安装脚本(粘贴后直接运行)
EXPECTED_CHECKSUM="$(wget -q -O - https://composer.github.io/installer.sig)"
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
ACTUAL_CHECKSUM="$(php -r "echo hash_file('sha384', 'composer-setup.php');")"
if [ "$EXPECTED_CHECKSUM" != "$ACTUAL_CHECKSUM" ]; then
echo 'Integrity check failed' >&2
rm composer-setup.php
exit 1
fi
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
rm composer-setup.phpPATH 和权限问题最容易反复出错,尤其当服务器上同时跑多个 PHP 版本或用了 Docker。每次执行 composer 前,先确认 php -v 和 which php 输出与预期一致——Composer 的行为高度依赖当前 CLI PHP 的配置和扩展加载状态。










