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和重新执行的停止使用调试器并没有透露什么传输现在。停止和启动守护进程会导致重新索引和重新开始同步。这可能会导致要传输的文件集不同。
有什么建议?
如果你使用的是linux,这很容易。在同步过程中您可以执行以下操作:
\n\nfind $HOME/dropbox_sync_dir -type f -exec dropbox.py file status -a \'{}\' \\; | grep \'syncing\'
解释细节:
\n\nfind <path> -type f -exec dropbox.py ... \'{}\' \\;dropbox.py 在每个文件或当前目录下 运行。
\n\n\n请注意,大括号括在单引号中,以防止它们被解释为 shell 脚本标点符号。分号同样通过使用反斜杠进行保护,尽管在这种情况下也可以使用单引号。
\n
有关man find页面的更多信息
\n\ndropbox.py file status -a来自dropbox Linux 客户端手册:
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 "."\nRun Code Online (Sandbox Code Playgroud)\n\n别名包括 stat。
| grep \'syncing\'
搜索“正在同步”字符串。
\n\n注意:.py 结尾不应该是强制性的,应该有一个别名,所以只写就dropbox足够了。
第一次编辑- 由于 Paul 对 dropboxd(守护进程)与 dropbox.py 的评论而重新编辑。
\n\n当我完成待处理的任务时,我会尝试自己调试它。
\n\n应该通过(python 调试器)dropbox.py进行调试,以了解更多信息,请访问python debugger。pdb
终于在保罗的评论之后我明白了问题的核心在哪里。他想要查看当前访问的文件,甚至是 Dropbox 同步客户端正在传输的文件。
\n\n您可以找到当前使用的 Dropbox 客户端使用的所有文件:
\n\nls -thal /proc/`pgrep dropbox`/fd | egrep -v \'socket:|pipe:|anon_inode|/dev/\'\nRun Code Online (Sandbox Code Playgroud)如果您看不到任何内容,则表示客户端可能\n有问题。我建议执行strace。
\n\nTo 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`\nRun Code Online (Sandbox Code Playgroud)如果您想更深入,您可以将调试器附加gdb到您的strace会话中。
如果您不熟悉这个过程,您可以查看,例如,这篇关于unixstrace和gdb.
只是一个快速帮助:
\n\n当您使用以下命令开始跟踪时:(strace dropboxd运行 pid 将为 501)\n然后您可以通过以下方式附加到它:
$ gdb --quiet\n(gdb) attach 501\nRun Code Online (Sandbox Code Playgroud)\n\n例如,使用不同的 cli 客户端,例如dbxcli。
\n\n第二次编辑和第四次编辑- 在 Dropbox 支持自己的私钥之前不会工作。
\n\nDropbox 不支持创建您自己的私钥。
\n\n我突然想到,即使通过网络监控工具(如 )也应该可以检查传输的内容wireshark。
由于 Dropbox 客户端使用 SSL/TSL(或 AES)Dropbox 安全架构,因此您应该拥有要检查的密钥。
\n\n有关如何使用的详细信息,wireshare您可以检查https://wiki.wireshark.org/SSL或调整此示例以适应您的情况分析 SSL/TLS 客户端 Hello 流量。如果您有 dropbox 证书,您可以将其导入到wireshark中以查看发生了什么。(有关 Dropbox 安全详细信息,您可以查看Dropbox 安全白皮书。
第三次编辑和第四次编辑- 有关 SSL/TSL 解密的详细信息。(在 Dropbox 支持自己的私钥之前不会工作。)
\n\nDropbox 不支持创建您自己的私钥。
\n\n在第二个编辑部分中,我建议您可以通过wireshark查看SSL流量。由于保罗认为我建议你实际上应该破解DH key exchange,这在目前的知识下是不可能的,所以我想纠正它。
我想建议的是,如果您使用dropbox 业务 RSA和 RSA 身份验证,您可以尝试使用dropboxd with RSA key(守护进程 dropboxd 是闭源的,我无法检查源代码是否有该功能,并且可能是最好的解决方案是直接询问 dropbox.com)。
如果可能的话,然后将其导入RSA key到wireshark以查看当前正在传输的内容。
| 归档时间: |
|
| 查看次数: |
3765 次 |
| 最近记录: |