Cygwin bash sed kilitler benim dosyaları


12

Sed komutuyla cygwin bash içindeki dosyaları değiştirdiğimde dosya kilitlenir.

yeniden:

  1. Açık cmdve cdhiç olmayan kullanıcı dizinine (fe temp)
  2. echo aaa > test.txt
  3. Texteditor içinde açın, satır ekleyin, kaydetmeyi deneyin => çalışır
  4. %CYGWIN_HOME%\bin\bash -c "sed -i 's/aaa/bbb/' test.txt"
  5. Texteditor uygulamasına başka bir satır ekleyin ve kaydetmeyi deneyin => "Erişim reddedildi"

O NE LAN?! Bir dosyayı kilitlemeden nasıl bastırabilirim veya daha sonra dosya tanıtıcılarını nasıl serbest bırakabilirim?

  • Windows güvenlik izinleri dosyada tamamen kapalı görünüyor:

    Önceki izinler:

    önceki izinler (Resim!)

    Şu tarihten sonraki izinler:

    sonrası izinler (Resim!)

  • Ancak kullanıcı dizininde ( Desktop) çalışır

  • Dosyayı LockHunter ile kontrol ettim ancak dosyayı kilitlemek için hiçbir işlem görünmüyor
  • Cygwin SSS , bazı programlarla etkileşimlerden bahseder. Antivir ve Catalyst'i kaldırıp yeniden başlatmayı denedi.
  • Çalışılıyor UnxTools (çökme), GnuWin32 (INPLACE ikame desteklemez sed), INTEREX ... * sigh (yükleyici W7 Pro desteklemez) *

2
Bu sadece Windows felsefesi 'kullanıcıları kendilerinden korumalı' gibi görünüyor, her zaman Windows ve Cygwin / Linux dosyalarını karıştırmaya ve eşleştirmeye çalışırken görüyorum. İyi şanslar.
shellter

+1 lambdor. Cygwin'de bu davranışı kontrol ettim ve haklısın. Bu oldukça garip. Dosya kilitli değil (örn. Kullanımda değil). Dosya izinleri salt okunur / okuma yazma izinleri değiştirilir.

W7 64bit üzerinde GnuWin32 sed kullandım ve yerine ikame ile hiçbir sorun yoktu. GetGnuWin32 projesi ile indirdiğim sed 4.2.1 .
Spencer Rathbun

Yanıtlar:


8

tekabül eden Cygwin mailinglist kullanımı noacl montaj

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

veya doğrudan Windows'ta ../cygwin/fstabCygwin bash'ı başlatmadan önce

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

5

Java kaynak kodu dosyaları ile dolu bir klasörü otomatik olarak işlemek için grep ve sed ile cygwin altında birlikte kullandıktan sonra tam olarak aynı sorun vardı. Sed, yeniden başlatmanın ardından hala kalıcı olan dosyalarımın NTFS dosya izinlerini berbat etti, bu yüzden bunu düzeltmenin kolay bir yolunu aradım.

Aslında dosya izinlerini eski değerlere geri almanın kolay bir yolunu buldum. Bir kerede çok sayıda dosyayı değiştirdiğim için (birkaç yüz), tüm klasörler için özyinelemeli olarak yapılabilir. Ne yazık ki, sadece menü girişleri için almanca adlarını biliyorum, bu yüzden menü girişlerinin (Windows Gezgini'nde) nasıl doğru İngilizce olarak çağrıldığından emin değilim.

Almanca olarak şunları yaparsınız: sed kullandığım klasörün üst klasörüne sağ tıklayın, "Eigenschaften" (içerik menüsü), "Sicherheit" (iletişim kutusundaki sekme), "Erweitert" (düğme), "Berechtigungen ändern ... "(UAC komut istemine sahip düğme), şimdi her iki onay kutusunu da işaretliyorum (üstteki zaten ayarlanmış, ancak alt değil, ama olması gerekiyor). Şimdi üç kez "Tamam" ı tıklıyorum.

Bu şekilde yapılan gerçek değişiklik, alt onay kutusunun Windows'u klasör içeriği için geçerli izinleri, sağ tıklattığınız klasörün izinleriyle yinelemeli olarak değiştirmeye zorlamasıdır, böylece tüm kırık izinler sabittir. Benim için bir cazibe gibi çalıştı ve aynı zamanda gerçekten hızlı (çok sayıda dosya için sadece birkaç saniye).

Olası çeviriler (benim tarafımdan tahmin edildi):

  • "Eigenschaften" -> "Özellikler"
  • "Sicherheit" -> "Güvenlik"
  • "Erweitert" -> "Gelişmiş"
  • "Berechtigungen ändern ..." -> "İzinleri değiştir ..."

2

Kendi testler kümemi çalıştırdım ve gerçekten, sed komutundan sonra dosya izinleri r-xr-x --- olarak ayarlandı ve sonraki cygwin komutları bunu salt okunur bir dosya olarak algılayacak.

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>

Bu -r-xr-x --- izinleri, bazı yazılımların sonraki yazma işlemlerini engeller:

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

Bu nedenle, geçici çözüm dosyaya ek bir chmod eklemek olacaktır

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

garip olan ilk izinler maskesi '---------- + 1 bikeguy ????????' Cygwin / Windows kullanarak da karşılaşıyorum. Sonra 'These -r-xr-x --- izinleri bazı yazılımlar tarafından sonraki yazma işlemlerini engeller:' Belki de 'bazı yazılımlar' farklı bir grup altında çalışır VE 'diğer' izinleri üzerinden erişim olmadığından, sorun? Teşekkürler, bu hata ayıklama bana bu sorun ile yardımcı oldu. Hepinize iyi şanslar.
shellter

Evet, @shellter Cevabı araştırırken de fark ettim. '----------- +' satırının güvenlik olmadığı anlamına geldiğini varsaydım (bu nedenle tam erişiminiz var), '-r-xr-x --- +' yazma erişiminin olduğu yerlerde güvenlik var demektir eksik. Bir chmod 000 yapsaydım '---------- +' da alırım ama bu sefer kesinlikle güvenlik var ve bu dosyayı okuma veya yazma ayrıcalığım yok.

Git sürüm 1.9.5.msysgit.1 kullanıyorum, aynı sorunu da görüyorum, chmod 777 test.txtbu sorunu çözmek için komutu kullanıyorum .
ollydbg23
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.