如何让 snap 访问 ~/home 中的隐藏文件和文件夹?

如何让 snap 访问 ~/home 中的隐藏文件和文件夹?

操作系统:Ubuntu 20.04

我安装了gedit、、katelibreoffice如下内容。

$ snap list (partial output)
Name                             Version                     Rev   Tracking         Publisher   Notes
gedit                            3.36.0+git7.764f9c67f       537   latest/stable    canonical✓  -
kate                             20.04.0                     64    latest/stable    kde✓        -
libreoffice                      6.4.3.2                     177   latest/stable    canonical✓  -
$ 

这些快照都无法访问我的主文件夹中的任何隐藏文件和隐藏文件夹。这是设计使然吗?

ls -al的输出如下~/home

$ ls -al
total 104
drwxr-xr-x 18 dkb  dkb   4096 May 11 16:26 .
drwxr-xr-x  3 root root  4096 Apr 26 16:12 ..
-rw-rw-r--  1 dkb  dkb   2782 May  9 07:59 .bash_aliases
-rw-------  1 dkb  dkb  10748 May  9 19:32 .bash_history
-rw-r--r--  1 dkb  dkb    220 Apr 26 16:12 .bash_logout
-rw-r--r--  1 dkb  dkb   3953 Apr 27 15:09 .bashrc
drwx------ 14 dkb  dkb   4096 May 11 15:58 .cache
drwxr-xr-x 21 dkb  dkb   4096 May 11 15:58 .config
drwxr-xr-x  2 dkb  dkb   4096 May 11 16:19 Desktop
drwxr-xr-x  2 dkb  dkb   4096 May 11 15:47 Documents
drwxr-xr-x  3 dkb  dkb   4096 May 11 16:17 Downloads
drwx------  3 dkb  dkb   4096 Apr 30 19:10 .gnupg
-rw-------  1 dkb  dkb     97 May  4 09:39 .lesshst
drwxr-xr-x  3 dkb  dkb   4096 Apr 26 16:22 .local
drwx------  5 dkb  dkb   4096 Apr 27 16:34 .mozilla
drwxr-xr-x  2 dkb  dkb   4096 Apr 26 16:22 Music
drwxr-xr-x  2 dkb  dkb   4096 May  5 16:34 Pictures
-rw-r--r--  1 dkb  dkb    807 Apr 26 16:12 .profile
drwxr-xr-x  2 dkb  dkb   4096 Apr 26 16:22 Public
drwxr-xr-x 13 dkb  dkb   4096 May 11 16:00 snap
drwx------  2 dkb  dkb   4096 Apr 26 16:36 .ssh
-rw-r--r--  1 dkb  dkb      0 Apr 26 16:31 .sudo_as_admin_successful
drwxr-xr-x  2 dkb  dkb   4096 Apr 26 16:22 Templates
drwx------  6 dkb  dkb   4096 Apr 30 19:29 .thunderbird
drwxr-xr-x  2 dkb  dkb   4096 Apr 26 16:22 Videos
$ 

问题可能与隐藏文件或文件夹无关,本身。如果我复制~/.config~/Downloads所有三个快照都可以打开~/Downloads/.config其中的文件。

另一方面,如果我复制~/.bashrc~/bashrc,则快照没有任何困难。

答案1

Snap‘主页’ 界面仅允许访问非隐藏用户 /home 中的文件和目录(而不是其他地方)。

Snap‘个人文件’界面允许访问全部用户 /home 中的文件和目录(而不是其他地方)。

  • 折断接口在 snap 创建中使用的 yaml 文件中定义。
  • 您可以使用 列出 snap 包的可用接口snap connections <snap-name>。如果personal-files列出,则可以使用它(它可能已经可以通过一些快照进行连接。
  • 如果personal-files接口已定义但未被使用,您可以使用它 $snap connect <snap-name>:<plug-name>来连接它。

示例 1:Discord Snap:snap connections discord没有personal-files条目。Discord 无法访问隐藏文件,而且您无法更改这一点。

$ snap connections discord | grep personal-files
$ 

示例 2:Firefox Snap:snap connections firefox确实有personal-files条目,并且插头已连接到 Firefox 插槽。此用户已经可以访问主目录中的隐藏文件(其他地方都无法访问)。

$ snap connections firefox | grep personal-files
personal-files            firefox:dot-mozilla-firefox     :personal-files                  -
$

// Interface name  = personal-files
// Snap plug name  = dot-mozilla-firefox
// Snapd slot name = personal-files

示例 3:Snap Store:snap connections snap-store有个人文件条目,但插槽未连接到插头。您可以连接它。让我们这样做吧!

$ snap connections snap-store | grep personal-files
personal-files            snap-store:dot-snap-auth-json             -                                -

// Interface name  = personal-files
// Snap plug name  = dot-snap-auth-json
// Snapd slot name = (not listed because it's not connected)

$ sudo snap connect snap-store:dot-snap-auth-json
connect snap-store:dot-snap-auth-json to snapd:personal-files

$ sudo snap disconnect snap-store:dot-snap-auth-json
disconnect snap-store:dot-snap-auth-json from snapd:personal-files

答案2

仅修改现有文件的解决方法

我的经验是,~/.<directory>默认情况下,Snapshot 中的文件无法访问,但是子目錄,即~/tmp/.<directory> 似乎是可以访问的。

为了克服这个限制,而不必来回复制整个文件,您可以创建一个硬链接递归复制目录

例如:~/.local/...无法访问

  • 打开终端Ctrl++AltT
  • 为硬链接创建临时目录
    • mkdir -p ~/tmp/hrdlnks
  • 创建整个~/.local/目录 的硬链接副本
    • cp -al ~/.local ~/tmp/hrdlnks/
  • 现在~/tmp/hrdlnks/.local/应该可以访问
    • 如果由于某种原因它们不可访问,因为它是一个隐藏目录,您可以将其重命名为.localdot-local例如。
      • mv ~/tmp/hrdlnks/.local ~/tmp/hrdlnks/dot-local
  • 修改完文件后,只需删除临时硬链接复制目录
    • rm -r ~/tmp/hrdlnks/

附注:

  • 如果你在这个“硬链接”临时目录中创建一个新文件,你将不是在“原始”/“镜像”目录中创建它
    • 你需要复制它手动删除临时硬链接目录之前
  • 如果在创建硬链接副本后在“原始”目录中创建了新文件,则这些文件将不会存在于硬链接副本中
    • 您需要创建一个新的硬链接副本
    • 我建议您在修改完感兴趣的文件后就删除临时目录。

关于硬链接的说明

  • 硬链接仅指向同一个“文件数据块”
  • 如果你删除硬链接,你不会删除“原始”文件
    • 如果您删除“原始”文件,硬链接仍然可以访问数据,当您删除指向数据的所有硬链接时,您将无法再访问数据,但它仍然存在,直到其他文件覆盖那些“空闲”字节
  • 如果你更改文件或目录名称,则不会更改“原始”名称
  • 如果你在硬链接临时目录中移动文件,则不会移动“原始”目录结构中的任何内容

相关内容