答案是修复vendor/目录属主:执行sudo chown -r $user:$user vendor/,因permission denied主因是属主为root而非权限位不足,需先用ls -ld vendor/确认,修复后运行composer install --no-scripts验证。

vendor/目录属主是root,不是权限位不够
报错里出现Permission denied时,90% 的情况不是chmod没加够,而是vendor/目录被sudo composer install污染过,导致所有文件属主变成root。普通用户后续执行composer update或写入autoload.php就会失败。
先定位问题:ls -ld vendor/。如果输出第一列含root root(比如drwxr-xr-x 12 root root),就确认是所有权错位。
- 只修复
vendor/:运行sudo chown -R $USER:$USER vendor/ - 别碰
composer.lock或源码目录——除非ls -ld composer.lock也显示root,才一并加进去 - 修复后立刻跑
composer install --no-scripts测试是否能生成结构;成功后再补composer run-script post-install-cmd
全局镜像源配置写进了/root/.composer/config.json
用sudo composer config --global repo.packagist composer https://mirrors.aliyun.com/composer/会让配置写进/root/.composer/config.json,普通用户根本读不到。结果就是:明明配了镜像,却仍走慢速官方源,还可能因缓存路径错乱触发权限卡点。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 查真实全局配置位置:
composer config --global home,若输出是/root/.composer,说明已被污染 - 临时绕过:
COMPOSER_HOME=$HOME/.composer composer config --global repo.packagist composer https://mirrors.aliyun.com/composer/ - 长期解法:删掉污染路径(
sudo rm -rf /root/.composer),再确保所有config --global命令都不带sudo - 验证是否生效:
composer config --global repo.packagist应输出镜像地址,且ls -ld $(composer config --global config-dir)属主是你本人
composer global require找不到命令,其实是bin-dir权限错位
composer global require laravel/installer成功后却提示'laravel' is not recognized,通常不是PATH没加对,而是二进制文件被装进了/root/.composer/vendor/bin/——普通用户shell根本访问不了这个路径。
- 查当前生效的全局bin路径:
composer config --global bin-dir,默认常为/usr/local/bin或~/.composer/vendor/bin - 若输出是
/usr/local/bin但你无写权限,改用用户级路径:composer config --global bin-dir ~/.local/bin - 确保
~/.local/bin已加入$PATH(检查echo $PATH,未包含则在~/.bashrc或~/.zshrc末尾加export PATH="$HOME/.local/bin:$PATH") - 重装一次:
composer global require laravel/installer,然后新开终端测试laravel --version
CI/CD或Docker里composer install卡在缓存写入
GitHub Actions、GitLab CI 或 Docker 容器中,composer install常在cache目录报Permission denied,根源往往是~/.composer/cache/或/tmp下子目录属主为root,而CI runner以非root用户运行。
- 提前创建并授权缓存目录:
mkdir -p .composer-cache && chmod 700 .composer-cache - 指定缓存路径避免冲突:
COMPOSER_CACHE_DIR="$(pwd)/.composer-cache" composer install --no-plugins --no-scripts - Alpine镜像要注意:
phar解包可能静默失败,加-v参数看是否卡在Extracting archive步骤 - 禁用插件和脚本可大幅降低权限需求:
composer install --no-plugins --no-scripts --no-autoloader
ls -ld一眼看不到的地方:比如~/.composer/cache/plugins/下某个插件socket文件属主是root,或者COMPOSER_HOME被某个旧脚本悄悄覆盖成/var/www/.composer。每次报错,先盯住错误信息里的完整路径,再逐个ls -ld,比猜更省时间。










