Linux megasync命令详解

megasync是MEGA云存储的官方同步客户端,允许用户在本地计算机和MEGA云存储之间同步文件和文件夹。MEGA提供端到端加密的云存储服务,注重用户隐私和数据安全。

核心特性:端到端加密 | 大容量免费存储 | 跨平台同步 | 安全共享 | 版本控制

核心特性

端到端加密

客户端加密,只有用户能解密数据

大容量存储

免费提供20GB存储空间

双向同步

本地和云端文件实时同步

安全共享

加密共享文件和文件夹链接

版本控制

保留文件历史版本

跨平台

支持Linux, Windows, macOS, 移动端

MEGA架构与加密机制

MEGA采用客户端加密机制,所有文件在上传前在客户端加密:

# MEGA加密流程:
1. 客户端生成随机加密密钥
2. 使用AES-128算法加密文件
3. 加密密钥用用户的主密钥加密
4. 加密后的密钥和文件一起上传

# 客户端组件:
1. megasync - 同步守护进程
2. mega-cmd - 命令行工具
3. nautilus-megasync - 文件管理器集成(可选)

# 数据安全特性:
- 端到端加密(零知识架构)
- 双因素认证(2FA)支持
- 登录通知和会话管理
- 文件完整性验证

安装方法

桌面环境安装
# Ubuntu/Debian(官方仓库)
# 添加MEGA仓库
sudo apt-get install curl
curl -fsSL https://mega.nz/linux/repo/xUbuntu_22.04/Release.key | sudo gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/mega.gpg > /dev/null
sudo echo "deb https://mega.nz/linux/repo/xUbuntu_22.04/ ./" | sudo tee /etc/apt/sources.list.d/mega.list
sudo apt update
sudo apt install megasync

# 安装文件管理器集成
sudo apt install nautilus-megasync  # GNOME
# 或
sudo apt install nemo-megasync      # Cinnamon
# 或
sudo apt install dolphin-megasync   # KDE

# Fedora/RHEL
sudo dnf install megasync

# Arch Linux(AUR)
yay -S megasync-bin
# 或
yay -S megasync
命令行工具安装(mega-cmd)
# Ubuntu/Debian
sudo apt install megacmd

# 手动安装
# 下载最新版本:https://mega.nz/cmd
wget https://mega.nz/linux/repo/xUbuntu_22.04/amd64/megacmd-xUbuntu_22.04_amd64.deb
sudo dpkg -i megacmd*.deb
sudo apt install -f

# 验证安装
mega-version
mega-help

# 服务器安装(无GUI)
# 仅安装命令行工具
sudo apt install megacmd --no-install-recommends

账户设置

# 1. 登录MEGA账户
# 启动megasync并登录
# 或使用命令行登录
mega-login email@example.com

# 2. 交互式登录(会提示输入密码)
mega-login

# 3. 使用会话ID登录(避免重复登录)
# 首次登录后保存会话ID
mega-export
# 输出会话ID,保存后用于后续登录
mega-login --session=保存的会话ID

# 4. 查看账户信息
mega-user
mega-quota
mega-credit

# 5. 启用双因素认证(2FA)
# 在Web界面启用2FA
# 然后登录时使用:
mega-login email@example.com -p 密码 -m 2FA代码

# 6. 登出账户
mega-logout

# 7. 管理多个账户
# 使用不同的配置文件
mega-login email1@example.com --config=/path/to/config1
mega-login email2@example.com --config=/path/to/config2

基本命令

mega-sync
管理同步文件夹
mega-sync /local/path /remote/path
mega-ls
列出云端文件
mega-ls /
mega-put
上传文件
mega-put file.txt /Cloud
mega-get
下载文件
mega-get /Cloud/file.txt
mega-mkdir
创建远程目录
mega-mkdir /Cloud/NewFolder
mega-rm
删除远程文件
mega-rm /Cloud/file.txt
命令 描述 示例
mega-login 登录MEGA账户 mega-login user@example.com
mega-logout 登出当前账户 mega-logout
mega-whoami 显示当前登录用户 mega-whoami
mega-ls 列出云端文件和目录 mega-ls /Cloud
mega-du 显示磁盘使用情况 mega-du
mega-quota 显示存储配额 mega-quota
mega-put 上传文件到云端 mega-put file.txt
mega-get 从云端下载文件 mega-get /Cloud/file.txt
mega-sync 管理同步文件夹 mega-sync /local /remote
mega-mkdir 创建远程目录 mega-mkdir /Cloud/Documents
mega-rm 删除远程文件/目录 mega-rm /Cloud/file.txt
mega-mv 移动/重命名远程文件 mega-mv /old /new
mega-cp 复制远程文件 mega-cp /source /dest
mega-share 创建共享链接 mega-share /Cloud/file.txt
mega-export 导出文件和文件夹链接 mega-export /Cloud/file.txt
mega-import 导入共享链接 mega-import https://mega.nz/...
mega-version 显示版本信息 mega-version
mega-help 显示帮助信息 mega-help

文件同步管理

设置和管理同步文件夹
# 1. 创建同步关系(本地↔云端)
mega-sync /home/user/Documents /Cloud/Documents

# 2. 查看所有同步关系
mega-sync

# 3. 移除同步关系
mega-sync -r /home/user/Documents

# 4. 同步特定路径
mega-sync -p /home/user/Documents /Cloud/Documents

# 5. 暂停同步
mega-sync --disable /home/user/Documents

# 6. 恢复同步
mega-sync --enable /home/user/Documents

# 7. 设置排除规则(通过GUI配置)
# 图形界面:同步 -> 高级设置 -> 排除

# 8. 检查同步状态
mega-sync --status

# 9. 强制重新同步
# 删除本地.syncid文件后重启megasync
find ~/MEGA\ Sync -name ".syncid" -delete
# 或通过GUI:同步 -> 重新同步

文件操作

上传下载 基本文件传输
# 1. 上传单个文件
mega-put localfile.txt /Cloud/

# 2. 上传并重命名
mega-put localfile.txt /Cloud/remotefile.txt

# 3. 上传整个目录
mega-put -c /local/directory /Cloud/

# 4. 下载单个文件
mega-get /Cloud/file.txt

# 5. 下载到指定目录
mega-get /Cloud/file.txt /local/downloads/

# 6. 下载整个目录
mega-get -c /Cloud/directory /local/

# 7. 续传下载(自动支持)
mega-get /Cloud/largefile.iso

# 8. 限制下载速度
mega-get --speed-limit=1024 /Cloud/file.txt  # 限制为1MB/s

# 9. 上传时排除某些文件
mega-put --exclude="*.tmp,*.log" /local/ /Cloud/
远程管理 云端文件管理
# 1. 列出云端文件(详细模式)
mega-ls -l /
mega-ls -lh /Cloud  # 人类可读格式

# 2. 递归列出目录
mega-ls -r /Cloud/Documents

# 3. 查找文件
mega-find filename.txt
mega-find "*.pdf"

# 4. 创建目录
mega-mkdir /Cloud/NewFolder
mega-mkdir -p /Cloud/Parent/Child/Grandchild  # 创建多级目录

# 5. 移动/重命名文件
mega-mv /Cloud/oldname.txt /Cloud/newname.txt
mega-mv /Cloud/file.txt /Cloud/OtherFolder/

# 6. 复制文件
mega-cp /Cloud/source.txt /Cloud/backup.txt

# 7. 删除文件
mega-rm /Cloud/unwanted.txt

# 8. 递归删除目录
mega-rm -r /Cloud/OldFolder

# 9. 清空回收站
mega-rm --recycle --empty

文件共享

# 1. 创建共享链接(只读)
mega-share /Cloud/Document.pdf
# 输出:https://mega.nz/file/xxxxxxxx#yyyyyyyyyyyyyyyyyyyyyyyy

# 2. 创建文件夹共享链接
mega-share -a /Cloud/SharedFolder

# 3. 创建带密码的共享链接
mega-share -p "mypassword" /Cloud/SecureFile.txt

# 4. 设置链接过期时间
mega-share -e "2024-12-31" /Cloud/TemporaryFile.txt

# 5. 创建可写共享链接(上传链接)
mega-share -w /Cloud/UploadFolder

# 6. 查看所有共享链接
mega-share --list

# 7. 移除共享链接
mega-share -d /Cloud/Document.pdf

# 8. 导入共享链接(保存到自己的云盘)
mega-import https://mega.nz/file/xxxxxxxx#yyyyyyyyyyyyyyyyyyyyyyyy

# 9. 导出解密密钥(允许他人下载加密文件)
mega-export -d /Cloud/EncryptedFile.txt
# 输出包含解密密钥的链接

备份管理

# 1. 设置定期备份(通过GUI)
# 图形界面:备份 -> 添加备份

# 2. 命令行备份脚本示例
#!/bin/bash
# mega-backup.sh
BACKUP_SRC="/home/user/important-data"
BACKUP_DEST="/Cloud/Backups/$(date +%Y%m%d)"
BACKUP_FILE="backup-$(date +%Y%m%d_%H%M%S).tar.gz"

# 登录MEGA(使用会话ID避免密码)
mega-login --session=保存的会话ID

# 创建备份目录
mega-mkdir -p /Cloud/Backups
mega-mkdir -p "$BACKUP_DEST"

# 创建本地备份
tar -czf "/tmp/$BACKUP_FILE" "$BACKUP_SRC"

# 上传到MEGA
mega-put "/tmp/$BACKUP_FILE" "$BACKUP_DEST/"

# 清理本地临时文件
rm "/tmp/$BACKUP_FILE"

# 清理旧备份(保留最近7天)
# 需要先列出目录,然后删除旧文件

echo "备份完成: $BACKUP_DEST/$BACKUP_FILE"

# 3. 启用版本控制(通过Web界面)
# 网页版:文件属性 -> 版本控制

# 4. 恢复文件版本
# 网页版:右键文件 -> 查看版本 -> 恢复

高级配置

网络配置 代理和速度限制
# 1. 设置代理服务器(通过GUI)
# 图形界面:设置 -> 高级 -> 代理

# 2. 配置文件位置
# 主配置文件
~/.local/share/data/Mega Limited/MEGAsync/
# 或
~/.config/megasync/

# 3. 网络速度限制
# 图形界面:设置 -> 带宽 -> 限制上传/下载速度

# 4. 并行传输设置
# 修改配置文件增加并行连接数
# 编辑 ~/.config/megasync/syncs.cfg
# 添加:maxConnections=8

# 5. 调整缓存大小
# 编辑 ~/.config/megasync/megasync.cfg
# 添加:cacheSize=512  # 单位MB

# 6. 启用详细日志
# 启动时添加参数
megasync --debug

# 7. 查看日志文件
tail -f ~/.local/share/data/Mega\ Limited/MEGAsync/megasync.log

# 8. 重置配置(谨慎操作)
# 停止megasync,删除配置文件后重启
megasync --stop
rm -rf ~/.config/megasync/
rm -rf ~/.local/share/data/Mega\ Limited/MEGAsync/
megasync &
脚本自动化 使用mega-cmd-server
# 1. 启动mega-cmd-server(后台服务)
mega-cmd-server &

# 2. 使用mega-exec发送命令
mega-exec "ls /"

# 3. 自动化脚本示例
#!/bin/bash
# mega-automation.sh
SERVER_PID=""

# 启动服务器
start_server() {
    mega-cmd-server &
    SERVER_PID=$!
    sleep 3  # 等待服务器启动
    echo "MEGA-CMD服务器已启动,PID: $SERVER_PID"
}

# 执行MEGA命令
run_mega_cmd() {
    mega-exec "$1"
}

# 主脚本
start_server

# 登录
run_mega_cmd "login user@example.com"

# 上传文件
run_mega_cmd "put /local/file.txt /Cloud/"

# 创建共享链接
run_mega_cmd "share /Cloud/file.txt"

# 停止服务器
kill $SERVER_PID
echo "MEGA-CMD服务器已停止"

# 4. 使用WebSocket接口(高级)
# mega-cmd-server支持WebSocket接口
# 端口:7634
# 可用于远程控制和监控

故障排除

同步问题
# 文件不同步
# 解决方案:
# 1. 检查服务状态
ps aux | grep megasync

# 2. 重启服务
megasync --stop
megasync &

# 3. 检查网络连接
ping mega.nz
curl -I https://mega.nz

# 4. 检查磁盘空间
df -h ~/
df -h ~/MEGA\ Sync/

# 5. 重置同步数据库
# 删除.syncid文件
find ~/MEGA\ Sync -name ".syncid" -delete
# 重启megasync
登录问题
# 无法登录
# 解决方案:
# 1. 检查凭据
mega-login --verbose

# 2. 重置密码(通过Web界面)
# https://mega.nz/recovery

# 3. 检查2FA设置
# 确保使用正确的2FA代码

# 4. 清除登录缓存
rm -rf ~/.megaCmd
rm -rf ~/.local/share/data/Mega\ Limited/

# 5. 使用会话ID登录
mega-login --session=保存的会话ID
性能问题
# 同步速度慢
# 解决方案:
# 1. 调整带宽限制
# GUI:设置 -> 带宽

# 2. 减少同步文件夹数量
mega-sync --list
# 移除不必要的同步

# 3. 排除大文件
# GUI:同步 -> 高级设置 -> 排除

# 4. 增加并行连接
# 编辑配置文件增加maxConnections

# 5. 检查系统资源
top -u $USER
iotop
配置问题
# 配置错误
# 解决方案:
# 1. 验证配置文件
ls -la ~/.config/megasync/
ls -la ~/.local/share/data/Mega\ Limited/

# 2. 重置配置
megasync --stop
cp -r ~/.config/megasync/ ~/.config/megasync.backup/
rm -rf ~/.config/megasync/
megasync &

# 3. 重新链接同步文件夹
# 需要重新设置所有同步关系

# 4. 查看错误日志
tail -f ~/.local/share/data/Mega\ Limited/MEGAsync/error.log

监控脚本

#!/bin/bash
# mega-monitor.sh
LOG_FILE="/var/log/mega-monitor.log"
ALERT_EMAIL="admin@example.com"

# 检查megasync进程
check_process() {
    if ! pgrep -x "megasync" > /dev/null; then
        echo "[$(date)] megasync进程未运行,尝试启动..." >> "$LOG_FILE"
        megasync &
        sleep 5

        if pgrep -x "megasync" > /dev/null; then
            echo "[$(date)] megasync启动成功" >> "$LOG_FILE"
        else
            echo "[$(date)] megasync启动失败" >> "$LOG_FILE"
            send_alert "megasync进程启动失败"
        fi
    fi
}

# 检查同步状态
check_sync_status() {
    # 通过检查同步文件夹的.syncid文件来判断
    for sync_dir in ~/MEGA\ Sync/*/; do
        if [ -d "$sync_dir" ]; then
            sync_id_file="$sync_dir/.syncid"
            if [ -f "$sync_id_file" ]; then
                echo "[$(date)] 同步正常: $sync_dir" >> "$LOG_FILE"
            else
                echo "[$(date)] 同步可能有问题: $sync_dir" >> "$LOG_FILE"
            fi
        fi
    done
}

# 检查磁盘空间
check_disk_space() {
    mega_usage=$(du -sh ~/MEGA\ Sync/ 2>/dev/null | awk '{print $1}')
    local_usage=$(df -h ~/ | tail -1 | awk '{print $5}' | sed 's/%//')

    echo "[$(date)] MEGA同步文件夹大小: $mega_usage" >> "$LOG_FILE"

    if [ "$local_usage" -gt 90 ]; then
        echo "[$(date)] 本地磁盘空间不足: $local_usage%" >> "$LOG_FILE"
        send_alert "磁盘空间不足: $local_usage%"
    fi
}

# 检查云端配额
check_quota() {
    if command -v mega-quota &> /dev/null; then
        quota_info=$(mega-quota 2>/dev/null)
        if [ $? -eq 0 ]; then
            echo "[$(date)] 云端配额: $quota_info" >> "$LOG_FILE"
        fi
    fi
}

# 发送警报
send_alert() {
    local message="$1"
    if command -v mail &> /dev/null; then
        echo "$message" | mail -s "MEGA监控警报" "$ALERT_EMAIL"
    fi
}

# 主监控循环
main() {
    echo "=== MEGA监控开始 ===" >> "$LOG_FILE"

    check_process
    check_sync_status
    check_disk_space
    check_quota

    echo "=== MEGA监控结束 ===" >> "$LOG_FILE"
}

# 执行监控
main

与其他工具对比

特性对比 MEGA Dropbox Nextcloud
加密方式 端到端加密 传输加密 可选端到端加密
免费存储 20GB 2GB 自托管无限
开源 部分开源 闭源 完全开源
共享功能 加密共享链接 共享链接 多种共享方式
命令行工具 mega-cmd dropbox-cli 通过WebDAV/API
版本控制 支持 支持 支持
适用场景 注重隐私的个人/团队存储 主流云存储、团队协作 自托管、完全控制数据
最佳实践
  • 定期备份MEGA配置文件和同步设置
  • 为重要文件启用版本控制,防止误删或误改
  • 使用强密码并启用双因素认证(2FA)保护账户
  • 敏感文件使用MEGA的端到端加密功能
  • 合理设置带宽限制,避免影响其他网络应用
  • 定期清理不再需要的共享链接
  • 监控存储使用情况,避免超出配额
  • 在不同设备间使用会话ID登录,避免重复输入密码
安全建议
  • 永远不要分享您的MEGA主密钥或恢复密钥
  • 定期检查已登录的设备,及时注销不使用的设备
  • 为共享链接设置密码和过期时间
  • 避免在公共计算机上登录MEGA账户
  • 使用密码管理器生成和存储强密码
  • 定期更新MEGA客户端,获取安全修复
  • 监控账户活动,发现异常及时更改密码
  • 对于极其敏感的数据,考虑使用本地加密后再上传

实用脚本示例

MEGA批量上传脚本
#!/bin/bash
# mega-batch-upload.sh
UPLOAD_DIR="/home/user/uploads"
MEGA_DEST="/Cloud/Uploads/$(date +%Y%m%d)"
LOG_FILE="/var/log/mega-upload.log"

# 登录MEGA
echo "[$(date)] 登录MEGA..." >> "$LOG_FILE"
mega-login --session=保存的会话ID 2>&1 >> "$LOG_FILE"

if [ $? -ne 0 ]; then
    echo "[$(date)] 登录失败" >> "$LOG_FILE"
    exit 1
fi

# 创建目标目录
echo "[$(date)] 创建目录: $MEGA_DEST" >> "$LOG_FILE"
mega-mkdir -p "$MEGA_DEST" 2>&1 >> "$LOG_FILE"

# 上传所有文件
echo "[$(date)] 开始上传文件..." >> "$LOG_FILE"
for file in "$UPLOAD_DIR"/*; do
    if [ -f "$file" ]; then
        filename=$(basename "$file")
        echo "[$(date)] 上传: $filename" >> "$LOG_FILE"

        mega-put "$file" "$MEGA_DEST/" 2>&1 >> "$LOG_FILE"

        if [ $? -eq 0 ]; then
            echo "[$(date)] 成功: $filename" >> "$LOG_FILE"
            # 可选:上传成功后移动或删除本地文件
            # mv "$file" "$UPLOAD_DIR/processed/"
        else
            echo "[$(date)] 失败: $filename" >> "$LOG_FILE"
        fi
    fi
done

echo "[$(date)] 批量上传完成" >> "$LOG_FILE"

# 登出(可选)
# mega-logout
MEGA同步状态报告
#!/bin/bash
# mega-status-report.sh
REPORT_FILE="$HOME/MEGA-Reports/report-$(date +%Y%m%d).txt"
LOG_DIR="$HOME/MEGA-Reports/logs"

mkdir -p "$(dirname "$REPORT_FILE")"
mkdir -p "$LOG_DIR"

echo "=== MEGA同步状态报告 ===" > "$REPORT_FILE"
echo "生成时间: $(date)" >> "$REPORT_FILE"
echo "=========================" >> "$REPORT_FILE"

# 1. 检查进程状态
echo -e "\n1. 进程状态:" >> "$REPORT_FILE"
if pgrep -x "megasync" > /dev/null; then
    echo "   ✓ megasync正在运行" >> "$REPORT_FILE"
    echo "   PID: $(pgrep -x "megasync")" >> "$REPORT_FILE"
else
    echo "   ✗ megasync未运行" >> "$REPORT_FILE"
fi

# 2. 同步文件夹状态
echo -e "\n2. 同步文件夹:" >> "$REPORT_FILE"
find ~/MEGA\ Sync -maxdepth 2 -name ".syncid" -exec dirname {} \; 2>/dev/null | while read dir; do
    size=$(du -sh "$dir" 2>/dev/null | cut -f1)
    echo "   - $dir ($size)" >> "$REPORT_FILE"
done

# 3. 本地磁盘使用
echo -e "\n3. 本地磁盘使用:" >> "$REPORT_FILE"
df -h ~/ | grep -v Filesystem >> "$REPORT_FILE"

# 4. MEGA文件夹大小
echo -e "\n4. MEGA同步文件夹总大小:" >> "$REPORT_FILE"
du -sh ~/MEGA\ Sync/ 2>/dev/null >> "$REPORT_FILE" || echo "   文件夹不存在" >> "$REPORT_FILE"

# 5. 检查云端配额(如果已登录)
if command -v mega-quota &> /dev/null; then
    echo -e "\n5. 云端配额:" >> "$REPORT_FILE"
    mega-quota 2>/dev/null >> "$REPORT_FILE" || echo "   未登录或无法获取" >> "$REPORT_FILE"
fi

# 6. 最近修改的文件
echo -e "\n6. 最近修改的文件(最近24小时):" >> "$REPORT_FILE"
find ~/MEGA\ Sync -type f -mtime -1 -exec ls -lh {} \; 2>/dev/null | head -10 >> "$REPORT_FILE"

echo -e "\n=== 报告结束 ===" >> "$REPORT_FILE"

# 记录日志
cp "$REPORT_FILE" "$LOG_DIR/"

echo "报告已生成: $REPORT_FILE"
echo "日志已保存到: $LOG_DIR/"