我已经安装了一个包snap
,并且我需要修改其中一个文件,但是当我尝试更改其所有权或权限时,我总是收到以下消息:
sudo chmod +x ./my_file.js
chmod: changing permissions of '/snap/my_app/my_file.js': Read-only file system
我如何修改通过安装的文件snap
?
答案1
答案2
Snap 的程序文件受到保护,不会被更改。这是通过将受保护的文件以只读方式挂载到特定空间来实现的。
该进程还具有用于配置数据的特定空间,其中包括用于数据和配置的用户特定主空间(/home/user/snap
)以及用于全球数据的空间(/var/snap
)。
所有世界范围的 snap 文件都可以通过该/snap
区域的符号链接读取和访问。
您可以使用以下命令验证真实位置以及空间如何链接。
查看 snap 受保护挂载示例的命令:
$ mount | egrep snap | egrep ro,
/var/lib/snapd/snaps/core_4486.snap on /snap/core/4486 type squashfs (ro,nodev,relatime,x-gdu.hide)
/var/lib/snapd/snaps/communitheme_185.snap on /snap/communitheme/185 type squashfs (ro,nodev,relatime,x-gdu.hide)
/var/lib/snapd/snaps/hello-world_27.snap on /snap/hello-world/27 type squashfs (ro,nodev,relatime)
/var/lib/snapd/snaps/core_4407.snap on /snap/core/4407 type squashfs (ro,nodev,relatime,x-gdu.hide)
/var/lib/snapd/snaps/communitheme_124.snap on /snap/communitheme/124 type squashfs (ro,nodev,relatime,x-gdu.hide)
/var/lib/snapd/snaps/core_4571.snap on /snap/core/4571 type squashfs (ro,nodev,relatime,x-gdu.hide)
/var/lib/snapd/snaps/communitheme_246.snap on /snap/communitheme/246 type squashfs (ro,nodev,relatime,x-gdu.hide)
/var/lib/snapd/snaps/vlc_190.snap on /snap/vlc/190 type squashfs (ro,nodev,relatime,x-gdu.hide)
查看未写保护的 snap 空间示例的命令:
$ mount | egrep snap | egrep -v ro,
tmpfs on /run/snapd/ns type tmpfs (rw,nosuid,noexec,relatime,size=3293156k,mode=755)
nsfs on /run/snapd/ns/hello-world.mnt type nsfs (rw)
nsfs on /run/snapd/ns/vlc.mnt type nsfs (rw)
从错误消息可以看出,您正在尝试更改已被程序员以编程方式保护的文件。您的问题表明您是该应用程序的程序员。因此,您必须使用 snap 的编程配置功能来决定将哪些文件放在哪里。
我该如何解决这个问题?
正如我在评论中所建议的那样,以普通用户的身份在开发环境中设计您的程序会更安全、更常见……通常是在您自己的个人空间中,然后使用 snap 的开发系统来安装新版本。
我不是 Snap 程序员,无法准确说明 Snap 的设计和导出使用流程。但我可以想象它可能类似于设计 Android 或 Java 程序,开发人员将使用某种类型的导出或发布方法来在已安装的配置中运行或测试新版本。
您可以尝试将受保护的只读文件系统重新挂载为读/写。我不建议这样做,因为这可能会破坏 snap 系统的完整性,或者由于 snap 系统本身的修改而导致应用程序无法按预期运行,从而导致意外行为。