'chmod -644' would set file permission to 000

I had a file with 644(-rw-r--r--) and wanted to change it to 664(-rw-rw-r--), after running:

sudo chmod -664 my_file

file permissions were set to 000(----------).

Trying to change the permissions to anything different than 000 seems to be not working. What am I missing here?


You are using -664, just use 664 instead. And never use sudo when you dont need to. If that's your file, you don't need sudo:

chmod 644 my_file

When you run chmod with a - before the mode, you will remove that mode. See man chmod (emphasis mine):

The operator + causes the selected file mode bits to be added to the existing file mode bits of each file; - causes them to be removed; and = causes them to be added and causes unmentioned bits to be removed except that a directory's unmentioned set user and group ID bits are not affected.

The numbers are:

  • 1: execute
  • 2: write
  • 4: read

So a file with 777 permissions means everyone has the right to do all three, since 1 + 2 + 4 = 7, and therefore setting the permissions to 7 means allowing read, write and execute.

If you start with a file whose mode is 777:

$ ls -l my_file 
-rwxrwxrwx 1 terdon terdon 0 May 28 13:45 my_file

And now run chmod -644, you will remove the bits 644, and end up with a file whose mode is 133:

$ chmod -644 my_file; ls -l my_file 
---x-wx-wx 1 terdon terdon 0 May 28 13:45 my_file

That's because you removed 6 (read (4) + write (2)) from the owner's permissions, leaving only 1 (execute) set, and 4 (read) from the group and other permissions. The result is a file with only execute (1) permissions for the owner, and write and execute (you unset 4, leaving 1 and 3) permissions for the rest.

Because your file presumably had the default permissions for new files, so 644, when you ran chmod -644 my_file, you removed all of the set permission bits and got a file with no permissions for anybody.

$ ls -l my_file 
-rw-r--r-- 1 terdon terdon 0 May 28 13:45 my_file
$ chmod -644 my_file
$ ls -l my_file 
---------- 1 terdon terdon 0 May 28 13:45 my_file