有时候,cygwin 似乎会创建一些根本无法删除的文件。从 cygwin 中删除时,删除不会发生(rm
什么也没说,但文件仍然存在)。从资源管理器中尝试时,它说我需要管理员的权限(我是管理员,下拉菜单中的删除项有一个盾牌,我猜这意味着我以管理员权限尝试此操作)。从 total commander 尝试时,我首先收到错误消息,并被询问是否要以管理员身份重试,然后我似乎仍然没有删除文件的权限。
如果我尝试查看文件,也会遇到同样的问题。当我尝试查看安全属性时出现问题 - 必须按下盾牌按钮才能成为管理员,然后被告知除非我取得所有权(我不允许这样做),否则不允许查看它。
使用 cygwin shell 我可以查看但不能修改 ACL(即使以管理员身份运行 shell):
$ getfacl makefile.wine
# file: makefile.wine
# owner: Unknown+User
# group: Unknown+Group
user::rw-
group::r--
other:---
$ setfacl -b makefile.wine
setfacl: Permission denied
但是,当重新启动 Windows 时,删除文件没有任何问题。
cygwin 为什么/如何创建这些文件(我发现其中一个是在运行时创建的sed -i
)?我该如何避免这种情况?最后,有什么明智的方法可以删除该文件吗?
答案1
cygwin 不应再创建不可删除的文件,至少现在不会了。假设您已更新安装(cygwin 2.5.1):使用以下命令检查文件 ACL:getfacl "filename" 您可以使用以下命令清理 ACL 权限:setfacl -b "filename" 有关详细信息,请参阅 getfacl 和 setfacl 手册。其他阅读材料 https://cygwin.com/cygwin-ug-net/ntsec.html#ntsec-files
正如你从 getfacl 中得到的
所有者:未知+用户
群组:未知+群组
这意味着 cygwin 无法识别所有者。两种可能性:
1) Windows 计算机中的所有者不再有效
2) 您正在使用某种类型的 VPN 或域连接,并且 Windows 数据库用户在特定条件下无法访问。
作为 Windows 管理员,您应该能够更改所有者,也可以从 cygwin 更改。
答案2
请尝试使用该takeown
命令。在管理员权限 CMD shell 中,发出以下命令,
takeown /F makefile.wine
现在看看你是否可以把它移除,
rm makefile.wine
更新:感谢您的报告,这是我的疏忽。执行命令后takeown
,您可以在资源管理器中右键单击该文件以查看所有权信息并从那里进行调整吗?
答案3
答案4
我尝试使用 takeown 命令从 cmd 窗口运行的方法,如
https://wasteofserver.com/cygwin-created-file-cannot-delete/
因此我在这里记录问题和方法以防有人遇到同样的问题。
我下载了 Skype 会议的视频,但无法播放。
也不能从 Windows 资源管理器中删除它:
因此我运行 Cygwin 来检查该文件的权限:
tcsh 31> ls -l Video-20220524_154638-会议\ 录音.mp4 -rw-r----- 1 未知+用户 未知+组 113770496 5 月 24 日 12:10 'Video-20220524_154638-会议录音.mp4'
其中包含“未知用户”和“未知组”。
我从 Windows 打开了命令行(cmd)窗口:单击“开始”,然后在搜索框中键入“cmd”(不带引号)。
在 cmd 窗口中,导航到下载的视频文件所在的下载文件夹:
C:\Users\vql>cd 下载
在视频文件上运行带有选项 /r(删除)/f(强制)的命令 takeown:
C:\Users\vql\Downloads>takeown /r /f "Video-20220524_154638-Meeting Recording.mp 4" 错误:拒绝访问。
C:\用户\vql\下载>
它不起作用。
更新:退出 Skype 后,我可以删除视频文件。所以 Skype 只是保留了视频文件,直到我退出 Skype 后才能删除。