当您将WinSCP连接到包含符号链接的目录时,它会通过使用稍微不同的图标向您显示它是符号链接。例如。它不是一个文件夹,而是一个带箭头或其他文件夹的文件夹。
我的问题是...... WinSCP如何知道符号链接是文件夹的符号链接?
当SFTP进入目录时,客户端会发送SSH_FXP_READDIR
数据包。服务器以SSH_FXP_NAME
数据包响应。在我的测试中,似乎这个数据包中的数据对应于lstat - 而不是stat。即。如果您和权限属性1111 0000 0000 0000
,则获得1010 0000 0000 0000
(符号链接)而不是0100 0000 0000 0000
(目录)。
我的猜测是,WinSCP然后为每个符号链接发送SSH_FXP_STAT
,但也许它正在执行SSH_FXP_READLINK
。如果后者服务器将以SSH_FXP_NAME
响应 - 如果前者服务器将以SSH_FXP_ATTRS
响应(对于一个文件而不是x文件几乎是SSH_FXP_NAME
)。但话说回来,也许它完全在做其他事情。
记住WinSCP使用PuTTY我试图通过创建一个具有" Session logging"的PuTTY会话来查看它正在做什么。设置为" SSH数据包"。然后我尝试使用WinSCP连接到该会话,但没有创建putty.log文件。我没有在我最初运行PuTTY来更新会话的目录中看到它,也没有在C:\Program Files (x86)\WinSCP
中看到它。所以我不知道它在哪里。
有什么想法吗?
答案 0 :(得分:1)
WinSCP同时发送SSH_FXP_STAT
和SSH_FXP_READLINK
。
如果符号链接指向文件或目录,则SSH_FXP_STAT
查找。
SSH_FXP_READLINK
找出链接目标。
请参阅WinSCP log:
. 2015-07-20 11:00:15.837 Listing directory "...".
> 2015-07-20 11:00:15.837 Type: SSH_FXP_OPENDIR, Size: 53, Number: 11275
< 2015-07-20 11:00:15.894 Type: SSH_FXP_HANDLE, Size: 13, Number: 11275
> 2015-07-20 11:00:15.894 Type: SSH_FXP_READDIR, Size: 13, Number: 11532
< 2015-07-20 11:00:15.950 Type: SSH_FXP_NAME, Size: 431, Number: 11532
> 2015-07-20 11:00:15.950 Type: SSH_FXP_READDIR, Size: 13, Number: 11788
. 2015-07-20 11:00:15.950 Reading symlink "link".
> 2015-07-20 11:00:15.950 Type: SSH_FXP_READLINK, Size: 58, Number: 12051
> 2015-07-20 11:00:15.950 Type: SSH_FXP_STAT, Size: 58, Number: 12305
< 2015-07-20 11:00:16.005 Type: SSH_FXP_STATUS, Size: 28, Number: 11788
. 2015-07-20 11:00:16.005 Storing reserved response
< 2015-07-20 11:00:16.062 Type: SSH_FXP_NAME, Size: 41, Number: 12051
. 2015-07-20 11:00:16.062 Link resolved to "target.txt".
< 2015-07-20 11:00:16.062 Type: SSH_FXP_ATTRS, Size: 37, Number: 12305
< 2015-07-20 11:00:16.063 Status code: 1
> 2015-07-20 11:00:16.063 Type: SSH_FXP_CLOSE, Size: 13, Number: 12548