是否可以查看 dropboxd 现在正在同步的内容?

Pau*_*aul 5 linux dropbox

linux 上 dropboxd 的 dropbox.py 脚本将给出当前状态:

$ dropbox.py status 
Syncing (2,656 files remaining)
Uploading 2,656 files...  
Run Code Online (Sandbox Code Playgroud)

或特定文件或当前文件夹的状态:

$ dropbox.py filestatus 
Camera Uploads:     up to date 
Customer Shares:    syncing
Run Code Online (Sandbox Code Playgroud)

但是有没有办法查看现在实际上正在传输哪些文件?

我问的原因是 Dropbox 已经被卡住了几天同步但没有进展。我怀疑它被卡在一些奇怪的大或损坏的文件上,如果我能识别它,我可以删除它/忽略它。

笔记

$ ls -l /proc/7857/fd
Run Code Online (Sandbox Code Playgroud)

其中 7857 是 dropbox 的 pid,同步路径中不显示任何文件。

需要注意的是需要dropboxd和重新执行的停止使用调试器并没有透露什么传输现在。停止和启动守护进程会导致重新索引和重新开始同步。这可能会导致要传输的文件集不同。

有什么建议?

tuk*_*kan 4

如果你使用的是linux,这很容易。在同步过程中您可以执行以下操作:

\n\n

find $HOME/dropbox_sync_dir -type f -exec dropbox.py file status -a \'{}\' \\; | grep \'syncing\'

\n\n

解释细节:

\n\n
    \n
  • find <path> -type f -exec dropbox.py ... \'{}\' \\;
  • \n
\n\n

dropbox.py 在每个文件或当前目录下 运行。

\n\n
\n

请注意,大括号括在单引号中,以防止它们被解释为 shell 脚本标点符号。分号同样通过使用反斜杠进行保护,尽管在这种情况下也可以使用单引号。

\n
\n\n

有关man find页面的更多信息

\n\n
    \n
  • dropbox.py file status -a来自dropbox Linux 客户端手册

    \n\n
    dropbox file status  [-l] [-a] [FILE]\xe2\x80\xa6\n\nPrints the current status of each FILE.\n\n  Options:\n\n   -l or --list prints out information in a format similar to the native Linux command ls.\n   -a or --all do not ignore entries starting with "."\n
    Run Code Online (Sandbox Code Playgroud)\n\n

    别名包括 stat。

  • \n
  • | grep \'syncing\'

  • \n
\n\n

搜索“正在同步”字符串。

\n\n

注意:.py 结尾不应该是强制性的,应该有一个别名,所以只写就dropbox足够了。

\n\n

第一次编辑- 由于 Paul 对 dropboxd(守护进程)与 dropbox.py 的评论而重新编辑。

\n\n

这仍然是找出正在传输的内容的最可能的方法。

\n\n

当我完成待处理的任务时,我会尝试自己调试它。

\n\n

应该通过(python 调试器)dropbox.py进行调试,以了解更多信息,请访问python debuggerpdb

\n\n

终于在保罗的评论之后我明白了问题的核心在哪里。他想要查看当前访问的文件,甚至是 Dropbox 同步客户端正在传输的文件。

\n\n
    \n
  • 您可以找到当前使用的 Dropbox 客户端使用的所有文件:

    \n\n
    ls -thal /proc/`pgrep dropbox`/fd | egrep -v \'socket:|pipe:|anon_inode|/dev/\'\n
    Run Code Online (Sandbox Code Playgroud)
  • \n
  • 如果您看不到任何内容,则表示客户端可能\n有问题。我建议执行strace

    \n\n
    To monitor your dropboxd script with output save into output.txt file:\n`strace -o output.txt dropboxd`\n\nTo monitor only system calls you could enter:\n`strace -e open dropboxd`\n
    Run Code Online (Sandbox Code Playgroud)
  • \n
  • 如果您想更深入,您可以将调试器附加gdb到您的strace会话中。

    \n\n

    如果您不熟悉这个过程,您可以查看,例如,这篇关于unixstracegdb.

  • \n
\n\n

只是一个快速帮助:

\n\n

当您使用以下命令开始跟踪时:(strace dropboxd运行 pid 将为 501)\n然后您可以通过以下方式附加到它:

\n\n
$ gdb --quiet\n(gdb) attach 501\n
Run Code Online (Sandbox Code Playgroud)\n\n
    \n
  • 如果其他方法均失败,您可以使用其他方法来同步您的 Dropbox:
  • \n
\n\n

例如,使用不同的 cli 客户端,例如dbxcli

\n\n

第二次编辑和第四次编辑- 在 Dropbox 支持自己的私钥之前不会工作。

\n\n

来自 dropbox 支持的回答:

\n\n

Dropbox 不支持创建您自己的私钥。

\n\n

我突然想到,即使通过网络监控工具(如 )也应该可以检查传输的内容wireshark

\n\n

由于 Dropbox 客户端使用 SSL/TSL(或 AES)Dropbox 安全架构,因此您应该拥有要检查的密钥。

\n\n

有关如何使用的详细信息,wireshare您可以检查https://wiki.wireshark.org/SSL或调整此示例以适应您的情况分析 SSL/TLS 客户端 Hello 流量。如果您有 dropbox 证书,您可以将其导入到wireshark中以查看发生了什么。(有关 Dropbox 安全详细信息,您可以查看Dropbox 安全白皮书

\n\n

第三次编辑和第四次编辑- 有关 SSL/TSL 解密的详细信息。(在 Dropbox 支持自己的私钥之前不会工作。)

\n\n

来自 dropbox 支持的回答:

\n\n

Dropbox 不支持创建您自己的私钥。

\n\n

在第二个编辑部分中,我建议您可以通过wireshark查看SSL流量。由于保罗认为我建议你实际上应该破解DH key exchange,这在目前的知识下是不可能的,所以我想纠正它。

\n\n

我想建议的是,如果您使用dropbox 业务 RSA和 RSA 身份验证,您可以尝试使用dropboxd with RSA key(守护进程 dropboxd 是闭源的,我无法检查源代码是否有该功能,并且可能是最好的解决方案是直接询问 dropbox.com)。

\n\n

如果可能的话,然后将其导入RSA keywireshark以查看当前正在传输的内容。

\n