gomount 是一个面向 Linux 和 macOS 的挂载管理工具。
如果你经常需要连接 NAS、远程服务器或云存储,却不想反复查找和输入冗长的挂载命令,可以把连接信息统一写进配置文件,再通过交互式TUI界面选择、挂载和卸载。
支持的挂载种类:
- SMB/CIFS
- SSHFS
- WebDAV
- S3 及兼容存储(AWS S3、阿里云 OSS、腾讯云 COS、七牛云 Kodo、MinIO、RustFS 等)
- Linux下gomount在挂载SMB/CIFS是需要使用到
mount.cifs命令, 挂载sshfs时需要使用到sshfs命令,因此需要安装相关依赖 - Linux SMB 挂载需要
sudo权限 - macOS 云存储挂载需要 macFUSE、CGO,以及使用
-tags cmount构建的二进制
安装依赖
# Debian/Ubuntu
sudo apt-get install cifs-utils sshfs
# Fedora/RHEL
sudo dnf install cifs-utils fuse-sshfs
# Arch Linux
sudo pacman -S cifs-utils sshfs安装gomount
go install github.com/hsldymq/gomount/cmd/gomount@latest安装依赖
brew install --cask macfuse安装gomount
CGO_ENABLED=1 go install -tags cmount github.com/hsldymq/gomount/cmd/gomount@latest配置文件用于保存常用的挂载信息。配置一次后,就可以通过交互界面选择挂载项,或直接执行 gomount mount <名称>,不必每次重新输入服务器地址、远程路径和挂载位置。
gomount 默认读取 ~/.config/gomount.yaml。也可以使用 -c 指定其他配置文件:
gomount -c /path/to/config.yaml一个完整的示例配置见gomount.example.yaml
配置文件以 mounts 开始,其中每一项代表一个可以独立挂载的资源:
mounts:
- name: dev
type: sshfs
mount_dir_path: ~/Mounts/dev
sshfs:
host: dev.example.com
remote_path: /home/user/projects每个挂载项只需要关注几个关键部分:
name:挂载项的名称,用于在界面和命令中识别它;名称不能重复。type:挂载类型,例如smb或sshfs。mount_dir_path:资源在本机的挂载位置,支持以~表示用户目录。- 与
type同名的配置块:保存连接该资源所需的信息。不同挂载类型需要的字段不同。
当挂载项较多时,可以使用 include 把配置拆分到多个文件中:
# ~/.config/gomount.yaml
include:
- mounts/work.yaml
- mounts/personal/*.yaml
mounts:
- name: local-nas
type: smb
mount_dir_path: ~/Mounts/nas
smb:
addr: nas.local
share_name: data
username: user被引用的文件仍然使用相同的 mounts 结构。include 支持单个文件和通配符,也可以继续引用其他配置;相对路径以当前配置文件所在目录为基准,同时支持绝对路径和以 ~ 开头的路径。
拆分配置后,可以按工作、个人、设备或用途分别管理挂载项。这样既能让主配置保持简洁,也便于只同步或分享其中一部分配置;包含密码等敏感信息的文件还可以单独保存并设置更严格的访问权限。
交互式界面是 gomount 最主要的使用方式。运行以下命令进入界面:
gomount ii 是 interactive 的简写,也可以使用完整命令:
gomount interactive进入界面后,gomount 会读取配置并检查每个挂载项的当前状态。列表中会显示挂载项的名称、远程地址和类型:已挂载的项目显示为选中状态,未挂载的项目显示为未选中状态。
界面大致如下,实际显示时会使用颜色区分不同状态:
Select shares to mount/unmount:
▸ [✓] home-nas › //192.0.2.10:445/documents (smb)
[ ] dev-server › dev-server:/srv/projects (sshfs)
[ ] s3-archive › s3://example-bucket/backups@oss-cn-hangzhou.aliyuncs.com (s3: aliyun_oss)
[✓] team-docs › https://dav.example.com/dav/:/team/docs (webdav)
↑/k: up | ↓/j: down | space: select | enter: confirm | q/esc: cancel
- 使用
↑、↓或k、j移动光标。 - 按
Space切换当前项目的目标状态,可以一次选择多个项目。 - 按
Enter确认,gomount 会挂载新选中的项目,并卸载取消选中的项目。 - 按
q、Esc或Ctrl+C退出,不执行任何操作。
如果使用的不是默认配置文件,可以在进入交互界面时通过 -c 指定:
gomount -c /path/to/config.yaml i不进入交互界面,直接按配置中的名称挂载一个或多个项目:
gomount m home-nas
gomount m home-nas dev-serverm 是 mount 的简写,完整命令为 gomount mount <名称>。
按配置中的名称卸载一个或多个项目:
gomount u home-nas
gomount u home-nas dev-serveru 是 unmount 的简写,完整命令为 gomount unmount <名称>。
查看所有配置项及其当前挂载状态:
gomount ll 是 list 的简写,完整命令为 gomount list。
除了直接执行命令,gomount 还可能在后台启动一个 daemon 进程。
SMB 和 SSHFS 的挂载由系统中的 mount.cifs、mount_smbfs 或 sshfs 等工具完成,gomount 发出挂载命令后即可退出。其他挂载类型则由 gomount 内部的挂载引擎提供服务,需要有一个持续运行的进程来维持挂载、处理文件读写并记录挂载状态,因此由 daemon 统一管理。
当你通过交互界面或 gomount m 挂载一个需要 daemon 管理的项目时,gomount 会先检查 daemon 是否已经运行:
- 如果已经运行,CLI 会直接把挂载请求交给它。
- 如果尚未运行,CLI 会自动在后台启动它,等待就绪后再继续挂载。
- 如果只使用 SMB 和 SSHFS,gomount 不会因此启动 daemon。
daemon 启动后独立于当前这次 CLI 操作运行。关闭交互界面或退出当前终端命令,不会同时关闭 daemon;即使它管理的挂载项已经全部卸载,daemon 也不会自动退出。之后再次挂载时,gomount 会继续使用现有进程。
通常不需要手动启动 daemon,也不需要在每次使用完 gomount 后立即关闭它。
可以查看 daemon 是否正在运行、进程 ID,以及当前由它维持的挂载数量:
gomount d statusd 是 daemon 的简写,完整命令为 gomount daemon status。
以下情况适合手动关闭 daemon:
- 暂时不再使用由 daemon 管理的挂载,希望释放后台进程占用的资源。
- 准备退出系统、维护挂载环境,或希望先干净地卸载相关资源。
- 升级了 gomount,希望结束旧版本的 daemon,让下次挂载时自动启动新版本。
- daemon 状态异常,需要在确认不再使用相关挂载后重新启动。
使用以下命令关闭:
gomount d down关闭时,gomount 会先卸载该 daemon 当前管理的所有挂载,再停止后台进程。这意味着正在使用这些挂载目录的程序会失去访问,因此不要在仍有文件读写、终端位于挂载目录中,或其他程序正在使用相关文件时执行此命令。
如果某个挂载无法安全卸载,命令会报告错误,daemon 也会继续运行,以免在挂载尚未清理完成时直接退出。相比直接使用 kill 终止进程,应优先使用 gomount d down。
如果配置中自定义了 daemon 的通信路径,查询状态和关闭时需要通过 -c 使用同一份配置:
gomount -c /path/to/config.yaml d status
gomount -c /path/to/config.yaml d down