파일을 삭제할 수 없습니다. 권한만 변경되었습니다. 이유는 무엇입니까?

파일을 삭제할 수 없습니다. 권한만 변경되었습니다. 이유는 무엇입니까?

파일을 삭제하려고 하는데 셸을 통해 제대로 작동하지만 다른 프로그램에서 스크립트를 호출하면 파일이 삭제되지 않고 권한이 이상한 것으로 변경됩니다.

$ touch example.txt
$ ls -la example.txt
-rw-r--r--  1 user users 0 Mar 24 21:49 example.txt
$ rm example.txt
$ ls -la example.txt
-r-S--S---  1 user users 0 Mar 24 21:49 example.txt

rm이 명령과 이 명령을 실행해 보았는데 파일을 다른 파일 시스템에 복사 mv하면 mv(파일을 복사한 다음 소스를 삭제하는 방식으로 작동함) 동일한 결과를 얻습니다. 권한이 항상 동일하지는 않습니다. 다음은 제가 본 것의 몇 가지 예입니다.

-r-S--S--T
-r-S--S---
-r-S-----T
------S--T

rm명령이 파일 삭제를 거부하고 권한만 변경하고 매번 권한을 무작위로 변경하게 만드는 원인은 무엇입니까 ?

새 셸에서 명령을 실행 하면 rm제대로 작동하지만 exec().

아무래도 일반 셸에서는 작동하는데 셸 내에서는 실패한다면 실행 환경에 문제가 있는 것 같은데 exec()어디서부터 살펴봐야 할지 조차 모르겠습니다. 모든 것이 동일한 폴더에서 동일한 사용자로 실행됩니다.

누구든지 이 동작이 발생하도록 하는 방법이나 정확히 무슨 일이 일어나고 있는지 알아내기 시작하는 방법에 대한 팁을 제공할 수 있습니까?

답변1

좋아, 방금 무슨 일이 일어났는지 깨달았어. 프로그램이 exec()백그라운드에서 작업을 실행하고 있었고 문제가 있는 mvor가 실행되었을 때 이전 명령이 여전히 실행되어 파일에서 작동하고 있었던 것으로 나타났습니다 .rm

그래서 일어나는 일은 다음과 같습니다:

  1. 첫 번째 프로그램은 파일을 열고 읽기 시작합니다.
  2. 해당 명령 mvrm실행되고 파일이 정상적으로 삭제됩니다.
  3. 첫 번째 프로그램은 파일을 다시 만들고 변경 사항을 기록합니다.

프로그램은 작업 중인 파일을 덮어쓰도록 설계되었기 때문에 쓰기 위해 파일을 열 때 어떤 권한도 제공되지 않고 기존 권한을 재사용하려고 합니다. 그러나 프로세스에서 파일이 삭제되었으므로 파일 권한을 지정하는 사용되지 않은 매개변수와 함께 메모리에 있는 임의의 숫자를 사용하여 새 파일이 생성됩니다.

첫 번째 명령이 완료될 때까지 두 번째 명령이 실행되지 않도록 프로세스를 변경하면 문제가 해결되었습니다.

관련 정보