答案是sudo composer global require会将全局配置、缓存及二进制文件写入/root/.composer,导致普通用户无法读取auth.json、加载插件或执行命令;应删除/root/.composer并用sudo chown -R $USER:$USER ~/.composer修复归属,再将bin-dir加入PATH。

为什么sudo composer global require会搞坏全局配置
它表面成功,实际把所有文件写进/root/.composer,而你的普通用户 shell 根本读不到那里。后续composer global require会继续往/root/.composer写,导致auth.json错位、插件加载失败、甚至COMPOSER_HOME被悄悄覆盖。最典型的现象是:装完laravel/installer,敲laravel却提示command not found。
怎么确认全局路径已被污染
运行composer config --global home,如果输出是/root/.composer或/var/www/.composer,或者输出为空但composer global list报错写缓存失败,基本可以断定环境已污染。
- 顺手检查归属:
ls -ld ~/.composer,若第三列(owner)不是当前用户名,就是它了 - 再看缓存目录:
composer config --global cache-dir,然后ls -ld那个路径,同样核对 owner
修复步骤:只用chown,不用chmod或sudo composer
sudo在这里只用于临时提权改归属,绝不能用来跑composer命令本身。一旦误用sudo composer global require,~/.composer/vendor/bin/下可能混入 root 所有子目录,chown -R都救不回来,只能删掉重来。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 删掉污染源:
sudo rm -rf /root/.composer(如果存在) - 归还控制权:
sudo chown -R $USER:$USER ~/.composer - 加固可写性(防 umask 导致子目录无写权限):
chmod -R u+rw ~/.composer - 验证是否生效:
composer config --global home应输出/home/xxx/.composer(macOS 是/Users/xxx/.composer)
怎么让全局命令真正可用
装完composer global require laravel/installer后还是找不到laravel,大概率是~/.composer/vendor/bin没进$PATH,或该路径本身权限受限。
- 查 bin 目录位置:
composer config -g bin-dir(默认~/.composer/vendor/bin) - 加进环境变量:在
~/.zshrc或~/.bashrc末尾加export PATH="$HOME/.composer/vendor/bin:$PATH",然后source ~/.zshrc - 更推荐方案:避开权限纠缠,改用用户级 bin:
mkdir -p ~/bin && composer config -g bin-dir ~/bin && export PATH="$HOME/bin:$PATH"
复杂点在于,PHP-FPM 或 cron 若以www-data身份运行,根本看不到你个人账户下的~/.composer;全局命令本质是“装给当前COMPOSER_HOME对应用户”,不是装给所有人。

















