Cygwin bash sed khóa các tập tin của tôi


12

Khi tôi thay đổi tệp trong cygwin bash bằng lệnh sed, tệp sẽ bị khóa.

Tái sản xuất:

  1. Mở cmdcdvào thư mục không sử dụng (fe temp)
  2. echo aaa > test.txt
  3. Mở trong texteditor, thêm dòng, cố gắng lưu => hoạt động
  4. %CYGWIN_HOME%\bin\bash -c "sed -i 's/aaa/bbb/' test.txt"
  5. Trong texteditor, thêm một dòng khác và cố gắng lưu => "Truy cập bị từ chối"

WTF?! Làm thế nào tôi có thể sed một tập tin mà không khóa, hoặc giải phóng các xử lý tập tin sau đó?

  • Quyền bảo mật của Windows dường như bị vặn hoàn toàn trên tệp:

    Quyền trước:

    quyền trước (Hình ảnh!)

    Quyền sau:

    quyền sau (Hình ảnh!)

  • Tuy nhiên, nó hoạt động trong thư mục người dùng ( Desktop)

  • Tôi đã kiểm tra tệp bằng LockHunter nhưng không có quá trình nào xuất hiện để khóa tệp
  • Câu hỏi thường gặp của Cygwin đề cập đến các can thiệp với một số chương trình. Nó đã thử gỡ cài đặt Antivir và Catalyst và khởi động lại.
  • Đang dùng thử UnxTools (sự cố), GnuWin32 (sed không hỗ trợ thay thế tại chỗ), Interex (trình cài đặt không hỗ trợ W7 Pro) ... * thở dài *

2
Điều đó nghe có vẻ giống như triết lý Windows khó hiểu 'phải bảo vệ người dùng khỏi chính họ', tôi thấy rằng mọi lúc khi cố gắng trộn và khớp các tệp Windows và Cygwin / Linux. Chúc may mắn.
shellter

+1 lambdor. Tôi đã kiểm tra hành vi này ở Cygwin và bạn nói đúng. Điều này khá kỳ lạ. Các tập tin không bị khóa (tức là trong nó không được sử dụng). Các quyền truy cập tệp chỉ đọc / đọc ghi được sửa đổi.

Tôi đã sử dụng sed GnuWin32 trên W7 64 bit và không gặp vấn đề gì với việc thay thế vị trí. Đó là sed 4.2.1 mà tôi đã tải xuống với dự án getGnuWin32 .
Spencer Rathbun

Câu trả lời:


8

tương ứng với Cygwin Mailinglist , sử dụng noacl để gắn

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

hoặc trực tiếp trong Windows ../cygwin/fstabtrước khi bắt đầu bash Cygwin

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

5

Tôi đã gặp chính xác rắc rối tương tự sau khi sử dụng find kết hợp với grep và sed trong cygwin để tự động xử lý một thư mục chứa các tệp mã nguồn Java. Sed đã làm rối tung quyền truy cập tệp NTFS của các tệp của tôi, vẫn còn tồn tại sau khi khởi động lại, vì vậy tôi đã tìm kiếm một cách dễ dàng để khắc phục điều này.

Tôi thực sự tìm thấy một cách dễ dàng để lấy lại quyền truy cập tệp về các giá trị cũ. Nó có thể được thực hiện cho toàn bộ thư mục một cách đệ quy, điều này rất quan trọng đối với tôi, vì tôi đã sửa đổi rất nhiều tệp cùng một lúc (vài trăm). Đáng buồn thay, tôi chỉ biết tên tiếng Đức cho các mục menu, vì vậy tôi không chắc các mục menu (trong Windows Explorer) được gọi bằng tiếng Anh chính xác như thế nào.

Trong tiếng Đức, bạn thực hiện: Nhấp chuột phải vào thư mục mẹ của thư mục nơi tôi đã sử dụng sed, "Eigenschaften" (menu ngữ cảnh), "Sicherheit" (tab trong hộp thoại), "Erweitert" (nút), "Berarouigungen ändern ... "(Nút có dấu nhắc UAC), bây giờ tôi chỉ kiểm tra cả hai hộp kiểm (cái trên đã được đặt, nhưng cái dưới thì không, nhưng phải có). Bây giờ tôi bấm vào "OK" trong ba lần.

Thay đổi thực tế được thực hiện bởi điều này là hộp kiểm thấp hơn buộc Windows thay thế các quyền hiện tại cho nội dung thư mục theo cách đệ quy bằng các quyền của thư mục bạn đã bấm đúng, do đó tất cả các quyền bị hỏng đều được sửa. Làm việc như một cơ duyên đối với tôi, và cũng thực sự nhanh chóng (chỉ vài giây cho rất nhiều tệp).

Bản dịch có thể (đoán bởi tôi):

  • "Eigenschaften" -> "Thuộc tính"
  • "Sicherheit" -> "Bảo mật"
  • "Erweitert" -> "Nâng cao"
  • "Berechtigungen ändern ..." -> "Thay đổi quyền ..."

2

Tôi đã chạy bộ thử nghiệm của riêng mình và thực sự, các quyền của tệp được đặt thành r-xr-x --- sau khi lệnh sed và các lệnh cygwin tiếp theo sẽ coi đây là tệp chỉ đọc.

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>

Các quyền -r-xr-x --- này ngăn chặn việc ghi tiếp theo bởi một số phần mềm:

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

Vì vậy, cách giải quyết sẽ là thêm một chmod bổ sung vào tệp

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

điều kỳ lạ là mặt nạ quyền đầu tiên '---------- + 1 bikeguy ????????' mà tôi cũng sử dụng Cygwin / Windows. Sau đó, bạn viết 'Các quyền -r-xr-x --- này ngăn chặn việc ghi tiếp theo bởi một số phần mềm:' Vì vậy, có thể 'một số phần mềm' chạy dưới một nhóm khác VÀ vì không có quyền truy cập thông qua các quyền 'khác', điều đó gây ra vấn đề? Cảm ơn, việc gỡ lỗi này đã giúp tôi với vấn đề này. Chúc mọi người may mắn.
shellter

Vâng, @shellter Tôi cũng nhận thấy điều đó khi tôi đang nghiên cứu câu trả lời. Tôi giả sử rằng dòng '----------- +' có nghĩa là không có bảo mật tồn tại (vì vậy bạn có quyền truy cập đầy đủ) trong khi '-r-xr-x --- +' có nghĩa là bảo mật tồn tại trong đó quyền truy cập ghi còn thiếu. Nếu tôi đã thực hiện chmod 000, tôi cũng sẽ nhận được '---------- +' nhưng lần này chắc chắn có bảo mật và tôi không có đặc quyền để đọc hoặc ghi tệp này.

Tôi đang sử dụng phiên bản git 1.9.5.msysgit.1, tôi cũng thấy vấn đề tương tự, tôi sử dụng chmod 777 test.txtlệnh để khắc phục sự cố này.
ollydbg23
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.