Cygwin 没有将 Windows 共享视为文件夹 - 没有“d”属性?

Cygwin 没有将 Windows 共享视为文件夹 - 没有“d”属性?

我从 StackOverflow 迁移了这个问题,因为它确实超出了他们通常喜欢的编程问题的范围,所以希望我能在这里找到更合适的受众......

我在 Windows Server 2008/64 上安装了 Cygwin 1.7,以支持自动文件传输设置。虽然基本安装总体上按预期工作,但我有一个奇怪的问题必须解决。

通过 ssh 从 Windows 命令提示符登录到服务器后,我对服务器的 UNC 路径执行“ls -l”,例如:

$ ls //servername

这将返回该服务器上的共享列表;但是,列出的某些共享没有设置“d”(目录)属性 - Cygwin 仅将它们视为常规文件。因此,尝试 cd 到共享路径会失败,并出现“不是目录”错误。但是,针对该共享名称的 ls 可以工作。

在某些情况下,共享及其底层文件夹的名称均包含一个空格,因此这是我的第一个怀疑,但同一台机器上的其他共享在共享或文件夹名称中没有空格,并且表现出相同的行为。

以下是 ls 命令的代表性但精简的列表,其中实际共享/服务器/所有者名称根据需要替换为 ShareNameN、servername 或 UserName。UserName 是 ssh 用户会话的 UserName。

$ ls -l //servername
total 33636078380235
drwxrwxrwx+ 1 Administrators Domain Users                 0 Nov 26 10:35 ShareName1
-rw-r--r--  1 UserName       Domain Users 18193726281664696 Apr 22  2009 ShareName2
-rw-r--r--  1 UserName       Domain users 18189229448232975 Aug  4  1909 Share Name3

$ ls -l //servername/ShareName2
//servername/ShareName2

$ cd //servername/ShareName2
-bash: cd: //servername/ShareName2: Not a directory

$ ls //servername/"Share Name3"
//servername/Share Name3

$ cd //servername/"Share Name3"
-bash: cd: //servername/Share Name3: Not a directory

我尝试了引用 UNC 路径名的其他一些排列,验证了共享和底层文件夹的权限,但到目前为止,没有成功。用户是通过实际密码进行身份验证的,而不是通过证书。

我很可能忽略了一些明显的东西,所以如果有人能发现我的错误,我将不胜感激!

编辑:我刚刚观察到一个有趣的模式,这可能是导致这个问题的一个因素

我刚刚发现,那些显示创建日期不是最近几个月的共享(其中列出的是时间而不是年份)也没有通过“ls”命令设置目录属性。所有列出时间的共享都设置了目录属性,并且可以通过 cd 命令正常工作……

答案1

我已经确定了这个问题的原因,这要感谢好用的 ProcMon。在枚举共享时,ProcMon 在尝试打开/查询失败的共享时显示“访问被拒绝”,但在成功打开/查询的共享时显示“成功”。

用于 ssh 进入主题服务器的帐户没有对相关共享的读取权限。授予帐户对共享的读取权限解决了主题行为。

相关内容