Cygwin bash sed ล็อคไฟล์ของฉัน


12

เมื่อฉันเปลี่ยนไฟล์ใน cygwin bash ด้วยคำสั่ง sed ไฟล์จะถูกล็อค

ทำซ้ำ:

  1. เปิดcmdและcdสู่ไดเรกทอรีที่ไม่ใช่ผู้ใช้ (fe temp)
  2. echo aaa > test.txt
  3. เปิดใน texteditor เพิ่มบรรทัดลอง save => works
  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 โชคดี.
shellter

+1 ลูกแกะ ฉันตรวจสอบพฤติกรรมนี้ใน Cygwin แล้วและคุณพูดถูก นี่มันแปลก ๆ ไฟล์ไม่ถูกล็อค (เช่นที่ไม่ได้ใช้งาน) สิทธิ์ของไฟล์อ่านอย่างเดียว / อ่านเขียนได้รับการแก้ไข

ฉันใช้ GnuWin32 sed บน W7 64 บิตและไม่มีปัญหากับการแทนที่แบบเดิม มัน sed 4.2.1 ซึ่งฉันดาวน์โหลดกับโครงการ getGnuWin32
Spencer Rathbun

คำตอบ:


8

สอดคล้องกับCygwin Mailinglistใช้noaclสำหรับติดตั้ง

$ mount -o binary,posix=0,user,noacl C:/tmp /mnt/tmp

หรือโดยตรงใน Windows ../cygwin/fstabก่อนเริ่ม Cygwin bash

C:/tmp /mnt/tmp ntfs binary,posix=0,user,noacl 0 0

5

ฉันมีปัญหาเดียวกันหลังจากใช้ find ร่วมกับ grep และ sed ภายใต้ cygwin เพื่อประมวลผลโฟลเดอร์ที่เต็มไปด้วยไฟล์ซอร์สโค้ด Java โดยอัตโนมัติ มีความยุ่งเหยิง messed up สิทธิ์ไฟล์ NTFS ของไฟล์ของฉันซึ่งยังคงถาวรหลังจากรีบูตดังนั้นฉันค้นหาวิธีที่ง่ายในการแก้ไขปัญหานี้

ฉันพบวิธีง่าย ๆ ในการรับการอนุญาตไฟล์กลับสู่ค่าเดิม มันสามารถทำได้สำหรับทั้งโฟลเดอร์ซ้ำซึ่งเป็นสิ่งสำคัญสำหรับฉันเนื่องจากฉันได้แก้ไขไฟล์จำนวนมากในครั้งเดียว (หลายร้อย) น่าเศร้าที่ฉันรู้ชื่อภาษาเยอรมันสำหรับรายการเมนูเท่านั้นดังนั้นฉันจึงไม่แน่ใจว่าชื่อเมนู (ใน Windows Explorer) เรียกว่าเป็นภาษาอังกฤษที่ถูกต้อง

ในภาษาเยอรมันคุณทำ: คลิกขวาบนโฟลเดอร์หลักของโฟลเดอร์ที่ฉันใช้ sed, "Eigenschaften" (เมนูบริบท), "Sicherheit" (แท็บในกล่องโต้ตอบ), "Erweitert" (ปุ่ม), "Berechtigungen ändern ... "(ปุ่มที่มีพรอมต์ UAC) ตอนนี้ฉันแค่ทำเครื่องหมายที่ช่องทำเครื่องหมายทั้งสอง (ส่วนบนถูกตั้งค่าไว้แล้ว แต่ตัวล่างไม่ได้ แต่ต้องเป็น) ตอนนี้ฉันคลิกที่ "ตกลง" สามครั้ง

การเปลี่ยนแปลงจริงที่กระทำโดยสิ่งนี้คือช่องทำเครื่องหมายด้านล่างบังคับให้ Windows เปลี่ยนสิทธิ์ปัจจุบันสำหรับเนื้อหาของโฟลเดอร์ซ้ำด้วยสิทธิ์ของโฟลเดอร์ที่คุณคลิกขวาคลิกขวาดังนั้นสิทธิ์ที่เสียทั้งหมดจะได้รับการแก้ไข ทำงานเหมือนมีเสน่ห์สำหรับฉันและมันก็เร็วมาก ๆ (เพียงไม่กี่วินาทีสำหรับไฟล์จำนวนมาก)

การแปลที่เป็นไปได้ (เดาโดยฉัน):

  • "Eigenschaften" -> "คุณสมบัติ"
  • "Sicherheit" -> "ความปลอดภัย"
  • "Erweitert" -> "ขั้นสูง"
  • "Berechtigungen ändern ... " -> "เปลี่ยนการอนุญาต ... "

2

ฉันรันชุดการทดสอบของตัวเองและแน่นอนว่าสิทธิ์ของไฟล์จะได้รับการตั้งค่าเป็น r-xr-x --- หลังจากคำสั่ง sed และคำสั่ง cygwin ที่ตามมาจะรับรู้ว่านี่เป็นไฟล์แบบอ่านอย่างเดียว

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 --- +' หมายถึงความปลอดภัยที่มีอยู่เมื่อการเข้าถึงการเขียนเป็น หายไป หากฉันทำเงินได้ 1,000 ฉันจะได้รับ '---------- +' แต่คราวนี้มีความปลอดภัยแน่นอนและฉันไม่มีสิทธิ์อ่านหรือเขียนไฟล์นี้

ฉันใช้ git รุ่น 1.9.5.msysgit.1 ฉันเห็นปัญหาเดียวกันฉันใช้chmod 777 test.txtคำสั่งเพื่อแก้ไขปัญหานี้
ollydbg23
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.