8

Recently, I read here about the :wq! command in vim. I don't understand how it can force-write a file without write permissions. This way, theoretically, one would be able to edit root files without permission. Shouldn't it be disallowed? Or does it write into a new file? I saw a similar question, but that is about motions and is very different.

P.S. I haven't tried the command for fear of messing up system files.

Zargles
  • 337
  • 1
  • 4
  • 9

3 Answers3

18

If you don't have permission to the file (e.g. you don't own the file), then it will not force the write. If you do have permission to the file, but it is a read-only file, then you can force-write it. It's as if you first change the file mode to writable, write your changes, and then change the file mode back to read-only.

yty
  • 515
  • 3
  • 11
  • 1
    I see. So, a file being read only is not entirely dependent on user privileges? – Zargles Sep 10 '18 at 04:36
  • 1
    Correct. You can make your own files read-only, to prevent accidental modifications, for example. – yty Sep 10 '18 at 04:41
  • 1
    To clarify: if you don't have permissions to write, but do have permissions to change the file's permissions. – Amadan Sep 10 '18 at 05:01
5

Do not be afraid, vim cannot grant you more rights than the OS would give you anyway. w! is useful to override read-only mode if you happened to open a file with the vim -R command or if you had made the file read-only before opening it with vim for yourself.

tif
  • 1,424
  • 10
  • 14
1

You should consider the directory permissions guys! I mean the directory which file is in it. As you should know, if you have write permission on a directory, you could remove all of the files in it, and create new files even with same names (like overwriting)!

When you modify read-only file with vi and you insert wq! to write changes, there would be two situations:

  1. You have write(w) permission on the directory
    • The main file would be deleted and new file with the same name would be written.
  2. You don't have write(w) permission on the directory
    • Nothing happens! You could not write or modify the file, and you should quit: q!.

So write permission on directory is important for read-only files!

Unique_boy96
  • 357
  • 5
  • 4