Cygwin bash sed锁定我的文件


12

当我使用sed命令更改cygwin bash中的文件时,文件被锁定。

复制:

  1. 打开cmdcd转到非用户目录(fe temp
  2. echo aaa > test.txt
  3. 在texteditor中打开,添加行,尝试保存=>作品
  4. %CYGWIN_HOME%\bin\bash -c "sed -i 's/aaa/bbb/' test.txt
  5. 在texteditor中,添加另一行并尝试保存=>“访问被拒绝”

WTF ?!如何在不锁定的情况下sed文件,或之后释放文件句柄?

  • Windows安全性权限似乎已完全固定在文件上:

    之前的权限:

    之前的权限(图片!)

    之后的权限:

    后的权限(图片!)

  • 但是它在用户目录(Desktop)中有效

  • 我使用LockHunter检查了文件,但似乎没有任何过程可以锁定文件
  • Cygwin常见问题解答提到了对某些程序的干扰。它尝试卸载Antivir和Catalyst并重新启动。
  • 尝试UnxTools(崩溃),GnuWin32(sed不支持就地替换),Interex(安装程序不支持W7 Pro)... *叹气*

2
这听起来像是严格的Windows理念,“必须保护用户免受自身侵害”,我发现,在尝试混合和匹配Windows和Cygwin / Linux文件时,总会遇到这种情况。祝好运。
剥壳机2012年

+1 Lambdor。我在Cygwin中检查了此行为,您是对的。这很奇怪。该文件未锁定(即未使用中)。文件权限为只读/读写权限被修改。

我在W7 64位上使用了GnuWin32 sed,就地替换没有问题。它是sed 4.2.1,是我随getGnuWin32项目下载的。
Spencer Rathbun

Answers:



5

将find与grep结合使用并在cygwin下使用sed自动处理充满Java源代码文件的文件夹后,我遇到了完全相同的麻烦。Sed弄乱了我文件的NTFS文件权限,该权限在重新启动后仍然保持不变,因此我寻找一种简单的方法来解决此问题。

实际上,我找到了一种简单的方法来将文件权限恢复为旧值。可以递归地对整个文件夹执行此操作,这对我来说很重要,因为我一次修改了很多文件(数百个)。可悲的是,我只知道菜单项的德语名称,因此我不确定菜单项(在Windows资源管理器中)如何用正确的英语来调用。

在德语中,您可以执行以下操作:右键单击我使用sed的文件夹的父文件夹,“ Eigenschaften”(上下文菜单),“ Sicherheit”(对话框中的选项卡),“ Erweitert”(按钮),“ Berechtigungenändern... ”(带有UAC提示的按钮),现在我只需选中两个复选框(上面的一个已经设置,但是下面的不是,但是必须)。现在,我单击“确定”三下。

这样做的实际变化是,下部的复选框强制Windows递归地用您右键单击的文件夹的权限替换文件夹内容的当前权限,因此所有损坏的权限都得到了修复。对我来说,它就像是一种魅力,而且速度也非常快(很多文件只有几秒钟)。

可能的翻译(我猜):

  • “ Eigenschaften”->“属性”
  • “ Sicherheit”->“安全性”
  • “ Erweitert”->“ Advanced”
  • “ Berechtigungenändern...”->“更改权限...”

2

我运行了自己的一组测试,确实,在sed命令和后续的cygwin命令将其视为只读文件之后,确实将文件的权限设置为r-xr-x-。

C:\Temp>echo aaa > test.txt
C:\Temp>ls -l
total 1
----------+ 1 bikeguy ???????? 6 Feb 21 08:51 test.txt
C:\temp>sed -i 's/aaa/bbb/' test.txt
C:\temp>cat test.txt
bbb
C:\temp>ls -l test.txt
-r-xr-x---+ 1 bikeguy mkgroup-l-d 5 Feb 21 08:52 test.txt
C:\temp>

这些-r-xr-x--权限确实阻止了某些软件的后续写入:

C:\temp>echo xxx > test.txt
Access is denied.
C:\temp>

因此,解决方法是在文件上添加其他chmod

C:\temp>chmod 777 test.txt
C:\temp>echo xxx > test.txt
C:\temp>

奇怪的是第一个权限掩码'---------- + 1 bikeguy ????????' 我也遇到了使用Cygwin / Windows的问题。然后,您编写“这些-r-xr-x ---权限确实会阻止某些软件的后续写入:”因此,也许“某些软件”在不同的组下运行,并且由于没有通过“其他”权限的访问权,因此问题?谢谢,这个调试帮助我解决了这个问题。祝你们好运。
Shellter

是的,@ shellter在研究答案时也注意到了这一点。我假设“ ----------- +”行表示不存在安全性(因此您具有完全访问权限),而“ -r-xr-x --- +”表示存在写访问权限的安全性失踪。如果我执行chmod 000,我也会得到'---------- +',但这一次肯定有安全性,并且我没有读取或写入此文件的特权。

我正在使用git版本1.9.5.msysgit.1,也看到了相同的问题,我使用chmod 777 test.txt命令来解决此问题。
ollydbg23,2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.