先日、いつものように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
-私は特別なオプションを使用して最初からコンパイルしていません。