Ubuntu 22.04.1下PHP 8环境搭建求助:命令简化与权限错误
解决权限错误并生成可复用的PHP开发环境安装脚本
核心问题分析
你遇到的sudo echo "xxx" >> ~/.gnupg/dirmngr.conf权限错误,根源是重定向操作由当前用户Shell执行,而非sudo启动的echo进程。即使echo用了sudo,>>仍会用你的普通用户权限写入root所属的~/.gnupg目录,导致权限拒绝。解决方式是用sudo tee或sudo sh -c让重定向在root权限下执行。
修正后的可复用Bash脚本
将以下内容保存为install-php-dev-env.sh:
#!/bin/bash set -euo pipefail # 更新系统包索引 sudo apt update -y # 安装基础依赖工具 sudo apt install -y gnupg gosu curl ca-certificates zip unzip git sqlite3 libcap2-bin libpng-dev # 配置GnuPG目录及dirmngr(修复权限问题) sudo mkdir -p ~/.gnupg sudo chmod 600 ~/.gnupg # 使用sudo tee -a实现root权限下追加内容 echo "disable-ipv6" | sudo tee -a ~/.gnupg/dirmngr.conf > /dev/null echo "keyserver hkp://keyserver.ubuntu.com:80" | sudo tee -a ~/.gnupg/dirmngr.conf > /dev/null # 添加Ondrej PHP源的GPG密钥及源列表 sudo gpg --recv-key 0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c sudo gpg --export 0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c | sudo tee /usr/share/keyrings/ppa_ondrej_php.gpg > /dev/null echo "deb [signed-by=/usr/share/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy main" | sudo tee /etc/apt/sources.list.d/ppa_ondrej_php.list > /dev/null # 再次更新索引并安装PHP 8.2及扩展 sudo apt update -y sudo apt install -y \ php8.2-cli php8.2-dev \ php8.2-pgsql php8.2-sqlite3 php8.2-gd \ php8.2-curl \ php8.2-imap php8.2-mysql php8.2-mbstring \ php8.2-xml php8.2-zip php8.2-bcmath php8.2-soap \ php8.2-intl php8.2-readline \ php8.2-ldap \ php8.2-msgpack php8.2-igbinary php8.2-redis php8.2-swoole \ php8.2-memcached php8.2-pcov php8.2-xdebug # 安装Composer(需root权限写入/usr/bin) php -r "readfile('https://getcomposer.org/installer');" | sudo php -- --install-dir=/usr/bin/ --filename=composer # 安装Node.js 18.x curl -sLS https://deb.nodesource.com/setup_18.x | sudo bash - sudo apt install -y nodejs sudo npm install -g npm # 添加Yarn源并安装 curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarn.gpg > /dev/null echo "deb [signed-by=/usr/share/keyrings/yarn.gpg] https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list > /dev/null # 添加PostgreSQL源并安装客户端 curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /usr/share/keyrings/pgdg.gpg > /dev/null echo "deb [signed-by=/usr/share/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt jammy-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list > /dev/null # 最后更新索引并安装剩余工具 sudo apt update -y sudo apt install -y yarn mysql-client postgresql-client-14 # 清理系统缓存 sudo apt autoremove -y sudo apt clean -y sudo rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* echo "环境安装完成!"
脚本使用步骤
- 保存脚本后,赋予执行权限:
chmod +x install-php-dev-env.sh - 以root权限运行脚本:
sudo ./install-php-dev-env.sh
关键修改说明
- 加入
set -euo pipefail:让脚本在出错、使用未定义变量或管道环节出错时立即退出,避免后续误操作。 - 替换所有
echo >>为echo ... | sudo tee -a:确保文件写入操作在root权限下执行,解决权限错误。 - 给Composer安装命令添加
sudo:因为要写入/usr/bin目录,需要root权限。 - 修正Node.js源安装的权限:将
curl | bash -改为curl | sudo bash -,确保源配置操作有足够权限。 - 拆分长命令为多行,添加注释:提升脚本可读性和维护性。
内容的提问来源于stack exchange,提问作者Mauricio Mendoza
相关产品推荐
相关产品推荐

