Cygwin bash sed mengunci file saya


12

Ketika saya mengubah file di cygwin bash dengan perintah sed, file tersebut akan terkunci.

Mereproduksi:

  1. Buka cmddan cdke direktori non-pengguna (fe temp)
  2. echo aaa > test.txt
  3. Buka di texteditor, tambahkan baris, coba simpan => karya
  4. %CYGWIN_HOME%\bin\bash -c "sed -i 's/aaa/bbb/' test.txt"
  5. Di texteditor, tambahkan baris lain dan coba simpan => "Akses ditolak"

WTF ?! Bagaimana saya bisa menyimpan file tanpa mengunci, atau melepaskan pegangan file sesudahnya?

  • Izin keamanan Windows tampaknya benar-benar kacau pada file:

    Izin sebelumnya:

    izin sebelumnya (Gambar!)

    Izin setelah:

    izin setelah (Gambar!)

  • Namun itu berfungsi di direktori pengguna ( Desktop)

  • Saya memeriksa file dengan LockHunter tetapi tidak ada proses yang muncul untuk mengunci file
  • Cygwin FAQ menyebutkan gangguan dengan beberapa program. Itu mencoba menghapus Antivir dan Catalyst dan me-reboot.
  • Mencoba UnxTools (macet), GnuWin32 (tidak mendukung substitusi inplace), Interex (pemasang tidak mendukung W7 Pro) ... * sigh *

2
Itu hanya terdengar seperti filosofi Windows yang kacau 'harus melindungi pengguna dari diri mereka sendiri', saya melihat itu setiap saat ketika mencoba untuk mencampur dan mencocokkan file Windows dan Cygwin / Linux. Semoga berhasil.
shellter

+1 lambdor. Saya memeriksa perilaku ini di Cygwin dan Anda benar. Ini sangat aneh. File tidak dikunci (mis. Di dalamnya tidak digunakan). Izin file hanya baca / izin baca tulis bisa dimodifikasi.

Saya telah menggunakan GnuWin32 sed pada W7 64bit dan tidak mengalami kesulitan dengan substitusi di tempat. Ini 4.2.1 sed yang saya unduh dengan proyek getGnuWin32 .
Spencer Rathbun

Jawaban:


8

sesuai dengan Mailinglist Cygwin , gunakan noacl untuk pemasangan

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

atau langsung di Windows ../cygwin/fstabsebelum memulai Cygwin bash

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

5

Saya memiliki masalah yang sama persis setelah menggunakan find dalam kombinasi dengan grep dan sed di bawah cygwin untuk memproses folder yang penuh dengan file kode sumber Java secara otomatis. Sed mengacaukan izin file NTFS dari file saya, yang masih persisten setelah reboot, jadi saya mencari cara mudah untuk memperbaikinya.

Saya benar-benar menemukan cara mudah untuk mendapatkan izin file kembali ke nilai lama. Ini dapat dilakukan untuk seluruh folder secara rekursif, yang penting bagi saya, karena saya telah memodifikasi begitu banyak file sekaligus (beberapa ratus). Sayangnya, saya hanya tahu nama Jerman untuk entri menu, jadi saya tidak yakin bagaimana entri menu (di Windows Explorer) disebut dalam bahasa Inggris yang benar.

Dalam bahasa Jerman, Anda melakukannya: Klik kanan pada folder induk folder tempat saya menggunakan "Eigenschaften" (menu konteks), "Sicherheit" (tab pada dialog), "Erweitert" (tombol), "Berechtigungen ändern ... "(tombol dengan UAC prompt), sekarang saya hanya memeriksa kedua kotak centang (yang atas sudah diatur, tetapi yang lebih rendah tidak, tetapi harus). Sekarang saya klik "OK" untuk tiga kali.

Perubahan sebenarnya yang dilakukan oleh ini adalah bahwa kotak centang bawah memaksa Windows untuk mengganti izin saat ini untuk konten folder secara rekursif dengan izin folder yang Anda klik kanan, sehingga semua izin yang rusak diperbaiki. Bekerja seperti pesona bagi saya, dan juga sangat cepat (hanya beberapa detik untuk banyak file).

Kemungkinan terjemahan (ditebak oleh saya):

  • "Eigenschaften" -> "Properties"
  • "Sicherheit" -> "Keamanan"
  • "Erweitert" -> "Advanced"
  • "Berechtigungen ändern ..." -> "Ubah izin ..."

2

Saya menjalankan serangkaian tes saya sendiri, dan, memang, izin file tersebut dapat diatur ke r-xr-x --- setelah perintah sed dan perintah cygwin berikutnya akan menganggap ini sebagai file hanya baca.

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>

Izin -r-xr-x --- ini mencegah penulisan selanjutnya oleh beberapa perangkat lunak:

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

Jadi, solusinya adalah menambahkan chmod tambahan pada file

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

yang aneh adalah topeng izin pertama '---------- + 1 bikeguy ????????' yang saya juga mengalami menggunakan Cygwin / Windows. Kemudian Anda menulis 'Ini -r-xr-x --- izin mencegah penulisan berikutnya oleh beberapa perangkat lunak:' Jadi mungkin 'beberapa perangkat lunak' berjalan di bawah grup yang berbeda DAN karena tidak ada akses melalui izin 'lain', yang menyebabkan masalah? Terima kasih, debugging ini telah membantu saya dengan masalah ini. Semoga beruntung untuk semua.
shellter

Ya, @shellter saya perhatikan itu juga ketika saya meneliti jawabannya. Saya berasumsi bahwa baris '----------- +' berarti tidak ada keamanan (sehingga Anda memiliki akses penuh) sedangkan '-r-xr-x --- +' berarti keamanan ada di mana akses tulis hilang. Jika saya melakukan chmod 000 saya juga akan mendapatkan '---------- +' tetapi kali ini pasti ada keamanan dan saya tidak memiliki hak istimewa untuk membaca atau menulis file ini.

Saya menggunakan git versi 1.9.5.msysgit.1, saya juga melihat masalah yang sama, saya menggunakan chmod 777 test.txtperintah untuk menyelesaikan masalah ini.
ollydbg23
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.