AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1033344
Accepted
Peter V. Mørch
Peter V. Mørch
Asked: 2018-05-08 14:12:49 +0800 CST2018-05-08 14:12:49 +0800 CST 2018-05-08 14:12:49 +0800 CST

如何让 snaps 访问 /somedir

  • 772

我只是被啪的一声弄湿了。我已经安装了 vlc 并想尝试使用它。我所有的媒体都安装在/storeNFS 挂载下。快照不允许访问该目录。

谷歌搜索后,我了解到我可以访问接口和接口下/home/peter的文件。:home/media:removable-media

但我实际上喜欢/store并且不想将其更改为/media/storeor/home/peter/store或除/store.

有没有办法让 snap 允许我的 snap(或者可能只是 vlc)访问/store,所以 snap 符合我的命名约定,或者我是否被迫转换为 snap 的首选项?

这似乎很不灵活,我希望我错过了一些东西。

snap
  • 5 5 个回答
  • 30839 Views

5 个回答

  • Voted
  1. Best Answer
    Peter V. Mørch
    2018-05-09T06:42:08+08:002018-05-09T06:42:08+08:00

    令我惊讶的是,它看起来真的/home是硬编码的。 mount-support.c包含:

        const struct sc_mount mounts[] = {
            {"/dev"},   // because it contains devices on host OS
            {"/etc"},   // because that's where /etc/resolv.conf lives, perhaps a bad idea
            {"/home"},  // to support /home/*/snap and home interface
        ...
    

    哇。这让我很吃惊。但是你现在有了。

    编辑:另见启动板问题 1643706

    • 36
  2. AmanicA
    2020-12-02T13:42:16+08:002020-12-02T13:42:16+08:00

    只需运行应用程序,就好像它不是一个快照 \o/

    例如铬

    1. 使用菜单编辑器,例如。“主菜单”添加自定义铬“菜单项”(这是 ubuntu 用于在您按 super+a 时查找应用程序):
    2. 设置名称例如:Chromium Unsnapped
    3. 设置命令:/snap/chromium/current/usr/lib/chromium-browser/chrome --user-data-dir=~/ChrUnsnapped --class="ChrUnsnapped" %U
    4. 设置一个图标,例如。下载复古铬标志
    5. 保存/关闭
    6. super+a(或在左下角显示应用程序图标)找到您的新项目并右键单击以添加到收藏夹 在此处输入图像描述

    <rant>

    我对 snap 感到非常沮丧,以至于我无法像 15 年来那样配置我的个人 /stf 目录。谢天谢地,这个黑客,似乎我将不得不为每个 freeken snap 应用程序这样做:'(。

    是的,我知道这很糟糕,但是在配置白名单之前,这似乎是让事情恢复正常的唯一方法。我真的不想把我的东西放在 /home、/mnt、/media 请不要讨厌你的用户。

    </rant>

    • 6
  3. Kat Amsterdam
    2022-01-02T15:12:15+08:002022-01-02T15:12:15+08:00

    所以,有两件事。

    首先:Linux 和 Unix 有一个 Ubuntu 和 Snaps 遵循的文件系统层次结构标准。 https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard

    第二:如果选择偏离自 1979 年以来一直存在的全球标准,那很好,但是然后绑定挂载您的非标准目录,以便 snap 可以找到它。

    mount --bind /nonstandard_mountpoint /media/$USER/directory
    

    或者

    mount --bind /nonstandard_mountpoint /home/$USER/directory
    

    那么您可以继续使用您的非标准挂载点,同时您的所有快照都可以找到您的 nonstandard_mountpoint 数据。

    甚至可以通过将其添加到您的 FSTab 来使此挂载永久化

    sudo nano /etc/fstab
    

    追加行

    /source /destination none defaults,bind 0 0
    

    保存并退出

    CTRL+X y
    

    这是一个示例: 存储在 /srv/dsmusic 的音乐文件

    首先在 /home/$USER/Music/dsmusic 创建一个目录

    mkdir /home/$USER/Music/dsmusic
    

    然后将 mount /srv/ds 音乐绑定到该目录

    sudo mount --bind /srv/dsmusic /home/$USER/Music/dsmusic
    

    然后你所有的快照音乐程序都会自动神奇地找到音乐文件。

    继续音乐示例:

    sudo nano /etc/fstab
    

    追加行

    /srv/dsmusic    /home/username/Music/dsmusic    none    defaults,bind    0 0
    

    ** 卸载 **

    如果要卸载,可以使用常规的 umount 命令,如常规挂载点

    sudo umount /home/$USER/Music/dsmusic
    

    有关更多信息,请参阅: https ://unix.stackexchange.com/questions/198590/what-is-a-bind-mount

    系统D

    ** 请注意,在 SystemD 中有一种更现代的方法来执行此操作,而不是使用 fstab。

    要在 SystemD 中创建绑定挂载,您需要创建一个 .mount 文件,其中非标准挂载点的路径由 -(减号)而不是正斜杠 (/) 分隔

    sudo systemctl edit --full --force path-nonstandard.mount
    

    过去并编辑挂载点

    [Unit]
    DefaultDependencies=no
    Conflicts=umount.target
    Before=local-fs.target umount.target
    
    [Mount]
        What=/some/old/dir
        Where=/the/new/dir
        Type=none
        Options=bind
    
    [Install]
    WantedBy=local-fs.target
    

    如果 nano 是默认编辑器 CTRL+X y (对于 nano) :wq (对于 vim)

    启用systemD文件

    sudo systemctl enable path-nonstandard.mount
    

    然后重新加载 SystemD 守护进程

    sudo systemctl daemon-reload
    

    然后开始你的安装

    sudo systemctl start path-nonstandard.mount
    

    如果你需要再次修改它只是

    sudo systemctl edit --full path-nonstandard.mount
    

    示例: 再次使用音乐示例:

    sudo systemctl edit --full --force srv-dsmusic.mount
    

    这将打开一个空白编辑器并在正确的系统文件夹中创建一个新的 .mount 文件,在该文件夹中添加行

    对于同一硬件上的本地挂载点:

    [Unit]
    DefaultDependencies=no
    Conflicts=umount.target
    Before=local-fs.target umount.target
    
    [Mount]
        What=/srv/dsmusic
        Where=/home/username/Music/dsmusic
        Type=none
        Options=bind
    
    [Install]
    WantedBy=local-fs.target
    

    请注意,如果您的非标准挂载点是 NAS 或其他远程设备,您将需要使用 remote-fs.target 而不是 local-fs.target

    用于不同硬件(如 NAS)上的远程挂载点

    [Unit]
    DefaultDependencies=no
    Conflicts=umount.target
    Before=remote-fs.target umount.target
    
    [Mount]
        What=/srv/dsmusic
        Where=/home/username/Music/dsmusic
        Type=none
        Options=bind
    
    [Install]
    WantedBy=remote-fs.target
    

    然后退出编辑器 CTRL+X y (对于 nano) :wq (对于 vim)

    启用systemD文件

    sudo systemctl enable srv-dsmusic.mount
    

    然后重新加载systemD守护进程

    sudo systemctl daemon-reload
    

    然后开始你的新挂载点

    sudo systemctl start srv-dsmusic.mount
    

    仅卸载绑定挂载

    sudo systemctl stop srv-dsmusic.mount
    

    您现在可以在 /srv/dsmusic 找到数据的镜像,并且 snap 将能够在 /home/$USER/Music/dsmusic 找到相同的数据

    有关更多信息,请参阅:https ://utcc.utoronto.ca/~cks/space/blog/linux/SystemdBindMountUnits 和 https://www.freedesktop.org/software/systemd/man/systemd.mount.html

    • 6
  4. Zygmunt Krynicki
    2018-05-26T07:15:36+08:002018-05-26T07:15:36+08:00

    因此,为了扩展我上面的迷你答案,没有办法做到这一点是普遍的、安全的和健全的。我知道每个人都喜欢定制他们的文件系统,但这需要一些成本,这就是其中之一。

    最终,通过 XDG 门户上的工作,某些应用程序(尤其是图形应用程序)可以访问任意位置的文件,前提是这些应用程序使用了一些最近引入的 GTK API。当在限制下运行时,这将与受信任的助手联系,弹出看起来像文件选择器的受信任 UI,与特殊的 FUSE 文件系统对话以将文件(在任何位置)作为 /run/ 中的特殊内容公开。 ..应用程序看到的某个地方,事情可能会很好。

    这是为文件选择器友好的东西设计的,比如媒体播放器或文字编辑器。不过,托管在您的 linux 树/codez不会那么好用。

    • 2
  5. ThorSummoner
    2018-11-26T22:12:44+08:002018-11-26T22:12:44+08:00

    将目标目录挂载到/home/*/snap/是一个选项;一个简单的绑定挂载对我不起作用,硬链接或目标文件或目录的符号链接到建议的 snap 目录或其任何子目录也不起作用。此限制可能是由于目标文件存在于/home/*/目录之外,我没有测试/home/*/前缀 glob 内文件的挂载/硬/符号链接。

    但是,一种解决方法:将完整文件复制到其中/home/<myuser>/snap/<appname>/<somenewdirectory>确实对我有用。维护完整的数据集副本对我来说仍然是不可行的,但是有很多工具可以帮助处理这种限制;在使用快照之前手动递归复制,如果您的数据集很小甚至是原子数据集,则可以选择在之后将修改后的文件复制回来

    举几个可以帮助您的文件复制实用程序:

    • cp --verbose --archive --recursive /somedir ~/snap/somedir, 源/目标反之亦然
    • tar -C / -c somedir | tar -C ~/snap/ -xv是一个基于 tar 的文件复制示例
    • rsync --archive /somedir ~/snap/somedir, rsync 很流行并且有很多包装器/扩展

    • 任何基于文件的备份实用程序(图形示例:)grsync都应该可用,因为整个目标是根据需要前后复制数据集

    • git 克隆,可能,但是本地克隆默认使用硬链接,因此如果您使用 git 将文件系统 io 管理为 snap,请注意在克隆时不禁用硬链接的可能性,git clone 可能无法访问 snap。

    • 1

相关问题

  • 如何运行 snapcraft 网络聊天示例?

  • Ubuntu可以在哪里快照写入数据?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve