쓰기 권한이 있는 파일을 연다고 가정해 보겠습니다. 동시에 권한을 변경하고 쓰기 권한을 제거한 후에도 여전히 일부 편집기에서 파일을 엽니다.
수정하고 저장하면 어떻게 되나요?
답변1
파일을 열 때 파일 권한을 확인합니다. 권한을 변경해도 파일이 열려 있는 프로세스가 파일로 수행할 수 있는 작업에는 영향을 미치지 않습니다. 경우에 따라 이는 추가 권한으로 시작하여 파일을 연 다음 해당 추가 권한을 제거하는 프로세스에서 작동합니다. 파일에 계속 액세스할 수는 있지만 다시 열 수는 없습니다.
그러나 편집자는 파일을 열어두지 않는 경우가 많습니다. 편집자가 문서를 열 때 뒤에서 일어나는 일은 편집자가 파일 내용을 메모리에 로드하고 파일을 닫는 것입니다. 문서를 저장하면 편집자가 파일을 열고 새 내용을 작성합니다.
편집자는 파일을 저장할 때 두 가지 전략 중 하나를 따를 수 있습니다. 새 파일을 만든 다음 해당 위치로 이동할 수 있습니다. 또는 기존 파일을 열고 이전 콘텐츠를 덮어쓸 수도 있습니다. 덮어쓰기의 장점은 파일의 권한과 소유권이 변경되지 않으며 읽기 전용 디렉터리에서도 작동한다는 것입니다. 덮어쓰기의 가장 큰 단점은 저장이 중간에 실패하면(편집기 충돌, 시스템 충돌, 디스크 가득 참...) 결국 문서가 잘린다는 것입니다. 다른 편집자는 다른 전략을 선택합니다. 좋은 편집자는 먼저 새로 작성한 다음 가능하면 이동하고 읽기 전용 디렉터리에만 덮어씁니다(다른 곳에 백업한 후).
편집자가 이동 전 새 정책을 따르는 경우 파일의 권한은 중요하지 않습니다. 편집자는 새 파일을 생성하고 이 디렉터리에 대한 쓰기 권한만 필요합니다. 두 가지 예외가 있습니다.끈끈한 비트, 파일의 소유권(권한은 아님)을 변경하면 프로세스가 새 파일을 제자리로 이동하지 못할 수 있습니다. 또 다른 예외는 삭제 권한을 지원하는 시스템입니다.ACL(예: OSX): 파일에 대한 삭제 권한을 취소하면 이동이 불가능해질 수 있습니다.
편집자가 덮어쓰기 정책을 따르는 경우 쓰기 권한을 취소하면 저장할 수 없게 됩니다. (그러나 기본적으로 재정의된 일부 편집기는 New Then Move로 대체될 수 있습니다.)
Vim에서는 닫아서 이 작업을 수행할 수 있습니다.backupcopy
옵션;당신은 또한 볼 수 있습니다"vi" 편집기에서 편집할 때 inode 값이 변경되는 이유는 무엇입니까?. Emacs에서는 다음을 설정하여 재정의 정책을 강제할 수 있습니다.backup-by-copying
바꾸다도착하다 t
.
답변2
원하는 대로 편집할 수 있지만 저장하려고 하면 편집자가 파일을 쓸 수 없다고 불평합니다. 편집자가 백업 파일을 생성하면 변경 사항이 분명히 백업 파일에 저장됩니다.
편집자에 따라 이를 재정의할 수 있습니다. 예를 들어, 내가 파일의 소유자인 경우 또는 명령(쓰기 작업을 강제로 적용하는 방법)을 입력하여 vim
쓰기 불가능한 파일에 저장할 수 있습니다 . 예를 들어 다른 편집기에서는 파일을 저장할 수 없지만 대신 옵션을 제공합니다.root
:w!
!
gedit
Save As...
고쳐 쓰다
감사해요사회복지부로부터의 코멘트아래에서 이 동작은 실제로 편집기가 설계된 방식으로 인해 발생한다는 점에 유의해야 합니다. 실제로 버퍼를 파일에 쓰기로 결정할 때까지 임시 파일(버퍼)을 사용하여 모든 편집 내용을 보관합니다.