You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行sudo jq修改JSON文件遇Permission Denied错误,求原因分析

为什么你的jq命令会出现Permission Denied错误?

我来帮你拆解最可能的原因,以及对应的解决办法:

  • 重定向操作不受sudo权限覆盖(最常见原因)
    你的命令里,sudo只给jq命令赋予了root权限,但后面的> tmp.$$.json重定向操作是由当前普通用户执行的,并不受sudo影响。如果当前目录是root用户专属(或者你没有该目录的写入权限),普通用户根本没法在这里创建临时文件,自然就会抛出Permission Denied错误。
    举个典型场景:假设你在/root目录下执行这个命令,普通用户默认没有该目录的写入权限,哪怕jq用了sudo,重定向步骤还是会失败。

  • 临时文件或目标目录的权限遗留问题
    就算当前目录你有权限,也可能因为之前创建的同名临时文件(tmp.$$.json)被root锁定,或者mv操作时目标文件所在目录的权限设置限制了普通用户操作(不过你提到能通过sudo nano修改原文件,这个可能性相对低一些,但也可以排查下)。


解决办法

最直接的方案是把整个命令包裹在sudo sh -c里,让重定向和后续的mv操作都在root权限下执行:

sudo sh -c 'jq -c '\''.interpreterSettings."2ANGGHHMQ"."properties"."zeppelin.pyspark.python" = "python3"'\'' interpreter.json > tmp.$$.json && mv tmp.$$.json interpreter.json'

或者用双引号转义内部引号,写法更简洁:

sudo sh -c "jq -c '.interpreterSettings.\"2ANGGHHMQ\".\"properties\".\"zeppelin.pyspark.python\" = \"python3\"' interpreter.json > tmp.$$.json && mv tmp.$$.json interpreter.json"

另外,如果你系统里安装了moreutils工具包,可以用sponge避免临时文件的麻烦——它会先处理完输出内容,再覆盖原文件,命令更清爽:

sudo jq -c '.interpreterSettings."2ANGGHHMQ"."properties"."zeppelin.pyspark.python" = "python3"' interpreter.json | sudo sponge interpreter.json

如果没装sponge,可以通过包管理器安装(比如sudo apt install moreutils,对应你的系统调整命令即可)。

内容的提问来源于stack exchange,提问作者mitroberts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:02:52