'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