根本原因是~/.composer/vendor/bin未加入PATH,导致系统无法找到全局安装的命令;需将该路径添加到shell配置并重载,同时确保COMPOSER_HOME、bin-dir、执行用户权限一致。

composer global require 装了命令却找不到
根本原因不是没装成功,而是 composer global require 生成的二进制文件(如 laravel)被放到了 ~/.composer/vendor/bin,但这个路径没进 PATH。系统压根不查这个目录,自然报 command not found。
实操建议:
- 先确认真实 bin 路径:
composer config --global home输出后拼上/vendor/bin,比如是$HOME/.composer/vendor/bin - 把该路径加进 shell 配置:
export PATH="$HOME/.composer/vendor/bin:$PATH"写入~/.zshrc或~/.bashrc,然后source ~/.zshrc - 别用
sudo composer global require——它会把文件写到/root/.composer/vendor/bin,普通用户永远碰不到 - 验证:新开终端,运行
echo $PATH看是否含该路径;再试laravel --version
全局 bin 目录 Permission denied 无法软链
执行 composer global require 卡在 Could not symlink,错误指向 /usr/local/bin 或 ~/.local/bin,说明 Composer 试图写入的目录当前用户无权操作。
实操建议:
- 别改系统目录权限(如
sudo chmod 777 /usr/local/bin),风险高且治标不治本 - 换用户级路径:
composer config --global bin-dir ~/.local/bin - 确保
~/.local/bin已存在且可写:mkdir -p ~/.local/bin,再检查ls -ld ~/.local/bin - 把
~/.local/bin加进PATH(同上一步 shell 配置),否则软链建了也找不到 - 重跑
composer global require laravel/installer,此时所有二进制都会落到~/.local/bin
COMPOSER_HOME 被意外覆盖导致全局配置失效
你发现 composer config --global repos.packagist 设了阿里云镜像,但 composer install 还是走 packagist.org;或者 composer global require 装的包在另一个用户下就用不了——大概率是 COMPOSER_HOME 环境变量被误设,或 PHP-FPM/cron 启动时读的是别的家目录。
实操建议:
- 查当前生效值:
composer config --global home,不是echo $COMPOSER_HOME(后者可能未导出) - 如果输出是
/var/www/.composer或/root/.composer,而你日常用的是普通用户,那问题就在这儿 - 临时验证:运行
COMPOSER_HOME=$HOME/.composer composer global require foo/bar,能成说明原COMPOSER_HOME是错的 - 永久修复:在用户 shell 配置里加
export COMPOSER_HOME="$HOME/.composer",并确保 PHP-FPM 的env[COMPOSER_HOME]或 cron 的环境也一致
全局安装的命令在 Web 环境(PHP-FPM)中不可用
laravel new 在终端能跑,但 Web 页面里 exec('laravel --version') 报错“not found”,这是因为 PHP-FPM 通常以 www-data 用户运行,它看不到你个人账户下的 ~/.composer/vendor/bin。
实操建议:
- 别指望让 PHP-FPM 去读你的用户目录——它没权限,也不该有
- Web 场景下应避免依赖全局命令;改用
require 'vendor/autoload.php'+ Composer API 调用逻辑 - 若真需调外部命令,统一用绝对路径:
/home/yourname/.composer/vendor/bin/laravel,并确保www-data对该路径有执行权(chmod +x)和读取权(chown yourname:www-data+chmod 750) - 更稳妥做法:把全局工具改成本地项目依赖,
composer require laravel/installer --dev,再用vendor/bin/laravel
最常被忽略的一点:全局路径异常往往不是单点问题,而是 COMPOSER_HOME、bin-dir、PATH、执行用户四者不一致造成的连锁反应。修一个,得同步核对另外三个。











