나는 다른 날에 평소와 같이 Vim을 사용하고 있었고 이상한 것을 발견했습니다. 내가 한 일은 다음과 같습니다.
~$ touch testfile
~$ ls -l | grep testfile
-rw-r--r-- 1 username groupname 0 Jul 23 10:00 testfile
~$ vim testfile
그런 다음 변경하고 저장하고 종료했습니다 :wq
. 꽤 정상입니다. 그러나 다음과 같습니다.
~$ sudo chown root:root testfile
~$ sudo chmod 644 testfile
~$ sudo -k
~$ ls -l | grep testfile
-rw-r--r-- root root 0 Jul 23 10:02 testfile
~$ vim testfile
따라서 root는 r / w 액세스 권한이 있어야하며 다른 모든 사용자는 읽기만해야합니다. 파일을 편집하고 저장을 시도하십시오-당신은 할 수 없습니다. 의도 한대로 작동합니다. 그러나으로 저장 :w!
하면 vim은 파일 소유권을 username : usergroup으로 다시 변경하고 파일이 저장됩니다. 이 작업을 수행하더라도
~$ sudo chmod 444 testfile
~$ sudo -k
~$ ls -l | grep testfile
-r--r--r-- 1 root root 0 Jul 23 10:06 testfile
~$ vim testfile
여전히 덮어 쓸 수 있습니다 :w!
! 무슨 일이야? vim이 어떻게 파일 소유권과 허가의 법칙을 어길 수 있습니까? 나는 vim의 도움말 페이지를 보면서 다음 :help :w
과 같이 말했습니다 .
:w[rite]! [++opt] Like ":write", but forcefully write when 'readonly' is set or there is another reason why writing was refused.
Note: This may change the permission and ownership of the file and break (symbolic) links. Add the 'W' flage to 'cpoptions' to avoid this.
이전에는 사용하지 말아야 할 때 vim에서 파일에 쓸 수 없었으므로 질문의 진정한 핵심은 vim에서 파일을 편집 할 수 없게 만드는 방법과 파일을 기반으로하지 않는 이유입니다. 시스템 권한 (예 : 예상 한 것) 및 다른 편집기 (gedit, nano)가 사용할 수없는 파일을 편집하기 위해 vim에서 사용하는 메커니즘은 무엇입니까?
편집 : 내가 시도한 컴퓨터는 Linux 커널 3.15.5-2-ARCH를 사용하고 있습니다. Vim의 버전 번호는 7.4.373-1이며 다음 버전에 의해 설치된 버전 pacman
입니다. 특별한 옵션으로 처음부터 컴파일하지 않았습니다.