글쓴이 보관물: 소장 마

Cygwin bash sed는 파일을 잠급니다. aaa > test.txt 텍스트 편집기에서

sed 명령으로 cygwin bash에서 파일을 변경하면 파일이 잠 깁니다.

낳다:

  1. 사용자아닌 디렉토리 열기 cmd및 열기 (fe )cdtemp
  2. echo aaa > test.txt
  3. 텍스트 편집기에서 열고 줄을 추가하고 저장하려고합니다 => 작동
  4. %CYGWIN_HOME%\bin\bash -c "sed -i 's/aaa/bbb/' test.txt
  5. 텍스트 편집기에서 다른 줄을 추가하고 저장하려고 시도하십시오 => “액세스 거부”

WTF ?! 잠그지 않고 파일을 어떻게 사용하거나 나중에 파일 핸들을 해제 할 수 있습니까?

  • Windows 보안 권한이 파일에 완전히 고정 된 것으로 보입니다.

    이전의 권한 :

    이전의 권한 (이미지!)

    이후 권한 :

    (이미지!) 이후의 권한

  • 그러나 사용자 디렉토리 ( Desktop) 에서 작동합니다.

  • LockHunter로 파일을 확인했지만 파일을 잠그는 프로세스가 나타나지 않습니다.
  • Cygwin FAQ 에는 일부 프로그램과의 간섭이 언급되어 있습니다. Antivir와 Catalyst를 제거하고 재부팅을 시도했습니다.
  • 시도 UnxTools (충돌), GnuWin32는 (인플레 이스 대체를 지원하지 않습니다 나오지도), INTEREX은 … * 한숨 (설치 W7 Pro는 지원하지 않습니다) *


답변

Cygwin Mailinglist에 해당하며 noacl 을 사용 하여 장착

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

또는 ../cygwin/fstabCygwin bash를 시작하기 전에 Windows에서 직접

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


답변

cygwin에서 grep 및 sed와 함께 find를 사용하여 Java 소스 코드 파일로 가득 찬 폴더를 자동으로 처리 한 후 정확히 같은 문제가 발생했습니다. Sed는 재부팅 후에도 계속 유지되는 파일의 NTFS 파일 권한을 엉망으로 만들었으므로 쉽게 해결할 수있는 방법을 찾았습니다.

실제로 파일 권한을 이전 값으로 되돌릴 수있는 쉬운 방법을 찾았습니다. 한 번에 너무 많은 파일을 수정했기 때문에 전체 폴더에 대해 재귀 적으로 수행 할 수 있습니다 (수백 개). 안타깝게도 메뉴 항목의 독일어 이름 만 알고 있으므로 Windows 탐색기의 메뉴 항목이 올바른 영어로 어떻게 호출되는지 잘 모르겠습니다.

독일어에서 할 수있는 작업 : sed, “Eigenschaften”(컨텍스트 메뉴), “Sicherheit”(대화 상자의 탭), “Erweitert”(버튼), “Berechtigungen ändern …를 사용한 폴더의 상위 폴더를 마우스 오른쪽 버튼으로 클릭하십시오. “(UAC 프롬프트가 표시된 버튼), 이제 두 확인란을 모두 선택합니다 (위쪽은 이미 설정되어 있지만 아래쪽은 설정되어 있지 않지만 설정되어 있어야 함). 이제 “확인”을 세 번 클릭하십시오.

실제 변경 사항은 아래쪽 확인란을 선택하면 Windows가 폴더 내용에 대한 현재 권한을 마우스 오른쪽 버튼으로 클릭 한 폴더의 권한으로 재귀 적으로 바꾸어 모든 깨진 권한이 수정된다는 것입니다. 나를 위해 매력처럼 일했고 정말 빠릅니다 (많은 파일의 경우 몇 초 만).

가능한 번역 (나에 의해 추측) :

  • “Eigenschaften”-> “속성”
  • “Sicherheit”-> “보안”
  • “Erweitert”-> “고급”
  • “Berechtigungen ändern …”-> “권한 변경 …”

답변

필자는 자체 테스트 세트를 실행했으며 실제로 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>


답변