12

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?

  • 11
    Why do you have a - in front of 644 ? Try sudo chmod 644 my_file. -644 will remove the rights. – Soren A May 28 at 12:46
34

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.