Cygwin bash sed는 파일을 잠급니다.


12

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는 지원하지 않습니다) *

2
그것은 엉뚱한 Windows 철학이 '사용자를 스스로 보호해야한다'는 것처럼 들리지만, Windows와 Cygwin / Linux 파일을 혼합하고 일치시킬 때 항상 그렇습니다. 행운을 빕니다.
shellter

람 도르 +1 Cygwin 에서이 동작을 확인했으며 옳습니다. 꽤 이상합니다. 파일이 잠기지 않았습니다 (예 : 사용하지 않는 것처럼). 파일 권한 읽기 전용 / 읽기 쓰기 권한이 수정됩니다.

W7 64 비트에서 GnuWin32 sed를 사용했으며 그 자리에서 대체하는 데 아무런 문제가 없었습니다. getGnuWin32 프로젝트 와 함께 다운로드 한 4.2.1입니다 .
스펜서 Rathbun

답변:


8

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

5

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

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

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

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

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

  • "Eigenschaften"-> "속성"
  • "Sicherheit"-> "보안"
  • "Erweitert"-> "고급"
  • "Berechtigungen ändern ..."-> "권한 변경 ..."

2

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

이상한 것은 첫 번째 사용 권한 마스크입니다. '---------- + 1 bikeguy ????????' Cygwin / Windows를 사용합니다. 그런 다음 '이 -r-xr-x --- 권한은 일부 소프트웨어의 후속 쓰기를 방지합니다'라고 작성합니다. 따라서 '일부 소프트웨어'는 다른 그룹에서 실행되고 '기타'권한을 통해 액세스 할 수 없기 때문에 문제? 감사합니다.이 디버깅은이 문제를 해결하는 데 도움이되었습니다. 모두에게 행운을 빕니다.
shellter

예, @ shellter 나는 대답을 연구 할 때도 그것을 알았습니다. '----------- +'행은 보안이 없음을 의미하므로 (모든 액세스 권한이 있음) '-r-xr-x --- +'는 쓰기 액세스가있는 보안이 존재 함을 의미합니다 잃어버린. chmod 000을 수행하면 '---------- +'도 얻을 수 있지만 이번에는 확실히 보안이 있으며이 파일을 읽거나 쓸 수있는 권한이 없습니다.

git 버전 1.9.5.msysgit.1을 사용하고 있으며 동일한 문제가 표시 chmod 777 test.txt됩니다.이 문제를 해결 하려면 명령을 사용하십시오 .
ollydbg23
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.