sed 명령으로 cygwin bash에서 파일을 변경하면 파일이 잠 깁니다.
낳다:
- 사용자 가 아닌 디렉토리 열기
cmd
및 열기 (fe )cd
temp
echo aaa > test.txt
- 텍스트 편집기에서 열고 줄을 추가하고 저장하려고합니다 => 작동
%CYGWIN_HOME%\bin\bash -c "sed -i 's/aaa/bbb/' test.txt
“- 텍스트 편집기에서 다른 줄을 추가하고 저장하려고 시도하십시오 => “액세스 거부”
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/fstab
Cygwin 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>