Linux Dropbox命令详解

Dropbox是一个云存储和文件同步服务,允许用户在多个设备之间同步和共享文件。除了图形界面外,Dropbox还提供了命令行工具(Dropbox CLI),便于在服务器和终端环境中管理文件同步。

核心特性:云存储同步 | 跨平台支持 | 版本历史 | 文件共享 | 选择性同步

核心特性

实时同步

文件更改实时同步到云端和设备

版本历史

保留文件历史版本(30天或更长)

文件共享

轻松共享文件和文件夹链接

跨平台

支持Linux, Windows, macOS, iOS, Android

安全存储

256位AES加密传输和存储

命令行工具

完整的CLI用于自动化管理

Dropbox架构

Dropbox客户端采用客户端-服务器架构,本地守护进程与云端服务器同步:

# Dropbox组件结构
1. Dropbox守护进程 (dropboxd) - 核心同步引擎
2. Dropbox CLI (dropbox) - 命令行控制工具
3. Nautilus集成 - 文件管理器集成(可选)
4. 系统托盘图标 - 状态指示器(GUI环境)

# 数据流向:
本地文件 ↔ Dropbox守护进程 ↔ Dropbox云服务器 ↔ 其他设备

# 默认目录结构:
~/Dropbox/                     # 主同步目录
~/.dropbox/                    # 配置和缓存目录
~/.dropbox-dist/               # Dropbox程序文件
/var/lib/dropbox/              # 系统级安装(某些发行版)

安装方法

Headless服务器安装(无GUI)
# 方法1:使用官方脚本安装(推荐)
cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -

# 方法2:使用包管理器(部分发行版)
# Ubuntu/Debian
sudo apt update
sudo apt install dropbox
# 或下载.deb包手动安装
wget https://www.dropbox.com/download?dl=packages/ubuntu/dropbox_2020.03.04_amd64.deb
sudo dpkg -i dropbox*.deb

# 启动Dropbox守护进程
~/.dropbox-dist/dropboxd

# 方法3:使用Python脚本(旧方法)
cd ~ && wget -O - "https://www.dropbox.com/download?dl=packages/dropbox.py" > dropbox.py
chmod +x dropbox.py

# 安装CLI工具
sudo cp dropbox.py /usr/local/bin/dropbox
# 或
sudo mv dropbox.py /usr/local/bin/dropbox-cli
桌面环境安装
# Ubuntu/Debian(桌面版)
sudo apt update
sudo apt install nautilus-dropbox

# Fedora
sudo dnf install nautilus-dropbox

# Arch Linux
sudo pacman -S dropbox
# 或从AUR安装
yay -S dropbox

# 安装后启动
dropbox start -i  # -i 参数会安装系统托盘图标

# 验证安装
dropbox status
dropbox version

账户设置

# 1. 首次运行需要链接账户
# 启动Dropbox守护进程
~/.dropbox-dist/dropboxd

# 2. 控制台会显示链接URL,复制到浏览器中登录
# 示例输出:
# This computer isn't linked to any Dropbox account...
# Please visit https://www.dropbox.com/cli_link?host_id=XXX to link this device.

# 3. 或者使用已有账户的配置文件(迁移时有用)
# 停止Dropbox
dropbox stop
# 复制配置文件
cp -r ~/.dropbox ~/.dropbox.bak
# 从其他机器复制以下文件:
# ~/.dropbox/instance1/(包含config.db和hostkeys)
# ~/.dropbox/instance1/config.dbx(加密配置文件)

# 4. 查看账户信息
dropbox lansync  # 查看LAN同步状态
dropbox proxy    # 查看代理设置

# 5. 切换账户(需要先卸载)
dropbox stop
rm -rf ~/.dropbox
~/.dropbox-dist/dropboxd  # 重新链接新账户

基本命令

dropbox start
启动Dropbox守护进程
dropbox start
dropbox stop
停止Dropbox守护进程
dropbox stop
dropbox status
查看同步状态
dropbox status
dropbox autostart
管理开机自启
dropbox autostart y
dropbox exclude
管理排除目录
dropbox exclude add ~/Dropbox/Downloads
dropbox ls
列出Dropbox文件
dropbox ls
命令 描述 示例
dropbox start 启动Dropbox守护进程 dropbox start
dropbox stop 停止Dropbox守护进程 dropbox stop
dropbox status 显示当前同步状态 dropbox status
dropbox autostart 启用/禁用开机自启 dropbox autostart y
dropbox exclude 管理排除的文件夹 dropbox exclude list
dropbox ls 列出Dropbox中的文件 dropbox ls /Photos
dropbox filestatus 查看文件同步状态 dropbox filestatus ~/Dropbox/file.txt
dropbox sharelink 创建共享链接 dropbox sharelink ~/Dropbox/file.txt
dropbox puburl 创建公开链接(已弃用) dropbox puburl ~/Dropbox/file.txt
dropbox proxy 设置代理服务器 dropbox proxy manual http://proxy:8080
dropbox lansync 启用/禁用LAN同步 dropbox lansync y
dropbox throttle 设置上传/下载速度限制 dropbox throttle 1024 2048
dropbox version 显示版本信息 dropbox version
dropbox help 显示帮助信息 dropbox help
dropbox running 检查Dropbox是否在运行 dropbox running
dropbox autoupdate 管理自动更新 dropbox autoupdate status

选择性同步

管理同步的文件夹
# 1. 查看当前排除的文件夹
dropbox exclude list

# 2. 排除文件夹(不再同步到本地)
dropbox exclude add ~/Dropbox/Videos
dropbox exclude add ~/Dropbox/Backups

# 3. 重新包含文件夹(恢复同步)
dropbox exclude remove ~/Dropbox/Videos

# 4. 批量排除多个文件夹
for folder in Videos Music Downloads; do
    dropbox exclude add ~/Dropbox/$folder
done

# 5. 查看排除状态
dropbox exclude list

# 6. 选择性同步的配置文件位置
# ~/.dropbox/instance1/config.dbx
# 可以使用sqlite3查看
sqlite3 ~/.dropbox/instance1/config.dbx "SELECT * FROM selective_sync;"

# 7. 通过API管理选择性同步(高级)
# 停止Dropbox后编辑配置文件
dropbox stop
# 编辑配置文件(谨慎操作)
# 配置文件格式为JSON,包含excluded_folders列表

文件共享

# 1. 创建共享链接(需要网络连接)
dropbox sharelink ~/Dropbox/Documents/report.pdf
# 输出:https://www.dropbox.com/s/xxxxxxxxx/report.pdf?dl=0

# 2. 共享整个文件夹
dropbox sharelink ~/Dropbox/Projects/

# 3. 创建直接下载链接(替换dl=0为dl=1)
# 原始链接: https://www.dropbox.com/s/xxxxxxxxx/file.zip?dl=0
# 下载链接: https://www.dropbox.com/s/xxxxxxxxx/file.zip?dl=1

# 4. 使用API创建共享链接(curl示例)
# 需要访问令牌
ACCESS_TOKEN="your_access_token"
curl -X POST https://api.dropboxapi.com/2/sharing/create_shared_link_with_settings \
  --header "Authorization: Bearer $ACCESS_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{"path":"/file.txt"}'

# 5. 查看共享链接列表
curl -X POST https://api.dropboxapi.com/2/sharing/list_shared_links \
  --header "Authorization: Bearer $ACCESS_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{}' | jq .

# 6. 撤销共享链接
curl -X POST https://api.dropboxapi.com/2/sharing/revoke_shared_link \
  --header "Authorization: Bearer $ACCESS_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{"url":"https://www.dropbox.com/s/xxxxxxxxx/file.txt?dl=0"}'

高级配置

网络配置 代理和带宽限制
# 1. 设置代理服务器
# 无代理
dropbox proxy none

# 自动检测
dropbox proxy auto

# 手动设置HTTP代理
dropbox proxy manual http://proxy.example.com:8080

# 手动设置SOCKS5代理
dropbox proxy manual socks5://proxy.example.com:1080

# 需要认证的代理
dropbox proxy manual http://user:pass@proxy.example.com:8080

# 2. 带宽限制
# 设置上传限制(KB/s)
dropbox throttle 1024
# 设置下载限制(KB/s)
dropbox throttle 1024 2048  # 上传1024KB/s,下载2048KB/s

# 3. 禁用带宽限制
dropbox throttle

# 4. 启用LAN同步(加速局域网内设备同步)
dropbox lansync y

# 5. 查看当前网络设置
dropbox proxy
dropbox throttle
dropbox lansync
自动管理 启动和更新配置
# 1. 开机自动启动
dropbox autostart y    # 启用
dropbox autostart n    # 禁用
dropbox autostart      # 查看状态

# 2. 自动更新管理
dropbox autoupdate status  # 查看更新状态
dropbox autoupdate on     # 启用自动更新
dropbox autoupdate off    # 禁用自动更新

# 3. 手动检查更新
# Dropbox会自动检查更新,也可手动触发
# 重启Dropbox服务通常会触发更新检查

# 4. 查看当前版本
dropbox version

# 5. 系统服务配置(systemd)
# 创建服务文件
sudo tee /etc/systemd/system/dropbox.service << EOF
[Unit]
Description=Dropbox Service
After=network.target

[Service]
Type=simple
User=$USER
ExecStart=$HOME/.dropbox-dist/dropboxd
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

# 启用并启动服务
sudo systemctl daemon-reload
sudo systemctl enable dropbox
sudo systemctl start dropbox
sudo systemctl status dropbox

API集成

# 1. 获取访问令牌
# 访问 https://www.dropbox.com/developers/apps
# 创建应用 -> 选择权限 -> 获取访问令牌

# 2. 基本API调用示例
ACCESS_TOKEN="your_access_token"

# 上传文件
curl -X POST https://content.dropboxapi.com/2/files/upload \
  --header "Authorization: Bearer $ACCESS_TOKEN" \
  --header "Dropbox-API-Arg: {\"path\": \"/test.txt\",\"mode\": \"add\",\"autorename\": true,\"mute\": false}" \
  --header "Content-Type: application/octet-stream" \
  --data-binary @localfile.txt

# 下载文件
curl -X POST https://content.dropboxapi.com/2/files/download \
  --header "Authorization: Bearer $ACCESS_TOKEN" \
  --header "Dropbox-API-Arg: {\"path\": \"/test.txt\"}" \
  -o downloaded.txt

# 列出文件
curl -X POST https://api.dropboxapi.com/2/files/list_folder \
  --header "Authorization: Bearer $ACCESS_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{"path": "","recursive": false,"include_media_info": false,"include_deleted": false}' | jq .

# 3. 使用Python SDK
pip install dropbox

# Python示例
import dropbox
dbx = dropbox.Dropbox(ACCESS_TOKEN)

# 上传文件
with open("localfile.txt", "rb") as f:
    dbx.files_upload(f.read(), "/test.txt")

# 列出文件
for entry in dbx.files_list_folder("").entries:
    print(entry.name)

# 4. 监控Dropbox事件(使用webhooks)
# 配置webhook接收器,监听文件变化
# 参考:https://www.dropbox.com/developers/reference/webhooks

故障排除

同步问题
# 文件不同步
# 解决方案:
# 1. 检查状态
dropbox status

# 2. 重新索引
dropbox stop
rm -rf ~/.dropbox/instance1/cache*
dropbox start

# 3. 检查磁盘空间
df -h ~/
df -h ~/Dropbox

# 4. 检查文件权限
ls -la ~/Dropbox/
chmod 755 ~/Dropbox

# 5. 查看详细日志
tail -f ~/.dropbox/error.log
tail -f ~/.dropbox/dropbox.log
连接问题
# 无法连接服务器
# 解决方案:
# 1. 检查网络连接
ping dropbox.com

# 2. 检查代理设置
dropbox proxy

# 3. 检查防火墙
sudo ufw status
# 允许Dropbox端口
sudo ufw allow out 443/tcp
sudo ufw allow out 80/tcp

# 4. 重置网络配置
dropbox proxy none
dropbox lansync y

# 5. 检查DNS
nslookup dropbox.com
# 或使用Google DNS
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
性能问题
# 同步速度慢
# 解决方案:
# 1. 调整带宽限制
dropbox throttle 2048 4096

# 2. 启用LAN同步
dropbox lansync y

# 3. 排除大文件夹
dropbox exclude add ~/Dropbox/Videos

# 4. 清理缓存
dropbox stop
rm -rf ~/.dropbox/instance1/cache*
# 注意:这会导致重新索引,首次较慢

# 5. 检查系统资源
top -u $USER
iotop
配置问题
# 配置错误或损坏
# 解决方案:
# 1. 验证配置文件
ls -la ~/.dropbox/
# 检查config.dbx文件是否存在

# 2. 重新链接账户
dropbox stop
rm -rf ~/.dropbox
~/.dropbox-dist/dropboxd

# 3. 重新安装CLI
cd ~ && wget -O - "https://www.dropbox.com/download?dl=packages/dropbox.py" > dropbox.py
chmod +x dropbox.py
sudo cp dropbox.py /usr/local/bin/dropbox

# 4. 查看帮助
dropbox help
dropbox --help

监控脚本

#!/bin/bash
# dropbox-monitor.sh - 监控Dropbox状态
LOG_FILE="/var/log/dropbox-monitor.log"
ALERT_EMAIL="admin@example.com"
MAX_RETRIES=3

# 检查Dropbox状态
check_dropbox() {
    if ! dropbox running; then
        echo "[$(date)] Dropbox未运行,尝试启动..." >> "$LOG_FILE"
        dropbox start

        # 等待并检查
        sleep 10
        if dropbox running; then
            echo "[$(date)] Dropbox启动成功" >> "$LOG_FILE"
        else
            echo "[$(date)] Dropbox启动失败" >> "$LOG_FILE"
            send_alert "Dropbox服务启动失败"
        fi
    fi
}

# 检查同步状态
check_sync_status() {
    local status=$(dropbox status | head -1)

    if [[ "$status" == *"Up to date"* ]]; then
        echo "[$(date)] 同步状态正常: $status" >> "$LOG_FILE"
    elif [[ "$status" == *"Syncing"* ]]; then
        echo "[$(date)] 正在同步: $status" >> "$LOG_FILE"
    elif [[ "$status" == *"Connecting"* ]]; then
        echo "[$(date)] 正在连接: $status" >> "$LOG_FILE"
    else
        echo "[$(date)] 同步状态异常: $status" >> "$LOG_FILE"
        send_alert "Dropbox同步状态异常: $status"
    fi
}

# 检查磁盘空间
check_disk_space() {
    local usage=$(df -h ~/ | tail -1 | awk '{print $5}' | sed 's/%//')

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

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

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

    check_dropbox
    check_sync_status
    check_disk_space

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

# 执行监控
main

与其他工具对比

特性对比 Dropbox Nextcloud Syncthing
架构 云存储服务 自托管 P2P去中心化
成本 免费有限,付费扩容 免费(自备服务器) 完全免费
隐私控制 数据在第三方服务器 数据完全自主控制 端到端加密
版本历史 30天(免费)或更长 可配置 内置版本控制
选择性同步 支持 支持 支持
命令行工具 功能完整 通过WebDAV/API API和CLI
适用场景 个人/团队云存储、文件共享 企业自建云盘、团队协作 多设备直接同步、隐私保护
最佳实践
  • 定期检查同步状态,确保文件同步正常
  • 为重要文件启用版本历史,防止误删或误改
  • 使用选择性同步,避免同步不必要的大文件
  • 设置合理的带宽限制,避免影响其他网络应用
  • 定期备份Dropbox配置文件(~/.dropbox目录)
  • 敏感文件建议先加密再上传到云端
  • 使用强密码并启用两步验证保护账户安全
  • 定期清理不再需要的共享链接
安全建议
  • 启用Dropbox的两步验证(2FA)增强账户安全
  • 定期审查已连接的设备和应用程序
  • 不在公共计算机上保持Dropbox登录状态
  • 敏感文件使用加密工具(如Cryptomator)加密后再同步
  • 定期检查账户活动日志,发现异常及时处理
  • 共享链接设置密码和过期时间(Dropbox专业版功能)
  • 使用企业版Dropbox可以设置数据保留策略和合规性控制

实用脚本示例

自动备份到Dropbox
#!/bin/bash
# dropbox-backup.sh
BACKUP_SRC="/home/user/important-data"
BACKUP_DEST="$HOME/Dropbox/Backups"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="backup-$DATE.tar.gz"

# 检查Dropbox状态
if ! dropbox running; then
    echo "Dropbox未运行,启动中..."
    dropbox start
    sleep 30
fi

# 创建备份
echo "创建备份: $BACKUP_FILE"
tar -czf "/tmp/$BACKUP_FILE" "$BACKUP_SRC"

# 移动到Dropbox目录
mv "/tmp/$BACKUP_FILE" "$BACKUP_DEST/"

# 检查同步状态
sleep 10
if dropbox filestatus "$BACKUP_DEST/$BACKUP_FILE" | grep -q "up to date"; then
    echo "备份已同步到Dropbox: $BACKUP_DEST/$BACKUP_FILE"

    # 清理旧备份(保留最近7天)
    find "$BACKUP_DEST" -name "backup-*.tar.gz" -mtime +7 -delete
    echo "已清理7天前的旧备份"
else
    echo "警告:备份文件可能尚未同步完成"
fi
Dropbox同步状态报告
#!/bin/bash
# dropbox-report.sh
REPORT_FILE="$HOME/Dropbox-Reports/report-$(date +%Y%m%d).txt"
LOG_DIR="$HOME/Dropbox-Reports/logs"

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

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

# 1. 检查Dropbox运行状态
echo -e "\n1. 运行状态:" >> "$REPORT_FILE"
if dropbox running; then
    echo "   ✓ Dropbox正在运行" >> "$REPORT_FILE"
else
    echo "   ✗ Dropbox未运行" >> "$REPORT_FILE"
fi

# 2. 同步状态
echo -e "\n2. 同步状态:" >> "$REPORT_FILE"
dropbox status >> "$REPORT_FILE" 2>&1

# 3. 排除的文件夹
echo -e "\n3. 排除的文件夹:" >> "$REPORT_FILE"
dropbox exclude list >> "$REPORT_FILE" 2>&1

# 4. 磁盘使用情况
echo -e "\n4. 磁盘使用情况:" >> "$REPORT_FILE"
df -h ~/ | grep -v Filesystem >> "$REPORT_FILE"

# 5. Dropbox文件夹大小
echo -e "\n5. Dropbox文件夹大小:" >> "$REPORT_FILE"
du -sh ~/Dropbox/ 2>/dev/null || echo "Dropbox文件夹不存在" >> "$REPORT_FILE"

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

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

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

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