首页 > 解决方案 > 无法打开文件 lol.json:使用 Jq 拒绝权限?

问题描述

我在这里面临某种许可问题。我可以使用 读取文件cat,使用它对其进行更改,nano但由于某种原因,jq存在权限问题。这是我所面临的:

msp@coolpad:~/projects/lol$ jq .name lol.json
jq: error: Could not open file lol.json: Permission denied

在检查权限时,这是我得到的:

msp@coolpad:~/projects/lol$ ls -l
total 4
-rw-rw-r-- 1 msp msp   0 Sep 27 04:04 lol-domains.txt
-rwxrwxrwx 1 msp msp 593 Sep 27 04:38 lol.json

如您所见,我已尝试授予它777权限,但它仍在显示Permission denied。我知道设置777权限不是一个好主意,我完全打算664在问题解决后将其改回。Anyhelp将被appriciated。

更新1:我尝试过重新安装jqsnap但仍然没有解决问题。

更新 2:输出cat lol.json

msp@coolpad:~$ cat lol.json
{"name":"lol"}

更新 3:输出echo '{"name":"lol"}' | jq .name

msp@coolpad:~$ echo '{"name":"lol"}' | jq .name
"lol"

更新 4:评论中出现的一种解决方法:

cat lol.json | jq .name

标签: linuxbashpermissionsjq

解决方案


sudo snap remove jq
sudo apt install jq

jq通过 Ubuntu 的snap.

Snap 包具有“限制”,即“严格”或“经典”。在这种情况下jq,必须已打包为“严格”,这意味着它有自己的/tmp/snap.jq/目录,无法读取系统/tmp目录和一堆其他目录。想要使用“经典禁锢”的 Snap 包必须经过 snap 负责人的手动批准,并且--classic在安装时必须通过,如下所示:sudo snap install <package name> --classic.

无论如何,卸载快照版本jq并从apt(上述两个命令)重新安装它为我修复了权限错误。无论如何,jqinapt是比最新版本更新的版本snap(至少截至 2020 年 7 月在 Ubuntu 20.04 上)。


在我看来,通过安装命令行工具snap是一个错误,至少不会--classic因为您会遇到上述错误。这是预期的行为,不太可能改变,因为设计者snap认为软件告诉您存在的文件不存在有什么问题。在 snapcraft 论坛上查看有关此问题的主题:https ://forum.snapcraft.io/t/jq-cant-read-some-files/17835


推荐阅读